static void lp5562_set_led_current(struct lp55xx_led *led, u8 led_current)
{
	u8 addr[] = {
		LP5562_REG_R_CURRENT,
		LP5562_REG_G_CURRENT,
		LP5562_REG_B_CURRENT,
		LP5562_REG_W_CURRENT,
	};

	led->led_current = led_current;
	lp55xx_write(led->chip, addr[led->chan_nr], led_current);
}
Exemple #2
0
static void lp5562_set_led_pwm(struct lp55xx_led *led, u8 led_current)
{
	//u8 enable;
	u8 cfg = LP5562_DEFAULT_CFG;
	struct lp55xx_chip *chip = led->chip;

	gpio_set_value(chip->pdata->en_gpio, 1);
	usleep_range(1000, 1100);

	//lp55xx_read(chip, LP5562_REG_ENABLE, &enable);
	//enable |= LP5562_MASTER_ENABLE;
	lp55xx_write(chip, LP5562_REG_ENABLE, LP5562_ENABLE_DEFAULT);
	usleep_range(1000, 1100);

	if (!lp55xx_is_extclk_used(chip))
		cfg |= LP5562_CLK_INT;

	lp55xx_write(chip, LP5562_REG_CONFIG, cfg);

	lp55xx_write(chip, LP5562_REG_ENG_SEL, LP5562_ENG_SEL_PWM);
	
	
	//lp55xx_write(led->chip, LP5562_REG_W_CURRENT, 30);
	lp55xx_write(led->chip, LP5562_REG_W_PWM, led_current);

	if(0 == led_current){
		printk("%s: enter power save mode.\n", __func__);
		lp55xx_write(chip, LP5562_REG_ENABLE, 0x00);
		usleep_range(1000, 1100);
		lp55xx_write(chip, LP5562_REG_CONFIG, LP5562_DEFAULT_CFG);
		gpio_set_value(chip->pdata->en_gpio, 0);
	}
}
static int lp8501_post_init_device(struct lp55xx_chip *chip)
{
	int ret;
	u8 val = LP8501_DEFAULT_CFG;

	ret = lp55xx_write(chip, LP8501_REG_ENABLE, LP8501_ENABLE);
	if (ret)
		return ret;

	/* Chip startup time is 500 us, 1 - 2 ms gives some margin */
	usleep_range(1000, 2000);

	if (chip->pdata->clock_mode != LP55XX_CLOCK_EXT)
		val |= LP8501_INT_CLK;

	ret = lp55xx_write(chip, LP8501_REG_CONFIG, val);
	if (ret)
		return ret;

	/* Power selection for each output */
	return lp55xx_update_bits(chip, LP8501_REG_PWR_CONFIG,
				LP8501_PWR_CONFIG_M, chip->pdata->pwr_sel);
}
int lp55xx_update_bits(struct lp55xx_chip *chip, u8 reg, u8 mask, u8 val)
{
	int ret;
	u8 tmp;

	ret = lp55xx_read(chip, reg, &tmp);
	if (ret)
		return ret;

	tmp &= ~mask;
	tmp |= val & mask;

	return lp55xx_write(chip, reg, tmp);
}
static int lp55xx_detect_device(struct lp55xx_chip *chip)
{
	struct lp55xx_device_config *cfg = chip->cfg;
	u8 addr = cfg->enable.addr;
	u8 val  = cfg->enable.val;
	int ret;

	ret = lp55xx_write(chip, addr, val);
	if (ret)
		return ret;

	usleep_range(1000, 2000);

	ret = lp55xx_read(chip, addr, &val);
	if (ret)
		return ret;

	if (val != cfg->enable.val)
		return -ENODEV;

	return 0;
}
static void lp8501_set_led_current(struct lp55xx_led *led, u8 led_current)
{
	led->led_current = led_current;
	lp55xx_write(led->chip, LP8501_REG_LED_CURRENT_BASE + led->chan_nr,
		led_current);
}