mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-12-31 00:09:47 +00:00
sound fixes for 6.4-rc6
Lots of small fixes, and almost all are device-specific. A few of them are the fixes for the old regressions by the fast kctl lookups (introduced around 5.19). Others are ASoC simple-card fixes, selftest compile warning fixes, ASoC AMD quirks, various ASoC codec fixes as well as usual HD-audio quirks. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAmSCzssOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE9Xsw//Uw6S7GTEGSLGUGI1AkUB8iFql7/eyNg9jt0N LCwHF0mST5GZ6t2BHHNchEW0xOU4QvwqKy/qw5Wcswnfv+zaqT8kOk3MwTWK775m xCvt+TMXj16Raz/zm7fmfQqOgbnLXUEjssbekIPGJVt2NW+bGq5qlxsMZUC0lMwo Dfc/kobOGjqwoYeOCzWG5NaRYqIeYIx9/RY0SOFilEmh+QpU8GXWbCKnWkMWaYCj 7Ey9jjEOct9Je8G4v4vtbPSpBdkNO2lgfsMC1mgVE2PspukN9oq6E8yaqrBVDg2d Pf2sqESYilfku71aKL1DpKNl/PNACZ+GWFYwnMAO84JSPy1QdtVh3Roq5CwetXvD WnentI7jSFblRduxr00ZPypLCBIgOnTYBizwx0HeI303cYHU1r1pP+9tuKlE/3lk yx/PJE8crCzcb1rzdSw4ABkBQXgYuZ04DwseSMejC1JC+u8JLA6VkY9LXeByj/5G MnT8cJaQQ6DzgfMK+wtLNqorlbBz1btKbgwPjg9sfOxGbp5Y11VNipyDMfE1vvyV bGgeDbMppUAQxJssIozOU7gsF61FFbua9vTtr1ikEuH/Wywg3SIQboIn2i3n0tzq pPzEc19BR3i7ZXVlRujnmRqImlW7JJ0QvYIaFh+V+BYYu+L74l+9WSnTnP9XuiEy gbwXcnA= =XwtQ -----END PGP SIGNATURE----- Merge tag 'sound-6.4-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "Lots of small fixes, and almost all are device-specific. A few of them are the fixes for the old regressions by the fast kctl lookups (introduced around 5.19). Others are ASoC simple-card fixes, selftest compile warning fixes, ASoC AMD quirks, various ASoC codec fixes as well as usual HD-audio quirks" * tag 'sound-6.4-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (26 commits) ALSA: hda/realtek: Enable 4 amplifiers instead of 2 on a HP platform ALSA: hda: Fix kctl->id initialization ALSA: gus: Fix kctl->id initialization ALSA: cmipci: Fix kctl->id initialization ALSA: ymfpci: Fix kctl->id initialization ALSA: ice1712,ice1724: fix the kcontrol->id initialization ALSA: hda/realtek: Add quirk for Clevo NS50AU ALSA: hda/realtek: Add quirks for Asus ROG 2024 laptops using CS35L41 ALSA: hda/realtek: Add "Intel Reference board" and "NUC 13" SSID in the ALC256 ALSA: hda/realtek: Add Lenovo P3 Tower platform ALSA: hda/realtek: Add a quirk for HP Slim Desktop S01 selftests: alsa: pcm-test: Fix compiler warnings about the format ASoC: fsl_sai: Enable BCI bit if SAI works on synchronous mode with BYP asserted ASoC: simple-card-utils: fix PCM constraint error check ASoC: cs35l56: Remove NULL check from cs35l56_sdw_dai_set_stream() ASoC: max98363: limit the number of channel to 1 ASoC: max98363: Removed 32bit support ASoC: mediatek: mt8195: fix use-after-free in driver remove path ASoC: mediatek: mt8188: fix use-after-free in driver remove path ASoC: amd: yc: Add Thinkpad Neo14 to quirks list for acp6x ...
This commit is contained in:
commit
697fa9b586
@ -892,10 +892,10 @@ int snd_gf1_pcm_new(struct snd_gus_card *gus, int pcm_dev, int control_index)
|
||||
kctl = snd_ctl_new1(&snd_gf1_pcm_volume_control1, gus);
|
||||
else
|
||||
kctl = snd_ctl_new1(&snd_gf1_pcm_volume_control, gus);
|
||||
kctl->id.index = control_index;
|
||||
err = snd_ctl_add(card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl->id.index = control_index;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2688,20 +2688,20 @@ static int snd_cmipci_mixer_new(struct cmipci *cm, int pcm_spdif_device)
|
||||
}
|
||||
if (cm->can_ac3_hw) {
|
||||
kctl = snd_ctl_new1(&snd_cmipci_spdif_default, cm);
|
||||
kctl->id.device = pcm_spdif_device;
|
||||
err = snd_ctl_add(card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl->id.device = pcm_spdif_device;
|
||||
kctl = snd_ctl_new1(&snd_cmipci_spdif_mask, cm);
|
||||
kctl->id.device = pcm_spdif_device;
|
||||
err = snd_ctl_add(card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl->id.device = pcm_spdif_device;
|
||||
kctl = snd_ctl_new1(&snd_cmipci_spdif_stream, cm);
|
||||
kctl->id.device = pcm_spdif_device;
|
||||
err = snd_ctl_add(card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl->id.device = pcm_spdif_device;
|
||||
}
|
||||
if (cm->chip_version <= 37) {
|
||||
sw = snd_cmipci_old_mixer_switches;
|
||||
|
||||
@ -2458,10 +2458,14 @@ int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
|
||||
type == HDA_PCM_TYPE_HDMI) {
|
||||
/* suppose a single SPDIF device */
|
||||
for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
|
||||
struct snd_ctl_elem_id id;
|
||||
|
||||
kctl = find_mixer_ctl(codec, dig_mix->name, 0, 0);
|
||||
if (!kctl)
|
||||
break;
|
||||
kctl->id.index = spdif_index;
|
||||
id = kctl->id;
|
||||
id.index = spdif_index;
|
||||
snd_ctl_rename_id(codec->card, &kctl->id, &id);
|
||||
}
|
||||
bus->primary_dig_out_type = HDA_PCM_TYPE_HDMI;
|
||||
}
|
||||
|
||||
@ -9500,7 +9500,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x8b8a, "HP", ALC236_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b8b, "HP", ALC236_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b8d, "HP", ALC236_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b8f, "HP", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b8f, "HP", ALC245_FIXUP_CS35L41_SPI_4_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b92, "HP", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b96, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b97, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
|
||||
@ -9547,6 +9547,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1043, 0x1a8f, "ASUS UX582ZS", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1b11, "ASUS UX431DA", ALC294_FIXUP_ASUS_COEF_1B),
|
||||
SND_PCI_QUIRK(0x1043, 0x1b13, "Asus U41SV", ALC269_FIXUP_INV_DMIC),
|
||||
SND_PCI_QUIRK(0x1043, 0x1b93, "ASUS G614JVR/JIR", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1bbd, "ASUS Z550MA", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1043, 0x1c23, "Asus X55U", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
SND_PCI_QUIRK(0x1043, 0x1c62, "ASUS GU603", ALC289_FIXUP_ASUS_GA401),
|
||||
@ -9565,6 +9566,11 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1043, 0x1f12, "ASUS UM5302", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1f92, "ASUS ROG Flow X16", ALC289_FIXUP_ASUS_GA401),
|
||||
SND_PCI_QUIRK(0x1043, 0x3030, "ASUS ZN270IE", ALC256_FIXUP_ASUS_AIO_GPIO2),
|
||||
SND_PCI_QUIRK(0x1043, 0x3a20, "ASUS G614JZR", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x3a30, "ASUS G814JVR/JIR", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x3a40, "ASUS G814JZR", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x3a50, "ASUS G834JYR/JZR", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x3a60, "ASUS G634JYR/JZR", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),
|
||||
SND_PCI_QUIRK(0x1043, 0x834a, "ASUS S101", ALC269_FIXUP_STEREO_DMIC),
|
||||
SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),
|
||||
@ -9588,6 +9594,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x10ec, 0x124c, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
|
||||
SND_PCI_QUIRK(0x10ec, 0x1252, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
|
||||
SND_PCI_QUIRK(0x10ec, 0x1254, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
|
||||
SND_PCI_QUIRK(0x10ec, 0x12cc, "Intel Reference board", ALC225_FIXUP_HEADSET_JACK),
|
||||
SND_PCI_QUIRK(0x10f7, 0x8338, "Panasonic CF-SZ6", ALC269_FIXUP_HEADSET_MODE),
|
||||
SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
|
||||
SND_PCI_QUIRK(0x144d, 0xc169, "Samsung Notebook 9 Pen (NP930SBE-K01US)", ALC298_FIXUP_SAMSUNG_AMP),
|
||||
@ -9636,6 +9643,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1558, 0x5101, "Clevo S510WU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0x5157, "Clevo W517GU1", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0x51a1, "Clevo NS50MU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0x51b1, "Clevo NS50AU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0x5630, "Clevo NP50RNJS", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0x70a1, "Clevo NB70T[HJK]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0x70b3, "Clevo NK70SB", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
@ -9807,6 +9815,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC),
|
||||
SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED),
|
||||
SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10),
|
||||
SND_PCI_QUIRK(0x8086, 0x3038, "Intel NUC 13", ALC225_FIXUP_HEADSET_JACK),
|
||||
SND_PCI_QUIRK(0xf111, 0x0001, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
|
||||
|
||||
#if 0
|
||||
@ -11694,6 +11703,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x8719, "HP", ALC897_FIXUP_HP_HSMIC_VERB),
|
||||
SND_PCI_QUIRK(0x103c, 0x872b, "HP", ALC897_FIXUP_HP_HSMIC_VERB),
|
||||
SND_PCI_QUIRK(0x103c, 0x873e, "HP", ALC671_FIXUP_HP_HEADSET_MIC2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8768, "HP Slim Desktop S01", ALC671_FIXUP_HP_HEADSET_MIC2),
|
||||
SND_PCI_QUIRK(0x103c, 0x877e, "HP 288 Pro G6", ALC671_FIXUP_HP_HEADSET_MIC2),
|
||||
SND_PCI_QUIRK(0x103c, 0x885f, "HP 288 Pro G8", ALC671_FIXUP_HP_HEADSET_MIC2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1080, "Asus UX501VW", ALC668_FIXUP_HEADSET_MODE),
|
||||
@ -11715,6 +11725,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x14cd, 0x5003, "USI", ALC662_FIXUP_USI_HEADSET_MODE),
|
||||
SND_PCI_QUIRK(0x17aa, 0x1036, "Lenovo P520", ALC662_FIXUP_LENOVO_MULTI_CODECS),
|
||||
SND_PCI_QUIRK(0x17aa, 0x1057, "Lenovo P360", ALC897_FIXUP_HEADSET_MIC_PIN),
|
||||
SND_PCI_QUIRK(0x17aa, 0x1064, "Lenovo P3 Tower", ALC897_FIXUP_HEADSET_MIC_PIN),
|
||||
SND_PCI_QUIRK(0x17aa, 0x32ca, "Lenovo ThinkCentre M80", ALC897_FIXUP_HEADSET_MIC_PIN),
|
||||
SND_PCI_QUIRK(0x17aa, 0x32cb, "Lenovo ThinkCentre M70", ALC897_FIXUP_HEADSET_MIC_PIN),
|
||||
SND_PCI_QUIRK(0x17aa, 0x32cf, "Lenovo ThinkCentre M950", ALC897_FIXUP_HEADSET_MIC_PIN),
|
||||
|
||||
@ -1899,11 +1899,12 @@ static int aureon_add_controls(struct snd_ice1712 *ice)
|
||||
else {
|
||||
for (i = 0; i < ARRAY_SIZE(cs8415_controls); i++) {
|
||||
struct snd_kcontrol *kctl;
|
||||
err = snd_ctl_add(ice->card, (kctl = snd_ctl_new1(&cs8415_controls[i], ice)));
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl = snd_ctl_new1(&cs8415_controls[i], ice);
|
||||
if (i > 1)
|
||||
kctl->id.device = ice->pcm->device;
|
||||
err = snd_ctl_add(ice->card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2371,22 +2371,26 @@ int snd_ice1712_spdif_build_controls(struct snd_ice1712 *ice)
|
||||
|
||||
if (snd_BUG_ON(!ice->pcm_pro))
|
||||
return -EIO;
|
||||
err = snd_ctl_add(ice->card, kctl = snd_ctl_new1(&snd_ice1712_spdif_default, ice));
|
||||
kctl = snd_ctl_new1(&snd_ice1712_spdif_default, ice);
|
||||
kctl->id.device = ice->pcm_pro->device;
|
||||
err = snd_ctl_add(ice->card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl = snd_ctl_new1(&snd_ice1712_spdif_maskc, ice);
|
||||
kctl->id.device = ice->pcm_pro->device;
|
||||
err = snd_ctl_add(ice->card, kctl = snd_ctl_new1(&snd_ice1712_spdif_maskc, ice));
|
||||
err = snd_ctl_add(ice->card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl = snd_ctl_new1(&snd_ice1712_spdif_maskp, ice);
|
||||
kctl->id.device = ice->pcm_pro->device;
|
||||
err = snd_ctl_add(ice->card, kctl = snd_ctl_new1(&snd_ice1712_spdif_maskp, ice));
|
||||
err = snd_ctl_add(ice->card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl = snd_ctl_new1(&snd_ice1712_spdif_stream, ice);
|
||||
kctl->id.device = ice->pcm_pro->device;
|
||||
err = snd_ctl_add(ice->card, kctl = snd_ctl_new1(&snd_ice1712_spdif_stream, ice));
|
||||
err = snd_ctl_add(ice->card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl->id.device = ice->pcm_pro->device;
|
||||
ice->spdif.stream_ctl = kctl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2392,23 +2392,27 @@ static int snd_vt1724_spdif_build_controls(struct snd_ice1712 *ice)
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = snd_ctl_add(ice->card, kctl = snd_ctl_new1(&snd_vt1724_spdif_default, ice));
|
||||
kctl = snd_ctl_new1(&snd_vt1724_spdif_default, ice);
|
||||
kctl->id.device = ice->pcm->device;
|
||||
err = snd_ctl_add(ice->card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl = snd_ctl_new1(&snd_vt1724_spdif_maskc, ice);
|
||||
kctl->id.device = ice->pcm->device;
|
||||
err = snd_ctl_add(ice->card, kctl = snd_ctl_new1(&snd_vt1724_spdif_maskc, ice));
|
||||
err = snd_ctl_add(ice->card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl = snd_ctl_new1(&snd_vt1724_spdif_maskp, ice);
|
||||
kctl->id.device = ice->pcm->device;
|
||||
err = snd_ctl_add(ice->card, kctl = snd_ctl_new1(&snd_vt1724_spdif_maskp, ice));
|
||||
err = snd_ctl_add(ice->card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl->id.device = ice->pcm->device;
|
||||
#if 0 /* use default only */
|
||||
err = snd_ctl_add(ice->card, kctl = snd_ctl_new1(&snd_vt1724_spdif_stream, ice));
|
||||
kctl = snd_ctl_new1(&snd_vt1724_spdif_stream, ice);
|
||||
kctl->id.device = ice->pcm->device;
|
||||
err = snd_ctl_add(ice->card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl->id.device = ice->pcm->device;
|
||||
ice->spdif.stream_ctl = kctl;
|
||||
#endif
|
||||
return 0;
|
||||
|
||||
@ -1822,20 +1822,20 @@ int snd_ymfpci_mixer(struct snd_ymfpci *chip, int rear_switch)
|
||||
if (snd_BUG_ON(!chip->pcm_spdif))
|
||||
return -ENXIO;
|
||||
kctl = snd_ctl_new1(&snd_ymfpci_spdif_default, chip);
|
||||
kctl->id.device = chip->pcm_spdif->device;
|
||||
err = snd_ctl_add(chip->card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl->id.device = chip->pcm_spdif->device;
|
||||
kctl = snd_ctl_new1(&snd_ymfpci_spdif_mask, chip);
|
||||
kctl->id.device = chip->pcm_spdif->device;
|
||||
err = snd_ctl_add(chip->card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl->id.device = chip->pcm_spdif->device;
|
||||
kctl = snd_ctl_new1(&snd_ymfpci_spdif_stream, chip);
|
||||
kctl->id.device = chip->pcm_spdif->device;
|
||||
err = snd_ctl_add(chip->card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
kctl->id.device = chip->pcm_spdif->device;
|
||||
chip->spdif_pcm_ctl = kctl;
|
||||
|
||||
/* direct recording source */
|
||||
|
||||
@ -211,8 +211,7 @@ static int create_acp63_platform_devs(struct pci_dev *pci, struct acp63_dev_data
|
||||
case ACP63_PDM_DEV_MASK:
|
||||
adata->pdm_dev_index = 0;
|
||||
acp63_fill_platform_dev_info(&pdevinfo[0], parent, NULL, "acp_ps_pdm_dma",
|
||||
0, adata->res, 1, &adata->acp_lock,
|
||||
sizeof(adata->acp_lock));
|
||||
0, adata->res, 1, NULL, 0);
|
||||
acp63_fill_platform_dev_info(&pdevinfo[1], parent, NULL, "dmic-codec",
|
||||
0, NULL, 0, NULL, 0);
|
||||
acp63_fill_platform_dev_info(&pdevinfo[2], parent, NULL, "acp_ps_mach",
|
||||
|
||||
@ -361,12 +361,12 @@ static int acp63_pdm_audio_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct resource *res;
|
||||
struct pdm_dev_data *adata;
|
||||
struct acp63_dev_data *acp_data;
|
||||
struct device *parent;
|
||||
int status;
|
||||
|
||||
if (!pdev->dev.platform_data) {
|
||||
dev_err(&pdev->dev, "platform_data not retrieved\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
parent = pdev->dev.parent;
|
||||
acp_data = dev_get_drvdata(parent);
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
dev_err(&pdev->dev, "IORESOURCE_MEM FAILED\n");
|
||||
@ -382,7 +382,7 @@ static int acp63_pdm_audio_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
adata->capture_stream = NULL;
|
||||
adata->acp_lock = pdev->dev.platform_data;
|
||||
adata->acp_lock = &acp_data->acp_lock;
|
||||
dev_set_drvdata(&pdev->dev, adata);
|
||||
status = devm_snd_soc_register_component(&pdev->dev,
|
||||
&acp63_pdm_component,
|
||||
|
||||
@ -171,6 +171,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21CL"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21EF"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
|
||||
@ -704,9 +704,6 @@ static int cs35l56_sdw_dai_hw_free(struct snd_pcm_substream *substream,
|
||||
static int cs35l56_sdw_dai_set_stream(struct snd_soc_dai *dai,
|
||||
void *sdw_stream, int direction)
|
||||
{
|
||||
if (!sdw_stream)
|
||||
return 0;
|
||||
|
||||
snd_soc_dai_dma_data_set(dai, direction, sdw_stream);
|
||||
|
||||
return 0;
|
||||
|
||||
@ -211,7 +211,7 @@ static int max98363_io_init(struct sdw_slave *slave)
|
||||
}
|
||||
|
||||
#define MAX98363_RATES SNDRV_PCM_RATE_8000_192000
|
||||
#define MAX98363_FORMATS (SNDRV_PCM_FMTBIT_S32_LE)
|
||||
#define MAX98363_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE)
|
||||
|
||||
static int max98363_sdw_dai_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params,
|
||||
@ -246,7 +246,7 @@ static int max98363_sdw_dai_hw_params(struct snd_pcm_substream *substream,
|
||||
stream_config.frame_rate = params_rate(params);
|
||||
stream_config.bps = snd_pcm_format_width(params_format(params));
|
||||
stream_config.direction = direction;
|
||||
stream_config.ch_count = params_channels(params);
|
||||
stream_config.ch_count = 1;
|
||||
|
||||
if (stream_config.ch_count > runtime->hw.channels_max) {
|
||||
stream_config.ch_count = runtime->hw.channels_max;
|
||||
|
||||
@ -1903,6 +1903,30 @@ static const struct dmi_system_id nau8824_quirk_table[] = {
|
||||
},
|
||||
.driver_data = (void *)(NAU8824_MONO_SPEAKER),
|
||||
},
|
||||
{
|
||||
/* Positivo CW14Q01P */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Positivo Tecnologia SA"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "CW14Q01P"),
|
||||
},
|
||||
.driver_data = (void *)(NAU8824_JD_ACTIVE_HIGH),
|
||||
},
|
||||
{
|
||||
/* Positivo K1424G */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Positivo Tecnologia SA"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "K1424G"),
|
||||
},
|
||||
.driver_data = (void *)(NAU8824_JD_ACTIVE_HIGH),
|
||||
},
|
||||
{
|
||||
/* Positivo N14ZP74G */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Positivo Tecnologia SA"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "N14ZP74G"),
|
||||
},
|
||||
.driver_data = (void *)(NAU8824_JD_ACTIVE_HIGH),
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@ -1190,7 +1190,6 @@ static const struct regmap_config wcd938x_regmap_config = {
|
||||
.readable_reg = wcd938x_readable_register,
|
||||
.writeable_reg = wcd938x_writeable_register,
|
||||
.volatile_reg = wcd938x_volatile_register,
|
||||
.can_multi_write = true,
|
||||
};
|
||||
|
||||
static const struct sdw_slave_ops wcd9380_slave_ops = {
|
||||
|
||||
@ -645,7 +645,6 @@ static struct regmap_config wsa881x_regmap_config = {
|
||||
.readable_reg = wsa881x_readable_register,
|
||||
.reg_format_endian = REGMAP_ENDIAN_NATIVE,
|
||||
.val_format_endian = REGMAP_ENDIAN_NATIVE,
|
||||
.can_multi_write = true,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
||||
@ -946,7 +946,6 @@ static struct regmap_config wsa883x_regmap_config = {
|
||||
.writeable_reg = wsa883x_writeable_register,
|
||||
.reg_format_endian = REGMAP_ENDIAN_NATIVE,
|
||||
.val_format_endian = REGMAP_ENDIAN_NATIVE,
|
||||
.can_multi_write = true,
|
||||
.use_single_read = true,
|
||||
};
|
||||
|
||||
|
||||
@ -491,14 +491,21 @@ static int fsl_sai_set_bclk(struct snd_soc_dai *dai, bool tx, u32 freq)
|
||||
regmap_update_bits(sai->regmap, reg, FSL_SAI_CR2_MSEL_MASK,
|
||||
FSL_SAI_CR2_MSEL(sai->mclk_id[tx]));
|
||||
|
||||
if (savediv == 1)
|
||||
if (savediv == 1) {
|
||||
regmap_update_bits(sai->regmap, reg,
|
||||
FSL_SAI_CR2_DIV_MASK | FSL_SAI_CR2_BYP,
|
||||
FSL_SAI_CR2_BYP);
|
||||
else
|
||||
if (fsl_sai_dir_is_synced(sai, adir))
|
||||
regmap_update_bits(sai->regmap, FSL_SAI_xCR2(tx, ofs),
|
||||
FSL_SAI_CR2_BCI, FSL_SAI_CR2_BCI);
|
||||
else
|
||||
regmap_update_bits(sai->regmap, FSL_SAI_xCR2(tx, ofs),
|
||||
FSL_SAI_CR2_BCI, 0);
|
||||
} else {
|
||||
regmap_update_bits(sai->regmap, reg,
|
||||
FSL_SAI_CR2_DIV_MASK | FSL_SAI_CR2_BYP,
|
||||
savediv / 2 - 1);
|
||||
}
|
||||
|
||||
if (sai->soc_data->max_register >= FSL_SAI_MCTL) {
|
||||
/* SAI is in master mode at this point, so enable MCLK */
|
||||
|
||||
@ -116,6 +116,7 @@
|
||||
|
||||
/* SAI Transmit and Receive Configuration 2 Register */
|
||||
#define FSL_SAI_CR2_SYNC BIT(30)
|
||||
#define FSL_SAI_CR2_BCI BIT(28)
|
||||
#define FSL_SAI_CR2_MSEL_MASK (0x3 << 26)
|
||||
#define FSL_SAI_CR2_MSEL_BUS 0
|
||||
#define FSL_SAI_CR2_MSEL_MCLK1 BIT(26)
|
||||
|
||||
@ -314,7 +314,7 @@ int asoc_simple_startup(struct snd_pcm_substream *substream)
|
||||
}
|
||||
ret = snd_pcm_hw_constraint_minmax(substream->runtime, SNDRV_PCM_HW_PARAM_RATE,
|
||||
fixed_rate, fixed_rate);
|
||||
if (ret)
|
||||
if (ret < 0)
|
||||
goto codec_err;
|
||||
}
|
||||
|
||||
|
||||
@ -416,6 +416,7 @@ static int __simple_for_each_link(struct asoc_simple_priv *priv,
|
||||
|
||||
if (ret < 0) {
|
||||
of_node_put(codec);
|
||||
of_node_put(plat);
|
||||
of_node_put(np);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@ -418,13 +418,6 @@ int mt8188_afe_init_clock(struct mtk_base_afe *afe)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mt8188_afe_deinit_clock(void *priv)
|
||||
{
|
||||
struct mtk_base_afe *afe = priv;
|
||||
|
||||
mt8188_audsys_clk_unregister(afe);
|
||||
}
|
||||
|
||||
int mt8188_afe_enable_clk(struct mtk_base_afe *afe, struct clk *clk)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@ -100,7 +100,6 @@ int mt8188_afe_get_mclk_source_clk_id(int sel);
|
||||
int mt8188_afe_get_mclk_source_rate(struct mtk_base_afe *afe, int apll);
|
||||
int mt8188_afe_get_default_mclk_source_by_rate(int rate);
|
||||
int mt8188_afe_init_clock(struct mtk_base_afe *afe);
|
||||
void mt8188_afe_deinit_clock(void *priv);
|
||||
int mt8188_afe_enable_clk(struct mtk_base_afe *afe, struct clk *clk);
|
||||
void mt8188_afe_disable_clk(struct mtk_base_afe *afe, struct clk *clk);
|
||||
int mt8188_afe_set_clk_rate(struct mtk_base_afe *afe, struct clk *clk,
|
||||
|
||||
@ -3185,10 +3185,6 @@ static int mt8188_afe_pcm_dev_probe(struct platform_device *pdev)
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "init clock error");
|
||||
|
||||
ret = devm_add_action_or_reset(dev, mt8188_afe_deinit_clock, (void *)afe);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
spin_lock_init(&afe_priv->afe_ctrl_lock);
|
||||
|
||||
mutex_init(&afe->irq_alloc_lock);
|
||||
|
||||
@ -138,6 +138,29 @@ static const struct afe_gate aud_clks[CLK_AUD_NR_CLK] = {
|
||||
GATE_AUD6(CLK_AUD_GASRC11, "aud_gasrc11", "top_asm_h", 11),
|
||||
};
|
||||
|
||||
static void mt8188_audsys_clk_unregister(void *data)
|
||||
{
|
||||
struct mtk_base_afe *afe = data;
|
||||
struct mt8188_afe_private *afe_priv = afe->platform_priv;
|
||||
struct clk *clk;
|
||||
struct clk_lookup *cl;
|
||||
int i;
|
||||
|
||||
if (!afe_priv)
|
||||
return;
|
||||
|
||||
for (i = 0; i < CLK_AUD_NR_CLK; i++) {
|
||||
cl = afe_priv->lookup[i];
|
||||
if (!cl)
|
||||
continue;
|
||||
|
||||
clk = cl->clk;
|
||||
clk_unregister_gate(clk);
|
||||
|
||||
clkdev_drop(cl);
|
||||
}
|
||||
}
|
||||
|
||||
int mt8188_audsys_clk_register(struct mtk_base_afe *afe)
|
||||
{
|
||||
struct mt8188_afe_private *afe_priv = afe->platform_priv;
|
||||
@ -179,27 +202,5 @@ int mt8188_audsys_clk_register(struct mtk_base_afe *afe)
|
||||
afe_priv->lookup[i] = cl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mt8188_audsys_clk_unregister(struct mtk_base_afe *afe)
|
||||
{
|
||||
struct mt8188_afe_private *afe_priv = afe->platform_priv;
|
||||
struct clk *clk;
|
||||
struct clk_lookup *cl;
|
||||
int i;
|
||||
|
||||
if (!afe_priv)
|
||||
return;
|
||||
|
||||
for (i = 0; i < CLK_AUD_NR_CLK; i++) {
|
||||
cl = afe_priv->lookup[i];
|
||||
if (!cl)
|
||||
continue;
|
||||
|
||||
clk = cl->clk;
|
||||
clk_unregister_gate(clk);
|
||||
|
||||
clkdev_drop(cl);
|
||||
}
|
||||
return devm_add_action_or_reset(afe->dev, mt8188_audsys_clk_unregister, afe);
|
||||
}
|
||||
|
||||
@ -10,6 +10,5 @@
|
||||
#define _MT8188_AUDSYS_CLK_H_
|
||||
|
||||
int mt8188_audsys_clk_register(struct mtk_base_afe *afe);
|
||||
void mt8188_audsys_clk_unregister(struct mtk_base_afe *afe);
|
||||
|
||||
#endif
|
||||
|
||||
@ -410,11 +410,6 @@ int mt8195_afe_init_clock(struct mtk_base_afe *afe)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mt8195_afe_deinit_clock(struct mtk_base_afe *afe)
|
||||
{
|
||||
mt8195_audsys_clk_unregister(afe);
|
||||
}
|
||||
|
||||
int mt8195_afe_enable_clk(struct mtk_base_afe *afe, struct clk *clk)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@ -101,7 +101,6 @@ int mt8195_afe_get_mclk_source_clk_id(int sel);
|
||||
int mt8195_afe_get_mclk_source_rate(struct mtk_base_afe *afe, int apll);
|
||||
int mt8195_afe_get_default_mclk_source_by_rate(int rate);
|
||||
int mt8195_afe_init_clock(struct mtk_base_afe *afe);
|
||||
void mt8195_afe_deinit_clock(struct mtk_base_afe *afe);
|
||||
int mt8195_afe_enable_clk(struct mtk_base_afe *afe, struct clk *clk);
|
||||
void mt8195_afe_disable_clk(struct mtk_base_afe *afe, struct clk *clk);
|
||||
int mt8195_afe_prepare_clk(struct mtk_base_afe *afe, struct clk *clk);
|
||||
|
||||
@ -3255,15 +3255,11 @@ err_pm_put:
|
||||
|
||||
static void mt8195_afe_pcm_dev_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct mtk_base_afe *afe = platform_get_drvdata(pdev);
|
||||
|
||||
snd_soc_unregister_component(&pdev->dev);
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
if (!pm_runtime_status_suspended(&pdev->dev))
|
||||
mt8195_afe_runtime_suspend(&pdev->dev);
|
||||
|
||||
mt8195_afe_deinit_clock(afe);
|
||||
}
|
||||
|
||||
static const struct of_device_id mt8195_afe_pcm_dt_match[] = {
|
||||
|
||||
@ -148,6 +148,29 @@ static const struct afe_gate aud_clks[CLK_AUD_NR_CLK] = {
|
||||
GATE_AUD6(CLK_AUD_GASRC19, "aud_gasrc19", "top_asm_h", 19),
|
||||
};
|
||||
|
||||
static void mt8195_audsys_clk_unregister(void *data)
|
||||
{
|
||||
struct mtk_base_afe *afe = data;
|
||||
struct mt8195_afe_private *afe_priv = afe->platform_priv;
|
||||
struct clk *clk;
|
||||
struct clk_lookup *cl;
|
||||
int i;
|
||||
|
||||
if (!afe_priv)
|
||||
return;
|
||||
|
||||
for (i = 0; i < CLK_AUD_NR_CLK; i++) {
|
||||
cl = afe_priv->lookup[i];
|
||||
if (!cl)
|
||||
continue;
|
||||
|
||||
clk = cl->clk;
|
||||
clk_unregister_gate(clk);
|
||||
|
||||
clkdev_drop(cl);
|
||||
}
|
||||
}
|
||||
|
||||
int mt8195_audsys_clk_register(struct mtk_base_afe *afe)
|
||||
{
|
||||
struct mt8195_afe_private *afe_priv = afe->platform_priv;
|
||||
@ -188,27 +211,5 @@ int mt8195_audsys_clk_register(struct mtk_base_afe *afe)
|
||||
afe_priv->lookup[i] = cl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mt8195_audsys_clk_unregister(struct mtk_base_afe *afe)
|
||||
{
|
||||
struct mt8195_afe_private *afe_priv = afe->platform_priv;
|
||||
struct clk *clk;
|
||||
struct clk_lookup *cl;
|
||||
int i;
|
||||
|
||||
if (!afe_priv)
|
||||
return;
|
||||
|
||||
for (i = 0; i < CLK_AUD_NR_CLK; i++) {
|
||||
cl = afe_priv->lookup[i];
|
||||
if (!cl)
|
||||
continue;
|
||||
|
||||
clk = cl->clk;
|
||||
clk_unregister_gate(clk);
|
||||
|
||||
clkdev_drop(cl);
|
||||
}
|
||||
return devm_add_action_or_reset(afe->dev, mt8195_audsys_clk_unregister, afe);
|
||||
}
|
||||
|
||||
@ -10,6 +10,5 @@
|
||||
#define _MT8195_AUDSYS_CLK_H_
|
||||
|
||||
int mt8195_audsys_clk_register(struct mtk_base_afe *afe);
|
||||
void mt8195_audsys_clk_unregister(struct mtk_base_afe *afe);
|
||||
|
||||
#endif
|
||||
|
||||
@ -381,7 +381,7 @@ __format:
|
||||
goto __close;
|
||||
}
|
||||
if (rrate != rate) {
|
||||
snprintf(msg, sizeof(msg), "rate mismatch %ld != %ld", rate, rrate);
|
||||
snprintf(msg, sizeof(msg), "rate mismatch %ld != %d", rate, rrate);
|
||||
goto __close;
|
||||
}
|
||||
rperiod_size = period_size;
|
||||
@ -447,24 +447,24 @@ __format:
|
||||
frames = snd_pcm_writei(handle, samples, rate);
|
||||
if (frames < 0) {
|
||||
snprintf(msg, sizeof(msg),
|
||||
"Write failed: expected %d, wrote %li", rate, frames);
|
||||
"Write failed: expected %ld, wrote %li", rate, frames);
|
||||
goto __close;
|
||||
}
|
||||
if (frames < rate) {
|
||||
snprintf(msg, sizeof(msg),
|
||||
"expected %d, wrote %li", rate, frames);
|
||||
"expected %ld, wrote %li", rate, frames);
|
||||
goto __close;
|
||||
}
|
||||
} else {
|
||||
frames = snd_pcm_readi(handle, samples, rate);
|
||||
if (frames < 0) {
|
||||
snprintf(msg, sizeof(msg),
|
||||
"expected %d, wrote %li", rate, frames);
|
||||
"expected %ld, wrote %li", rate, frames);
|
||||
goto __close;
|
||||
}
|
||||
if (frames < rate) {
|
||||
snprintf(msg, sizeof(msg),
|
||||
"expected %d, wrote %li", rate, frames);
|
||||
"expected %ld, wrote %li", rate, frames);
|
||||
goto __close;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user