sound fixes for 6.5
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. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAmToW88OHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE+sfw//XFkB7lB6zudDCWY5orGhTKF8kVefgm17vvIi ya4KkSpo8C1K756s7G7LKpUb6GVXcSnvThVUPnNmP2cZNGEkK4vWS7jmQZhEX7fU tF0s+6qSY1wCBq9feOvV8KARVNyAXBEOC+4Xz+zpkipypnS+by2r1C1o5GALxiUs MGCAuAi9G8sLgzoELuFRM5cv6fbiBGmLd3PMaZ8RVNXCXr2vfrgZhDUrItYelKAU L64L2nsOR6ZATzEDUbdM7gBy1U7u3dwI+hpX06WsdqN4kWkjV+jCrvWaQtpEtntY zjlUGrElVnQFy0KUtFRRYvQCDwjj+E6HFGhp8dLe4DLl61da1kD1m47i0jB9pS/Q AUVOzaZfjZJ6goBFg4Y9i+4UqTjQ4sOIB/L1mEmI9SC75hLE1fMUfZFalLqUmkLd U61ZmE9sQ5Y6g4f6fcde0TKh5Fq4yjCgtVa0D/KvWAZ0H+1O9ECI8qbgLg5xIC45 yDQaOSv6Q8xx5FtB/44QK06Hf3Jkg7ajvY/+eyb6wA2VXF6Ntzd/GGzcepeOI/dh M5FdJVyGqrFI9dUgcEsGWFWijUYQFRSHLdRtqHToBi/GUlS7IwbC18t5G3Dd5MQv A74Xat7IfLjHboR3Iv28WtUZEGwzoGsnuSBMT/Qyuno7oFlPHJ2iVDnWftt1BWCK ZADn3GI= =9D1D -----END PGP SIGNATURE----- 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
This commit is contained in:
commit
ced5bf2493
33
MAINTAINERS
33
MAINTAINERS
|
@ -21062,6 +21062,39 @@ S: Maintained
|
|||
F: Documentation/devicetree/bindings/sound/davinci-mcasp-audio.yaml
|
||||
F: sound/soc/ti/
|
||||
|
||||
TEXAS INSTRUMENTS AUDIO (ASoC/HDA) DRIVERS
|
||||
M: Shenghao Ding <shenghao-ding@ti.com>
|
||||
M: Kevin Lu <kevin-lu@ti.com>
|
||||
M: Baojun Xu <x1077012@ti.com>
|
||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/sound/tas2552.txt
|
||||
F: Documentation/devicetree/bindings/sound/tas2562.yaml
|
||||
F: Documentation/devicetree/bindings/sound/tas2770.yaml
|
||||
F: Documentation/devicetree/bindings/sound/tas27xx.yaml
|
||||
F: Documentation/devicetree/bindings/sound/ti,pcm1681.txt
|
||||
F: Documentation/devicetree/bindings/sound/ti,pcm3168a.yaml
|
||||
F: Documentation/devicetree/bindings/sound/ti,tlv320*.yaml
|
||||
F: Documentation/devicetree/bindings/sound/tlv320adcx140.yaml
|
||||
F: Documentation/devicetree/bindings/sound/tlv320aic31xx.txt
|
||||
F: Documentation/devicetree/bindings/sound/tpa6130a2.txt
|
||||
F: include/sound/tas2*.h
|
||||
F: include/sound/tlv320*.h
|
||||
F: include/sound/tpa6130a2-plat.h
|
||||
F: sound/pci/hda/tas2781_hda_i2c.c
|
||||
F: sound/soc/codecs/pcm1681.c
|
||||
F: sound/soc/codecs/pcm1789*.*
|
||||
F: sound/soc/codecs/pcm179x*.*
|
||||
F: sound/soc/codecs/pcm186x*.*
|
||||
F: sound/soc/codecs/pcm3008.*
|
||||
F: sound/soc/codecs/pcm3060*.*
|
||||
F: sound/soc/codecs/pcm3168a*.*
|
||||
F: sound/soc/codecs/pcm5102a.c
|
||||
F: sound/soc/codecs/pcm512x*.*
|
||||
F: sound/soc/codecs/tas2*.*
|
||||
F: sound/soc/codecs/tlv320*.*
|
||||
F: sound/soc/codecs/tpa6130a2.*
|
||||
|
||||
TEXAS INSTRUMENTS DMA DRIVERS
|
||||
M: Peter Ujfalusi <peter.ujfalusi@gmail.com>
|
||||
L: dmaengine@vger.kernel.org
|
||||
|
|
|
@ -152,8 +152,8 @@ static inline int snd_ymfpci_create_gameport(struct snd_ymfpci *chip, int dev, i
|
|||
void snd_ymfpci_free_gameport(struct snd_ymfpci *chip) { }
|
||||
#endif /* SUPPORT_JOYSTICK */
|
||||
|
||||
static int snd_card_ymfpci_probe(struct pci_dev *pci,
|
||||
const struct pci_device_id *pci_id)
|
||||
static int __snd_card_ymfpci_probe(struct pci_dev *pci,
|
||||
const struct pci_device_id *pci_id)
|
||||
{
|
||||
static int dev;
|
||||
struct snd_card *card;
|
||||
|
@ -348,6 +348,12 @@ static int snd_card_ymfpci_probe(struct pci_dev *pci,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int snd_card_ymfpci_probe(struct pci_dev *pci,
|
||||
const struct pci_device_id *pci_id)
|
||||
{
|
||||
return snd_card_free_on_error(&pci->dev, __snd_card_ymfpci_probe(pci, pci_id));
|
||||
}
|
||||
|
||||
static struct pci_driver ymfpci_driver = {
|
||||
.name = KBUILD_MODNAME,
|
||||
.id_table = snd_ymfpci_ids,
|
||||
|
|
|
@ -217,7 +217,7 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
|
|||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "82"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "82V2"),
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -248,6 +248,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "M3402RA"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "M6500RC"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
|
|
|
@ -168,7 +168,7 @@ static int cs35l41_get_fs_mon_config_index(int freq)
|
|||
static const DECLARE_TLV_DB_RANGE(dig_vol_tlv,
|
||||
0, 0, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
|
||||
1, 913, TLV_DB_MINMAX_ITEM(-10200, 1200));
|
||||
static DECLARE_TLV_DB_SCALE(amp_gain_tlv, 0, 1, 1);
|
||||
static DECLARE_TLV_DB_SCALE(amp_gain_tlv, 50, 100, 0);
|
||||
|
||||
static const struct snd_kcontrol_new dre_ctrl =
|
||||
SOC_DAPM_SINGLE("Switch", CS35L41_PWR_CTRL3, 20, 1, 0);
|
||||
|
|
|
@ -62,10 +62,19 @@ static const struct i2c_device_id cs35l56_id_i2c[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(i2c, cs35l56_id_i2c);
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
static const struct acpi_device_id cs35l56_asoc_acpi_match[] = {
|
||||
{ "CSC355C", 0 },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, cs35l56_asoc_acpi_match);
|
||||
#endif
|
||||
|
||||
static struct i2c_driver cs35l56_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "cs35l56",
|
||||
.pm = &cs35l56_pm_ops_i2c_spi,
|
||||
.acpi_match_table = ACPI_PTR(cs35l56_asoc_acpi_match),
|
||||
},
|
||||
.id_table = cs35l56_id_i2c,
|
||||
.probe = cs35l56_i2c_probe,
|
||||
|
|
|
@ -59,10 +59,19 @@ static const struct spi_device_id cs35l56_id_spi[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(spi, cs35l56_id_spi);
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
static const struct acpi_device_id cs35l56_asoc_acpi_match[] = {
|
||||
{ "CSC355C", 0 },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, cs35l56_asoc_acpi_match);
|
||||
#endif
|
||||
|
||||
static struct spi_driver cs35l56_spi_driver = {
|
||||
.driver = {
|
||||
.name = "cs35l56",
|
||||
.pm = &cs35l56_pm_ops_i2c_spi,
|
||||
.acpi_match_table = ACPI_PTR(cs35l56_asoc_acpi_match),
|
||||
},
|
||||
.id_table = cs35l56_id_spi,
|
||||
.probe = cs35l56_spi_probe,
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
// Copyright (C) 2023 Cirrus Logic, Inc. and
|
||||
// Cirrus Logic International Semiconductor Ltd.
|
||||
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/completion.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/delay.h>
|
||||
|
@ -1354,26 +1353,22 @@ static int cs35l56_dsp_init(struct cs35l56_private *cs35l56)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cs35l56_acpi_get_name(struct cs35l56_private *cs35l56)
|
||||
static int cs35l56_get_firmware_uid(struct cs35l56_private *cs35l56)
|
||||
{
|
||||
acpi_handle handle = ACPI_HANDLE(cs35l56->dev);
|
||||
const char *sub;
|
||||
struct device *dev = cs35l56->dev;
|
||||
const char *prop;
|
||||
int ret;
|
||||
|
||||
/* If there is no ACPI_HANDLE, there is no ACPI for this system, return 0 */
|
||||
if (!handle)
|
||||
ret = device_property_read_string(dev, "cirrus,firmware-uid", &prop);
|
||||
/* If bad sw node property, return 0 and fallback to legacy firmware path */
|
||||
if (ret < 0)
|
||||
return 0;
|
||||
|
||||
sub = acpi_get_subsystem_id(handle);
|
||||
if (IS_ERR(sub)) {
|
||||
/* If bad ACPI, return 0 and fallback to legacy firmware path, otherwise fail */
|
||||
if (PTR_ERR(sub) == -ENODATA)
|
||||
return 0;
|
||||
else
|
||||
return PTR_ERR(sub);
|
||||
}
|
||||
cs35l56->dsp.system_name = devm_kstrdup(dev, prop, GFP_KERNEL);
|
||||
if (cs35l56->dsp.system_name == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
cs35l56->dsp.system_name = sub;
|
||||
dev_dbg(cs35l56->dev, "Subsystem ID: %s\n", cs35l56->dsp.system_name);
|
||||
dev_dbg(dev, "Firmware UID: %s\n", cs35l56->dsp.system_name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1417,7 +1412,7 @@ int cs35l56_common_probe(struct cs35l56_private *cs35l56)
|
|||
gpiod_set_value_cansleep(cs35l56->reset_gpio, 1);
|
||||
}
|
||||
|
||||
ret = cs35l56_acpi_get_name(cs35l56);
|
||||
ret = cs35l56_get_firmware_uid(cs35l56);
|
||||
if (ret != 0)
|
||||
goto err;
|
||||
|
||||
|
@ -1604,8 +1599,6 @@ void cs35l56_remove(struct cs35l56_private *cs35l56)
|
|||
|
||||
regcache_cache_only(cs35l56->regmap, true);
|
||||
|
||||
kfree(cs35l56->dsp.system_name);
|
||||
|
||||
gpiod_set_value_cansleep(cs35l56->reset_gpio, 0);
|
||||
regulator_bulk_disable(ARRAY_SIZE(cs35l56->supplies), cs35l56->supplies);
|
||||
}
|
||||
|
|
|
@ -57,16 +57,17 @@ static int tasdevice_change_chn_book(struct tasdevice_priv *tas_priv,
|
|||
|
||||
if (client->addr != tasdev->dev_addr) {
|
||||
client->addr = tasdev->dev_addr;
|
||||
if (tasdev->cur_book == book) {
|
||||
ret = regmap_write(map,
|
||||
TASDEVICE_PAGE_SELECT, 0);
|
||||
if (ret < 0) {
|
||||
dev_err(tas_priv->dev, "%s, E=%d\n",
|
||||
__func__, ret);
|
||||
goto out;
|
||||
}
|
||||
/* All tas2781s share the same regmap, clear the page
|
||||
* inside regmap once switching to another tas2781.
|
||||
* Register 0 at any pages and any books inside tas2781
|
||||
* is the same one for page-switching.
|
||||
*/
|
||||
ret = regmap_write(map, TASDEVICE_PAGE_SELECT, 0);
|
||||
if (ret < 0) {
|
||||
dev_err(tas_priv->dev, "%s, E=%d\n",
|
||||
__func__, ret);
|
||||
goto out;
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (tasdev->cur_book != book) {
|
||||
|
|
|
@ -708,6 +708,9 @@ static int sof_ipc4_pcm_hw_params(struct snd_soc_component *component,
|
|||
struct snd_sof_pcm *spcm;
|
||||
|
||||
spcm = snd_sof_find_spcm_dai(component, rtd);
|
||||
if (!spcm)
|
||||
return -EINVAL;
|
||||
|
||||
time_info = spcm->stream[substream->stream].private;
|
||||
/* delay calculation is not supported by current fw_reg ABI */
|
||||
if (!time_info)
|
||||
|
|
Loading…
Reference in New Issue