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

Merge branch 'for-5.5' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-5.6

+152 -56
+7
sound/soc/codecs/rt5640.c
··· 2432 2432 { 2433 2433 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component); 2434 2434 2435 + /* 2436 + * soc_remove_component() force-disables jack and thus rt5640->jack 2437 + * could be NULL at the time of driver's module unloading. 2438 + */ 2439 + if (!rt5640->jack) 2440 + return; 2441 + 2435 2442 disable_irq(rt5640->irq); 2436 2443 rt5640_cancel_work(rt5640); 2437 2444
+2 -1
sound/soc/intel/boards/bytcht_es8316.c
··· 445 445 DMI_MATCH(DMI_SYS_VENDOR, "IRBIS"), 446 446 DMI_MATCH(DMI_PRODUCT_NAME, "NB41"), 447 447 }, 448 - .driver_data = (void *)(BYT_CHT_ES8316_INTMIC_IN2_MAP 448 + .driver_data = (void *)(BYT_CHT_ES8316_SSP0 449 + | BYT_CHT_ES8316_INTMIC_IN2_MAP 449 450 | BYT_CHT_ES8316_JD_INVERTED), 450 451 }, 451 452 { /* Teclast X98 Plus II */
-1
sound/soc/intel/boards/cml_rt1011_rt5682.c
··· 11 11 #include <linux/clk.h> 12 12 #include <linux/dmi.h> 13 13 #include <linux/slab.h> 14 - #include <asm/cpu_device_id.h> 15 14 #include <linux/acpi.h> 16 15 #include <sound/core.h> 17 16 #include <sound/jack.h>
+3
sound/soc/soc-component.c
··· 539 539 struct snd_soc_rtdcom_list *rtdcom; 540 540 struct snd_soc_component *component; 541 541 542 + if (!rtd->pcm) 543 + return; 544 + 542 545 for_each_rtd_components(rtd, rtdcom, component) 543 546 if (component->driver->pcm_destruct) 544 547 component->driver->pcm_destruct(component, rtd->pcm);
+140 -54
sound/soc/stm/stm32_sai_sub.c
··· 184 184 } 185 185 } 186 186 187 + static int stm32_sai_sub_reg_up(struct stm32_sai_sub_data *sai, 188 + unsigned int reg, unsigned int mask, 189 + unsigned int val) 190 + { 191 + int ret; 192 + 193 + ret = clk_enable(sai->pdata->pclk); 194 + if (ret < 0) 195 + return ret; 196 + 197 + ret = regmap_update_bits(sai->regmap, reg, mask, val); 198 + 199 + clk_disable(sai->pdata->pclk); 200 + 201 + return ret; 202 + } 203 + 204 + static int stm32_sai_sub_reg_wr(struct stm32_sai_sub_data *sai, 205 + unsigned int reg, unsigned int mask, 206 + unsigned int val) 207 + { 208 + int ret; 209 + 210 + ret = clk_enable(sai->pdata->pclk); 211 + if (ret < 0) 212 + return ret; 213 + 214 + ret = regmap_write_bits(sai->regmap, reg, mask, val); 215 + 216 + clk_disable(sai->pdata->pclk); 217 + 218 + return ret; 219 + } 220 + 221 + static int stm32_sai_sub_reg_rd(struct stm32_sai_sub_data *sai, 222 + unsigned int reg, unsigned int *val) 223 + { 224 + int ret; 225 + 226 + ret = clk_enable(sai->pdata->pclk); 227 + if (ret < 0) 228 + return ret; 229 + 230 + ret = regmap_read(sai->regmap, reg, val); 231 + 232 + clk_disable(sai->pdata->pclk); 233 + 234 + return ret; 235 + } 236 + 187 237 static const struct regmap_config stm32_sai_sub_regmap_config_f4 = { 188 238 .reg_bits = 32, 189 239 .reg_stride = 4, ··· 345 295 346 296 mask = SAI_XCR1_MCKDIV_MASK(SAI_XCR1_MCKDIV_WIDTH(version)); 347 297 cr1 = SAI_XCR1_MCKDIV_SET(div); 348 - ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, mask, cr1); 298 + ret = stm32_sai_sub_reg_up(sai, STM_SAI_CR1_REGX, mask, cr1); 349 299 if (ret < 0) 350 300 dev_err(&sai->pdev->dev, "Failed to update CR1 register\n"); 351 301 ··· 422 372 423 373 dev_dbg(&sai->pdev->dev, "Enable master clock\n"); 424 374 425 - return regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, 426 - SAI_XCR1_MCKEN, SAI_XCR1_MCKEN); 375 + return stm32_sai_sub_reg_up(sai, STM_SAI_CR1_REGX, 376 + SAI_XCR1_MCKEN, SAI_XCR1_MCKEN); 427 377 } 428 378 429 379 static void stm32_sai_mclk_disable(struct clk_hw *hw) ··· 433 383 434 384 dev_dbg(&sai->pdev->dev, "Disable master clock\n"); 435 385 436 - regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, SAI_XCR1_MCKEN, 0); 386 + stm32_sai_sub_reg_up(sai, STM_SAI_CR1_REGX, SAI_XCR1_MCKEN, 0); 437 387 } 438 388 439 389 static const struct clk_ops mclk_ops = { ··· 496 446 unsigned int sr, imr, flags; 497 447 snd_pcm_state_t status = SNDRV_PCM_STATE_RUNNING; 498 448 499 - regmap_read(sai->regmap, STM_SAI_IMR_REGX, &imr); 500 - regmap_read(sai->regmap, STM_SAI_SR_REGX, &sr); 449 + stm32_sai_sub_reg_rd(sai, STM_SAI_IMR_REGX, &imr); 450 + stm32_sai_sub_reg_rd(sai, STM_SAI_SR_REGX, &sr); 501 451 502 452 flags = sr & imr; 503 453 if (!flags) 504 454 return IRQ_NONE; 505 455 506 - regmap_write_bits(sai->regmap, STM_SAI_CLRFR_REGX, SAI_XCLRFR_MASK, 507 - SAI_XCLRFR_MASK); 456 + stm32_sai_sub_reg_wr(sai, STM_SAI_CLRFR_REGX, SAI_XCLRFR_MASK, 457 + SAI_XCLRFR_MASK); 508 458 509 459 if (!sai->substream) { 510 460 dev_err(&pdev->dev, "Device stopped. Spurious IRQ 0x%x\n", sr); ··· 553 503 int ret; 554 504 555 505 if (dir == SND_SOC_CLOCK_OUT && sai->sai_mclk) { 556 - ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, 557 - SAI_XCR1_NODIV, 506 + ret = stm32_sai_sub_reg_up(sai, STM_SAI_CR1_REGX, 507 + SAI_XCR1_NODIV, 558 508 freq ? 0 : SAI_XCR1_NODIV); 559 509 if (ret < 0) 560 510 return ret; ··· 633 583 634 584 slotr_mask |= SAI_XSLOTR_SLOTEN_MASK; 635 585 636 - regmap_update_bits(sai->regmap, STM_SAI_SLOTR_REGX, slotr_mask, slotr); 586 + stm32_sai_sub_reg_up(sai, STM_SAI_SLOTR_REGX, slotr_mask, slotr); 637 587 638 588 sai->slot_width = slot_width; 639 589 sai->slots = slots; ··· 715 665 cr1_mask |= SAI_XCR1_CKSTR; 716 666 frcr_mask |= SAI_XFRCR_FSPOL; 717 667 718 - regmap_update_bits(sai->regmap, STM_SAI_FRCR_REGX, frcr_mask, frcr); 668 + stm32_sai_sub_reg_up(sai, STM_SAI_FRCR_REGX, frcr_mask, frcr); 719 669 720 670 /* DAI clock master masks */ 721 671 switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { ··· 743 693 cr1_mask |= SAI_XCR1_SLAVE; 744 694 745 695 conf_update: 746 - ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, cr1_mask, cr1); 696 + ret = stm32_sai_sub_reg_up(sai, STM_SAI_CR1_REGX, cr1_mask, cr1); 747 697 if (ret < 0) { 748 698 dev_err(cpu_dai->dev, "Failed to update CR1 register\n"); 749 699 return ret; ··· 780 730 } 781 731 782 732 /* Enable ITs */ 783 - regmap_write_bits(sai->regmap, STM_SAI_CLRFR_REGX, 784 - SAI_XCLRFR_MASK, SAI_XCLRFR_MASK); 733 + stm32_sai_sub_reg_wr(sai, STM_SAI_CLRFR_REGX, 734 + SAI_XCLRFR_MASK, SAI_XCLRFR_MASK); 785 735 786 736 imr = SAI_XIMR_OVRUDRIE; 787 737 if (STM_SAI_IS_CAPTURE(sai)) { 788 - regmap_read(sai->regmap, STM_SAI_CR2_REGX, &cr2); 738 + stm32_sai_sub_reg_rd(sai, STM_SAI_CR2_REGX, &cr2); 789 739 if (cr2 & SAI_XCR2_MUTECNT_MASK) 790 740 imr |= SAI_XIMR_MUTEDETIE; 791 741 } ··· 795 745 else 796 746 imr |= SAI_XIMR_AFSDETIE | SAI_XIMR_LFSDETIE; 797 747 798 - regmap_update_bits(sai->regmap, STM_SAI_IMR_REGX, 799 - SAI_XIMR_MASK, imr); 748 + stm32_sai_sub_reg_up(sai, STM_SAI_IMR_REGX, 749 + SAI_XIMR_MASK, imr); 800 750 801 751 return 0; 802 752 } ··· 813 763 * SAI fifo threshold is set to half fifo, to keep enough space 814 764 * for DMA incoming bursts. 815 765 */ 816 - regmap_write_bits(sai->regmap, STM_SAI_CR2_REGX, 817 - SAI_XCR2_FFLUSH | SAI_XCR2_FTH_MASK, 818 - SAI_XCR2_FFLUSH | 819 - SAI_XCR2_FTH_SET(STM_SAI_FIFO_TH_HALF)); 766 + stm32_sai_sub_reg_wr(sai, STM_SAI_CR2_REGX, 767 + SAI_XCR2_FFLUSH | SAI_XCR2_FTH_MASK, 768 + SAI_XCR2_FFLUSH | 769 + SAI_XCR2_FTH_SET(STM_SAI_FIFO_TH_HALF)); 820 770 821 771 /* DS bits in CR1 not set for SPDIF (size forced to 24 bits).*/ 822 772 if (STM_SAI_PROTOCOL_IS_SPDIF(sai)) { ··· 845 795 if ((sai->slots == 2) && (params_channels(params) == 1)) 846 796 cr1 |= SAI_XCR1_MONO; 847 797 848 - ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, cr1_mask, cr1); 798 + ret = stm32_sai_sub_reg_up(sai, STM_SAI_CR1_REGX, cr1_mask, cr1); 849 799 if (ret < 0) { 850 800 dev_err(cpu_dai->dev, "Failed to update CR1 register\n"); 851 801 return ret; ··· 859 809 struct stm32_sai_sub_data *sai = snd_soc_dai_get_drvdata(cpu_dai); 860 810 int slotr, slot_sz; 861 811 862 - regmap_read(sai->regmap, STM_SAI_SLOTR_REGX, &slotr); 812 + stm32_sai_sub_reg_rd(sai, STM_SAI_SLOTR_REGX, &slotr); 863 813 864 814 /* 865 815 * If SLOTSZ is set to auto in SLOTR, align slot width on data size ··· 881 831 sai->slots = 2; 882 832 883 833 /* The number of slots in the audio frame is equal to NBSLOT[3:0] + 1*/ 884 - regmap_update_bits(sai->regmap, STM_SAI_SLOTR_REGX, 885 - SAI_XSLOTR_NBSLOT_MASK, 886 - SAI_XSLOTR_NBSLOT_SET((sai->slots - 1))); 834 + stm32_sai_sub_reg_up(sai, STM_SAI_SLOTR_REGX, 835 + SAI_XSLOTR_NBSLOT_MASK, 836 + SAI_XSLOTR_NBSLOT_SET((sai->slots - 1))); 887 837 888 838 /* Set default slots mask if not already set from DT */ 889 839 if (!(slotr & SAI_XSLOTR_SLOTEN_MASK)) { 890 840 sai->slot_mask = (1 << sai->slots) - 1; 891 - regmap_update_bits(sai->regmap, 892 - STM_SAI_SLOTR_REGX, SAI_XSLOTR_SLOTEN_MASK, 893 - SAI_XSLOTR_SLOTEN_SET(sai->slot_mask)); 841 + stm32_sai_sub_reg_up(sai, 842 + STM_SAI_SLOTR_REGX, SAI_XSLOTR_SLOTEN_MASK, 843 + SAI_XSLOTR_SLOTEN_SET(sai->slot_mask)); 894 844 } 895 845 896 846 dev_dbg(cpu_dai->dev, "Slots %d, slot width %d\n", ··· 920 870 dev_dbg(cpu_dai->dev, "Frame length %d, frame active %d\n", 921 871 sai->fs_length, fs_active); 922 872 923 - regmap_update_bits(sai->regmap, STM_SAI_FRCR_REGX, frcr_mask, frcr); 873 + stm32_sai_sub_reg_up(sai, STM_SAI_FRCR_REGX, frcr_mask, frcr); 924 874 925 875 if ((sai->fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_LSB) { 926 876 offset = sai->slot_width - sai->data_size; 927 877 928 - regmap_update_bits(sai->regmap, STM_SAI_SLOTR_REGX, 929 - SAI_XSLOTR_FBOFF_MASK, 930 - SAI_XSLOTR_FBOFF_SET(offset)); 878 + stm32_sai_sub_reg_up(sai, STM_SAI_SLOTR_REGX, 879 + SAI_XSLOTR_FBOFF_MASK, 880 + SAI_XSLOTR_FBOFF_SET(offset)); 931 881 } 932 882 } 933 883 ··· 1044 994 return -EINVAL; 1045 995 } 1046 996 1047 - regmap_update_bits(sai->regmap, 1048 - STM_SAI_CR1_REGX, 1049 - SAI_XCR1_OSR, cr1); 997 + stm32_sai_sub_reg_up(sai, 998 + STM_SAI_CR1_REGX, 999 + SAI_XCR1_OSR, cr1); 1050 1000 1051 1001 div = stm32_sai_get_clk_div(sai, sai_clk_rate, 1052 1002 sai->mclk_rate); ··· 1108 1058 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 1109 1059 dev_dbg(cpu_dai->dev, "Enable DMA and SAI\n"); 1110 1060 1111 - regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, 1112 - SAI_XCR1_DMAEN, SAI_XCR1_DMAEN); 1061 + stm32_sai_sub_reg_up(sai, STM_SAI_CR1_REGX, 1062 + SAI_XCR1_DMAEN, SAI_XCR1_DMAEN); 1113 1063 1114 1064 /* Enable SAI */ 1115 - ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, 1116 - SAI_XCR1_SAIEN, SAI_XCR1_SAIEN); 1065 + ret = stm32_sai_sub_reg_up(sai, STM_SAI_CR1_REGX, 1066 + SAI_XCR1_SAIEN, SAI_XCR1_SAIEN); 1117 1067 if (ret < 0) 1118 1068 dev_err(cpu_dai->dev, "Failed to update CR1 register\n"); 1119 1069 break; ··· 1122 1072 case SNDRV_PCM_TRIGGER_STOP: 1123 1073 dev_dbg(cpu_dai->dev, "Disable DMA and SAI\n"); 1124 1074 1125 - regmap_update_bits(sai->regmap, STM_SAI_IMR_REGX, 1126 - SAI_XIMR_MASK, 0); 1075 + stm32_sai_sub_reg_up(sai, STM_SAI_IMR_REGX, 1076 + SAI_XIMR_MASK, 0); 1127 1077 1128 - regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, 1129 - SAI_XCR1_SAIEN, 1130 - (unsigned int)~SAI_XCR1_SAIEN); 1078 + stm32_sai_sub_reg_up(sai, STM_SAI_CR1_REGX, 1079 + SAI_XCR1_SAIEN, 1080 + (unsigned int)~SAI_XCR1_SAIEN); 1131 1081 1132 - ret = regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, 1133 - SAI_XCR1_DMAEN, 1134 - (unsigned int)~SAI_XCR1_DMAEN); 1082 + ret = stm32_sai_sub_reg_up(sai, STM_SAI_CR1_REGX, 1083 + SAI_XCR1_DMAEN, 1084 + (unsigned int)~SAI_XCR1_DMAEN); 1135 1085 if (ret < 0) 1136 1086 dev_err(cpu_dai->dev, "Failed to update CR1 register\n"); 1137 1087 ··· 1151 1101 struct stm32_sai_sub_data *sai = snd_soc_dai_get_drvdata(cpu_dai); 1152 1102 unsigned long flags; 1153 1103 1154 - regmap_update_bits(sai->regmap, STM_SAI_IMR_REGX, SAI_XIMR_MASK, 0); 1104 + stm32_sai_sub_reg_up(sai, STM_SAI_IMR_REGX, SAI_XIMR_MASK, 0); 1155 1105 1156 1106 clk_disable_unprepare(sai->sai_ck); 1157 1107 ··· 1219 1169 cr1_mask |= SAI_XCR1_SYNCEN_MASK; 1220 1170 cr1 |= SAI_XCR1_SYNCEN_SET(sai->sync); 1221 1171 1222 - return regmap_update_bits(sai->regmap, STM_SAI_CR1_REGX, cr1_mask, cr1); 1172 + return stm32_sai_sub_reg_up(sai, STM_SAI_CR1_REGX, cr1_mask, cr1); 1223 1173 } 1224 1174 1225 1175 static const struct snd_soc_dai_ops stm32_sai_pcm_dai_ops = { ··· 1372 1322 if (STM_SAI_HAS_PDM(sai) && STM_SAI_IS_SUB_A(sai)) 1373 1323 sai->regmap_config = &stm32_sai_sub_regmap_config_h7; 1374 1324 1375 - sai->regmap = devm_regmap_init_mmio_clk(&pdev->dev, "sai_ck", 1376 - base, sai->regmap_config); 1325 + /* 1326 + * Do not manage peripheral clock through regmap framework as this 1327 + * can lead to circular locking issue with sai master clock provider. 1328 + * Manage peripheral clock directly in driver instead. 1329 + */ 1330 + sai->regmap = devm_regmap_init_mmio(&pdev->dev, base, 1331 + sai->regmap_config); 1377 1332 if (IS_ERR(sai->regmap)) { 1378 1333 dev_err(&pdev->dev, "Failed to initialize MMIO\n"); 1379 1334 return PTR_ERR(sai->regmap); ··· 1475 1420 return PTR_ERR(sai->sai_ck); 1476 1421 } 1477 1422 1423 + ret = clk_prepare(sai->pdata->pclk); 1424 + if (ret < 0) 1425 + return ret; 1426 + 1478 1427 if (STM_SAI_IS_F4(sai->pdata)) 1479 1428 return 0; 1480 1429 ··· 1560 1501 return 0; 1561 1502 } 1562 1503 1504 + static int stm32_sai_sub_remove(struct platform_device *pdev) 1505 + { 1506 + struct stm32_sai_sub_data *sai = dev_get_drvdata(&pdev->dev); 1507 + 1508 + clk_unprepare(sai->pdata->pclk); 1509 + 1510 + return 0; 1511 + } 1512 + 1563 1513 #ifdef CONFIG_PM_SLEEP 1564 1514 static int stm32_sai_sub_suspend(struct device *dev) 1565 1515 { 1566 1516 struct stm32_sai_sub_data *sai = dev_get_drvdata(dev); 1517 + int ret; 1518 + 1519 + ret = clk_enable(sai->pdata->pclk); 1520 + if (ret < 0) 1521 + return ret; 1567 1522 1568 1523 regcache_cache_only(sai->regmap, true); 1569 1524 regcache_mark_dirty(sai->regmap); 1525 + 1526 + clk_disable(sai->pdata->pclk); 1527 + 1570 1528 return 0; 1571 1529 } 1572 1530 1573 1531 static int stm32_sai_sub_resume(struct device *dev) 1574 1532 { 1575 1533 struct stm32_sai_sub_data *sai = dev_get_drvdata(dev); 1534 + int ret; 1535 + 1536 + ret = clk_enable(sai->pdata->pclk); 1537 + if (ret < 0) 1538 + return ret; 1576 1539 1577 1540 regcache_cache_only(sai->regmap, false); 1578 - return regcache_sync(sai->regmap); 1541 + ret = regcache_sync(sai->regmap); 1542 + 1543 + clk_disable(sai->pdata->pclk); 1544 + 1545 + return ret; 1579 1546 } 1580 1547 #endif /* CONFIG_PM_SLEEP */ 1581 1548 ··· 1616 1531 .pm = &stm32_sai_sub_pm_ops, 1617 1532 }, 1618 1533 .probe = stm32_sai_sub_probe, 1534 + .remove = stm32_sai_sub_remove, 1619 1535 }; 1620 1536 1621 1537 module_platform_driver(stm32_sai_sub_driver);