Loading drivers/leds/leds-qpnp-flash.c +144 −118 Original line number Diff line number Diff line Loading @@ -795,21 +795,8 @@ static int qpnp_flash_led_module_disable(struct qpnp_flash_led *led, struct flash_node_data *flash_node) { union power_supply_propval psy_prop; int rc; u8 val, tmp; int rc, i; rc = spmi_ext_register_readl(led->spmi_dev->ctrl, led->spmi_dev->sid, FLASH_LED_STROBE_CTRL(led->base), &val, 1); if (rc) { dev_err(&led->spmi_dev->dev, "Unable to read module enable reg\n"); return -EINVAL; } tmp = ~flash_node->trigger & val; if (!tmp) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_LED_UNLOCK_SECURE(led->base), FLASH_SECURE_MASK, FLASH_UNLOCK_SECURE); Loading @@ -828,6 +815,30 @@ static int qpnp_flash_led_module_disable(struct qpnp_flash_led *led, return -EINVAL; } if (led->pdata->hdrm_sns_ch0_en) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL0(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); return rc; } } if (led->pdata->hdrm_sns_ch1_en) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL1(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); return rc; } } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_MODULE_ENABLE_CTRL(led->base), FLASH_MODULE_ENABLE_MASK, Loading Loading @@ -883,40 +894,9 @@ static int qpnp_flash_led_module_disable(struct qpnp_flash_led *led, return -EINVAL; } } } else { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_MODULE_ENABLE_CTRL(led->base), FLASH_MODULE_ENABLE_MASK, FLASH_LED_MODULE_CTRL_DEFAULT); if (rc) { dev_err(&led->spmi_dev->dev, "Module disable failed\n"); return -EINVAL; } } if (led->pdata->hdrm_sns_ch0_en) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL0(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); return rc; } } if (led->pdata->hdrm_sns_ch1_en) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL1(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); return rc; } } for (i = 0; i < led->num_leds; i++) led->flash_node[i].flash_on = false; return 0; } Loading Loading @@ -1038,7 +1018,10 @@ static void qpnp_flash_led_work(struct work_struct *work) } if (led->flash_node[led->num_leds - 1].id == FLASH_LED_SWITCH) { if (led->flash_node[2].flash_on) { flash_node->trigger = 0; if (led->flash_node[2].flash_on) flash_node->trigger |= FLASH_LED0_TRIGGER; val = (u8)(led->flash_node[2].prgm_current * FLASH_TORCH_MAX_LEVEL / led->flash_node[2].max_current); Loading @@ -1050,9 +1033,10 @@ static void qpnp_flash_led_work(struct work_struct *work) "Torch reg write failed\n"); goto exit_flash_led_work; } } if (led->flash_node[3].flash_on) { if (led->flash_node[3].flash_on) flash_node->trigger |= FLASH_LED1_TRIGGER; val = (u8)(flash_node[3].prgm_current * FLASH_TORCH_MAX_LEVEL / led->flash_node[3].max_current); Loading @@ -1063,8 +1047,6 @@ static void qpnp_flash_led_work(struct work_struct *work) dev_err(&led->spmi_dev->dev, "Torch reg write failed\n"); goto exit_flash_led_work; } } } else { val = (u8)(flash_node->prgm_current * Loading Loading @@ -1109,8 +1091,8 @@ static void qpnp_flash_led_work(struct work_struct *work) goto exit_flash_led_work; } if (led->flash_node[2].flash_on) { if (led->pdata->hdrm_sns_ch0_en) { if (led->flash_node[2].flash_on) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL0(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, Loading @@ -1120,11 +1102,21 @@ static void qpnp_flash_led_work(struct work_struct *work) "Headroom sense enable failed\n"); goto exit_flash_led_work; } } else { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL0(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); goto exit_flash_led_work; } } } if (led->flash_node[3].flash_on) { if (led->pdata->hdrm_sns_ch1_en) { if (led->flash_node[3].flash_on) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL1(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, Loading @@ -1134,12 +1126,22 @@ static void qpnp_flash_led_work(struct work_struct *work) "Headroom sense enable failed\n"); goto exit_flash_led_work; } } else { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL1(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); goto exit_flash_led_work; } } } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_LED_STROBE_CTRL(led->base), flash_node->trigger, FLASH_STROBE_MASK, flash_node->trigger); if (rc) { dev_err(&led->spmi_dev->dev, Loading Loading @@ -1198,6 +1200,7 @@ static void qpnp_flash_led_work(struct work_struct *work) if (led->flash_node[led->num_leds - 1].id == FLASH_LED_SWITCH) { flash_node->trigger = 0; if (led->flash_node[0].flash_on && led->flash_node[1].flash_on) { if (max_curr_avail_ma < Loading @@ -1211,23 +1214,28 @@ static void qpnp_flash_led_work(struct work_struct *work) * max_curr_avail_ma / flash_node->prgm_current; } flash_node->trigger = FLASH_LED0_TRIGGER | FLASH_LED1_TRIGGER; } else { if (led->flash_node[0].flash_on) { if (led->flash_node[0].flash_on) flash_node->trigger |= FLASH_LED0_TRIGGER; led->flash_node[0].prgm_current = (max_curr_avail_ma < led->flash_node[0].prgm_current) ? max_curr_avail_ma : led->flash_node[0].prgm_current; } if (led->flash_node[1].flash_on) { if (led->flash_node[1].flash_on) flash_node->trigger |= FLASH_LED1_TRIGGER; led->flash_node[1].prgm_current = (max_curr_avail_ma < led->flash_node[1].prgm_current) ? max_curr_avail_ma : led->flash_node[1].prgm_current; } } val = (u8)(led->flash_node[0].prgm_current * FLASH_MAX_LEVEL / Loading Loading @@ -1322,8 +1330,8 @@ static void qpnp_flash_led_work(struct work_struct *work) FLASH_RAMP_UP_DELAY_US_MAX); } if (led->flash_node[0].flash_on) { if (led->pdata->hdrm_sns_ch0_en) { if (led->flash_node[0].flash_on) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL0(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, Loading @@ -1333,11 +1341,21 @@ static void qpnp_flash_led_work(struct work_struct *work) "Headroom sense enable failed\n"); goto exit_flash_led_work; } } else { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL0(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); goto exit_flash_led_work; } } } if (led->flash_node[1].flash_on) { if (led->pdata->hdrm_sns_ch1_en) { if (led->flash_node[1].flash_on) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL1(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, Loading @@ -1347,12 +1365,22 @@ static void qpnp_flash_led_work(struct work_struct *work) "Headroom sense enable failed\n"); goto exit_flash_led_work; } } else { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL1(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); goto exit_flash_led_work; } } } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_LED_STROBE_CTRL(led->base), flash_node->trigger, FLASH_STROBE_MASK, flash_node->trigger); if (rc) { dev_err(&led->spmi_dev->dev, Loading Loading @@ -1450,8 +1478,6 @@ static void qpnp_flash_led_brightness_set(struct led_classdev *led_cdev, flash_node->prgm_current = led->flash_node[0].prgm_current + led->flash_node[1].prgm_current; flash_node->trigger = FLASH_LED0_TRIGGER | FLASH_LED1_TRIGGER; schedule_work(&flash_node->work); return; } Loading Loading
drivers/leds/leds-qpnp-flash.c +144 −118 Original line number Diff line number Diff line Loading @@ -795,21 +795,8 @@ static int qpnp_flash_led_module_disable(struct qpnp_flash_led *led, struct flash_node_data *flash_node) { union power_supply_propval psy_prop; int rc; u8 val, tmp; int rc, i; rc = spmi_ext_register_readl(led->spmi_dev->ctrl, led->spmi_dev->sid, FLASH_LED_STROBE_CTRL(led->base), &val, 1); if (rc) { dev_err(&led->spmi_dev->dev, "Unable to read module enable reg\n"); return -EINVAL; } tmp = ~flash_node->trigger & val; if (!tmp) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_LED_UNLOCK_SECURE(led->base), FLASH_SECURE_MASK, FLASH_UNLOCK_SECURE); Loading @@ -828,6 +815,30 @@ static int qpnp_flash_led_module_disable(struct qpnp_flash_led *led, return -EINVAL; } if (led->pdata->hdrm_sns_ch0_en) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL0(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); return rc; } } if (led->pdata->hdrm_sns_ch1_en) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL1(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); return rc; } } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_MODULE_ENABLE_CTRL(led->base), FLASH_MODULE_ENABLE_MASK, Loading Loading @@ -883,40 +894,9 @@ static int qpnp_flash_led_module_disable(struct qpnp_flash_led *led, return -EINVAL; } } } else { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_MODULE_ENABLE_CTRL(led->base), FLASH_MODULE_ENABLE_MASK, FLASH_LED_MODULE_CTRL_DEFAULT); if (rc) { dev_err(&led->spmi_dev->dev, "Module disable failed\n"); return -EINVAL; } } if (led->pdata->hdrm_sns_ch0_en) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL0(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); return rc; } } if (led->pdata->hdrm_sns_ch1_en) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL1(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); return rc; } } for (i = 0; i < led->num_leds; i++) led->flash_node[i].flash_on = false; return 0; } Loading Loading @@ -1038,7 +1018,10 @@ static void qpnp_flash_led_work(struct work_struct *work) } if (led->flash_node[led->num_leds - 1].id == FLASH_LED_SWITCH) { if (led->flash_node[2].flash_on) { flash_node->trigger = 0; if (led->flash_node[2].flash_on) flash_node->trigger |= FLASH_LED0_TRIGGER; val = (u8)(led->flash_node[2].prgm_current * FLASH_TORCH_MAX_LEVEL / led->flash_node[2].max_current); Loading @@ -1050,9 +1033,10 @@ static void qpnp_flash_led_work(struct work_struct *work) "Torch reg write failed\n"); goto exit_flash_led_work; } } if (led->flash_node[3].flash_on) { if (led->flash_node[3].flash_on) flash_node->trigger |= FLASH_LED1_TRIGGER; val = (u8)(flash_node[3].prgm_current * FLASH_TORCH_MAX_LEVEL / led->flash_node[3].max_current); Loading @@ -1063,8 +1047,6 @@ static void qpnp_flash_led_work(struct work_struct *work) dev_err(&led->spmi_dev->dev, "Torch reg write failed\n"); goto exit_flash_led_work; } } } else { val = (u8)(flash_node->prgm_current * Loading Loading @@ -1109,8 +1091,8 @@ static void qpnp_flash_led_work(struct work_struct *work) goto exit_flash_led_work; } if (led->flash_node[2].flash_on) { if (led->pdata->hdrm_sns_ch0_en) { if (led->flash_node[2].flash_on) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL0(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, Loading @@ -1120,11 +1102,21 @@ static void qpnp_flash_led_work(struct work_struct *work) "Headroom sense enable failed\n"); goto exit_flash_led_work; } } else { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL0(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); goto exit_flash_led_work; } } } if (led->flash_node[3].flash_on) { if (led->pdata->hdrm_sns_ch1_en) { if (led->flash_node[3].flash_on) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL1(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, Loading @@ -1134,12 +1126,22 @@ static void qpnp_flash_led_work(struct work_struct *work) "Headroom sense enable failed\n"); goto exit_flash_led_work; } } else { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL1(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); goto exit_flash_led_work; } } } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_LED_STROBE_CTRL(led->base), flash_node->trigger, FLASH_STROBE_MASK, flash_node->trigger); if (rc) { dev_err(&led->spmi_dev->dev, Loading Loading @@ -1198,6 +1200,7 @@ static void qpnp_flash_led_work(struct work_struct *work) if (led->flash_node[led->num_leds - 1].id == FLASH_LED_SWITCH) { flash_node->trigger = 0; if (led->flash_node[0].flash_on && led->flash_node[1].flash_on) { if (max_curr_avail_ma < Loading @@ -1211,23 +1214,28 @@ static void qpnp_flash_led_work(struct work_struct *work) * max_curr_avail_ma / flash_node->prgm_current; } flash_node->trigger = FLASH_LED0_TRIGGER | FLASH_LED1_TRIGGER; } else { if (led->flash_node[0].flash_on) { if (led->flash_node[0].flash_on) flash_node->trigger |= FLASH_LED0_TRIGGER; led->flash_node[0].prgm_current = (max_curr_avail_ma < led->flash_node[0].prgm_current) ? max_curr_avail_ma : led->flash_node[0].prgm_current; } if (led->flash_node[1].flash_on) { if (led->flash_node[1].flash_on) flash_node->trigger |= FLASH_LED1_TRIGGER; led->flash_node[1].prgm_current = (max_curr_avail_ma < led->flash_node[1].prgm_current) ? max_curr_avail_ma : led->flash_node[1].prgm_current; } } val = (u8)(led->flash_node[0].prgm_current * FLASH_MAX_LEVEL / Loading Loading @@ -1322,8 +1330,8 @@ static void qpnp_flash_led_work(struct work_struct *work) FLASH_RAMP_UP_DELAY_US_MAX); } if (led->flash_node[0].flash_on) { if (led->pdata->hdrm_sns_ch0_en) { if (led->flash_node[0].flash_on) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL0(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, Loading @@ -1333,11 +1341,21 @@ static void qpnp_flash_led_work(struct work_struct *work) "Headroom sense enable failed\n"); goto exit_flash_led_work; } } else { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL0(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); goto exit_flash_led_work; } } } if (led->flash_node[1].flash_on) { if (led->pdata->hdrm_sns_ch1_en) { if (led->flash_node[1].flash_on) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL1(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, Loading @@ -1347,12 +1365,22 @@ static void qpnp_flash_led_work(struct work_struct *work) "Headroom sense enable failed\n"); goto exit_flash_led_work; } } else { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HDRM_SNS_ENABLE_CTRL1(led->base), FLASH_LED_HDRM_SNS_ENABLE_MASK, FLASH_LED_HDRM_SNS_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense disable failed\n"); goto exit_flash_led_work; } } } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_LED_STROBE_CTRL(led->base), flash_node->trigger, FLASH_STROBE_MASK, flash_node->trigger); if (rc) { dev_err(&led->spmi_dev->dev, Loading Loading @@ -1450,8 +1478,6 @@ static void qpnp_flash_led_brightness_set(struct led_classdev *led_cdev, flash_node->prgm_current = led->flash_node[0].prgm_current + led->flash_node[1].prgm_current; flash_node->trigger = FLASH_LED0_TRIGGER | FLASH_LED1_TRIGGER; schedule_work(&flash_node->work); return; } Loading