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