in leds-lp8860.c [239:308]
static int lp8860_init(struct lp8860_led *led)
{
unsigned int read_buf;
int ret, i, reg_count;
if (led->regulator) {
ret = regulator_enable(led->regulator);
if (ret) {
dev_err(&led->client->dev,
"Failed to enable regulator\n");
return ret;
}
}
if (led->enable_gpio)
gpiod_direction_output(led->enable_gpio, 1);
ret = lp8860_fault_check(led);
if (ret)
goto out;
ret = regmap_read(led->regmap, LP8860_STATUS, &read_buf);
if (ret)
goto out;
ret = lp8860_unlock_eeprom(led, LP8860_UNLOCK_EEPROM);
if (ret) {
dev_err(&led->client->dev, "Failed unlocking EEPROM\n");
goto out;
}
reg_count = ARRAY_SIZE(lp8860_eeprom_disp_regs) / sizeof(lp8860_eeprom_disp_regs[0]);
for (i = 0; i < reg_count; i++) {
ret = regmap_write(led->eeprom_regmap,
lp8860_eeprom_disp_regs[i].reg,
lp8860_eeprom_disp_regs[i].value);
if (ret) {
dev_err(&led->client->dev, "Failed writing EEPROM\n");
goto out;
}
}
ret = lp8860_unlock_eeprom(led, LP8860_LOCK_EEPROM);
if (ret)
goto out;
ret = regmap_write(led->regmap,
LP8860_EEPROM_CNTRL,
LP8860_PROGRAM_EEPROM);
if (ret) {
dev_err(&led->client->dev, "Failed programming EEPROM\n");
goto out;
}
return ret;
out:
if (ret)
if (led->enable_gpio)
gpiod_direction_output(led->enable_gpio, 0);
if (led->regulator) {
ret = regulator_disable(led->regulator);
if (ret)
dev_err(&led->client->dev,
"Failed to disable regulator\n");
}
return ret;
}