Commit ace105dd authored by Mark Brown's avatar Mark Brown

Merge series "ASoC: Fix dependency issues of SND_SOC" from Wei Li <liwei391@huawei.com>:

Fix dependency issues of SND_SOC introduced by commit ea00d952
("ASoC: Use imply for SND_SOC_ALL_CODECS").

Wei Li (2):
  ASoC: wm89xx: Fix build errors caused by I2C dependency
  ASoC: Fix wrong dependency of da7210 and wm8983

 sound/soc/codecs/Kconfig | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

--
2.17.1
parents 8ec7d604 c1c050ee
...@@ -717,7 +717,7 @@ config SND_SOC_L3 ...@@ -717,7 +717,7 @@ config SND_SOC_L3
config SND_SOC_DA7210 config SND_SOC_DA7210
tristate tristate
depends on I2C depends on SND_SOC_I2C_AND_SPI
config SND_SOC_DA7213 config SND_SOC_DA7213
tristate "Dialog DA7213 CODEC" tristate "Dialog DA7213 CODEC"
...@@ -1525,6 +1525,7 @@ config SND_SOC_WM8804_SPI ...@@ -1525,6 +1525,7 @@ config SND_SOC_WM8804_SPI
config SND_SOC_WM8900 config SND_SOC_WM8900
tristate tristate
depends on SND_SOC_I2C_AND_SPI
config SND_SOC_WM8903 config SND_SOC_WM8903
tristate "Wolfson Microelectronics WM8903 CODEC" tristate "Wolfson Microelectronics WM8903 CODEC"
...@@ -1568,7 +1569,7 @@ config SND_SOC_WM8978 ...@@ -1568,7 +1569,7 @@ config SND_SOC_WM8978
config SND_SOC_WM8983 config SND_SOC_WM8983
tristate tristate
depends on I2C depends on SND_SOC_I2C_AND_SPI
config SND_SOC_WM8985 config SND_SOC_WM8985
tristate "Wolfson Microelectronics WM8985 and WM8758 codec driver" tristate "Wolfson Microelectronics WM8985 and WM8758 codec driver"
...@@ -1576,6 +1577,7 @@ config SND_SOC_WM8985 ...@@ -1576,6 +1577,7 @@ config SND_SOC_WM8985
config SND_SOC_WM8988 config SND_SOC_WM8988
tristate tristate
depends on SND_SOC_I2C_AND_SPI
config SND_SOC_WM8990 config SND_SOC_WM8990
tristate tristate
...@@ -1594,6 +1596,7 @@ config SND_SOC_WM8994 ...@@ -1594,6 +1596,7 @@ config SND_SOC_WM8994
config SND_SOC_WM8995 config SND_SOC_WM8995
tristate tristate
depends on SND_SOC_I2C_AND_SPI
config SND_SOC_WM8996 config SND_SOC_WM8996
tristate tristate
......
...@@ -142,14 +142,14 @@ static struct hdac_hdmi_pcm * ...@@ -142,14 +142,14 @@ static struct hdac_hdmi_pcm *
hdac_hdmi_get_pcm_from_cvt(struct hdac_hdmi_priv *hdmi, hdac_hdmi_get_pcm_from_cvt(struct hdac_hdmi_priv *hdmi,
struct hdac_hdmi_cvt *cvt) struct hdac_hdmi_cvt *cvt)
{ {
struct hdac_hdmi_pcm *pcm = NULL; struct hdac_hdmi_pcm *pcm;
list_for_each_entry(pcm, &hdmi->pcm_list, head) { list_for_each_entry(pcm, &hdmi->pcm_list, head) {
if (pcm->cvt == cvt) if (pcm->cvt == cvt)
break; return pcm;
} }
return pcm; return NULL;
} }
static void hdac_hdmi_jack_report(struct hdac_hdmi_pcm *pcm, static void hdac_hdmi_jack_report(struct hdac_hdmi_pcm *pcm,
......
...@@ -338,8 +338,10 @@ static int axg_card_add_link(struct snd_soc_card *card, struct device_node *np, ...@@ -338,8 +338,10 @@ static int axg_card_add_link(struct snd_soc_card *card, struct device_node *np,
if (axg_card_cpu_is_tdm_iface(dai_link->cpus->of_node)) if (axg_card_cpu_is_tdm_iface(dai_link->cpus->of_node))
ret = axg_card_parse_tdm(card, np, index); ret = axg_card_parse_tdm(card, np, index);
else if (axg_card_cpu_is_codec(dai_link->cpus->of_node)) else if (axg_card_cpu_is_codec(dai_link->cpus->of_node)) {
dai_link->params = &codec_params; dai_link->params = &codec_params;
dai_link->no_pcm = 0; /* link is not a DPCM BE */
}
return ret; return ret;
} }
......
...@@ -108,8 +108,10 @@ static int gx_card_add_link(struct snd_soc_card *card, struct device_node *np, ...@@ -108,8 +108,10 @@ static int gx_card_add_link(struct snd_soc_card *card, struct device_node *np,
ret = gx_card_parse_i2s(card, np, index); ret = gx_card_parse_i2s(card, np, index);
/* Or apply codec to codec params if necessary */ /* Or apply codec to codec params if necessary */
else if (gx_card_cpu_identify(dai_link->cpus, "CODEC CTRL")) else if (gx_card_cpu_identify(dai_link->cpus, "CODEC CTRL")) {
dai_link->params = &codec_params; dai_link->params = &codec_params;
dai_link->no_pcm = 0; /* link is not a DPCM BE */
}
return ret; return ret;
} }
......
...@@ -594,10 +594,16 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod, ...@@ -594,10 +594,16 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod,
* Capture: It might not receave data. Do nothing * Capture: It might not receave data. Do nothing
*/ */
if (rsnd_io_is_play(io)) { if (rsnd_io_is_play(io)) {
rsnd_mod_write(mod, SSICR, cr | EN); rsnd_mod_write(mod, SSICR, cr | ssi->cr_en);
rsnd_ssi_status_check(mod, DIRQ); rsnd_ssi_status_check(mod, DIRQ);
} }
/* In multi-SSI mode, stop is performed by setting ssi0129 in
* SSI_CONTROL to 0 (in rsnd_ssio_stop_gen2). Do nothing here.
*/
if (rsnd_ssi_multi_slaves_runtime(io))
return 0;
/* /*
* disable SSI, * disable SSI,
* and, wait idle state * and, wait idle state
...@@ -737,6 +743,9 @@ static void rsnd_ssi_parent_attach(struct rsnd_mod *mod, ...@@ -737,6 +743,9 @@ static void rsnd_ssi_parent_attach(struct rsnd_mod *mod,
if (!rsnd_rdai_is_clk_master(rdai)) if (!rsnd_rdai_is_clk_master(rdai))
return; return;
if (rsnd_ssi_is_multi_slave(mod, io))
return;
switch (rsnd_mod_id(mod)) { switch (rsnd_mod_id(mod)) {
case 1: case 1:
case 2: case 2:
......
...@@ -221,7 +221,7 @@ static int rsnd_ssiu_init_gen2(struct rsnd_mod *mod, ...@@ -221,7 +221,7 @@ static int rsnd_ssiu_init_gen2(struct rsnd_mod *mod,
i; i;
for_each_rsnd_mod_array(i, pos, io, rsnd_ssi_array) { for_each_rsnd_mod_array(i, pos, io, rsnd_ssi_array) {
shift = (i * 4) + 16; shift = (i * 4) + 20;
val = (val & ~(0xF << shift)) | val = (val & ~(0xF << shift)) |
rsnd_mod_id(pos) << shift; rsnd_mod_id(pos) << shift;
} }
......
...@@ -423,7 +423,7 @@ static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget, ...@@ -423,7 +423,7 @@ static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget,
memset(&template, 0, sizeof(template)); memset(&template, 0, sizeof(template));
template.reg = e->reg; template.reg = e->reg;
template.mask = e->mask << e->shift_l; template.mask = e->mask;
template.shift = e->shift_l; template.shift = e->shift_l;
template.off_val = snd_soc_enum_item_to_val(e, 0); template.off_val = snd_soc_enum_item_to_val(e, 0);
template.on_val = template.off_val; template.on_val = template.off_val;
...@@ -546,8 +546,22 @@ static bool dapm_kcontrol_set_value(const struct snd_kcontrol *kcontrol, ...@@ -546,8 +546,22 @@ static bool dapm_kcontrol_set_value(const struct snd_kcontrol *kcontrol,
if (data->value == value) if (data->value == value)
return false; return false;
if (data->widget) if (data->widget) {
switch (dapm_kcontrol_get_wlist(kcontrol)->widgets[0]->id) {
case snd_soc_dapm_switch:
case snd_soc_dapm_mixer:
case snd_soc_dapm_mixer_named_ctl:
data->widget->on_val = value & data->widget->mask;
break;
case snd_soc_dapm_demux:
case snd_soc_dapm_mux:
data->widget->on_val = value >> data->widget->shift;
break;
default:
data->widget->on_val = value; data->widget->on_val = value;
break;
}
}
data->value = value; data->value = value;
......
...@@ -567,9 +567,25 @@ static void bdw_set_mach_params(const struct snd_soc_acpi_mach *mach, ...@@ -567,9 +567,25 @@ static void bdw_set_mach_params(const struct snd_soc_acpi_mach *mach,
static struct snd_soc_dai_driver bdw_dai[] = { static struct snd_soc_dai_driver bdw_dai[] = {
{ {
.name = "ssp0-port", .name = "ssp0-port",
.playback = {
.channels_min = 1,
.channels_max = 8,
},
.capture = {
.channels_min = 1,
.channels_max = 8,
},
}, },
{ {
.name = "ssp1-port", .name = "ssp1-port",
.playback = {
.channels_min = 1,
.channels_max = 8,
},
.capture = {
.channels_min = 1,
.channels_max = 8,
},
}, },
}; };
......
...@@ -459,21 +459,69 @@ static void byt_set_mach_params(const struct snd_soc_acpi_mach *mach, ...@@ -459,21 +459,69 @@ static void byt_set_mach_params(const struct snd_soc_acpi_mach *mach,
static struct snd_soc_dai_driver byt_dai[] = { static struct snd_soc_dai_driver byt_dai[] = {
{ {
.name = "ssp0-port", .name = "ssp0-port",
.playback = {
.channels_min = 1,
.channels_max = 8,
},
.capture = {
.channels_min = 1,
.channels_max = 8,
},
}, },
{ {
.name = "ssp1-port", .name = "ssp1-port",
.playback = {
.channels_min = 1,
.channels_max = 8,
},
.capture = {
.channels_min = 1,
.channels_max = 8,
},
}, },
{ {
.name = "ssp2-port", .name = "ssp2-port",
.playback = {
.channels_min = 1,
.channels_max = 8,
},
.capture = {
.channels_min = 1,
.channels_max = 8,
}
}, },
{ {
.name = "ssp3-port", .name = "ssp3-port",
.playback = {
.channels_min = 1,
.channels_max = 8,
},
.capture = {
.channels_min = 1,
.channels_max = 8,
},
}, },
{ {
.name = "ssp4-port", .name = "ssp4-port",
.playback = {
.channels_min = 1,
.channels_max = 8,
},
.capture = {
.channels_min = 1,
.channels_max = 8,
},
}, },
{ {
.name = "ssp5-port", .name = "ssp5-port",
.playback = {
.channels_min = 1,
.channels_max = 8,
},
.capture = {
.channels_min = 1,
.channels_max = 8,
},
}, },
}; };
......
...@@ -1547,6 +1547,9 @@ static int stm32_sai_sub_probe(struct platform_device *pdev) ...@@ -1547,6 +1547,9 @@ static int stm32_sai_sub_probe(struct platform_device *pdev)
return ret; return ret;
} }
if (STM_SAI_PROTOCOL_IS_SPDIF(sai))
conf = &stm32_sai_pcm_config_spdif;
ret = snd_dmaengine_pcm_register(&pdev->dev, conf, 0); ret = snd_dmaengine_pcm_register(&pdev->dev, conf, 0);
if (ret) { if (ret) {
if (ret != -EPROBE_DEFER) if (ret != -EPROBE_DEFER)
...@@ -1556,15 +1559,10 @@ static int stm32_sai_sub_probe(struct platform_device *pdev) ...@@ -1556,15 +1559,10 @@ static int stm32_sai_sub_probe(struct platform_device *pdev)
ret = snd_soc_register_component(&pdev->dev, &stm32_component, ret = snd_soc_register_component(&pdev->dev, &stm32_component,
&sai->cpu_dai_drv, 1); &sai->cpu_dai_drv, 1);
if (ret) { if (ret)
snd_dmaengine_pcm_unregister(&pdev->dev); snd_dmaengine_pcm_unregister(&pdev->dev);
return ret;
}
if (STM_SAI_PROTOCOL_IS_SPDIF(sai))
conf = &stm32_sai_pcm_config_spdif;
return 0; return ret;
} }
static int stm32_sai_sub_remove(struct platform_device *pdev) static int stm32_sai_sub_remove(struct platform_device *pdev)
......
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