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: ansharma <ansharma@codeaurora.org>
This commit is contained in:
parent
fd45ca9c59
commit
c04ad37d1b
1 changed files with 11 additions and 6 deletions
|
@ -58,6 +58,7 @@
|
||||||
#define FLASH_LED_HDRM_VOL_MASK GENMASK(7, 4)
|
#define FLASH_LED_HDRM_VOL_MASK GENMASK(7, 4)
|
||||||
#define FLASH_LED_CURRENT_MASK GENMASK(6, 0)
|
#define FLASH_LED_CURRENT_MASK GENMASK(6, 0)
|
||||||
#define FLASH_LED_ENABLE_MASK GENMASK(2, 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_SAFETY_TMR_MASK GENMASK(7, 0)
|
||||||
#define FLASH_LED_INT_RT_STS_MASK GENMASK(7, 0)
|
#define FLASH_LED_INT_RT_STS_MASK GENMASK(7, 0)
|
||||||
#define FLASH_LED_ISC_WARMUP_DELAY_MASK GENMASK(1, 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_THRSH_MASK GENMASK(2, 0)
|
||||||
#define FLASH_LED_THERMAL_OTST_MASK GENMASK(2, 0)
|
#define FLASH_LED_THERMAL_OTST_MASK GENMASK(2, 0)
|
||||||
#define FLASH_LED_MOD_CTRL_MASK BIT(7)
|
#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_VPH_DROOP_FAULT_MASK BIT(4)
|
||||||
#define FLASH_LED_LMH_MITIGATION_EN_MASK BIT(0)
|
#define FLASH_LED_LMH_MITIGATION_EN_MASK BIT(0)
|
||||||
#define FLASH_LED_CHGR_MITIGATION_EN_MASK BIT(4)
|
#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],
|
rc = qpnp_flash_led_hw_strobe_enable(&led->fnode[i],
|
||||||
led->pdata->hw_strobe_option, false);
|
led->pdata->hw_strobe_option, false);
|
||||||
if (rc < 0) {
|
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);
|
struct qpnp_flash_led *led = dev_get_drvdata(&snode->pdev->dev);
|
||||||
int rc, i, addr_offset;
|
int rc, i, addr_offset;
|
||||||
u8 val;
|
u8 val, mask;
|
||||||
|
|
||||||
if (snode->enabled == on) {
|
if (snode->enabled == on) {
|
||||||
dev_warn(&led->pdev->dev, "Switch node is already %s!\n",
|
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;
|
continue;
|
||||||
|
|
||||||
addr_offset = led->fnode[i].id;
|
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,
|
rc = qpnp_flash_led_masked_write(led,
|
||||||
FLASH_LED_REG_STROBE_CTRL(led->base + addr_offset),
|
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)
|
if (rc < 0)
|
||||||
return rc;
|
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],
|
rc = qpnp_flash_led_hw_strobe_enable(&led->fnode[i],
|
||||||
led->pdata->hw_strobe_option, true);
|
led->pdata->hw_strobe_option, true);
|
||||||
if (rc < 0) {
|
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;
|
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)) {
|
if (of_find_property(node, "qcom,hw-strobe-gpio", NULL)) {
|
||||||
fnode->hw_strobe_gpio = of_get_named_gpio(node,
|
fnode->hw_strobe_gpio = of_get_named_gpio(node,
|
||||||
"qcom,hw-strobe-gpio", 0);
|
"qcom,hw-strobe-gpio", 0);
|
||||||
|
|
Loading…
Add table
Reference in a new issue