Commit cdd06c91 authored by Charles Keepax's avatar Charles Keepax Committed by DidntRead
Browse files

switch: arizona: Always set HPD_GND_SEL and MICDx_GND_SEL together



These values should apparently always be set to the same thing whilst
running a detection as we currently set them independantly during HPD and
MICD this will not be the case. Furthermore, since we can't be sure if a
HPDET or MICD will run first simply set both values during both operations.

Change-Id: I7f1d1be14d378a4e79f211a04431b67f4014bd0b
Signed-off-by: default avatarCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
parent 0ea13fe9
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -606,6 +606,10 @@ static void arizona_extcon_set_mode(struct arizona_extcon_info *info, int mode)
			MOON_MICD1_GND_MASK,
			info->micd_modes[mode].gnd <<
			MOON_MICD1_GND_SHIFT);
		regmap_update_bits(arizona->regmap, MOON_HEADPHONE_DETECT_0,
				   MOON_HPD_GND_SEL_MASK,
				   info->micd_modes[mode].gnd <<
				   MOON_HPD_GND_SEL_SHIFT);
		regmap_update_bits(arizona->regmap, MOON_OUT1_CONFIG,
			MOON_HP1_GND_SEL_MASK,
			info->micd_modes[mode].gnd <<
@@ -1476,6 +1480,10 @@ static void arizona_hpdet_start_micd(struct arizona_extcon_info *info)
{
	struct arizona *arizona = info->arizona;

	regmap_update_bits(arizona->regmap, CLEARWATER_IRQ1_MASK_6,
			   CLEARWATER_IM_MICDET_EINT1,
			   CLEARWATER_IM_MICDET_EINT1);

	regmap_update_bits(arizona->regmap, MOON_MIC_DETECT_0,
			   MOON_MICD1_ADC_MODE_MASK,
			   MOON_MICD1_ADC_MODE_MASK);
@@ -1508,6 +1516,14 @@ static void arizona_hpdet_stop_micd(struct arizona_extcon_info *info)
			   start_time << ARIZONA_MICD_BIAS_STARTTIME_SHIFT |
			   rate << ARIZONA_MICD_RATE_SHIFT |
			   dbtime << ARIZONA_MICD_DBTIME_SHIFT);

	udelay(100);

	/* Clear any spurious IRQs that have happened */
	regmap_write(arizona->regmap, CLEARWATER_IRQ1_STATUS_6,
		     CLEARWATER_MICDET_EINT1);
	regmap_update_bits(arizona->regmap, CLEARWATER_IRQ1_MASK_6,
		     CLEARWATER_IM_MICDET_EINT1, 0);
}

int arizona_hpdet_start(struct arizona_extcon_info *info)
@@ -1559,6 +1575,16 @@ int arizona_hpdet_start(struct arizona_extcon_info *info)
				(hpd_clamp << MOON_HPD_OUT_SEL_SHIFT) |
				(hpd_sense << MOON_HPD_FRC_SEL_SHIFT) |
				(hpd_gnd << MOON_HPD_GND_SEL_SHIFT);

		ret = regmap_update_bits(arizona->regmap, MOON_MIC_DETECT_0,
					 MOON_MICD1_GND_MASK,
					 hpd_gnd << MOON_MICD1_GND_SHIFT);
		if (ret) {
			dev_err(arizona->dev, "Failed to set MICD_GND: %d\n",
				ret);
			goto err;
		}

		ret = regmap_update_bits(arizona->regmap,
				MOON_HEADPHONE_DETECT_0,
				MOON_HPD_GND_SEL_MASK |