mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
ASoC: codecs: wcd937x: add audio routing and Kconfig
This patch adds audio routing for both playback and capture and Makefile and Kconfigs changes for wcd937x. Signed-off-by: Prasad Kumpatla <quic_pkumpatl@quicinc.com> Co-developed-by: Mohammad Rafi Shaik <quic_mohs@quicinc.com> Signed-off-by: Mohammad Rafi Shaik <quic_mohs@quicinc.com> Link: https://lore.kernel.org/r/20240524035535.3119208-8-quic_mohs@quicinc.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
8ee78493be
commit
313e978df7
3 changed files with 107 additions and 0 deletions
|
@ -279,6 +279,7 @@ config SND_SOC_ALL_CODECS
|
|||
imply SND_SOC_UDA1380
|
||||
imply SND_SOC_WCD9335
|
||||
imply SND_SOC_WCD934X
|
||||
imply SND_SOC_WCD937X_SDW
|
||||
imply SND_SOC_WCD938X_SDW
|
||||
imply SND_SOC_WCD939X_SDW
|
||||
imply SND_SOC_LPASS_MACRO_COMMON
|
||||
|
@ -2111,6 +2112,25 @@ config SND_SOC_WCD934X
|
|||
The WCD9340/9341 is a audio codec IC Integrated in
|
||||
Qualcomm SoCs like SDM845.
|
||||
|
||||
config SND_SOC_WCD937X
|
||||
depends on SND_SOC_WCD937X_SDW
|
||||
tristate
|
||||
depends on SOUNDWIRE || !SOUNDWIRE
|
||||
select SND_SOC_WCD_CLASSH
|
||||
|
||||
config SND_SOC_WCD937X_SDW
|
||||
tristate "WCD9370/WCD9375 Codec - SDW"
|
||||
select SND_SOC_WCD937X
|
||||
select SND_SOC_WCD_MBHC
|
||||
select REGMAP_IRQ
|
||||
depends on SOUNDWIRE
|
||||
select REGMAP_SOUNDWIRE
|
||||
help
|
||||
The WCD9370/9375 is an audio codec IC used with SoCs
|
||||
like SC7280 or QCM6490 chipsets, and it connected
|
||||
via soundwire.
|
||||
To compile this codec driver say Y or m.
|
||||
|
||||
config SND_SOC_WCD938X
|
||||
depends on SND_SOC_WCD938X_SDW
|
||||
tristate
|
||||
|
|
|
@ -318,6 +318,8 @@ snd-soc-wcd-classh-y := wcd-clsh-v2.o
|
|||
snd-soc-wcd-mbhc-y := wcd-mbhc-v2.o
|
||||
snd-soc-wcd9335-y := wcd9335.o
|
||||
snd-soc-wcd934x-y := wcd934x.o
|
||||
snd-soc-wcd937x-objs := wcd937x.o
|
||||
snd-soc-wcd937x-sdw-objs := wcd937x-sdw.o
|
||||
snd-soc-wcd938x-y := wcd938x.o
|
||||
snd-soc-wcd938x-sdw-y := wcd938x-sdw.o
|
||||
snd-soc-wcd939x-y := wcd939x.o
|
||||
|
@ -714,6 +716,11 @@ 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_WCD9335) += snd-soc-wcd9335.o
|
||||
obj-$(CONFIG_SND_SOC_WCD934X) += snd-soc-wcd934x.o
|
||||
obj-$(CONFIG_SND_SOC_WCD937X) += snd-soc-wcd937x.o
|
||||
ifdef CONFIG_SND_SOC_WCD937X_SDW
|
||||
# avoid link failure by forcing sdw code built-in when needed
|
||||
obj-$(CONFIG_SND_SOC_WCD937X) += snd-soc-wcd937x-sdw.o
|
||||
endif
|
||||
obj-$(CONFIG_SND_SOC_WCD938X) += snd-soc-wcd938x.o
|
||||
ifdef CONFIG_SND_SOC_WCD938X_SDW
|
||||
# avoid link failure by forcing sdw code built-in when needed
|
||||
|
|
|
@ -2409,6 +2409,77 @@ static const struct snd_soc_dapm_widget wcd9375_dapm_widgets[] = {
|
|||
SND_SOC_DAPM_OUTPUT("DMIC6_OUTPUT"),
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_route wcd937x_audio_map[] = {
|
||||
{ "ADC1_OUTPUT", NULL, "ADC1_MIXER" },
|
||||
{ "ADC1_MIXER", "Switch", "ADC1 REQ" },
|
||||
{ "ADC1 REQ", NULL, "ADC1" },
|
||||
{ "ADC1", NULL, "AMIC1" },
|
||||
|
||||
{ "ADC2_OUTPUT", NULL, "ADC2_MIXER" },
|
||||
{ "ADC2_MIXER", "Switch", "ADC2 REQ" },
|
||||
{ "ADC2 REQ", NULL, "ADC2" },
|
||||
{ "ADC2", NULL, "ADC2 MUX" },
|
||||
{ "ADC2 MUX", "INP3", "AMIC3" },
|
||||
{ "ADC2 MUX", "INP2", "AMIC2" },
|
||||
|
||||
{ "IN1_HPHL", NULL, "VDD_BUCK" },
|
||||
{ "IN1_HPHL", NULL, "CLS_H_PORT" },
|
||||
{ "RX1", NULL, "IN1_HPHL" },
|
||||
{ "RDAC1", NULL, "RX1" },
|
||||
{ "HPHL_RDAC", "Switch", "RDAC1" },
|
||||
{ "HPHL PGA", NULL, "HPHL_RDAC" },
|
||||
{ "HPHL", NULL, "HPHL PGA" },
|
||||
|
||||
{ "IN2_HPHR", NULL, "VDD_BUCK" },
|
||||
{ "IN2_HPHR", NULL, "CLS_H_PORT" },
|
||||
{ "RX2", NULL, "IN2_HPHR" },
|
||||
{ "RDAC2", NULL, "RX2" },
|
||||
{ "HPHR_RDAC", "Switch", "RDAC2" },
|
||||
{ "HPHR PGA", NULL, "HPHR_RDAC" },
|
||||
{ "HPHR", NULL, "HPHR PGA" },
|
||||
|
||||
{ "IN3_AUX", NULL, "VDD_BUCK" },
|
||||
{ "IN3_AUX", NULL, "CLS_H_PORT" },
|
||||
{ "RX3", NULL, "IN3_AUX" },
|
||||
{ "RDAC4", NULL, "RX3" },
|
||||
{ "AUX_RDAC", "Switch", "RDAC4" },
|
||||
{ "AUX PGA", NULL, "AUX_RDAC" },
|
||||
{ "AUX", NULL, "AUX PGA" },
|
||||
|
||||
{ "RDAC3_MUX", "RX3", "RX3" },
|
||||
{ "RDAC3_MUX", "RX1", "RX1" },
|
||||
{ "RDAC3", NULL, "RDAC3_MUX" },
|
||||
{ "EAR_RDAC", "Switch", "RDAC3" },
|
||||
{ "EAR PGA", NULL, "EAR_RDAC" },
|
||||
{ "EAR", NULL, "EAR PGA" },
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_route wcd9375_audio_map[] = {
|
||||
{ "ADC3_OUTPUT", NULL, "ADC3_MIXER" },
|
||||
{ "ADC3_OUTPUT", NULL, "ADC3_MIXER" },
|
||||
{ "ADC3_MIXER", "Switch", "ADC3 REQ" },
|
||||
{ "ADC3 REQ", NULL, "ADC3" },
|
||||
{ "ADC3", NULL, "AMIC4" },
|
||||
|
||||
{ "DMIC1_OUTPUT", NULL, "DMIC1_MIXER" },
|
||||
{ "DMIC1_MIXER", "Switch", "DMIC1" },
|
||||
|
||||
{ "DMIC2_OUTPUT", NULL, "DMIC2_MIXER" },
|
||||
{ "DMIC2_MIXER", "Switch", "DMIC2" },
|
||||
|
||||
{ "DMIC3_OUTPUT", NULL, "DMIC3_MIXER" },
|
||||
{ "DMIC3_MIXER", "Switch", "DMIC3" },
|
||||
|
||||
{ "DMIC4_OUTPUT", NULL, "DMIC4_MIXER" },
|
||||
{ "DMIC4_MIXER", "Switch", "DMIC4" },
|
||||
|
||||
{ "DMIC5_OUTPUT", NULL, "DMIC5_MIXER" },
|
||||
{ "DMIC5_MIXER", "Switch", "DMIC5" },
|
||||
|
||||
{ "DMIC6_OUTPUT", NULL, "DMIC6_MIXER" },
|
||||
{ "DMIC6_MIXER", "Switch", "DMIC6" },
|
||||
};
|
||||
|
||||
static int wcd937x_set_micbias_data(struct wcd937x_priv *wcd937x)
|
||||
{
|
||||
int vout_ctl[3];
|
||||
|
@ -2545,6 +2616,13 @@ static int wcd937x_soc_codec_probe(struct snd_soc_component *component)
|
|||
dev_err(component->dev, "Failed to add snd_ctls\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = snd_soc_dapm_add_routes(dapm, wcd9375_audio_map,
|
||||
ARRAY_SIZE(wcd9375_audio_map));
|
||||
if (ret < 0) {
|
||||
dev_err(component->dev, "Failed to add routes\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
ret = wcd937x_mbhc_init(component);
|
||||
|
@ -2588,6 +2666,8 @@ static const struct snd_soc_component_driver soc_codec_dev_wcd937x = {
|
|||
.num_controls = ARRAY_SIZE(wcd937x_snd_controls),
|
||||
.dapm_widgets = wcd937x_dapm_widgets,
|
||||
.num_dapm_widgets = ARRAY_SIZE(wcd937x_dapm_widgets),
|
||||
.dapm_routes = wcd937x_audio_map,
|
||||
.num_dapm_routes = ARRAY_SIZE(wcd937x_audio_map),
|
||||
.set_jack = wcd937x_codec_set_jack,
|
||||
.endianness = 1,
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue