liblight: Add brightness level extension support
Add brightness level extension API to set backlight
through display API. The feature is enabled by property.
Change-Id: Ia6911433705cc946ed73ffc820396c350e3c8b88
diff --git a/liblight/lights.c b/liblight/lights.c
index 89c27cd..d63cc67 100644
--- a/liblight/lights.c
+++ b/liblight/lights.c
@@ -20,7 +20,7 @@
// #define LOG_NDEBUG 0
#include <cutils/log.h>
-
+#include <cutils/properties.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
@@ -33,6 +33,7 @@
#include <sys/types.h>
#include <hardware/lights.h>
+#include "lights_prv.h"
#ifndef DEFAULT_LOW_PERSISTENCE_MODE_BRIGHTNESS
#define DEFAULT_LOW_PERSISTENCE_MODE_BRIGHTNESS 0x80
@@ -46,6 +47,7 @@
static struct light_state_t g_battery;
static int g_last_backlight_mode = BRIGHTNESS_MODE_USER;
static int g_attention = 0;
+static int g_brightness_max = 0;
char const*const RED_LED_FILE
= "/sys/class/leds/red/brightness";
@@ -157,6 +159,28 @@
}
static int
+set_light_backlight_ext(struct light_device_t* dev,
+ struct light_state_t const* state)
+{
+ int err = 0;
+
+ if(!dev) {
+ return -1;
+ }
+
+ int brightness = state->color & 0x00ffffff;
+ pthread_mutex_lock(&g_lock);
+
+ if (brightness >= 0 && brightness <= g_brightness_max) {
+ set_brightness_ext_level(brightness);
+ }
+
+ pthread_mutex_unlock(&g_lock);
+
+ return err;
+}
+
+static int
set_speaker_light_locked(struct light_device_t* dev,
struct light_state_t const* state)
{
@@ -211,15 +235,15 @@
if (red) {
if (write_int(RED_BLINK_FILE, blink))
write_int(RED_LED_FILE, 0);
- }
+ }
if (green) {
if (write_int(GREEN_BLINK_FILE, blink))
write_int(GREEN_LED_FILE, 0);
- }
+ }
if (blue) {
if (write_int(BLUE_BLINK_FILE, blink))
write_int(BLUE_LED_FILE, 0);
- }
+ }
} else {
write_int(RED_LED_FILE, red);
write_int(GREEN_LED_FILE, green);
@@ -314,9 +338,19 @@
int (*set_light)(struct light_device_t* dev,
struct light_state_t const* state);
- if (0 == strcmp(LIGHT_ID_BACKLIGHT, name))
- set_light = set_light_backlight;
- else if (0 == strcmp(LIGHT_ID_BATTERY, name))
+ if (0 == strcmp(LIGHT_ID_BACKLIGHT, name)) {
+ char property[PROPERTY_VALUE_MAX];
+ property_get("persist.extend.brightness", property, "0");
+
+ if(!(strncmp(property, "1", PROPERTY_VALUE_MAX)) ||
+ !(strncmp(property, "true", PROPERTY_VALUE_MAX))) {
+ property_get("persist.display.max_brightness", property, "255");
+ g_brightness_max = atoi(property);
+ set_brightness_ext_init();
+ set_light = set_light_backlight_ext;
+ } else
+ set_light = set_light_backlight;
+ } else if (0 == strcmp(LIGHT_ID_BATTERY, name))
set_light = set_light_battery;
else if (0 == strcmp(LIGHT_ID_NOTIFICATIONS, name))
set_light = set_light_notifications;