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

Commit c04ad37d authored by ansharma's avatar ansharma
Browse files

leds: qpnp-flash-v2: Fix strobe control settings



Currently strobe control is cleared even when HW strobe control is not
explicitly enabled. Fix it.

CRs-Fixed: 1077179
Change-Id: I5bc6a5a46311206818d70567e31fd84adc0128be
Signed-off-by: default avataransharma <ansharma@codeaurora.org>
parent fd45ca9c
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@
#define	FLASH_LED_HDRM_VOL_MASK			GENMASK(7, 4)
#define	FLASH_LED_CURRENT_MASK			GENMASK(6, 0)
#define	FLASH_LED_ENABLE_MASK			GENMASK(2, 0)
#define	FLASH_HW_STROBE_MASK			GENMASK(2, 0)
#define	FLASH_LED_SAFETY_TMR_MASK		GENMASK(7, 0)
#define	FLASH_LED_INT_RT_STS_MASK		GENMASK(7, 0)
#define	FLASH_LED_ISC_WARMUP_DELAY_MASK		GENMASK(1, 0)
@@ -72,7 +73,7 @@
#define	FLASH_LED_THERMAL_THRSH_MASK		GENMASK(2, 0)
#define	FLASH_LED_THERMAL_OTST_MASK		GENMASK(2, 0)
#define	FLASH_LED_MOD_CTRL_MASK			BIT(7)
#define	FLASH_LED_HW_SW_STROBE_SEL_MASK		BIT(2)
#define	FLASH_LED_HW_SW_STROBE_SEL_BIT		BIT(2)
#define	FLASH_LED_VPH_DROOP_FAULT_MASK		BIT(4)
#define	FLASH_LED_LMH_MITIGATION_EN_MASK	BIT(0)
#define	FLASH_LED_CHGR_MITIGATION_EN_MASK	BIT(4)
@@ -810,7 +811,7 @@ static int qpnp_flash_led_switch_disable(struct flash_switch_data *snode)
			}
		}

		if (led->fnode[i].trigger & FLASH_LED_HW_SW_STROBE_SEL_MASK) {
		if (led->fnode[i].trigger & FLASH_LED_HW_SW_STROBE_SEL_BIT) {
			rc = qpnp_flash_led_hw_strobe_enable(&led->fnode[i],
					led->pdata->hw_strobe_option, false);
			if (rc < 0) {
@@ -830,7 +831,7 @@ static int qpnp_flash_led_switch_set(struct flash_switch_data *snode, bool on)
{
	struct qpnp_flash_led *led = dev_get_drvdata(&snode->pdev->dev);
	int rc, i, addr_offset;
	u8 val;
	u8 val, mask;

	if (snode->enabled == on) {
		dev_warn(&led->pdev->dev, "Switch node is already %s!\n",
@@ -868,9 +869,13 @@ static int qpnp_flash_led_switch_set(struct flash_switch_data *snode, bool on)
			continue;

		addr_offset = led->fnode[i].id;
		if (led->fnode[i].trigger & FLASH_LED_HW_SW_STROBE_SEL_BIT)
			mask = FLASH_HW_STROBE_MASK;
		else
			mask = FLASH_LED_HW_SW_STROBE_SEL_BIT;
		rc = qpnp_flash_led_masked_write(led,
			FLASH_LED_REG_STROBE_CTRL(led->base + addr_offset),
			FLASH_LED_ENABLE_MASK, led->fnode[i].trigger);
			mask, led->fnode[i].trigger);
		if (rc < 0)
			return rc;

@@ -898,7 +903,7 @@ static int qpnp_flash_led_switch_set(struct flash_switch_data *snode, bool on)
			}
		}

		if (led->fnode[i].trigger & FLASH_LED_HW_SW_STROBE_SEL_MASK) {
		if (led->fnode[i].trigger & FLASH_LED_HW_SW_STROBE_SEL_BIT) {
			rc = qpnp_flash_led_hw_strobe_enable(&led->fnode[i],
					led->pdata->hw_strobe_option, true);
			if (rc < 0) {
@@ -1390,7 +1395,7 @@ static int qpnp_flash_led_parse_each_led_dt(struct qpnp_flash_led *led,
	}
	fnode->trigger = (strobe_sel << 2) | (edge_trigger << 1) | active_high;

	if (fnode->trigger & FLASH_LED_HW_SW_STROBE_SEL_MASK) {
	if (fnode->trigger & FLASH_LED_HW_SW_STROBE_SEL_BIT) {
		if (of_find_property(node, "qcom,hw-strobe-gpio", NULL)) {
			fnode->hw_strobe_gpio = of_get_named_gpio(node,
						"qcom,hw-strobe-gpio", 0);