diff --git a/exynos4/exynos4x12/liblights/lights.c b/exynos4/exynos4x12/liblights/lights.c index ba0f0fcd..8b5288fc 100644 --- a/exynos4/exynos4x12/liblights/lights.c +++ b/exynos4/exynos4x12/liblights/lights.c @@ -191,6 +191,30 @@ static int set_light_leds_notifications(struct light_device_t *dev, return set_light_leds(state, 0); } +static int set_light_battery(struct light_device_t *dev, + struct light_state_t const *state) +{ + struct led_config led; + int brightness = rgb_to_brightness(state); + unsigned int colorRGB; + + colorRGB = state->color; + + if (brightness == 0) { + led.red = 0; + led.green = 0; + led.blue = 0; + snprintf(led.blink, MAX_WRITE_CMD, "0x000000 0 0"); + } else { + led.red = (colorRGB >> 16) & 0xFF; + led.green = (colorRGB >> 8) & 0xFF; + led.blue = colorRGB & 0xFF; + snprintf(led.blink, MAX_WRITE_CMD, "0x%x %d %d", colorRGB, state->flashOnMS, state->flashOffMS); + } + + return write_leds(led); +} + static int set_light_leds_attention(struct light_device_t *dev, struct light_state_t const *state) { @@ -209,6 +233,8 @@ static int open_lights(const struct hw_module_t *module, char const *name, set_light = set_light_leds_notifications; else if (0 == strcmp(LIGHT_ID_ATTENTION, name)) set_light = set_light_leds_attention; + else if (0 == strcmp(LIGHT_ID_BATTERY, name)) + set_light = set_light_battery; else return -EINVAL;