power: Add device_notify() right after echomem resuming 10/294810/3 accepted/tizen/7.0/unified/20230628.014038
authorYoungjae Cho <y0.cho@samsung.com>
Tue, 27 Jun 2023 02:43:47 +0000 (11:43 +0900)
committerYoungjae Cho <y0.cho@samsung.com>
Tue, 27 Jun 2023 04:32:41 +0000 (13:32 +0900)
It gives chance to doing immediate action on resuming from echomem.

Change-Id: I566a2dcee22c90a02af0c10ee394f1fa4a58a894
Signed-off-by: Youngjae Cho <y0.cho@samsung.com>
plugins/iot-headed/display/core.c
plugins/mobile/display/core.c
plugins/tv/display/core.c
plugins/wearable/display/core.c
src/power/power-suspend.c
src/shared/device-notifier.c
src/shared/device-notifier.h

index 660ea0e..3ba41ae 100644 (file)
@@ -2022,7 +2022,14 @@ static int input_init_handler(void)
        return 0;
 }
 
-static int power_resume_from_echomem_callback(void *data)
+static int power_resume_from_echomem_pre_callback(void *data)
+{
+       // do nothing
+
+       return 0;
+}
+
+static int power_resume_from_echomem_post_callback(void *data)
 {
        system_wakeup_flag = true;
        if (check_wakeup_src() == EVENT_DEVICE)
@@ -2117,7 +2124,8 @@ static void display_init(void *data)
        register_notifier(DEVICE_NOTIFIER_BATTERY_HEALTH, battery_health_changed);
        register_notifier(DEVICE_NOTIFIER_DISPLAY_BRIGHTNESS, display_brightness_changed);
        register_notifier(DEVICE_NOTIFIER_LCD_AUTOBRT_SENSING, display_auto_brightness_sensing);
-       register_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM, power_resume_from_echomem_callback);
+       register_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_PRE, power_resume_from_echomem_pre_callback);
+       register_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_POST, power_resume_from_echomem_post_callback);
        register_notifier(DEVICE_NOTIFIER_POWEROFF_TRIGGERED, poweroff_triggered_callback);
 
        init_save_userlock();
@@ -2260,7 +2268,8 @@ static void display_exit(void *data)
                        unregister_notifier(DEVICE_NOTIFIER_APPLICATION_TERMINATED, display_app_terminated);
                        unregister_notifier(DEVICE_NOTIFIER_BATTERY_HEALTH, battery_health_changed);
                        unregister_notifier(DEVICE_NOTIFIER_DISPLAY_BRIGHTNESS, display_brightness_changed);
-                       unregister_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM, power_resume_from_echomem_callback);
+                       unregister_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_PRE, power_resume_from_echomem_pre_callback);
+                       unregister_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_POST, power_resume_from_echomem_post_callback);
 
                        break;
                }
index 6dfcf0f..57d782a 100644 (file)
@@ -2033,7 +2033,24 @@ static int input_init_handler(void)
        return 0;
 }
 
-static int power_resume_from_echomem_callback(void *data)
+static int power_resume_from_echomem_pre_callback(void *data)
+{
+       enum hal_device_power_transition_reason reason = power_get_wakeup_reason();
+
+       /** proactive display on */
+       switch (reason) {
+       case HAL_DEVICE_POWER_TRANSITION_REASON_POWER_KEY:
+       case HAL_DEVICE_POWER_TRANSITION_REASON_TOUCH_SCREEN:
+               dpms_set_state(1);
+               break;
+       default:
+               break;
+       }
+
+       return 0;
+}
+
+static int power_resume_from_echomem_post_callback(void *data)
 {
        system_wakeup_flag = true;
 
@@ -2137,7 +2154,8 @@ static void display_init(void *data)
        register_notifier(DEVICE_NOTIFIER_BATTERY_HEALTH, battery_health_changed);
        register_notifier(DEVICE_NOTIFIER_DISPLAY_BRIGHTNESS, display_brightness_changed);
        register_notifier(DEVICE_NOTIFIER_LCD_AUTOBRT_SENSING, display_auto_brightness_sensing);
-       register_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM, power_resume_from_echomem_callback);
+       register_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_PRE, power_resume_from_echomem_pre_callback);
+       register_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_POST, power_resume_from_echomem_post_callback);
        register_notifier(DEVICE_NOTIFIER_POWEROFF_TRIGGERED, poweroff_triggered_callback);
 
        init_save_userlock();
@@ -2278,7 +2296,8 @@ static void display_exit(void *data)
                        unregister_notifier(DEVICE_NOTIFIER_APPLICATION_TERMINATED, display_app_terminated);
                        unregister_notifier(DEVICE_NOTIFIER_BATTERY_HEALTH, battery_health_changed);
                        unregister_notifier(DEVICE_NOTIFIER_DISPLAY_BRIGHTNESS, display_brightness_changed);
-                       unregister_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM, power_resume_from_echomem_callback);
+                       unregister_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_PRE, power_resume_from_echomem_pre_callback);
+                       unregister_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_POST, power_resume_from_echomem_post_callback);
 
                        break;
                }
index e784dab..9d8ff08 100644 (file)
@@ -2019,7 +2019,14 @@ static int input_init_handler(void)
        return 0;
 }
 
-static int power_resume_from_echomem_callback(void *data)
+static int power_resume_from_echomem_pre_callback(void *data)
+{
+       // do nothing
+
+       return 0;
+}
+
+static int power_resume_from_echomem_post_callback(void *data)
 {
        system_wakeup_flag = true;
        if (check_wakeup_src() == EVENT_DEVICE)
@@ -2114,7 +2121,8 @@ static void display_init(void *data)
        register_notifier(DEVICE_NOTIFIER_BATTERY_HEALTH, battery_health_changed);
        register_notifier(DEVICE_NOTIFIER_DISPLAY_BRIGHTNESS, display_brightness_changed);
        register_notifier(DEVICE_NOTIFIER_LCD_AUTOBRT_SENSING, display_auto_brightness_sensing);
-       register_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM, power_resume_from_echomem_callback);
+       register_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_PRE, power_resume_from_echomem_pre_callback);
+       register_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_POST, power_resume_from_echomem_post_callback);
        register_notifier(DEVICE_NOTIFIER_POWEROFF_TRIGGERED, poweroff_triggered_callback);
 
        init_save_userlock();
@@ -2257,7 +2265,8 @@ static void display_exit(void *data)
                        unregister_notifier(DEVICE_NOTIFIER_APPLICATION_TERMINATED, display_app_terminated);
                        unregister_notifier(DEVICE_NOTIFIER_BATTERY_HEALTH, battery_health_changed);
                        unregister_notifier(DEVICE_NOTIFIER_DISPLAY_BRIGHTNESS, display_brightness_changed);
-                       unregister_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM, power_resume_from_echomem_callback);
+                       unregister_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_PRE, power_resume_from_echomem_pre_callback);
+                       unregister_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_POST, power_resume_from_echomem_post_callback);
 
                        break;
                }
index abc7680..957893b 100644 (file)
@@ -2306,7 +2306,14 @@ static int input_init_handler(void)
        return 0;
 }
 
-static int power_resume_from_echomem_callback(void *data)
+static int power_resume_from_echomem_pre_callback(void *data)
+{
+       // do nothing
+
+       return 0;
+}
+
+static int power_resume_from_echomem_post_callback(void *data)
 {
        system_wakeup_flag = true;
        if (check_wakeup_src() == EVENT_DEVICE)
@@ -2439,7 +2446,8 @@ static void display_init(void *data)
        register_notifier(DEVICE_NOTIFIER_BATTERY_HEALTH, battery_health_changed);
        register_notifier(DEVICE_NOTIFIER_DISPLAY_BRIGHTNESS, display_brightness_changed);
        register_notifier(DEVICE_NOTIFIER_LCD_AUTOBRT_SENSING, display_auto_brightness_sensing);
-       register_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM, power_resume_from_echomem_callback);
+       register_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_PRE, power_resume_from_echomem_pre_callback);
+       register_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_POST, power_resume_from_echomem_post_callback);
        register_notifier(DEVICE_NOTIFIER_POWEROFF_TRIGGERED, poweroff_triggered_callback);
 
        init_save_userlock();
@@ -2583,7 +2591,8 @@ static void display_exit(void *data)
                        unregister_notifier(DEVICE_NOTIFIER_APPLICATION_TERMINATED, display_app_terminated);
                        unregister_notifier(DEVICE_NOTIFIER_BATTERY_HEALTH, battery_health_changed);
                        unregister_notifier(DEVICE_NOTIFIER_DISPLAY_BRIGHTNESS, display_brightness_changed);
-                       unregister_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM, power_resume_from_echomem_callback);
+                       unregister_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_PRE, power_resume_from_echomem_pre_callback);
+                       unregister_notifier(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_POST, power_resume_from_echomem_post_callback);
 
                        break;
                }
index aff5611..6b863fa 100644 (file)
@@ -392,6 +392,8 @@ static void suspend_echo_mem(void)
        // resume
        update_wakeup_reason();
 
+       device_notify(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_PRE, NULL);
+
        /*
         * FIXME: If the wakeup reason lingers after wakeup, a transition triggered from other
         * than the above line would take the lingering wakeup reason as a transition reason,
@@ -407,7 +409,7 @@ static void suspend_echo_mem(void)
 
 static void resume_echo_mem(void)
 {
-       device_notify(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM, NULL);
+       device_notify(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_POST, NULL);
 }
 
 static void suspend_autosleep(void)
index dc4da09..c635892 100644 (file)
@@ -68,7 +68,8 @@ static const char *device_notifier_type_str[DEVICE_NOTIFIER_MAX] = {
        NOTIFY_STR(DEVICE_NOTIFIER_DISPLAY_AMBIENT_CONDITION),
        NOTIFY_STR(DEVICE_NOTIFIER_DISPLAY_AMBIENT_STATE),
        NOTIFY_STR(DEVICE_NOTIFIER_DISPLAY_LOCK),
-       NOTIFY_STR(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM),
+       NOTIFY_STR(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_PRE),
+       NOTIFY_STR(DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_POST),
        NOTIFY_STR(DEVICE_NOTIFIER_POWEROFF_TRIGGERED),
        NOTIFY_STR(DEVICE_NOTIFIER_POWEROFF),
        NOTIFY_STR(DEVICE_NOTIFIER_APPLICATION_BACKGROUND),
index 3d3c5ec..61a2b47 100644 (file)
@@ -40,7 +40,8 @@ enum device_notifier_type {
        DEVICE_NOTIFIER_DISPLAY_AMBIENT_CONDITION,
        DEVICE_NOTIFIER_DISPLAY_AMBIENT_STATE,
        DEVICE_NOTIFIER_DISPLAY_LOCK,
-       DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM,
+       DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_PRE,
+       DEVICE_NOTIFIER_POWER_RESUME_FROM_ECHO_MEM_POST,
        DEVICE_NOTIFIER_POWEROFF_TRIGGERED,
        DEVICE_NOTIFIER_POWEROFF,
        DEVICE_NOTIFIER_APPLICATION_BACKGROUND,