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 <linux/soundwire/sdw_type.h>
11 #include "bus.h"
12 #include "irq.h"
13 #include "sysfs_local.h"
14
15 static DEFINE_IDA(sdw_bus_ida);
16
sdw_get_id(struct sdw_bus * bus)17 static int sdw_get_id(struct sdw_bus *bus)
18 {
19 int rc = ida_alloc(&sdw_bus_ida, GFP_KERNEL);
20
21 if (rc < 0)
22 return rc;
23
24 bus->id = rc;
25
26 if (bus->controller_id == -1)
27 bus->controller_id = rc;
28
29 return 0;
30 }
31
32 /**
33 * sdw_bus_master_add() - add a bus Master instance
34 * @bus: bus instance
35 * @parent: parent device
36 * @fwnode: firmware node handle
37 *
38 * Initializes the bus instance, read properties and create child
39 * devices.
40 */
sdw_bus_master_add(struct sdw_bus * bus,struct device * parent,struct fwnode_handle * fwnode)41 int sdw_bus_master_add(struct sdw_bus *bus, struct device *parent,
42 struct fwnode_handle *fwnode)
43 {
44 struct sdw_master_prop *prop = NULL;
45 int ret;
46
47 if (!parent) {
48 pr_err("SoundWire parent device is not set\n");
49 return -ENODEV;
50 }
51
52 ret = sdw_get_id(bus);
53 if (ret < 0) {
54 dev_err(parent, "Failed to get bus id\n");
55 return ret;
56 }
57
58 ret = sdw_master_device_add(bus, parent, fwnode);
59 if (ret < 0) {
60 dev_err(parent, "Failed to add master device at link %d\n",
61 bus->link_id);
62 return ret;
63 }
64
65 if (!bus->ops) {
66 dev_err(bus->dev, "SoundWire Bus ops are not set\n");
67 return -EINVAL;
68 }
69
70 if (!bus->compute_params) {
71 dev_err(bus->dev,
72 "Bandwidth allocation not configured, compute_params no set\n");
73 return -EINVAL;
74 }
75
76 /*
77 * Give each bus_lock and msg_lock a unique key so that lockdep won't
78 * trigger a deadlock warning when the locks of several buses are
79 * grabbed during configuration of a multi-bus stream.
80 */
81 lockdep_register_key(&bus->msg_lock_key);
82 __mutex_init(&bus->msg_lock, "msg_lock", &bus->msg_lock_key);
83
84 lockdep_register_key(&bus->bus_lock_key);
85 __mutex_init(&bus->bus_lock, "bus_lock", &bus->bus_lock_key);
86
87 INIT_LIST_HEAD(&bus->slaves);
88 INIT_LIST_HEAD(&bus->m_rt_list);
89
90 /*
91 * Initialize multi_link flag
92 */
93 bus->multi_link = false;
94 if (bus->ops->read_prop) {
95 ret = bus->ops->read_prop(bus);
96 if (ret < 0) {
97 dev_err(bus->dev,
98 "Bus read properties failed:%d\n", ret);
99 return ret;
100 }
101 }
102
103 sdw_bus_debugfs_init(bus);
104
105 /*
106 * Device numbers in SoundWire are 0 through 15. Enumeration device
107 * number (0), Broadcast device number (15), Group numbers (12 and
108 * 13) and Master device number (14) are not used for assignment so
109 * mask these and other higher bits.
110 */
111
112 /* Set higher order bits */
113 *bus->assigned = ~GENMASK(SDW_BROADCAST_DEV_NUM, SDW_ENUM_DEV_NUM);
114
115 /* Set enumuration device number and broadcast device number */
116 set_bit(SDW_ENUM_DEV_NUM, bus->assigned);
117 set_bit(SDW_BROADCAST_DEV_NUM, bus->assigned);
118
119 /* Set group device numbers and master device number */
120 set_bit(SDW_GROUP12_DEV_NUM, bus->assigned);
121 set_bit(SDW_GROUP13_DEV_NUM, bus->assigned);
122 set_bit(SDW_MASTER_DEV_NUM, bus->assigned);
123
124 ret = sdw_irq_create(bus, fwnode);
125 if (ret)
126 return ret;
127
128 /*
129 * SDW is an enumerable bus, but devices can be powered off. So,
130 * they won't be able to report as present.
131 *
132 * Create Slave devices based on Slaves described in
133 * the respective firmware (ACPI/DT)
134 */
135 if (IS_ENABLED(CONFIG_ACPI) && ACPI_HANDLE(bus->dev))
136 ret = sdw_acpi_find_slaves(bus);
137 else if (IS_ENABLED(CONFIG_OF) && bus->dev->of_node)
138 ret = sdw_of_find_slaves(bus);
139 else
140 ret = -ENOTSUPP; /* No ACPI/DT so error out */
141
142 if (ret < 0) {
143 dev_err(bus->dev, "Finding slaves failed:%d\n", ret);
144 sdw_irq_delete(bus);
145 return ret;
146 }
147
148 /*
149 * Initialize clock values based on Master properties. The max
150 * frequency is read from max_clk_freq property. Current assumption
151 * is that the bus will start at highest clock frequency when
152 * powered on.
153 *
154 * Default active bank will be 0 as out of reset the Slaves have
155 * to start with bank 0 (Table 40 of Spec)
156 */
157 prop = &bus->prop;
158 bus->params.max_dr_freq = prop->max_clk_freq * SDW_DOUBLE_RATE_FACTOR;
159 bus->params.curr_dr_freq = bus->params.max_dr_freq;
160 bus->params.curr_bank = SDW_BANK0;
161 bus->params.next_bank = SDW_BANK1;
162
163 return 0;
164 }
165 EXPORT_SYMBOL(sdw_bus_master_add);
166
sdw_delete_slave(struct device * dev,void * data)167 static int sdw_delete_slave(struct device *dev, void *data)
168 {
169 struct sdw_slave *slave = dev_to_sdw_dev(dev);
170 struct sdw_bus *bus = slave->bus;
171
172 pm_runtime_disable(dev);
173
174 sdw_slave_debugfs_exit(slave);
175
176 mutex_lock(&bus->bus_lock);
177
178 if (slave->dev_num) { /* clear dev_num if assigned */
179 clear_bit(slave->dev_num, bus->assigned);
180 if (bus->ops && bus->ops->put_device_num)
181 bus->ops->put_device_num(bus, slave);
182 }
183 list_del_init(&slave->node);
184 mutex_unlock(&bus->bus_lock);
185
186 device_unregister(dev);
187 return 0;
188 }
189
190 /**
191 * sdw_bus_master_delete() - delete the bus master instance
192 * @bus: bus to be deleted
193 *
194 * Remove the instance, delete the child devices.
195 */
sdw_bus_master_delete(struct sdw_bus * bus)196 void sdw_bus_master_delete(struct sdw_bus *bus)
197 {
198 device_for_each_child(bus->dev, NULL, sdw_delete_slave);
199
200 sdw_irq_delete(bus);
201
202 sdw_master_device_del(bus);
203
204 sdw_bus_debugfs_exit(bus);
205 lockdep_unregister_key(&bus->bus_lock_key);
206 lockdep_unregister_key(&bus->msg_lock_key);
207 ida_free(&sdw_bus_ida, bus->id);
208 }
209 EXPORT_SYMBOL(sdw_bus_master_delete);
210
211 /*
212 * SDW IO Calls
213 */
214
find_response_code(enum sdw_command_response resp)215 static inline int find_response_code(enum sdw_command_response resp)
216 {
217 switch (resp) {
218 case SDW_CMD_OK:
219 return 0;
220
221 case SDW_CMD_IGNORED:
222 return -ENODATA;
223
224 case SDW_CMD_TIMEOUT:
225 return -ETIMEDOUT;
226
227 default:
228 return -EIO;
229 }
230 }
231
do_transfer(struct sdw_bus * bus,struct sdw_msg * msg)232 static inline int do_transfer(struct sdw_bus *bus, struct sdw_msg *msg)
233 {
234 int retry = bus->prop.err_threshold;
235 enum sdw_command_response resp;
236 int ret = 0, i;
237
238 for (i = 0; i <= retry; i++) {
239 resp = bus->ops->xfer_msg(bus, msg);
240 ret = find_response_code(resp);
241
242 /* if cmd is ok or ignored return */
243 if (ret == 0 || ret == -ENODATA)
244 return ret;
245 }
246
247 return ret;
248 }
249
do_transfer_defer(struct sdw_bus * bus,struct sdw_msg * msg)250 static inline int do_transfer_defer(struct sdw_bus *bus,
251 struct sdw_msg *msg)
252 {
253 struct sdw_defer *defer = &bus->defer_msg;
254 int retry = bus->prop.err_threshold;
255 enum sdw_command_response resp;
256 int ret = 0, i;
257
258 defer->msg = msg;
259 defer->length = msg->len;
260 init_completion(&defer->complete);
261
262 for (i = 0; i <= retry; i++) {
263 resp = bus->ops->xfer_msg_defer(bus);
264 ret = find_response_code(resp);
265 /* if cmd is ok or ignored return */
266 if (ret == 0 || ret == -ENODATA)
267 return ret;
268 }
269
270 return ret;
271 }
272
sdw_transfer_unlocked(struct sdw_bus * bus,struct sdw_msg * msg)273 static int sdw_transfer_unlocked(struct sdw_bus *bus, struct sdw_msg *msg)
274 {
275 int ret;
276
277 ret = do_transfer(bus, msg);
278 if (ret != 0 && ret != -ENODATA)
279 dev_err(bus->dev, "trf on Slave %d failed:%d %s addr %x count %d\n",
280 msg->dev_num, ret,
281 (msg->flags & SDW_MSG_FLAG_WRITE) ? "write" : "read",
282 msg->addr, msg->len);
283
284 return ret;
285 }
286
287 /**
288 * sdw_transfer() - Synchronous transfer message to a SDW Slave device
289 * @bus: SDW bus
290 * @msg: SDW message to be xfered
291 */
sdw_transfer(struct sdw_bus * bus,struct sdw_msg * msg)292 int sdw_transfer(struct sdw_bus *bus, struct sdw_msg *msg)
293 {
294 int ret;
295
296 mutex_lock(&bus->msg_lock);
297
298 ret = sdw_transfer_unlocked(bus, msg);
299
300 mutex_unlock(&bus->msg_lock);
301
302 return ret;
303 }
304
305 /**
306 * sdw_show_ping_status() - Direct report of PING status, to be used by Peripheral drivers
307 * @bus: SDW bus
308 * @sync_delay: Delay before reading status
309 */
sdw_show_ping_status(struct sdw_bus * bus,bool sync_delay)310 void sdw_show_ping_status(struct sdw_bus *bus, bool sync_delay)
311 {
312 u32 status;
313
314 if (!bus->ops->read_ping_status)
315 return;
316
317 /*
318 * wait for peripheral to sync if desired. 10-15ms should be more than
319 * enough in most cases.
320 */
321 if (sync_delay)
322 usleep_range(10000, 15000);
323
324 mutex_lock(&bus->msg_lock);
325
326 status = bus->ops->read_ping_status(bus);
327
328 mutex_unlock(&bus->msg_lock);
329
330 if (!status)
331 dev_warn(bus->dev, "%s: no peripherals attached\n", __func__);
332 else
333 dev_dbg(bus->dev, "PING status: %#x\n", status);
334 }
335 EXPORT_SYMBOL(sdw_show_ping_status);
336
337 /**
338 * sdw_transfer_defer() - Asynchronously transfer message to a SDW Slave device
339 * @bus: SDW bus
340 * @msg: SDW message to be xfered
341 *
342 * Caller needs to hold the msg_lock lock while calling this
343 */
sdw_transfer_defer(struct sdw_bus * bus,struct sdw_msg * msg)344 int sdw_transfer_defer(struct sdw_bus *bus, struct sdw_msg *msg)
345 {
346 int ret;
347
348 if (!bus->ops->xfer_msg_defer)
349 return -ENOTSUPP;
350
351 ret = do_transfer_defer(bus, msg);
352 if (ret != 0 && ret != -ENODATA)
353 dev_err(bus->dev, "Defer trf on Slave %d failed:%d\n",
354 msg->dev_num, ret);
355
356 return ret;
357 }
358
sdw_fill_msg(struct sdw_msg * msg,struct sdw_slave * slave,u32 addr,size_t count,u16 dev_num,u8 flags,u8 * buf)359 int sdw_fill_msg(struct sdw_msg *msg, struct sdw_slave *slave,
360 u32 addr, size_t count, u16 dev_num, u8 flags, u8 *buf)
361 {
362 memset(msg, 0, sizeof(*msg));
363 msg->addr = addr; /* addr is 16 bit and truncated here */
364 msg->len = count;
365 msg->dev_num = dev_num;
366 msg->flags = flags;
367 msg->buf = buf;
368
369 if (addr < SDW_REG_NO_PAGE) /* no paging area */
370 return 0;
371
372 if (addr >= SDW_REG_MAX) { /* illegal addr */
373 pr_err("SDW: Invalid address %x passed\n", addr);
374 return -EINVAL;
375 }
376
377 if (addr < SDW_REG_OPTIONAL_PAGE) { /* 32k but no page */
378 if (slave && !slave->prop.paging_support)
379 return 0;
380 /* no need for else as that will fall-through to paging */
381 }
382
383 /* paging mandatory */
384 if (dev_num == SDW_ENUM_DEV_NUM || dev_num == SDW_BROADCAST_DEV_NUM) {
385 pr_err("SDW: Invalid device for paging :%d\n", dev_num);
386 return -EINVAL;
387 }
388
389 if (!slave) {
390 pr_err("SDW: No slave for paging addr\n");
391 return -EINVAL;
392 }
393
394 if (!slave->prop.paging_support) {
395 dev_err(&slave->dev,
396 "address %x needs paging but no support\n", addr);
397 return -EINVAL;
398 }
399
400 msg->addr_page1 = FIELD_GET(SDW_SCP_ADDRPAGE1_MASK, addr);
401 msg->addr_page2 = FIELD_GET(SDW_SCP_ADDRPAGE2_MASK, addr);
402 msg->addr |= BIT(15);
403 msg->page = true;
404
405 return 0;
406 }
407
408 /*
409 * Read/Write IO functions.
410 */
411
sdw_ntransfer_no_pm(struct sdw_slave * slave,u32 addr,u8 flags,size_t count,u8 * val)412 static int sdw_ntransfer_no_pm(struct sdw_slave *slave, u32 addr, u8 flags,
413 size_t count, u8 *val)
414 {
415 struct sdw_msg msg;
416 size_t size;
417 int ret;
418
419 while (count) {
420 // Only handle bytes up to next page boundary
421 size = min_t(size_t, count, (SDW_REGADDR + 1) - (addr & SDW_REGADDR));
422
423 ret = sdw_fill_msg(&msg, slave, addr, size, slave->dev_num, flags, val);
424 if (ret < 0)
425 return ret;
426
427 ret = sdw_transfer(slave->bus, &msg);
428 if (ret < 0 && !slave->is_mockup_device)
429 return ret;
430
431 addr += size;
432 val += size;
433 count -= size;
434 }
435
436 return 0;
437 }
438
439 /**
440 * sdw_nread_no_pm() - Read "n" contiguous SDW Slave registers with no PM
441 * @slave: SDW Slave
442 * @addr: Register address
443 * @count: length
444 * @val: Buffer for values to be read
445 *
446 * Note that if the message crosses a page boundary each page will be
447 * transferred under a separate invocation of the msg_lock.
448 */
sdw_nread_no_pm(struct sdw_slave * slave,u32 addr,size_t count,u8 * val)449 int sdw_nread_no_pm(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
450 {
451 return sdw_ntransfer_no_pm(slave, addr, SDW_MSG_FLAG_READ, count, val);
452 }
453 EXPORT_SYMBOL(sdw_nread_no_pm);
454
455 /**
456 * sdw_nwrite_no_pm() - Write "n" contiguous SDW Slave registers with no PM
457 * @slave: SDW Slave
458 * @addr: Register address
459 * @count: length
460 * @val: Buffer for values to be written
461 *
462 * Note that if the message crosses a page boundary each page will be
463 * transferred under a separate invocation of the msg_lock.
464 */
sdw_nwrite_no_pm(struct sdw_slave * slave,u32 addr,size_t count,const u8 * val)465 int sdw_nwrite_no_pm(struct sdw_slave *slave, u32 addr, size_t count, const u8 *val)
466 {
467 return sdw_ntransfer_no_pm(slave, addr, SDW_MSG_FLAG_WRITE, count, (u8 *)val);
468 }
469 EXPORT_SYMBOL(sdw_nwrite_no_pm);
470
471 /**
472 * sdw_write_no_pm() - Write a SDW Slave register with no PM
473 * @slave: SDW Slave
474 * @addr: Register address
475 * @value: Register value
476 */
sdw_write_no_pm(struct sdw_slave * slave,u32 addr,u8 value)477 int sdw_write_no_pm(struct sdw_slave *slave, u32 addr, u8 value)
478 {
479 return sdw_nwrite_no_pm(slave, addr, 1, &value);
480 }
481 EXPORT_SYMBOL(sdw_write_no_pm);
482
483 static int
sdw_bread_no_pm(struct sdw_bus * bus,u16 dev_num,u32 addr)484 sdw_bread_no_pm(struct sdw_bus *bus, u16 dev_num, u32 addr)
485 {
486 struct sdw_msg msg;
487 u8 buf;
488 int ret;
489
490 ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
491 SDW_MSG_FLAG_READ, &buf);
492 if (ret < 0)
493 return ret;
494
495 ret = sdw_transfer(bus, &msg);
496 if (ret < 0)
497 return ret;
498
499 return buf;
500 }
501
502 static int
sdw_bwrite_no_pm(struct sdw_bus * bus,u16 dev_num,u32 addr,u8 value)503 sdw_bwrite_no_pm(struct sdw_bus *bus, u16 dev_num, u32 addr, u8 value)
504 {
505 struct sdw_msg msg;
506 int ret;
507
508 ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
509 SDW_MSG_FLAG_WRITE, &value);
510 if (ret < 0)
511 return ret;
512
513 return sdw_transfer(bus, &msg);
514 }
515
sdw_bread_no_pm_unlocked(struct sdw_bus * bus,u16 dev_num,u32 addr)516 int sdw_bread_no_pm_unlocked(struct sdw_bus *bus, u16 dev_num, u32 addr)
517 {
518 struct sdw_msg msg;
519 u8 buf;
520 int ret;
521
522 ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
523 SDW_MSG_FLAG_READ, &buf);
524 if (ret < 0)
525 return ret;
526
527 ret = sdw_transfer_unlocked(bus, &msg);
528 if (ret < 0)
529 return ret;
530
531 return buf;
532 }
533 EXPORT_SYMBOL(sdw_bread_no_pm_unlocked);
534
sdw_bwrite_no_pm_unlocked(struct sdw_bus * bus,u16 dev_num,u32 addr,u8 value)535 int sdw_bwrite_no_pm_unlocked(struct sdw_bus *bus, u16 dev_num, u32 addr, u8 value)
536 {
537 struct sdw_msg msg;
538 int ret;
539
540 ret = sdw_fill_msg(&msg, NULL, addr, 1, dev_num,
541 SDW_MSG_FLAG_WRITE, &value);
542 if (ret < 0)
543 return ret;
544
545 return sdw_transfer_unlocked(bus, &msg);
546 }
547 EXPORT_SYMBOL(sdw_bwrite_no_pm_unlocked);
548
549 /**
550 * sdw_read_no_pm() - Read a SDW Slave register with no PM
551 * @slave: SDW Slave
552 * @addr: Register address
553 */
sdw_read_no_pm(struct sdw_slave * slave,u32 addr)554 int sdw_read_no_pm(struct sdw_slave *slave, u32 addr)
555 {
556 u8 buf;
557 int ret;
558
559 ret = sdw_nread_no_pm(slave, addr, 1, &buf);
560 if (ret < 0)
561 return ret;
562 else
563 return buf;
564 }
565 EXPORT_SYMBOL(sdw_read_no_pm);
566
sdw_update_no_pm(struct sdw_slave * slave,u32 addr,u8 mask,u8 val)567 int sdw_update_no_pm(struct sdw_slave *slave, u32 addr, u8 mask, u8 val)
568 {
569 int tmp;
570
571 tmp = sdw_read_no_pm(slave, addr);
572 if (tmp < 0)
573 return tmp;
574
575 tmp = (tmp & ~mask) | val;
576 return sdw_write_no_pm(slave, addr, tmp);
577 }
578 EXPORT_SYMBOL(sdw_update_no_pm);
579
580 /* Read-Modify-Write Slave register */
sdw_update(struct sdw_slave * slave,u32 addr,u8 mask,u8 val)581 int sdw_update(struct sdw_slave *slave, u32 addr, u8 mask, u8 val)
582 {
583 int tmp;
584
585 tmp = sdw_read(slave, addr);
586 if (tmp < 0)
587 return tmp;
588
589 tmp = (tmp & ~mask) | val;
590 return sdw_write(slave, addr, tmp);
591 }
592 EXPORT_SYMBOL(sdw_update);
593
594 /**
595 * sdw_nread() - Read "n" contiguous SDW Slave registers
596 * @slave: SDW Slave
597 * @addr: Register address
598 * @count: length
599 * @val: Buffer for values to be read
600 *
601 * This version of the function will take a PM reference to the slave
602 * device.
603 * Note that if the message crosses a page boundary each page will be
604 * transferred under a separate invocation of the msg_lock.
605 */
sdw_nread(struct sdw_slave * slave,u32 addr,size_t count,u8 * val)606 int sdw_nread(struct sdw_slave *slave, u32 addr, size_t count, u8 *val)
607 {
608 int ret;
609
610 ret = pm_runtime_get_sync(&slave->dev);
611 if (ret < 0 && ret != -EACCES) {
612 pm_runtime_put_noidle(&slave->dev);
613 return ret;
614 }
615
616 ret = sdw_nread_no_pm(slave, addr, count, val);
617
618 pm_runtime_mark_last_busy(&slave->dev);
619 pm_runtime_put(&slave->dev);
620
621 return ret;
622 }
623 EXPORT_SYMBOL(sdw_nread);
624
625 /**
626 * sdw_nwrite() - Write "n" contiguous SDW Slave registers
627 * @slave: SDW Slave
628 * @addr: Register address
629 * @count: length
630 * @val: Buffer for values to be written
631 *
632 * This version of the function will take a PM reference to the slave
633 * device.
634 * Note that if the message crosses a page boundary each page will be
635 * transferred under a separate invocation of the msg_lock.
636 */
sdw_nwrite(struct sdw_slave * slave,u32 addr,size_t count,const u8 * val)637 int sdw_nwrite(struct sdw_slave *slave, u32 addr, size_t count, const u8 *val)
638 {
639 int ret;
640
641 ret = pm_runtime_get_sync(&slave->dev);
642 if (ret < 0 && ret != -EACCES) {
643 pm_runtime_put_noidle(&slave->dev);
644 return ret;
645 }
646
647 ret = sdw_nwrite_no_pm(slave, addr, count, val);
648
649 pm_runtime_mark_last_busy(&slave->dev);
650 pm_runtime_put(&slave->dev);
651
652 return ret;
653 }
654 EXPORT_SYMBOL(sdw_nwrite);
655
656 /**
657 * sdw_read() - Read a SDW Slave register
658 * @slave: SDW Slave
659 * @addr: Register address
660 *
661 * This version of the function will take a PM reference to the slave
662 * device.
663 */
sdw_read(struct sdw_slave * slave,u32 addr)664 int sdw_read(struct sdw_slave *slave, u32 addr)
665 {
666 u8 buf;
667 int ret;
668
669 ret = sdw_nread(slave, addr, 1, &buf);
670 if (ret < 0)
671 return ret;
672
673 return buf;
674 }
675 EXPORT_SYMBOL(sdw_read);
676
677 /**
678 * sdw_write() - Write a SDW Slave register
679 * @slave: SDW Slave
680 * @addr: Register address
681 * @value: Register value
682 *
683 * This version of the function will take a PM reference to the slave
684 * device.
685 */
sdw_write(struct sdw_slave * slave,u32 addr,u8 value)686 int sdw_write(struct sdw_slave *slave, u32 addr, u8 value)
687 {
688 return sdw_nwrite(slave, addr, 1, &value);
689 }
690 EXPORT_SYMBOL(sdw_write);
691
692 /*
693 * SDW alert handling
694 */
695
696 /* called with bus_lock held */
sdw_get_slave(struct sdw_bus * bus,int i)697 static struct sdw_slave *sdw_get_slave(struct sdw_bus *bus, int i)
698 {
699 struct sdw_slave *slave;
700
701 list_for_each_entry(slave, &bus->slaves, node) {
702 if (slave->dev_num == i)
703 return slave;
704 }
705
706 return NULL;
707 }
708
sdw_compare_devid(struct sdw_slave * slave,struct sdw_slave_id id)709 int sdw_compare_devid(struct sdw_slave *slave, struct sdw_slave_id id)
710 {
711 if (slave->id.mfg_id != id.mfg_id ||
712 slave->id.part_id != id.part_id ||
713 slave->id.class_id != id.class_id ||
714 (slave->id.unique_id != SDW_IGNORED_UNIQUE_ID &&
715 slave->id.unique_id != id.unique_id))
716 return -ENODEV;
717
718 return 0;
719 }
720 EXPORT_SYMBOL(sdw_compare_devid);
721
722 /* called with bus_lock held */
sdw_get_device_num(struct sdw_slave * slave)723 static int sdw_get_device_num(struct sdw_slave *slave)
724 {
725 struct sdw_bus *bus = slave->bus;
726 int bit;
727
728 if (bus->ops && bus->ops->get_device_num) {
729 bit = bus->ops->get_device_num(bus, slave);
730 if (bit < 0)
731 goto err;
732 } else {
733 bit = find_first_zero_bit(bus->assigned, SDW_MAX_DEVICES);
734 if (bit == SDW_MAX_DEVICES) {
735 bit = -ENODEV;
736 goto err;
737 }
738 }
739
740 /*
741 * Do not update dev_num in Slave data structure here,
742 * Update once program dev_num is successful
743 */
744 set_bit(bit, bus->assigned);
745
746 err:
747 return bit;
748 }
749
sdw_assign_device_num(struct sdw_slave * slave)750 static int sdw_assign_device_num(struct sdw_slave *slave)
751 {
752 struct sdw_bus *bus = slave->bus;
753 int ret, dev_num;
754 bool new_device = false;
755
756 /* check first if device number is assigned, if so reuse that */
757 if (!slave->dev_num) {
758 if (!slave->dev_num_sticky) {
759 mutex_lock(&slave->bus->bus_lock);
760 dev_num = sdw_get_device_num(slave);
761 mutex_unlock(&slave->bus->bus_lock);
762 if (dev_num < 0) {
763 dev_err(bus->dev, "Get dev_num failed: %d\n",
764 dev_num);
765 return dev_num;
766 }
767 slave->dev_num = dev_num;
768 slave->dev_num_sticky = dev_num;
769 new_device = true;
770 } else {
771 slave->dev_num = slave->dev_num_sticky;
772 }
773 }
774
775 if (!new_device)
776 dev_dbg(bus->dev,
777 "Slave already registered, reusing dev_num:%d\n",
778 slave->dev_num);
779
780 /* Clear the slave->dev_num to transfer message on device 0 */
781 dev_num = slave->dev_num;
782 slave->dev_num = 0;
783
784 ret = sdw_write_no_pm(slave, SDW_SCP_DEVNUMBER, dev_num);
785 if (ret < 0) {
786 dev_err(bus->dev, "Program device_num %d failed: %d\n",
787 dev_num, ret);
788 return ret;
789 }
790
791 /* After xfer of msg, restore dev_num */
792 slave->dev_num = slave->dev_num_sticky;
793
794 if (bus->ops && bus->ops->new_peripheral_assigned)
795 bus->ops->new_peripheral_assigned(bus, slave, dev_num);
796
797 return 0;
798 }
799
sdw_extract_slave_id(struct sdw_bus * bus,u64 addr,struct sdw_slave_id * id)800 void sdw_extract_slave_id(struct sdw_bus *bus,
801 u64 addr, struct sdw_slave_id *id)
802 {
803 dev_dbg(bus->dev, "SDW Slave Addr: %llx\n", addr);
804
805 id->sdw_version = SDW_VERSION(addr);
806 id->unique_id = SDW_UNIQUE_ID(addr);
807 id->mfg_id = SDW_MFG_ID(addr);
808 id->part_id = SDW_PART_ID(addr);
809 id->class_id = SDW_CLASS_ID(addr);
810
811 dev_dbg(bus->dev,
812 "SDW Slave class_id 0x%02x, mfg_id 0x%04x, part_id 0x%04x, unique_id 0x%x, version 0x%x\n",
813 id->class_id, id->mfg_id, id->part_id, id->unique_id, id->sdw_version);
814 }
815 EXPORT_SYMBOL(sdw_extract_slave_id);
816
sdw_program_device_num(struct sdw_bus * bus,bool * programmed)817 static int sdw_program_device_num(struct sdw_bus *bus, bool *programmed)
818 {
819 u8 buf[SDW_NUM_DEV_ID_REGISTERS] = {0};
820 struct sdw_slave *slave, *_s;
821 struct sdw_slave_id id;
822 struct sdw_msg msg;
823 bool found;
824 int count = 0, ret;
825 u64 addr;
826
827 *programmed = false;
828
829 /* No Slave, so use raw xfer api */
830 ret = sdw_fill_msg(&msg, NULL, SDW_SCP_DEVID_0,
831 SDW_NUM_DEV_ID_REGISTERS, 0, SDW_MSG_FLAG_READ, buf);
832 if (ret < 0)
833 return ret;
834
835 do {
836 ret = sdw_transfer(bus, &msg);
837 if (ret == -ENODATA) { /* end of device id reads */
838 dev_dbg(bus->dev, "No more devices to enumerate\n");
839 ret = 0;
840 break;
841 }
842 if (ret < 0) {
843 dev_err(bus->dev, "DEVID read fail:%d\n", ret);
844 break;
845 }
846
847 /*
848 * Construct the addr and extract. Cast the higher shift
849 * bits to avoid truncation due to size limit.
850 */
851 addr = buf[5] | (buf[4] << 8) | (buf[3] << 16) |
852 ((u64)buf[2] << 24) | ((u64)buf[1] << 32) |
853 ((u64)buf[0] << 40);
854
855 sdw_extract_slave_id(bus, addr, &id);
856
857 found = false;
858 /* Now compare with entries */
859 list_for_each_entry_safe(slave, _s, &bus->slaves, node) {
860 if (sdw_compare_devid(slave, id) == 0) {
861 found = true;
862
863 /*
864 * To prevent skipping state-machine stages don't
865 * program a device until we've seen it UNATTACH.
866 * Must return here because no other device on #0
867 * can be detected until this one has been
868 * assigned a device ID.
869 */
870 if (slave->status != SDW_SLAVE_UNATTACHED)
871 return 0;
872
873 /*
874 * Assign a new dev_num to this Slave and
875 * not mark it present. It will be marked
876 * present after it reports ATTACHED on new
877 * dev_num
878 */
879 ret = sdw_assign_device_num(slave);
880 if (ret < 0) {
881 dev_err(bus->dev,
882 "Assign dev_num failed:%d\n",
883 ret);
884 return ret;
885 }
886
887 *programmed = true;
888
889 break;
890 }
891 }
892
893 if (!found) {
894 /* TODO: Park this device in Group 13 */
895
896 /*
897 * add Slave device even if there is no platform
898 * firmware description. There will be no driver probe
899 * but the user/integration will be able to see the
900 * device, enumeration status and device number in sysfs
901 */
902 sdw_slave_add(bus, &id, NULL);
903
904 dev_err(bus->dev, "Slave Entry not found\n");
905 }
906
907 count++;
908
909 /*
910 * Check till error out or retry (count) exhausts.
911 * Device can drop off and rejoin during enumeration
912 * so count till twice the bound.
913 */
914
915 } while (ret == 0 && count < (SDW_MAX_DEVICES * 2));
916
917 return ret;
918 }
919
sdw_modify_slave_status(struct sdw_slave * slave,enum sdw_slave_status status)920 static void sdw_modify_slave_status(struct sdw_slave *slave,
921 enum sdw_slave_status status)
922 {
923 struct sdw_bus *bus = slave->bus;
924
925 mutex_lock(&bus->bus_lock);
926
927 dev_vdbg(bus->dev,
928 "changing status slave %d status %d new status %d\n",
929 slave->dev_num, slave->status, status);
930
931 if (status == SDW_SLAVE_UNATTACHED) {
932 dev_dbg(&slave->dev,
933 "initializing enumeration and init completion for Slave %d\n",
934 slave->dev_num);
935
936 reinit_completion(&slave->enumeration_complete);
937 reinit_completion(&slave->initialization_complete);
938
939 } else if ((status == SDW_SLAVE_ATTACHED) &&
940 (slave->status == SDW_SLAVE_UNATTACHED)) {
941 dev_dbg(&slave->dev,
942 "signaling enumeration completion for Slave %d\n",
943 slave->dev_num);
944
945 complete_all(&slave->enumeration_complete);
946 }
947 slave->status = status;
948 mutex_unlock(&bus->bus_lock);
949 }
950
sdw_slave_clk_stop_callback(struct sdw_slave * slave,enum sdw_clk_stop_mode mode,enum sdw_clk_stop_type type)951 static int sdw_slave_clk_stop_callback(struct sdw_slave *slave,
952 enum sdw_clk_stop_mode mode,
953 enum sdw_clk_stop_type type)
954 {
955 int ret = 0;
956
957 mutex_lock(&slave->sdw_dev_lock);
958
959 if (slave->probed) {
960 struct device *dev = &slave->dev;
961 struct sdw_driver *drv = drv_to_sdw_driver(dev->driver);
962
963 if (drv->ops && drv->ops->clk_stop)
964 ret = drv->ops->clk_stop(slave, mode, type);
965 }
966
967 mutex_unlock(&slave->sdw_dev_lock);
968
969 return ret;
970 }
971
sdw_slave_clk_stop_prepare(struct sdw_slave * slave,enum sdw_clk_stop_mode mode,bool prepare)972 static int sdw_slave_clk_stop_prepare(struct sdw_slave *slave,
973 enum sdw_clk_stop_mode mode,
974 bool prepare)
975 {
976 bool wake_en;
977 u32 val = 0;
978 int ret;
979
980 wake_en = slave->prop.wake_capable;
981
982 if (prepare) {
983 val = SDW_SCP_SYSTEMCTRL_CLK_STP_PREP;
984
985 if (mode == SDW_CLK_STOP_MODE1)
986 val |= SDW_SCP_SYSTEMCTRL_CLK_STP_MODE1;
987
988 if (wake_en)
989 val |= SDW_SCP_SYSTEMCTRL_WAKE_UP_EN;
990 } else {
991 ret = sdw_read_no_pm(slave, SDW_SCP_SYSTEMCTRL);
992 if (ret < 0) {
993 if (ret != -ENODATA)
994 dev_err(&slave->dev, "SDW_SCP_SYSTEMCTRL read failed:%d\n", ret);
995 return ret;
996 }
997 val = ret;
998 val &= ~(SDW_SCP_SYSTEMCTRL_CLK_STP_PREP);
999 }
1000
1001 ret = sdw_write_no_pm(slave, SDW_SCP_SYSTEMCTRL, val);
1002
1003 if (ret < 0 && ret != -ENODATA)
1004 dev_err(&slave->dev, "SDW_SCP_SYSTEMCTRL write failed:%d\n", ret);
1005
1006 return ret;
1007 }
1008
sdw_bus_wait_for_clk_prep_deprep(struct sdw_bus * bus,u16 dev_num)1009 static int sdw_bus_wait_for_clk_prep_deprep(struct sdw_bus *bus, u16 dev_num)
1010 {
1011 int retry = bus->clk_stop_timeout;
1012 int val;
1013
1014 do {
1015 val = sdw_bread_no_pm(bus, dev_num, SDW_SCP_STAT);
1016 if (val < 0) {
1017 if (val != -ENODATA)
1018 dev_err(bus->dev, "SDW_SCP_STAT bread failed:%d\n", val);
1019 return val;
1020 }
1021 val &= SDW_SCP_STAT_CLK_STP_NF;
1022 if (!val) {
1023 dev_dbg(bus->dev, "clock stop prep/de-prep done slave:%d\n",
1024 dev_num);
1025 return 0;
1026 }
1027
1028 usleep_range(1000, 1500);
1029 retry--;
1030 } while (retry);
1031
1032 dev_err(bus->dev, "clock stop prep/de-prep failed slave:%d\n",
1033 dev_num);
1034
1035 return -ETIMEDOUT;
1036 }
1037
1038 /**
1039 * sdw_bus_prep_clk_stop: prepare Slave(s) for clock stop
1040 *
1041 * @bus: SDW bus instance
1042 *
1043 * Query Slave for clock stop mode and prepare for that mode.
1044 */
sdw_bus_prep_clk_stop(struct sdw_bus * bus)1045 int sdw_bus_prep_clk_stop(struct sdw_bus *bus)
1046 {
1047 bool simple_clk_stop = true;
1048 struct sdw_slave *slave;
1049 bool is_slave = false;
1050 int ret = 0;
1051
1052 /*
1053 * In order to save on transition time, prepare
1054 * each Slave and then wait for all Slave(s) to be
1055 * prepared for clock stop.
1056 * If one of the Slave devices has lost sync and
1057 * replies with Command Ignored/-ENODATA, we continue
1058 * the loop
1059 */
1060 list_for_each_entry(slave, &bus->slaves, node) {
1061 if (!slave->dev_num)
1062 continue;
1063
1064 if (slave->status != SDW_SLAVE_ATTACHED &&
1065 slave->status != SDW_SLAVE_ALERT)
1066 continue;
1067
1068 /* Identify if Slave(s) are available on Bus */
1069 is_slave = true;
1070
1071 ret = sdw_slave_clk_stop_callback(slave,
1072 SDW_CLK_STOP_MODE0,
1073 SDW_CLK_PRE_PREPARE);
1074 if (ret < 0 && ret != -ENODATA) {
1075 dev_err(&slave->dev, "clock stop pre-prepare cb failed:%d\n", ret);
1076 return ret;
1077 }
1078
1079 /* Only prepare a Slave device if needed */
1080 if (!slave->prop.simple_clk_stop_capable) {
1081 simple_clk_stop = false;
1082
1083 ret = sdw_slave_clk_stop_prepare(slave,
1084 SDW_CLK_STOP_MODE0,
1085 true);
1086 if (ret < 0 && ret != -ENODATA) {
1087 dev_err(&slave->dev, "clock stop prepare failed:%d\n", ret);
1088 return ret;
1089 }
1090 }
1091 }
1092
1093 /* Skip remaining clock stop preparation if no Slave is attached */
1094 if (!is_slave)
1095 return 0;
1096
1097 /*
1098 * Don't wait for all Slaves to be ready if they follow the simple
1099 * state machine
1100 */
1101 if (!simple_clk_stop) {
1102 ret = sdw_bus_wait_for_clk_prep_deprep(bus,
1103 SDW_BROADCAST_DEV_NUM);
1104 /*
1105 * if there are no Slave devices present and the reply is
1106 * Command_Ignored/-ENODATA, we don't need to continue with the
1107 * flow and can just return here. The error code is not modified
1108 * and its handling left as an exercise for the caller.
1109 */
1110 if (ret < 0)
1111 return ret;
1112 }
1113
1114 /* Inform slaves that prep is done */
1115 list_for_each_entry(slave, &bus->slaves, node) {
1116 if (!slave->dev_num)
1117 continue;
1118
1119 if (slave->status != SDW_SLAVE_ATTACHED &&
1120 slave->status != SDW_SLAVE_ALERT)
1121 continue;
1122
1123 ret = sdw_slave_clk_stop_callback(slave,
1124 SDW_CLK_STOP_MODE0,
1125 SDW_CLK_POST_PREPARE);
1126
1127 if (ret < 0 && ret != -ENODATA) {
1128 dev_err(&slave->dev, "clock stop post-prepare cb failed:%d\n", ret);
1129 return ret;
1130 }
1131 }
1132
1133 return 0;
1134 }
1135 EXPORT_SYMBOL(sdw_bus_prep_clk_stop);
1136
1137 /**
1138 * sdw_bus_clk_stop: stop bus clock
1139 *
1140 * @bus: SDW bus instance
1141 *
1142 * After preparing the Slaves for clock stop, stop the clock by broadcasting
1143 * write to SCP_CTRL register.
1144 */
sdw_bus_clk_stop(struct sdw_bus * bus)1145 int sdw_bus_clk_stop(struct sdw_bus *bus)
1146 {
1147 int ret;
1148
1149 /*
1150 * broadcast clock stop now, attached Slaves will ACK this,
1151 * unattached will ignore
1152 */
1153 ret = sdw_bwrite_no_pm(bus, SDW_BROADCAST_DEV_NUM,
1154 SDW_SCP_CTRL, SDW_SCP_CTRL_CLK_STP_NOW);
1155 if (ret < 0) {
1156 if (ret != -ENODATA)
1157 dev_err(bus->dev, "ClockStopNow Broadcast msg failed %d\n", ret);
1158 return ret;
1159 }
1160
1161 return 0;
1162 }
1163 EXPORT_SYMBOL(sdw_bus_clk_stop);
1164
1165 /**
1166 * sdw_bus_exit_clk_stop: Exit clock stop mode
1167 *
1168 * @bus: SDW bus instance
1169 *
1170 * This De-prepares the Slaves by exiting Clock Stop Mode 0. For the Slaves
1171 * exiting Clock Stop Mode 1, they will be de-prepared after they enumerate
1172 * back.
1173 */
sdw_bus_exit_clk_stop(struct sdw_bus * bus)1174 int sdw_bus_exit_clk_stop(struct sdw_bus *bus)
1175 {
1176 bool simple_clk_stop = true;
1177 struct sdw_slave *slave;
1178 bool is_slave = false;
1179 int ret;
1180
1181 /*
1182 * In order to save on transition time, de-prepare
1183 * each Slave and then wait for all Slave(s) to be
1184 * de-prepared after clock resume.
1185 */
1186 list_for_each_entry(slave, &bus->slaves, node) {
1187 if (!slave->dev_num)
1188 continue;
1189
1190 if (slave->status != SDW_SLAVE_ATTACHED &&
1191 slave->status != SDW_SLAVE_ALERT)
1192 continue;
1193
1194 /* Identify if Slave(s) are available on Bus */
1195 is_slave = true;
1196
1197 ret = sdw_slave_clk_stop_callback(slave, SDW_CLK_STOP_MODE0,
1198 SDW_CLK_PRE_DEPREPARE);
1199 if (ret < 0)
1200 dev_warn(&slave->dev, "clock stop pre-deprepare cb failed:%d\n", ret);
1201
1202 /* Only de-prepare a Slave device if needed */
1203 if (!slave->prop.simple_clk_stop_capable) {
1204 simple_clk_stop = false;
1205
1206 ret = sdw_slave_clk_stop_prepare(slave, SDW_CLK_STOP_MODE0,
1207 false);
1208
1209 if (ret < 0)
1210 dev_warn(&slave->dev, "clock stop deprepare failed:%d\n", ret);
1211 }
1212 }
1213
1214 /* Skip remaining clock stop de-preparation if no Slave is attached */
1215 if (!is_slave)
1216 return 0;
1217
1218 /*
1219 * Don't wait for all Slaves to be ready if they follow the simple
1220 * state machine
1221 */
1222 if (!simple_clk_stop) {
1223 ret = sdw_bus_wait_for_clk_prep_deprep(bus, SDW_BROADCAST_DEV_NUM);
1224 if (ret < 0)
1225 dev_warn(bus->dev, "clock stop deprepare wait failed:%d\n", ret);
1226 }
1227
1228 list_for_each_entry(slave, &bus->slaves, node) {
1229 if (!slave->dev_num)
1230 continue;
1231
1232 if (slave->status != SDW_SLAVE_ATTACHED &&
1233 slave->status != SDW_SLAVE_ALERT)
1234 continue;
1235
1236 ret = sdw_slave_clk_stop_callback(slave, SDW_CLK_STOP_MODE0,
1237 SDW_CLK_POST_DEPREPARE);
1238 if (ret < 0)
1239 dev_warn(&slave->dev, "clock stop post-deprepare cb failed:%d\n", ret);
1240 }
1241
1242 return 0;
1243 }
1244 EXPORT_SYMBOL(sdw_bus_exit_clk_stop);
1245
sdw_configure_dpn_intr(struct sdw_slave * slave,int port,bool enable,int mask)1246 int sdw_configure_dpn_intr(struct sdw_slave *slave,
1247 int port, bool enable, int mask)
1248 {
1249 u32 addr;
1250 int ret;
1251 u8 val = 0;
1252
1253 if (slave->bus->params.s_data_mode != SDW_PORT_DATA_MODE_NORMAL) {
1254 dev_dbg(&slave->dev, "TEST FAIL interrupt %s\n",
1255 enable ? "on" : "off");
1256 mask |= SDW_DPN_INT_TEST_FAIL;
1257 }
1258
1259 addr = SDW_DPN_INTMASK(port);
1260
1261 /* Set/Clear port ready interrupt mask */
1262 if (enable) {
1263 val |= mask;
1264 val |= SDW_DPN_INT_PORT_READY;
1265 } else {
1266 val &= ~(mask);
1267 val &= ~SDW_DPN_INT_PORT_READY;
1268 }
1269
1270 ret = sdw_update_no_pm(slave, addr, (mask | SDW_DPN_INT_PORT_READY), val);
1271 if (ret < 0)
1272 dev_err(&slave->dev,
1273 "SDW_DPN_INTMASK write failed:%d\n", val);
1274
1275 return ret;
1276 }
1277
sdw_slave_set_frequency(struct sdw_slave * slave)1278 static int sdw_slave_set_frequency(struct sdw_slave *slave)
1279 {
1280 u32 mclk_freq = slave->bus->prop.mclk_freq;
1281 u32 curr_freq = slave->bus->params.curr_dr_freq >> 1;
1282 unsigned int scale;
1283 u8 scale_index;
1284 u8 base;
1285 int ret;
1286
1287 /*
1288 * frequency base and scale registers are required for SDCA
1289 * devices. They may also be used for 1.2+/non-SDCA devices.
1290 * Driver can set the property, we will need a DisCo property
1291 * to discover this case from platform firmware.
1292 */
1293 if (!slave->id.class_id && !slave->prop.clock_reg_supported)
1294 return 0;
1295
1296 if (!mclk_freq) {
1297 dev_err(&slave->dev,
1298 "no bus MCLK, cannot set SDW_SCP_BUS_CLOCK_BASE\n");
1299 return -EINVAL;
1300 }
1301
1302 /*
1303 * map base frequency using Table 89 of SoundWire 1.2 spec.
1304 * The order of the tests just follows the specification, this
1305 * is not a selection between possible values or a search for
1306 * the best value but just a mapping. Only one case per platform
1307 * is relevant.
1308 * Some BIOS have inconsistent values for mclk_freq but a
1309 * correct root so we force the mclk_freq to avoid variations.
1310 */
1311 if (!(19200000 % mclk_freq)) {
1312 mclk_freq = 19200000;
1313 base = SDW_SCP_BASE_CLOCK_19200000_HZ;
1314 } else if (!(24000000 % mclk_freq)) {
1315 mclk_freq = 24000000;
1316 base = SDW_SCP_BASE_CLOCK_24000000_HZ;
1317 } else if (!(24576000 % mclk_freq)) {
1318 mclk_freq = 24576000;
1319 base = SDW_SCP_BASE_CLOCK_24576000_HZ;
1320 } else if (!(22579200 % mclk_freq)) {
1321 mclk_freq = 22579200;
1322 base = SDW_SCP_BASE_CLOCK_22579200_HZ;
1323 } else if (!(32000000 % mclk_freq)) {
1324 mclk_freq = 32000000;
1325 base = SDW_SCP_BASE_CLOCK_32000000_HZ;
1326 } else {
1327 dev_err(&slave->dev,
1328 "Unsupported clock base, mclk %d\n",
1329 mclk_freq);
1330 return -EINVAL;
1331 }
1332
1333 if (mclk_freq % curr_freq) {
1334 dev_err(&slave->dev,
1335 "mclk %d is not multiple of bus curr_freq %d\n",
1336 mclk_freq, curr_freq);
1337 return -EINVAL;
1338 }
1339
1340 scale = mclk_freq / curr_freq;
1341
1342 /*
1343 * map scale to Table 90 of SoundWire 1.2 spec - and check
1344 * that the scale is a power of two and maximum 64
1345 */
1346 scale_index = ilog2(scale);
1347
1348 if (BIT(scale_index) != scale || scale_index > 6) {
1349 dev_err(&slave->dev,
1350 "No match found for scale %d, bus mclk %d curr_freq %d\n",
1351 scale, mclk_freq, curr_freq);
1352 return -EINVAL;
1353 }
1354 scale_index++;
1355
1356 ret = sdw_write_no_pm(slave, SDW_SCP_BUS_CLOCK_BASE, base);
1357 if (ret < 0) {
1358 dev_err(&slave->dev,
1359 "SDW_SCP_BUS_CLOCK_BASE write failed:%d\n", ret);
1360 return ret;
1361 }
1362
1363 /* initialize scale for both banks */
1364 ret = sdw_write_no_pm(slave, SDW_SCP_BUSCLOCK_SCALE_B0, scale_index);
1365 if (ret < 0) {
1366 dev_err(&slave->dev,
1367 "SDW_SCP_BUSCLOCK_SCALE_B0 write failed:%d\n", ret);
1368 return ret;
1369 }
1370 ret = sdw_write_no_pm(slave, SDW_SCP_BUSCLOCK_SCALE_B1, scale_index);
1371 if (ret < 0)
1372 dev_err(&slave->dev,
1373 "SDW_SCP_BUSCLOCK_SCALE_B1 write failed:%d\n", ret);
1374
1375 dev_dbg(&slave->dev,
1376 "Configured bus base %d, scale %d, mclk %d, curr_freq %d\n",
1377 base, scale_index, mclk_freq, curr_freq);
1378
1379 return ret;
1380 }
1381
sdw_initialize_slave(struct sdw_slave * slave)1382 static int sdw_initialize_slave(struct sdw_slave *slave)
1383 {
1384 struct sdw_slave_prop *prop = &slave->prop;
1385 int status;
1386 int ret;
1387 u8 val;
1388
1389 ret = sdw_slave_set_frequency(slave);
1390 if (ret < 0)
1391 return ret;
1392
1393 if (slave->bus->prop.quirks & SDW_MASTER_QUIRKS_CLEAR_INITIAL_CLASH) {
1394 /* Clear bus clash interrupt before enabling interrupt mask */
1395 status = sdw_read_no_pm(slave, SDW_SCP_INT1);
1396 if (status < 0) {
1397 dev_err(&slave->dev,
1398 "SDW_SCP_INT1 (BUS_CLASH) read failed:%d\n", status);
1399 return status;
1400 }
1401 if (status & SDW_SCP_INT1_BUS_CLASH) {
1402 dev_warn(&slave->dev, "Bus clash detected before INT mask is enabled\n");
1403 ret = sdw_write_no_pm(slave, SDW_SCP_INT1, SDW_SCP_INT1_BUS_CLASH);
1404 if (ret < 0) {
1405 dev_err(&slave->dev,
1406 "SDW_SCP_INT1 (BUS_CLASH) write failed:%d\n", ret);
1407 return ret;
1408 }
1409 }
1410 }
1411 if ((slave->bus->prop.quirks & SDW_MASTER_QUIRKS_CLEAR_INITIAL_PARITY) &&
1412 !(slave->prop.quirks & SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY)) {
1413 /* Clear parity interrupt before enabling interrupt mask */
1414 status = sdw_read_no_pm(slave, SDW_SCP_INT1);
1415 if (status < 0) {
1416 dev_err(&slave->dev,
1417 "SDW_SCP_INT1 (PARITY) read failed:%d\n", status);
1418 return status;
1419 }
1420 if (status & SDW_SCP_INT1_PARITY) {
1421 dev_warn(&slave->dev, "PARITY error detected before INT mask is enabled\n");
1422 ret = sdw_write_no_pm(slave, SDW_SCP_INT1, SDW_SCP_INT1_PARITY);
1423 if (ret < 0) {
1424 dev_err(&slave->dev,
1425 "SDW_SCP_INT1 (PARITY) write failed:%d\n", ret);
1426 return ret;
1427 }
1428 }
1429 }
1430
1431 /*
1432 * Set SCP_INT1_MASK register, typically bus clash and
1433 * implementation-defined interrupt mask. The Parity detection
1434 * may not always be correct on startup so its use is
1435 * device-dependent, it might e.g. only be enabled in
1436 * steady-state after a couple of frames.
1437 */
1438 val = slave->prop.scp_int1_mask;
1439
1440 /* Enable SCP interrupts */
1441 ret = sdw_update_no_pm(slave, SDW_SCP_INTMASK1, val, val);
1442 if (ret < 0) {
1443 dev_err(&slave->dev,
1444 "SDW_SCP_INTMASK1 write failed:%d\n", ret);
1445 return ret;
1446 }
1447
1448 /* No need to continue if DP0 is not present */
1449 if (!slave->prop.dp0_prop)
1450 return 0;
1451
1452 /* Enable DP0 interrupts */
1453 val = prop->dp0_prop->imp_def_interrupts;
1454 val |= SDW_DP0_INT_PORT_READY | SDW_DP0_INT_BRA_FAILURE;
1455
1456 ret = sdw_update_no_pm(slave, SDW_DP0_INTMASK, val, val);
1457 if (ret < 0)
1458 dev_err(&slave->dev,
1459 "SDW_DP0_INTMASK read failed:%d\n", ret);
1460 return ret;
1461 }
1462
sdw_handle_dp0_interrupt(struct sdw_slave * slave,u8 * slave_status)1463 static int sdw_handle_dp0_interrupt(struct sdw_slave *slave, u8 *slave_status)
1464 {
1465 u8 clear, impl_int_mask;
1466 int status, status2, ret, count = 0;
1467
1468 status = sdw_read_no_pm(slave, SDW_DP0_INT);
1469 if (status < 0) {
1470 dev_err(&slave->dev,
1471 "SDW_DP0_INT read failed:%d\n", status);
1472 return status;
1473 }
1474
1475 do {
1476 clear = status & ~SDW_DP0_INTERRUPTS;
1477
1478 if (status & SDW_DP0_INT_TEST_FAIL) {
1479 dev_err(&slave->dev, "Test fail for port 0\n");
1480 clear |= SDW_DP0_INT_TEST_FAIL;
1481 }
1482
1483 /*
1484 * Assumption: PORT_READY interrupt will be received only for
1485 * ports implementing Channel Prepare state machine (CP_SM)
1486 */
1487
1488 if (status & SDW_DP0_INT_PORT_READY) {
1489 complete(&slave->port_ready[0]);
1490 clear |= SDW_DP0_INT_PORT_READY;
1491 }
1492
1493 if (status & SDW_DP0_INT_BRA_FAILURE) {
1494 dev_err(&slave->dev, "BRA failed\n");
1495 clear |= SDW_DP0_INT_BRA_FAILURE;
1496 }
1497
1498 impl_int_mask = SDW_DP0_INT_IMPDEF1 |
1499 SDW_DP0_INT_IMPDEF2 | SDW_DP0_INT_IMPDEF3;
1500
1501 if (status & impl_int_mask) {
1502 clear |= impl_int_mask;
1503 *slave_status = clear;
1504 }
1505
1506 /* clear the interrupts but don't touch reserved and SDCA_CASCADE fields */
1507 ret = sdw_write_no_pm(slave, SDW_DP0_INT, clear);
1508 if (ret < 0) {
1509 dev_err(&slave->dev,
1510 "SDW_DP0_INT write failed:%d\n", ret);
1511 return ret;
1512 }
1513
1514 /* Read DP0 interrupt again */
1515 status2 = sdw_read_no_pm(slave, SDW_DP0_INT);
1516 if (status2 < 0) {
1517 dev_err(&slave->dev,
1518 "SDW_DP0_INT read failed:%d\n", status2);
1519 return status2;
1520 }
1521 /* filter to limit loop to interrupts identified in the first status read */
1522 status &= status2;
1523
1524 count++;
1525
1526 /* we can get alerts while processing so keep retrying */
1527 } while ((status & SDW_DP0_INTERRUPTS) && (count < SDW_READ_INTR_CLEAR_RETRY));
1528
1529 if (count == SDW_READ_INTR_CLEAR_RETRY)
1530 dev_warn(&slave->dev, "Reached MAX_RETRY on DP0 read\n");
1531
1532 return ret;
1533 }
1534
sdw_handle_port_interrupt(struct sdw_slave * slave,int port,u8 * slave_status)1535 static int sdw_handle_port_interrupt(struct sdw_slave *slave,
1536 int port, u8 *slave_status)
1537 {
1538 u8 clear, impl_int_mask;
1539 int status, status2, ret, count = 0;
1540 u32 addr;
1541
1542 if (port == 0)
1543 return sdw_handle_dp0_interrupt(slave, slave_status);
1544
1545 addr = SDW_DPN_INT(port);
1546 status = sdw_read_no_pm(slave, addr);
1547 if (status < 0) {
1548 dev_err(&slave->dev,
1549 "SDW_DPN_INT read failed:%d\n", status);
1550
1551 return status;
1552 }
1553
1554 do {
1555 clear = status & ~SDW_DPN_INTERRUPTS;
1556
1557 if (status & SDW_DPN_INT_TEST_FAIL) {
1558 dev_err(&slave->dev, "Test fail for port:%d\n", port);
1559 clear |= SDW_DPN_INT_TEST_FAIL;
1560 }
1561
1562 /*
1563 * Assumption: PORT_READY interrupt will be received only
1564 * for ports implementing CP_SM.
1565 */
1566 if (status & SDW_DPN_INT_PORT_READY) {
1567 complete(&slave->port_ready[port]);
1568 clear |= SDW_DPN_INT_PORT_READY;
1569 }
1570
1571 impl_int_mask = SDW_DPN_INT_IMPDEF1 |
1572 SDW_DPN_INT_IMPDEF2 | SDW_DPN_INT_IMPDEF3;
1573
1574 if (status & impl_int_mask) {
1575 clear |= impl_int_mask;
1576 *slave_status = clear;
1577 }
1578
1579 /* clear the interrupt but don't touch reserved fields */
1580 ret = sdw_write_no_pm(slave, addr, clear);
1581 if (ret < 0) {
1582 dev_err(&slave->dev,
1583 "SDW_DPN_INT write failed:%d\n", ret);
1584 return ret;
1585 }
1586
1587 /* Read DPN interrupt again */
1588 status2 = sdw_read_no_pm(slave, addr);
1589 if (status2 < 0) {
1590 dev_err(&slave->dev,
1591 "SDW_DPN_INT read failed:%d\n", status2);
1592 return status2;
1593 }
1594 /* filter to limit loop to interrupts identified in the first status read */
1595 status &= status2;
1596
1597 count++;
1598
1599 /* we can get alerts while processing so keep retrying */
1600 } while ((status & SDW_DPN_INTERRUPTS) && (count < SDW_READ_INTR_CLEAR_RETRY));
1601
1602 if (count == SDW_READ_INTR_CLEAR_RETRY)
1603 dev_warn(&slave->dev, "Reached MAX_RETRY on port read");
1604
1605 return ret;
1606 }
1607
sdw_handle_slave_alerts(struct sdw_slave * slave)1608 static int sdw_handle_slave_alerts(struct sdw_slave *slave)
1609 {
1610 struct sdw_slave_intr_status slave_intr;
1611 u8 clear = 0, bit, port_status[15] = {0};
1612 int port_num, stat, ret, count = 0;
1613 unsigned long port;
1614 bool slave_notify;
1615 u8 sdca_cascade = 0;
1616 u8 buf, buf2[2];
1617 bool parity_check;
1618 bool parity_quirk;
1619
1620 sdw_modify_slave_status(slave, SDW_SLAVE_ALERT);
1621
1622 ret = pm_runtime_get_sync(&slave->dev);
1623 if (ret < 0 && ret != -EACCES) {
1624 dev_err(&slave->dev, "Failed to resume device: %d\n", ret);
1625 pm_runtime_put_noidle(&slave->dev);
1626 return ret;
1627 }
1628
1629 /* Read Intstat 1, Intstat 2 and Intstat 3 registers */
1630 ret = sdw_read_no_pm(slave, SDW_SCP_INT1);
1631 if (ret < 0) {
1632 dev_err(&slave->dev,
1633 "SDW_SCP_INT1 read failed:%d\n", ret);
1634 goto io_err;
1635 }
1636 buf = ret;
1637
1638 ret = sdw_nread_no_pm(slave, SDW_SCP_INTSTAT2, 2, buf2);
1639 if (ret < 0) {
1640 dev_err(&slave->dev,
1641 "SDW_SCP_INT2/3 read failed:%d\n", ret);
1642 goto io_err;
1643 }
1644
1645 if (slave->id.class_id) {
1646 ret = sdw_read_no_pm(slave, SDW_DP0_INT);
1647 if (ret < 0) {
1648 dev_err(&slave->dev,
1649 "SDW_DP0_INT read failed:%d\n", ret);
1650 goto io_err;
1651 }
1652 sdca_cascade = ret & SDW_DP0_SDCA_CASCADE;
1653 }
1654
1655 do {
1656 slave_notify = false;
1657
1658 /*
1659 * Check parity, bus clash and Slave (impl defined)
1660 * interrupt
1661 */
1662 if (buf & SDW_SCP_INT1_PARITY) {
1663 parity_check = slave->prop.scp_int1_mask & SDW_SCP_INT1_PARITY;
1664 parity_quirk = !slave->first_interrupt_done &&
1665 (slave->prop.quirks & SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY);
1666
1667 if (parity_check && !parity_quirk)
1668 dev_err(&slave->dev, "Parity error detected\n");
1669 clear |= SDW_SCP_INT1_PARITY;
1670 }
1671
1672 if (buf & SDW_SCP_INT1_BUS_CLASH) {
1673 if (slave->prop.scp_int1_mask & SDW_SCP_INT1_BUS_CLASH)
1674 dev_err(&slave->dev, "Bus clash detected\n");
1675 clear |= SDW_SCP_INT1_BUS_CLASH;
1676 }
1677
1678 /*
1679 * When bus clash or parity errors are detected, such errors
1680 * are unlikely to be recoverable errors.
1681 * TODO: In such scenario, reset bus. Make this configurable
1682 * via sysfs property with bus reset being the default.
1683 */
1684
1685 if (buf & SDW_SCP_INT1_IMPL_DEF) {
1686 if (slave->prop.scp_int1_mask & SDW_SCP_INT1_IMPL_DEF) {
1687 dev_dbg(&slave->dev, "Slave impl defined interrupt\n");
1688 slave_notify = true;
1689 }
1690 clear |= SDW_SCP_INT1_IMPL_DEF;
1691 }
1692
1693 /* the SDCA interrupts are cleared in the codec driver .interrupt_callback() */
1694 if (sdca_cascade)
1695 slave_notify = true;
1696
1697 /* Check port 0 - 3 interrupts */
1698 port = buf & SDW_SCP_INT1_PORT0_3;
1699
1700 /* To get port number corresponding to bits, shift it */
1701 port = FIELD_GET(SDW_SCP_INT1_PORT0_3, port);
1702 for_each_set_bit(bit, &port, 8) {
1703 sdw_handle_port_interrupt(slave, bit,
1704 &port_status[bit]);
1705 }
1706
1707 /* Check if cascade 2 interrupt is present */
1708 if (buf & SDW_SCP_INT1_SCP2_CASCADE) {
1709 port = buf2[0] & SDW_SCP_INTSTAT2_PORT4_10;
1710 for_each_set_bit(bit, &port, 8) {
1711 /* scp2 ports start from 4 */
1712 port_num = bit + 4;
1713 sdw_handle_port_interrupt(slave,
1714 port_num,
1715 &port_status[port_num]);
1716 }
1717 }
1718
1719 /* now check last cascade */
1720 if (buf2[0] & SDW_SCP_INTSTAT2_SCP3_CASCADE) {
1721 port = buf2[1] & SDW_SCP_INTSTAT3_PORT11_14;
1722 for_each_set_bit(bit, &port, 8) {
1723 /* scp3 ports start from 11 */
1724 port_num = bit + 11;
1725 sdw_handle_port_interrupt(slave,
1726 port_num,
1727 &port_status[port_num]);
1728 }
1729 }
1730
1731 /* Update the Slave driver */
1732 if (slave_notify) {
1733 mutex_lock(&slave->sdw_dev_lock);
1734
1735 if (slave->probed) {
1736 struct device *dev = &slave->dev;
1737 struct sdw_driver *drv = drv_to_sdw_driver(dev->driver);
1738
1739 if (slave->prop.use_domain_irq && slave->irq)
1740 handle_nested_irq(slave->irq);
1741
1742 if (drv->ops && drv->ops->interrupt_callback) {
1743 slave_intr.sdca_cascade = sdca_cascade;
1744 slave_intr.control_port = clear;
1745 memcpy(slave_intr.port, &port_status,
1746 sizeof(slave_intr.port));
1747
1748 drv->ops->interrupt_callback(slave, &slave_intr);
1749 }
1750 }
1751
1752 mutex_unlock(&slave->sdw_dev_lock);
1753 }
1754
1755 /* Ack interrupt */
1756 ret = sdw_write_no_pm(slave, SDW_SCP_INT1, clear);
1757 if (ret < 0) {
1758 dev_err(&slave->dev,
1759 "SDW_SCP_INT1 write failed:%d\n", ret);
1760 goto io_err;
1761 }
1762
1763 /* at this point all initial interrupt sources were handled */
1764 slave->first_interrupt_done = true;
1765
1766 /*
1767 * Read status again to ensure no new interrupts arrived
1768 * while servicing interrupts.
1769 */
1770 ret = sdw_read_no_pm(slave, SDW_SCP_INT1);
1771 if (ret < 0) {
1772 dev_err(&slave->dev,
1773 "SDW_SCP_INT1 recheck read failed:%d\n", ret);
1774 goto io_err;
1775 }
1776 buf = ret;
1777
1778 ret = sdw_nread_no_pm(slave, SDW_SCP_INTSTAT2, 2, buf2);
1779 if (ret < 0) {
1780 dev_err(&slave->dev,
1781 "SDW_SCP_INT2/3 recheck read failed:%d\n", ret);
1782 goto io_err;
1783 }
1784
1785 if (slave->id.class_id) {
1786 ret = sdw_read_no_pm(slave, SDW_DP0_INT);
1787 if (ret < 0) {
1788 dev_err(&slave->dev,
1789 "SDW_DP0_INT recheck read failed:%d\n", ret);
1790 goto io_err;
1791 }
1792 sdca_cascade = ret & SDW_DP0_SDCA_CASCADE;
1793 }
1794
1795 /*
1796 * Make sure no interrupts are pending
1797 */
1798 stat = buf || buf2[0] || buf2[1] || sdca_cascade;
1799
1800 /*
1801 * Exit loop if Slave is continuously in ALERT state even
1802 * after servicing the interrupt multiple times.
1803 */
1804 count++;
1805
1806 /* we can get alerts while processing so keep retrying */
1807 } while (stat != 0 && count < SDW_READ_INTR_CLEAR_RETRY);
1808
1809 if (count == SDW_READ_INTR_CLEAR_RETRY)
1810 dev_warn(&slave->dev, "Reached MAX_RETRY on alert read\n");
1811
1812 io_err:
1813 pm_runtime_mark_last_busy(&slave->dev);
1814 pm_runtime_put_autosuspend(&slave->dev);
1815
1816 return ret;
1817 }
1818
sdw_update_slave_status(struct sdw_slave * slave,enum sdw_slave_status status)1819 static int sdw_update_slave_status(struct sdw_slave *slave,
1820 enum sdw_slave_status status)
1821 {
1822 int ret = 0;
1823
1824 mutex_lock(&slave->sdw_dev_lock);
1825
1826 if (slave->probed) {
1827 struct device *dev = &slave->dev;
1828 struct sdw_driver *drv = drv_to_sdw_driver(dev->driver);
1829
1830 if (drv->ops && drv->ops->update_status)
1831 ret = drv->ops->update_status(slave, status);
1832 }
1833
1834 mutex_unlock(&slave->sdw_dev_lock);
1835
1836 return ret;
1837 }
1838
1839 /**
1840 * sdw_handle_slave_status() - Handle Slave status
1841 * @bus: SDW bus instance
1842 * @status: Status for all Slave(s)
1843 */
sdw_handle_slave_status(struct sdw_bus * bus,enum sdw_slave_status status[])1844 int sdw_handle_slave_status(struct sdw_bus *bus,
1845 enum sdw_slave_status status[])
1846 {
1847 enum sdw_slave_status prev_status;
1848 struct sdw_slave *slave;
1849 bool attached_initializing, id_programmed;
1850 int i, ret = 0;
1851
1852 /* first check if any Slaves fell off the bus */
1853 for (i = 1; i <= SDW_MAX_DEVICES; i++) {
1854 mutex_lock(&bus->bus_lock);
1855 if (test_bit(i, bus->assigned) == false) {
1856 mutex_unlock(&bus->bus_lock);
1857 continue;
1858 }
1859 mutex_unlock(&bus->bus_lock);
1860
1861 slave = sdw_get_slave(bus, i);
1862 if (!slave)
1863 continue;
1864
1865 if (status[i] == SDW_SLAVE_UNATTACHED &&
1866 slave->status != SDW_SLAVE_UNATTACHED) {
1867 dev_warn(&slave->dev, "Slave %d state check1: UNATTACHED, status was %d\n",
1868 i, slave->status);
1869 sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
1870
1871 /* Ensure driver knows that peripheral unattached */
1872 ret = sdw_update_slave_status(slave, status[i]);
1873 if (ret < 0)
1874 dev_warn(&slave->dev, "Update Slave status failed:%d\n", ret);
1875 }
1876 }
1877
1878 if (status[0] == SDW_SLAVE_ATTACHED) {
1879 dev_dbg(bus->dev, "Slave attached, programming device number\n");
1880
1881 /*
1882 * Programming a device number will have side effects,
1883 * so we deal with other devices at a later time.
1884 * This relies on those devices reporting ATTACHED, which will
1885 * trigger another call to this function. This will only
1886 * happen if at least one device ID was programmed.
1887 * Error returns from sdw_program_device_num() are currently
1888 * ignored because there's no useful recovery that can be done.
1889 * Returning the error here could result in the current status
1890 * of other devices not being handled, because if no device IDs
1891 * were programmed there's nothing to guarantee a status change
1892 * to trigger another call to this function.
1893 */
1894 sdw_program_device_num(bus, &id_programmed);
1895 if (id_programmed)
1896 return 0;
1897 }
1898
1899 /* Continue to check other slave statuses */
1900 for (i = 1; i <= SDW_MAX_DEVICES; i++) {
1901 mutex_lock(&bus->bus_lock);
1902 if (test_bit(i, bus->assigned) == false) {
1903 mutex_unlock(&bus->bus_lock);
1904 continue;
1905 }
1906 mutex_unlock(&bus->bus_lock);
1907
1908 slave = sdw_get_slave(bus, i);
1909 if (!slave)
1910 continue;
1911
1912 attached_initializing = false;
1913
1914 switch (status[i]) {
1915 case SDW_SLAVE_UNATTACHED:
1916 if (slave->status == SDW_SLAVE_UNATTACHED)
1917 break;
1918
1919 dev_warn(&slave->dev, "Slave %d state check2: UNATTACHED, status was %d\n",
1920 i, slave->status);
1921
1922 sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
1923 break;
1924
1925 case SDW_SLAVE_ALERT:
1926 ret = sdw_handle_slave_alerts(slave);
1927 if (ret < 0)
1928 dev_err(&slave->dev,
1929 "Slave %d alert handling failed: %d\n",
1930 i, ret);
1931 break;
1932
1933 case SDW_SLAVE_ATTACHED:
1934 if (slave->status == SDW_SLAVE_ATTACHED)
1935 break;
1936
1937 prev_status = slave->status;
1938 sdw_modify_slave_status(slave, SDW_SLAVE_ATTACHED);
1939
1940 if (prev_status == SDW_SLAVE_ALERT)
1941 break;
1942
1943 attached_initializing = true;
1944
1945 ret = sdw_initialize_slave(slave);
1946 if (ret < 0)
1947 dev_err(&slave->dev,
1948 "Slave %d initialization failed: %d\n",
1949 i, ret);
1950
1951 break;
1952
1953 default:
1954 dev_err(&slave->dev, "Invalid slave %d status:%d\n",
1955 i, status[i]);
1956 break;
1957 }
1958
1959 ret = sdw_update_slave_status(slave, status[i]);
1960 if (ret < 0)
1961 dev_err(&slave->dev,
1962 "Update Slave status failed:%d\n", ret);
1963 if (attached_initializing) {
1964 dev_dbg(&slave->dev,
1965 "signaling initialization completion for Slave %d\n",
1966 slave->dev_num);
1967
1968 complete_all(&slave->initialization_complete);
1969
1970 /*
1971 * If the manager became pm_runtime active, the peripherals will be
1972 * restarted and attach, but their pm_runtime status may remain
1973 * suspended. If the 'update_slave_status' callback initiates
1974 * any sort of deferred processing, this processing would not be
1975 * cancelled on pm_runtime suspend.
1976 * To avoid such zombie states, we queue a request to resume.
1977 * This would be a no-op in case the peripheral was being resumed
1978 * by e.g. the ALSA/ASoC framework.
1979 */
1980 pm_request_resume(&slave->dev);
1981 }
1982 }
1983
1984 return ret;
1985 }
1986 EXPORT_SYMBOL(sdw_handle_slave_status);
1987
sdw_clear_slave_status(struct sdw_bus * bus,u32 request)1988 void sdw_clear_slave_status(struct sdw_bus *bus, u32 request)
1989 {
1990 struct sdw_slave *slave;
1991 int i;
1992
1993 /* Check all non-zero devices */
1994 for (i = 1; i <= SDW_MAX_DEVICES; i++) {
1995 mutex_lock(&bus->bus_lock);
1996 if (test_bit(i, bus->assigned) == false) {
1997 mutex_unlock(&bus->bus_lock);
1998 continue;
1999 }
2000 mutex_unlock(&bus->bus_lock);
2001
2002 slave = sdw_get_slave(bus, i);
2003 if (!slave)
2004 continue;
2005
2006 if (slave->status != SDW_SLAVE_UNATTACHED) {
2007 sdw_modify_slave_status(slave, SDW_SLAVE_UNATTACHED);
2008 slave->first_interrupt_done = false;
2009 sdw_update_slave_status(slave, SDW_SLAVE_UNATTACHED);
2010 }
2011
2012 /* keep track of request, used in pm_runtime resume */
2013 slave->unattach_request = request;
2014 }
2015 }
2016 EXPORT_SYMBOL(sdw_clear_slave_status);
2017