Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 917536ae authored by John Lin's avatar John Lin Committed by Mark Brown
Browse files

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: default avatarJohn Lin <john.lin@realtek.com>
Signed-off-by: default avatarBard Liao <bardliao@realtek.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent e9159e75
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ struct rt5645_platform_data {
	/* 0 = IN2P; 1 = GPIO6; 2 = GPIO10; 3 = GPIO12 */

	unsigned int jd_mode;
	/* Invert JD when jack insert */
	bool jd_invert;
};

#endif
+7 −0
Original line number Diff line number Diff line
@@ -2829,6 +2829,9 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
			snd_soc_dapm_sync(dapm);
			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 */
		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, "Mic Det Power");
		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;
@@ -3213,6 +3219,7 @@ static struct rt5645_platform_data buddy_platform_data = {
	.dmic1_data_pin = RT5645_DMIC_DATA_GPIO5,
	.dmic2_data_pin = RT5645_DMIC_DATA_IN2P,
	.jd_mode = 3,
	.jd_invert = true,
};

static int buddy_quirk_cb(const struct dmi_system_id *id)
+4 −0
Original line number Diff line number Diff line
@@ -1626,6 +1626,10 @@
#define RT5645_OT_P_NOR				(0x0 << 10)
#define RT5645_OT_P_INV				(0x1 << 10)
#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) */
#define RT5645_IRQ_MB1_OC_MASK			(0x1 << 15)