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

Commit 12695a1c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: wcd9xxx: Don't change button threshold registers"

parents f0a85ae8 018cf081
Loading
Loading
Loading
Loading
+86 −66
Original line number Diff line number Diff line
@@ -213,7 +213,6 @@ static void wcd9xxx_pause_hs_polling(struct wcd9xxx_mbhc *mbhc)
/* called under codec_resource_lock acquisition */
static void wcd9xxx_start_hs_polling(struct wcd9xxx_mbhc *mbhc)
{
	s16 v_brh, v_b1_hu;
	struct snd_soc_codec *codec = mbhc->codec;
	int mbhc_state = mbhc->mbhc_state;

@@ -254,17 +253,6 @@ static void wcd9xxx_start_hs_polling(struct wcd9xxx_mbhc *mbhc)
		/* set to max */
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B6_CTL, 0x7F);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B5_CTL, 0xFF);

		v_brh = wcd9xxx_get_current_v(mbhc, WCD9XXX_CURRENT_V_BR_H);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B10_CTL,
			      (v_brh >> 8) & 0xFF);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B9_CTL,
			      v_brh & 0xFF);
		v_b1_hu = wcd9xxx_get_current_v(mbhc, WCD9XXX_CURRENT_V_B1_HU);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B3_CTL,
			      v_b1_hu & 0xFF);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B4_CTL,
			      (v_b1_hu >> 8) & 0xFF);
	}

	snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_EN_CTL, 0x1);
@@ -325,22 +313,32 @@ static bool __wcd9xxx_switch_micbias(struct wcd9xxx_mbhc *mbhc,
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B2_CTL,
				      (d->v_ins_hu[MBHC_V_IDX_VDDIO] >> 8) &
				      0xFF);

			if (mbhc->mbhc_state != MBHC_STATE_POTENTIAL_RECOVERY) {
				/* Threshods for button press */
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B3_CTL,
				snd_soc_write(codec,
					WCD9XXX_A_CDC_MBHC_VOLT_B3_CTL,
					d->v_b1_hu[MBHC_V_IDX_VDDIO] & 0xFF);
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B4_CTL,
				snd_soc_write(codec,
					WCD9XXX_A_CDC_MBHC_VOLT_B4_CTL,
					(d->v_b1_hu[MBHC_V_IDX_VDDIO] >> 8) &
					0xFF);
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B5_CTL,
				snd_soc_write(codec,
					WCD9XXX_A_CDC_MBHC_VOLT_B5_CTL,
					d->v_b1_h[MBHC_V_IDX_VDDIO] & 0xFF);
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B6_CTL,
				snd_soc_write(codec,
					WCD9XXX_A_CDC_MBHC_VOLT_B6_CTL,
					(d->v_b1_h[MBHC_V_IDX_VDDIO] >> 8) &
					0xFF);
				/* Threshods for button release */
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B9_CTL,
				snd_soc_write(codec,
					WCD9XXX_A_CDC_MBHC_VOLT_B9_CTL,
					d->v_brh[MBHC_V_IDX_VDDIO] & 0xFF);
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B10_CTL,
				      (d->v_brh[MBHC_V_IDX_VDDIO] >> 8) & 0xFF);
				snd_soc_write(codec,
					WCD9XXX_A_CDC_MBHC_VOLT_B10_CTL,
					(d->v_brh[MBHC_V_IDX_VDDIO] >> 8) &
					0xFF);
			}
			pr_debug("%s: Programmed MBHC thresholds to VDDIO\n",
				 __func__);
		}
@@ -376,22 +374,31 @@ static bool __wcd9xxx_switch_micbias(struct wcd9xxx_mbhc *mbhc,
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B2_CTL,
					(d->v_ins_hu[MBHC_V_IDX_CFILT] >> 8) &
					0xFF);
			if (mbhc->mbhc_state != MBHC_STATE_POTENTIAL_RECOVERY) {
				/* Revert threshods for button press */
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B3_CTL,
				snd_soc_write(codec,
					WCD9XXX_A_CDC_MBHC_VOLT_B3_CTL,
					d->v_b1_hu[MBHC_V_IDX_CFILT] & 0xFF);
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B4_CTL,
				snd_soc_write(codec,
					WCD9XXX_A_CDC_MBHC_VOLT_B4_CTL,
					(d->v_b1_hu[MBHC_V_IDX_CFILT] >> 8) &
					0xFF);
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B5_CTL,
				snd_soc_write(codec,
					WCD9XXX_A_CDC_MBHC_VOLT_B5_CTL,
					d->v_b1_h[MBHC_V_IDX_CFILT] & 0xFF);
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B6_CTL,
				snd_soc_write(codec,
					WCD9XXX_A_CDC_MBHC_VOLT_B6_CTL,
					(d->v_b1_h[MBHC_V_IDX_CFILT] >> 8) &
					0xFF);
				/* Revert threshods for button release */
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B9_CTL,
				snd_soc_write(codec,
					WCD9XXX_A_CDC_MBHC_VOLT_B9_CTL,
					d->v_brh[MBHC_V_IDX_CFILT] & 0xFF);
			snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B10_CTL,
				      (d->v_brh[MBHC_V_IDX_CFILT] >> 8) & 0xFF);
				snd_soc_write(codec,
					WCD9XXX_A_CDC_MBHC_VOLT_B10_CTL,
					(d->v_brh[MBHC_V_IDX_CFILT] >> 8) &
					0xFF);
			}
			pr_debug("%s: Programmed MBHC thresholds to MICBIAS\n",
					__func__);
		}
@@ -489,13 +496,18 @@ static void wcd9xxx_calibrate_hs_polling(struct wcd9xxx_mbhc *mbhc)
	snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B1_CTL, v_ins_hu & 0xFF);
	snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B2_CTL,
		      (v_ins_hu >> 8) & 0xFF);
	snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B3_CTL, v_b1_hu & 0xFF);

	if (mbhc->mbhc_state != MBHC_STATE_POTENTIAL_RECOVERY) {
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B3_CTL, v_b1_hu &
				0xFF);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B4_CTL,
				(v_b1_hu >> 8) & 0xFF);
	snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B5_CTL, v_b1_h & 0xFF);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B5_CTL, v_b1_h &
				0xFF);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B6_CTL,
				(v_b1_h >> 8) & 0xFF);
	snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B9_CTL, v_brh & 0xFF);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B9_CTL, v_brh &
				0xFF);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B10_CTL,
				(v_brh >> 8) & 0xFF);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B11_CTL,
@@ -503,6 +515,7 @@ static void wcd9xxx_calibrate_hs_polling(struct wcd9xxx_mbhc *mbhc)
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B12_CTL,
				(mbhc->mbhc_data.v_brl >> 8) & 0xFF);
	}
}

static void wcd9xxx_codec_switch_cfilt_mode(struct wcd9xxx_mbhc *mbhc,
					    bool fast)
@@ -3148,15 +3161,22 @@ static int wcd9xxx_update_rel_threshold(struct wcd9xxx_mbhc *mbhc, int ceilmv)
	mv = ceilmv + btn_det->v_btn_press_delta_cic;
	pr_debug("%s: reprogram vb1hu/vbrh to %dmv\n", __func__, mv);

	/* update LSB first so mbhc hardware block doesn't see too low value */
	if (mbhc->mbhc_state != MBHC_STATE_POTENTIAL_RECOVERY) {
		/*
		 * update LSB first so mbhc hardware block
		 * doesn't see too low value.
		 */
		v_b1_hu = wcd9xxx_codec_v_sta_dce(mbhc, STA, mv, false);
	snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B3_CTL, v_b1_hu & 0xFF);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B3_CTL, v_b1_hu &
				0xFF);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B4_CTL,
				(v_b1_hu >> 8) & 0xFF);
		v_brh = wcd9xxx_codec_v_sta_dce(mbhc, DCE, mv, false);
	snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B9_CTL, v_brh & 0xFF);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B9_CTL, v_brh &
				0xFF);
		snd_soc_write(codec, WCD9XXX_A_CDC_MBHC_VOLT_B10_CTL,
				(v_brh >> 8) & 0xFF);
	}
	return 0;
}