static void led_set(struct max77693_led_data *led_data) { int ret; struct max77693_led *data = led_data->data; int id = data->id; u8 shift = led_current_shift[id]; int value; if (led_data->test_brightness == LED_OFF) { value = max77693_led_get_en_value(led_data, 0); ret = max77693_set_bits(led_data->i2c, MAX77693_LED_REG_FLASH_EN, led_en_mask[id], value << led_en_shift[id]); if (unlikely(ret)) goto error_set_bits; ret = max77693_set_bits(led_data->i2c, reg_led_current[id], led_current_mask[id], led_data->brightness << shift); if (unlikely(ret)) goto error_set_bits; return; } /* Set current */ ret = max77693_set_bits(led_data->i2c, reg_led_current[id], led_current_mask[id], led_data->test_brightness << shift); if (unlikely(ret)) goto error_set_bits; /* Turn off LED */ value = max77693_led_get_en_value(led_data, 0); ret = max77693_set_bits(led_data->i2c, MAX77693_LED_REG_FLASH_EN, led_en_mask[id], value << led_en_shift[id]); if (unlikely(ret)) goto error_set_bits; /* Turn on LED */ ret = max77693_set_bits(led_data->i2c, MAX77693_LED_REG_FLASH_EN, led_en_mask[id], led_en_mask[id]); if (unlikely(ret)) goto error_set_bits; return; error_set_bits: pr_err("%s: can't set led level %d\n", __func__, ret); return; }
static int max77693_led_setup(struct max77693_led_data *led_data) { int ret = 0; struct max77693_led *data = led_data->data; int id = data->id; int value; ret |= max77693_write_reg(led_data->i2c, MAX77693_LED_REG_VOUT_CNTL, MAX77693_BOOST_FLASH_MODE_FLED1); ret |= max77693_write_reg(led_data->i2c, MAX77693_LED_REG_VOUT_FLASH1, MAX77693_BOOST_VOUT_FLASH_FROM_VOLT(3300)); ret |= max77693_write_reg(led_data->i2c, MAX77693_LED_REG_MAX_FLASH1, 0xBC); ret |= max77693_write_reg(led_data->i2c, MAX77693_LED_REG_MAX_FLASH2, 0x00); value = max77693_led_get_en_value(led_data, 0); ret |= max77693_set_bits(led_data->i2c, MAX77693_LED_REG_FLASH_EN, led_en_mask[id], value << led_en_shift[id]); /* Set TORCH_TMR_DUR or FLASH_TMR_DUR */ if (reg_led_timer[id] == MAX77693_LED_REG_FLASH_TIMER) { ret |= max77693_write_reg(led_data->i2c, reg_led_timer[id], (data->timer | data->timer_mode << 7)); } else { ret |= max77693_write_reg(led_data->i2c, reg_led_timer[id], 0xC0); } /* Set current */ ret |= max77693_set_bits(led_data->i2c, reg_led_current[id], led_current_mask[id], led_data->brightness << led_current_shift[id]); return ret; }