ASoC: rt5682s: Add LDO output selection for dacref
authorJack Yu <jack.yu@realtek.com>
Mon, 13 Nov 2023 10:37:15 +0000 (10:37 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 14 Nov 2023 17:39:27 +0000 (17:39 +0000)
Add LDO output selection for dacref.

Signed-off-by: Jack Yu <jack.yu@realtek.com>
Link: https://lore.kernel.org/r/62cad4e51c044108bad872ab349e36f8@realtek.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/rt5682s.h
sound/soc/codecs/rt5682s.c
sound/soc/codecs/rt5682s.h

index 66ca0c75b914e3d077a932b00f49cd21ed8bfb7b..006e6003d11c65e31eec302461b358879c2ccea3 100644 (file)
@@ -31,6 +31,13 @@ enum rt5682s_dai_clks {
        RT5682S_DAI_NUM_CLKS,
 };
 
+enum {
+       RT5682S_LDO_1_607V,
+       RT5682S_LDO_1_5V,
+       RT5682S_LDO_1_406V,
+       RT5682S_LDO_1_731V,
+};
+
 struct rt5682s_platform_data {
        enum rt5682s_dmic1_data_pin dmic1_data_pin;
        enum rt5682s_dmic1_clk_pin dmic1_clk_pin;
@@ -38,6 +45,7 @@ struct rt5682s_platform_data {
        unsigned int dmic_clk_rate;
        unsigned int dmic_delay;
        unsigned int amic_delay;
+       unsigned int ldo_dacref;
        bool dmic_clk_driving_high;
 
        const char *dai_clk_names[RT5682S_DAI_NUM_CLKS];
index c261c33c4be7dd0bdff3ce9e40bc2758a8fe0300..3322056bbb3b56f30de817e4367dc8c08d46de9d 100644 (file)
@@ -2971,6 +2971,8 @@ static int rt5682s_parse_dt(struct rt5682s_priv *rt5682s, struct device *dev)
                &rt5682s->pdata.dmic_delay);
        device_property_read_u32(dev, "realtek,amic-delay-ms",
                &rt5682s->pdata.amic_delay);
+       device_property_read_u32(dev, "realtek,ldo-sel",
+               &rt5682s->pdata.ldo_dacref);
 
        if (device_property_read_string_array(dev, "clock-output-names",
                                              rt5682s->pdata.dai_clk_names,
@@ -3250,6 +3252,27 @@ static int rt5682s_i2c_probe(struct i2c_client *i2c)
                break;
        }
 
+       /* LDO output voltage control */
+       switch (rt5682s->pdata.ldo_dacref) {
+       case RT5682S_LDO_1_607V:
+               break;
+       case RT5682S_LDO_1_5V:
+               regmap_update_bits(rt5682s->regmap, RT5682S_BIAS_CUR_CTRL_7,
+                       RT5682S_LDO_DACREF_MASK, RT5682S_LDO_DACREF_1_5V);
+               break;
+       case RT5682S_LDO_1_406V:
+               regmap_update_bits(rt5682s->regmap, RT5682S_BIAS_CUR_CTRL_7,
+                       RT5682S_LDO_DACREF_MASK, RT5682S_LDO_DACREF_1_406V);
+               break;
+       case RT5682S_LDO_1_731V:
+               regmap_update_bits(rt5682s->regmap, RT5682S_BIAS_CUR_CTRL_7,
+                       RT5682S_LDO_DACREF_MASK, RT5682S_LDO_DACREF_1_731V);
+               break;
+       default:
+               dev_warn(&i2c->dev, "invalid LDO output setting.\n");
+               break;
+       }
+
        INIT_DELAYED_WORK(&rt5682s->jack_detect_work, rt5682s_jack_detect_handler);
        INIT_DELAYED_WORK(&rt5682s->jd_check_work, rt5682s_jd_check_handler);
 
index 1d79d432d0d8f08737ef9767a4d76b362b53d973..67f42898de9679679a97ff6a6b65e4b3100c9b59 100644 (file)
 #define RT5682S_JDH_NO_PLUG                    (0x1 << 4)
 #define RT5682S_JDH_PLUG                       (0x0 << 4)
 
+/* Bias current control 7  (0x0110) */
+#define RT5682S_LDO_DACREF_MASK                        (0x3 << 4)
+#define RT5682S_LDO_DACREF_1_607V              (0x0 << 4)
+#define RT5682S_LDO_DACREF_1_5V                        (0x1 << 4)
+#define RT5682S_LDO_DACREF_1_406V              (0x2 << 4)
+#define RT5682S_LDO_DACREF_1_731V              (0x3 << 4)
+
 /* Charge Pump Internal Register1 (0x0125) */
 #define RT5682S_CP_CLK_HP_MASK                 (0x3 << 4)
 #define RT5682S_CP_CLK_HP_100KHZ               (0x0 << 4)