Commit 5eb622ee authored by Kiran Gunda's avatar Kiran Gunda Committed by Lee Jones
Browse files

backlight: qcom-wled: Correct the sync_toggle sequence



As per the current implementation, after FSC (Full Scale Current)
and brightness update the sync bits are set-then-cleared.
But, the FSC and brightness sync takes place when the sync bits are
set (e.g. on a rising edge). So the hardware team recommends a
clear-then-set approach in order to guarantee such a transition
regardless of the previous register state.

Signed-off-by: default avatarKiran Gunda <kgunda@codeaurora.org>
Reviewed-by: default avatarDaniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent 4d6e9cdf
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -337,13 +337,13 @@ static int wled3_sync_toggle(struct wled *wled)

	rc = regmap_update_bits(wled->regmap,
				wled->sink_addr + WLED3_SINK_REG_SYNC,
				mask, mask);
				mask, WLED3_SINK_REG_SYNC_CLEAR);
	if (rc < 0)
		return rc;

	rc = regmap_update_bits(wled->regmap,
				wled->sink_addr + WLED3_SINK_REG_SYNC,
				mask, WLED3_SINK_REG_SYNC_CLEAR);
				mask, mask);

	return rc;
}
@@ -353,17 +353,17 @@ static int wled5_mod_sync_toggle(struct wled *wled)
	int rc;
	u8 val;

	val = (wled->cfg.mod_sel == MOD_A) ? WLED5_SINK_REG_SYNC_MOD_A_BIT :
					     WLED5_SINK_REG_SYNC_MOD_B_BIT;
	rc = regmap_update_bits(wled->regmap,
				wled->sink_addr + WLED5_SINK_REG_MOD_SYNC_BIT,
				WLED5_SINK_REG_SYNC_MASK, val);
				WLED5_SINK_REG_SYNC_MASK, 0);
	if (rc < 0)
		return rc;

	val = (wled->cfg.mod_sel == MOD_A) ? WLED5_SINK_REG_SYNC_MOD_A_BIT :
					     WLED5_SINK_REG_SYNC_MOD_B_BIT;
	return regmap_update_bits(wled->regmap,
				  wled->sink_addr + WLED5_SINK_REG_MOD_SYNC_BIT,
				  WLED5_SINK_REG_SYNC_MASK, 0);
				  WLED5_SINK_REG_SYNC_MASK, val);
}

static int wled_ovp_fault_status(struct wled *wled, bool *fault_set)