Commit ecc8b4d0 authored by Takashi Iwai's avatar Takashi Iwai

Merge tag 'asoc-fix-v6.6-merge-window' of...

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

ASoC: Fixes for v6.6

A bunch of fixes and new IDs that came in since the initial pull request
- all driver specific and nothing too exciting.

There's a trivial conflict in the AMD driver ID table due to the last
v6.5 fixes not having been merged up.
parents e43252db cfff2a77
...@@ -14,7 +14,13 @@ properties: ...@@ -14,7 +14,13 @@ properties:
pattern: "^easrc@.*" pattern: "^easrc@.*"
compatible: compatible:
const: fsl,imx8mn-easrc oneOf:
- enum:
- fsl,imx8mn-easrc
- items:
- enum:
- fsl,imx8mp-easrc
- const: fsl,imx8mn-easrc
reg: reg:
maxItems: 1 maxItems: 1
......
...@@ -21064,7 +21064,7 @@ F: sound/soc/ti/ ...@@ -21064,7 +21064,7 @@ F: sound/soc/ti/
TEXAS INSTRUMENTS AUDIO (ASoC/HDA) DRIVERS TEXAS INSTRUMENTS AUDIO (ASoC/HDA) DRIVERS
M: Shenghao Ding <shenghao-ding@ti.com> M: Shenghao Ding <shenghao-ding@ti.com>
M: Kevin Lu <kevin-lu@ti.com> M: Kevin Lu <kevin-lu@ti.com>
M: Baojun Xu <x1077012@ti.com> M: Baojun Xu <baojun.xu@ti.com>
L: alsa-devel@alsa-project.org (moderated for non-subscribers) L: alsa-devel@alsa-project.org (moderated for non-subscribers)
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/sound/tas2552.txt F: Documentation/devicetree/bindings/sound/tas2552.txt
......
...@@ -213,6 +213,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { ...@@ -213,6 +213,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "21J6"), DMI_MATCH(DMI_PRODUCT_NAME, "21J6"),
} }
}, },
{
.driver_data = &acp6x_card,
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_NAME, "82TL"),
}
},
{ {
.driver_data = &acp6x_card, .driver_data = &acp6x_card,
.matches = { .matches = {
...@@ -325,6 +332,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { ...@@ -325,6 +332,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
DMI_MATCH(DMI_BOARD_NAME, "8A22"), DMI_MATCH(DMI_BOARD_NAME, "8A22"),
} }
}, },
{
.driver_data = &acp6x_card,
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
DMI_MATCH(DMI_BOARD_NAME, "8A3E"),
}
},
{ {
.driver_data = &acp6x_card, .driver_data = &acp6x_card,
.matches = { .matches = {
......
...@@ -1968,11 +1968,15 @@ config SND_SOC_UDA1380 ...@@ -1968,11 +1968,15 @@ config SND_SOC_UDA1380
tristate tristate
depends on I2C depends on I2C
config SND_SOC_WCD_CLASSH
tristate
config SND_SOC_WCD9335 config SND_SOC_WCD9335
tristate "WCD9335 Codec" tristate "WCD9335 Codec"
depends on SLIMBUS depends on SLIMBUS
select REGMAP_SLIMBUS select REGMAP_SLIMBUS
select REGMAP_IRQ select REGMAP_IRQ
select SND_SOC_WCD_CLASSH
help help
The WCD9335 is a standalone Hi-Fi audio CODEC IC, supports The WCD9335 is a standalone Hi-Fi audio CODEC IC, supports
Qualcomm Technologies, Inc. (QTI) multimedia solutions, Qualcomm Technologies, Inc. (QTI) multimedia solutions,
...@@ -1987,6 +1991,7 @@ config SND_SOC_WCD934X ...@@ -1987,6 +1991,7 @@ config SND_SOC_WCD934X
depends on SLIMBUS depends on SLIMBUS
select REGMAP_IRQ select REGMAP_IRQ
select REGMAP_SLIMBUS select REGMAP_SLIMBUS
select SND_SOC_WCD_CLASSH
select SND_SOC_WCD_MBHC select SND_SOC_WCD_MBHC
depends on MFD_WCD934X || COMPILE_TEST depends on MFD_WCD934X || COMPILE_TEST
help help
...@@ -1997,6 +2002,7 @@ config SND_SOC_WCD938X ...@@ -1997,6 +2002,7 @@ config SND_SOC_WCD938X
depends on SND_SOC_WCD938X_SDW depends on SND_SOC_WCD938X_SDW
tristate tristate
depends on SOUNDWIRE || !SOUNDWIRE depends on SOUNDWIRE || !SOUNDWIRE
select SND_SOC_WCD_CLASSH
config SND_SOC_WCD938X_SDW config SND_SOC_WCD938X_SDW
tristate "WCD9380/WCD9385 Codec - SDW" tristate "WCD9380/WCD9385 Codec - SDW"
......
...@@ -303,10 +303,11 @@ snd-soc-twl4030-objs := twl4030.o ...@@ -303,10 +303,11 @@ snd-soc-twl4030-objs := twl4030.o
snd-soc-twl6040-objs := twl6040.o snd-soc-twl6040-objs := twl6040.o
snd-soc-uda1334-objs := uda1334.o snd-soc-uda1334-objs := uda1334.o
snd-soc-uda1380-objs := uda1380.o snd-soc-uda1380-objs := uda1380.o
snd-soc-wcd-classh-objs := wcd-clsh-v2.o
snd-soc-wcd-mbhc-objs := wcd-mbhc-v2.o snd-soc-wcd-mbhc-objs := wcd-mbhc-v2.o
snd-soc-wcd9335-objs := wcd-clsh-v2.o wcd9335.o snd-soc-wcd9335-objs := wcd9335.o
snd-soc-wcd934x-objs := wcd-clsh-v2.o wcd934x.o snd-soc-wcd934x-objs := wcd934x.o
snd-soc-wcd938x-objs := wcd938x.o wcd-clsh-v2.o snd-soc-wcd938x-objs := wcd938x.o
snd-soc-wcd938x-sdw-objs := wcd938x-sdw.o snd-soc-wcd938x-sdw-objs := wcd938x-sdw.o
snd-soc-wl1273-objs := wl1273.o snd-soc-wl1273-objs := wl1273.o
snd-soc-wm-adsp-objs := wm_adsp.o snd-soc-wm-adsp-objs := wm_adsp.o
...@@ -685,6 +686,7 @@ obj-$(CONFIG_SND_SOC_TWL4030) += snd-soc-twl4030.o ...@@ -685,6 +686,7 @@ obj-$(CONFIG_SND_SOC_TWL4030) += snd-soc-twl4030.o
obj-$(CONFIG_SND_SOC_TWL6040) += snd-soc-twl6040.o obj-$(CONFIG_SND_SOC_TWL6040) += snd-soc-twl6040.o
obj-$(CONFIG_SND_SOC_UDA1334) += snd-soc-uda1334.o obj-$(CONFIG_SND_SOC_UDA1334) += snd-soc-uda1334.o
obj-$(CONFIG_SND_SOC_UDA1380) += snd-soc-uda1380.o obj-$(CONFIG_SND_SOC_UDA1380) += snd-soc-uda1380.o
obj-$(CONFIG_SND_SOC_WCD_CLASSH) += snd-soc-wcd-classh.o
obj-$(CONFIG_SND_SOC_WCD_MBHC) += snd-soc-wcd-mbhc.o obj-$(CONFIG_SND_SOC_WCD_MBHC) += snd-soc-wcd-mbhc.o
obj-$(CONFIG_SND_SOC_WCD9335) += snd-soc-wcd9335.o obj-$(CONFIG_SND_SOC_WCD9335) += snd-soc-wcd9335.o
obj-$(CONFIG_SND_SOC_WCD934X) += snd-soc-wcd934x.o obj-$(CONFIG_SND_SOC_WCD934X) += snd-soc-wcd934x.o
......
...@@ -279,7 +279,7 @@ static const struct snd_kcontrol_new cs35l45_dsp_muxes[] = { ...@@ -279,7 +279,7 @@ static const struct snd_kcontrol_new cs35l45_dsp_muxes[] = {
}; };
static const struct snd_kcontrol_new cs35l45_dac_muxes[] = { static const struct snd_kcontrol_new cs35l45_dac_muxes[] = {
SOC_DAPM_ENUM("DACPCM1 Source", cs35l45_dacpcm_enums[0]), SOC_DAPM_ENUM("DACPCM Source", cs35l45_dacpcm_enums[0]),
}; };
static const struct snd_soc_dapm_widget cs35l45_dapm_widgets[] = { static const struct snd_soc_dapm_widget cs35l45_dapm_widgets[] = {
...@@ -333,7 +333,7 @@ static const struct snd_soc_dapm_widget cs35l45_dapm_widgets[] = { ...@@ -333,7 +333,7 @@ static const struct snd_soc_dapm_widget cs35l45_dapm_widgets[] = {
SND_SOC_DAPM_MUX("DSP_RX7 Source", SND_SOC_NOPM, 0, 0, &cs35l45_dsp_muxes[6]), SND_SOC_DAPM_MUX("DSP_RX7 Source", SND_SOC_NOPM, 0, 0, &cs35l45_dsp_muxes[6]),
SND_SOC_DAPM_MUX("DSP_RX8 Source", SND_SOC_NOPM, 0, 0, &cs35l45_dsp_muxes[7]), SND_SOC_DAPM_MUX("DSP_RX8 Source", SND_SOC_NOPM, 0, 0, &cs35l45_dsp_muxes[7]),
SND_SOC_DAPM_MUX("DACPCM1 Source", SND_SOC_NOPM, 0, 0, &cs35l45_dac_muxes[0]), SND_SOC_DAPM_MUX("DACPCM Source", SND_SOC_NOPM, 0, 0, &cs35l45_dac_muxes[0]),
SND_SOC_DAPM_OUT_DRV("AMP", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_OUT_DRV("AMP", SND_SOC_NOPM, 0, 0, NULL, 0),
...@@ -403,7 +403,7 @@ static const struct snd_soc_dapm_route cs35l45_dapm_routes[] = { ...@@ -403,7 +403,7 @@ static const struct snd_soc_dapm_route cs35l45_dapm_routes[] = {
{ "ASP_RX1", NULL, "ASP_EN" }, { "ASP_RX1", NULL, "ASP_EN" },
{ "ASP_RX2", NULL, "ASP_EN" }, { "ASP_RX2", NULL, "ASP_EN" },
{ "AMP", NULL, "DACPCM1 Source"}, { "AMP", NULL, "DACPCM Source"},
{ "AMP", NULL, "GLOBAL_EN"}, { "AMP", NULL, "GLOBAL_EN"},
CS35L45_DSP_MUX_ROUTE("DSP_RX1"), CS35L45_DSP_MUX_ROUTE("DSP_RX1"),
...@@ -427,7 +427,7 @@ static const struct snd_soc_dapm_route cs35l45_dapm_routes[] = { ...@@ -427,7 +427,7 @@ static const struct snd_soc_dapm_route cs35l45_dapm_routes[] = {
{"DSP1 Preload", NULL, "DSP1 Preloader"}, {"DSP1 Preload", NULL, "DSP1 Preloader"},
{"DSP1", NULL, "DSP1 Preloader"}, {"DSP1", NULL, "DSP1 Preloader"},
CS35L45_DAC_MUX_ROUTE("DACPCM1"), CS35L45_DAC_MUX_ROUTE("DACPCM"),
{ "SPK", NULL, "AMP"}, { "SPK", NULL, "AMP"},
}; };
...@@ -969,7 +969,7 @@ static irqreturn_t cs35l45_dsp_virt2_mbox_cb(int irq, void *data) ...@@ -969,7 +969,7 @@ static irqreturn_t cs35l45_dsp_virt2_mbox_cb(int irq, void *data)
ret = regmap_read(cs35l45->regmap, CS35L45_DSP_VIRT2_MBOX_3, &mbox_val); ret = regmap_read(cs35l45->regmap, CS35L45_DSP_VIRT2_MBOX_3, &mbox_val);
if (!ret && mbox_val) if (!ret && mbox_val)
ret = cs35l45_dsp_virt2_mbox3_irq_handle(cs35l45, mbox_val & CS35L45_MBOX3_CMD_MASK, cs35l45_dsp_virt2_mbox3_irq_handle(cs35l45, mbox_val & CS35L45_MBOX3_CMD_MASK,
(mbox_val & CS35L45_MBOX3_DATA_MASK) >> CS35L45_MBOX3_DATA_SHIFT); (mbox_val & CS35L45_MBOX3_DATA_MASK) >> CS35L45_MBOX3_DATA_SHIFT);
/* Handle DSP trace log IRQ */ /* Handle DSP trace log IRQ */
...@@ -1078,6 +1078,7 @@ static int cs35l45_initialize(struct cs35l45_private *cs35l45) ...@@ -1078,6 +1078,7 @@ static int cs35l45_initialize(struct cs35l45_private *cs35l45)
switch (dev_id[0]) { switch (dev_id[0]) {
case 0x35A450: case 0x35A450:
case 0x35A460:
break; break;
default: default:
dev_err(cs35l45->dev, "Bad DEVID 0x%x\n", dev_id[0]); dev_err(cs35l45->dev, "Bad DEVID 0x%x\n", dev_id[0]);
......
...@@ -243,26 +243,27 @@ int cs35l56_wait_for_firmware_boot(struct cs35l56_base *cs35l56_base) ...@@ -243,26 +243,27 @@ int cs35l56_wait_for_firmware_boot(struct cs35l56_base *cs35l56_base)
{ {
unsigned int reg; unsigned int reg;
unsigned int val; unsigned int val;
int ret; int read_ret, poll_ret;
if (cs35l56_base->rev < CS35L56_REVID_B0) if (cs35l56_base->rev < CS35L56_REVID_B0)
reg = CS35L56_DSP1_HALO_STATE_A1; reg = CS35L56_DSP1_HALO_STATE_A1;
else else
reg = CS35L56_DSP1_HALO_STATE; reg = CS35L56_DSP1_HALO_STATE;
ret = regmap_read_poll_timeout(cs35l56_base->regmap, reg, /*
val, * This can't be a regmap_read_poll_timeout() because cs35l56 will NAK
* I2C until it has booted which would terminate the poll
*/
poll_ret = read_poll_timeout(regmap_read, read_ret,
(val < 0xFFFF) && (val >= CS35L56_HALO_STATE_BOOT_DONE), (val < 0xFFFF) && (val >= CS35L56_HALO_STATE_BOOT_DONE),
CS35L56_HALO_STATE_POLL_US, CS35L56_HALO_STATE_POLL_US,
CS35L56_HALO_STATE_TIMEOUT_US); CS35L56_HALO_STATE_TIMEOUT_US,
false,
if ((ret < 0) && (ret != -ETIMEDOUT)) { cs35l56_base->regmap, reg, &val);
dev_err(cs35l56_base->dev, "Failed to read HALO_STATE: %d\n", ret);
return ret;
}
if ((ret == -ETIMEDOUT) || (val != CS35L56_HALO_STATE_BOOT_DONE)) { if (poll_ret) {
dev_err(cs35l56_base->dev, "Firmware boot fail: HALO_STATE=%#x\n", val); dev_err(cs35l56_base->dev, "Firmware boot timed out(%d): HALO_STATE=%#x\n",
read_ret, val);
return -EIO; return -EIO;
} }
......
...@@ -2205,7 +2205,8 @@ static int cs42l43_codec_probe(struct platform_device *pdev) ...@@ -2205,7 +2205,8 @@ static int cs42l43_codec_probe(struct platform_device *pdev)
// Don't use devm as we need to get against the MFD device // Don't use devm as we need to get against the MFD device
priv->mclk = clk_get_optional(cs42l43->dev, "mclk"); priv->mclk = clk_get_optional(cs42l43->dev, "mclk");
if (IS_ERR(priv->mclk)) { if (IS_ERR(priv->mclk)) {
dev_err_probe(priv->dev, PTR_ERR(priv->mclk), "Failed to get mclk\n"); ret = PTR_ERR(priv->mclk);
dev_err_probe(priv->dev, ret, "Failed to get mclk\n");
goto err_pm; goto err_pm;
} }
......
...@@ -3269,13 +3269,17 @@ static int rt5645_component_set_jack(struct snd_soc_component *component, ...@@ -3269,13 +3269,17 @@ static int rt5645_component_set_jack(struct snd_soc_component *component,
{ {
struct snd_soc_jack *mic_jack = NULL; struct snd_soc_jack *mic_jack = NULL;
struct snd_soc_jack *btn_jack = NULL; struct snd_soc_jack *btn_jack = NULL;
int *type = (int *)data; int type;
if (*type & SND_JACK_MICROPHONE) if (hs_jack) {
type = *(int *)data;
if (type & SND_JACK_MICROPHONE)
mic_jack = hs_jack; mic_jack = hs_jack;
if (*type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 | if (type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 |
SND_JACK_BTN_2 | SND_JACK_BTN_3)) SND_JACK_BTN_2 | SND_JACK_BTN_3))
btn_jack = hs_jack; btn_jack = hs_jack;
}
return rt5645_set_jack_detect(component, hs_jack, mic_jack, btn_jack); return rt5645_set_jack_detect(component, hs_jack, mic_jack, btn_jack);
} }
......
...@@ -355,6 +355,7 @@ void wcd_clsh_set_hph_mode(struct wcd_clsh_ctrl *ctrl, int mode) ...@@ -355,6 +355,7 @@ void wcd_clsh_set_hph_mode(struct wcd_clsh_ctrl *ctrl, int mode)
wcd_clsh_v2_set_hph_mode(comp, mode); wcd_clsh_v2_set_hph_mode(comp, mode);
} }
EXPORT_SYMBOL_GPL(wcd_clsh_set_hph_mode);
static void wcd_clsh_set_flyback_current(struct snd_soc_component *comp, static void wcd_clsh_set_flyback_current(struct snd_soc_component *comp,
int mode) int mode)
...@@ -869,11 +870,13 @@ int wcd_clsh_ctrl_set_state(struct wcd_clsh_ctrl *ctrl, ...@@ -869,11 +870,13 @@ int wcd_clsh_ctrl_set_state(struct wcd_clsh_ctrl *ctrl,
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(wcd_clsh_ctrl_set_state);
int wcd_clsh_ctrl_get_state(struct wcd_clsh_ctrl *ctrl) int wcd_clsh_ctrl_get_state(struct wcd_clsh_ctrl *ctrl)
{ {
return ctrl->state; return ctrl->state;
} }
EXPORT_SYMBOL_GPL(wcd_clsh_ctrl_get_state);
struct wcd_clsh_ctrl *wcd_clsh_ctrl_alloc(struct snd_soc_component *comp, struct wcd_clsh_ctrl *wcd_clsh_ctrl_alloc(struct snd_soc_component *comp,
int version) int version)
...@@ -890,8 +893,13 @@ struct wcd_clsh_ctrl *wcd_clsh_ctrl_alloc(struct snd_soc_component *comp, ...@@ -890,8 +893,13 @@ struct wcd_clsh_ctrl *wcd_clsh_ctrl_alloc(struct snd_soc_component *comp,
return ctrl; return ctrl;
} }
EXPORT_SYMBOL_GPL(wcd_clsh_ctrl_alloc);
void wcd_clsh_ctrl_free(struct wcd_clsh_ctrl *ctrl) void wcd_clsh_ctrl_free(struct wcd_clsh_ctrl *ctrl)
{ {
kfree(ctrl); kfree(ctrl);
} }
EXPORT_SYMBOL_GPL(wcd_clsh_ctrl_free);
MODULE_DESCRIPTION("WCD93XX Class-H driver");
MODULE_LICENSE("GPL");
...@@ -796,6 +796,28 @@ static int avs_component_probe(struct snd_soc_component *component) ...@@ -796,6 +796,28 @@ static int avs_component_probe(struct snd_soc_component *component)
ret = avs_load_topology(component, filename); ret = avs_load_topology(component, filename);
kfree(filename); kfree(filename);
if (ret == -ENOENT && !strncmp(mach->tplg_filename, "hda-", 4)) {
unsigned int vendor_id;
if (sscanf(mach->tplg_filename, "hda-%08x-tplg.bin", &vendor_id) != 1)
return ret;
if (((vendor_id >> 16) & 0xFFFF) == 0x8086)
mach->tplg_filename = devm_kasprintf(adev->dev, GFP_KERNEL,
"hda-8086-generic-tplg.bin");
else
mach->tplg_filename = devm_kasprintf(adev->dev, GFP_KERNEL,
"hda-generic-tplg.bin");
filename = kasprintf(GFP_KERNEL, "%s/%s", component->driver->topology_name_prefix,
mach->tplg_filename);
if (!filename)
return -ENOMEM;
dev_info(card->dev, "trying to load fallback topology %s\n", mach->tplg_filename);
ret = avs_load_topology(component, filename);
kfree(filename);
}
if (ret < 0) if (ret < 0)
return ret; return ret;
......
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