コード例 #1
0
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;
}
コード例 #2
0
ファイル: leds-max77693.c プロジェクト: 253627764/GT-I9500
void max77693_led_shutdown(struct device *dev)
{
	struct max77693_led_data **led_datas = dev_get_drvdata(dev);

	/* Turn off LED */
	max77693_set_bits(led_datas[1]->i2c,
		MAX77693_LED_REG_FLASH_EN,
		led_en_mask[1],
		0x02 << led_en_shift[1]);
}
コード例 #3
0
ファイル: leds-max77693.c プロジェクト: 253627764/GT-I9500
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;
}