Merge tag 'block-5.7-2020-04-10' of git://git.kernel.dk/linux-block
[linux-2.6-microblaze.git] / drivers / soundwire / bus.c
1 // SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
2 // Copyright(c) 2015-17 Intel Corporation.
3
4 #include <linux/acpi.h>
5 #include <linux/delay.h>
6 #include <linux/mod_devicetable.h>
7 #include <linux/pm_runtime.h>
8 #include <linux/soundwire/sdw_registers.h>
9 #include <linux/soundwire/sdw.h>
10 #include "bus.h"
11
12 /**
13  * sdw_add_bus_master() - add a bus Master instance
14  * @bus: bus instance
15  *
16  * Initializes the bus instance, read properties and create child
17  * devices.
18  */
19 int sdw_add_bus_master(struct sdw_bus *bus)
20 {
21         struct sdw_master_prop *prop = NULL;
22         int ret;
23
24         if (!bus->dev) {
25                 pr_err("SoundWire bus has no device\n");
26                 return -ENODEV;
27         }
28
29         if (!bus->ops) {
30                 dev_err(bus->dev, "SoundWire Bus ops are not set\n");
31                 return -EINVAL;
32         }
33
34         mutex_init(&bus->msg_lock);
35         mutex_init(&bus->bus_lock);
36         INIT_LIST_HEAD(&bus->slaves);
37         INIT_LIST_HEAD(&bus->m_rt_list);
38
39         /*
40          * Initialize multi_link flag
41          * TODO: populate this flag by reading property from FW node
42          */
43         bus->multi_link = false;
44         if (bus->ops->read_prop) {
45                 ret = bus->ops->read_prop(bus);
46                 if (ret < 0) {
47                         dev_err(bus->dev,
48                                 "Bus read properties failed:%d\n", ret);
49                         return ret;
50                 }
51         }
52
53         sdw_bus_debugfs_init(bus);
54
55         /*
56          * Device numbers in SoundWire are 0 through 15. Enumeration device
57          * number (0), Broadcast device number (15), Group numbers (12 and
58          * 13) and Master device number (14) are not used for assignment so
59          * mask these and other higher bits.
60          */
61
62         /* Set higher order bits */
63         *bus->assigned = ~GENMASK(SDW_BROADCAST_DEV_NUM, SDW_ENUM_DEV_NUM);
64
65         /* Set enumuration device number and broadcast device number */
66         set_bit(SDW_ENUM_DEV_NUM, bus->assigned);
67         set_bit(SDW_BROADCAST_DEV_NUM, bus->assigned);
68
69         /* Set group device numbers and master device number */
70         set_bit(SDW_GROUP12_DEV_NUM, bus->assigned);
71         set_bit(SDW_GROUP13_DEV_NUM, bus->assigned);
72         set_bit(SDW_MASTER_DEV_NUM, bus->assigned);
73
74         /*
75          * SDW is an enumerable bus, but devices can be powered off. So,
76          * they won't be able to report as present.
77          *
78          * Create Slave devices based on Slaves described in
79          * the respective firmware (ACPI/DT)
80          */
81         if (IS_ENABLED(CONFIG_ACPI) && ACPI_HANDLE(bus->dev))
82                 ret = sdw_acpi_find_slaves(bus);
83         else if (IS_ENABLED(CONFIG_OF) && bus->dev->of_node)
84                 ret = sdw_of_find_slaves(bus);
85         else
86                 ret = -ENOTSUPP; /* No ACPI/DT so error out */
87
88         if (ret) {
89                 dev_err(bus->dev, "Finding slaves failed:%d\n", ret);
90                 return ret;
91         }
92
93         /*
94          * Initialize clock values based on Master properties. The max
95          * frequency is read from max_clk_freq property. Current assumption
96          * is that the bus will start at highest clock frequency when
97          * powered on.
98          *
99          * Default active bank will be 0 as out of reset the Slaves have
100          * to start with bank 0 (Table 40 of Spec)
101          */
102         prop = &bus->prop;
103         bus->params.max_dr_freq = prop->max_clk_freq * SDW_DOUBLE_RATE_FACTOR;
104         bus->params.curr_dr_freq = bus->params.max_dr_freq;
105         bus->params.curr_bank = SDW_BANK0;
106         bus->params.next_bank = SDW_BANK1;
107
108         return 0;
109 }
110 EXPORT_SYMBOL(sdw_add_bus_master);
111
112 static int sdw_delete_slave(struct device *dev, void *data)
113 {
114         struct sdw_slave *slave = dev_to_sdw_dev(dev);
115         struct sdw_bus *bus = slave->bus;
116
117         pm_runtime_disable(dev);
118
119         sdw_slave_debugfs_exit(slave);
120
121         mutex_lock(&bus->bus_lock);
122
123         if (slave->dev_num) /* clear dev_num if assigned */
124                 clear_bit(slave->dev_num, bus->assigned);
125
126         list_del_init(&slave->node);
127         mutex_unlock(&bus->bus_lock);
128
129         device_unregister(dev);
130         return 0;
131 }
132
133 /**
134  * sdw_delete_bus_master() - delete the bus master instance
135  * @bus: bus to be deleted
136  *
137  * Remove the instance, delete the child devices.
138  */
139 void sdw_delete_bus_master(struct sdw_bus *bus)
140 {
141         device_for_each_child(bus->dev, NULL, sdw_delete_slave);
142
143         sdw_bus_debugfs_exit(bus);
144 }
145 EXPORT_SYMBOL(sdw_delete_bus_master);
146
147 /*
148  * SDW IO Calls
149  */
150
151 static inline int find_response_code(enum sdw_command_response resp)
152 {
153         switch (resp) {
154         case SDW_CMD_OK:
155                 return 0;
156
157         case SDW_CMD_IGNORED:
158                 return -ENODATA;
159
160         case SDW_CMD_TIMEOUT:
161                 return -ETIMEDOUT;
162
163         default:
164                 return -EIO;
165         }
166 }
167
168 static inline int do_transfer(struct sdw_bus *bus, struct sdw_msg *msg)
169 {
170         int retry = bus->prop.err_threshold;
171         enum sdw_command_response resp;
172         int ret = 0, i;
173
174         for (i = 0; i <= retry; i++) {
175                 resp = bus->ops->xfer_msg(bus, msg);
176                 ret = find_response_code(resp);
177
178                 /* if cmd is ok or ignored return */
179                 if (ret == 0 || ret == -ENODATA)
180                         return ret;
181         }
182
183         return ret;
184 }
185
186 static inline int do_transfer_defer(struct sdw_bus *bus,
187                                     struct sdw_msg *msg,
188                                     struct sdw_defer *defer)
189 {
190         int retry = bus->prop.err_threshold;
191         enum sdw_command_response resp;
192         int ret = 0, i;
193
194         defer->msg = msg;
195         defer->length = msg->len;
196         init_completion(&defer->complete);
197
198         for (i = 0; i <= retry; i++) {
199                 resp = bus->ops->xfer_msg_defer(bus, msg, defer);
200                 ret = find_response_code(resp);
201                 /* if cmd is ok or ignored return */
202                 if (ret == 0 || ret == -ENODATA)
203                         return ret;
204         }
205
206         return ret;
207 }
208
209 static int sdw_reset_page(struct sdw_bus *bus, u16 dev_num)
210 {
211         int retry = bus->prop.err_threshold;
212         enum sdw_command_response resp;
213         int ret = 0, i;
214
215         for (i = 0; i <= retry; i++) {
216                 resp = bus->ops->reset_page_addr(bus, dev_num);
217                 ret = find_response_code(resp);
218                 /* if cmd is ok or ignored return */
219                 if (ret == 0 || ret == -ENODATA)
220                         return ret;
221         }
222
223         return ret;
224 }
225
226 /**
227  * sdw_transfer() - Synchronous transfer message to a SDW Slave device
228  * @bus: SDW bus
229  * @msg: SDW message to be xfered
230  */
231 int sdw_transfer(struct sdw_bus *bus, struct sdw_msg *msg)
232 {
233         int ret;
234
235         mutex_lock(&bus->msg_lock);
236
237         ret = do_transfer(bus, msg);
238         if (ret != 0 && ret != -ENODATA)
239                 dev_err(bus->dev, "trf on Slave %d failed:%d\n",
240                         msg->dev_num, ret);
241
242         if (msg->page)
243                 sdw_reset_page(bus, msg->dev_num);
244
245         mutex_unlock(&bus->msg_lock);
246
247         return ret;
248 }
249
250 /**
251  * sdw_transfer_defer() - Asynchronously transfer message to a SDW Slave device
252  * @bus: SDW bus
253  * @msg: SDW message to be xfered
254  * @defer: Defer block for signal completion
255  *
256  * Caller needs to hold the msg_lock lock while calling this
257  */
258 int sdw_transfer_defer(struct sdw_bus *bus, struct sdw_msg *msg,
259                        struct sdw_defer *defer)
260 {
261         int ret;
262
263         if (!bus->ops->xfer_msg_defer)
264                 return -ENOTSUPP;
265
266         ret = do_transfer_defer(bus, msg, defer);
267         if (ret != 0 && ret != -ENODATA)
268                 dev_err(bus->dev, "Defer trf on Slave %d failed:%d\n",
269                         msg->dev_num, ret);
270
271         if (msg->page)
272                 sdw_reset_page(bus, msg->dev_num);
273
274         return ret;
275 }
276
277 int sdw_fill_msg(struct sdw_msg *msg, struct sdw_slave *slave,
278                  u32 addr, size_t count, u16 dev_num, u8 flags, u8 *buf)
279 {
280         memset(msg, 0, sizeof(*msg));
281         msg->addr = addr; /* addr is 16 bit and truncated here */
282         msg->len = count;
283         msg->dev_num = dev_num;
284         msg->flags = flags;
285         msg->buf = buf;
286
287         if (addr < SDW_REG_NO_PAGE) { /* no paging area */
288                 return 0;
289         } else if (addr >= SDW_REG_MAX) { /* illegal addr */
290                 pr_err("SDW: Invalid address %x passed\n", addr);
291                 return -EINVAL;
292         }
293
294         if (addr < SDW_REG_OPTIONAL_PAGE) { /* 32k but no page */
295                 if (slave && !slave->prop.paging_support)
296                         return 0;
297                 /* no need for else as that will fall-through to paging */
298         }
299
300         /* paging mandatory */
301         if (dev_num == SDW_ENUM_DEV_NUM || dev_num == SDW_BROADCAST_DEV_NUM) {
302                 pr_err("SDW: Invalid device for paging :%d\n", dev_num);
303                 return -EINVAL;
304         }
305
306         if (!slave) {
307                 pr_err("SDW: No slave for paging addr\n");
308                 return -EINVAL;
309         } else if (!slave->prop.paging_support) {
310                 dev_err(&slave->dev,
311                         "address %x needs paging but no support\n", addr);
312                 return -EINVAL;
313         }
314
315         msg->addr_page1 = (addr >> SDW_REG_SHIFT(SDW_SCP_ADDRPAGE1_MASK));
316         msg->addr_page2 = (addr >> SDW_REG_SHIFT(SDW_SCP_ADDRPAGE2_MASK));
317         msg->addr |= BIT(15);
318         msg->page = true;
319
320         return 0;
321 }
322
323 /*
324  * Read/Write IO functions.
325  * no_pm versions can only be called by the bus, e.g. while enumerating or
326  * handling suspend-resume sequences.
327  * all clients need to use the pm versions
328  */
329
330 static int
331 sdw_nread_no_pm(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
332 {
333         struct sdw_msg msg;
334         int ret;
335
336         ret = sdw_fill_msg(&msg, slave, addr, count,
337                            slave->dev_num, SDW_MSG_FLAG_READ, val);
338         if (ret < 0)
339                 return ret;
340
341         return sdw_transfer(slave->bus, &msg);
342 }
343
344 static int
345 sdw_nwrite_no_pm(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
346 {
347         struct sdw_msg msg;
348         int ret;
349
350         ret = sdw_fill_msg(&msg, slave, addr, count,
351                            slave->dev_num, SDW_MSG_FLAG_WRITE, val);
352         if (ret < 0)
353                 return ret;
354
355         return sdw_transfer(slave->bus, &msg);
356 }
357
358 static int sdw_write_no_pm(struct sdw_slave *slave, u32 addr, u8 value)
359 {
360         return sdw_nwrite_no_pm(slave, addr, 1, &value);
361 }
362
363 static int
364 sdw_bread_no_pm(struct sdw_bus *bus, u16 dev_num, u32 addr)
365 {
366         struct sdw_msg msg;
367         u8 buf;
368         int ret;
369
370         ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
371                            SDW_MSG_FLAG_READ, &buf);
372         if (ret)
373                 return ret;
374
375         ret = sdw_transfer(bus, &msg);
376         if (ret < 0)
377                 return ret;
378         else
379                 return buf;
380 }
381
382 static int
383 sdw_bwrite_no_pm(struct sdw_bus *bus, u16 dev_num, u32 addr, u8 value)
384 {
385         struct sdw_msg msg;
386         int ret;
387
388         ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
389                            SDW_MSG_FLAG_WRITE, &value);
390         if (ret)
391                 return ret;
392
393         return sdw_transfer(bus, &msg);
394 }
395
396 static int
397 sdw_read_no_pm(struct sdw_slave *slave, u32 addr)
398 {
399         u8 buf;
400         int ret;
401
402         ret = sdw_nread_no_pm(slave, addr, 1, &buf);
403         if (ret < 0)
404                 return ret;
405         else
406                 return buf;
407 }
408
409 /**
410  * sdw_nread() - Read "n" contiguous SDW Slave registers
411  * @slave: SDW Slave
412  * @addr: Register address
413  * @count: length
414  * @val: Buffer for values to be read
415  */
416 int sdw_nread(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
417 {
418         int ret;
419
420         ret = pm_runtime_get_sync(slave->bus->dev);
421         if (ret < 0 && ret != -EACCES) {
422                 pm_runtime_put_noidle(slave->bus->dev);
423                 return ret;
424         }
425
426         ret = sdw_nread_no_pm(slave, addr, count, val);
427
428         pm_runtime_mark_last_busy(slave->bus->dev);
429         pm_runtime_put(slave->bus->dev);
430
431         return ret;
432 }
433 EXPORT_SYMBOL(sdw_nread);
434
435 /**
436  * sdw_nwrite() - Write "n" contiguous SDW Slave registers
437  * @slave: SDW Slave
438  * @addr: Register address
439  * @count: length
440  * @val: Buffer for values to be read
441  */
442 int sdw_nwrite(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
443 {
444         int ret;
445
446         ret = pm_runtime_get_sync(slave->bus->dev);
447         if (ret < 0 && ret != -EACCES) {
448                 pm_runtime_put_noidle(slave->bus->dev);
449                 return ret;
450         }
451
452         ret = sdw_nwrite_no_pm(slave, addr, count, val);
453
454         pm_runtime_mark_last_busy(slave->bus->dev);
455         pm_runtime_put(slave->bus->dev);
456
457         return ret;
458 }
459 EXPORT_SYMBOL(sdw_nwrite);
460
461 /**
462  * sdw_read() - Read a SDW Slave register
463  * @slave: SDW Slave
464  * @addr: Register address
465  */
466 int sdw_read(struct sdw_slave *slave, u32 addr)
467 {
468         u8 buf;
469         int ret;
470
471         ret = sdw_nread(slave, addr, 1, &buf);
472         if (ret < 0)
473                 return ret;
474         else
475                 return buf;
476 }
477 EXPORT_SYMBOL(sdw_read);
478
479 /**
480  * sdw_write() - Write a SDW Slave register
481  * @slave: SDW Slave
482  * @addr: Register address
483  * @value: Register value
484  */
485 int sdw_write(struct sdw_slave *slave, u32 addr, u8 value)
486 {
487         return sdw_nwrite(slave, addr, 1, &value);
488 }
489 EXPORT_SYMBOL(sdw_write);
490
491 /*
492  * SDW alert handling
493  */
494
495 /* called with bus_lock held */
496 static struct sdw_slave *sdw_get_slave(struct sdw_bus *bus, int i)
497 {
498         struct sdw_slave *slave = NULL;
499
500         list_for_each_entry(slave, &bus->slaves, node) {
501                 if (slave->dev_num == i)
502                         return slave;
503         }
504
505         return NULL;
506 }
507
508 static int sdw_compare_devid(struct sdw_slave *slave, struct sdw_slave_id id)
509 {
510         if (slave->id.mfg_id != id.mfg_id ||
511             slave->id.part_id != id.part_id ||
512             slave->id.class_id != id.class_id ||
513             (slave->id.unique_id != SDW_IGNORED_UNIQUE_ID &&
514              slave->id.unique_id != id.unique_id))
515                 return -ENODEV;
516
517         return 0;
518 }
519
520 /* called with bus_lock held */
521 static int sdw_get_device_num(struct sdw_slave *slave)
522 {
523         int bit;
524
525         bit = find_first_zero_bit(slave->bus->assigned, SDW_MAX_DEVICES);
526         if (bit == SDW_MAX_DEVICES) {
527                 bit = -ENODEV;
528                 goto err;
529         }
530
531         /*
532          * Do not update dev_num in Slave data structure here,
533          * Update once program dev_num is successful
534          */
535         set_bit(bit, slave->bus->assigned);
536
537 err:
538         return bit;
539 }
540
541 static int sdw_assign_device_num(struct sdw_slave *slave)
542 {
543         int ret, dev_num;
544         bool new_device = false;
545
546         /* check first if device number is assigned, if so reuse that */
547         if (!slave->dev_num) {
548                 if (!slave->dev_num_sticky) {
549                         mutex_lock(&slave->bus->bus_lock);
550                         dev_num = sdw_get_device_num(slave);
551                         mutex_unlock(&slave->bus->bus_lock);
552                         if (dev_num < 0) {
553                                 dev_err(slave->bus->dev, "Get dev_num failed: %d\n",
554                                         dev_num);
555                                 return dev_num;
556                         }
557                         slave->dev_num = dev_num;
558                         slave->dev_num_sticky = dev_num;
559                         new_device = true;
560                 } else {
561                         slave->dev_num = slave->dev_num_sticky;
562                 }
563         }
564
565         if (!new_device)
566                 dev_info(slave->bus->dev,
567                          "Slave already registered, reusing dev_num:%d\n",
568                          slave->dev_num);
569
570         /* Clear the slave->dev_num to transfer message on device 0 */
571         dev_num = slave->dev_num;
572         slave->dev_num = 0;
573
574         ret = sdw_write_no_pm(slave, SDW_SCP_DEVNUMBER, dev_num);
575         if (ret < 0) {
576                 dev_err(&slave->dev, "Program device_num %d failed: %d\n",
577                         dev_num, ret);
578                 return ret;
579         }
580
581         /* After xfer of msg, restore dev_num */
582         slave->dev_num = slave->dev_num_sticky;
583
584         return 0;
585 }
586
587 void sdw_extract_slave_id(struct sdw_bus *bus,
588                           u64 addr, struct sdw_slave_id *id)
589 {
590         dev_dbg(bus->dev, "SDW Slave Addr: %llx\n", addr);
591
592         id->sdw_version = SDW_VERSION(addr);
593         id->unique_id = SDW_UNIQUE_ID(addr);
594         id->mfg_id = SDW_MFG_ID(addr);
595         id->part_id = SDW_PART_ID(addr);
596         id->class_id = SDW_CLASS_ID(addr);
597
598         dev_dbg(bus->dev,
599                 "SDW Slave class_id %x, part_id %x, mfg_id %x, unique_id %x, version %x\n",
600                                 id->class_id, id->part_id, id->mfg_id,
601                                 id->unique_id, id->sdw_version);
602 }
603
604 static int sdw_program_device_num(struct sdw_bus *bus)
605 {
606         u8 buf[SDW_NUM_DEV_ID_REGISTERS] = {0};
607         struct sdw_slave *slave, *_s;
608         struct sdw_slave_id id;
609         struct sdw_msg msg;
610         bool found = false;
611         int count = 0, ret;
612         u64 addr;
613
614         /* No Slave, so use raw xfer api */
615         ret = sdw_fill_msg(&msg, NULL, SDW_SCP_DEVID_0,
616                            SDW_NUM_DEV_ID_REGISTERS, 0, SDW_MSG_FLAG_READ, buf);
617         if (ret < 0)
618                 return ret;
619
620         do {
621                 ret = sdw_transfer(bus, &msg);
622                 if (ret == -ENODATA) { /* end of device id reads */
623                         dev_dbg(bus->dev, "No more devices to enumerate\n");
624                         ret = 0;
625                         break;
626                 }
627                 if (ret < 0) {
628                         dev_err(bus->dev, "DEVID read fail:%d\n", ret);
629                         break;
630                 }
631
632                 /*
633                  * Construct the addr and extract. Cast the higher shift
634                  * bits to avoid truncation due to size limit.
635                  */
636                 addr = buf[5] | (buf[4] << 8) | (buf[3] << 16) |
637                         ((u64)buf[2] << 24) | ((u64)buf[1] << 32) |
638                         ((u64)buf[0] << 40);
639
640                 sdw_extract_slave_id(bus, addr, &id);
641
642                 /* Now compare with entries */
643                 list_for_each_entry_safe(slave, _s, &bus->slaves, node) {
644                         if (sdw_compare_devid(slave, id) == 0) {
645                                 found = true;
646
647                                 /*
648                                  * Assign a new dev_num to this Slave and
649                                  * not mark it present. It will be marked
650                                  * present after it reports ATTACHED on new
651                                  * dev_num
652                                  */
653                                 ret = sdw_assign_device_num(slave);
654                                 if (ret) {
655                                         dev_err(slave->bus->dev,
656                                                 "Assign dev_num failed:%d\n",
657                                                 ret);
658                                         return ret;
659                                 }
660
661                                 break;
662                         }
663                 }
664
665                 if (!found) {
666                         /* TODO: Park this device in Group 13 */
667                         dev_err(bus->dev, "Slave Entry not found\n");
668                 }
669
670                 count++;
671
672                 /*
673                  * Check till error out or retry (count) exhausts.
674                  * Device can drop off and rejoin during enumeration
675                  * so count till twice the bound.
676                  */
677
678         } while (ret == 0 && count < (SDW_MAX_DEVICES * 2));
679
680         return ret;
681 }
682
683 static void sdw_modify_slave_status(struct sdw_slave *slave,
684                                     enum sdw_slave_status status)
685 {
686         mutex_lock(&slave->bus->bus_lock);
687
688         dev_vdbg(&slave->dev,
689                  "%s: changing status slave %d status %d new status %d\n",
690                  __func__, slave->dev_num, slave->status, status);
691
692         if (status == SDW_SLAVE_UNATTACHED) {
693                 dev_dbg(&slave->dev,
694                         "%s: initializing completion for Slave %d\n",
695                         __func__, slave->dev_num);
696
697                 init_completion(&slave->enumeration_complete);
698                 init_completion(&slave->initialization_complete);
699
700         } else if ((status == SDW_SLAVE_ATTACHED) &&
701                    (slave->status == SDW_SLAVE_UNATTACHED)) {
702                 dev_dbg(&slave->dev,
703                         "%s: signaling completion for Slave %d\n",
704                         __func__, slave->dev_num);
705
706                 complete(&slave->enumeration_complete);
707         }
708         slave->status = status;
709         mutex_unlock(&slave->bus->bus_lock);
710 }
711
712 static enum sdw_clk_stop_mode sdw_get_clk_stop_mode(struct sdw_slave *slave)
713 {
714         enum sdw_clk_stop_mode mode;
715
716         /*
717          * Query for clock stop mode if Slave implements
718          * ops->get_clk_stop_mode, else read from property.
719          */
720         if (slave->ops && slave->ops->get_clk_stop_mode) {
721                 mode = slave->ops->get_clk_stop_mode(slave);
722         } else {
723                 if (slave->prop.clk_stop_mode1)
724                         mode = SDW_CLK_STOP_MODE1;
725                 else
726                         mode = SDW_CLK_STOP_MODE0;
727         }
728
729         return mode;
730 }
731
732 static int sdw_slave_clk_stop_callback(struct sdw_slave *slave,
733                                        enum sdw_clk_stop_mode mode,
734                                        enum sdw_clk_stop_type type)
735 {
736         int ret;
737
738         if (slave->ops && slave->ops->clk_stop) {
739                 ret = slave->ops->clk_stop(slave, mode, type);
740                 if (ret < 0) {
741                         dev_err(&slave->dev,
742                                 "Clk Stop type =%d failed: %d\n", type, ret);
743                         return ret;
744                 }
745         }
746
747         return 0;
748 }
749
750 static int sdw_slave_clk_stop_prepare(struct sdw_slave *slave,
751                                       enum sdw_clk_stop_mode mode,
752                                       bool prepare)
753 {
754         bool wake_en;
755         u32 val = 0;
756         int ret;
757
758         wake_en = slave->prop.wake_capable;
759
760         if (prepare) {
761                 val = SDW_SCP_SYSTEMCTRL_CLK_STP_PREP;
762
763                 if (mode == SDW_CLK_STOP_MODE1)
764                         val |= SDW_SCP_SYSTEMCTRL_CLK_STP_MODE1;
765
766                 if (wake_en)
767                         val |= SDW_SCP_SYSTEMCTRL_WAKE_UP_EN;
768         } else {
769                 val = sdw_read_no_pm(slave, SDW_SCP_SYSTEMCTRL);
770
771                 val &= ~(SDW_SCP_SYSTEMCTRL_CLK_STP_PREP);
772         }
773
774         ret = sdw_write_no_pm(slave, SDW_SCP_SYSTEMCTRL, val);
775
776         if (ret != 0)
777                 dev_err(&slave->dev,
778                         "Clock Stop prepare failed for slave: %d", ret);
779
780         return ret;
781 }
782
783 static int sdw_bus_wait_for_clk_prep_deprep(struct sdw_bus *bus, u16 dev_num)
784 {
785         int retry = bus->clk_stop_timeout;
786         int val;
787
788         do {
789                 val = sdw_bread_no_pm(bus, dev_num, SDW_SCP_STAT) &
790                         SDW_SCP_STAT_CLK_STP_NF;
791                 if (!val) {
792                         dev_info(bus->dev, "clock stop prep/de-prep done slave:%d",
793                                  dev_num);
794                         return 0;
795                 }
796
797                 usleep_range(1000, 1500);
798                 retry--;
799         } while (retry);
800
801         dev_err(bus->dev, "clock stop prep/de-prep failed slave:%d",
802                 dev_num);
803
804         return -ETIMEDOUT;
805 }
806
807 /**
808  * sdw_bus_prep_clk_stop: prepare Slave(s) for clock stop
809  *
810  * @bus: SDW bus instance
811  *
812  * Query Slave for clock stop mode and prepare for that mode.
813  */
814 int sdw_bus_prep_clk_stop(struct sdw_bus *bus)
815 {
816         enum sdw_clk_stop_mode slave_mode;
817         bool simple_clk_stop = true;
818         struct sdw_slave *slave;
819         bool is_slave = false;
820         int ret = 0;
821
822         /*
823          * In order to save on transition time, prepare
824          * each Slave and then wait for all Slave(s) to be
825          * prepared for clock stop.
826          */
827         list_for_each_entry(slave, &bus->slaves, node) {
828                 if (!slave->dev_num)
829                         continue;
830
831                 /* Identify if Slave(s) are available on Bus */
832                 is_slave = true;
833
834                 if (slave->status != SDW_SLAVE_ATTACHED &&
835                     slave->status != SDW_SLAVE_ALERT)
836                         continue;
837
838                 slave_mode = sdw_get_clk_stop_mode(slave);
839                 slave->curr_clk_stop_mode = slave_mode;
840
841                 ret = sdw_slave_clk_stop_callback(slave, slave_mode,
842                                                   SDW_CLK_PRE_PREPARE);
843                 if (ret < 0) {
844                         dev_err(&slave->dev,
845                                 "pre-prepare failed:%d", ret);
846                         return ret;
847                 }
848
849                 ret = sdw_slave_clk_stop_prepare(slave,
850                                                  slave_mode, true);
851                 if (ret < 0) {
852                         dev_err(&slave->dev,
853                                 "pre-prepare failed:%d", ret);
854                         return ret;
855                 }
856
857                 if (slave_mode == SDW_CLK_STOP_MODE1)
858                         simple_clk_stop = false;
859         }
860
861         if (is_slave && !simple_clk_stop) {
862                 ret = sdw_bus_wait_for_clk_prep_deprep(bus,
863                                                        SDW_BROADCAST_DEV_NUM);
864                 if (ret < 0)
865                         return ret;
866         }
867
868         /* Inform slaves that prep is done */
869         list_for_each_entry(slave, &bus->slaves, node) {
870                 if (!slave->dev_num)
871                         continue;
872
873                 if (slave->status != SDW_SLAVE_ATTACHED &&
874                     slave->status != SDW_SLAVE_ALERT)
875                         continue;
876
877                 slave_mode = slave->curr_clk_stop_mode;
878
879                 if (slave_mode == SDW_CLK_STOP_MODE1) {
880                         ret = sdw_slave_clk_stop_callback(slave,
881                                                           slave_mode,
882                                                           SDW_CLK_POST_PREPARE);
883
884                         if (ret < 0) {
885                                 dev_err(&slave->dev,
886                                         "post-prepare failed:%d", ret);
887                         }
888                 }
889         }
890
891         return ret;
892 }
893 EXPORT_SYMBOL(sdw_bus_prep_clk_stop);
894
895 /**
896  * sdw_bus_clk_stop: stop bus clock
897  *
898  * @bus: SDW bus instance
899  *
900  * After preparing the Slaves for clock stop, stop the clock by broadcasting
901  * write to SCP_CTRL register.
902  */
903 int sdw_bus_clk_stop(struct sdw_bus *bus)
904 {
905         int ret;
906
907         /*
908          * broadcast clock stop now, attached Slaves will ACK this,
909          * unattached will ignore
910          */
911         ret = sdw_bwrite_no_pm(bus, SDW_BROADCAST_DEV_NUM,
912                                SDW_SCP_CTRL, SDW_SCP_CTRL_CLK_STP_NOW);
913         if (ret < 0) {
914                 if (ret == -ENODATA)
915                         dev_dbg(bus->dev,
916                                 "ClockStopNow Broadcast msg ignored %d", ret);
917                 else
918                         dev_err(bus->dev,
919                                 "ClockStopNow Broadcast msg failed %d", ret);
920                 return ret;
921         }
922
923         return 0;
924 }
925 EXPORT_SYMBOL(sdw_bus_clk_stop);
926
927 /**
928  * sdw_bus_exit_clk_stop: Exit clock stop mode
929  *
930  * @bus: SDW bus instance
931  *
932  * This De-prepares the Slaves by exiting Clock Stop Mode 0. For the Slaves
933  * exiting Clock Stop Mode 1, they will be de-prepared after they enumerate
934  * back.
935  */
936 int sdw_bus_exit_clk_stop(struct sdw_bus *bus)
937 {
938         enum sdw_clk_stop_mode mode;
939         bool simple_clk_stop = true;
940         struct sdw_slave *slave;
941         bool is_slave = false;
942         int ret;
943
944         /*
945          * In order to save on transition time, de-prepare
946          * each Slave and then wait for all Slave(s) to be
947          * de-prepared after clock resume.
948          */
949         list_for_each_entry(slave, &bus->slaves, node) {
950                 if (!slave->dev_num)
951                         continue;
952
953                 /* Identify if Slave(s) are available on Bus */
954                 is_slave = true;
955
956                 if (slave->status != SDW_SLAVE_ATTACHED &&
957                     slave->status != SDW_SLAVE_ALERT)
958                         continue;
959
960                 mode = slave->curr_clk_stop_mode;
961
962                 if (mode == SDW_CLK_STOP_MODE1) {
963                         simple_clk_stop = false;
964                         continue;
965                 }
966
967                 ret = sdw_slave_clk_stop_callback(slave, mode,
968                                                   SDW_CLK_PRE_DEPREPARE);
969                 if (ret < 0)
970                         dev_warn(&slave->dev,
971                                  "clk stop deprep failed:%d", ret);
972
973                 ret = sdw_slave_clk_stop_prepare(slave, mode,
974                                                  false);
975
976                 if (ret < 0)
977                         dev_warn(&slave->dev,
978                                  "clk stop deprep failed:%d", ret);
979         }
980
981         if (is_slave && !simple_clk_stop)
982                 sdw_bus_wait_for_clk_prep_deprep(bus, SDW_BROADCAST_DEV_NUM);
983
984         list_for_each_entry(slave, &bus->slaves, node) {
985                 if (!slave->dev_num)
986                         continue;
987
988                 if (slave->status != SDW_SLAVE_ATTACHED &&
989                     slave->status != SDW_SLAVE_ALERT)
990                         continue;
991
992                 mode = slave->curr_clk_stop_mode;
993                 sdw_slave_clk_stop_callback(slave, mode,
994                                             SDW_CLK_POST_DEPREPARE);
995         }
996
997         return 0;
998 }
999 EXPORT_SYMBOL(sdw_bus_exit_clk_stop);
1000
1001 int sdw_configure_dpn_intr(struct sdw_slave *slave,
1002                            int port, bool enable, int mask)
1003 {
1004         u32 addr;
1005         int ret;
1006         u8 val = 0;
1007
1008         addr = SDW_DPN_INTMASK(port);
1009
1010         /* Set/Clear port ready interrupt mask */
1011         if (enable) {
1012                 val |= mask;
1013                 val |= SDW_DPN_INT_PORT_READY;
1014         } else {
1015                 val &= ~(mask);
1016                 val &= ~SDW_DPN_INT_PORT_READY;
1017         }
1018
1019         ret = sdw_update(slave, addr, (mask | SDW_DPN_INT_PORT_READY), val);
1020         if (ret < 0)
1021                 dev_err(slave->bus->dev,
1022                         "SDW_DPN_INTMASK write failed:%d\n", val);
1023
1024         return ret;
1025 }
1026
1027 static int sdw_initialize_slave(struct sdw_slave *slave)
1028 {
1029         struct sdw_slave_prop *prop = &slave->prop;
1030         int ret;
1031         u8 val;
1032
1033         /*
1034          * Set bus clash, parity and SCP implementation
1035          * defined interrupt mask
1036          * TODO: Read implementation defined interrupt mask
1037          * from Slave property
1038          */
1039         val = SDW_SCP_INT1_IMPL_DEF | SDW_SCP_INT1_BUS_CLASH |
1040                                         SDW_SCP_INT1_PARITY;
1041
1042         /* Enable SCP interrupts */
1043         ret = sdw_update(slave, SDW_SCP_INTMASK1, val, val);
1044         if (ret < 0) {
1045                 dev_err(slave->bus->dev,
1046                         "SDW_SCP_INTMASK1 write failed:%d\n", ret);
1047                 return ret;
1048         }
1049
1050         /* No need to continue if DP0 is not present */
1051         if (!slave->prop.dp0_prop)
1052                 return 0;
1053
1054         /* Enable DP0 interrupts */
1055         val = prop->dp0_prop->imp_def_interrupts;
1056         val |= SDW_DP0_INT_PORT_READY | SDW_DP0_INT_BRA_FAILURE;
1057
1058         ret = sdw_update(slave, SDW_DP0_INTMASK, val, val);
1059         if (ret < 0)
1060                 dev_err(slave->bus->dev,
1061                         "SDW_DP0_INTMASK read failed:%d\n", ret);
1062         return ret;
1063 }
1064
1065 static int sdw_handle_dp0_interrupt(struct sdw_slave *slave, u8 *slave_status)
1066 {
1067         u8 clear = 0, impl_int_mask;
1068         int status, status2, ret, count = 0;
1069
1070         status = sdw_read(slave, SDW_DP0_INT);
1071         if (status < 0) {
1072                 dev_err(slave->bus->dev,
1073                         "SDW_DP0_INT read failed:%d\n", status);
1074                 return status;
1075         }
1076
1077         do {
1078                 if (status & SDW_DP0_INT_TEST_FAIL) {
1079                         dev_err(&slave->dev, "Test fail for port 0\n");
1080                         clear |= SDW_DP0_INT_TEST_FAIL;
1081                 }
1082
1083                 /*
1084                  * Assumption: PORT_READY interrupt will be received only for
1085                  * ports implementing Channel Prepare state machine (CP_SM)
1086                  */
1087
1088                 if (status & SDW_DP0_INT_PORT_READY) {
1089                         complete(&slave->port_ready[0]);
1090                         clear |= SDW_DP0_INT_PORT_READY;
1091                 }
1092
1093                 if (status & SDW_DP0_INT_BRA_FAILURE) {
1094                         dev_err(&slave->dev, "BRA failed\n");
1095                         clear |= SDW_DP0_INT_BRA_FAILURE;
1096                 }
1097
1098                 impl_int_mask = SDW_DP0_INT_IMPDEF1 |
1099                         SDW_DP0_INT_IMPDEF2 | SDW_DP0_INT_IMPDEF3;
1100
1101                 if (status & impl_int_mask) {
1102                         clear |= impl_int_mask;
1103                         *slave_status = clear;
1104                 }
1105
1106                 /* clear the interrupt */
1107                 ret = sdw_write(slave, SDW_DP0_INT, clear);
1108                 if (ret < 0) {
1109                         dev_err(slave->bus->dev,
1110                                 "SDW_DP0_INT write failed:%d\n", ret);
1111                         return ret;
1112                 }
1113
1114                 /* Read DP0 interrupt again */
1115                 status2 = sdw_read(slave, SDW_DP0_INT);
1116                 if (status2 < 0) {
1117                         dev_err(slave->bus->dev,
1118                                 "SDW_DP0_INT read failed:%d\n", status2);
1119                         return status2;
1120                 }
1121                 status &= status2;
1122
1123                 count++;
1124
1125                 /* we can get alerts while processing so keep retrying */
1126         } while (status != 0 && count < SDW_READ_INTR_CLEAR_RETRY);
1127
1128         if (count == SDW_READ_INTR_CLEAR_RETRY)
1129                 dev_warn(slave->bus->dev, "Reached MAX_RETRY on DP0 read\n");
1130
1131         return ret;
1132 }
1133
1134 static int sdw_handle_port_interrupt(struct sdw_slave *slave,
1135                                      int port, u8 *slave_status)
1136 {
1137         u8 clear = 0, impl_int_mask;
1138         int status, status2, ret, count = 0;
1139         u32 addr;
1140
1141         if (port == 0)
1142                 return sdw_handle_dp0_interrupt(slave, slave_status);
1143
1144         addr = SDW_DPN_INT(port);
1145         status = sdw_read(slave, addr);
1146         if (status < 0) {
1147                 dev_err(slave->bus->dev,
1148                         "SDW_DPN_INT read failed:%d\n", status);
1149
1150                 return status;
1151         }
1152
1153         do {
1154                 if (status & SDW_DPN_INT_TEST_FAIL) {
1155                         dev_err(&slave->dev, "Test fail for port:%d\n", port);
1156                         clear |= SDW_DPN_INT_TEST_FAIL;
1157                 }
1158
1159                 /*
1160                  * Assumption: PORT_READY interrupt will be received only
1161                  * for ports implementing CP_SM.
1162                  */
1163                 if (status & SDW_DPN_INT_PORT_READY) {
1164                         complete(&slave->port_ready[port]);
1165                         clear |= SDW_DPN_INT_PORT_READY;
1166                 }
1167
1168                 impl_int_mask = SDW_DPN_INT_IMPDEF1 |
1169                         SDW_DPN_INT_IMPDEF2 | SDW_DPN_INT_IMPDEF3;
1170
1171                 if (status & impl_int_mask) {
1172                         clear |= impl_int_mask;
1173                         *slave_status = clear;
1174                 }
1175
1176                 /* clear the interrupt */
1177                 ret = sdw_write(slave, addr, clear);
1178                 if (ret < 0) {
1179                         dev_err(slave->bus->dev,
1180                                 "SDW_DPN_INT write failed:%d\n", ret);
1181                         return ret;
1182                 }
1183
1184                 /* Read DPN interrupt again */
1185                 status2 = sdw_read(slave, addr);
1186                 if (status2 < 0) {
1187                         dev_err(slave->bus->dev,
1188                                 "SDW_DPN_INT read failed:%d\n", status2);
1189                         return status2;
1190                 }
1191                 status &= status2;
1192
1193                 count++;
1194
1195                 /* we can get alerts while processing so keep retrying */
1196         } while (status != 0 && count < SDW_READ_INTR_CLEAR_RETRY);
1197
1198         if (count == SDW_READ_INTR_CLEAR_RETRY)
1199                 dev_warn(slave->bus->dev, "Reached MAX_RETRY on port read");
1200
1201         return ret;
1202 }
1203
1204 static int sdw_handle_slave_alerts(struct sdw_slave *slave)
1205 {
1206         struct sdw_slave_intr_status slave_intr;
1207         u8 clear = 0, bit, port_status[15] = {0};
1208         int port_num, stat, ret, count = 0;
1209         unsigned long port;
1210         bool slave_notify = false;
1211         u8 buf, buf2[2], _buf, _buf2[2];
1212
1213         sdw_modify_slave_status(slave, SDW_SLAVE_ALERT);
1214
1215         ret = pm_runtime_get_sync(&slave->dev);
1216         if (ret < 0 && ret != -EACCES) {
1217                 dev_err(&slave->dev, "Failed to resume device: %d\n", ret);
1218                 pm_runtime_put_noidle(slave->bus->dev);
1219                 return ret;
1220         }
1221
1222         /* Read Instat 1, Instat 2 and Instat 3 registers */
1223         ret = sdw_read(slave, SDW_SCP_INT1);
1224         if (ret < 0) {
1225                 dev_err(slave->bus->dev,
1226                         "SDW_SCP_INT1 read failed:%d\n", ret);
1227                 goto io_err;
1228         }
1229         buf = ret;
1230
1231         ret = sdw_nread(slave, SDW_SCP_INTSTAT2, 2, buf2);
1232         if (ret < 0) {
1233                 dev_err(slave->bus->dev,
1234                         "SDW_SCP_INT2/3 read failed:%d\n", ret);
1235                 goto io_err;
1236         }
1237
1238         do {
1239                 /*
1240                  * Check parity, bus clash and Slave (impl defined)
1241                  * interrupt
1242                  */
1243                 if (buf & SDW_SCP_INT1_PARITY) {
1244                         dev_err(&slave->dev, "Parity error detected\n");
1245                         clear |= SDW_SCP_INT1_PARITY;
1246                 }
1247
1248                 if (buf & SDW_SCP_INT1_BUS_CLASH) {
1249                         dev_err(&slave->dev, "Bus clash error detected\n");
1250                         clear |= SDW_SCP_INT1_BUS_CLASH;
1251                 }
1252
1253                 /*
1254                  * When bus clash or parity errors are detected, such errors
1255                  * are unlikely to be recoverable errors.
1256                  * TODO: In such scenario, reset bus. Make this configurable
1257                  * via sysfs property with bus reset being the default.
1258                  */
1259
1260                 if (buf & SDW_SCP_INT1_IMPL_DEF) {
1261                         dev_dbg(&slave->dev, "Slave impl defined interrupt\n");
1262                         clear |= SDW_SCP_INT1_IMPL_DEF;
1263                         slave_notify = true;
1264                 }
1265
1266                 /* Check port 0 - 3 interrupts */
1267                 port = buf & SDW_SCP_INT1_PORT0_3;
1268
1269                 /* To get port number corresponding to bits, shift it */
1270                 port = port >> SDW_REG_SHIFT(SDW_SCP_INT1_PORT0_3);
1271                 for_each_set_bit(bit, &port, 8) {
1272                         sdw_handle_port_interrupt(slave, bit,
1273                                                   &port_status[bit]);
1274                 }
1275
1276                 /* Check if cascade 2 interrupt is present */
1277                 if (buf & SDW_SCP_INT1_SCP2_CASCADE) {
1278                         port = buf2[0] & SDW_SCP_INTSTAT2_PORT4_10;
1279                         for_each_set_bit(bit, &port, 8) {
1280                                 /* scp2 ports start from 4 */
1281                                 port_num = bit + 3;
1282                                 sdw_handle_port_interrupt(slave,
1283                                                 port_num,
1284                                                 &port_status[port_num]);
1285                         }
1286                 }
1287
1288                 /* now check last cascade */
1289                 if (buf2[0] & SDW_SCP_INTSTAT2_SCP3_CASCADE) {
1290                         port = buf2[1] & SDW_SCP_INTSTAT3_PORT11_14;
1291                         for_each_set_bit(bit, &port, 8) {
1292                                 /* scp3 ports start from 11 */
1293                                 port_num = bit + 10;
1294                                 sdw_handle_port_interrupt(slave,
1295                                                 port_num,
1296                                                 &port_status[port_num]);
1297                         }
1298                 }
1299
1300                 /* Update the Slave driver */
1301                 if (slave_notify && slave->ops &&
1302                     slave->ops->interrupt_callback) {
1303                         slave_intr.control_port = clear;
1304                         memcpy(slave_intr.port, &port_status,
1305                                sizeof(slave_intr.port));
1306
1307                         slave->ops->interrupt_callback(slave, &slave_intr);
1308                 }
1309
1310                 /* Ack interrupt */
1311                 ret = sdw_write(slave, SDW_SCP_INT1, clear);
1312                 if (ret < 0) {
1313                         dev_err(slave->bus->dev,
1314                                 "SDW_SCP_INT1 write failed:%d\n", ret);
1315                         goto io_err;
1316                 }
1317
1318                 /*
1319                  * Read status again to ensure no new interrupts arrived
1320                  * while servicing interrupts.
1321                  */
1322                 ret = sdw_read(slave, SDW_SCP_INT1);
1323                 if (ret < 0) {
1324                         dev_err(slave->bus->dev,
1325                                 "SDW_SCP_INT1 read failed:%d\n", ret);
1326                         goto io_err;
1327                 }
1328                 _buf = ret;
1329
1330                 ret = sdw_nread(slave, SDW_SCP_INTSTAT2, 2, _buf2);
1331                 if (ret < 0) {
1332                         dev_err(slave->bus->dev,
1333                                 "SDW_SCP_INT2/3 read failed:%d\n", ret);
1334                         goto io_err;
1335                 }
1336
1337                 /* Make sure no interrupts are pending */
1338                 buf &= _buf;
1339                 buf2[0] &= _buf2[0];
1340                 buf2[1] &= _buf2[1];
1341                 stat = buf || buf2[0] || buf2[1];
1342
1343                 /*
1344                  * Exit loop if Slave is continuously in ALERT state even
1345                  * after servicing the interrupt multiple times.
1346                  */
1347                 count++;
1348
1349                 /* we can get alerts while processing so keep retrying */
1350         } while (stat != 0 && count < SDW_READ_INTR_CLEAR_RETRY);
1351
1352         if (count == SDW_READ_INTR_CLEAR_RETRY)
1353                 dev_warn(slave->bus->dev, "Reached MAX_RETRY on alert read\n");
1354
1355 io_err:
1356         pm_runtime_mark_last_busy(&slave->dev);
1357         pm_runtime_put_autosuspend(&slave->dev);
1358
1359         return ret;
1360 }
1361
1362 static int sdw_update_slave_status(struct sdw_slave *slave,
1363                                    enum sdw_slave_status status)
1364 {
1365         unsigned long time;
1366
1367         if (!slave->probed) {
1368                 /*
1369                  * the slave status update is typically handled in an
1370                  * interrupt thread, which can race with the driver
1371                  * probe, e.g. when a module needs to be loaded.
1372                  *
1373                  * make sure the probe is complete before updating
1374                  * status.
1375                  */
1376                 time = wait_for_completion_timeout(&slave->probe_complete,
1377                                 msecs_to_jiffies(DEFAULT_PROBE_TIMEOUT));
1378                 if (!time) {
1379                         dev_err(&slave->dev, "Probe not complete, timed out\n");
1380                         return -ETIMEDOUT;
1381                 }
1382         }
1383
1384         if (!slave->ops || !slave->ops->update_status)
1385                 return 0;
1386
1387         return slave->ops->update_status(slave, status);
1388 }
1389
1390 /**
1391  * sdw_handle_slave_status() - Handle Slave status
1392  * @bus: SDW bus instance
1393  * @status: Status for all Slave(s)
1394  */
1395 int sdw_handle_slave_status(struct sdw_bus *bus,
1396                             enum sdw_slave_status status[])
1397 {
1398         enum sdw_slave_status prev_status;
1399         struct sdw_slave *slave;
1400         bool attached_initializing;
1401         int i, ret = 0;
1402
1403         /* first check if any Slaves fell off the bus */
1404         for (i = 1; i <= SDW_MAX_DEVICES; i++) {
1405                 mutex_lock(&bus->bus_lock);
1406                 if (test_bit(i, bus->assigned) == false) {
1407                         mutex_unlock(&bus->bus_lock);
1408                         continue;
1409                 }
1410                 mutex_unlock(&bus->bus_lock);
1411
1412                 slave = sdw_get_slave(bus, i);
1413                 if (!slave)
1414                         continue;
1415
1416                 if (status[i] == SDW_SLAVE_UNATTACHED &&
1417                     slave->status != SDW_SLAVE_UNATTACHED)
1418                         sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
1419         }
1420
1421         if (status[0] == SDW_SLAVE_ATTACHED) {
1422                 dev_dbg(bus->dev, "Slave attached, programming device number\n");
1423                 ret = sdw_program_device_num(bus);
1424                 if (ret)
1425                         dev_err(bus->dev, "Slave attach failed: %d\n", ret);
1426                 /*
1427                  * programming a device number will have side effects,
1428                  * so we deal with other devices at a later time
1429                  */
1430                 return ret;
1431         }
1432
1433         /* Continue to check other slave statuses */
1434         for (i = 1; i <= SDW_MAX_DEVICES; i++) {
1435                 mutex_lock(&bus->bus_lock);
1436                 if (test_bit(i, bus->assigned) == false) {
1437                         mutex_unlock(&bus->bus_lock);
1438                         continue;
1439                 }
1440                 mutex_unlock(&bus->bus_lock);
1441
1442                 slave = sdw_get_slave(bus, i);
1443                 if (!slave)
1444                         continue;
1445
1446                 attached_initializing = false;
1447
1448                 switch (status[i]) {
1449                 case SDW_SLAVE_UNATTACHED:
1450                         if (slave->status == SDW_SLAVE_UNATTACHED)
1451                                 break;
1452
1453                         sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
1454                         break;
1455
1456                 case SDW_SLAVE_ALERT:
1457                         ret = sdw_handle_slave_alerts(slave);
1458                         if (ret)
1459                                 dev_err(bus->dev,
1460                                         "Slave %d alert handling failed: %d\n",
1461                                         i, ret);
1462                         break;
1463
1464                 case SDW_SLAVE_ATTACHED:
1465                         if (slave->status == SDW_SLAVE_ATTACHED)
1466                                 break;
1467
1468                         prev_status = slave->status;
1469                         sdw_modify_slave_status(slave, SDW_SLAVE_ATTACHED);
1470
1471                         if (prev_status == SDW_SLAVE_ALERT)
1472                                 break;
1473
1474                         attached_initializing = true;
1475
1476                         ret = sdw_initialize_slave(slave);
1477                         if (ret)
1478                                 dev_err(bus->dev,
1479                                         "Slave %d initialization failed: %d\n",
1480                                         i, ret);
1481
1482                         break;
1483
1484                 default:
1485                         dev_err(bus->dev, "Invalid slave %d status:%d\n",
1486                                 i, status[i]);
1487                         break;
1488                 }
1489
1490                 ret = sdw_update_slave_status(slave, status[i]);
1491                 if (ret)
1492                         dev_err(slave->bus->dev,
1493                                 "Update Slave status failed:%d\n", ret);
1494                 if (attached_initializing)
1495                         complete(&slave->initialization_complete);
1496         }
1497
1498         return ret;
1499 }
1500 EXPORT_SYMBOL(sdw_handle_slave_status);
1501
1502 void sdw_clear_slave_status(struct sdw_bus *bus, u32 request)
1503 {
1504         struct sdw_slave *slave;
1505         int i;
1506
1507         /* Check all non-zero devices */
1508         for (i = 1; i <= SDW_MAX_DEVICES; i++) {
1509                 mutex_lock(&bus->bus_lock);
1510                 if (test_bit(i, bus->assigned) == false) {
1511                         mutex_unlock(&bus->bus_lock);
1512                         continue;
1513                 }
1514                 mutex_unlock(&bus->bus_lock);
1515
1516                 slave = sdw_get_slave(bus, i);
1517                 if (!slave)
1518                         continue;
1519
1520                 if (slave->status != SDW_SLAVE_UNATTACHED)
1521                         sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
1522
1523                 /* keep track of request, used in pm_runtime resume */
1524                 slave->unattach_request = request;
1525         }
1526 }
1527 EXPORT_SYMBOL(sdw_clear_slave_status);