display: Add lcd on procedure logic 52/317252/3
authorYunhee Seo <yuni.seo@samsung.com>
Tue, 3 Sep 2024 01:57:57 +0000 (10:57 +0900)
committerYunhee Seo <yuni.seo@samsung.com>
Mon, 9 Sep 2024 07:50:08 +0000 (16:50 +0900)
As added new attributes for lcd on procedure,
lcd on procedure can be moved to plugin backend side.
This replaces display_panel_lcd_on_procedure() logic in the deviced module.

Change-Id: I40cac349533c8fd46b79ccab0395e59fe98a3aff
Signed-off-by: Yunhee Seo <yuni.seo@samsung.com>
src/deviced-display/deviced-display.c

index 05c3526a30ac46b01ca90f0b63619f2e33ba1f82..410f2c12d711367fb6b0db980f2fd9d04f5ec379 100644 (file)
@@ -26,6 +26,8 @@
 #include <system/syscommon-plugin-deviced-common-interface.h>
 #include <system/syscommon-plugin-deviced-display.h>
 #include <system/syscommon-plugin-deviced-display-interface.h>
+#include <system/syscommon-plugin-deviced-power-interface.h>
+#include <system/syscommon-plugin-deviced-touchled-interface.h>
 
 #define EXPORT __attribute__ ((visibility("default")))
 
@@ -72,8 +74,137 @@ static int load_display_config(struct syscommon_deviced_display_config **data)
        return 0;
 }
 
+static int lcd_on_procedure(enum syscommon_deviced_display_state state, enum deviced_event reason)
+{
+       int ret;
+       bool lcd_on_broadcast;
+
+       /* Disable Doze doze */
+       ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_POWER),
+                                       DEVICED_POWER_ATTR_INT_DOZE_MODE,
+                                       SYSCOMMON_DEVICED_POWER_DISABLE_DOZE_MODE);
+       if (ret < 0)
+               _W("Disable power doze mode err(%d)", ret);
+
+       _I("[lcdstep] reason: %s", syscommon_plugin_deviced_common_get_event_name(reason));
+
+       /* Broadcast lcd on signal with cause */
+       ret = syscommon_resman_get_resource_attr_bool(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+                                       DEVICED_DISPLAY_ATTR_BOOL_BROADCASTED_FLAG,
+                                       &lcd_on_broadcast);
+       if (ret < 0)
+               _W("Cannot get lcd on broadcast flag err(%d)", ret);
+
+       if (!lcd_on_broadcast) {
+               ret = syscommon_resman_set_resource_attr_uint64_2(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+                                       DEVICED_DISPLAY_ATTR_TUPLE2_BROADCAST_LCD_ON,
+                                       SYSCOMMON_DEVICED_DISPLAY_SIGNAL_PRE,
+                                       reason);
+               if (ret < 0)
+                       _W("Broadcast lcd on signal pre step err(%d)", ret);
+       }
+
+       /* Update brightness as display brightness type */
+       if (state == SYSCOMMON_DEVICED_DISPLAY_STATE_DIM) {
+               ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+                                       DEVICED_DISPLAY_ATTR_INT_UPDATE_BRIGHTNESS,
+                                       SYSCOMMON_DEVICED_DISPLAY_BRIGHTNESS_DIM);
+               if (ret < 0) {
+                       _W("Cannot update brightness as dim brightness err(%d)", ret);
+               }
+       } else if (state == SYSCOMMON_DEVICED_DISPLAY_STATE_ON) {
+               ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+                                       DEVICED_DISPLAY_ATTR_INT_UPDATE_BRIGHTNESS,
+                                       SYSCOMMON_DEVICED_DISPLAY_BRIGHTNESS_DEFAULT);
+               if (ret < 0) {
+                       _W("Cannot update brightness as default brightness err(%d)", ret);
+               }
+       }
+
+       /* Set pmstate of vconf */
+       if (state == SYSCOMMON_DEVICED_DISPLAY_STATE_DIM) {
+               ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+                               DEVICED_DISPLAY_ATTR_INT_PM_STATE,
+                               SYSCOMMON_DEVICED_DISPLAY_STATE_DIM);
+               if (ret < 0) {
+                       _E("Failed to set pm state as dim err(%d)", ret);
+                       return ret;
+               }
+       } else if (state == SYSCOMMON_DEVICED_DISPLAY_STATE_ON) {
+               ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+                                       DEVICED_DISPLAY_ATTR_INT_PM_STATE,
+                                       SYSCOMMON_DEVICED_DISPLAY_STATE_ON);
+               if (ret < 0) {
+                       _E("Failed to set pm state as on err(%d)", ret);
+                       return ret;
+               }
+       }
+
+       /**
+        *  Display on operate
+        *  - a. display on
+        *  - b. TSP(touch screen) and touchkey enable
+        */
+       ret = syscommon_resman_set_resource_attr_uint64_2(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+                               DEVICED_DISPLAY_ATTR_TUPLE2_START_DEPENDENT_DEVICE,
+                               SYSCOMMON_DEVICED_DISPLAY_DEVICE_TYPE_DISPLAY,
+                               reason);
+       if (ret < 0) {
+               _E("Failed to start display device err(%d)", ret);
+               return ret;
+       }
+       ret = syscommon_resman_set_resource_attr_uint64_2(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+                               DEVICED_DISPLAY_ATTR_TUPLE2_START_DEPENDENT_DEVICE,
+                               SYSCOMMON_DEVICED_DISPLAY_DEVICE_TYPE_TOUCHSCREEN,
+                               reason);
+       if (ret < 0) {
+               _W("Cannot start touchscreen device err(%d)");
+       }
+       ret = syscommon_resman_set_resource_attr_uint64_2(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+                               DEVICED_DISPLAY_ATTR_TUPLE2_START_DEPENDENT_DEVICE,
+                               SYSCOMMON_DEVICED_DISPLAY_DEVICE_TYPE_TOUCHKEY,
+                               reason);
+       if (ret < 0) {
+               _W("Cannot start touchkey device err(%d)");
+       }
+
+       /* Broadcast lcd on complete signal */
+       if (!lcd_on_broadcast) {
+               ret = syscommon_resman_set_resource_attr_uint64_2(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+                                       DEVICED_DISPLAY_ATTR_TUPLE2_BROADCAST_LCD_ON,
+                                       SYSCOMMON_DEVICED_DISPLAY_SIGNAL_POST,
+                                       reason);
+               if (ret == 0) {
+                               ret = syscommon_resman_set_resource_attr_bool(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+                                       DEVICED_DISPLAY_ATTR_BOOL_BROADCASTED_FLAG,
+                                       true);
+                               if (ret < 0) {
+                                       _W("Broadcast flag setting as true err(%d)", ret);
+                               }
+               } else if (ret < 0) {
+                       _W("Broadcast lcd on signal post step err(%d)", ret);
+               }
+       }
+
+       /* Enable key backlight */
+       ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_TOUCHLED),
+                               DEVICED_TOUCHLED_ATTR_INT_BACKLIGHT,
+                               SYSCOMMON_DEVICED_TOUCHLED_DIRECT_ON);
+       if (ret < 0)
+               _W("Enable key backlight as touchled direct on err(%d)", ret);
+
+       ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+                               DEVICED_DISPLAY_ATTR_INT_TOUCH_EVENT_BLOCKED,
+                               false);
+       if (ret < 0)
+               _W("Set touch event blocked as false err(%d)", ret);
+
+       return 0;
+}
+
 static syscommon_plugin_backend_deviced_display_funcs g_display_funcs = {
        .load_display_config = load_display_config,
+       .lcd_on_procedure = lcd_on_procedure,
 };
 
 static int setup_display_with_dpms_init(void *data)