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

Commit 01a86d28 authored by Vatsal Bucha's avatar Vatsal Bucha
Browse files

ASoC: codec: Disable surge protection before impedance detection



If surge protection is enabled, it interferes with HPHL
and does not give proper impedance for high impedance cable.
Disable surge protection before impedance detection and
enable it again after impedance detection on wcd937x and wcd938x.

Change-Id: I13840b0ba9fd9ce16b90f42dcd1a25ffb928b504
Signed-off-by: default avatarVatsal Bucha <vbucha@codeaurora.org>
parent 4f42ed04
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -547,6 +547,12 @@ static void wcd937x_wcd_mbhc_calc_impedance(struct wcd_mbhc *mbhc, uint32_t *zl,
	regmap_update_bits(wcd937x->regmap,
			   WCD937X_ANA_MBHC_MECH, 0x01, 0x00);

	/* Disable surge protection before impedance detection.
	 * This is done to give correct value for high impedance.
	 */
	regmap_update_bits(wcd937x->regmap,
			   WCD937X_HPH_SURGE_HPHLR_SURGE_EN, 0xC0, 0x00);

	/* First get impedance on Left */
	d1 = d1_a[1];
	zdet_param_ptr = &zdet_param[1];
@@ -663,6 +669,9 @@ static void wcd937x_wcd_mbhc_calc_impedance(struct wcd_mbhc *mbhc, uint32_t *zl,
		mbhc->hph_type = WCD_MBHC_HPH_MONO;
	}

	/* Enable surge protection again after impedance detection */
	regmap_update_bits(wcd937x->regmap,
			   WCD937X_HPH_SURGE_HPHLR_SURGE_EN, 0xC0, 0xC0);
zdet_complete:
	snd_soc_component_write(component, WCD937X_ANA_MBHC_BTN5, reg0);
	snd_soc_component_write(component, WCD937X_ANA_MBHC_BTN6, reg1);
+9 −0
Original line number Diff line number Diff line
@@ -547,6 +547,12 @@ static void wcd938x_wcd_mbhc_calc_impedance(struct wcd_mbhc *mbhc, uint32_t *zl,
	regmap_update_bits(wcd938x->regmap,
			   WCD938X_ANA_MBHC_MECH, 0x01, 0x00);

	/* Disable surge protection before impedance detection.
	 * This is done to give correct value for high impedance.
	 */
	regmap_update_bits(wcd938x->regmap,
                          WCD938X_HPH_SURGE_HPHLR_SURGE_EN, 0xC0, 0x00);

	/* First get impedance on Left */
	d1 = d1_a[1];
	zdet_param_ptr = &zdet_param[1];
@@ -656,6 +662,9 @@ static void wcd938x_wcd_mbhc_calc_impedance(struct wcd_mbhc *mbhc, uint32_t *zl,
		mbhc->hph_type = WCD_MBHC_HPH_MONO;
	}

	/* Enable surge protection again after impedance detection */
	regmap_update_bits(wcd938x->regmap,
			   WCD938X_HPH_SURGE_HPHLR_SURGE_EN, 0xC0, 0xC0);
zdet_complete:
	snd_soc_component_write(component, WCD938X_ANA_MBHC_BTN5, reg0);
	snd_soc_component_write(component, WCD938X_ANA_MBHC_BTN6, reg1);