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

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'sound-6.11-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"Hopefully the last PR for 6.11, at least for this level of amount.

In addition to the usual HD-audio quirks, there are more changes in
ASoC, but all look small and device-specific fixes, and nothing stands
out. The only slightly big change is sunxi I2S fix, which looks quite
safe to apply, too"

* tag 'sound-6.11-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (21 commits)
ALSA: hda/realtek - Fix inactive headset mic jack for ASUS Vivobook 15 X1504VAP
ALSA: hda/realtek: Support mute LED on HP Laptop 14-dq2xxx
ALSA: hda/realtek: Enable Mute Led for HP Victus 15-fb1xxx
ALSA: hda/realtek: extend quirks for Clevo V5[46]0
ASoC: codecs: lpass-va-macro: set the default codec version for sm8250
ALSA: hda: add HDMI codec ID for Intel PTL
ALSA: hda/realtek: add patch for internal mic in Lenovo V145
ASoC: sunxi: sun4i-i2s: fix LRCLK polarity in i2s mode
ASoC: amd: yc: Add a quirk for MSI Bravo 17 (D7VEK)
ASoC: mediatek: mt8188-mt6359: Modify key
ASoc: SOF: topology: Clear SOF link platform name upon unload
ALSA: hda/conexant: Add pincfg quirk to enable top speakers on Sirius devices
ASoC: SOF: ipc: replace "enum sof_comp_type" field with "uint32_t"
ASoC: fix module autoloading
ASoC: tda7419: fix module autoloading
ASoC: google: fix module autoloading
ASoC: intel: fix module autoloading
ASoC: tegra: Fix CBB error during probe()
ASoC: dapm: Fix UAF for snd_soc_pcm_runtime object
ASoC: Intel: soc-acpi-cht: Make Lenovo Yoga Tab 3 X90F DMI match less strict
...

+161 -93
+1 -1
include/sound/sof/topology.h
··· 54 54 struct sof_ipc_comp { 55 55 struct sof_ipc_cmd_hdr hdr; 56 56 uint32_t id; 57 - enum sof_comp_type type; 57 + uint32_t type; 58 58 uint32_t pipeline_id; 59 59 uint32_t core; 60 60
+1 -1
include/uapi/sound/sof/abi.h
··· 29 29 /* SOF ABI version major, minor and patch numbers */ 30 30 #define SOF_ABI_MAJOR 3 31 31 #define SOF_ABI_MINOR 23 32 - #define SOF_ABI_PATCH 0 32 + #define SOF_ABI_PATCH 1 33 33 34 34 /* SOF ABI version number. Format within 32bit word is MMmmmppp */ 35 35 #define SOF_ABI_MAJOR_SHIFT 24
+11
sound/pci/hda/patch_conexant.c
··· 307 307 CXT_FIXUP_HEADSET_MIC, 308 308 CXT_FIXUP_HP_MIC_NO_PRESENCE, 309 309 CXT_PINCFG_SWS_JS201D, 310 + CXT_PINCFG_TOP_SPEAKER, 310 311 }; 311 312 312 313 /* for hda_fixup_thinkpad_acpi() */ ··· 975 974 .type = HDA_FIXUP_PINS, 976 975 .v.pins = cxt_pincfg_sws_js201d, 977 976 }, 977 + [CXT_PINCFG_TOP_SPEAKER] = { 978 + .type = HDA_FIXUP_PINS, 979 + .v.pins = (const struct hda_pintbl[]) { 980 + { 0x1d, 0x82170111 }, 981 + { } 982 + }, 983 + }, 978 984 }; 979 985 980 986 static const struct snd_pci_quirk cxt5045_fixups[] = { ··· 1078 1070 SND_PCI_QUIRK_VENDOR(0x17aa, "Thinkpad", CXT_FIXUP_THINKPAD_ACPI), 1079 1071 SND_PCI_QUIRK(0x1c06, 0x2011, "Lemote A1004", CXT_PINCFG_LEMOTE_A1004), 1080 1072 SND_PCI_QUIRK(0x1c06, 0x2012, "Lemote A1205", CXT_PINCFG_LEMOTE_A1205), 1073 + SND_PCI_QUIRK(0x2782, 0x12c3, "Sirius Gen1", CXT_PINCFG_TOP_SPEAKER), 1074 + SND_PCI_QUIRK(0x2782, 0x12c5, "Sirius Gen2", CXT_PINCFG_TOP_SPEAKER), 1081 1075 {} 1082 1076 }; 1083 1077 ··· 1099 1089 { .id = CXT_FIXUP_HP_MIC_NO_PRESENCE, .name = "hp-mic-fix" }, 1100 1090 { .id = CXT_PINCFG_LENOVO_NOTEBOOK, .name = "lenovo-20149" }, 1101 1091 { .id = CXT_PINCFG_SWS_JS201D, .name = "sws-js201d" }, 1092 + { .id = CXT_PINCFG_TOP_SPEAKER, .name = "sirius-top-speaker" }, 1102 1093 {} 1103 1094 }; 1104 1095
+1
sound/pci/hda/patch_hdmi.c
··· 4639 4639 HDA_CODEC_ENTRY(0x8086281e, "Battlemage HDMI", patch_i915_adlp_hdmi), 4640 4640 HDA_CODEC_ENTRY(0x8086281f, "Raptor Lake P HDMI", patch_i915_adlp_hdmi), 4641 4641 HDA_CODEC_ENTRY(0x80862820, "Lunar Lake HDMI", patch_i915_adlp_hdmi), 4642 + HDA_CODEC_ENTRY(0x80862822, "Panther Lake HDMI", patch_i915_adlp_hdmi), 4642 4643 HDA_CODEC_ENTRY(0x80862880, "CedarTrail HDMI", patch_generic_hdmi), 4643 4644 HDA_CODEC_ENTRY(0x80862882, "Valleyview2 HDMI", patch_i915_byt_hdmi), 4644 4645 HDA_CODEC_ENTRY(0x80862883, "Braswell HDMI", patch_i915_byt_hdmi),
+21 -1
sound/pci/hda/patch_realtek.c
··· 7538 7538 ALC236_FIXUP_HP_GPIO_LED, 7539 7539 ALC236_FIXUP_HP_MUTE_LED, 7540 7540 ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF, 7541 + ALC236_FIXUP_LENOVO_INV_DMIC, 7541 7542 ALC298_FIXUP_SAMSUNG_AMP, 7542 7543 ALC298_FIXUP_SAMSUNG_AMP2, 7543 7544 ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, ··· 7638 7637 ALC287_FIXUP_LENOVO_14ARP8_LEGION_IAH7, 7639 7638 ALC287_FIXUP_LENOVO_SSID_17AA3820, 7640 7639 ALCXXX_FIXUP_CS35LXX, 7640 + ALC245_FIXUP_CLEVO_NOISY_MIC, 7641 7641 }; 7642 7642 7643 7643 /* A special fixup for Lenovo C940 and Yoga Duet 7; ··· 9163 9161 .type = HDA_FIXUP_FUNC, 9164 9162 .v.func = alc236_fixup_hp_mute_led_micmute_vref, 9165 9163 }, 9164 + [ALC236_FIXUP_LENOVO_INV_DMIC] = { 9165 + .type = HDA_FIXUP_FUNC, 9166 + .v.func = alc_fixup_inv_dmic, 9167 + .chained = true, 9168 + .chain_id = ALC283_FIXUP_INT_MIC, 9169 + }, 9166 9170 [ALC298_FIXUP_SAMSUNG_AMP] = { 9167 9171 .type = HDA_FIXUP_FUNC, 9168 9172 .v.func = alc298_fixup_samsung_amp, ··· 9978 9970 .type = HDA_FIXUP_FUNC, 9979 9971 .v.func = cs35lxx_autodet_fixup, 9980 9972 }, 9973 + [ALC245_FIXUP_CLEVO_NOISY_MIC] = { 9974 + .type = HDA_FIXUP_FUNC, 9975 + .v.func = alc269_fixup_limit_int_mic_boost, 9976 + .chained = true, 9977 + .chain_id = ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE, 9978 + }, 9981 9979 }; 9982 9980 9983 9981 static const struct snd_pci_quirk alc269_fixup_tbl[] = { ··· 10232 10218 SND_PCI_QUIRK(0x103c, 0x87f5, "HP", ALC287_FIXUP_HP_GPIO_LED), 10233 10219 SND_PCI_QUIRK(0x103c, 0x87f6, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP), 10234 10220 SND_PCI_QUIRK(0x103c, 0x87f7, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP), 10221 + SND_PCI_QUIRK(0x103c, 0x87fd, "HP Laptop 14-dq2xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2), 10235 10222 SND_PCI_QUIRK(0x103c, 0x87fe, "HP Laptop 15s-fq2xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2), 10236 10223 SND_PCI_QUIRK(0x103c, 0x8805, "HP ProBook 650 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED), 10237 10224 SND_PCI_QUIRK(0x103c, 0x880d, "HP EliteBook 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), ··· 10357 10342 SND_PCI_QUIRK(0x103c, 0x8c16, "HP Spectre 16", ALC287_FIXUP_CS35L41_I2C_2), 10358 10343 SND_PCI_QUIRK(0x103c, 0x8c17, "HP Spectre 16", ALC287_FIXUP_CS35L41_I2C_2), 10359 10344 SND_PCI_QUIRK(0x103c, 0x8c21, "HP Pavilion Plus Laptop 14-ey0XXX", ALC245_FIXUP_HP_X360_MUTE_LEDS), 10345 + SND_PCI_QUIRK(0x103c, 0x8c30, "HP Victus 15-fb1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT), 10360 10346 SND_PCI_QUIRK(0x103c, 0x8c46, "HP EliteBook 830 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10361 10347 SND_PCI_QUIRK(0x103c, 0x8c47, "HP EliteBook 840 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10362 10348 SND_PCI_QUIRK(0x103c, 0x8c48, "HP EliteBook 860 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), ··· 10495 10479 SND_PCI_QUIRK(0x1043, 0x1e02, "ASUS UX3402ZA", ALC245_FIXUP_CS35L41_SPI_2), 10496 10480 SND_PCI_QUIRK(0x1043, 0x1e11, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA502), 10497 10481 SND_PCI_QUIRK(0x1043, 0x1e12, "ASUS UM3402", ALC287_FIXUP_CS35L41_I2C_2), 10482 + SND_PCI_QUIRK(0x1043, 0x1e1f, "ASUS Vivobook 15 X1504VAP", ALC2XX_FIXUP_HEADSET_MIC), 10498 10483 SND_PCI_QUIRK(0x1043, 0x1e51, "ASUS Zephyrus M15", ALC294_FIXUP_ASUS_GU502_PINS), 10499 10484 SND_PCI_QUIRK(0x1043, 0x1e5e, "ASUS ROG Strix G513", ALC294_FIXUP_ASUS_G513_PINS), 10500 10485 SND_PCI_QUIRK(0x1043, 0x1e63, "ASUS H7606W", ALC285_FIXUP_CS35L56_I2C_2), ··· 10636 10619 SND_PCI_QUIRK(0x1558, 0xa600, "Clevo NL50NU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 10637 10620 SND_PCI_QUIRK(0x1558, 0xa650, "Clevo NP[567]0SN[CD]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 10638 10621 SND_PCI_QUIRK(0x1558, 0xa671, "Clevo NP70SN[CDE]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 10639 - SND_PCI_QUIRK(0x1558, 0xa763, "Clevo V54x_6x_TU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 10622 + SND_PCI_QUIRK(0x1558, 0xa741, "Clevo V54x_6x_TNE", ALC245_FIXUP_CLEVO_NOISY_MIC), 10623 + SND_PCI_QUIRK(0x1558, 0xa763, "Clevo V54x_6x_TU", ALC245_FIXUP_CLEVO_NOISY_MIC), 10640 10624 SND_PCI_QUIRK(0x1558, 0xb018, "Clevo NP50D[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 10641 10625 SND_PCI_QUIRK(0x1558, 0xb019, "Clevo NH77D[BE]Q", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 10642 10626 SND_PCI_QUIRK(0x1558, 0xb022, "Clevo NH77D[DC][QW]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), ··· 10760 10742 SND_PCI_QUIRK(0x17aa, 0x38f9, "Thinkbook 16P Gen5", ALC287_FIXUP_CS35L41_I2C_2), 10761 10743 SND_PCI_QUIRK(0x17aa, 0x38fa, "Thinkbook 16P Gen5", ALC287_FIXUP_CS35L41_I2C_2), 10762 10744 SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI), 10745 + SND_PCI_QUIRK(0x17aa, 0x3913, "Lenovo 145", ALC236_FIXUP_LENOVO_INV_DMIC), 10763 10746 SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC), 10764 10747 SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo B50-70", ALC269_FIXUP_DMIC_THINKPAD_ACPI), 10765 10748 SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K), ··· 11013 10994 {.id = ALC623_FIXUP_LENOVO_THINKSTATION_P340, .name = "alc623-lenovo-thinkstation-p340"}, 11014 10995 {.id = ALC255_FIXUP_ACER_HEADPHONE_AND_MIC, .name = "alc255-acer-headphone-and-mic"}, 11015 10996 {.id = ALC285_FIXUP_HP_GPIO_AMP_INIT, .name = "alc285-hp-amp-init"}, 10997 + {.id = ALC236_FIXUP_LENOVO_INV_DMIC, .name = "alc236-fixup-lenovo-inv-mic"}, 11016 10998 {} 11017 10999 }; 11018 11000 #define ALC225_STANDARD_PINS \
+7
sound/soc/amd/yc/acp6x-mach.c
··· 356 356 { 357 357 .driver_data = &acp6x_card, 358 358 .matches = { 359 + DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."), 360 + DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 17 D7VEK"), 361 + } 362 + }, 363 + { 364 + .driver_data = &acp6x_card, 365 + .matches = { 359 366 DMI_MATCH(DMI_BOARD_VENDOR, "Alienware"), 360 367 DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), 361 368 }
+1
sound/soc/codecs/chv3-codec.c
··· 26 26 { .compatible = "google,chv3-codec", }, 27 27 { } 28 28 }; 29 + MODULE_DEVICE_TABLE(of, chv3_codec_of_match); 29 30 30 31 static struct platform_driver chv3_codec_platform_driver = { 31 32 .driver = {
+10 -1
sound/soc/codecs/lpass-va-macro.c
··· 228 228 struct va_macro_data { 229 229 bool has_swr_master; 230 230 bool has_npl_clk; 231 + int version; 231 232 }; 232 233 233 234 static const struct va_macro_data sm8250_va_data = { 234 235 .has_swr_master = false, 235 236 .has_npl_clk = false, 237 + .version = LPASS_CODEC_VERSION_1_0, 236 238 }; 237 239 238 240 static const struct va_macro_data sm8450_va_data = { ··· 1589 1587 goto err_npl; 1590 1588 } 1591 1589 1592 - va_macro_set_lpass_codec_version(va); 1590 + /** 1591 + * old version of codecs do not have a reliable way to determine the 1592 + * version from registers, get them from soc specific data 1593 + */ 1594 + if (data->version) 1595 + lpass_macro_set_codec_version(data->version); 1596 + else /* read version from register */ 1597 + va_macro_set_lpass_codec_version(va); 1593 1598 1594 1599 if (va->has_swr_master) { 1595 1600 /* Set default CLK div to 1 */
+1
sound/soc/codecs/tda7419.c
··· 623 623 { .compatible = "st,tda7419" }, 624 624 { }, 625 625 }; 626 + MODULE_DEVICE_TABLE(of, tda7419_of_match); 626 627 627 628 static struct i2c_driver tda7419_driver = { 628 629 .driver = {
+1
sound/soc/google/chv3-i2s.c
··· 322 322 { .compatible = "google,chv3-i2s" }, 323 323 {}, 324 324 }; 325 + MODULE_DEVICE_TABLE(of, chv3_i2s_of_match); 325 326 326 327 static struct platform_driver chv3_i2s_driver = { 327 328 .probe = chv3_i2s_probe,
+1 -1
sound/soc/intel/boards/bxt_rt298.c
··· 605 605 int i; 606 606 607 607 for (i = 0; i < ARRAY_SIZE(broxton_rt298_dais); i++) { 608 - if (card->dai_link[i].codecs->name && 608 + if (card->dai_link[i].num_codecs && 609 609 !strncmp(card->dai_link[i].codecs->name, "i2c-INT343A:00", 610 610 I2C_NAME_SIZE)) { 611 611 if (!strncmp(card->name, "broxton-rt298",
+1 -1
sound/soc/intel/boards/bytcht_cx2072x.c
··· 241 241 242 242 /* fix index of codec dai */ 243 243 for (i = 0; i < ARRAY_SIZE(byt_cht_cx2072x_dais); i++) { 244 - if (byt_cht_cx2072x_dais[i].codecs->name && 244 + if (byt_cht_cx2072x_dais[i].num_codecs && 245 245 !strcmp(byt_cht_cx2072x_dais[i].codecs->name, 246 246 "i2c-14F10720:00")) { 247 247 dai_index = i;
+1 -1
sound/soc/intel/boards/bytcht_da7213.c
··· 245 245 246 246 /* fix index of codec dai */ 247 247 for (i = 0; i < ARRAY_SIZE(dailink); i++) { 248 - if (dailink[i].codecs->name && 248 + if (dailink[i].num_codecs && 249 249 !strcmp(dailink[i].codecs->name, "i2c-DLGS7213:00")) { 250 250 dai_index = i; 251 251 break;
+1 -1
sound/soc/intel/boards/bytcht_es8316.c
··· 546 546 547 547 /* fix index of codec dai */ 548 548 for (i = 0; i < ARRAY_SIZE(byt_cht_es8316_dais); i++) { 549 - if (byt_cht_es8316_dais[i].codecs->name && 549 + if (byt_cht_es8316_dais[i].num_codecs && 550 550 !strcmp(byt_cht_es8316_dais[i].codecs->name, 551 551 "i2c-ESSX8316:00")) { 552 552 dai_index = i;
+1 -1
sound/soc/intel/boards/bytcr_rt5640.c
··· 1677 1677 1678 1678 /* fix index of codec dai */ 1679 1679 for (i = 0; i < ARRAY_SIZE(byt_rt5640_dais); i++) { 1680 - if (byt_rt5640_dais[i].codecs->name && 1680 + if (byt_rt5640_dais[i].num_codecs && 1681 1681 !strcmp(byt_rt5640_dais[i].codecs->name, 1682 1682 "i2c-10EC5640:00")) { 1683 1683 dai_index = i;
+1 -1
sound/soc/intel/boards/bytcr_rt5651.c
··· 910 910 911 911 /* fix index of codec dai */ 912 912 for (i = 0; i < ARRAY_SIZE(byt_rt5651_dais); i++) { 913 - if (byt_rt5651_dais[i].codecs->name && 913 + if (byt_rt5651_dais[i].num_codecs && 914 914 !strcmp(byt_rt5651_dais[i].codecs->name, 915 915 "i2c-10EC5651:00")) { 916 916 dai_index = i;
+1 -1
sound/soc/intel/boards/bytcr_wm5102.c
··· 605 605 606 606 /* find index of codec dai */ 607 607 for (i = 0; i < ARRAY_SIZE(byt_wm5102_dais); i++) { 608 - if (byt_wm5102_dais[i].codecs->name && 608 + if (byt_wm5102_dais[i].num_codecs && 609 609 !strcmp(byt_wm5102_dais[i].codecs->name, 610 610 "wm5102-codec")) { 611 611 dai_index = i;
+1 -1
sound/soc/intel/boards/cht_bsw_rt5645.c
··· 569 569 570 570 /* set correct codec name */ 571 571 for (i = 0; i < ARRAY_SIZE(cht_dailink); i++) 572 - if (cht_dailink[i].codecs->name && 572 + if (cht_dailink[i].num_codecs && 573 573 !strcmp(cht_dailink[i].codecs->name, 574 574 "i2c-10EC5645:00")) { 575 575 dai_index = i;
+1 -1
sound/soc/intel/boards/cht_bsw_rt5672.c
··· 466 466 467 467 /* find index of codec dai */ 468 468 for (i = 0; i < ARRAY_SIZE(cht_dailink); i++) { 469 - if (cht_dailink[i].codecs->name && 469 + if (cht_dailink[i].num_codecs && 470 470 !strcmp(cht_dailink[i].codecs->name, RT5672_I2C_DEFAULT)) { 471 471 dai_index = i; 472 472 break;
-1
sound/soc/intel/common/soc-acpi-intel-cht-match.c
··· 84 84 /* Lenovo Yoga Tab 3 Pro YT3-X90, codec missing from DSDT */ 85 85 .matches = { 86 86 DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), 87 - DMI_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"), 88 87 DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"), 89 88 }, 90 89 },
+1
sound/soc/intel/keembay/kmb_platform.c
··· 814 814 { .compatible = "intel,keembay-tdm", .data = &intel_kmb_tdm_dai}, 815 815 {} 816 816 }; 817 + MODULE_DEVICE_TABLE(of, kmb_plat_of_match); 817 818 818 819 static int kmb_plat_dai_probe(struct platform_device *pdev) 819 820 {
+13 -4
sound/soc/mediatek/mt8188/mt8188-mt6359.c
··· 734 734 struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(rtd->card); 735 735 struct snd_soc_jack *jack = &soc_card_data->card_data->jacks[MT8188_JACK_HEADSET]; 736 736 struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component; 737 + struct mtk_platform_card_data *card_data = soc_card_data->card_data; 737 738 int ret; 738 739 739 740 ret = snd_soc_dapm_new_controls(&card->dapm, mt8188_nau8825_widgets, ··· 763 762 return ret; 764 763 } 765 764 766 - snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE); 767 - snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND); 768 - snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP); 769 - snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN); 765 + if (card_data->flags & ES8326_HS_PRESENT) { 766 + snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE); 767 + snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOLUMEUP); 768 + snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEDOWN); 769 + snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOICECOMMAND); 770 + } else { 771 + snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE); 772 + snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND); 773 + snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP); 774 + snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN); 775 + } 776 + 770 777 ret = snd_soc_component_set_jack(component, jack, NULL); 771 778 772 779 if (ret) {
+1
sound/soc/soc-dapm.c
··· 4057 4057 4058 4058 case SND_SOC_DAPM_POST_PMD: 4059 4059 kfree(substream->runtime); 4060 + substream->runtime = NULL; 4060 4061 break; 4061 4062 4062 4063 default:
+2
sound/soc/sof/topology.c
··· 2050 2050 if (!slink) 2051 2051 return 0; 2052 2052 2053 + slink->link->platforms->name = NULL; 2054 + 2053 2055 kfree(slink->tuples); 2054 2056 list_del(&slink->list); 2055 2057 kfree(slink->hw_configs);
+73 -70
sound/soc/sunxi/sun4i-i2s.c
··· 100 100 #define SUN8I_I2S_CTRL_MODE_PCM (0 << 4) 101 101 102 102 #define SUN8I_I2S_FMT0_LRCLK_POLARITY_MASK BIT(19) 103 - #define SUN8I_I2S_FMT0_LRCLK_POLARITY_INVERTED (1 << 19) 104 - #define SUN8I_I2S_FMT0_LRCLK_POLARITY_NORMAL (0 << 19) 103 + #define SUN8I_I2S_FMT0_LRCLK_POLARITY_START_HIGH (1 << 19) 104 + #define SUN8I_I2S_FMT0_LRCLK_POLARITY_START_LOW (0 << 19) 105 105 #define SUN8I_I2S_FMT0_LRCK_PERIOD_MASK GENMASK(17, 8) 106 106 #define SUN8I_I2S_FMT0_LRCK_PERIOD(period) ((period - 1) << 8) 107 107 #define SUN8I_I2S_FMT0_BCLK_POLARITY_MASK BIT(7) ··· 729 729 static int sun8i_i2s_set_soc_fmt(const struct sun4i_i2s *i2s, 730 730 unsigned int fmt) 731 731 { 732 - u32 mode, val; 732 + u32 mode, lrclk_pol, bclk_pol, val; 733 733 u8 offset; 734 - 735 - /* 736 - * DAI clock polarity 737 - * 738 - * The setup for LRCK contradicts the datasheet, but under a 739 - * scope it's clear that the LRCK polarity is reversed 740 - * compared to the expected polarity on the bus. 741 - */ 742 - switch (fmt & SND_SOC_DAIFMT_INV_MASK) { 743 - case SND_SOC_DAIFMT_IB_IF: 744 - /* Invert both clocks */ 745 - val = SUN8I_I2S_FMT0_BCLK_POLARITY_INVERTED; 746 - break; 747 - case SND_SOC_DAIFMT_IB_NF: 748 - /* Invert bit clock */ 749 - val = SUN8I_I2S_FMT0_BCLK_POLARITY_INVERTED | 750 - SUN8I_I2S_FMT0_LRCLK_POLARITY_INVERTED; 751 - break; 752 - case SND_SOC_DAIFMT_NB_IF: 753 - /* Invert frame clock */ 754 - val = 0; 755 - break; 756 - case SND_SOC_DAIFMT_NB_NF: 757 - val = SUN8I_I2S_FMT0_LRCLK_POLARITY_INVERTED; 758 - break; 759 - default: 760 - return -EINVAL; 761 - } 762 - 763 - regmap_update_bits(i2s->regmap, SUN4I_I2S_FMT0_REG, 764 - SUN8I_I2S_FMT0_LRCLK_POLARITY_MASK | 765 - SUN8I_I2S_FMT0_BCLK_POLARITY_MASK, 766 - val); 767 734 768 735 /* DAI Mode */ 769 736 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { 770 737 case SND_SOC_DAIFMT_DSP_A: 738 + lrclk_pol = SUN8I_I2S_FMT0_LRCLK_POLARITY_START_HIGH; 771 739 mode = SUN8I_I2S_CTRL_MODE_PCM; 772 740 offset = 1; 773 741 break; 774 742 775 743 case SND_SOC_DAIFMT_DSP_B: 744 + lrclk_pol = SUN8I_I2S_FMT0_LRCLK_POLARITY_START_HIGH; 776 745 mode = SUN8I_I2S_CTRL_MODE_PCM; 777 746 offset = 0; 778 747 break; 779 748 780 749 case SND_SOC_DAIFMT_I2S: 750 + lrclk_pol = SUN8I_I2S_FMT0_LRCLK_POLARITY_START_LOW; 781 751 mode = SUN8I_I2S_CTRL_MODE_LEFT; 782 752 offset = 1; 783 753 break; 784 754 785 755 case SND_SOC_DAIFMT_LEFT_J: 756 + lrclk_pol = SUN8I_I2S_FMT0_LRCLK_POLARITY_START_HIGH; 786 757 mode = SUN8I_I2S_CTRL_MODE_LEFT; 787 758 offset = 0; 788 759 break; 789 760 790 761 case SND_SOC_DAIFMT_RIGHT_J: 762 + lrclk_pol = SUN8I_I2S_FMT0_LRCLK_POLARITY_START_HIGH; 791 763 mode = SUN8I_I2S_CTRL_MODE_RIGHT; 792 764 offset = 0; 793 765 break; ··· 776 804 regmap_update_bits(i2s->regmap, SUN8I_I2S_RX_CHAN_SEL_REG, 777 805 SUN8I_I2S_TX_CHAN_OFFSET_MASK, 778 806 SUN8I_I2S_TX_CHAN_OFFSET(offset)); 807 + 808 + /* DAI clock polarity */ 809 + bclk_pol = SUN8I_I2S_FMT0_BCLK_POLARITY_NORMAL; 810 + 811 + switch (fmt & SND_SOC_DAIFMT_INV_MASK) { 812 + case SND_SOC_DAIFMT_IB_IF: 813 + /* Invert both clocks */ 814 + lrclk_pol ^= SUN8I_I2S_FMT0_LRCLK_POLARITY_MASK; 815 + bclk_pol = SUN8I_I2S_FMT0_BCLK_POLARITY_INVERTED; 816 + break; 817 + case SND_SOC_DAIFMT_IB_NF: 818 + /* Invert bit clock */ 819 + bclk_pol = SUN8I_I2S_FMT0_BCLK_POLARITY_INVERTED; 820 + break; 821 + case SND_SOC_DAIFMT_NB_IF: 822 + /* Invert frame clock */ 823 + lrclk_pol ^= SUN8I_I2S_FMT0_LRCLK_POLARITY_MASK; 824 + break; 825 + case SND_SOC_DAIFMT_NB_NF: 826 + /* No inversion */ 827 + break; 828 + default: 829 + return -EINVAL; 830 + } 831 + 832 + regmap_update_bits(i2s->regmap, SUN4I_I2S_FMT0_REG, 833 + SUN8I_I2S_FMT0_LRCLK_POLARITY_MASK | 834 + SUN8I_I2S_FMT0_BCLK_POLARITY_MASK, 835 + lrclk_pol | bclk_pol); 779 836 780 837 /* DAI clock master masks */ 781 838 switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) { ··· 837 836 static int sun50i_h6_i2s_set_soc_fmt(const struct sun4i_i2s *i2s, 838 837 unsigned int fmt) 839 838 { 840 - u32 mode, val; 839 + u32 mode, lrclk_pol, bclk_pol, val; 841 840 u8 offset; 842 - 843 - /* 844 - * DAI clock polarity 845 - * 846 - * The setup for LRCK contradicts the datasheet, but under a 847 - * scope it's clear that the LRCK polarity is reversed 848 - * compared to the expected polarity on the bus. 849 - */ 850 - switch (fmt & SND_SOC_DAIFMT_INV_MASK) { 851 - case SND_SOC_DAIFMT_IB_IF: 852 - /* Invert both clocks */ 853 - val = SUN8I_I2S_FMT0_BCLK_POLARITY_INVERTED; 854 - break; 855 - case SND_SOC_DAIFMT_IB_NF: 856 - /* Invert bit clock */ 857 - val = SUN8I_I2S_FMT0_BCLK_POLARITY_INVERTED | 858 - SUN8I_I2S_FMT0_LRCLK_POLARITY_INVERTED; 859 - break; 860 - case SND_SOC_DAIFMT_NB_IF: 861 - /* Invert frame clock */ 862 - val = 0; 863 - break; 864 - case SND_SOC_DAIFMT_NB_NF: 865 - val = SUN8I_I2S_FMT0_LRCLK_POLARITY_INVERTED; 866 - break; 867 - default: 868 - return -EINVAL; 869 - } 870 - 871 - regmap_update_bits(i2s->regmap, SUN4I_I2S_FMT0_REG, 872 - SUN8I_I2S_FMT0_LRCLK_POLARITY_MASK | 873 - SUN8I_I2S_FMT0_BCLK_POLARITY_MASK, 874 - val); 875 841 876 842 /* DAI Mode */ 877 843 switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { 878 844 case SND_SOC_DAIFMT_DSP_A: 845 + lrclk_pol = SUN8I_I2S_FMT0_LRCLK_POLARITY_START_HIGH; 879 846 mode = SUN8I_I2S_CTRL_MODE_PCM; 880 847 offset = 1; 881 848 break; 882 849 883 850 case SND_SOC_DAIFMT_DSP_B: 851 + lrclk_pol = SUN8I_I2S_FMT0_LRCLK_POLARITY_START_HIGH; 884 852 mode = SUN8I_I2S_CTRL_MODE_PCM; 885 853 offset = 0; 886 854 break; 887 855 888 856 case SND_SOC_DAIFMT_I2S: 857 + lrclk_pol = SUN8I_I2S_FMT0_LRCLK_POLARITY_START_LOW; 889 858 mode = SUN8I_I2S_CTRL_MODE_LEFT; 890 859 offset = 1; 891 860 break; 892 861 893 862 case SND_SOC_DAIFMT_LEFT_J: 863 + lrclk_pol = SUN8I_I2S_FMT0_LRCLK_POLARITY_START_HIGH; 894 864 mode = SUN8I_I2S_CTRL_MODE_LEFT; 895 865 offset = 0; 896 866 break; 897 867 898 868 case SND_SOC_DAIFMT_RIGHT_J: 869 + lrclk_pol = SUN8I_I2S_FMT0_LRCLK_POLARITY_START_HIGH; 899 870 mode = SUN8I_I2S_CTRL_MODE_RIGHT; 900 871 offset = 0; 901 872 break; ··· 884 911 regmap_update_bits(i2s->regmap, SUN50I_H6_I2S_RX_CHAN_SEL_REG, 885 912 SUN50I_H6_I2S_TX_CHAN_SEL_OFFSET_MASK, 886 913 SUN50I_H6_I2S_TX_CHAN_SEL_OFFSET(offset)); 914 + 915 + /* DAI clock polarity */ 916 + bclk_pol = SUN8I_I2S_FMT0_BCLK_POLARITY_NORMAL; 917 + 918 + switch (fmt & SND_SOC_DAIFMT_INV_MASK) { 919 + case SND_SOC_DAIFMT_IB_IF: 920 + /* Invert both clocks */ 921 + lrclk_pol ^= SUN8I_I2S_FMT0_LRCLK_POLARITY_MASK; 922 + bclk_pol = SUN8I_I2S_FMT0_BCLK_POLARITY_INVERTED; 923 + break; 924 + case SND_SOC_DAIFMT_IB_NF: 925 + /* Invert bit clock */ 926 + bclk_pol = SUN8I_I2S_FMT0_BCLK_POLARITY_INVERTED; 927 + break; 928 + case SND_SOC_DAIFMT_NB_IF: 929 + /* Invert frame clock */ 930 + lrclk_pol ^= SUN8I_I2S_FMT0_LRCLK_POLARITY_MASK; 931 + break; 932 + case SND_SOC_DAIFMT_NB_NF: 933 + /* No inversion */ 934 + break; 935 + default: 936 + return -EINVAL; 937 + } 938 + 939 + regmap_update_bits(i2s->regmap, SUN4I_I2S_FMT0_REG, 940 + SUN8I_I2S_FMT0_LRCLK_POLARITY_MASK | 941 + SUN8I_I2S_FMT0_BCLK_POLARITY_MASK, 942 + lrclk_pol | bclk_pol); 943 + 887 944 888 945 /* DAI clock master masks */ 889 946 switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
+7 -5
sound/soc/tegra/tegra210_ahub.c
··· 2 2 // 3 3 // tegra210_ahub.c - Tegra210 AHUB driver 4 4 // 5 - // Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved. 5 + // Copyright (c) 2020-2024, NVIDIA CORPORATION. All rights reserved. 6 6 7 7 #include <linux/clk.h> 8 8 #include <linux/device.h> ··· 1391 1391 return err; 1392 1392 } 1393 1393 1394 - err = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); 1395 - if (err) 1396 - return err; 1397 - 1398 1394 pm_runtime_enable(&pdev->dev); 1395 + 1396 + err = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); 1397 + if (err) { 1398 + pm_runtime_disable(&pdev->dev); 1399 + return err; 1400 + } 1399 1401 1400 1402 return 0; 1401 1403 }