summaryrefslogtreecommitdiff
path: root/liblight
diff options
context:
space:
mode:
authorPullakavi Srinivas <spullaka@codeaurora.org>2017-10-12 17:50:41 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2017-10-31 05:51:32 -0700
commitda0b325294e82716e4b8e113ff730c846877ee4d (patch)
treecd1bd664ed144f4f27f46525def1bccba4855d0d /liblight
parentabf914a67601de70289a18e179bbf77b64de1d60 (diff)
downloaddisplay-da0b325294e82716e4b8e113ff730c846877ee4d.tar.gz
lights: Do not treat persistence node failures as fatal
Change-Id: I0ed8c13edc39f186e59b7d47ea957408e60889e4
Diffstat (limited to 'liblight')
-rw-r--r--liblight/lights.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/liblight/lights.c b/liblight/lights.c
index 15db827b..115b98c0 100644
--- a/liblight/lights.c
+++ b/liblight/lights.c
@@ -48,6 +48,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;
+static bool g_has_persistence_node = false;
char const*const RED_LED_FILE
= "/sys/class/leds/red/brightness";
@@ -139,20 +140,23 @@ set_light_backlight(struct light_device_t* dev,
pthread_mutex_lock(&g_lock);
// Toggle low persistence mode state
- if ((g_last_backlight_mode != state->brightnessMode && lpEnabled) ||
- (!lpEnabled &&
- g_last_backlight_mode == BRIGHTNESS_MODE_LOW_PERSISTENCE)) {
- if ((err = write_int(PERSISTENCE_FILE, lpEnabled)) != 0) {
- ALOGE("%s: Failed to write to %s: %s\n", __FUNCTION__,
- PERSISTENCE_FILE, strerror(errno));
- }
- if (lpEnabled != 0) {
- brightness = DEFAULT_LOW_PERSISTENCE_MODE_BRIGHTNESS;
+ bool persistence_mode = ((g_last_backlight_mode != state->brightnessMode && lpEnabled) ||
+ (!lpEnabled &&
+ g_last_backlight_mode == BRIGHTNESS_MODE_LOW_PERSISTENCE));
+ bool cannot_handle_persistence = !g_has_persistence_node && persistence_mode;
+ if (g_has_persistence_node) {
+ if (persistence_mode) {
+ if ((err = write_int(PERSISTENCE_FILE, lpEnabled)) != 0) {
+ ALOGE("%s: Failed to write to %s: %s\n", __FUNCTION__,
+ PERSISTENCE_FILE, strerror(errno));
+ }
+ if (lpEnabled != 0) {
+ brightness = DEFAULT_LOW_PERSISTENCE_MODE_BRIGHTNESS;
+ }
}
+ g_last_backlight_mode = state->brightnessMode;
}
- g_last_backlight_mode = state->brightnessMode;
-
if (!err) {
if (!access(LCD_FILE, F_OK)) {
err = write_int(LCD_FILE, brightness);
@@ -162,7 +166,7 @@ set_light_backlight(struct light_device_t* dev,
}
pthread_mutex_unlock(&g_lock);
- return err;
+ return cannot_handle_persistence ? -ENOSYS : err;
}
static int
@@ -355,8 +359,10 @@ static int open_lights(const struct hw_module_t* module, char const* name,
g_brightness_max = atoi(property);
set_brightness_ext_init();
set_light = set_light_backlight_ext;
- } else
+ } else {
+ g_has_persistence_node = !access(PERSISTENCE_FILE, F_OK);
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))