Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'soundwire-5.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire into char-misc-next

Vinod writes:

soundwire updates for 5.12-rc1

Updates forv5.12-rc1 are:
- New no_pm IO routines and the usage in Intel drivers
- Intel driver & Cadence lib updates

* tag 'soundwire-5.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire:
soundwire: bus: clarify dev_err/dbg device references
soundwire: bus: fix confusion on device used by pm_runtime
soundwire: export sdw_write/read_no_pm functions
soundwire: bus: use no_pm IO routines for all interrupt handling
soundwire: bus: use sdw_write_no_pm when setting the bus scale registers
soundwire: bus: use sdw_update_no_pm when initializing a device
soundwire: Revert "soundwire: debugfs: use controller id instead of link_id"
soundwire: return earlier if no slave is attached
soundwire: bus: add better dev_dbg to track complete() calls
soundwire: cadence: adjust verbosity in response handling
soundwire: cadence: fix ACK/NAK handling
soundwire: bus: add more details to track failed transfers
soundwire: cadence: add status in dev_dbg 'State change' log
soundwire: use consistent format for Slave devID logs
soundwire: intel: don't return error when clock stop failed
soundwire: debugfs: use controller id instead of link_id
MAINTAINERS: soundwire: Add soundwire tree
soundwire: sysfs: Constify static struct attribute_group
soundwire: cadence: reduce timeout on transactions
soundwire: intel: Use kzalloc for allocating only one thing

+128 -105
+1
MAINTAINERS
··· 16667 16667 R: Sanyog Kale <sanyog.r.kale@intel.com> 16668 16668 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 16669 16669 S: Supported 16670 + T: git git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire.git 16670 16671 F: Documentation/driver-api/soundwire/ 16671 16672 F: drivers/soundwire/ 16672 16673 F: include/linux/soundwire/
+99 -80
drivers/soundwire/bus.c
··· 267 267 268 268 ret = do_transfer(bus, msg); 269 269 if (ret != 0 && ret != -ENODATA) 270 - dev_err(bus->dev, "trf on Slave %d failed:%d\n", 271 - msg->dev_num, ret); 270 + dev_err(bus->dev, "trf on Slave %d failed:%d %s addr %x count %d\n", 271 + msg->dev_num, ret, 272 + (msg->flags & SDW_MSG_FLAG_WRITE) ? "write" : "read", 273 + msg->addr, msg->len); 272 274 273 275 if (msg->page) 274 276 sdw_reset_page(bus, msg->dev_num); ··· 407 405 return sdw_transfer(slave->bus, &msg); 408 406 } 409 407 410 - static int sdw_write_no_pm(struct sdw_slave *slave, u32 addr, u8 value) 408 + int sdw_write_no_pm(struct sdw_slave *slave, u32 addr, u8 value) 411 409 { 412 410 return sdw_nwrite_no_pm(slave, addr, 1, &value); 413 411 } 412 + EXPORT_SYMBOL(sdw_write_no_pm); 414 413 415 414 static int 416 415 sdw_bread_no_pm(struct sdw_bus *bus, u16 dev_num, u32 addr) ··· 479 476 } 480 477 EXPORT_SYMBOL(sdw_bwrite_no_pm_unlocked); 481 478 482 - static int 483 - sdw_read_no_pm(struct sdw_slave *slave, u32 addr) 479 + int sdw_read_no_pm(struct sdw_slave *slave, u32 addr) 484 480 { 485 481 u8 buf; 486 482 int ret; ··· 489 487 return ret; 490 488 else 491 489 return buf; 490 + } 491 + EXPORT_SYMBOL(sdw_read_no_pm); 492 + 493 + static int sdw_update_no_pm(struct sdw_slave *slave, u32 addr, u8 mask, u8 val) 494 + { 495 + int tmp; 496 + 497 + tmp = sdw_read_no_pm(slave, addr); 498 + if (tmp < 0) 499 + return tmp; 500 + 501 + tmp = (tmp & ~mask) | val; 502 + return sdw_write_no_pm(slave, addr, tmp); 492 503 } 493 504 494 505 /** ··· 515 500 { 516 501 int ret; 517 502 518 - ret = pm_runtime_get_sync(slave->bus->dev); 503 + ret = pm_runtime_get_sync(&slave->dev); 519 504 if (ret < 0 && ret != -EACCES) { 520 - pm_runtime_put_noidle(slave->bus->dev); 505 + pm_runtime_put_noidle(&slave->dev); 521 506 return ret; 522 507 } 523 508 524 509 ret = sdw_nread_no_pm(slave, addr, count, val); 525 510 526 - pm_runtime_mark_last_busy(slave->bus->dev); 527 - pm_runtime_put(slave->bus->dev); 511 + pm_runtime_mark_last_busy(&slave->dev); 512 + pm_runtime_put(&slave->dev); 528 513 529 514 return ret; 530 515 } ··· 541 526 { 542 527 int ret; 543 528 544 - ret = pm_runtime_get_sync(slave->bus->dev); 529 + ret = pm_runtime_get_sync(&slave->dev); 545 530 if (ret < 0 && ret != -EACCES) { 546 - pm_runtime_put_noidle(slave->bus->dev); 531 + pm_runtime_put_noidle(&slave->dev); 547 532 return ret; 548 533 } 549 534 550 535 ret = sdw_nwrite_no_pm(slave, addr, count, val); 551 536 552 - pm_runtime_mark_last_busy(slave->bus->dev); 553 - pm_runtime_put(slave->bus->dev); 537 + pm_runtime_mark_last_busy(&slave->dev); 538 + pm_runtime_put(&slave->dev); 554 539 555 540 return ret; 556 541 } ··· 638 623 639 624 static int sdw_assign_device_num(struct sdw_slave *slave) 640 625 { 626 + struct sdw_bus *bus = slave->bus; 641 627 int ret, dev_num; 642 628 bool new_device = false; 643 629 ··· 649 633 dev_num = sdw_get_device_num(slave); 650 634 mutex_unlock(&slave->bus->bus_lock); 651 635 if (dev_num < 0) { 652 - dev_err(slave->bus->dev, "Get dev_num failed: %d\n", 636 + dev_err(bus->dev, "Get dev_num failed: %d\n", 653 637 dev_num); 654 638 return dev_num; 655 639 } ··· 662 646 } 663 647 664 648 if (!new_device) 665 - dev_dbg(slave->bus->dev, 649 + dev_dbg(bus->dev, 666 650 "Slave already registered, reusing dev_num:%d\n", 667 651 slave->dev_num); 668 652 ··· 672 656 673 657 ret = sdw_write_no_pm(slave, SDW_SCP_DEVNUMBER, dev_num); 674 658 if (ret < 0) { 675 - dev_err(&slave->dev, "Program device_num %d failed: %d\n", 659 + dev_err(bus->dev, "Program device_num %d failed: %d\n", 676 660 dev_num, ret); 677 661 return ret; 678 662 } ··· 695 679 id->class_id = SDW_CLASS_ID(addr); 696 680 697 681 dev_dbg(bus->dev, 698 - "SDW Slave class_id %x, part_id %x, mfg_id %x, unique_id %x, version %x\n", 699 - id->class_id, id->part_id, id->mfg_id, 700 - id->unique_id, id->sdw_version); 682 + "SDW Slave class_id 0x%02x, mfg_id 0x%04x, part_id 0x%04x, unique_id 0x%x, version 0x%x\n", 683 + id->class_id, id->mfg_id, id->part_id, id->unique_id, id->sdw_version); 701 684 } 702 685 703 686 static int sdw_program_device_num(struct sdw_bus *bus) ··· 750 735 */ 751 736 ret = sdw_assign_device_num(slave); 752 737 if (ret) { 753 - dev_err(slave->bus->dev, 738 + dev_err(bus->dev, 754 739 "Assign dev_num failed:%d\n", 755 740 ret); 756 741 return ret; ··· 790 775 static void sdw_modify_slave_status(struct sdw_slave *slave, 791 776 enum sdw_slave_status status) 792 777 { 793 - mutex_lock(&slave->bus->bus_lock); 778 + struct sdw_bus *bus = slave->bus; 794 779 795 - dev_vdbg(&slave->dev, 780 + mutex_lock(&bus->bus_lock); 781 + 782 + dev_vdbg(bus->dev, 796 783 "%s: changing status slave %d status %d new status %d\n", 797 784 __func__, slave->dev_num, slave->status, status); 798 785 799 786 if (status == SDW_SLAVE_UNATTACHED) { 800 787 dev_dbg(&slave->dev, 801 - "%s: initializing completion for Slave %d\n", 788 + "%s: initializing enumeration and init completion for Slave %d\n", 802 789 __func__, slave->dev_num); 803 790 804 791 init_completion(&slave->enumeration_complete); ··· 809 792 } else if ((status == SDW_SLAVE_ATTACHED) && 810 793 (slave->status == SDW_SLAVE_UNATTACHED)) { 811 794 dev_dbg(&slave->dev, 812 - "%s: signaling completion for Slave %d\n", 795 + "%s: signaling enumeration completion for Slave %d\n", 813 796 __func__, slave->dev_num); 814 797 815 798 complete(&slave->enumeration_complete); 816 799 } 817 800 slave->status = status; 818 - mutex_unlock(&slave->bus->bus_lock); 801 + mutex_unlock(&bus->bus_lock); 819 802 } 820 803 821 804 static enum sdw_clk_stop_mode sdw_get_clk_stop_mode(struct sdw_slave *slave) ··· 967 950 simple_clk_stop = false; 968 951 } 969 952 970 - if (is_slave && !simple_clk_stop) { 953 + /* Skip remaining clock stop preparation if no Slave is attached */ 954 + if (!is_slave) 955 + return ret; 956 + 957 + if (!simple_clk_stop) { 971 958 ret = sdw_bus_wait_for_clk_prep_deprep(bus, 972 959 SDW_BROADCAST_DEV_NUM); 973 960 if (ret < 0) 974 961 return ret; 975 962 } 976 - 977 - /* Don't need to inform slaves if there is no slave attached */ 978 - if (!is_slave) 979 - return ret; 980 963 981 964 /* Inform slaves that prep is done */ 982 965 list_for_each_entry(slave, &bus->slaves, node) { ··· 1091 1074 "clk stop deprep failed:%d", ret); 1092 1075 } 1093 1076 1094 - if (is_slave && !simple_clk_stop) 1095 - sdw_bus_wait_for_clk_prep_deprep(bus, SDW_BROADCAST_DEV_NUM); 1096 - 1097 - /* 1098 - * Don't need to call slave callback function if there is no slave 1099 - * attached 1100 - */ 1077 + /* Skip remaining clock stop de-preparation if no Slave is attached */ 1101 1078 if (!is_slave) 1102 1079 return 0; 1080 + 1081 + if (!simple_clk_stop) 1082 + sdw_bus_wait_for_clk_prep_deprep(bus, SDW_BROADCAST_DEV_NUM); 1103 1083 1104 1084 list_for_each_entry(slave, &bus->slaves, node) { 1105 1085 if (!slave->dev_num) ··· 1141 1127 1142 1128 ret = sdw_update(slave, addr, (mask | SDW_DPN_INT_PORT_READY), val); 1143 1129 if (ret < 0) 1144 - dev_err(slave->bus->dev, 1130 + dev_err(&slave->dev, 1145 1131 "SDW_DPN_INTMASK write failed:%d\n", val); 1146 1132 1147 1133 return ret; ··· 1224 1210 } 1225 1211 scale_index++; 1226 1212 1227 - ret = sdw_write(slave, SDW_SCP_BUS_CLOCK_BASE, base); 1213 + ret = sdw_write_no_pm(slave, SDW_SCP_BUS_CLOCK_BASE, base); 1228 1214 if (ret < 0) { 1229 1215 dev_err(&slave->dev, 1230 1216 "SDW_SCP_BUS_CLOCK_BASE write failed:%d\n", ret); ··· 1232 1218 } 1233 1219 1234 1220 /* initialize scale for both banks */ 1235 - ret = sdw_write(slave, SDW_SCP_BUSCLOCK_SCALE_B0, scale_index); 1221 + ret = sdw_write_no_pm(slave, SDW_SCP_BUSCLOCK_SCALE_B0, scale_index); 1236 1222 if (ret < 0) { 1237 1223 dev_err(&slave->dev, 1238 1224 "SDW_SCP_BUSCLOCK_SCALE_B0 write failed:%d\n", ret); 1239 1225 return ret; 1240 1226 } 1241 - ret = sdw_write(slave, SDW_SCP_BUSCLOCK_SCALE_B1, scale_index); 1227 + ret = sdw_write_no_pm(slave, SDW_SCP_BUSCLOCK_SCALE_B1, scale_index); 1242 1228 if (ret < 0) 1243 1229 dev_err(&slave->dev, 1244 1230 "SDW_SCP_BUSCLOCK_SCALE_B1 write failed:%d\n", ret); ··· 1270 1256 val = slave->prop.scp_int1_mask; 1271 1257 1272 1258 /* Enable SCP interrupts */ 1273 - ret = sdw_update(slave, SDW_SCP_INTMASK1, val, val); 1259 + ret = sdw_update_no_pm(slave, SDW_SCP_INTMASK1, val, val); 1274 1260 if (ret < 0) { 1275 - dev_err(slave->bus->dev, 1261 + dev_err(&slave->dev, 1276 1262 "SDW_SCP_INTMASK1 write failed:%d\n", ret); 1277 1263 return ret; 1278 1264 } ··· 1285 1271 val = prop->dp0_prop->imp_def_interrupts; 1286 1272 val |= SDW_DP0_INT_PORT_READY | SDW_DP0_INT_BRA_FAILURE; 1287 1273 1288 - ret = sdw_update(slave, SDW_DP0_INTMASK, val, val); 1274 + ret = sdw_update_no_pm(slave, SDW_DP0_INTMASK, val, val); 1289 1275 if (ret < 0) 1290 - dev_err(slave->bus->dev, 1276 + dev_err(&slave->dev, 1291 1277 "SDW_DP0_INTMASK read failed:%d\n", ret); 1292 1278 return ret; 1293 1279 } ··· 1297 1283 u8 clear, impl_int_mask; 1298 1284 int status, status2, ret, count = 0; 1299 1285 1300 - status = sdw_read(slave, SDW_DP0_INT); 1286 + status = sdw_read_no_pm(slave, SDW_DP0_INT); 1301 1287 if (status < 0) { 1302 - dev_err(slave->bus->dev, 1288 + dev_err(&slave->dev, 1303 1289 "SDW_DP0_INT read failed:%d\n", status); 1304 1290 return status; 1305 1291 } ··· 1336 1322 } 1337 1323 1338 1324 /* clear the interrupts but don't touch reserved and SDCA_CASCADE fields */ 1339 - ret = sdw_write(slave, SDW_DP0_INT, clear); 1325 + ret = sdw_write_no_pm(slave, SDW_DP0_INT, clear); 1340 1326 if (ret < 0) { 1341 - dev_err(slave->bus->dev, 1327 + dev_err(&slave->dev, 1342 1328 "SDW_DP0_INT write failed:%d\n", ret); 1343 1329 return ret; 1344 1330 } 1345 1331 1346 1332 /* Read DP0 interrupt again */ 1347 - status2 = sdw_read(slave, SDW_DP0_INT); 1333 + status2 = sdw_read_no_pm(slave, SDW_DP0_INT); 1348 1334 if (status2 < 0) { 1349 - dev_err(slave->bus->dev, 1335 + dev_err(&slave->dev, 1350 1336 "SDW_DP0_INT read failed:%d\n", status2); 1351 1337 return status2; 1352 1338 } ··· 1359 1345 } while ((status & SDW_DP0_INTERRUPTS) && (count < SDW_READ_INTR_CLEAR_RETRY)); 1360 1346 1361 1347 if (count == SDW_READ_INTR_CLEAR_RETRY) 1362 - dev_warn(slave->bus->dev, "Reached MAX_RETRY on DP0 read\n"); 1348 + dev_warn(&slave->dev, "Reached MAX_RETRY on DP0 read\n"); 1363 1349 1364 1350 return ret; 1365 1351 } ··· 1375 1361 return sdw_handle_dp0_interrupt(slave, slave_status); 1376 1362 1377 1363 addr = SDW_DPN_INT(port); 1378 - status = sdw_read(slave, addr); 1364 + status = sdw_read_no_pm(slave, addr); 1379 1365 if (status < 0) { 1380 - dev_err(slave->bus->dev, 1366 + dev_err(&slave->dev, 1381 1367 "SDW_DPN_INT read failed:%d\n", status); 1382 1368 1383 1369 return status; ··· 1409 1395 } 1410 1396 1411 1397 /* clear the interrupt but don't touch reserved fields */ 1412 - ret = sdw_write(slave, addr, clear); 1398 + ret = sdw_write_no_pm(slave, addr, clear); 1413 1399 if (ret < 0) { 1414 - dev_err(slave->bus->dev, 1400 + dev_err(&slave->dev, 1415 1401 "SDW_DPN_INT write failed:%d\n", ret); 1416 1402 return ret; 1417 1403 } 1418 1404 1419 1405 /* Read DPN interrupt again */ 1420 - status2 = sdw_read(slave, addr); 1406 + status2 = sdw_read_no_pm(slave, addr); 1421 1407 if (status2 < 0) { 1422 - dev_err(slave->bus->dev, 1408 + dev_err(&slave->dev, 1423 1409 "SDW_DPN_INT read failed:%d\n", status2); 1424 1410 return status2; 1425 1411 } ··· 1432 1418 } while ((status & SDW_DPN_INTERRUPTS) && (count < SDW_READ_INTR_CLEAR_RETRY)); 1433 1419 1434 1420 if (count == SDW_READ_INTR_CLEAR_RETRY) 1435 - dev_warn(slave->bus->dev, "Reached MAX_RETRY on port read"); 1421 + dev_warn(&slave->dev, "Reached MAX_RETRY on port read"); 1436 1422 1437 1423 return ret; 1438 1424 } ··· 1454 1440 ret = pm_runtime_get_sync(&slave->dev); 1455 1441 if (ret < 0 && ret != -EACCES) { 1456 1442 dev_err(&slave->dev, "Failed to resume device: %d\n", ret); 1457 - pm_runtime_put_noidle(slave->bus->dev); 1443 + pm_runtime_put_noidle(&slave->dev); 1458 1444 return ret; 1459 1445 } 1460 1446 1461 1447 /* Read Intstat 1, Intstat 2 and Intstat 3 registers */ 1462 - ret = sdw_read(slave, SDW_SCP_INT1); 1448 + ret = sdw_read_no_pm(slave, SDW_SCP_INT1); 1463 1449 if (ret < 0) { 1464 - dev_err(slave->bus->dev, 1450 + dev_err(&slave->dev, 1465 1451 "SDW_SCP_INT1 read failed:%d\n", ret); 1466 1452 goto io_err; 1467 1453 } 1468 1454 buf = ret; 1469 1455 1470 - ret = sdw_nread(slave, SDW_SCP_INTSTAT2, 2, buf2); 1456 + ret = sdw_nread_no_pm(slave, SDW_SCP_INTSTAT2, 2, buf2); 1471 1457 if (ret < 0) { 1472 - dev_err(slave->bus->dev, 1458 + dev_err(&slave->dev, 1473 1459 "SDW_SCP_INT2/3 read failed:%d\n", ret); 1474 1460 goto io_err; 1475 1461 } 1476 1462 1477 1463 if (slave->prop.is_sdca) { 1478 - ret = sdw_read(slave, SDW_DP0_INT); 1464 + ret = sdw_read_no_pm(slave, SDW_DP0_INT); 1479 1465 if (ret < 0) { 1480 - dev_err(slave->bus->dev, 1466 + dev_err(&slave->dev, 1481 1467 "SDW_DP0_INT read failed:%d\n", ret); 1482 1468 goto io_err; 1483 1469 } ··· 1572 1558 } 1573 1559 1574 1560 /* Ack interrupt */ 1575 - ret = sdw_write(slave, SDW_SCP_INT1, clear); 1561 + ret = sdw_write_no_pm(slave, SDW_SCP_INT1, clear); 1576 1562 if (ret < 0) { 1577 - dev_err(slave->bus->dev, 1563 + dev_err(&slave->dev, 1578 1564 "SDW_SCP_INT1 write failed:%d\n", ret); 1579 1565 goto io_err; 1580 1566 } ··· 1586 1572 * Read status again to ensure no new interrupts arrived 1587 1573 * while servicing interrupts. 1588 1574 */ 1589 - ret = sdw_read(slave, SDW_SCP_INT1); 1575 + ret = sdw_read_no_pm(slave, SDW_SCP_INT1); 1590 1576 if (ret < 0) { 1591 - dev_err(slave->bus->dev, 1577 + dev_err(&slave->dev, 1592 1578 "SDW_SCP_INT1 read failed:%d\n", ret); 1593 1579 goto io_err; 1594 1580 } 1595 1581 _buf = ret; 1596 1582 1597 - ret = sdw_nread(slave, SDW_SCP_INTSTAT2, 2, _buf2); 1583 + ret = sdw_nread_no_pm(slave, SDW_SCP_INTSTAT2, 2, _buf2); 1598 1584 if (ret < 0) { 1599 - dev_err(slave->bus->dev, 1585 + dev_err(&slave->dev, 1600 1586 "SDW_SCP_INT2/3 read failed:%d\n", ret); 1601 1587 goto io_err; 1602 1588 } 1603 1589 1604 1590 if (slave->prop.is_sdca) { 1605 - ret = sdw_read(slave, SDW_DP0_INT); 1591 + ret = sdw_read_no_pm(slave, SDW_DP0_INT); 1606 1592 if (ret < 0) { 1607 - dev_err(slave->bus->dev, 1593 + dev_err(&slave->dev, 1608 1594 "SDW_DP0_INT read failed:%d\n", ret); 1609 1595 goto io_err; 1610 1596 } ··· 1630 1616 } while (stat != 0 && count < SDW_READ_INTR_CLEAR_RETRY); 1631 1617 1632 1618 if (count == SDW_READ_INTR_CLEAR_RETRY) 1633 - dev_warn(slave->bus->dev, "Reached MAX_RETRY on alert read\n"); 1619 + dev_warn(&slave->dev, "Reached MAX_RETRY on alert read\n"); 1634 1620 1635 1621 io_err: 1636 1622 pm_runtime_mark_last_busy(&slave->dev); ··· 1736 1722 case SDW_SLAVE_ALERT: 1737 1723 ret = sdw_handle_slave_alerts(slave); 1738 1724 if (ret) 1739 - dev_err(bus->dev, 1725 + dev_err(&slave->dev, 1740 1726 "Slave %d alert handling failed: %d\n", 1741 1727 i, ret); 1742 1728 break; ··· 1755 1741 1756 1742 ret = sdw_initialize_slave(slave); 1757 1743 if (ret) 1758 - dev_err(bus->dev, 1744 + dev_err(&slave->dev, 1759 1745 "Slave %d initialization failed: %d\n", 1760 1746 i, ret); 1761 1747 1762 1748 break; 1763 1749 1764 1750 default: 1765 - dev_err(bus->dev, "Invalid slave %d status:%d\n", 1751 + dev_err(&slave->dev, "Invalid slave %d status:%d\n", 1766 1752 i, status[i]); 1767 1753 break; 1768 1754 } 1769 1755 1770 1756 ret = sdw_update_slave_status(slave, status[i]); 1771 1757 if (ret) 1772 - dev_err(slave->bus->dev, 1758 + dev_err(&slave->dev, 1773 1759 "Update Slave status failed:%d\n", ret); 1774 - if (attached_initializing) 1760 + if (attached_initializing) { 1761 + dev_dbg(&slave->dev, 1762 + "%s: signaling initialization completion for Slave %d\n", 1763 + __func__, slave->dev_num); 1764 + 1775 1765 complete(&slave->initialization_complete); 1766 + } 1776 1767 } 1777 1768 1778 1769 return ret;
+16 -15
drivers/soundwire/cadence_master.c
··· 188 188 #define CDNS_PDI_CONFIG_PORT GENMASK(4, 0) 189 189 190 190 /* Driver defaults */ 191 - #define CDNS_TX_TIMEOUT 2000 191 + #define CDNS_TX_TIMEOUT 500 192 192 193 193 #define CDNS_SCP_RX_FIFOLEVEL 0x2 194 194 ··· 483 483 for (i = 0; i < count; i++) { 484 484 if (!(cdns->response_buf[i] & CDNS_MCP_RESP_ACK)) { 485 485 no_ack = 1; 486 - dev_dbg_ratelimited(cdns->dev, "Msg Ack not received\n"); 487 - if (cdns->response_buf[i] & CDNS_MCP_RESP_NACK) { 488 - nack = 1; 489 - dev_err_ratelimited(cdns->dev, "Msg NACK received\n"); 490 - } 486 + dev_vdbg(cdns->dev, "Msg Ack not received, cmd %d\n", i); 487 + } 488 + if (cdns->response_buf[i] & CDNS_MCP_RESP_NACK) { 489 + nack = 1; 490 + dev_err_ratelimited(cdns->dev, "Msg NACK received, cmd %d\n", i); 491 491 } 492 492 } 493 493 ··· 734 734 } 735 735 736 736 static int cdns_update_slave_status(struct sdw_cdns *cdns, 737 - u32 slave0, u32 slave1) 737 + u64 slave_intstat) 738 738 { 739 739 enum sdw_slave_status status[SDW_MAX_DEVICES + 1]; 740 740 bool is_slave = false; 741 - u64 slave; 742 741 u32 mask; 743 742 int i, set_status; 744 743 745 - /* combine the two status */ 746 - slave = ((u64)slave1 << 32) | slave0; 747 744 memset(status, 0, sizeof(status)); 748 745 749 746 for (i = 0; i <= SDW_MAX_DEVICES; i++) { 750 - mask = (slave >> (i * CDNS_MCP_SLAVE_STATUS_NUM)) & 751 - CDNS_MCP_SLAVE_STATUS_BITS; 747 + mask = (slave_intstat >> (i * CDNS_MCP_SLAVE_STATUS_NUM)) & 748 + CDNS_MCP_SLAVE_STATUS_BITS; 752 749 if (!mask) 753 750 continue; 754 751 ··· 915 918 struct sdw_cdns *cdns = 916 919 container_of(work, struct sdw_cdns, work); 917 920 u32 slave0, slave1; 918 - 919 - dev_dbg_ratelimited(cdns->dev, "Slave status change\n"); 921 + u64 slave_intstat; 920 922 921 923 slave0 = cdns_readl(cdns, CDNS_MCP_SLAVE_INTSTAT0); 922 924 slave1 = cdns_readl(cdns, CDNS_MCP_SLAVE_INTSTAT1); 923 925 924 - cdns_update_slave_status(cdns, slave0, slave1); 926 + /* combine the two status */ 927 + slave_intstat = ((u64)slave1 << 32) | slave0; 928 + 929 + dev_dbg_ratelimited(cdns->dev, "Slave status change: 0x%llx\n", slave_intstat); 930 + 931 + cdns_update_slave_status(cdns, slave_intstat); 925 932 cdns_writel(cdns, CDNS_MCP_SLAVE_INTSTAT0, slave0); 926 933 cdns_writel(cdns, CDNS_MCP_SLAVE_INTSTAT1, slave1); 927 934
+5 -3
drivers/soundwire/intel.c
··· 967 967 } 968 968 969 969 /* Port configuration */ 970 - pconfig = kcalloc(1, sizeof(*pconfig), GFP_KERNEL); 970 + pconfig = kzalloc(sizeof(*pconfig), GFP_KERNEL); 971 971 if (!pconfig) { 972 972 ret = -ENOMEM; 973 973 goto error; ··· 1673 1673 1674 1674 } else if (clock_stop_quirks & SDW_INTEL_CLK_STOP_BUS_RESET || 1675 1675 !clock_stop_quirks) { 1676 + bool wake_enable = true; 1677 + 1676 1678 ret = sdw_cdns_clock_stop(cdns, true); 1677 1679 if (ret < 0) { 1678 1680 dev_err(dev, "cannot enable clock stop on suspend\n"); 1679 - return ret; 1681 + wake_enable = false; 1680 1682 } 1681 1683 1682 1684 ret = sdw_cdns_enable_interrupt(cdns, false); ··· 1693 1691 return ret; 1694 1692 } 1695 1693 1696 - intel_shim_wake(sdw, true); 1694 + intel_shim_wake(sdw, wake_enable); 1697 1695 } else { 1698 1696 dev_err(dev, "%s clock_stop_quirks %x unsupported\n", 1699 1697 __func__, clock_stop_quirks);
+4 -6
drivers/soundwire/slave.c
··· 163 163 164 164 if (id.unique_id != id2.unique_id) { 165 165 dev_dbg(bus->dev, 166 - "Valid unique IDs %x %x for Slave mfg %x part %d\n", 167 - id.unique_id, id2.unique_id, 168 - id.mfg_id, id.part_id); 166 + "Valid unique IDs 0x%x 0x%x for Slave mfg_id 0x%04x, part_id 0x%04x\n", 167 + id.unique_id, id2.unique_id, id.mfg_id, id.part_id); 169 168 ignore_unique_id = false; 170 169 } else { 171 170 dev_err(bus->dev, 172 - "Invalid unique IDs %x %x for Slave mfg %x part %d\n", 173 - id.unique_id, id2.unique_id, 174 - id.mfg_id, id.part_id); 171 + "Invalid unique IDs 0x%x 0x%x for Slave mfg_id 0x%04x, part_id 0x%04x\n", 172 + id.unique_id, id2.unique_id, id.mfg_id, id.part_id); 175 173 return -ENODEV; 176 174 } 177 175 }
+1 -1
drivers/soundwire/sysfs_slave.c
··· 130 130 * we don't use ATTRIBUTES_GROUP here since we want to add a subdirectory 131 131 * for device-level properties 132 132 */ 133 - static struct attribute_group sdw_slave_dev_attr_group = { 133 + static const struct attribute_group sdw_slave_dev_attr_group = { 134 134 .attrs = slave_dev_attrs, 135 135 .name = "dev-properties", 136 136 };
+2
include/linux/soundwire/sdw.h
··· 1005 1005 1006 1006 int sdw_read(struct sdw_slave *slave, u32 addr); 1007 1007 int sdw_write(struct sdw_slave *slave, u32 addr, u8 value); 1008 + int sdw_write_no_pm(struct sdw_slave *slave, u32 addr, u8 value); 1009 + int sdw_read_no_pm(struct sdw_slave *slave, u32 addr); 1008 1010 int sdw_nread(struct sdw_slave *slave, u32 addr, size_t count, u8 *val); 1009 1011 int sdw_nwrite(struct sdw_slave *slave, u32 addr, size_t count, u8 *val); 1010 1012