summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqctecmdr <qctecmdr@localhost>2021-08-24 06:38:16 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2021-08-24 06:38:16 -0700
commit64a5cb686ec48521e23b40342c364d64519ff397 (patch)
tree1a9d4ea76589082b1358635abffedbd424e63b76
parent2232ce370e7b34a7920704fe4a510a375ad425e1 (diff)
parent14f716d919deeb8382d43efc465809ce33714562 (diff)
Merge "display: light: set timer trigger before updating delay_on/off values"
-rw-r--r--liblight/lights.c51
1 files changed, 31 insertions, 20 deletions
diff --git a/liblight/lights.c b/liblight/lights.c
index 16387db2..41fb5a16 100644
--- a/liblight/lights.c
+++ b/liblight/lights.c
@@ -1,5 +1,6 @@
/*
- * Copyright (C) 2014, 2017-2018, 2020, The Linux Foundation. All rights reserved.
+ * Copyright (C) 2014, 2017-2018, 2020-2021, The Linux Foundation.
+ * All rights reserved.
* Not a contribution
* Copyright (C) 2008 The Android Open Source Project
*
@@ -198,35 +199,45 @@ static int set_rgb_led_brightness(enum rgb_led led, int brightness)
if (rc < 0)
return rc;
- if (!brightness) {
- snprintf(file, sizeof(file), "/sys/class/leds/%s/trigger", led_names[led]);
- rc = write_str(file, "timer");
- if (rc < 0)
- ALOGE("Couldn't set trigger to timer for %s, rc=%d\n", led_names[led], rc);
- }
-
return rc;
}
static int set_rgb_led_timer_trigger(enum rgb_led led, int onMS, int offMS)
{
- char file[48];
+ char file_on[48];
+ char file_off[48];
int rc;
+ int retries = 20;
- snprintf(file, sizeof(file), "/sys/class/leds/%s/delay_off", led_names[led]);
- rc = write_int(file, offMS);
- if (rc < 0)
- goto out;
+ snprintf(file_on, sizeof(file_on), "/sys/class/leds/%s/trigger", led_names[led]);
+ rc = write_str(file_on, "timer");
+ if (rc < 0) {
+ ALOGD("%s doesn't support timer trigger\n", led_names[led]);
+ return rc;
+ }
- snprintf(file, sizeof(file), "/sys/class/leds/%s/delay_on", led_names[led]);
- rc = write_int(file, onMS);
- if (rc < 0)
- goto out;
+ snprintf(file_off, sizeof(file_off), "/sys/class/leds/%s/delay_off", led_names[led]);
+ snprintf(file_on, sizeof(file_on), "/sys/class/leds/%s/delay_on", led_names[led]);
+
+ while(retries--) {
+ ALOGD("retry %d set delay_off and delay_on\n", retries);
+ usleep(2000);
+
+ rc = write_int(file_off, offMS);
+ if (rc < 0)
+ continue;
+
+ rc = write_int(file_on, onMS);
+ if (!rc)
+ break;
+ }
+
+ if (rc < 0) {
+ ALOGE("Error in writing to delay_on/off for %s\n", led_names[led]);
+ return rc;
+ }
return 0;
-out:
- ALOGD("%s doesn't support timer trigger\n", led_names[led]);
- return rc;
}
static int set_rgb_led_hw_blink(enum rgb_led led, int blink)