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