ASoC: rt1011: set the different setting for QFN/WLCSP package
authorShuming Fan <shumingf@realtek.com>
Thu, 16 Jan 2020 09:18:54 +0000 (17:18 +0800)
committerMark Brown <broonie@kernel.org>
Fri, 17 Jan 2020 15:30:31 +0000 (15:30 +0000)
The QFN package is a new one.
There is a different initial setting to the chip of QFN and WLCSP package.

Signed-off-by: Shuming Fan <shumingf@realtek.com>
Link: https://lore.kernel.org/r/20200116091854.18095-1-shumingf@realtek.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt1011.c
sound/soc/codecs/rt1011.h

index 2552073..dec5638 100644 (file)
@@ -40,7 +40,6 @@ static const struct reg_sequence init_list[] = {
 
        { RT1011_ADC_SET_5, 0x0a20 },
        { RT1011_DAC_SET_2, 0xa032 },
-       { RT1011_ADC_SET_1, 0x2925 },
 
        { RT1011_SPK_PRO_DC_DET_1, 0xb00c },
        { RT1011_SPK_PRO_DC_DET_2, 0xcccc },
@@ -2186,7 +2185,6 @@ static int rt1011_calibrate(struct rt1011_priv *rt1011, unsigned char cali_flag)
        /* ADC/DAC setting */
        regmap_write(rt1011->regmap, RT1011_ADC_SET_5, 0x0a20);
        regmap_write(rt1011->regmap, RT1011_DAC_SET_2, 0xe232);
-       regmap_write(rt1011->regmap, RT1011_ADC_SET_1, 0x2925);
        regmap_write(rt1011->regmap, RT1011_ADC_SET_4, 0xc000);
 
        /* DC detection */
@@ -2235,8 +2233,18 @@ static int rt1011_calibrate(struct rt1011_priv *rt1011, unsigned char cali_flag)
        dc_offset |= (value & 0xffff);
        dev_info(dev, "Gain1 offset=0x%x\n", dc_offset);
 
+       /* check the package info. */
+       regmap_read(rt1011->regmap, RT1011_EFUSE_MATCH_DONE, &value);
+       if (value & 0x4)
+               rt1011->pack_id = 1;
 
        if (cali_flag) {
+
+               if (rt1011->pack_id)
+                       regmap_write(rt1011->regmap, RT1011_ADC_SET_1, 0x292c);
+               else
+                       regmap_write(rt1011->regmap, RT1011_ADC_SET_1, 0x2925);
+
                /* Class D on */
                regmap_write(rt1011->regmap, RT1011_CLASS_D_POS, 0x010e);
                regmap_write(rt1011->regmap,
@@ -2361,6 +2369,11 @@ static void rt1011_calibration_work(struct work_struct *work)
 
                rt1011_r0_load(rt1011);
        }
+
+       if (rt1011->pack_id)
+               snd_soc_component_write(component, RT1011_ADC_SET_1, 0x292c);
+       else
+               snd_soc_component_write(component, RT1011_ADC_SET_1, 0x2925);
 }
 
 static int rt1011_parse_dp(struct rt1011_priv *rt1011, struct device *dev)
index 68fadc1..f3a9a96 100644 (file)
@@ -692,6 +692,7 @@ struct rt1011_priv {
        unsigned int r0_reg, cali_done;
        unsigned int r0_calib, temperature_calib;
        int recv_spk_mode;
+       unsigned int pack_id; /* 0: WLCSP; 1: QFN */
 };
 
 #endif         /* end of _RT1011_H_ */