diff options
Diffstat (limited to 'sound/soc/codecs/rt5670.c')
-rw-r--r-- | sound/soc/codecs/rt5670.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/sound/soc/codecs/rt5670.c b/sound/soc/codecs/rt5670.c index e27c5a4a0a15..0ec7985ed306 100644 --- a/sound/soc/codecs/rt5670.c +++ b/sound/soc/codecs/rt5670.c | |||
@@ -1717,7 +1717,6 @@ static const struct snd_soc_dapm_widget rt5670_dapm_widgets[] = { | |||
1717 | SND_SOC_DAPM_PGA("IF1_ADC1", SND_SOC_NOPM, 0, 0, NULL, 0), | 1717 | SND_SOC_DAPM_PGA("IF1_ADC1", SND_SOC_NOPM, 0, 0, NULL, 0), |
1718 | SND_SOC_DAPM_PGA("IF1_ADC2", SND_SOC_NOPM, 0, 0, NULL, 0), | 1718 | SND_SOC_DAPM_PGA("IF1_ADC2", SND_SOC_NOPM, 0, 0, NULL, 0), |
1719 | SND_SOC_DAPM_PGA("IF1_ADC3", SND_SOC_NOPM, 0, 0, NULL, 0), | 1719 | SND_SOC_DAPM_PGA("IF1_ADC3", SND_SOC_NOPM, 0, 0, NULL, 0), |
1720 | SND_SOC_DAPM_PGA("IF1_ADC4", SND_SOC_NOPM, 0, 0, NULL, 0), | ||
1721 | 1720 | ||
1722 | /* DSP */ | 1721 | /* DSP */ |
1723 | SND_SOC_DAPM_PGA("TxDP_ADC", SND_SOC_NOPM, 0, 0, NULL, 0), | 1722 | SND_SOC_DAPM_PGA("TxDP_ADC", SND_SOC_NOPM, 0, 0, NULL, 0), |
@@ -2023,7 +2022,6 @@ static const struct snd_soc_dapm_route rt5670_dapm_routes[] = { | |||
2023 | 2022 | ||
2024 | { "Stereo1 ADC MIXL", NULL, "Sto1 ADC MIXL" }, | 2023 | { "Stereo1 ADC MIXL", NULL, "Sto1 ADC MIXL" }, |
2025 | { "Stereo1 ADC MIXL", NULL, "ADC Stereo1 Filter" }, | 2024 | { "Stereo1 ADC MIXL", NULL, "ADC Stereo1 Filter" }, |
2026 | { "ADC Stereo1 Filter", NULL, "PLL1", is_sys_clk_from_pll }, | ||
2027 | 2025 | ||
2028 | { "Stereo1 ADC MIXR", NULL, "Sto1 ADC MIXR" }, | 2026 | { "Stereo1 ADC MIXR", NULL, "Sto1 ADC MIXR" }, |
2029 | { "Stereo1 ADC MIXR", NULL, "ADC Stereo1 Filter" }, | 2027 | { "Stereo1 ADC MIXR", NULL, "ADC Stereo1 Filter" }, |
@@ -2062,7 +2060,6 @@ static const struct snd_soc_dapm_route rt5670_dapm_routes[] = { | |||
2062 | 2060 | ||
2063 | { "Stereo2 ADC MIXL", NULL, "Stereo2 ADC LR Mux" }, | 2061 | { "Stereo2 ADC MIXL", NULL, "Stereo2 ADC LR Mux" }, |
2064 | { "Stereo2 ADC MIXL", NULL, "ADC Stereo2 Filter" }, | 2062 | { "Stereo2 ADC MIXL", NULL, "ADC Stereo2 Filter" }, |
2065 | { "ADC Stereo2 Filter", NULL, "PLL1", is_sys_clk_from_pll }, | ||
2066 | 2063 | ||
2067 | { "Stereo2 ADC MIXR", NULL, "Sto2 ADC MIXR" }, | 2064 | { "Stereo2 ADC MIXR", NULL, "Sto2 ADC MIXR" }, |
2068 | { "Stereo2 ADC MIXR", NULL, "ADC Stereo2 Filter" }, | 2065 | { "Stereo2 ADC MIXR", NULL, "ADC Stereo2 Filter" }, |
@@ -2086,13 +2083,13 @@ static const struct snd_soc_dapm_route rt5670_dapm_routes[] = { | |||
2086 | { "IF1 ADC1 IN1 Mux", "IF1_ADC3", "IF1_ADC3" }, | 2083 | { "IF1 ADC1 IN1 Mux", "IF1_ADC3", "IF1_ADC3" }, |
2087 | 2084 | ||
2088 | { "IF1 ADC1 IN2 Mux", "IF1_ADC1_IN1", "IF1 ADC1 IN1 Mux" }, | 2085 | { "IF1 ADC1 IN2 Mux", "IF1_ADC1_IN1", "IF1 ADC1 IN1 Mux" }, |
2089 | { "IF1 ADC1 IN2 Mux", "IF1_ADC4", "IF1_ADC4" }, | 2086 | { "IF1 ADC1 IN2 Mux", "IF1_ADC4", "TxDP_ADC" }, |
2090 | 2087 | ||
2091 | { "IF1 ADC2 IN Mux", "IF_ADC2", "IF_ADC2" }, | 2088 | { "IF1 ADC2 IN Mux", "IF_ADC2", "IF_ADC2" }, |
2092 | { "IF1 ADC2 IN Mux", "VAD_ADC", "VAD_ADC" }, | 2089 | { "IF1 ADC2 IN Mux", "VAD_ADC", "VAD_ADC" }, |
2093 | 2090 | ||
2094 | { "IF1 ADC2 IN1 Mux", "IF1_ADC2_IN", "IF1 ADC2 IN Mux" }, | 2091 | { "IF1 ADC2 IN1 Mux", "IF1_ADC2_IN", "IF1 ADC2 IN Mux" }, |
2095 | { "IF1 ADC2 IN1 Mux", "IF1_ADC4", "IF1_ADC4" }, | 2092 | { "IF1 ADC2 IN1 Mux", "IF1_ADC4", "TxDP_ADC" }, |
2096 | 2093 | ||
2097 | { "IF1_ADC1" , NULL, "IF1 ADC1 IN2 Mux" }, | 2094 | { "IF1_ADC1" , NULL, "IF1 ADC1 IN2 Mux" }, |
2098 | { "IF1_ADC2" , NULL, "IF1 ADC2 IN1 Mux" }, | 2095 | { "IF1_ADC2" , NULL, "IF1 ADC2 IN1 Mux" }, |
@@ -2445,10 +2442,9 @@ static int rt5670_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) | |||
2445 | return 0; | 2442 | return 0; |
2446 | } | 2443 | } |
2447 | 2444 | ||
2448 | static int rt5670_set_dai_sysclk(struct snd_soc_dai *dai, | 2445 | static int rt5670_set_codec_sysclk(struct snd_soc_codec *codec, int clk_id, |
2449 | int clk_id, unsigned int freq, int dir) | 2446 | int source, unsigned int freq, int dir) |
2450 | { | 2447 | { |
2451 | struct snd_soc_codec *codec = dai->codec; | ||
2452 | struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec); | 2448 | struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec); |
2453 | unsigned int reg_val = 0; | 2449 | unsigned int reg_val = 0; |
2454 | 2450 | ||
@@ -2472,7 +2468,7 @@ static int rt5670_set_dai_sysclk(struct snd_soc_dai *dai, | |||
2472 | if (clk_id != RT5670_SCLK_S_RCCLK) | 2468 | if (clk_id != RT5670_SCLK_S_RCCLK) |
2473 | rt5670->sysclk_src = clk_id; | 2469 | rt5670->sysclk_src = clk_id; |
2474 | 2470 | ||
2475 | dev_dbg(dai->dev, "Sysclk is %dHz and clock id is %d\n", freq, clk_id); | 2471 | dev_dbg(codec->dev, "Sysclk : %dHz clock id : %d\n", freq, clk_id); |
2476 | 2472 | ||
2477 | return 0; | 2473 | return 0; |
2478 | } | 2474 | } |
@@ -2724,7 +2720,6 @@ static int rt5670_resume(struct snd_soc_codec *codec) | |||
2724 | static const struct snd_soc_dai_ops rt5670_aif_dai_ops = { | 2720 | static const struct snd_soc_dai_ops rt5670_aif_dai_ops = { |
2725 | .hw_params = rt5670_hw_params, | 2721 | .hw_params = rt5670_hw_params, |
2726 | .set_fmt = rt5670_set_dai_fmt, | 2722 | .set_fmt = rt5670_set_dai_fmt, |
2727 | .set_sysclk = rt5670_set_dai_sysclk, | ||
2728 | .set_tdm_slot = rt5670_set_tdm_slot, | 2723 | .set_tdm_slot = rt5670_set_tdm_slot, |
2729 | .set_pll = rt5670_set_dai_pll, | 2724 | .set_pll = rt5670_set_dai_pll, |
2730 | }; | 2725 | }; |
@@ -2777,6 +2772,7 @@ static struct snd_soc_codec_driver soc_codec_dev_rt5670 = { | |||
2777 | .resume = rt5670_resume, | 2772 | .resume = rt5670_resume, |
2778 | .set_bias_level = rt5670_set_bias_level, | 2773 | .set_bias_level = rt5670_set_bias_level, |
2779 | .idle_bias_off = true, | 2774 | .idle_bias_off = true, |
2775 | .set_sysclk = rt5670_set_codec_sysclk, | ||
2780 | .component_driver = { | 2776 | .component_driver = { |
2781 | .controls = rt5670_snd_controls, | 2777 | .controls = rt5670_snd_controls, |
2782 | .num_controls = ARRAY_SIZE(rt5670_snd_controls), | 2778 | .num_controls = ARRAY_SIZE(rt5670_snd_controls), |
@@ -2849,6 +2845,10 @@ static const struct dmi_system_id dmi_platform_intel_braswell[] = { | |||
2849 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Tablet B"), | 2845 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Tablet B"), |
2850 | }, | 2846 | }, |
2851 | }, | 2847 | }, |
2848 | {} | ||
2849 | }; | ||
2850 | |||
2851 | static const struct dmi_system_id dmi_platform_intel_bytcht_jdmode2[] = { | ||
2852 | { | 2852 | { |
2853 | .ident = "Lenovo Thinkpad Tablet 10", | 2853 | .ident = "Lenovo Thinkpad Tablet 10", |
2854 | .matches = { | 2854 | .matches = { |
@@ -2883,6 +2883,11 @@ static int rt5670_i2c_probe(struct i2c_client *i2c, | |||
2883 | rt5670->pdata.dmic1_data_pin = RT5670_DMIC_DATA_IN2P; | 2883 | rt5670->pdata.dmic1_data_pin = RT5670_DMIC_DATA_IN2P; |
2884 | rt5670->pdata.dev_gpio = true; | 2884 | rt5670->pdata.dev_gpio = true; |
2885 | rt5670->pdata.jd_mode = 1; | 2885 | rt5670->pdata.jd_mode = 1; |
2886 | } else if (dmi_check_system(dmi_platform_intel_bytcht_jdmode2)) { | ||
2887 | rt5670->pdata.dmic_en = true; | ||
2888 | rt5670->pdata.dmic1_data_pin = RT5670_DMIC_DATA_IN2P; | ||
2889 | rt5670->pdata.dev_gpio = true; | ||
2890 | rt5670->pdata.jd_mode = 2; | ||
2886 | } | 2891 | } |
2887 | 2892 | ||
2888 | rt5670->regmap = devm_regmap_init_i2c(i2c, &rt5670_regmap); | 2893 | rt5670->regmap = devm_regmap_init_i2c(i2c, &rt5670_regmap); |