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.5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"Hopefully the last bits for 6.5. It's slightly higher LOCs than
wished, but it doesn't look scary.

The biggest change is MAINTAINERS update for TI; it's good to have the
update before the final release, so that people can contact to the
right persons for bug reports (which shouldn't happen of course!)

The rest are all device-specific fixes and quirks, most for various
ASoC platforms"

* tag 'sound-6.5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ASoC: amd: yc: Fix a non-functional mic on Lenovo 82SJ
ALSA: ymfpci: Fix the missing snd_card_free() call at probe error
ASoC: cs35l41: Correct amp_gain_tlv values
ASoC: amd: yc: Add VivoBook Pro 15 to quirks list for acp6x
ASoC: tas2781: fixed register access error when switching to other chips
ASoC: cs35l56: Add an ACPI match table
ASoC: cs35l56: Read firmware uuid from a device property instead of _SUB
ASoC: SOF: ipc4-pcm: fix possible null pointer deference
MAINTAINERS: Add entries for TEXAS INSTRUMENTS ASoC DRIVERS

+93 -32
+33
MAINTAINERS
··· 21062 21062 F: Documentation/devicetree/bindings/sound/davinci-mcasp-audio.yaml 21063 21063 F: sound/soc/ti/ 21064 21064 21065 + TEXAS INSTRUMENTS AUDIO (ASoC/HDA) DRIVERS 21066 + M: Shenghao Ding <shenghao-ding@ti.com> 21067 + M: Kevin Lu <kevin-lu@ti.com> 21068 + M: Baojun Xu <x1077012@ti.com> 21069 + L: alsa-devel@alsa-project.org (moderated for non-subscribers) 21070 + S: Maintained 21071 + F: Documentation/devicetree/bindings/sound/tas2552.txt 21072 + F: Documentation/devicetree/bindings/sound/tas2562.yaml 21073 + F: Documentation/devicetree/bindings/sound/tas2770.yaml 21074 + F: Documentation/devicetree/bindings/sound/tas27xx.yaml 21075 + F: Documentation/devicetree/bindings/sound/ti,pcm1681.txt 21076 + F: Documentation/devicetree/bindings/sound/ti,pcm3168a.yaml 21077 + F: Documentation/devicetree/bindings/sound/ti,tlv320*.yaml 21078 + F: Documentation/devicetree/bindings/sound/tlv320adcx140.yaml 21079 + F: Documentation/devicetree/bindings/sound/tlv320aic31xx.txt 21080 + F: Documentation/devicetree/bindings/sound/tpa6130a2.txt 21081 + F: include/sound/tas2*.h 21082 + F: include/sound/tlv320*.h 21083 + F: include/sound/tpa6130a2-plat.h 21084 + F: sound/pci/hda/tas2781_hda_i2c.c 21085 + F: sound/soc/codecs/pcm1681.c 21086 + F: sound/soc/codecs/pcm1789*.* 21087 + F: sound/soc/codecs/pcm179x*.* 21088 + F: sound/soc/codecs/pcm186x*.* 21089 + F: sound/soc/codecs/pcm3008.* 21090 + F: sound/soc/codecs/pcm3060*.* 21091 + F: sound/soc/codecs/pcm3168a*.* 21092 + F: sound/soc/codecs/pcm5102a.c 21093 + F: sound/soc/codecs/pcm512x*.* 21094 + F: sound/soc/codecs/tas2*.* 21095 + F: sound/soc/codecs/tlv320*.* 21096 + F: sound/soc/codecs/tpa6130a2.* 21097 + 21065 21098 TEXAS INSTRUMENTS DMA DRIVERS 21066 21099 M: Peter Ujfalusi <peter.ujfalusi@gmail.com> 21067 21100 L: dmaengine@vger.kernel.org
+8 -2
sound/pci/ymfpci/ymfpci.c
··· 152 152 void snd_ymfpci_free_gameport(struct snd_ymfpci *chip) { } 153 153 #endif /* SUPPORT_JOYSTICK */ 154 154 155 - static int snd_card_ymfpci_probe(struct pci_dev *pci, 156 - const struct pci_device_id *pci_id) 155 + static int __snd_card_ymfpci_probe(struct pci_dev *pci, 156 + const struct pci_device_id *pci_id) 157 157 { 158 158 static int dev; 159 159 struct snd_card *card; ··· 346 346 pci_set_drvdata(pci, card); 347 347 dev++; 348 348 return 0; 349 + } 350 + 351 + static int snd_card_ymfpci_probe(struct pci_dev *pci, 352 + const struct pci_device_id *pci_id) 353 + { 354 + return snd_card_free_on_error(&pci->dev, __snd_card_ymfpci_probe(pci, pci_id)); 349 355 } 350 356 351 357 static struct pci_driver ymfpci_driver = {
+8 -1
sound/soc/amd/yc/acp6x-mach.c
··· 217 217 .driver_data = &acp6x_card, 218 218 .matches = { 219 219 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 220 - DMI_MATCH(DMI_PRODUCT_NAME, "82"), 220 + DMI_MATCH(DMI_PRODUCT_NAME, "82V2"), 221 221 } 222 222 }, 223 223 { ··· 246 246 .matches = { 247 247 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."), 248 248 DMI_MATCH(DMI_PRODUCT_NAME, "M3402RA"), 249 + } 250 + }, 251 + { 252 + .driver_data = &acp6x_card, 253 + .matches = { 254 + DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."), 255 + DMI_MATCH(DMI_PRODUCT_NAME, "M6500RC"), 249 256 } 250 257 }, 251 258 {
+1 -1
sound/soc/codecs/cs35l41.c
··· 168 168 static const DECLARE_TLV_DB_RANGE(dig_vol_tlv, 169 169 0, 0, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1), 170 170 1, 913, TLV_DB_MINMAX_ITEM(-10200, 1200)); 171 - static DECLARE_TLV_DB_SCALE(amp_gain_tlv, 0, 1, 1); 171 + static DECLARE_TLV_DB_SCALE(amp_gain_tlv, 50, 100, 0); 172 172 173 173 static const struct snd_kcontrol_new dre_ctrl = 174 174 SOC_DAPM_SINGLE("Switch", CS35L41_PWR_CTRL3, 20, 1, 0);
+9
sound/soc/codecs/cs35l56-i2c.c
··· 62 62 }; 63 63 MODULE_DEVICE_TABLE(i2c, cs35l56_id_i2c); 64 64 65 + #ifdef CONFIG_ACPI 66 + static const struct acpi_device_id cs35l56_asoc_acpi_match[] = { 67 + { "CSC355C", 0 }, 68 + {}, 69 + }; 70 + MODULE_DEVICE_TABLE(acpi, cs35l56_asoc_acpi_match); 71 + #endif 72 + 65 73 static struct i2c_driver cs35l56_i2c_driver = { 66 74 .driver = { 67 75 .name = "cs35l56", 68 76 .pm = &cs35l56_pm_ops_i2c_spi, 77 + .acpi_match_table = ACPI_PTR(cs35l56_asoc_acpi_match), 69 78 }, 70 79 .id_table = cs35l56_id_i2c, 71 80 .probe = cs35l56_i2c_probe,
+9
sound/soc/codecs/cs35l56-spi.c
··· 59 59 }; 60 60 MODULE_DEVICE_TABLE(spi, cs35l56_id_spi); 61 61 62 + #ifdef CONFIG_ACPI 63 + static const struct acpi_device_id cs35l56_asoc_acpi_match[] = { 64 + { "CSC355C", 0 }, 65 + {}, 66 + }; 67 + MODULE_DEVICE_TABLE(acpi, cs35l56_asoc_acpi_match); 68 + #endif 69 + 62 70 static struct spi_driver cs35l56_spi_driver = { 63 71 .driver = { 64 72 .name = "cs35l56", 65 73 .pm = &cs35l56_pm_ops_i2c_spi, 74 + .acpi_match_table = ACPI_PTR(cs35l56_asoc_acpi_match), 66 75 }, 67 76 .id_table = cs35l56_id_spi, 68 77 .probe = cs35l56_spi_probe,
+12 -19
sound/soc/codecs/cs35l56.c
··· 5 5 // Copyright (C) 2023 Cirrus Logic, Inc. and 6 6 // Cirrus Logic International Semiconductor Ltd. 7 7 8 - #include <linux/acpi.h> 9 8 #include <linux/completion.h> 10 9 #include <linux/debugfs.h> 11 10 #include <linux/delay.h> ··· 1353 1354 return 0; 1354 1355 } 1355 1356 1356 - static int cs35l56_acpi_get_name(struct cs35l56_private *cs35l56) 1357 + static int cs35l56_get_firmware_uid(struct cs35l56_private *cs35l56) 1357 1358 { 1358 - acpi_handle handle = ACPI_HANDLE(cs35l56->dev); 1359 - const char *sub; 1359 + struct device *dev = cs35l56->dev; 1360 + const char *prop; 1361 + int ret; 1360 1362 1361 - /* If there is no ACPI_HANDLE, there is no ACPI for this system, return 0 */ 1362 - if (!handle) 1363 + ret = device_property_read_string(dev, "cirrus,firmware-uid", &prop); 1364 + /* If bad sw node property, return 0 and fallback to legacy firmware path */ 1365 + if (ret < 0) 1363 1366 return 0; 1364 1367 1365 - sub = acpi_get_subsystem_id(handle); 1366 - if (IS_ERR(sub)) { 1367 - /* If bad ACPI, return 0 and fallback to legacy firmware path, otherwise fail */ 1368 - if (PTR_ERR(sub) == -ENODATA) 1369 - return 0; 1370 - else 1371 - return PTR_ERR(sub); 1372 - } 1368 + cs35l56->dsp.system_name = devm_kstrdup(dev, prop, GFP_KERNEL); 1369 + if (cs35l56->dsp.system_name == NULL) 1370 + return -ENOMEM; 1373 1371 1374 - cs35l56->dsp.system_name = sub; 1375 - dev_dbg(cs35l56->dev, "Subsystem ID: %s\n", cs35l56->dsp.system_name); 1372 + dev_dbg(dev, "Firmware UID: %s\n", cs35l56->dsp.system_name); 1376 1373 1377 1374 return 0; 1378 1375 } ··· 1412 1417 gpiod_set_value_cansleep(cs35l56->reset_gpio, 1); 1413 1418 } 1414 1419 1415 - ret = cs35l56_acpi_get_name(cs35l56); 1420 + ret = cs35l56_get_firmware_uid(cs35l56); 1416 1421 if (ret != 0) 1417 1422 goto err; 1418 1423 ··· 1598 1603 pm_runtime_disable(cs35l56->dev); 1599 1604 1600 1605 regcache_cache_only(cs35l56->regmap, true); 1601 - 1602 - kfree(cs35l56->dsp.system_name); 1603 1606 1604 1607 gpiod_set_value_cansleep(cs35l56->reset_gpio, 0); 1605 1608 regulator_bulk_disable(ARRAY_SIZE(cs35l56->supplies), cs35l56->supplies);
+10 -9
sound/soc/codecs/tas2781-comlib.c
··· 57 57 58 58 if (client->addr != tasdev->dev_addr) { 59 59 client->addr = tasdev->dev_addr; 60 - if (tasdev->cur_book == book) { 61 - ret = regmap_write(map, 62 - TASDEVICE_PAGE_SELECT, 0); 63 - if (ret < 0) { 64 - dev_err(tas_priv->dev, "%s, E=%d\n", 65 - __func__, ret); 66 - goto out; 67 - } 60 + /* All tas2781s share the same regmap, clear the page 61 + * inside regmap once switching to another tas2781. 62 + * Register 0 at any pages and any books inside tas2781 63 + * is the same one for page-switching. 64 + */ 65 + ret = regmap_write(map, TASDEVICE_PAGE_SELECT, 0); 66 + if (ret < 0) { 67 + dev_err(tas_priv->dev, "%s, E=%d\n", 68 + __func__, ret); 69 + goto out; 68 70 } 69 - goto out; 70 71 } 71 72 72 73 if (tasdev->cur_book != book) {
+3
sound/soc/sof/ipc4-pcm.c
··· 708 708 struct snd_sof_pcm *spcm; 709 709 710 710 spcm = snd_sof_find_spcm_dai(component, rtd); 711 + if (!spcm) 712 + return -EINVAL; 713 + 711 714 time_info = spcm->stream[substream->stream].private; 712 715 /* delay calculation is not supported by current fw_reg ABI */ 713 716 if (!time_info)