static int __devinit qpnp_flash_init(struct qpnp_led_data *led) { int rc; rc = qpnp_led_masked_write(led, FLASH_LED_STROBE_CTRL(led->base), FLASH_STROBE_MASK, FLASH_DISABLE_ALL); if (rc) { dev_err(&led->spmi_dev->dev, "LED %d flash write failed(%d)\n", led->id, rc); return rc; } rc = qpnp_led_masked_write(led, FLASH_ENABLE_CONTROL(led->base), FLASH_INIT_MASK, FLASH_ENABLE_MODULE); if (rc) { dev_err(&led->spmi_dev->dev, "Enable reg write failed(%d)\n", rc); return rc; } /* Set flash safety timer */ rc = qpnp_led_masked_write(led, FLASH_SAFETY_TIMER(led->base), FLASH_SAFETY_TIMER_MASK, led->flash_cfg->duration); if (rc) { dev_err(&led->spmi_dev->dev, "Safety timer reg write failed(%d)\n", rc); return rc; } /* Set max current */ rc = qpnp_led_masked_write(led, FLASH_MAX_CURR(led->base), FLASH_CURRENT_MASK, FLASH_MAX_LEVEL); if (rc) { dev_err(&led->spmi_dev->dev, "Max current reg write failed(%d)\n", rc); return rc; } /* Set clamp current */ rc = qpnp_led_masked_write(led, FLASH_CLAMP_CURR(led->base), FLASH_CURRENT_MASK, led->flash_cfg->clamp_curr); if (rc) { dev_err(&led->spmi_dev->dev, "Clamp current reg write failed(%d)\n", rc); return rc; } /* Set timer control - safety or watchdog */ if (led->flash_cfg->safety_timer) rc = qpnp_led_masked_write(led, FLASH_LED_TMR_CTRL(led->base), FLASH_TMR_MASK, FLASH_TMR_SAFETY); else rc = qpnp_led_masked_write(led, FLASH_LED_TMR_CTRL(led->base), FLASH_TMR_MASK, FLASH_TMR_WATCHDOG); if (rc) { dev_err(&led->spmi_dev->dev, "LED timer ctrl reg write failed(%d)\n", rc); return rc; } /* Set headroom */ rc = qpnp_led_masked_write(led, FLASH_HEADROOM(led->base), FLASH_HEADROOM_MASK, led->flash_cfg->headroom); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom reg write failed(%d)\n", rc); return rc; } /* Set mask enable */ rc = qpnp_led_masked_write(led, FLASH_MASK_ENABLE(led->base), FLASH_MASK_REG_MASK, FLASH_MASK_1); if (rc) { dev_err(&led->spmi_dev->dev, "Mask enable reg write failed(%d)\n", rc); return rc; } /* Set startup delay */ rc = qpnp_led_masked_write(led, FLASH_STARTUP_DELAY(led->base), FLASH_STARTUP_DLY_MASK, led->flash_cfg->startup_dly); if (rc) { dev_err(&led->spmi_dev->dev, "Startup delay reg write failed(%d)\n", rc); return rc; } rc = qpnp_led_masked_write(led, FLASH_VREG_OK_FORCE(led->base), FLASH_VREG_MASK, FLASH_HW_VREG_OK); if (rc) { dev_err(&led->spmi_dev->dev, "Vreg OK reg write failed(%d)\n", rc); return rc; } /* Set led current and enable module */ rc = qpnp_led_masked_write(led, led->flash_cfg->current_addr, FLASH_CURRENT_MASK, led->flash_cfg->current_prgm); if (rc) { dev_err(&led->spmi_dev->dev, "Current reg write failed(%d)\n", rc); return rc; } 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; } /* dump flash registers */ qpnp_dump_regs(led, flash_debug_regs, ARRAY_SIZE(flash_debug_regs)); return 0; }
static int __devinit qpnp_wled_init(struct qpnp_led_data *led) { int rc, i; u8 num_wled_strings; num_wled_strings = led->wled_cfg->num_strings; /* verify ranges */ if (led->wled_cfg->ovp_val > WLED_OVP_37V) { dev_err(&led->spmi_dev->dev, "Invalid ovp value\n"); return -EINVAL; } if (led->wled_cfg->boost_curr_lim > WLED_CURR_LIMIT_1680mA) { dev_err(&led->spmi_dev->dev, "Invalid boost current limit\n"); return -EINVAL; } if (led->wled_cfg->cp_select > WLED_CP_SELECT_MAX) { dev_err(&led->spmi_dev->dev, "Invalid pole capacitance\n"); return -EINVAL; } if ((led->max_current > WLED_MAX_CURR)) { dev_err(&led->spmi_dev->dev, "Invalid max current\n"); return -EINVAL; } if ((led->wled_cfg->ctrl_delay_us % WLED_CTL_DLY_STEP) || (led->wled_cfg->ctrl_delay_us > WLED_CTL_DLY_MAX)) { dev_err(&led->spmi_dev->dev, "Invalid control delay\n"); return -EINVAL; } /* program over voltage protection threshold */ rc = qpnp_led_masked_write(led, WLED_OVP_CFG_REG(led->base), WLED_OVP_VAL_MASK, (led->wled_cfg->ovp_val << WLED_OVP_VAL_BIT_SHFT)); if (rc) { dev_err(&led->spmi_dev->dev, "WLED OVP reg write failed(%d)\n", rc); return rc; } /* program current boost limit */ rc = qpnp_led_masked_write(led, WLED_BOOST_LIMIT_REG(led->base), WLED_BOOST_LIMIT_MASK, led->wled_cfg->boost_curr_lim); if (rc) { dev_err(&led->spmi_dev->dev, "WLED boost limit reg write failed(%d)\n", rc); return rc; } /* program output feedback */ rc = qpnp_led_masked_write(led, WLED_FDBCK_CTRL_REG(led->base), WLED_OP_FDBCK_MASK, (led->wled_cfg->op_fdbck << WLED_OP_FDBCK_BIT_SHFT)); if (rc) { dev_err(&led->spmi_dev->dev, "WLED fdbck ctrl reg write failed(%d)\n", rc); return rc; } /* program switch frequency */ rc = qpnp_led_masked_write(led, WLED_SWITCHING_FREQ_REG(led->base), WLED_SWITCH_FREQ_MASK, led->wled_cfg->switch_freq); if (rc) { dev_err(&led->spmi_dev->dev, "WLED switch freq reg write failed(%d)\n", rc); return rc; } /* program current sink */ if (led->wled_cfg->cs_out_en) { rc = qpnp_led_masked_write(led, WLED_CURR_SINK_REG(led->base), WLED_CURR_SINK_MASK, (((1 << led->wled_cfg->num_strings) - 1) << WLED_CURR_SINK_SHFT)); if (rc) { dev_err(&led->spmi_dev->dev, "WLED curr sink reg write failed(%d)\n", rc); return rc; } } /* program high pole capacitance */ rc = qpnp_led_masked_write(led, WLED_HIGH_POLE_CAP_REG(led->base), WLED_CP_SELECT_MASK, led->wled_cfg->cp_select); if (rc) { dev_err(&led->spmi_dev->dev, "WLED pole cap reg write failed(%d)\n", rc); return rc; } /* program modulator, current mod src and cabc */ for (i = 0; i < num_wled_strings; i++) { rc = qpnp_led_masked_write(led, WLED_MOD_EN_REG(led->base, i), WLED_NO_MASK, WLED_EN_MASK); if (rc) { dev_err(&led->spmi_dev->dev, "WLED mod enable reg write failed(%d)\n", rc); return rc; } if (led->wled_cfg->dig_mod_gen_en) { rc = qpnp_led_masked_write(led, WLED_MOD_EN_REG(led->base, i), WLED_NO_MASK, WLED_USE_EXT_GEN_MOD_SRC); if (rc) { dev_err(&led->spmi_dev->dev, "WLED dig mod en reg write failed(%d)\n", rc); } } rc = qpnp_led_masked_write(led, WLED_FULL_SCALE_REG(led->base, i), WLED_MAX_CURR_MASK, led->max_current); if (rc) { dev_err(&led->spmi_dev->dev, "WLED max current reg write failed(%d)\n", rc); return rc; } } /* dump wled registers */ qpnp_dump_regs(led, wled_debug_regs, ARRAY_SIZE(wled_debug_regs)); return 0; }
static int qpnp_flash_set(struct qpnp_led_data *led) { int rc; int val = led->cdev.brightness; led->flash_cfg->current_prgm = (val * FLASH_MAX_LEVEL / led->max_current); led->flash_cfg->current_prgm = led->flash_cfg->current_prgm >> FLASH_CURRENT_PRGM_SHIFT; if (!led->flash_cfg->current_prgm) led->flash_cfg->current_prgm = FLASH_CURRENT_PRGM_MIN; /* Set led current */ if (val > 0) { rc = qpnp_led_masked_write(led, led->flash_cfg->current_addr, FLASH_CURRENT_MASK, led->flash_cfg->current_prgm); if (rc) { dev_err(&led->spmi_dev->dev, "Current reg write failed(%d)\n", rc); return rc; } rc = qpnp_led_masked_write(led, led->flash_cfg->second_addr, FLASH_CURRENT_MASK, led->flash_cfg->current_prgm); if (rc) { dev_err(&led->spmi_dev->dev, "Current reg write failed(%d)\n", rc); return rc; } rc = qpnp_led_masked_write(led, FLASH_ENABLE_CONTROL(led->base), FLASH_ENABLE_MASK, FLASH_ENABLE_ALL); if (rc) { dev_err(&led->spmi_dev->dev, "Enable reg write failed(%d)\n", rc); return rc; } rc = qpnp_led_masked_write(led, FLASH_LED_STROBE_CTRL(led->base), FLASH_STROBE_MASK, FLASH_STROBE_ALL); if (rc) { dev_err(&led->spmi_dev->dev, "LED %d flash write failed(%d)\n", led->id, rc); return rc; } } else { rc = qpnp_led_masked_write(led, FLASH_ENABLE_CONTROL(led->base), FLASH_ENABLE_MASK, FLASH_DISABLE_ALL); if (rc) { dev_err(&led->spmi_dev->dev, "Enable reg write failed(%d)\n", rc); return rc; } rc = qpnp_led_masked_write(led, FLASH_LED_STROBE_CTRL(led->base), FLASH_STROBE_MASK, FLASH_DISABLE_ALL); if (rc) { dev_err(&led->spmi_dev->dev, "LED %d flash write failed(%d)\n", led->id, rc); return rc; } } qpnp_dump_regs(led, flash_debug_regs, ARRAY_SIZE(flash_debug_regs)); return 0; }
static int qpnp_flash_led_init_settings(struct qpnp_flash_led *led) { int rc; u8 val, temp_val; rc = qpnp_led_masked_write(led->spmi_dev, FLASH_MODULE_ENABLE_CTRL(led->base), FLASH_MODULE_ENABLE_MASK, FLASH_LED_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Module disable failed\n"); return rc; } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_LED_STROBE_CTRL(led->base), FLASH_STROBE_MASK, FLASH_LED_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Strobe disable failed\n"); return rc; } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_LED_TMR_CTRL(led->base), FLASH_TMR_MASK, FLASH_TMR_SAFETY); if (rc) { dev_err(&led->spmi_dev->dev, "LED timer ctrl reg write failed(%d)\n", rc); return rc; } val = (u8)(led->pdata->headroom / FLASH_LED_HEADROOM_DIVIDER - FLASH_LED_HEADROOM_OFFSET); rc = qpnp_led_masked_write(led->spmi_dev, FLASH_HEADROOM(led->base), FLASH_HEADROOM_MASK, val); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom reg write failed\n"); return rc; } val = qpnp_flash_led_get_startup_dly(led->pdata->startup_dly); rc = qpnp_led_masked_write(led->spmi_dev, FLASH_STARTUP_DELAY(led->base), FLASH_STARTUP_DLY_MASK, val); if (rc) { dev_err(&led->spmi_dev->dev, "Startup delay reg write failed\n"); return rc; } val = (u8)(led->pdata->clamp_current * FLASH_MAX_LEVEL / FLASH_LED_MAX_CURRENT_MA); rc = qpnp_led_masked_write(led->spmi_dev, FLASH_CLAMP_CURRENT(led->base), FLASH_CURRENT_MASK, val); if (rc) { dev_err(&led->spmi_dev->dev, "Clamp current reg write failed\n"); return rc; } if (led->pdata->pmic_charger_support) val = FLASH_LED_FLASH_HW_VREG_OK; else val = FLASH_LED_FLASH_SW_VREG_OK; rc = qpnp_led_masked_write(led->spmi_dev, FLASH_VREG_OK_FORCE(led->base), FLASH_VREG_OK_FORCE_MASK, val); if (rc) { dev_err(&led->spmi_dev->dev, "VREG OK force reg write failed\n"); return rc; } if (led->pdata->self_check_en) val = FLASH_MODULE_ENABLE; else val = FLASH_LED_DISABLE; rc = qpnp_led_masked_write(led->spmi_dev, FLASH_FAULT_DETECT(led->base), FLASH_FAULT_DETECT_MASK, val); if (rc) { dev_err(&led->spmi_dev->dev, "Fault detect reg write failed\n"); return rc; } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_MASK_ENABLE(led->base), FLASH_MASK_MODULE_CONTRL_MASK, FLASH_LED_MASK_MODULE_MASK2_ENABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Mask module enable failed\n"); return rc; } if (!led->pdata->thermal_derate_en) val = 0x0; else { val = led->pdata->thermal_derate_en << 7; val |= led->pdata->thermal_derate_rate << 3; val |= (led->pdata->thermal_derate_threshold - FLASH_LED_THERMAL_THRESHOLD_MIN) / FLASH_LED_THERMAL_DEVIDER; } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_THERMAL_DRATE(led->base), FLASH_THERMAL_DERATE_MASK, val); if (rc) { dev_err(&led->spmi_dev->dev, "Thermal derate reg write failed\n"); return rc; } if (!led->pdata->current_ramp_en) val = 0x0; else { val = led->pdata->current_ramp_en << 7; val |= led->pdata->ramp_up_step << 3; val |= led->pdata->ramp_dn_step; } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_CURRENT_RAMP(led->base), FLASH_CURRENT_RAMP_MASK, val); if (rc) { dev_err(&led->spmi_dev->dev, "Current ramp reg write failed\n"); return rc; } if (!led->pdata->vph_pwr_droop_en) val = 0x0; else { val = led->pdata->vph_pwr_droop_en << 7; val |= ((led->pdata->vph_pwr_droop_threshold - FLASH_LED_VPH_DROOP_THRESHOLD_MIN_MV) / FLASH_LED_VPH_DROOP_THRESHOLD_DIVIDER) << 4; temp_val = qpnp_flash_led_get_droop_debounce_time( led->pdata->vph_pwr_droop_debounce_time); if (temp_val == 0xFF) { dev_err(&led->spmi_dev->dev, "Invalid debounce time\n"); return temp_val; } val |= temp_val; } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_VPH_PWR_DROOP(led->base), FLASH_VPH_PWR_DROOP_MASK, val); if (rc) { dev_err(&led->spmi_dev->dev, "VPH PWR droop reg write failed\n"); return rc; } 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_ENABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense enable 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_ENABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Headroom sense enable failed\n"); return rc; } } return 0; }
static void qpnp_flash_led_work(struct work_struct *work) { struct flash_node_data *flash_node = container_of(work, struct flash_node_data, work); struct qpnp_flash_led *led = dev_get_drvdata(&flash_node->spmi_dev->dev); int rc, brightness = flash_node->cdev.brightness; int max_curr_avail_ma; u8 val; mutex_lock(&led->flash_led_lock); if (!brightness) goto turn_off; if (brightness < FLASH_LED_MIN_CURRENT_MA) brightness = FLASH_LED_MIN_CURRENT_MA; flash_node->prgm_current = brightness; if (flash_node->boost_regulator && !flash_node->flash_on) { if (regulator_count_voltages(flash_node->boost_regulator) > 0) { rc = regulator_set_voltage(flash_node->boost_regulator, flash_node->boost_voltage_max, flash_node->boost_voltage_max); if (rc) { dev_err(&led->spmi_dev->dev, "boost regulator set voltage failed\n"); mutex_unlock(&led->flash_led_lock); return; } } rc = regulator_enable(flash_node->boost_regulator); if (rc) { dev_err(&led->spmi_dev->dev, "Boost regulator enablement failed\n"); goto error_regulator_enable; } } if (flash_node->type == TORCH) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_LED_UNLOCK_SECURE(led->base), FLASH_SECURE_MASK, FLASH_UNLOCK_SECURE); if (rc) { dev_err(&led->spmi_dev->dev, "Secure reg write failed\n"); goto exit_flash_led_work; } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_TORCH(led->base), FLASH_TORCH_MASK, FLASH_LED_TORCH_ENABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Torch reg write failed\n"); goto exit_flash_led_work; } val = (u8)(flash_node->prgm_current * FLASH_TORCH_MAX_LEVEL / flash_node->max_current); rc = qpnp_led_masked_write(led->spmi_dev, flash_node->current_addr, FLASH_CURRENT_MASK, val); if (rc) { dev_err(&led->spmi_dev->dev, "Current reg write failed\n"); goto exit_flash_led_work; } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_MAX_CURRENT(led->base), FLASH_CURRENT_MASK, FLASH_TORCH_MAX_LEVEL); if (rc) { dev_err(&led->spmi_dev->dev, "Max current reg write failed\n"); goto exit_flash_led_work; } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_MODULE_ENABLE_CTRL(led->base), FLASH_MODULE_ENABLE | flash_node->enable, FLASH_MODULE_ENABLE | flash_node->enable); if (rc) { dev_err(&led->spmi_dev->dev, "Module enable reg write 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_node->trigger); if (rc) { dev_err(&led->spmi_dev->dev, "Strobe ctrl reg write failed\n"); goto exit_flash_led_work; } } else if (flash_node->type == FLASH) { if (led->pdata->power_detect_en) { max_curr_avail_ma = qpnp_flash_led_get_max_avail_current (flash_node, led); if (max_curr_avail_ma < 0) { dev_err(&led->spmi_dev->dev, "Failed to get Max available curr\n"); goto exit_flash_led_work; } else { if (max_curr_avail_ma < flash_node->prgm_current) { dev_err(&led->spmi_dev->dev, "battery only supports %d mA.\n", max_curr_avail_ma); flash_node->prgm_current = (u16) max_curr_avail_ma; } } } val = (u8)((flash_node->duration - FLASH_DURATION_DIVIDER) / FLASH_DURATION_DIVIDER); rc = qpnp_led_masked_write(led->spmi_dev, FLASH_SAFETY_TIMER(led->base), FLASH_SAFETY_TIMER_MASK, val); if (rc) { dev_err(&led->spmi_dev->dev, "Safety timer reg write failed\n"); goto exit_flash_led_work; } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_MAX_CURRENT(led->base), FLASH_CURRENT_MASK, FLASH_MAX_LEVEL); if (rc) { dev_err(&led->spmi_dev->dev, "Max current reg write failed\n"); goto exit_flash_led_work; } val = (u8)(flash_node->prgm_current * FLASH_MAX_LEVEL / flash_node->max_current); rc = qpnp_led_masked_write(led->spmi_dev, flash_node->current_addr, FLASH_CURRENT_MASK, val); if (rc) { dev_err(&led->spmi_dev->dev, "Current reg write failed\n"); goto exit_flash_led_work; } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_MODULE_ENABLE_CTRL(led->base), FLASH_MODULE_ENABLE | flash_node->enable, FLASH_MODULE_ENABLE | flash_node->enable); if (rc) { dev_err(&led->spmi_dev->dev, "Module enable reg write failed\n"); goto exit_flash_led_work; } usleep(FLASH_RAMP_UP_DELAY_US); rc = qpnp_led_masked_write(led->spmi_dev, FLASH_LED_STROBE_CTRL(led->base), flash_node->trigger, flash_node->trigger); if (rc) { dev_err(&led->spmi_dev->dev, "Strobe reg write failed\n"); goto exit_flash_led_work; } } flash_node->flash_on = true; mutex_unlock(&led->flash_led_lock); return; turn_off: rc = qpnp_led_masked_write(led->spmi_dev, FLASH_LED_STROBE_CTRL(led->base), flash_node->trigger, FLASH_LED_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Strobe disable failed\n"); goto exit_flash_led_work; } usleep(FLASH_RAMP_DN_DELAY_US); rc = qpnp_flash_led_module_disable(led, flash_node); if (rc) { dev_err(&led->spmi_dev->dev, "Module disable failed\n"); goto exit_flash_led_work; } exit_flash_led_work: if (flash_node->boost_regulator && flash_node->flash_on) { regulator_disable(flash_node->boost_regulator); error_regulator_enable: if (regulator_count_voltages(flash_node->boost_regulator) > 0) regulator_set_voltage(flash_node->boost_regulator, 0, flash_node->boost_voltage_max); } flash_node->flash_on = false; mutex_unlock(&led->flash_led_lock); return; }
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; 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) { if (flash_node->type == TORCH) { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_LED_UNLOCK_SECURE(led->base), FLASH_SECURE_MASK, FLASH_UNLOCK_SECURE); if (rc) { dev_err(&led->spmi_dev->dev, "Secure reg write failed\n"); return -EINVAL; } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_TORCH(led->base), FLASH_TORCH_MASK, FLASH_LED_TORCH_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Torch reg write failed\n"); return -EINVAL; } } rc = qpnp_led_masked_write(led->spmi_dev, FLASH_MODULE_ENABLE_CTRL(led->base), FLASH_MODULE_ENABLE_MASK, FLASH_LED_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Module disable failed\n"); return -EINVAL; } if (led->battery_psy) { psy_prop.intval = false; rc = led->battery_psy->set_property(led->battery_psy, POWER_SUPPLY_PROP_FLASH_ACTIVE, &psy_prop); if (rc) { dev_err(&led->spmi_dev->dev, "Failed to setup OTG pulse skip enable\n"); return -EINVAL; } } } else { rc = qpnp_led_masked_write(led->spmi_dev, FLASH_MODULE_ENABLE_CTRL(led->base), flash_node->enable, flash_node->enable); if (rc) { dev_err(&led->spmi_dev->dev, "Module disable failed\n"); return -EINVAL; } } return 0; }