Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: wcd9335: add audio routings

This patch adds audio routing for both playback and capture.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Srinivas Kandagatla and committed by
Mark Brown
93f97ff1 6ccc25f6

+189
+189
sound/soc/codecs/wcd9335.c
··· 100 100 /* vout step value */ 101 101 #define WCD9335_CALCULATE_VOUT_D(req_mv) (((req_mv - 650) * 10) / 25) 102 102 103 + #define WCD9335_INTERPOLATOR_PATH(id) \ 104 + {"RX INT" #id "_1 MIX1 INP0", "RX0", "SLIM RX0"}, \ 105 + {"RX INT" #id "_1 MIX1 INP0", "RX1", "SLIM RX1"}, \ 106 + {"RX INT" #id "_1 MIX1 INP0", "RX2", "SLIM RX2"}, \ 107 + {"RX INT" #id "_1 MIX1 INP0", "RX3", "SLIM RX3"}, \ 108 + {"RX INT" #id "_1 MIX1 INP0", "RX4", "SLIM RX4"}, \ 109 + {"RX INT" #id "_1 MIX1 INP0", "RX5", "SLIM RX5"}, \ 110 + {"RX INT" #id "_1 MIX1 INP0", "RX6", "SLIM RX6"}, \ 111 + {"RX INT" #id "_1 MIX1 INP0", "RX7", "SLIM RX7"}, \ 112 + {"RX INT" #id "_1 MIX1 INP1", "RX0", "SLIM RX0"}, \ 113 + {"RX INT" #id "_1 MIX1 INP1", "RX1", "SLIM RX1"}, \ 114 + {"RX INT" #id "_1 MIX1 INP1", "RX2", "SLIM RX2"}, \ 115 + {"RX INT" #id "_1 MIX1 INP1", "RX3", "SLIM RX3"}, \ 116 + {"RX INT" #id "_1 MIX1 INP1", "RX4", "SLIM RX4"}, \ 117 + {"RX INT" #id "_1 MIX1 INP1", "RX5", "SLIM RX5"}, \ 118 + {"RX INT" #id "_1 MIX1 INP1", "RX6", "SLIM RX6"}, \ 119 + {"RX INT" #id "_1 MIX1 INP1", "RX7", "SLIM RX7"}, \ 120 + {"RX INT" #id "_1 MIX1 INP2", "RX0", "SLIM RX0"}, \ 121 + {"RX INT" #id "_1 MIX1 INP2", "RX1", "SLIM RX1"}, \ 122 + {"RX INT" #id "_1 MIX1 INP2", "RX2", "SLIM RX2"}, \ 123 + {"RX INT" #id "_1 MIX1 INP2", "RX3", "SLIM RX3"}, \ 124 + {"RX INT" #id "_1 MIX1 INP2", "RX4", "SLIM RX4"}, \ 125 + {"RX INT" #id "_1 MIX1 INP2", "RX5", "SLIM RX5"}, \ 126 + {"RX INT" #id "_1 MIX1 INP2", "RX6", "SLIM RX6"}, \ 127 + {"RX INT" #id "_1 MIX1 INP2", "RX7", "SLIM RX7"}, \ 128 + {"RX INT" #id "_2 MUX", "RX0", "SLIM RX0"}, \ 129 + {"RX INT" #id "_2 MUX", "RX1", "SLIM RX1"}, \ 130 + {"RX INT" #id "_2 MUX", "RX2", "SLIM RX2"}, \ 131 + {"RX INT" #id "_2 MUX", "RX3", "SLIM RX3"}, \ 132 + {"RX INT" #id "_2 MUX", "RX4", "SLIM RX4"}, \ 133 + {"RX INT" #id "_2 MUX", "RX5", "SLIM RX5"}, \ 134 + {"RX INT" #id "_2 MUX", "RX6", "SLIM RX6"}, \ 135 + {"RX INT" #id "_2 MUX", "RX7", "SLIM RX7"}, \ 136 + {"RX INT" #id "_1 MIX1", NULL, "RX INT" #id "_1 MIX1 INP0"}, \ 137 + {"RX INT" #id "_1 MIX1", NULL, "RX INT" #id "_1 MIX1 INP1"}, \ 138 + {"RX INT" #id "_1 MIX1", NULL, "RX INT" #id "_1 MIX1 INP2"}, \ 139 + {"RX INT" #id " SEC MIX", NULL, "RX INT" #id "_2 MUX"}, \ 140 + {"RX INT" #id " SEC MIX", NULL, "RX INT" #id "_1 MIX1"}, \ 141 + {"RX INT" #id " MIX2", NULL, "RX INT" #id " SEC MIX"}, \ 142 + {"RX INT" #id " INTERP", NULL, "RX INT" #id " MIX2"} 143 + 144 + #define WCD9335_ADC_MUX_PATH(id) \ 145 + {"AIF1_CAP Mixer", "SLIM TX" #id, "SLIM TX" #id " MUX"}, \ 146 + {"AIF2_CAP Mixer", "SLIM TX" #id, "SLIM TX" #id " MUX"}, \ 147 + {"AIF3_CAP Mixer", "SLIM TX" #id, "SLIM TX" #id " MUX"}, \ 148 + {"SLIM TX" #id " MUX", "DEC" #id, "ADC MUX" #id}, \ 149 + {"ADC MUX" #id, "DMIC", "DMIC MUX" #id}, \ 150 + {"ADC MUX" #id, "AMIC", "AMIC MUX" #id}, \ 151 + {"DMIC MUX" #id, "DMIC0", "DMIC0"}, \ 152 + {"DMIC MUX" #id, "DMIC1", "DMIC1"}, \ 153 + {"DMIC MUX" #id, "DMIC2", "DMIC2"}, \ 154 + {"DMIC MUX" #id, "DMIC3", "DMIC3"}, \ 155 + {"DMIC MUX" #id, "DMIC4", "DMIC4"}, \ 156 + {"DMIC MUX" #id, "DMIC5", "DMIC5"}, \ 157 + {"AMIC MUX" #id, "ADC1", "ADC1"}, \ 158 + {"AMIC MUX" #id, "ADC2", "ADC2"}, \ 159 + {"AMIC MUX" #id, "ADC3", "ADC3"}, \ 160 + {"AMIC MUX" #id, "ADC4", "ADC4"}, \ 161 + {"AMIC MUX" #id, "ADC5", "ADC5"}, \ 162 + {"AMIC MUX" #id, "ADC6", "ADC6"} 163 + 103 164 enum { 104 165 WCD9335_RX0 = 0, 105 166 WCD9335_RX1, ··· 2377 2316 SOC_ENUM("TX6 HPF cut off", cf_dec6_enum), 2378 2317 SOC_ENUM("TX7 HPF cut off", cf_dec7_enum), 2379 2318 SOC_ENUM("TX8 HPF cut off", cf_dec8_enum), 2319 + }; 2320 + 2321 + static const struct snd_soc_dapm_route wcd9335_audio_map[] = { 2322 + {"SLIM RX0 MUX", "AIF1_PB", "AIF1 PB"}, 2323 + {"SLIM RX1 MUX", "AIF1_PB", "AIF1 PB"}, 2324 + {"SLIM RX2 MUX", "AIF1_PB", "AIF1 PB"}, 2325 + {"SLIM RX3 MUX", "AIF1_PB", "AIF1 PB"}, 2326 + {"SLIM RX4 MUX", "AIF1_PB", "AIF1 PB"}, 2327 + {"SLIM RX5 MUX", "AIF1_PB", "AIF1 PB"}, 2328 + {"SLIM RX6 MUX", "AIF1_PB", "AIF1 PB"}, 2329 + {"SLIM RX7 MUX", "AIF1_PB", "AIF1 PB"}, 2330 + 2331 + {"SLIM RX0 MUX", "AIF2_PB", "AIF2 PB"}, 2332 + {"SLIM RX1 MUX", "AIF2_PB", "AIF2 PB"}, 2333 + {"SLIM RX2 MUX", "AIF2_PB", "AIF2 PB"}, 2334 + {"SLIM RX3 MUX", "AIF2_PB", "AIF2 PB"}, 2335 + {"SLIM RX4 MUX", "AIF2_PB", "AIF2 PB"}, 2336 + {"SLIM RX5 MUX", "AIF2_PB", "AIF2 PB"}, 2337 + {"SLIM RX6 MUX", "AIF2_PB", "AIF2 PB"}, 2338 + {"SLIM RX7 MUX", "AIF2_PB", "AIF2 PB"}, 2339 + 2340 + {"SLIM RX0 MUX", "AIF3_PB", "AIF3 PB"}, 2341 + {"SLIM RX1 MUX", "AIF3_PB", "AIF3 PB"}, 2342 + {"SLIM RX2 MUX", "AIF3_PB", "AIF3 PB"}, 2343 + {"SLIM RX3 MUX", "AIF3_PB", "AIF3 PB"}, 2344 + {"SLIM RX4 MUX", "AIF3_PB", "AIF3 PB"}, 2345 + {"SLIM RX5 MUX", "AIF3_PB", "AIF3 PB"}, 2346 + {"SLIM RX6 MUX", "AIF3_PB", "AIF3 PB"}, 2347 + {"SLIM RX7 MUX", "AIF3_PB", "AIF3 PB"}, 2348 + 2349 + {"SLIM RX0 MUX", "AIF4_PB", "AIF4 PB"}, 2350 + {"SLIM RX1 MUX", "AIF4_PB", "AIF4 PB"}, 2351 + {"SLIM RX2 MUX", "AIF4_PB", "AIF4 PB"}, 2352 + {"SLIM RX3 MUX", "AIF4_PB", "AIF4 PB"}, 2353 + {"SLIM RX4 MUX", "AIF4_PB", "AIF4 PB"}, 2354 + {"SLIM RX5 MUX", "AIF4_PB", "AIF4 PB"}, 2355 + {"SLIM RX6 MUX", "AIF4_PB", "AIF4 PB"}, 2356 + {"SLIM RX7 MUX", "AIF4_PB", "AIF4 PB"}, 2357 + 2358 + {"SLIM RX0", NULL, "SLIM RX0 MUX"}, 2359 + {"SLIM RX1", NULL, "SLIM RX1 MUX"}, 2360 + {"SLIM RX2", NULL, "SLIM RX2 MUX"}, 2361 + {"SLIM RX3", NULL, "SLIM RX3 MUX"}, 2362 + {"SLIM RX4", NULL, "SLIM RX4 MUX"}, 2363 + {"SLIM RX5", NULL, "SLIM RX5 MUX"}, 2364 + {"SLIM RX6", NULL, "SLIM RX6 MUX"}, 2365 + {"SLIM RX7", NULL, "SLIM RX7 MUX"}, 2366 + 2367 + WCD9335_INTERPOLATOR_PATH(0), 2368 + WCD9335_INTERPOLATOR_PATH(1), 2369 + WCD9335_INTERPOLATOR_PATH(2), 2370 + WCD9335_INTERPOLATOR_PATH(3), 2371 + WCD9335_INTERPOLATOR_PATH(4), 2372 + WCD9335_INTERPOLATOR_PATH(5), 2373 + WCD9335_INTERPOLATOR_PATH(6), 2374 + WCD9335_INTERPOLATOR_PATH(7), 2375 + WCD9335_INTERPOLATOR_PATH(8), 2376 + 2377 + /* EAR PA */ 2378 + {"RX INT0 DEM MUX", "CLSH_DSM_OUT", "RX INT0 INTERP"}, 2379 + {"RX INT0 DAC", NULL, "RX INT0 DEM MUX"}, 2380 + {"RX INT0 DAC", NULL, "RX_BIAS"}, 2381 + {"EAR PA", NULL, "RX INT0 DAC"}, 2382 + {"EAR", NULL, "EAR PA"}, 2383 + 2384 + /* HPHL */ 2385 + {"RX INT1 DEM MUX", "CLSH_DSM_OUT", "RX INT1 INTERP"}, 2386 + {"RX INT1 DAC", NULL, "RX INT1 DEM MUX"}, 2387 + {"RX INT1 DAC", NULL, "RX_BIAS"}, 2388 + {"HPHL PA", NULL, "RX INT1 DAC"}, 2389 + {"HPHL", NULL, "HPHL PA"}, 2390 + 2391 + /* HPHR */ 2392 + {"RX INT2 DEM MUX", "CLSH_DSM_OUT", "RX INT2 INTERP"}, 2393 + {"RX INT2 DAC", NULL, "RX INT2 DEM MUX"}, 2394 + {"RX INT2 DAC", NULL, "RX_BIAS"}, 2395 + {"HPHR PA", NULL, "RX INT2 DAC"}, 2396 + {"HPHR", NULL, "HPHR PA"}, 2397 + 2398 + /* LINEOUT1 */ 2399 + {"RX INT3 DAC", NULL, "RX INT3 INTERP"}, 2400 + {"RX INT3 DAC", NULL, "RX_BIAS"}, 2401 + {"LINEOUT1 PA", NULL, "RX INT3 DAC"}, 2402 + {"LINEOUT1", NULL, "LINEOUT1 PA"}, 2403 + 2404 + /* LINEOUT2 */ 2405 + {"RX INT4 DAC", NULL, "RX INT4 INTERP"}, 2406 + {"RX INT4 DAC", NULL, "RX_BIAS"}, 2407 + {"LINEOUT2 PA", NULL, "RX INT4 DAC"}, 2408 + {"LINEOUT2", NULL, "LINEOUT2 PA"}, 2409 + 2410 + /* LINEOUT3 */ 2411 + {"RX INT5 DAC", NULL, "RX INT5 INTERP"}, 2412 + {"RX INT5 DAC", NULL, "RX_BIAS"}, 2413 + {"LINEOUT3 PA", NULL, "RX INT5 DAC"}, 2414 + {"LINEOUT3", NULL, "LINEOUT3 PA"}, 2415 + 2416 + /* LINEOUT4 */ 2417 + {"RX INT6 DAC", NULL, "RX INT6 INTERP"}, 2418 + {"RX INT6 DAC", NULL, "RX_BIAS"}, 2419 + {"LINEOUT4 PA", NULL, "RX INT6 DAC"}, 2420 + {"LINEOUT4", NULL, "LINEOUT4 PA"}, 2421 + 2422 + /* SLIMBUS Connections */ 2423 + {"AIF1 CAP", NULL, "AIF1_CAP Mixer"}, 2424 + {"AIF2 CAP", NULL, "AIF2_CAP Mixer"}, 2425 + {"AIF3 CAP", NULL, "AIF3_CAP Mixer"}, 2426 + 2427 + /* ADC Mux */ 2428 + WCD9335_ADC_MUX_PATH(0), 2429 + WCD9335_ADC_MUX_PATH(1), 2430 + WCD9335_ADC_MUX_PATH(2), 2431 + WCD9335_ADC_MUX_PATH(3), 2432 + WCD9335_ADC_MUX_PATH(4), 2433 + WCD9335_ADC_MUX_PATH(5), 2434 + WCD9335_ADC_MUX_PATH(6), 2435 + WCD9335_ADC_MUX_PATH(7), 2436 + WCD9335_ADC_MUX_PATH(8), 2437 + 2438 + /* ADC Connections */ 2439 + {"ADC1", NULL, "AMIC1"}, 2440 + {"ADC2", NULL, "AMIC2"}, 2441 + {"ADC3", NULL, "AMIC3"}, 2442 + {"ADC4", NULL, "AMIC4"}, 2443 + {"ADC5", NULL, "AMIC5"}, 2444 + {"ADC6", NULL, "AMIC6"}, 2380 2445 }; 2381 2446 2382 2447 static int wcd9335_micbias_control(struct snd_soc_component *component, ··· 4914 4727 .num_controls = ARRAY_SIZE(wcd9335_snd_controls), 4915 4728 .dapm_widgets = wcd9335_dapm_widgets, 4916 4729 .num_dapm_widgets = ARRAY_SIZE(wcd9335_dapm_widgets), 4730 + .dapm_routes = wcd9335_audio_map, 4731 + .num_dapm_routes = ARRAY_SIZE(wcd9335_audio_map), 4917 4732 }; 4918 4733 4919 4734 static int wcd9335_probe(struct wcd9335_codec *wcd)