From 9381d10c95d41cab45885790979c345c955f9518 Mon Sep 17 00:00:00 2001 From: Srihari Sathyanarayana Date: Thu, 2 Mar 2023 17:59:00 +0530 Subject: [PATCH] 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 Reviewed-on: https://gerrit.mot.com/2526344 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Vijayakumar Gn Reviewed-by: Qing Chang Submit-Approved: Jira Key --- drivers/leds/trigger/ledtrig-sol.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/leds/trigger/ledtrig-sol.c b/drivers/leds/trigger/ledtrig-sol.c index 9ee366d4c142..bfa2104d20b6 100644 --- a/drivers/leds/trigger/ledtrig-sol.c +++ b/drivers/leds/trigger/ledtrig-sol.c @@ -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 : 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);