]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ASoC: rt5645: Add JD function support
authorBard Liao <bardliao@realtek.com>
Wed, 5 Nov 2014 07:02:08 +0000 (15:02 +0800)
committerMark Brown <broonie@kernel.org>
Thu, 6 Nov 2014 12:33:49 +0000 (12:33 +0000)
rt5645 codec support jack detection function. The patch will set
related registers if JD function is used.

Signed-off-by: Bard Liao <bardliao@realtek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/rt5645.h
sound/soc/codecs/rt5645.c
sound/soc/codecs/rt5645.h

index a5352712194be276f68243237c6186495b85a854..937f421bc66b162a1fb89f6dfbc15c7138a18891 100644 (file)
@@ -23,6 +23,9 @@ struct rt5645_platform_data {
 
        unsigned int hp_det_gpio;
        bool gpio_hp_det_active_high;
+
+       /* true if codec's jd function is used */
+       bool en_jd_func;
 };
 
 #endif
index 1423cb283f156213b577b9f24b63ff8596a67b79..286438d6916bf622a34787695254feaefc085881 100644 (file)
@@ -2203,6 +2203,13 @@ static int rt5645_probe(struct snd_soc_codec *codec)
 
        snd_soc_update_bits(codec, RT5645_CHARGE_PUMP, 0x0300, 0x0200);
 
+       /* for JD function */
+       if (rt5645->pdata.en_jd_func) {
+               snd_soc_dapm_force_enable_pin(&codec->dapm, "JD Power");
+               snd_soc_dapm_force_enable_pin(&codec->dapm, "LDO2");
+               snd_soc_dapm_sync(&codec->dapm);
+       }
+
        return 0;
 }
 
@@ -2436,6 +2443,19 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
 
        }
 
+       if (rt5645->pdata.en_jd_func) {
+               regmap_update_bits(rt5645->regmap, RT5645_GEN_CTRL3,
+                       RT5645_IRQ_CLK_GATE_CTRL | RT5645_MICINDET_MANU,
+                       RT5645_IRQ_CLK_GATE_CTRL | RT5645_MICINDET_MANU);
+               regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL1,
+                       RT5645_CBJ_BST1_EN, RT5645_CBJ_BST1_EN);
+               regmap_update_bits(rt5645->regmap, RT5645_JD_CTRL3,
+                       RT5645_JD_CBJ_EN | RT5645_JD_CBJ_POL,
+                       RT5645_JD_CBJ_EN | RT5645_JD_CBJ_POL);
+               regmap_update_bits(rt5645->regmap, RT5645_MICBIAS,
+                       RT5645_IRQ_CLK_INT, RT5645_IRQ_CLK_INT);
+       }
+
        if (rt5645->i2c->irq) {
                ret = request_threaded_irq(rt5645->i2c->irq, NULL, rt5645_irq,
                        IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING
index 5ec2520614d2714e8fc6a023cfd4ea47a77ba166..82f681b02949a605ff6659ee96cb6f398cbc7f74 100644 (file)
 #define RT5645_PWR_CLK25M_SFT                  4
 #define RT5645_PWR_CLK25M_PD                   (0x0 << 4)
 #define RT5645_PWR_CLK25M_PU                   (0x1 << 4)
+#define RT5645_IRQ_CLK_MCLK                    (0x0 << 3)
+#define RT5645_IRQ_CLK_INT                     (0x1 << 3)
 
 /* VAD Control 4 (0x9d) */
 #define RT5645_VAD_SEL_MASK                    (0x3 << 8)
@@ -2116,6 +2118,9 @@ enum {
 #define RT5645_RXDP2_SEL_ADC                   (0x1 << 3)
 #define RT5645_RXDP2_SEL_SFT                   (3)
 
+/* General Control3 (0xfc) */
+#define RT5645_IRQ_CLK_GATE_CTRL               (0x1 << 11)
+#define RT5645_MICINDET_MANU                   (0x1 << 7)
 
 /* Vendor ID (0xfd) */
 #define RT5645_VER_C                           0x2