]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: codecs: wcd937x: add audio routing and Kconfig
authorPrasad Kumpatla <quic_pkumpatl@quicinc.com>
Fri, 24 May 2024 03:55:35 +0000 (09:25 +0530)
committerMark Brown <broonie@kernel.org>
Mon, 10 Jun 2024 11:47:31 +0000 (12:47 +0100)
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>
sound/soc/codecs/Kconfig
sound/soc/codecs/Makefile
sound/soc/codecs/wcd937x.c

index 3621781d63c4e3733ff3625f99529548fcb9bba9..7b99556f24d345cf80ca46e2974e88bb6dae9f9e 100644 (file)
@@ -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
index d343d23c8f0f12585db517848c707e0cb4d8d17f..ca69f35cc0f7658f4586d8a289452dc8f319dbaf 100644 (file)
@@ -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
index f8b57f47ad555a2548ccc5900880929fb4222e7d..ef649ed77fb25110a8f3a367509a32e6ad7b8728 100644 (file)
@@ -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,
 };