aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sound/cs42l52.h8
-rw-r--r--sound/soc/codecs/cs42l52.c37
2 files changed, 34 insertions, 11 deletions
diff --git a/include/sound/cs42l52.h b/include/sound/cs42l52.h
index daa91f327e4f..bbabf84bdb44 100644
--- a/include/sound/cs42l52.h
+++ b/include/sound/cs42l52.h
@@ -16,11 +16,11 @@ struct cs42l52_platform_data {
16 /* MICBIAS Level. Check datasheet Pg48 */ 16 /* MICBIAS Level. Check datasheet Pg48 */
17 unsigned int micbias_lvl; 17 unsigned int micbias_lvl;
18 18
19 /* MICA mode selection 0=Single 1=Differential */ 19 /* MICA mode selection Differential or Single-ended */
20 unsigned int mica_cfg; 20 bool mica_diff_cfg;
21 21
22 /* MICB mode selection 0=Single 1=Differential */ 22 /* MICB mode selection Differential or Single-ended */
23 unsigned int micb_cfg; 23 bool micb_diff_cfg;
24 24
25 /* Charge Pump Freq. Check datasheet Pg73 */ 25 /* Charge Pump Freq. Check datasheet Pg73 */
26 unsigned int chgfreq; 26 unsigned int chgfreq;
diff --git a/sound/soc/codecs/cs42l52.c b/sound/soc/codecs/cs42l52.c
index 18010639d0c5..78d2dd669e89 100644
--- a/sound/soc/codecs/cs42l52.c
+++ b/sound/soc/codecs/cs42l52.c
@@ -419,9 +419,6 @@ static const struct snd_kcontrol_new cs42l52_snd_controls[] = {
419 419
420 SOC_DOUBLE("Bypass Mute", CS42L52_MISC_CTL, 4, 5, 1, 0), 420 SOC_DOUBLE("Bypass Mute", CS42L52_MISC_CTL, 4, 5, 1, 0),
421 421
422 SOC_ENUM("MICA Select", mica_enum),
423 SOC_ENUM("MICB Select", micb_enum),
424
425 SOC_DOUBLE_R_TLV("MIC Gain Volume", CS42L52_MICA_CTL, 422 SOC_DOUBLE_R_TLV("MIC Gain Volume", CS42L52_MICA_CTL,
426 CS42L52_MICB_CTL, 0, 0x10, 0, mic_tlv), 423 CS42L52_MICB_CTL, 0, 0x10, 0, mic_tlv),
427 424
@@ -528,6 +525,30 @@ static const struct snd_kcontrol_new cs42l52_snd_controls[] = {
528 525
529}; 526};
530 527
528static const struct snd_kcontrol_new cs42l52_mica_controls[] = {
529 SOC_ENUM("MICA Select", mica_enum),
530};
531
532static const struct snd_kcontrol_new cs42l52_micb_controls[] = {
533 SOC_ENUM("MICB Select", micb_enum),
534};
535
536static int cs42l52_add_mic_controls(struct snd_soc_codec *codec)
537{
538 struct cs42l52_private *cs42l52 = snd_soc_codec_get_drvdata(codec);
539 struct cs42l52_platform_data *pdata = &cs42l52->pdata;
540
541 if (!pdata->mica_diff_cfg)
542 snd_soc_add_codec_controls(codec, cs42l52_mica_controls,
543 ARRAY_SIZE(cs42l52_mica_controls));
544
545 if (!pdata->micb_diff_cfg)
546 snd_soc_add_codec_controls(codec, cs42l52_micb_controls,
547 ARRAY_SIZE(cs42l52_micb_controls));
548
549 return 0;
550}
551
531static const struct snd_soc_dapm_widget cs42l52_dapm_widgets[] = { 552static const struct snd_soc_dapm_widget cs42l52_dapm_widgets[] = {
532 553
533 SND_SOC_DAPM_INPUT("AIN1L"), 554 SND_SOC_DAPM_INPUT("AIN1L"),
@@ -1104,6 +1125,8 @@ static int cs42l52_probe(struct snd_soc_codec *codec)
1104 } 1125 }
1105 regcache_cache_only(cs42l52->regmap, true); 1126 regcache_cache_only(cs42l52->regmap, true);
1106 1127
1128 cs42l52_add_mic_controls(codec);
1129
1107 cs42l52_init_beep(codec); 1130 cs42l52_init_beep(codec);
1108 1131
1109 cs42l52_set_bias_level(codec, SND_SOC_BIAS_STANDBY); 1132 cs42l52_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
@@ -1221,16 +1244,16 @@ static int cs42l52_i2c_probe(struct i2c_client *i2c_client,
1221 reg & 0xFF); 1244 reg & 0xFF);
1222 1245
1223 /* Set Platform Data */ 1246 /* Set Platform Data */
1224 if (cs42l52->pdata.mica_cfg) 1247 if (cs42l52->pdata.mica_diff_cfg)
1225 regmap_update_bits(cs42l52->regmap, CS42L52_MICA_CTL, 1248 regmap_update_bits(cs42l52->regmap, CS42L52_MICA_CTL,
1226 CS42L52_MIC_CTL_TYPE_MASK, 1249 CS42L52_MIC_CTL_TYPE_MASK,
1227 cs42l52->pdata.mica_cfg << 1250 cs42l52->pdata.mica_diff_cfg <<
1228 CS42L52_MIC_CTL_TYPE_SHIFT); 1251 CS42L52_MIC_CTL_TYPE_SHIFT);
1229 1252
1230 if (cs42l52->pdata.micb_cfg) 1253 if (cs42l52->pdata.micb_diff_cfg)
1231 regmap_update_bits(cs42l52->regmap, CS42L52_MICB_CTL, 1254 regmap_update_bits(cs42l52->regmap, CS42L52_MICB_CTL,
1232 CS42L52_MIC_CTL_TYPE_MASK, 1255 CS42L52_MIC_CTL_TYPE_MASK,
1233 cs42l52->pdata.micb_cfg << 1256 cs42l52->pdata.micb_diff_cfg <<
1234 CS42L52_MIC_CTL_TYPE_SHIFT); 1257 CS42L52_MIC_CTL_TYPE_SHIFT);
1235 1258
1236 if (cs42l52->pdata.chgfreq) 1259 if (cs42l52->pdata.chgfreq)