display: Add attribute for setting display state with option 75/311975/2
authorYunhee Seo <yuni.seo@samsung.com>
Thu, 30 May 2024 12:44:41 +0000 (21:44 +0900)
committerYunhee Seo <yuni.seo@samsung.com>
Wed, 5 Jun 2024 01:02:39 +0000 (10:02 +0900)
New attribute:
 - id: DEVICED_DISPLAY_ATTR_TUPLE2_CURRENT_STATE_WITH_OPTION
 - type: SYSCOMMON_RESMAN_DATA_TYPE_2_UINT64
 - setter: O
 - getter: X
 - 1st param: enum deviced_event
 - 2nd param: enum syscommon_deviced_display_state

New attribute:
 - id: DEVICED_DISPLAY_ATTR_TUPLE4_LOCK_WITH_OPTION
 - type: SYSCOMMON_RESMAN_DATA_TYPE_4_UINT64
 - setter: O
 - getter: X
 - 1st param: enum deviced_event
 - 2nd param: enum syscommon_deviced_display_state
 - 3rd param: display state flag (Macro starts with DEVICED_DISPLAY_STATE_*)
 - 4th param: timeout

New attribute:
 - id: DEVICED_DISPLAY_ATTR_TUPLE3_UNLOCK_WITH_OPTION
 - type: SYSCOMMON_RESMAN_DATA_TYPE_3_UINT64
 - setter: O
 - getter: X
 - 1st param: enum deviced_event
 - 2nd param: enum syscommon_deviced_display_state
 - 3rd param: display lock flag (Macro starts with DEVICED_LOCK_*)

When the display state or display lock changing, some options are needed like below
- time for locking or display state changing, triggered pid, lcd state, etc.
To support above function, new attributes are added.

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

index 911bf54f67e69539ecbec77ca85fec2cce3f3f66..3945efb15fa70c02cc9fc215494d7bfd9f8d6cc0 100644 (file)
@@ -43,6 +43,31 @@ typedef union {
        bool b;
 } resource_attr_data_t;
 
+static int display_get_lcd_state_from_display_state(enum syscommon_deviced_display_state display_state, int *lcd_state)
+{
+       if (!lcd_state)
+               return -EINVAL;
+
+       switch (display_state) {
+       case SYSCOMMON_DEVICED_DISPLAY_STATE_ON:
+               *lcd_state = LCD_NORMAL;
+               break;
+       case SYSCOMMON_DEVICED_DISPLAY_STATE_DIM:
+               *lcd_state = LCD_DIM;
+               break;
+       case SYSCOMMON_DEVICED_DISPLAY_STATE_OFF:
+               *lcd_state = LCD_OFF;
+               break;
+       case SYSCOMMON_DEVICED_DISPLAY_STATE_SLEEP:
+               *lcd_state = SUSPEND;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
 static int set_display_attr_data(int resource_id,
        const struct syscommon_resman_resource_attribute *attr,
        const void *data, int count)
@@ -96,6 +121,8 @@ static int set_tuple2_display_attr_data(int resource_id,
        const struct syscommon_resman_resource_attribute *attr,
        const void *data1, const void *data2, int count1, int count2)
 {
+       int ret = 0;
+
        if (!data1 || !data2)
                return -EINVAL;
 
@@ -137,6 +164,19 @@ static int set_tuple2_display_attr_data(int resource_id,
                                display_panel_lcd_on_direct(flag);
                        return 0;
                }
+       case DEVICED_DISPLAY_ATTR_TUPLE2_CURRENT_STATE_WITH_OPTION:
+               {
+                       pid_t pid = *(pid_t *) data1;
+                       enum syscommon_deviced_display_state display_state = *(enum syscommon_deviced_display_state *) data2;
+                       int flag;
+
+                       ret = display_get_lcd_state_from_display_state(display_state, &flag);
+                       if (ret < 0)
+                               return ret;
+
+                       ret = display_state_transition_request_state_transition_with_option(pid, flag);
+                       return ret;
+               }
                break;
        }
 
@@ -147,6 +187,8 @@ static int set_tuple3_display_attr_data(int resource_id,
        const struct syscommon_resman_resource_attribute *attr,
        const void *data1, const void *data2, const void *data3, int count1, int count2, int count3)
 {
+       int ret = 0;
+
        if (!data1 || !data2 || !data3)
                return -EINVAL;
 
@@ -174,6 +216,57 @@ static int set_tuple3_display_attr_data(int resource_id,
                                actor->caps &= ~caps;
                }
                break;
+       case DEVICED_DISPLAY_ATTR_TUPLE3_UNLOCK_WITH_OPTION:
+               {
+                       enum deviced_event display_event_type = *(enum deviced_event *) data1;
+                       enum syscommon_deviced_display_state display_state = *(enum syscommon_deviced_display_state *) data2;
+                       unsigned long display_lock_flag = *(unsigned long *) data3;
+                       int lcd_state  = 0;
+
+                       ret = display_get_lcd_state_from_display_state(display_state, &lcd_state);
+                       if (ret < 0)
+                               return ret;
+
+                       ret = display_lock_request_unlock_with_option(display_event_type, lcd_state, display_lock_flag);
+                       if (ret < 0)
+                               return ret;
+               }
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int set_tuple4_display_attr_data(int resource_id,
+       const struct syscommon_resman_resource_attribute *attr,
+       const void *data1, const void *data2, const void *data3, const void *data4,
+       int count1, int count2, int count3, int count4)
+{
+       int ret = 0;
+
+       if (!data1 || !data2 || !data3 || !data4)
+               return -EINVAL;
+
+       switch (attr->id) {
+       case DEVICED_DISPLAY_ATTR_TUPLE4_LOCK_WITH_OPTION:
+               {
+                       enum deviced_event display_event_type = *(enum deviced_event *) data1;
+                       enum syscommon_deviced_display_state display_state = *(enum syscommon_deviced_display_state *) data2;
+                       unsigned long display_state_flag = *(unsigned long *) data3;
+                       int display_state_timeout = *(unsigned long *) data4;
+                       int lcd_state  = 0;
+
+                       ret = display_get_lcd_state_from_display_state(display_state, &lcd_state);
+                       if (ret < 0)
+                               return ret;
+
+                       ret = display_lock_request_lock_with_option(display_event_type, lcd_state, display_state_flag, display_state_timeout);
+                       if (ret < 0)
+                               return ret;
+               }
+               break;
        default:
                return -EINVAL;
        }
@@ -427,6 +520,33 @@ static const struct syscommon_resman_resource_attribute display_attrs[] = {
                        .get = get_display_attr_data,
                        .is_supported = syscommon_resman_resource_attr_supported_always,
                },
+       }, {
+               .name = "DEVICED_DISPLAY_ATTR_TUPLE2_CURRENT_STATE_WITH_OPTION",
+               .id = DEVICED_DISPLAY_ATTR_TUPLE2_CURRENT_STATE_WITH_OPTION,
+               .flag = SYSCOMMON_RESMAN_RESOURCE_FLAG_PUBLIC,
+               .type = SYSCOMMON_RESMAN_DATA_TYPE_2_UINT64,
+               .ops = {
+                       .set_2_tuple = set_tuple2_display_attr_data,
+                       .is_supported = syscommon_resman_resource_attr_supported_always,
+               },
+       }, {
+               .name = "DEVICED_DISPLAY_ATTR_TUPLE4_LOCK_WITH_OPTION",
+               .id = DEVICED_DISPLAY_ATTR_TUPLE4_LOCK_WITH_OPTION,
+               .flag = SYSCOMMON_RESMAN_RESOURCE_FLAG_PUBLIC,
+               .type = SYSCOMMON_RESMAN_DATA_TYPE_4_UINT64,
+               .ops = {
+                       .set_4_tuple = set_tuple4_display_attr_data,
+                       .is_supported = syscommon_resman_resource_attr_supported_always,
+               },
+       }, {
+               .name = "DEVICED_DISPLAY_ATTR_TUPLE3_UNLOCK_WITH_OPTION",
+               .id = DEVICED_DISPLAY_ATTR_TUPLE3_UNLOCK_WITH_OPTION,
+               .flag = SYSCOMMON_RESMAN_RESOURCE_FLAG_PUBLIC,
+               .type = SYSCOMMON_RESMAN_DATA_TYPE_3_UINT64,
+               .ops = {
+                       .set_3_tuple = set_tuple3_display_attr_data,
+                       .is_supported = syscommon_resman_resource_attr_supported_always,
+               },
        }
 };