Skip to content

Commit 313e978

Browse files
Prasad Kumpatlabroonie
authored andcommitted
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>
1 parent 8ee7849 commit 313e978

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-0
lines changed

sound/soc/codecs/Kconfig

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ config SND_SOC_ALL_CODECS
279279
imply SND_SOC_UDA1380
280280
imply SND_SOC_WCD9335
281281
imply SND_SOC_WCD934X
282+
imply SND_SOC_WCD937X_SDW
282283
imply SND_SOC_WCD938X_SDW
283284
imply SND_SOC_WCD939X_SDW
284285
imply SND_SOC_LPASS_MACRO_COMMON
@@ -2111,6 +2112,25 @@ config SND_SOC_WCD934X
21112112
The WCD9340/9341 is a audio codec IC Integrated in
21122113
Qualcomm SoCs like SDM845.
21132114

2115+
config SND_SOC_WCD937X
2116+
depends on SND_SOC_WCD937X_SDW
2117+
tristate
2118+
depends on SOUNDWIRE || !SOUNDWIRE
2119+
select SND_SOC_WCD_CLASSH
2120+
2121+
config SND_SOC_WCD937X_SDW
2122+
tristate "WCD9370/WCD9375 Codec - SDW"
2123+
select SND_SOC_WCD937X
2124+
select SND_SOC_WCD_MBHC
2125+
select REGMAP_IRQ
2126+
depends on SOUNDWIRE
2127+
select REGMAP_SOUNDWIRE
2128+
help
2129+
The WCD9370/9375 is an audio codec IC used with SoCs
2130+
like SC7280 or QCM6490 chipsets, and it connected
2131+
via soundwire.
2132+
To compile this codec driver say Y or m.
2133+
21142134
config SND_SOC_WCD938X
21152135
depends on SND_SOC_WCD938X_SDW
21162136
tristate

sound/soc/codecs/Makefile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,8 @@ snd-soc-wcd-classh-y := wcd-clsh-v2.o
318318
snd-soc-wcd-mbhc-y := wcd-mbhc-v2.o
319319
snd-soc-wcd9335-y := wcd9335.o
320320
snd-soc-wcd934x-y := wcd934x.o
321+
snd-soc-wcd937x-objs := wcd937x.o
322+
snd-soc-wcd937x-sdw-objs := wcd937x-sdw.o
321323
snd-soc-wcd938x-y := wcd938x.o
322324
snd-soc-wcd938x-sdw-y := wcd938x-sdw.o
323325
snd-soc-wcd939x-y := wcd939x.o
@@ -714,6 +716,11 @@ obj-$(CONFIG_SND_SOC_WCD_CLASSH) += snd-soc-wcd-classh.o
714716
obj-$(CONFIG_SND_SOC_WCD_MBHC) += snd-soc-wcd-mbhc.o
715717
obj-$(CONFIG_SND_SOC_WCD9335) += snd-soc-wcd9335.o
716718
obj-$(CONFIG_SND_SOC_WCD934X) += snd-soc-wcd934x.o
719+
obj-$(CONFIG_SND_SOC_WCD937X) += snd-soc-wcd937x.o
720+
ifdef CONFIG_SND_SOC_WCD937X_SDW
721+
# avoid link failure by forcing sdw code built-in when needed
722+
obj-$(CONFIG_SND_SOC_WCD937X) += snd-soc-wcd937x-sdw.o
723+
endif
717724
obj-$(CONFIG_SND_SOC_WCD938X) += snd-soc-wcd938x.o
718725
ifdef CONFIG_SND_SOC_WCD938X_SDW
719726
# avoid link failure by forcing sdw code built-in when needed

sound/soc/codecs/wcd937x.c

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2409,6 +2409,77 @@ static const struct snd_soc_dapm_widget wcd9375_dapm_widgets[] = {
24092409
SND_SOC_DAPM_OUTPUT("DMIC6_OUTPUT"),
24102410
};
24112411

2412+
static const struct snd_soc_dapm_route wcd937x_audio_map[] = {
2413+
{ "ADC1_OUTPUT", NULL, "ADC1_MIXER" },
2414+
{ "ADC1_MIXER", "Switch", "ADC1 REQ" },
2415+
{ "ADC1 REQ", NULL, "ADC1" },
2416+
{ "ADC1", NULL, "AMIC1" },
2417+
2418+
{ "ADC2_OUTPUT", NULL, "ADC2_MIXER" },
2419+
{ "ADC2_MIXER", "Switch", "ADC2 REQ" },
2420+
{ "ADC2 REQ", NULL, "ADC2" },
2421+
{ "ADC2", NULL, "ADC2 MUX" },
2422+
{ "ADC2 MUX", "INP3", "AMIC3" },
2423+
{ "ADC2 MUX", "INP2", "AMIC2" },
2424+
2425+
{ "IN1_HPHL", NULL, "VDD_BUCK" },
2426+
{ "IN1_HPHL", NULL, "CLS_H_PORT" },
2427+
{ "RX1", NULL, "IN1_HPHL" },
2428+
{ "RDAC1", NULL, "RX1" },
2429+
{ "HPHL_RDAC", "Switch", "RDAC1" },
2430+
{ "HPHL PGA", NULL, "HPHL_RDAC" },
2431+
{ "HPHL", NULL, "HPHL PGA" },
2432+
2433+
{ "IN2_HPHR", NULL, "VDD_BUCK" },
2434+
{ "IN2_HPHR", NULL, "CLS_H_PORT" },
2435+
{ "RX2", NULL, "IN2_HPHR" },
2436+
{ "RDAC2", NULL, "RX2" },
2437+
{ "HPHR_RDAC", "Switch", "RDAC2" },
2438+
{ "HPHR PGA", NULL, "HPHR_RDAC" },
2439+
{ "HPHR", NULL, "HPHR PGA" },
2440+
2441+
{ "IN3_AUX", NULL, "VDD_BUCK" },
2442+
{ "IN3_AUX", NULL, "CLS_H_PORT" },
2443+
{ "RX3", NULL, "IN3_AUX" },
2444+
{ "RDAC4", NULL, "RX3" },
2445+
{ "AUX_RDAC", "Switch", "RDAC4" },
2446+
{ "AUX PGA", NULL, "AUX_RDAC" },
2447+
{ "AUX", NULL, "AUX PGA" },
2448+
2449+
{ "RDAC3_MUX", "RX3", "RX3" },
2450+
{ "RDAC3_MUX", "RX1", "RX1" },
2451+
{ "RDAC3", NULL, "RDAC3_MUX" },
2452+
{ "EAR_RDAC", "Switch", "RDAC3" },
2453+
{ "EAR PGA", NULL, "EAR_RDAC" },
2454+
{ "EAR", NULL, "EAR PGA" },
2455+
};
2456+
2457+
static const struct snd_soc_dapm_route wcd9375_audio_map[] = {
2458+
{ "ADC3_OUTPUT", NULL, "ADC3_MIXER" },
2459+
{ "ADC3_OUTPUT", NULL, "ADC3_MIXER" },
2460+
{ "ADC3_MIXER", "Switch", "ADC3 REQ" },
2461+
{ "ADC3 REQ", NULL, "ADC3" },
2462+
{ "ADC3", NULL, "AMIC4" },
2463+
2464+
{ "DMIC1_OUTPUT", NULL, "DMIC1_MIXER" },
2465+
{ "DMIC1_MIXER", "Switch", "DMIC1" },
2466+
2467+
{ "DMIC2_OUTPUT", NULL, "DMIC2_MIXER" },
2468+
{ "DMIC2_MIXER", "Switch", "DMIC2" },
2469+
2470+
{ "DMIC3_OUTPUT", NULL, "DMIC3_MIXER" },
2471+
{ "DMIC3_MIXER", "Switch", "DMIC3" },
2472+
2473+
{ "DMIC4_OUTPUT", NULL, "DMIC4_MIXER" },
2474+
{ "DMIC4_MIXER", "Switch", "DMIC4" },
2475+
2476+
{ "DMIC5_OUTPUT", NULL, "DMIC5_MIXER" },
2477+
{ "DMIC5_MIXER", "Switch", "DMIC5" },
2478+
2479+
{ "DMIC6_OUTPUT", NULL, "DMIC6_MIXER" },
2480+
{ "DMIC6_MIXER", "Switch", "DMIC6" },
2481+
};
2482+
24122483
static int wcd937x_set_micbias_data(struct wcd937x_priv *wcd937x)
24132484
{
24142485
int vout_ctl[3];
@@ -2545,6 +2616,13 @@ static int wcd937x_soc_codec_probe(struct snd_soc_component *component)
25452616
dev_err(component->dev, "Failed to add snd_ctls\n");
25462617
return ret;
25472618
}
2619+
2620+
ret = snd_soc_dapm_add_routes(dapm, wcd9375_audio_map,
2621+
ARRAY_SIZE(wcd9375_audio_map));
2622+
if (ret < 0) {
2623+
dev_err(component->dev, "Failed to add routes\n");
2624+
return ret;
2625+
}
25482626
}
25492627

25502628
ret = wcd937x_mbhc_init(component);
@@ -2588,6 +2666,8 @@ static const struct snd_soc_component_driver soc_codec_dev_wcd937x = {
25882666
.num_controls = ARRAY_SIZE(wcd937x_snd_controls),
25892667
.dapm_widgets = wcd937x_dapm_widgets,
25902668
.num_dapm_widgets = ARRAY_SIZE(wcd937x_dapm_widgets),
2669+
.dapm_routes = wcd937x_audio_map,
2670+
.num_dapm_routes = ARRAY_SIZE(wcd937x_audio_map),
25912671
.set_jack = wcd937x_codec_set_jack,
25922672
.endianness = 1,
25932673
};

0 commit comments

Comments
 (0)