SOL Led: Sync set brightness call before blink set

On closed Oberon unit we saw SOL led not blinking due to sync issue of
led_set_brightness with blink set.
Add led_set_brightness_sync which is a blocking call till blink set.
This will enable setting blink smoothly without conflict with brigtness.

The patch will also use flush_work before setting brightness so no more
delay required before new brigtness setting.

Change-Id: I840cb3398b40725bd928816f4871cbdcba6759a1
Signed-off-by: Srihari Sathyanarayana <sriharis@motorola.com>
Reviewed-on: https://gerrit.mot.com/2526344
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Vijayakumar Gn <vijaygn@motorola.com>
Reviewed-by: Qing Chang <qing@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
Srihari Sathyanarayana authored and Rohit Sisodia committed 2023-03-06 14:13:21 -06:00
1 parent 80770b4416
commit 9381d10c95
1 file changed
+6 -6
+6 -6
View File
@@ -230,8 +230,8 @@ static int sol_led_update_status(const char *led_name, bool blink, unsigned int
if(!strcmp(led_name, "charging_full") && !strcmp(led_cdev->name, "charging_full")) {
dev_dbg(led_cdev->dev, "POWER_STATUS_FULL\n");
led_trigger_event(&sol_led_trigger, LED_OFF);
msleep(10); /* MMI_TODO <kernel>: set delay to sync led-trigger with core-led calls */
led_set_brightness(led_cdev, brightness);
flush_work(&led_cdev->set_brightness_work);
led_set_brightness_sync(led_cdev, brightness);
if(blink){
led_blink_set(led_cdev, &sol_data->charging_delay_on, &sol_data->charging_delay_off);
dev_dbg(led_cdev->dev, "SETTING DONE FOR charging full blink delay_on=%lu,delay_off=%lu\n",sol_data->charging_delay_on, sol_data->charging_delay_off);
@@ -241,8 +241,8 @@ static int sol_led_update_status(const char *led_name, bool blink, unsigned int
if(!strcmp(led_name, "charging") && !strcmp(led_cdev->name, "charging")) {
dev_dbg(led_cdev->dev, "POWER_STATUS_CHARGING\n");
led_trigger_event(&sol_led_trigger, LED_OFF);
msleep(10); /* set delay to sync led-trigger with core-led calls */
led_set_brightness(led_cdev, brightness);
flush_work(&led_cdev->set_brightness_work);
led_set_brightness_sync(led_cdev, brightness);
if(blink){
led_blink_set(led_cdev, &sol_data->charging_delay_on, &sol_data->charging_delay_off);
dev_dbg(led_cdev->dev, "SETTING DONE FOR charging blink delay_on=%lu,delay_off=%lu\n",sol_data->charging_delay_on, sol_data->charging_delay_off);
@@ -252,8 +252,8 @@ static int sol_led_update_status(const char *led_name, bool blink, unsigned int
if(!strcmp(led_name, "charging_low") && !strcmp(led_cdev->name, "charging_low")) {
dev_dbg(led_cdev->dev, "POWER_STATUS_LOW\n");
led_trigger_event(&sol_led_trigger, LED_OFF);
msleep(10); /* set delay to sync led-trigger with core-led calls */
led_set_brightness(led_cdev, brightness);
flush_work(&led_cdev->set_brightness_work);
led_set_brightness_sync(led_cdev, brightness);
if(blink){
led_blink_set(led_cdev, &sol_data->low_cap_delay_on, &sol_data->low_cap_delay_off);
dev_dbg(led_cdev->dev, "SETTING DONE FOR low cap blink delay_on= %lu,delay_off=%lu\n",sol_data->low_cap_delay_on,sol_data->low_cap_delay_off);