diff options
| -rw-r--r-- | include/sound/rt5645.h | 1 | ||||
| -rw-r--r-- | sound/soc/codecs/rt5645.c | 35 | ||||
| -rw-r--r-- | sound/soc/codecs/rt5645.h | 7 |
3 files changed, 42 insertions, 1 deletions
diff --git a/include/sound/rt5645.h b/include/sound/rt5645.h index 937f421bc66b..120d9610054e 100644 --- a/include/sound/rt5645.h +++ b/include/sound/rt5645.h | |||
| @@ -26,6 +26,7 @@ struct rt5645_platform_data { | |||
| 26 | 26 | ||
| 27 | /* true if codec's jd function is used */ | 27 | /* true if codec's jd function is used */ |
| 28 | bool en_jd_func; | 28 | bool en_jd_func; |
| 29 | unsigned int jd_mode; | ||
| 29 | }; | 30 | }; |
| 30 | 31 | ||
| 31 | #endif | 32 | #endif |
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c index ef88b506a017..6e9cd8e743a7 100644 --- a/sound/soc/codecs/rt5645.c +++ b/sound/soc/codecs/rt5645.c | |||
| @@ -2239,7 +2239,8 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec) | |||
| 2239 | 2239 | ||
| 2240 | snd_soc_dapm_disable_pin(&codec->dapm, "micbias1"); | 2240 | snd_soc_dapm_disable_pin(&codec->dapm, "micbias1"); |
| 2241 | snd_soc_dapm_disable_pin(&codec->dapm, "micbias2"); | 2241 | snd_soc_dapm_disable_pin(&codec->dapm, "micbias2"); |
| 2242 | snd_soc_dapm_disable_pin(&codec->dapm, "LDO2"); | 2242 | if (rt5645->pdata.jd_mode == 0) |
| 2243 | snd_soc_dapm_disable_pin(&codec->dapm, "LDO2"); | ||
| 2243 | snd_soc_dapm_disable_pin(&codec->dapm, "Mic Det Power"); | 2244 | snd_soc_dapm_disable_pin(&codec->dapm, "Mic Det Power"); |
| 2244 | snd_soc_dapm_sync(&codec->dapm); | 2245 | snd_soc_dapm_sync(&codec->dapm); |
| 2245 | } | 2246 | } |
| @@ -2543,6 +2544,38 @@ static int rt5645_i2c_probe(struct i2c_client *i2c, | |||
| 2543 | RT5645_IRQ_CLK_INT, RT5645_IRQ_CLK_INT); | 2544 | RT5645_IRQ_CLK_INT, RT5645_IRQ_CLK_INT); |
| 2544 | } | 2545 | } |
| 2545 | 2546 | ||
| 2547 | if (rt5645->pdata.jd_mode) { | ||
| 2548 | regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2, | ||
| 2549 | RT5645_IRQ_JD_1_1_EN, RT5645_IRQ_JD_1_1_EN); | ||
| 2550 | regmap_update_bits(rt5645->regmap, RT5645_GEN_CTRL3, | ||
| 2551 | RT5645_JD_PSV_MODE, RT5645_JD_PSV_MODE); | ||
| 2552 | regmap_update_bits(rt5645->regmap, RT5645_HPO_MIXER, | ||
| 2553 | RT5645_IRQ_PSV_MODE, RT5645_IRQ_PSV_MODE); | ||
| 2554 | regmap_update_bits(rt5645->regmap, RT5645_MICBIAS, | ||
| 2555 | RT5645_MIC2_OVCD_EN, RT5645_MIC2_OVCD_EN); | ||
| 2556 | regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1, | ||
| 2557 | RT5645_GP1_PIN_IRQ, RT5645_GP1_PIN_IRQ); | ||
| 2558 | switch (rt5645->pdata.jd_mode) { | ||
| 2559 | case 1: | ||
| 2560 | regmap_update_bits(rt5645->regmap, RT5645_A_JD_CTRL1, | ||
| 2561 | RT5645_JD1_MODE_MASK, | ||
| 2562 | RT5645_JD1_MODE_0); | ||
| 2563 | break; | ||
| 2564 | case 2: | ||
| 2565 | regmap_update_bits(rt5645->regmap, RT5645_A_JD_CTRL1, | ||
| 2566 | RT5645_JD1_MODE_MASK, | ||
| 2567 | RT5645_JD1_MODE_1); | ||
| 2568 | break; | ||
| 2569 | case 3: | ||
| 2570 | regmap_update_bits(rt5645->regmap, RT5645_A_JD_CTRL1, | ||
| 2571 | RT5645_JD1_MODE_MASK, | ||
| 2572 | RT5645_JD1_MODE_2); | ||
| 2573 | break; | ||
| 2574 | default: | ||
| 2575 | break; | ||
| 2576 | } | ||
| 2577 | } | ||
| 2578 | |||
| 2546 | if (rt5645->i2c->irq) { | 2579 | if (rt5645->i2c->irq) { |
| 2547 | ret = request_threaded_irq(rt5645->i2c->irq, NULL, rt5645_irq, | 2580 | ret = request_threaded_irq(rt5645->i2c->irq, NULL, rt5645_irq, |
| 2548 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | 2581 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING |
diff --git a/sound/soc/codecs/rt5645.h b/sound/soc/codecs/rt5645.h index c72220abdbc0..a815e36a2bdb 100644 --- a/sound/soc/codecs/rt5645.h +++ b/sound/soc/codecs/rt5645.h | |||
| @@ -594,6 +594,7 @@ | |||
| 594 | #define RT5645_M_DAC1_HM_SFT 14 | 594 | #define RT5645_M_DAC1_HM_SFT 14 |
| 595 | #define RT5645_M_HPVOL_HM (0x1 << 13) | 595 | #define RT5645_M_HPVOL_HM (0x1 << 13) |
| 596 | #define RT5645_M_HPVOL_HM_SFT 13 | 596 | #define RT5645_M_HPVOL_HM_SFT 13 |
| 597 | #define RT5645_IRQ_PSV_MODE (0x1 << 12) | ||
| 597 | 598 | ||
| 598 | /* SPK Left Mixer Control (0x46) */ | 599 | /* SPK Left Mixer Control (0x46) */ |
| 599 | #define RT5645_G_RM_L_SM_L_MASK (0x3 << 14) | 600 | #define RT5645_G_RM_L_SM_L_MASK (0x3 << 14) |
| @@ -1350,6 +1351,10 @@ | |||
| 1350 | #define RT5645_PWR_CLK25M_PU (0x1 << 4) | 1351 | #define RT5645_PWR_CLK25M_PU (0x1 << 4) |
| 1351 | #define RT5645_IRQ_CLK_MCLK (0x0 << 3) | 1352 | #define RT5645_IRQ_CLK_MCLK (0x0 << 3) |
| 1352 | #define RT5645_IRQ_CLK_INT (0x1 << 3) | 1353 | #define RT5645_IRQ_CLK_INT (0x1 << 3) |
| 1354 | #define RT5645_JD1_MODE_MASK (0x3 << 0) | ||
| 1355 | #define RT5645_JD1_MODE_0 (0x0 << 0) | ||
| 1356 | #define RT5645_JD1_MODE_1 (0x1 << 0) | ||
| 1357 | #define RT5645_JD1_MODE_2 (0x2 << 0) | ||
| 1353 | 1358 | ||
| 1354 | /* VAD Control 4 (0x9d) */ | 1359 | /* VAD Control 4 (0x9d) */ |
| 1355 | #define RT5645_VAD_SEL_MASK (0x3 << 8) | 1360 | #define RT5645_VAD_SEL_MASK (0x3 << 8) |
| @@ -1638,6 +1643,7 @@ | |||
| 1638 | #define RT5645_OT_P_SFT 10 | 1643 | #define RT5645_OT_P_SFT 10 |
| 1639 | #define RT5645_OT_P_NOR (0x0 << 10) | 1644 | #define RT5645_OT_P_NOR (0x0 << 10) |
| 1640 | #define RT5645_OT_P_INV (0x1 << 10) | 1645 | #define RT5645_OT_P_INV (0x1 << 10) |
| 1646 | #define RT5645_IRQ_JD_1_1_EN (0x1 << 9) | ||
| 1641 | 1647 | ||
| 1642 | /* IRQ Control 2 (0xbe) */ | 1648 | /* IRQ Control 2 (0xbe) */ |
| 1643 | #define RT5645_IRQ_MB1_OC_MASK (0x1 << 15) | 1649 | #define RT5645_IRQ_MB1_OC_MASK (0x1 << 15) |
| @@ -2120,6 +2126,7 @@ enum { | |||
| 2120 | #define RT5645_RXDP2_SEL_SFT (3) | 2126 | #define RT5645_RXDP2_SEL_SFT (3) |
| 2121 | 2127 | ||
| 2122 | /* General Control3 (0xfc) */ | 2128 | /* General Control3 (0xfc) */ |
| 2129 | #define RT5645_JD_PSV_MODE (0x1 << 12) | ||
| 2123 | #define RT5645_IRQ_CLK_GATE_CTRL (0x1 << 11) | 2130 | #define RT5645_IRQ_CLK_GATE_CTRL (0x1 << 11) |
| 2124 | #define RT5645_MICINDET_MANU (0x1 << 7) | 2131 | #define RT5645_MICINDET_MANU (0x1 << 7) |
| 2125 | 2132 | ||
