Commit a4a6eed8 authored by Takashi Iwai's avatar Takashi Iwai

Merge tag 'asoc-fix-v6.5-rc7' of...

Merge tag 'asoc-fix-v6.5-rc7' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus

ASoC: Fixes for v6.5

A relatively large but generally not super urgent set of fixes for ASoC,
including some quirks and a MAINTAINERS update.  There's also an update
to cs35l56 to change the firmware ABI, there are no current shipping
systems which use the current interface and the sooner we get the new
interface in the less likely it is that something will start.

It'd be nice if these landed for v6.5 but not the end of the world if
they wait till v6.6.
parents 1d0eb614 1613781d
...@@ -21063,6 +21063,39 @@ S: Maintained ...@@ -21063,6 +21063,39 @@ S: Maintained
F: Documentation/devicetree/bindings/sound/davinci-mcasp-audio.yaml F: Documentation/devicetree/bindings/sound/davinci-mcasp-audio.yaml
F: sound/soc/ti/ 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 TEXAS INSTRUMENTS DMA DRIVERS
M: Peter Ujfalusi <peter.ujfalusi@gmail.com> M: Peter Ujfalusi <peter.ujfalusi@gmail.com>
L: dmaengine@vger.kernel.org L: dmaengine@vger.kernel.org
......
...@@ -248,6 +248,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { ...@@ -248,6 +248,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "M3402RA"), 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, .driver_data = &acp6x_card,
.matches = { .matches = {
......
...@@ -168,7 +168,7 @@ static int cs35l41_get_fs_mon_config_index(int freq) ...@@ -168,7 +168,7 @@ static int cs35l41_get_fs_mon_config_index(int freq)
static const DECLARE_TLV_DB_RANGE(dig_vol_tlv, static const DECLARE_TLV_DB_RANGE(dig_vol_tlv,
0, 0, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1), 0, 0, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
1, 913, TLV_DB_MINMAX_ITEM(-10200, 1200)); 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 = static const struct snd_kcontrol_new dre_ctrl =
SOC_DAPM_SINGLE("Switch", CS35L41_PWR_CTRL3, 20, 1, 0); SOC_DAPM_SINGLE("Switch", CS35L41_PWR_CTRL3, 20, 1, 0);
......
...@@ -62,10 +62,19 @@ static const struct i2c_device_id cs35l56_id_i2c[] = { ...@@ -62,10 +62,19 @@ static const struct i2c_device_id cs35l56_id_i2c[] = {
}; };
MODULE_DEVICE_TABLE(i2c, 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 = { static struct i2c_driver cs35l56_i2c_driver = {
.driver = { .driver = {
.name = "cs35l56", .name = "cs35l56",
.pm = &cs35l56_pm_ops_i2c_spi, .pm = &cs35l56_pm_ops_i2c_spi,
.acpi_match_table = ACPI_PTR(cs35l56_asoc_acpi_match),
}, },
.id_table = cs35l56_id_i2c, .id_table = cs35l56_id_i2c,
.probe = cs35l56_i2c_probe, .probe = cs35l56_i2c_probe,
......
...@@ -59,10 +59,19 @@ static const struct spi_device_id cs35l56_id_spi[] = { ...@@ -59,10 +59,19 @@ static const struct spi_device_id cs35l56_id_spi[] = {
}; };
MODULE_DEVICE_TABLE(spi, 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 = { static struct spi_driver cs35l56_spi_driver = {
.driver = { .driver = {
.name = "cs35l56", .name = "cs35l56",
.pm = &cs35l56_pm_ops_i2c_spi, .pm = &cs35l56_pm_ops_i2c_spi,
.acpi_match_table = ACPI_PTR(cs35l56_asoc_acpi_match),
}, },
.id_table = cs35l56_id_spi, .id_table = cs35l56_id_spi,
.probe = cs35l56_spi_probe, .probe = cs35l56_spi_probe,
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
// Copyright (C) 2023 Cirrus Logic, Inc. and // Copyright (C) 2023 Cirrus Logic, Inc. and
// Cirrus Logic International Semiconductor Ltd. // Cirrus Logic International Semiconductor Ltd.
#include <linux/acpi.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <linux/delay.h> #include <linux/delay.h>
...@@ -1354,26 +1353,22 @@ static int cs35l56_dsp_init(struct cs35l56_private *cs35l56) ...@@ -1354,26 +1353,22 @@ static int cs35l56_dsp_init(struct cs35l56_private *cs35l56)
return 0; 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); struct device *dev = cs35l56->dev;
const char *sub; const char *prop;
int ret;
/* If there is no ACPI_HANDLE, there is no ACPI for this system, return 0 */ ret = device_property_read_string(dev, "cirrus,firmware-uid", &prop);
if (!handle) /* If bad sw node property, return 0 and fallback to legacy firmware path */
if (ret < 0)
return 0; return 0;
sub = acpi_get_subsystem_id(handle); cs35l56->dsp.system_name = devm_kstrdup(dev, prop, GFP_KERNEL);
if (IS_ERR(sub)) { if (cs35l56->dsp.system_name == NULL)
/* If bad ACPI, return 0 and fallback to legacy firmware path, otherwise fail */ return -ENOMEM;
if (PTR_ERR(sub) == -ENODATA)
return 0;
else
return PTR_ERR(sub);
}
cs35l56->dsp.system_name = sub; dev_dbg(dev, "Firmware UID: %s\n", cs35l56->dsp.system_name);
dev_dbg(cs35l56->dev, "Subsystem ID: %s\n", cs35l56->dsp.system_name);
return 0; return 0;
} }
...@@ -1417,7 +1412,7 @@ int cs35l56_common_probe(struct cs35l56_private *cs35l56) ...@@ -1417,7 +1412,7 @@ int cs35l56_common_probe(struct cs35l56_private *cs35l56)
gpiod_set_value_cansleep(cs35l56->reset_gpio, 1); gpiod_set_value_cansleep(cs35l56->reset_gpio, 1);
} }
ret = cs35l56_acpi_get_name(cs35l56); ret = cs35l56_get_firmware_uid(cs35l56);
if (ret != 0) if (ret != 0)
goto err; goto err;
...@@ -1604,8 +1599,6 @@ void cs35l56_remove(struct cs35l56_private *cs35l56) ...@@ -1604,8 +1599,6 @@ void cs35l56_remove(struct cs35l56_private *cs35l56)
regcache_cache_only(cs35l56->regmap, true); regcache_cache_only(cs35l56->regmap, true);
kfree(cs35l56->dsp.system_name);
gpiod_set_value_cansleep(cs35l56->reset_gpio, 0); gpiod_set_value_cansleep(cs35l56->reset_gpio, 0);
regulator_bulk_disable(ARRAY_SIZE(cs35l56->supplies), cs35l56->supplies); regulator_bulk_disable(ARRAY_SIZE(cs35l56->supplies), cs35l56->supplies);
} }
......
...@@ -57,16 +57,17 @@ static int tasdevice_change_chn_book(struct tasdevice_priv *tas_priv, ...@@ -57,16 +57,17 @@ static int tasdevice_change_chn_book(struct tasdevice_priv *tas_priv,
if (client->addr != tasdev->dev_addr) { if (client->addr != tasdev->dev_addr) {
client->addr = tasdev->dev_addr; client->addr = tasdev->dev_addr;
if (tasdev->cur_book == book) { /* All tas2781s share the same regmap, clear the page
ret = regmap_write(map, * inside regmap once switching to another tas2781.
TASDEVICE_PAGE_SELECT, 0); * Register 0 at any pages and any books inside tas2781
if (ret < 0) { * is the same one for page-switching.
dev_err(tas_priv->dev, "%s, E=%d\n", */
__func__, ret); ret = regmap_write(map, TASDEVICE_PAGE_SELECT, 0);
goto out; if (ret < 0) {
} dev_err(tas_priv->dev, "%s, E=%d\n",
__func__, ret);
goto out;
} }
goto out;
} }
if (tasdev->cur_book != book) { if (tasdev->cur_book != book) {
......
...@@ -708,6 +708,9 @@ static int sof_ipc4_pcm_hw_params(struct snd_soc_component *component, ...@@ -708,6 +708,9 @@ static int sof_ipc4_pcm_hw_params(struct snd_soc_component *component,
struct snd_sof_pcm *spcm; struct snd_sof_pcm *spcm;
spcm = snd_sof_find_spcm_dai(component, rtd); spcm = snd_sof_find_spcm_dai(component, rtd);
if (!spcm)
return -EINVAL;
time_info = spcm->stream[substream->stream].private; time_info = spcm->stream[substream->stream].private;
/* delay calculation is not supported by current fw_reg ABI */ /* delay calculation is not supported by current fw_reg ABI */
if (!time_info) if (!time_info)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment