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 <[email protected]>
Reviewed-on: https://gerrit.mot.com/2526344
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Vijayakumar Gn <[email protected]>
Reviewed-by: Qing Chang <[email protected]>
Submit-Approved: Jira Key
This commit is contained in:
Srihari Sathyanarayana 2023-03-02 17:59:00 +05:30 • committed by Rohit Sisodia
commit 9381d10c95

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);