aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/rt5670.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/codecs/rt5670.c')
-rw-r--r--sound/soc/codecs/rt5670.c25
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
2448static int rt5670_set_dai_sysclk(struct snd_soc_dai *dai, 2445static 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)
2724static const struct snd_soc_dai_ops rt5670_aif_dai_ops = { 2720static 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
2851static 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);