Loading drivers/leds/leds-qpnp.c +28 −33 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <linux/workqueue.h> #include <linux/delay.h> #include <linux/regulator/consumer.h> #include <linux/delay.h> #define WLED_MOD_EN_REG(base, n) (base + 0x60 + n*0x10) #define WLED_IDAC_DLY_REG(base, n) (WLED_MOD_EN_REG(base, n) + 0x01) Loading Loading @@ -102,6 +103,7 @@ #define FLASH_WATCHDOG_TMR(base) (base + 0x49) #define FLASH_FAULT_DETECT(base) (base + 0x51) #define FLASH_PERIPHERAL_SUBTYPE(base) (base + 0x05) #define FLASH_CURRENT_RAMP(base) (base + 0x54) #define FLASH_MAX_LEVEL 0x4F #define TORCH_MAX_LEVEL 0x0F Loading @@ -120,6 +122,7 @@ #define FLASH_HW_VREG_OK 0x40 #define FLASH_VREG_MASK 0xC0 #define FLASH_STARTUP_DLY_MASK 0x02 #define FLASH_CURRENT_RAMP_MASK 0xBF #define FLASH_ENABLE_ALL 0xE0 #define FLASH_ENABLE_MODULE 0x80 Loading @@ -131,6 +134,7 @@ #define FLASH_INIT_MASK 0xE0 #define FLASH_SELFCHECK_ENABLE 0x80 #define FLASH_WATCHDOG_MASK 0x1F #define FLASH_RAMP_STEP_27US 0xBF #define FLASH_STROBE_SW 0xC0 #define FLASH_STROBE_HW 0x04 Loading @@ -150,6 +154,9 @@ #define FLASH_SUBTYPE_DUAL 0x01 #define FLASH_SUBTYPE_SINGLE 0x02 #define FLASH_RAMP_UP_DELAY_US 1000 #define FLASH_RAMP_DN_DELAY_US 2160 #define LED_TRIGGER_DEFAULT "none" #define RGB_LED_SRC_SEL(base) (base + 0x45) Loading Loading @@ -930,22 +937,6 @@ static int qpnp_flash_set(struct qpnp_led_data *led) rc); goto error_flash_set; } /* * Write 0x80 to MODULE_ENABLE before writing * 0xE0 in order to avoid a hardware bug caused * by register value going from 0x00 to 0xE0. */ rc = qpnp_led_masked_write(led, FLASH_ENABLE_CONTROL(led->base), FLASH_ENABLE_MODULE_MASK, FLASH_ENABLE_MODULE); if (rc) { dev_err(&led->spmi_dev->dev, "Enable reg write failed(%d)\n", rc); return rc; } } qpnp_led_masked_write(led, FLASH_MAX_CURR(led->base), Loading Loading @@ -1077,22 +1068,6 @@ static int qpnp_flash_set(struct qpnp_led_data *led) goto error_flash_set; } /* * Write 0x80 to MODULE_ENABLE before writing * 0xE0 in order to avoid a hardware bug caused * by register value going from 0x00 to 0xE0. */ rc = qpnp_led_masked_write(led, FLASH_ENABLE_CONTROL(led->base), FLASH_ENABLE_MODULE_MASK, FLASH_ENABLE_MODULE); if (rc) { dev_err(&led->spmi_dev->dev, "Enable reg write failed(%d)\n", rc); goto error_flash_set; } rc = qpnp_led_masked_write(led, led->flash_cfg->current_addr, FLASH_CURRENT_MASK, Loading @@ -1113,6 +1088,11 @@ static int qpnp_flash_set(struct qpnp_led_data *led) goto error_flash_set; } /* * Add 1ms delay for bharger enter stable state */ usleep(FLASH_RAMP_UP_DELAY_US); if (!led->flash_cfg->strobe_type) { rc = qpnp_led_masked_write(led, FLASH_LED_STROBE_CTRL(led->base), Loading Loading @@ -1174,6 +1154,12 @@ static int qpnp_flash_set(struct qpnp_led_data *led) } } } else { /* * Disable module after ramp down complete for stable * behavior */ usleep(FLASH_RAMP_DN_DELAY_US); rc = qpnp_led_masked_write(led, FLASH_ENABLE_CONTROL(led->base), led->flash_cfg->enable_module & Loading Loading @@ -2258,7 +2244,7 @@ static int qpnp_flash_init(struct qpnp_led_data *led) /* Disable flash LED module */ rc = qpnp_led_masked_write(led, FLASH_ENABLE_CONTROL(led->base), FLASH_ENABLE_MODULE_MASK, FLASH_DISABLE_ALL); FLASH_ENABLE_MASK, FLASH_DISABLE_ALL); if (rc) { dev_err(&led->spmi_dev->dev, "Enable reg write failed(%d)\n", rc); Loading Loading @@ -2327,6 +2313,15 @@ static int qpnp_flash_init(struct qpnp_led_data *led) return rc; } /* Set current ramp */ rc = qpnp_led_masked_write(led, FLASH_CURRENT_RAMP(led->base), FLASH_CURRENT_RAMP_MASK, FLASH_RAMP_STEP_27US); if (rc) { dev_err(&led->spmi_dev->dev, "Current ramp reg write failed(%d)\n", rc); return rc; } led->flash_cfg->strobe_type = 0; /* dump flash registers */ Loading Loading
drivers/leds/leds-qpnp.c +28 −33 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <linux/workqueue.h> #include <linux/delay.h> #include <linux/regulator/consumer.h> #include <linux/delay.h> #define WLED_MOD_EN_REG(base, n) (base + 0x60 + n*0x10) #define WLED_IDAC_DLY_REG(base, n) (WLED_MOD_EN_REG(base, n) + 0x01) Loading Loading @@ -102,6 +103,7 @@ #define FLASH_WATCHDOG_TMR(base) (base + 0x49) #define FLASH_FAULT_DETECT(base) (base + 0x51) #define FLASH_PERIPHERAL_SUBTYPE(base) (base + 0x05) #define FLASH_CURRENT_RAMP(base) (base + 0x54) #define FLASH_MAX_LEVEL 0x4F #define TORCH_MAX_LEVEL 0x0F Loading @@ -120,6 +122,7 @@ #define FLASH_HW_VREG_OK 0x40 #define FLASH_VREG_MASK 0xC0 #define FLASH_STARTUP_DLY_MASK 0x02 #define FLASH_CURRENT_RAMP_MASK 0xBF #define FLASH_ENABLE_ALL 0xE0 #define FLASH_ENABLE_MODULE 0x80 Loading @@ -131,6 +134,7 @@ #define FLASH_INIT_MASK 0xE0 #define FLASH_SELFCHECK_ENABLE 0x80 #define FLASH_WATCHDOG_MASK 0x1F #define FLASH_RAMP_STEP_27US 0xBF #define FLASH_STROBE_SW 0xC0 #define FLASH_STROBE_HW 0x04 Loading @@ -150,6 +154,9 @@ #define FLASH_SUBTYPE_DUAL 0x01 #define FLASH_SUBTYPE_SINGLE 0x02 #define FLASH_RAMP_UP_DELAY_US 1000 #define FLASH_RAMP_DN_DELAY_US 2160 #define LED_TRIGGER_DEFAULT "none" #define RGB_LED_SRC_SEL(base) (base + 0x45) Loading Loading @@ -930,22 +937,6 @@ static int qpnp_flash_set(struct qpnp_led_data *led) rc); goto error_flash_set; } /* * Write 0x80 to MODULE_ENABLE before writing * 0xE0 in order to avoid a hardware bug caused * by register value going from 0x00 to 0xE0. */ rc = qpnp_led_masked_write(led, FLASH_ENABLE_CONTROL(led->base), FLASH_ENABLE_MODULE_MASK, FLASH_ENABLE_MODULE); if (rc) { dev_err(&led->spmi_dev->dev, "Enable reg write failed(%d)\n", rc); return rc; } } qpnp_led_masked_write(led, FLASH_MAX_CURR(led->base), Loading Loading @@ -1077,22 +1068,6 @@ static int qpnp_flash_set(struct qpnp_led_data *led) goto error_flash_set; } /* * Write 0x80 to MODULE_ENABLE before writing * 0xE0 in order to avoid a hardware bug caused * by register value going from 0x00 to 0xE0. */ rc = qpnp_led_masked_write(led, FLASH_ENABLE_CONTROL(led->base), FLASH_ENABLE_MODULE_MASK, FLASH_ENABLE_MODULE); if (rc) { dev_err(&led->spmi_dev->dev, "Enable reg write failed(%d)\n", rc); goto error_flash_set; } rc = qpnp_led_masked_write(led, led->flash_cfg->current_addr, FLASH_CURRENT_MASK, Loading @@ -1113,6 +1088,11 @@ static int qpnp_flash_set(struct qpnp_led_data *led) goto error_flash_set; } /* * Add 1ms delay for bharger enter stable state */ usleep(FLASH_RAMP_UP_DELAY_US); if (!led->flash_cfg->strobe_type) { rc = qpnp_led_masked_write(led, FLASH_LED_STROBE_CTRL(led->base), Loading Loading @@ -1174,6 +1154,12 @@ static int qpnp_flash_set(struct qpnp_led_data *led) } } } else { /* * Disable module after ramp down complete for stable * behavior */ usleep(FLASH_RAMP_DN_DELAY_US); rc = qpnp_led_masked_write(led, FLASH_ENABLE_CONTROL(led->base), led->flash_cfg->enable_module & Loading Loading @@ -2258,7 +2244,7 @@ static int qpnp_flash_init(struct qpnp_led_data *led) /* Disable flash LED module */ rc = qpnp_led_masked_write(led, FLASH_ENABLE_CONTROL(led->base), FLASH_ENABLE_MODULE_MASK, FLASH_DISABLE_ALL); FLASH_ENABLE_MASK, FLASH_DISABLE_ALL); if (rc) { dev_err(&led->spmi_dev->dev, "Enable reg write failed(%d)\n", rc); Loading Loading @@ -2327,6 +2313,15 @@ static int qpnp_flash_init(struct qpnp_led_data *led) return rc; } /* Set current ramp */ rc = qpnp_led_masked_write(led, FLASH_CURRENT_RAMP(led->base), FLASH_CURRENT_RAMP_MASK, FLASH_RAMP_STEP_27US); if (rc) { dev_err(&led->spmi_dev->dev, "Current ramp reg write failed(%d)\n", rc); return rc; } led->flash_cfg->strobe_type = 0; /* dump flash registers */ Loading