ASoC: madera: Add support for CS47L92/3 dmic sup configuration
authorStuart Henderson <stuarth@opensource.wolfsonmicro.com>
Tue, 16 May 2017 10:09:09 +0000 (11:09 +0100)
committer강신형 <s47.kang@samsung.com>
Tue, 19 Jun 2018 07:05:13 +0000 (16:05 +0900)
CS47L92/93 has more dmic reference selects than analog inputs, so increase
the configuration loop to be the dmic sup count.

Change-Id: Ia278eecc8ae52a372ca2757a58c7f5cf563c9a79
Signed-off-by: Stuart Henderson <stuarth@opensource.wolfsonmicro.com>
sound/soc/codecs/madera.c

index 19d595988da055b9d8c6dcb3997e5e7de6a7071f..c6f289daea9c5684356babcde1ffee06a68f6a15 100644 (file)
@@ -1120,19 +1120,27 @@ EXPORT_SYMBOL_GPL(madera_rate_put);
 
 static void madera_configure_input_mode(struct madera *madera)
 {
-       unsigned int dig_mode, ana_mode_l, ana_mode_r;
-       int max_analogue_inputs, i;
+       unsigned int dig_mode, dig_mask, ana_mode_l, ana_mode_r;
+       int max_analogue_inputs, max_dmic_sup, i;
 
        switch (madera->type) {
        case CS47L35:
                max_analogue_inputs = 2;
+               max_dmic_sup = 2;
                break;
        case CS47L85:
        case WM1840:
                max_analogue_inputs = 3;
+               max_dmic_sup = 3;
+               break;
+       case CS47L90:
+       case CS47L91:
+               max_analogue_inputs = 2;
+               max_dmic_sup = 2;
                break;
        default:
                max_analogue_inputs = 2;
+               max_dmic_sup = 4;
                break;
        }
 
@@ -1140,7 +1148,7 @@ static void madera_configure_input_mode(struct madera *madera)
         * Initialize input modes from the A settings. For muxed inputs the
         * B settings will be applied if the mux is changed
         */
-       for (i = 0; i < max_analogue_inputs; i++) {
+       for (i = 0; i < max_dmic_sup; i++) {
                dev_dbg(madera->dev, "IN%d mode %u:%u:%u:%u\n", i + 1,
                        madera->pdata.codec.inmode[i][0],
                        madera->pdata.codec.inmode[i][1],
@@ -1187,11 +1195,17 @@ static void madera_configure_input_mode(struct madera *madera)
                        "IN%dA DMIC mode=0x%x Analogue mode=0x%x,0x%x\n",
                        i + 1, dig_mode, ana_mode_l, ana_mode_r);
 
+               dig_mask = MADERA_IN1_DMIC_SUP_MASK;
+
+               if (i < max_analogue_inputs)
+                       dig_mask |= MADERA_IN1_MODE_MASK;
+
                regmap_update_bits(madera->regmap,
                                   MADERA_IN1L_CONTROL + (i * 8),
-                                  MADERA_IN1_DMIC_SUP_MASK |
-                                  MADERA_IN1_MODE_MASK,
-                                  dig_mode);
+                                  dig_mask, dig_mode);
+
+               if (i >= max_analogue_inputs)
+                       continue;
 
                regmap_update_bits(madera->regmap,
                                   MADERA_ADC_DIGITAL_VOLUME_1L + (i * 8),