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); }
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); }