static void aw2013_brightness_work(struct work_struct *work) { struct aw2013_led *led = container_of(work, struct aw2013_led, brightness_work); u8 val; /* enable regulators if they are disabled */ if (!led->pdata->led->poweron) { if (aw2013_power_on(led->pdata->led, true)) { dev_err(&led->pdata->led->client->dev, "power on failed"); return; } } mutex_lock(&led->pdata->led->lock); if (led->cdev.brightness > 0) { if (led->cdev.brightness > led->cdev.max_brightness) led->cdev.brightness = led->cdev.max_brightness; aw2013_write(led, AW_REG_GLOBAL_CONTROL, AW_LED_MOUDLE_ENABLE_MASK); aw2013_write(led, AW_REG_LED_CONFIG_BASE + led->id, led->pdata->max_current); aw2013_write(led, AW_REG_LED_BRIGHTNESS_BASE + led->id, led->cdev.brightness); aw2013_read(led, AW_REG_LED_ENABLE, &val); aw2013_write(led, AW_REG_LED_ENABLE, val | (1 << led->id)); } else { aw2013_read(led, AW_REG_LED_ENABLE, &val); aw2013_write(led, AW_REG_LED_ENABLE, val & (~(1 << led->id))); } mutex_unlock(&led->pdata->led->lock); }
static void aw2013_led_blink_set(struct aw2013_led *led, unsigned long blinking) { u8 val; /* enable regulators if they are disabled */ if (!led->pdata->led->poweron) { if (aw2013_power_on(led->pdata->led, true)) { dev_err(&led->pdata->led->client->dev, "power on failed"); return; } } led->cdev.brightness = blinking ? led->cdev.max_brightness : 0; if (blinking > 0) { aw2013_write(led, AW_REG_GLOBAL_CONTROL, AW_LED_MOUDLE_ENABLE_MASK); aw2013_write(led, AW_REG_LED_CONFIG_BASE + led->id, AW_LED_FADE_OFF_MASK | AW_LED_FADE_ON_MASK | AW_LED_BREATHE_MODE_MASK | led->pdata->max_current); aw2013_write(led, AW_REG_LED_BRIGHTNESS_BASE + led->id, led->cdev.brightness); aw2013_write(led, AW_REG_TIMESET0_BASE + led->id * 3, led->pdata->rise_time_ms << 4 | led->pdata->hold_time_ms); aw2013_write(led, AW_REG_TIMESET1_BASE + led->id * 3, led->pdata->fall_time_ms << 4 | led->pdata->off_time_ms); aw2013_read(led, AW_REG_LED_ENABLE, &val); aw2013_write(led, AW_REG_LED_ENABLE, val | (1 << led->id)); } else { aw2013_read(led, AW_REG_LED_ENABLE, &val); aw2013_write(led, AW_REG_LED_ENABLE, val & (~(1 << led->id))); } }
static int aw_2013_check_chipid(struct aw2013_led *led) { u8 val; aw2013_write(led, AW_REG_RESET, AW_LED_RESET_MASK); usleep(AW_LED_RESET_DELAY); aw2013_read(led, AW_REG_RESET, &val); if (val == AW2013_CHIPID) return 0; else return -EINVAL; }