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

Pull sound fixes from Takashi Iwai:
"It became a bit larger collection of fixes than wished at this time,
but all changes are small and mostly device-specific fixes that should
be fairly safe to apply.

Majority of fixes are about ASoC for AMD SOF, Cirrus codecs, lpass,
etc, in addition to the usual HD-audio quirks / fixes"

* tag 'sound-6.11-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (22 commits)
ALSA: hda: hda_component: Fix mutex crash if nothing ever binds
ALSA: hda/realtek: support HP Pavilion Aero 13-bg0xxx Mute LED
ALSA: hda/realtek: Fix the speaker output on Samsung Galaxy Book3 Ultra
ASoC: cs-amp-lib: Ignore empty UEFI calibration entries
ASoC: cs-amp-lib-test: Force test calibration blob entries to be valid
ALSA: hda/realtek - FIxed ALC285 headphone no sound
ALSA: hda/realtek - Fixed ALC256 headphone no sound
ASoC: allow module autoloading for table board_ids
ASoC: allow module autoloading for table db1200_pids
ALSA: hda: cs35l56: Don't use the device index as a calibration index
ALSA: seq: Skip event type filtering for UMP events
ALSA: hda/realtek: Enable mute/micmute LEDs on HP Laptop 14-ey0xxx
ASoC: SOF: amd: Fix for acp init sequence
ASoC: amd: acp: fix module autoloading
ASoC: mediatek: mt8188: Mark AFE_DAC_CON0 register as volatile
ASoC: codecs: wcd937x: Fix missing de-assert of reset GPIO
ASoC: SOF: mediatek: Add missing board compatible
ASoC: MAINTAINERS: Drop Banajit Goswami from Qualcomm sound drivers
ASoC: SOF: amd: Fix for incorrect acp error register offsets
ASoC: SOF: amd: move iram-dram fence register programming sequence
...

+149 -54
-1
MAINTAINERS
··· 18545 18546 QCOM AUDIO (ASoC) DRIVERS 18547 M: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> 18548 - M: Banajit Goswami <bgoswami@quicinc.com> 18549 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 18550 L: linux-arm-msm@vger.kernel.org 18551 S: Supported
··· 18545 18546 QCOM AUDIO (ASoC) DRIVERS 18547 M: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> 18548 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 18549 L: linux-arm-msm@vger.kernel.org 18550 S: Supported
+3
sound/core/seq/seq_clientmgr.c
··· 537 return NULL; 538 if (! dest->accept_input) 539 goto __not_avail; 540 if ((dest->filter & SNDRV_SEQ_FILTER_USE_EVENT) && 541 ! test_bit(event->type, dest->event_filter)) 542 goto __not_avail;
··· 537 return NULL; 538 if (! dest->accept_input) 539 goto __not_avail; 540 + if (snd_seq_ev_is_ump(event)) 541 + return dest; /* ok - no filter checks */ 542 + 543 if ((dest->filter & SNDRV_SEQ_FILTER_USE_EVENT) && 544 ! test_bit(event->type, dest->event_filter)) 545 goto __not_avail;
+1 -1
sound/pci/hda/cs35l56_hda.c
··· 1003 goto err; 1004 } 1005 1006 - cs35l56->base.cal_index = cs35l56->index; 1007 1008 cs35l56_init_cs_dsp(&cs35l56->base, &cs35l56->cs_dsp); 1009 cs35l56->cs_dsp.client_ops = &cs35l56_hda_client_ops;
··· 1003 goto err; 1004 } 1005 1006 + cs35l56->base.cal_index = -1; 1007 1008 cs35l56_init_cs_dsp(&cs35l56->base, &cs35l56->cs_dsp); 1009 cs35l56->cs_dsp.client_ops = &cs35l56_hda_client_ops;
+3 -2
sound/pci/hda/hda_component.c
··· 141 int ret; 142 143 /* Init shared and component specific data */ 144 - memset(parent, 0, sizeof(*parent)); 145 - mutex_init(&parent->mutex); 146 parent->codec = cdc; 147 148 mutex_lock(&parent->mutex); ··· 162 struct component_match *match = NULL; 163 struct hda_scodec_match *sm; 164 int ret, i; 165 166 for (i = 0; i < count; i++) { 167 sm = devm_kmalloc(dev, sizeof(*sm), GFP_KERNEL);
··· 141 int ret; 142 143 /* Init shared and component specific data */ 144 + memset(parent->comps, 0, sizeof(parent->comps)); 145 parent->codec = cdc; 146 147 mutex_lock(&parent->mutex); ··· 163 struct component_match *match = NULL; 164 struct hda_scodec_match *sm; 165 int ret, i; 166 + 167 + mutex_init(&parent->mutex); 168 169 for (i = 0; i < count; i++) { 170 sm = devm_kmalloc(dev, sizeof(*sm), GFP_KERNEL);
+54 -25
sound/pci/hda/patch_realtek.c
··· 4930 } 4931 } 4932 4933 static const struct coef_fw alc225_pre_hsmode[] = { 4934 UPDATE_COEF(0x4a, 1<<8, 0), 4935 UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), ··· 5055 case 0x10ec0236: 5056 case 0x10ec0256: 5057 case 0x19e58326: 5058 alc_process_coef_fw(codec, coef0256); 5059 break; 5060 case 0x10ec0234: ··· 5090 case 0x10ec0295: 5091 case 0x10ec0289: 5092 case 0x10ec0299: 5093 alc_process_coef_fw(codec, alc225_pre_hsmode); 5094 alc_process_coef_fw(codec, coef0225); 5095 break; ··· 5316 case 0x10ec0299: 5317 alc_process_coef_fw(codec, alc225_pre_hsmode); 5318 alc_process_coef_fw(codec, coef0225); 5319 break; 5320 case 0x10ec0255: 5321 alc_process_coef_fw(codec, coef0255); ··· 5329 alc_write_coef_idx(codec, 0x45, 0xc089); 5330 msleep(50); 5331 alc_process_coef_fw(codec, coef0256); 5332 break; 5333 case 0x10ec0234: 5334 case 0x10ec0274: ··· 5427 case 0x10ec0256: 5428 case 0x19e58326: 5429 alc_process_coef_fw(codec, coef0256); 5430 break; 5431 case 0x10ec0234: 5432 case 0x10ec0274: ··· 5476 alc_process_coef_fw(codec, coef0225_2); 5477 else 5478 alc_process_coef_fw(codec, coef0225_1); 5479 break; 5480 case 0x10ec0867: 5481 alc_update_coefex_idx(codec, 0x57, 0x5, 1<<14, 0); ··· 5544 case 0x10ec0256: 5545 case 0x19e58326: 5546 alc_process_coef_fw(codec, coef0256); 5547 break; 5548 case 0x10ec0234: 5549 case 0x10ec0274: ··· 5582 case 0x10ec0289: 5583 case 0x10ec0299: 5584 alc_process_coef_fw(codec, coef0225); 5585 break; 5586 } 5587 codec_dbg(codec, "Headset jack set to Nokia-style headset mode.\n"); ··· 5651 alc_write_coef_idx(codec, 0x06, 0x6104); 5652 alc_write_coefex_idx(codec, 0x57, 0x3, 0x09a3); 5653 5654 - snd_hda_codec_write(codec, 0x21, 0, 5655 - AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); 5656 - msleep(80); 5657 - snd_hda_codec_write(codec, 0x21, 0, 5658 - AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0); 5659 - 5660 alc_process_coef_fw(codec, coef0255); 5661 msleep(300); 5662 val = alc_read_coef_idx(codec, 0x46); 5663 is_ctia = (val & 0x0070) == 0x0070; 5664 - 5665 alc_write_coefex_idx(codec, 0x57, 0x3, 0x0da3); 5666 alc_update_coefex_idx(codec, 0x57, 0x5, 1<<14, 0); 5667 - 5668 - snd_hda_codec_write(codec, 0x21, 0, 5669 - AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT); 5670 - msleep(80); 5671 - snd_hda_codec_write(codec, 0x21, 0, 5672 - AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE); 5673 break; 5674 case 0x10ec0234: 5675 case 0x10ec0274: ··· 5742 case 0x10ec0295: 5743 case 0x10ec0289: 5744 case 0x10ec0299: 5745 - snd_hda_codec_write(codec, 0x21, 0, 5746 - AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); 5747 - msleep(80); 5748 - snd_hda_codec_write(codec, 0x21, 0, 5749 - AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0); 5750 - 5751 alc_process_coef_fw(codec, alc225_pre_hsmode); 5752 alc_update_coef_idx(codec, 0x67, 0xf000, 0x1000); 5753 val = alc_read_coef_idx(codec, 0x45); ··· 5758 val = alc_read_coef_idx(codec, 0x46); 5759 is_ctia = (val & 0x00f0) == 0x00f0; 5760 } 5761 alc_update_coef_idx(codec, 0x4a, 7<<6, 7<<6); 5762 alc_update_coef_idx(codec, 0x4a, 3<<4, 3<<4); 5763 alc_update_coef_idx(codec, 0x67, 0xf000, 0x3000); 5764 - 5765 - snd_hda_codec_write(codec, 0x21, 0, 5766 - AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT); 5767 - msleep(80); 5768 - snd_hda_codec_write(codec, 0x21, 0, 5769 - AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE); 5770 break; 5771 case 0x10ec0867: 5772 is_ctia = true; ··· 10341 SND_PCI_QUIRK(0x103c, 0x8c15, "HP Spectre x360 2-in-1 Laptop 14-eu0xxx", ALC245_FIXUP_HP_SPECTRE_X360_EU0XXX), 10342 SND_PCI_QUIRK(0x103c, 0x8c16, "HP Spectre 16", ALC287_FIXUP_CS35L41_I2C_2), 10343 SND_PCI_QUIRK(0x103c, 0x8c17, "HP Spectre 16", ALC287_FIXUP_CS35L41_I2C_2), 10344 SND_PCI_QUIRK(0x103c, 0x8c46, "HP EliteBook 830 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10345 SND_PCI_QUIRK(0x103c, 0x8c47, "HP EliteBook 840 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10346 SND_PCI_QUIRK(0x103c, 0x8c48, "HP EliteBook 860 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), ··· 10380 SND_PCI_QUIRK(0x103c, 0x8ca2, "HP ZBook Power", ALC236_FIXUP_HP_GPIO_LED), 10381 SND_PCI_QUIRK(0x103c, 0x8ca4, "HP ZBook Fury", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10382 SND_PCI_QUIRK(0x103c, 0x8ca7, "HP ZBook Fury", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10383 SND_PCI_QUIRK(0x103c, 0x8cdd, "HP Spectre", ALC287_FIXUP_CS35L41_I2C_2), 10384 SND_PCI_QUIRK(0x103c, 0x8cde, "HP Spectre", ALC287_FIXUP_CS35L41_I2C_2), 10385 SND_PCI_QUIRK(0x103c, 0x8cdf, "HP SnowWhite", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED), ··· 10541 SND_PCI_QUIRK(0x144d, 0xca03, "Samsung Galaxy Book2 Pro 360 (NP930QED)", ALC298_FIXUP_SAMSUNG_AMP), 10542 SND_PCI_QUIRK(0x144d, 0xc868, "Samsung Galaxy Book2 Pro (NP930XED)", ALC298_FIXUP_SAMSUNG_AMP), 10543 SND_PCI_QUIRK(0x144d, 0xc1ca, "Samsung Galaxy Book3 Pro 360 (NP960QFG-KB1US)", ALC298_FIXUP_SAMSUNG_AMP2), 10544 SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC), 10545 SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC), 10546 SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC),
··· 4930 } 4931 } 4932 4933 + static void alc_hp_mute_disable(struct hda_codec *codec, unsigned int delay) 4934 + { 4935 + if (delay <= 0) 4936 + delay = 75; 4937 + snd_hda_codec_write(codec, 0x21, 0, 4938 + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); 4939 + msleep(delay); 4940 + snd_hda_codec_write(codec, 0x21, 0, 4941 + AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0); 4942 + msleep(delay); 4943 + } 4944 + 4945 + static void alc_hp_enable_unmute(struct hda_codec *codec, unsigned int delay) 4946 + { 4947 + if (delay <= 0) 4948 + delay = 75; 4949 + snd_hda_codec_write(codec, 0x21, 0, 4950 + AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT); 4951 + msleep(delay); 4952 + snd_hda_codec_write(codec, 0x21, 0, 4953 + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE); 4954 + msleep(delay); 4955 + } 4956 + 4957 static const struct coef_fw alc225_pre_hsmode[] = { 4958 UPDATE_COEF(0x4a, 1<<8, 0), 4959 UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), ··· 5031 case 0x10ec0236: 5032 case 0x10ec0256: 5033 case 0x19e58326: 5034 + alc_hp_mute_disable(codec, 75); 5035 alc_process_coef_fw(codec, coef0256); 5036 break; 5037 case 0x10ec0234: ··· 5065 case 0x10ec0295: 5066 case 0x10ec0289: 5067 case 0x10ec0299: 5068 + alc_hp_mute_disable(codec, 75); 5069 alc_process_coef_fw(codec, alc225_pre_hsmode); 5070 alc_process_coef_fw(codec, coef0225); 5071 break; ··· 5290 case 0x10ec0299: 5291 alc_process_coef_fw(codec, alc225_pre_hsmode); 5292 alc_process_coef_fw(codec, coef0225); 5293 + alc_hp_enable_unmute(codec, 75); 5294 break; 5295 case 0x10ec0255: 5296 alc_process_coef_fw(codec, coef0255); ··· 5302 alc_write_coef_idx(codec, 0x45, 0xc089); 5303 msleep(50); 5304 alc_process_coef_fw(codec, coef0256); 5305 + alc_hp_enable_unmute(codec, 75); 5306 break; 5307 case 0x10ec0234: 5308 case 0x10ec0274: ··· 5399 case 0x10ec0256: 5400 case 0x19e58326: 5401 alc_process_coef_fw(codec, coef0256); 5402 + alc_hp_enable_unmute(codec, 75); 5403 break; 5404 case 0x10ec0234: 5405 case 0x10ec0274: ··· 5447 alc_process_coef_fw(codec, coef0225_2); 5448 else 5449 alc_process_coef_fw(codec, coef0225_1); 5450 + alc_hp_enable_unmute(codec, 75); 5451 break; 5452 case 0x10ec0867: 5453 alc_update_coefex_idx(codec, 0x57, 0x5, 1<<14, 0); ··· 5514 case 0x10ec0256: 5515 case 0x19e58326: 5516 alc_process_coef_fw(codec, coef0256); 5517 + alc_hp_enable_unmute(codec, 75); 5518 break; 5519 case 0x10ec0234: 5520 case 0x10ec0274: ··· 5551 case 0x10ec0289: 5552 case 0x10ec0299: 5553 alc_process_coef_fw(codec, coef0225); 5554 + alc_hp_enable_unmute(codec, 75); 5555 break; 5556 } 5557 codec_dbg(codec, "Headset jack set to Nokia-style headset mode.\n"); ··· 5619 alc_write_coef_idx(codec, 0x06, 0x6104); 5620 alc_write_coefex_idx(codec, 0x57, 0x3, 0x09a3); 5621 5622 alc_process_coef_fw(codec, coef0255); 5623 msleep(300); 5624 val = alc_read_coef_idx(codec, 0x46); 5625 is_ctia = (val & 0x0070) == 0x0070; 5626 + if (!is_ctia) { 5627 + alc_write_coef_idx(codec, 0x45, 0xe089); 5628 + msleep(100); 5629 + val = alc_read_coef_idx(codec, 0x46); 5630 + if ((val & 0x0070) == 0x0070) 5631 + is_ctia = false; 5632 + else 5633 + is_ctia = true; 5634 + } 5635 alc_write_coefex_idx(codec, 0x57, 0x3, 0x0da3); 5636 alc_update_coefex_idx(codec, 0x57, 0x5, 1<<14, 0); 5637 break; 5638 case 0x10ec0234: 5639 case 0x10ec0274: ··· 5714 case 0x10ec0295: 5715 case 0x10ec0289: 5716 case 0x10ec0299: 5717 alc_process_coef_fw(codec, alc225_pre_hsmode); 5718 alc_update_coef_idx(codec, 0x67, 0xf000, 0x1000); 5719 val = alc_read_coef_idx(codec, 0x45); ··· 5736 val = alc_read_coef_idx(codec, 0x46); 5737 is_ctia = (val & 0x00f0) == 0x00f0; 5738 } 5739 + if (!is_ctia) { 5740 + alc_update_coef_idx(codec, 0x45, 0x3f<<10, 0x38<<10); 5741 + alc_update_coef_idx(codec, 0x49, 3<<8, 1<<8); 5742 + msleep(100); 5743 + val = alc_read_coef_idx(codec, 0x46); 5744 + if ((val & 0x00f0) == 0x00f0) 5745 + is_ctia = false; 5746 + else 5747 + is_ctia = true; 5748 + } 5749 alc_update_coef_idx(codec, 0x4a, 7<<6, 7<<6); 5750 alc_update_coef_idx(codec, 0x4a, 3<<4, 3<<4); 5751 alc_update_coef_idx(codec, 0x67, 0xf000, 0x3000); 5752 break; 5753 case 0x10ec0867: 5754 is_ctia = true; ··· 10315 SND_PCI_QUIRK(0x103c, 0x8c15, "HP Spectre x360 2-in-1 Laptop 14-eu0xxx", ALC245_FIXUP_HP_SPECTRE_X360_EU0XXX), 10316 SND_PCI_QUIRK(0x103c, 0x8c16, "HP Spectre 16", ALC287_FIXUP_CS35L41_I2C_2), 10317 SND_PCI_QUIRK(0x103c, 0x8c17, "HP Spectre 16", ALC287_FIXUP_CS35L41_I2C_2), 10318 + SND_PCI_QUIRK(0x103c, 0x8c21, "HP Pavilion Plus Laptop 14-ey0XXX", ALC245_FIXUP_HP_X360_MUTE_LEDS), 10319 SND_PCI_QUIRK(0x103c, 0x8c46, "HP EliteBook 830 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10320 SND_PCI_QUIRK(0x103c, 0x8c47, "HP EliteBook 840 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10321 SND_PCI_QUIRK(0x103c, 0x8c48, "HP EliteBook 860 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), ··· 10353 SND_PCI_QUIRK(0x103c, 0x8ca2, "HP ZBook Power", ALC236_FIXUP_HP_GPIO_LED), 10354 SND_PCI_QUIRK(0x103c, 0x8ca4, "HP ZBook Fury", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10355 SND_PCI_QUIRK(0x103c, 0x8ca7, "HP ZBook Fury", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10356 + SND_PCI_QUIRK(0x103c, 0x8cbd, "HP Pavilion Aero Laptop 13-bg0xxx", ALC245_FIXUP_HP_X360_MUTE_LEDS), 10357 SND_PCI_QUIRK(0x103c, 0x8cdd, "HP Spectre", ALC287_FIXUP_CS35L41_I2C_2), 10358 SND_PCI_QUIRK(0x103c, 0x8cde, "HP Spectre", ALC287_FIXUP_CS35L41_I2C_2), 10359 SND_PCI_QUIRK(0x103c, 0x8cdf, "HP SnowWhite", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED), ··· 10513 SND_PCI_QUIRK(0x144d, 0xca03, "Samsung Galaxy Book2 Pro 360 (NP930QED)", ALC298_FIXUP_SAMSUNG_AMP), 10514 SND_PCI_QUIRK(0x144d, 0xc868, "Samsung Galaxy Book2 Pro (NP930XED)", ALC298_FIXUP_SAMSUNG_AMP), 10515 SND_PCI_QUIRK(0x144d, 0xc1ca, "Samsung Galaxy Book3 Pro 360 (NP960QFG-KB1US)", ALC298_FIXUP_SAMSUNG_AMP2), 10516 + SND_PCI_QUIRK(0x144d, 0xc1cc, "Samsung Galaxy Book3 Ultra (NT960XFH-XD92G))", ALC298_FIXUP_SAMSUNG_AMP2), 10517 SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC), 10518 SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC), 10519 SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC),
+2
sound/soc/amd/acp/acp-legacy-mach.c
··· 227 }, 228 { } 229 }; 230 static struct platform_driver acp_asoc_audio = { 231 .driver = { 232 .pm = &snd_soc_pm_ops,
··· 227 }, 228 { } 229 }; 230 + MODULE_DEVICE_TABLE(platform, board_ids); 231 + 232 static struct platform_driver acp_asoc_audio = { 233 .driver = { 234 .pm = &snd_soc_pm_ops,
+2
sound/soc/amd/acp/acp-sof-mach.c
··· 158 }, 159 { } 160 }; 161 static struct platform_driver acp_asoc_audio = { 162 .driver = { 163 .name = "sof_mach",
··· 158 }, 159 { } 160 }; 161 + MODULE_DEVICE_TABLE(platform, board_ids); 162 + 163 static struct platform_driver acp_asoc_audio = { 164 .driver = { 165 .name = "sof_mach",
+1
sound/soc/au1x/db1200.c
··· 44 }, 45 {}, 46 }; 47 48 /*------------------------- AC97 PART ---------------------------*/ 49
··· 44 }, 45 {}, 46 }; 47 + MODULE_DEVICE_TABLE(platform, db1200_pids); 48 49 /*------------------------- AC97 PART ---------------------------*/ 50
+9
sound/soc/codecs/cs-amp-lib-test.c
··· 38 { 39 struct cs_amp_lib_test_priv *priv = test->priv; 40 unsigned int blob_size; 41 42 blob_size = offsetof(struct cirrus_amp_efi_data, data) + 43 sizeof(struct cirrus_amp_cal_data) * num_amps; ··· 50 priv->cal_blob->count = num_amps; 51 52 get_random_bytes(priv->cal_blob->data, sizeof(struct cirrus_amp_cal_data) * num_amps); 53 } 54 55 static u64 cs_amp_lib_test_get_target_uid(struct kunit *test)
··· 38 { 39 struct cs_amp_lib_test_priv *priv = test->priv; 40 unsigned int blob_size; 41 + int i; 42 43 blob_size = offsetof(struct cirrus_amp_efi_data, data) + 44 sizeof(struct cirrus_amp_cal_data) * num_amps; ··· 49 priv->cal_blob->count = num_amps; 50 51 get_random_bytes(priv->cal_blob->data, sizeof(struct cirrus_amp_cal_data) * num_amps); 52 + 53 + /* Ensure all timestamps are non-zero to mark the entry valid. */ 54 + for (i = 0; i < num_amps; i++) 55 + priv->cal_blob->data[i].calTime[0] |= 1; 56 + 57 + /* Ensure that all UIDs are non-zero and unique. */ 58 + for (i = 0; i < num_amps; i++) 59 + *(u8 *)&priv->cal_blob->data[i].calTarget[0] = i + 1; 60 } 61 62 static u64 cs_amp_lib_test_get_target_uid(struct kunit *test)
+6 -1
sound/soc/codecs/cs-amp-lib.c
··· 182 for (i = 0; i < efi_data->count; ++i) { 183 u64 cal_target = cs_amp_cal_target_u64(&efi_data->data[i]); 184 185 /* Skip entries with unpopulated silicon ID */ 186 if (cal_target == 0) 187 continue; ··· 197 } 198 } 199 200 - if (!cal && (amp_index >= 0) && (amp_index < efi_data->count)) { 201 u64 cal_target = cs_amp_cal_target_u64(&efi_data->data[amp_index]); 202 203 /*
··· 182 for (i = 0; i < efi_data->count; ++i) { 183 u64 cal_target = cs_amp_cal_target_u64(&efi_data->data[i]); 184 185 + /* Skip empty entries */ 186 + if (!efi_data->data[i].calTime[0] && !efi_data->data[i].calTime[1]) 187 + continue; 188 + 189 /* Skip entries with unpopulated silicon ID */ 190 if (cal_target == 0) 191 continue; ··· 193 } 194 } 195 196 + if (!cal && (amp_index >= 0) && (amp_index < efi_data->count) && 197 + (efi_data->data[amp_index].calTime[0] || efi_data->data[amp_index].calTime[1])) { 198 u64 cal_target = cs_amp_cal_target_u64(&efi_data->data[amp_index]); 199 200 /*
+6
sound/soc/codecs/lpass-macro-common.h
··· 49 static inline const char *lpass_macro_get_codec_version_string(int version) 50 { 51 switch (version) { 52 case LPASS_CODEC_VERSION_2_0: 53 return "v2.0"; 54 case LPASS_CODEC_VERSION_2_1:
··· 49 static inline const char *lpass_macro_get_codec_version_string(int version) 50 { 51 switch (version) { 52 + case LPASS_CODEC_VERSION_1_0: 53 + return "v1.0"; 54 + case LPASS_CODEC_VERSION_1_1: 55 + return "v1.1"; 56 + case LPASS_CODEC_VERSION_1_2: 57 + return "v1.2"; 58 case LPASS_CODEC_VERSION_2_0: 59 return "v2.0"; 60 case LPASS_CODEC_VERSION_2_1:
+4
sound/soc/codecs/lpass-va-macro.c
··· 1485 if ((core_id_0 == 0x02) && (core_id_1 == 0x0F) && (core_id_2 == 0x80 || core_id_2 == 0x81)) 1486 version = LPASS_CODEC_VERSION_2_8; 1487 1488 lpass_macro_set_codec_version(version); 1489 1490 dev_dbg(va->dev, "LPASS Codec Version %s\n", lpass_macro_get_codec_version_string(version));
··· 1485 if ((core_id_0 == 0x02) && (core_id_1 == 0x0F) && (core_id_2 == 0x80 || core_id_2 == 0x81)) 1486 version = LPASS_CODEC_VERSION_2_8; 1487 1488 + if (version == LPASS_CODEC_VERSION_UNKNOWN) 1489 + dev_warn(va->dev, "Unknown Codec version, ID: %02x / %02x / %02x\n", 1490 + core_id_0, core_id_1, core_id_2); 1491 + 1492 lpass_macro_set_codec_version(version); 1493 1494 dev_dbg(va->dev, "LPASS Codec Version %s\n", lpass_macro_get_codec_version_string(version));
+2 -3
sound/soc/codecs/wcd937x.c
··· 242 243 static void wcd937x_reset(struct wcd937x_priv *wcd937x) 244 { 245 - usleep_range(20, 30); 246 - 247 gpiod_set_value(wcd937x->reset_gpio, 1); 248 - 249 usleep_range(20, 30); 250 } 251
··· 242 243 static void wcd937x_reset(struct wcd937x_priv *wcd937x) 244 { 245 gpiod_set_value(wcd937x->reset_gpio, 1); 246 + usleep_range(20, 30); 247 + gpiod_set_value(wcd937x->reset_gpio, 0); 248 usleep_range(20, 30); 249 } 250
+1
sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
··· 2748 case AFE_ASRC12_NEW_CON9: 2749 case AFE_LRCK_CNT: 2750 case AFE_DAC_MON0: 2751 case AFE_DL2_CUR: 2752 case AFE_DL3_CUR: 2753 case AFE_DL6_CUR:
··· 2748 case AFE_ASRC12_NEW_CON9: 2749 case AFE_LRCK_CNT: 2750 case AFE_DAC_MON0: 2751 + case AFE_DAC_CON0: 2752 case AFE_DL2_CUR: 2753 case AFE_DL3_CUR: 2754 case AFE_DL6_CUR:
+4 -2
sound/soc/sof/amd/acp-dsp-offset.h
··· 76 #define DSP_SW_INTR_CNTL_OFFSET 0x0 77 #define DSP_SW_INTR_STAT_OFFSET 0x4 78 #define DSP_SW_INTR_TRIG_OFFSET 0x8 79 - #define ACP_ERROR_STATUS 0x18C4 80 #define ACP3X_AXI2DAGB_SEM_0 0x1880 81 #define ACP5X_AXI2DAGB_SEM_0 0x1884 82 #define ACP6X_AXI2DAGB_SEM_0 0x1874 83 84 /* ACP common registers to report errors related to I2S & SoundWire interfaces */ 85 - #define ACP_SW0_I2S_ERROR_REASON 0x18B4 86 #define ACP_SW1_I2S_ERROR_REASON 0x1A50 87 88 /* Registers from ACP_SHA block */
··· 76 #define DSP_SW_INTR_CNTL_OFFSET 0x0 77 #define DSP_SW_INTR_STAT_OFFSET 0x4 78 #define DSP_SW_INTR_TRIG_OFFSET 0x8 79 + #define ACP3X_ERROR_STATUS 0x18C4 80 + #define ACP6X_ERROR_STATUS 0x1A4C 81 #define ACP3X_AXI2DAGB_SEM_0 0x1880 82 #define ACP5X_AXI2DAGB_SEM_0 0x1884 83 #define ACP6X_AXI2DAGB_SEM_0 0x1874 84 85 /* ACP common registers to report errors related to I2S & SoundWire interfaces */ 86 + #define ACP3X_SW_I2S_ERROR_REASON 0x18C8 87 + #define ACP6X_SW0_I2S_ERROR_REASON 0x18B4 88 #define ACP_SW1_I2S_ERROR_REASON 0x1A50 89 90 /* Registers from ACP_SHA block */
+35 -17
sound/soc/sof/amd/acp.c
··· 92 unsigned int idx, unsigned int dscr_count) 93 { 94 struct snd_sof_dev *sdev = adata->dev; 95 unsigned int val, status; 96 int ret; 97 ··· 103 val & (1 << ch), ACP_REG_POLL_INTERVAL, 104 ACP_REG_POLL_TIMEOUT_US); 105 if (ret < 0) { 106 - status = snd_sof_dsp_read(sdev, ACP_DSP_BAR, ACP_ERROR_STATUS); 107 val = snd_sof_dsp_read(sdev, ACP_DSP_BAR, ACP_DMA_ERR_STS_0 + ch * sizeof(u32)); 108 109 dev_err(sdev->dev, "ACP_DMA_ERR_STS :0x%x ACP_ERROR_STATUS :0x%x\n", val, status); ··· 264 snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_STRT_ADDR, start_addr); 265 snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_DESTINATION_ADDR, dest_addr); 266 snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_MSG_LENGTH, image_length); 267 snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_CMD, ACP_SHA_RUN); 268 269 ret = snd_sof_dsp_read_poll_timeout(sdev, ACP_DSP_BAR, ACP_SHA_TRANSFER_BYTE_CNT, ··· 288 /* psp_send_cmd only required for renoir platform (rev - 3) */ 289 if (desc->rev == 3) { 290 ret = psp_send_cmd(adata, MBOX_ACP_SHA_DMA_COMMAND); 291 - if (ret) 292 - return ret; 293 - } 294 - 295 - /* psp_send_cmd only required for vangogh platform (rev - 5) */ 296 - if (desc->rev == 5 && !(adata->quirks && adata->quirks->skip_iram_dram_size_mod)) { 297 - /* Modify IRAM and DRAM size */ 298 - ret = psp_send_cmd(adata, MBOX_ACP_IRAM_DRAM_FENCE_COMMAND | IRAM_DRAM_FENCE_2); 299 - if (ret) 300 - return ret; 301 - ret = psp_send_cmd(adata, MBOX_ACP_IRAM_DRAM_FENCE_COMMAND | MBOX_ISREADY_FLAG); 302 if (ret) 303 return ret; 304 } ··· 403 404 if (val & ACP_ERROR_IRQ_MASK) { 405 snd_sof_dsp_write(sdev, ACP_DSP_BAR, desc->ext_intr_stat, ACP_ERROR_IRQ_MASK); 406 - snd_sof_dsp_write(sdev, ACP_DSP_BAR, base + ACP_SW0_I2S_ERROR_REASON, 0); 407 - snd_sof_dsp_write(sdev, ACP_DSP_BAR, base + ACP_SW1_I2S_ERROR_REASON, 0); 408 - snd_sof_dsp_write(sdev, ACP_DSP_BAR, base + ACP_ERROR_STATUS, 0); 409 irq_flag = 1; 410 } 411 ··· 433 const struct sof_amd_acp_desc *desc = get_chip_info(sdev->pdata); 434 unsigned int base = desc->pgfsm_base; 435 unsigned int val; 436 int ret; 437 438 val = snd_sof_dsp_read(sdev, ACP_DSP_BAR, base + PGFSM_STATUS_OFFSET); ··· 441 if (val == ACP_POWERED_ON) 442 return 0; 443 444 - if (val & ACP_PGFSM_STATUS_MASK) 445 snd_sof_dsp_write(sdev, ACP_DSP_BAR, base + PGFSM_CONTROL_OFFSET, 446 - ACP_PGFSM_CNTL_POWER_ON_MASK); 447 448 ret = snd_sof_dsp_read_poll_timeout(sdev, ACP_DSP_BAR, base + PGFSM_STATUS_OFFSET, val, 449 !val, ACP_REG_POLL_INTERVAL, ACP_REG_POLL_TIMEOUT_US);
··· 92 unsigned int idx, unsigned int dscr_count) 93 { 94 struct snd_sof_dev *sdev = adata->dev; 95 + const struct sof_amd_acp_desc *desc = get_chip_info(sdev->pdata); 96 unsigned int val, status; 97 int ret; 98 ··· 102 val & (1 << ch), ACP_REG_POLL_INTERVAL, 103 ACP_REG_POLL_TIMEOUT_US); 104 if (ret < 0) { 105 + status = snd_sof_dsp_read(sdev, ACP_DSP_BAR, desc->acp_error_stat); 106 val = snd_sof_dsp_read(sdev, ACP_DSP_BAR, ACP_DMA_ERR_STS_0 + ch * sizeof(u32)); 107 108 dev_err(sdev->dev, "ACP_DMA_ERR_STS :0x%x ACP_ERROR_STATUS :0x%x\n", val, status); ··· 263 snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_STRT_ADDR, start_addr); 264 snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_DESTINATION_ADDR, dest_addr); 265 snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_MSG_LENGTH, image_length); 266 + 267 + /* psp_send_cmd only required for vangogh platform (rev - 5) */ 268 + if (desc->rev == 5 && !(adata->quirks && adata->quirks->skip_iram_dram_size_mod)) { 269 + /* Modify IRAM and DRAM size */ 270 + ret = psp_send_cmd(adata, MBOX_ACP_IRAM_DRAM_FENCE_COMMAND | IRAM_DRAM_FENCE_2); 271 + if (ret) 272 + return ret; 273 + ret = psp_send_cmd(adata, MBOX_ACP_IRAM_DRAM_FENCE_COMMAND | MBOX_ISREADY_FLAG); 274 + if (ret) 275 + return ret; 276 + } 277 snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_CMD, ACP_SHA_RUN); 278 279 ret = snd_sof_dsp_read_poll_timeout(sdev, ACP_DSP_BAR, ACP_SHA_TRANSFER_BYTE_CNT, ··· 276 /* psp_send_cmd only required for renoir platform (rev - 3) */ 277 if (desc->rev == 3) { 278 ret = psp_send_cmd(adata, MBOX_ACP_SHA_DMA_COMMAND); 279 if (ret) 280 return ret; 281 } ··· 402 403 if (val & ACP_ERROR_IRQ_MASK) { 404 snd_sof_dsp_write(sdev, ACP_DSP_BAR, desc->ext_intr_stat, ACP_ERROR_IRQ_MASK); 405 + snd_sof_dsp_write(sdev, ACP_DSP_BAR, desc->acp_sw0_i2s_err_reason, 0); 406 + /* ACP_SW1_I2S_ERROR_REASON is newly added register from rmb platform onwards */ 407 + if (desc->rev >= 6) 408 + snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SW1_I2S_ERROR_REASON, 0); 409 + snd_sof_dsp_write(sdev, ACP_DSP_BAR, desc->acp_error_stat, 0); 410 irq_flag = 1; 411 } 412 ··· 430 const struct sof_amd_acp_desc *desc = get_chip_info(sdev->pdata); 431 unsigned int base = desc->pgfsm_base; 432 unsigned int val; 433 + unsigned int acp_pgfsm_status_mask, acp_pgfsm_cntl_mask; 434 int ret; 435 436 val = snd_sof_dsp_read(sdev, ACP_DSP_BAR, base + PGFSM_STATUS_OFFSET); ··· 437 if (val == ACP_POWERED_ON) 438 return 0; 439 440 + switch (desc->rev) { 441 + case 3: 442 + case 5: 443 + acp_pgfsm_status_mask = ACP3X_PGFSM_STATUS_MASK; 444 + acp_pgfsm_cntl_mask = ACP3X_PGFSM_CNTL_POWER_ON_MASK; 445 + break; 446 + case 6: 447 + acp_pgfsm_status_mask = ACP6X_PGFSM_STATUS_MASK; 448 + acp_pgfsm_cntl_mask = ACP6X_PGFSM_CNTL_POWER_ON_MASK; 449 + break; 450 + default: 451 + return -EINVAL; 452 + } 453 + 454 + if (val & acp_pgfsm_status_mask) 455 snd_sof_dsp_write(sdev, ACP_DSP_BAR, base + PGFSM_CONTROL_OFFSET, 456 + acp_pgfsm_cntl_mask); 457 458 ret = snd_sof_dsp_read_poll_timeout(sdev, ACP_DSP_BAR, base + PGFSM_STATUS_OFFSET, val, 459 !val, ACP_REG_POLL_INTERVAL, ACP_REG_POLL_TIMEOUT_US);
+7 -2
sound/soc/sof/amd/acp.h
··· 25 #define ACP_REG_POLL_TIMEOUT_US 2000 26 #define ACP_DMA_COMPLETE_TIMEOUT_US 5000 27 28 - #define ACP_PGFSM_CNTL_POWER_ON_MASK 0x01 29 - #define ACP_PGFSM_STATUS_MASK 0x03 30 #define ACP_POWERED_ON 0x00 31 #define ACP_ASSERT_RESET 0x01 32 #define ACP_RELEASE_RESET 0x00 ··· 206 u32 probe_reg_offset; 207 u32 reg_start_addr; 208 u32 reg_end_addr; 209 u32 sdw_max_link_count; 210 u64 sdw_acpi_dev_addr; 211 };
··· 25 #define ACP_REG_POLL_TIMEOUT_US 2000 26 #define ACP_DMA_COMPLETE_TIMEOUT_US 5000 27 28 + #define ACP3X_PGFSM_CNTL_POWER_ON_MASK 0x01 29 + #define ACP3X_PGFSM_STATUS_MASK 0x03 30 + #define ACP6X_PGFSM_CNTL_POWER_ON_MASK 0x07 31 + #define ACP6X_PGFSM_STATUS_MASK 0x0F 32 + 33 #define ACP_POWERED_ON 0x00 34 #define ACP_ASSERT_RESET 0x01 35 #define ACP_RELEASE_RESET 0x00 ··· 203 u32 probe_reg_offset; 204 u32 reg_start_addr; 205 u32 reg_end_addr; 206 + u32 acp_error_stat; 207 + u32 acp_sw0_i2s_err_reason; 208 u32 sdw_max_link_count; 209 u64 sdw_acpi_dev_addr; 210 };
+2
sound/soc/sof/amd/pci-acp63.c
··· 35 .ext_intr_cntl = ACP6X_EXTERNAL_INTR_CNTL, 36 .ext_intr_stat = ACP6X_EXT_INTR_STAT, 37 .ext_intr_stat1 = ACP6X_EXT_INTR_STAT1, 38 .dsp_intr_base = ACP6X_DSP_SW_INTR_BASE, 39 .sram_pte_offset = ACP6X_SRAM_PTE_OFFSET, 40 .hw_semaphore_offset = ACP6X_AXI2DAGB_SEM_0,
··· 35 .ext_intr_cntl = ACP6X_EXTERNAL_INTR_CNTL, 36 .ext_intr_stat = ACP6X_EXT_INTR_STAT, 37 .ext_intr_stat1 = ACP6X_EXT_INTR_STAT1, 38 + .acp_error_stat = ACP6X_ERROR_STATUS, 39 + .acp_sw0_i2s_err_reason = ACP6X_SW0_I2S_ERROR_REASON, 40 .dsp_intr_base = ACP6X_DSP_SW_INTR_BASE, 41 .sram_pte_offset = ACP6X_SRAM_PTE_OFFSET, 42 .hw_semaphore_offset = ACP6X_AXI2DAGB_SEM_0,
+2
sound/soc/sof/amd/pci-rmb.c
··· 33 .pgfsm_base = ACP6X_PGFSM_BASE, 34 .ext_intr_stat = ACP6X_EXT_INTR_STAT, 35 .dsp_intr_base = ACP6X_DSP_SW_INTR_BASE, 36 .sram_pte_offset = ACP6X_SRAM_PTE_OFFSET, 37 .hw_semaphore_offset = ACP6X_AXI2DAGB_SEM_0, 38 .fusion_dsp_offset = ACP6X_DSP_FUSION_RUNSTALL,
··· 33 .pgfsm_base = ACP6X_PGFSM_BASE, 34 .ext_intr_stat = ACP6X_EXT_INTR_STAT, 35 .dsp_intr_base = ACP6X_DSP_SW_INTR_BASE, 36 + .acp_error_stat = ACP6X_ERROR_STATUS, 37 + .acp_sw0_i2s_err_reason = ACP6X_SW0_I2S_ERROR_REASON, 38 .sram_pte_offset = ACP6X_SRAM_PTE_OFFSET, 39 .hw_semaphore_offset = ACP6X_AXI2DAGB_SEM_0, 40 .fusion_dsp_offset = ACP6X_DSP_FUSION_RUNSTALL,
+2
sound/soc/sof/amd/pci-rn.c
··· 33 .pgfsm_base = ACP3X_PGFSM_BASE, 34 .ext_intr_stat = ACP3X_EXT_INTR_STAT, 35 .dsp_intr_base = ACP3X_DSP_SW_INTR_BASE, 36 .sram_pte_offset = ACP3X_SRAM_PTE_OFFSET, 37 .hw_semaphore_offset = ACP3X_AXI2DAGB_SEM_0, 38 .acp_clkmux_sel = ACP3X_CLKMUX_SEL,
··· 33 .pgfsm_base = ACP3X_PGFSM_BASE, 34 .ext_intr_stat = ACP3X_EXT_INTR_STAT, 35 .dsp_intr_base = ACP3X_DSP_SW_INTR_BASE, 36 + .acp_error_stat = ACP3X_ERROR_STATUS, 37 + .acp_sw0_i2s_err_reason = ACP3X_SW_I2S_ERROR_REASON, 38 .sram_pte_offset = ACP3X_SRAM_PTE_OFFSET, 39 .hw_semaphore_offset = ACP3X_AXI2DAGB_SEM_0, 40 .acp_clkmux_sel = ACP3X_CLKMUX_SEL,
+3
sound/soc/sof/mediatek/mt8195/mt8195.c
··· 575 .compatible = "google,tomato", 576 .sof_tplg_filename = "sof-mt8195-mt6359-rt1019-rt5682.tplg" 577 }, { 578 .compatible = "mediatek,mt8195", 579 .sof_tplg_filename = "sof-mt8195.tplg" 580 }, {
··· 575 .compatible = "google,tomato", 576 .sof_tplg_filename = "sof-mt8195-mt6359-rt1019-rt5682.tplg" 577 }, { 578 + .compatible = "google,dojo", 579 + .sof_tplg_filename = "sof-mt8195-mt6359-max98390-rt5682.tplg" 580 + }, { 581 .compatible = "mediatek,mt8195", 582 .sof_tplg_filename = "sof-mt8195.tplg" 583 }, {