ASoC: rt5645: Add jd_invert for Broadwell
Broadwell can not triger the IRQ falling and rising simultaneously, so it can not detect jack-in and jack-out simultaneously. We add a flag "jd_invert" to platform data. If this flag is set, codec IRQ will be set to invert that forces IRQ as pulse when jack-in and jack-out. Signed-off-by: John Lin <john.lin@realtek.com> Signed-off-by: Bard Liao <bardliao@realtek.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
e9159e7577
commit
917536aeb8
|
@ -21,6 +21,8 @@ struct rt5645_platform_data {
|
||||||
/* 0 = IN2P; 1 = GPIO6; 2 = GPIO10; 3 = GPIO12 */
|
/* 0 = IN2P; 1 = GPIO6; 2 = GPIO10; 3 = GPIO12 */
|
||||||
|
|
||||||
unsigned int jd_mode;
|
unsigned int jd_mode;
|
||||||
|
/* Invert JD when jack insert */
|
||||||
|
bool jd_invert;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2829,6 +2829,9 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
|
||||||
snd_soc_dapm_sync(dapm);
|
snd_soc_dapm_sync(dapm);
|
||||||
rt5645->jack_type = SND_JACK_HEADPHONE;
|
rt5645->jack_type = SND_JACK_HEADPHONE;
|
||||||
}
|
}
|
||||||
|
if (rt5645->pdata.jd_invert)
|
||||||
|
regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
|
||||||
|
RT5645_JD_1_1_MASK, RT5645_JD_1_1_INV);
|
||||||
} else { /* jack out */
|
} else { /* jack out */
|
||||||
rt5645->jack_type = 0;
|
rt5645->jack_type = 0;
|
||||||
|
|
||||||
|
@ -2844,6 +2847,9 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
|
||||||
snd_soc_dapm_disable_pin(dapm, "LDO2");
|
snd_soc_dapm_disable_pin(dapm, "LDO2");
|
||||||
snd_soc_dapm_disable_pin(dapm, "Mic Det Power");
|
snd_soc_dapm_disable_pin(dapm, "Mic Det Power");
|
||||||
snd_soc_dapm_sync(dapm);
|
snd_soc_dapm_sync(dapm);
|
||||||
|
if (rt5645->pdata.jd_invert)
|
||||||
|
regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
|
||||||
|
RT5645_JD_1_1_MASK, RT5645_JD_1_1_NOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rt5645->jack_type;
|
return rt5645->jack_type;
|
||||||
|
@ -3213,6 +3219,7 @@ static struct rt5645_platform_data buddy_platform_data = {
|
||||||
.dmic1_data_pin = RT5645_DMIC_DATA_GPIO5,
|
.dmic1_data_pin = RT5645_DMIC_DATA_GPIO5,
|
||||||
.dmic2_data_pin = RT5645_DMIC_DATA_IN2P,
|
.dmic2_data_pin = RT5645_DMIC_DATA_IN2P,
|
||||||
.jd_mode = 3,
|
.jd_mode = 3,
|
||||||
|
.jd_invert = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int buddy_quirk_cb(const struct dmi_system_id *id)
|
static int buddy_quirk_cb(const struct dmi_system_id *id)
|
||||||
|
|
|
@ -1626,6 +1626,10 @@
|
||||||
#define RT5645_OT_P_NOR (0x0 << 10)
|
#define RT5645_OT_P_NOR (0x0 << 10)
|
||||||
#define RT5645_OT_P_INV (0x1 << 10)
|
#define RT5645_OT_P_INV (0x1 << 10)
|
||||||
#define RT5645_IRQ_JD_1_1_EN (0x1 << 9)
|
#define RT5645_IRQ_JD_1_1_EN (0x1 << 9)
|
||||||
|
#define RT5645_JD_1_1_MASK (0x1 << 7)
|
||||||
|
#define RT5645_JD_1_1_SFT 7
|
||||||
|
#define RT5645_JD_1_1_NOR (0x0 << 7)
|
||||||
|
#define RT5645_JD_1_1_INV (0x1 << 7)
|
||||||
|
|
||||||
/* IRQ Control 2 (0xbe) */
|
/* IRQ Control 2 (0xbe) */
|
||||||
#define RT5645_IRQ_MB1_OC_MASK (0x1 << 15)
|
#define RT5645_IRQ_MB1_OC_MASK (0x1 << 15)
|
||||||
|
|
Loading…
Reference in New Issue