summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoungjae Cho <y0.cho@samsung.com>2020-10-05 17:09:04 +0900
committerYoungjae Cho <y0.cho@samsung.com>2020-10-12 17:45:59 +0900
commitcdf32833d23343df183324049c6aa49a04bc5d30 (patch)
treec0115b6e0fca8accf68c21a9ef1fa35f90a9da1b
parentce51a0a20b5a136a69c412e074860dc8455bf6f8 (diff)
downloaddeviced-cdf32833d23343df183324049c6aa49a04bc5d30.tar.gz
deviced-cdf32833d23343df183324049c6aa49a04bc5d30.tar.bz2
deviced-cdf32833d23343df183324049c6aa49a04bc5d30.zip
Adopt a dpms cache
In the previos structure, deviced sets dpms through Enlightenment, whereas gets dpms by reading the lcd power node directly. There is a possibility of a miasmatch between the actual dpms state and the lcd power node. The cached dpms value is alternatively used for this situation in replacement of the get_lcd_power(). Change-Id: Id0144cd76cb017694198856f6b40ff7162b61e64 Signed-off-by: Youngjae Cho <y0.cho@samsung.com> Signed-off-by: Hyotaek Shim <hyotaek.shim@samsung.com> Signed-off-by: Youngjae Cho <y0.cho@samsung.com>
-rw-r--r--plugins/iot/display/device-interface.c1
-rw-r--r--plugins/mobile/display/device-interface.c1
-rw-r--r--plugins/tv/display/device-interface.c1
-rw-r--r--plugins/wearable/display/device-interface.c1
-rw-r--r--src/display/device-interface.h1
-rw-r--r--src/display/display-dpms.c15
-rw-r--r--src/display/display-dpms.h1
-rw-r--r--src/touchscreen/touchscreen.c5
8 files changed, 24 insertions, 2 deletions
diff --git a/plugins/iot/display/device-interface.c b/plugins/iot/display/device-interface.c
index 27fde017..06ca0ad9 100644
--- a/plugins/iot/display/device-interface.c
+++ b/plugins/iot/display/device-interface.c
@@ -741,6 +741,7 @@ static struct _backlight_ops backlight_ops = {
.set_default_brt = set_default_brt,
.get_default_brt = get_default_brt,
.get_lcd_power = get_lcd_power,
+ .get_lcd_power_cached = dpms_get_cached_state,
.set_custom_status = set_custom_status,
.get_custom_status = get_custom_status,
.save_custom_brightness = save_custom_brightness,
diff --git a/plugins/mobile/display/device-interface.c b/plugins/mobile/display/device-interface.c
index d9b5d3bd..b1a1356e 100644
--- a/plugins/mobile/display/device-interface.c
+++ b/plugins/mobile/display/device-interface.c
@@ -740,6 +740,7 @@ static struct _backlight_ops backlight_ops = {
.set_default_brt = set_default_brt,
.get_default_brt = get_default_brt,
.get_lcd_power = get_lcd_power,
+ .get_lcd_power_cached = dpms_get_cached_state,
.set_custom_status = set_custom_status,
.get_custom_status = get_custom_status,
.save_custom_brightness = save_custom_brightness,
diff --git a/plugins/tv/display/device-interface.c b/plugins/tv/display/device-interface.c
index e2642907..9a47571e 100644
--- a/plugins/tv/display/device-interface.c
+++ b/plugins/tv/display/device-interface.c
@@ -741,6 +741,7 @@ static struct _backlight_ops backlight_ops = {
.set_default_brt = set_default_brt,
.get_default_brt = get_default_brt,
.get_lcd_power = get_lcd_power,
+ .get_lcd_power_cached = dpms_get_cached_state,
.set_custom_status = set_custom_status,
.get_custom_status = get_custom_status,
.save_custom_brightness = save_custom_brightness,
diff --git a/plugins/wearable/display/device-interface.c b/plugins/wearable/display/device-interface.c
index e95977ba..d2ee406e 100644
--- a/plugins/wearable/display/device-interface.c
+++ b/plugins/wearable/display/device-interface.c
@@ -806,6 +806,7 @@ static struct _backlight_ops backlight_ops = {
.set_default_brt = set_default_brt,
.get_default_brt = get_default_brt,
.get_lcd_power = get_lcd_power,
+ .get_lcd_power_cached = dpms_get_cached_state,
.set_custom_status = set_custom_status,
.get_custom_status = get_custom_status,
.save_custom_brightness = save_custom_brightness,
diff --git a/src/display/device-interface.h b/src/display/device-interface.h
index 97121e30..4193de85 100644
--- a/src/display/device-interface.h
+++ b/src/display/device-interface.h
@@ -69,6 +69,7 @@ struct _backlight_ops {
int (*set_default_brt)(int level);
int (*get_default_brt)(void);
int (*get_lcd_power)(void);
+ int (*get_lcd_power_cached)(void);
int (*set_custom_status)(bool on);
bool (*get_custom_status)(void);
int (*save_custom_brightness)(void);
diff --git a/src/display/display-dpms.c b/src/display/display-dpms.c
index 265a07f7..418274c4 100644
--- a/src/display/display-dpms.c
+++ b/src/display/display-dpms.c
@@ -58,6 +58,8 @@ static GMainContext *dpms_context;
static bool dpms_get_state_done;
static bool dpms_set_state_done;
+/* deviced-managing cache value */
+static int dpms_cache = -1;
static void dpms_handle_set_state(void *data, struct tizen_dpms_manager *tz_dpms, uint32_t mode, uint32_t error)
{
@@ -75,7 +77,6 @@ static void dpms_handle_set_state(void *data, struct tizen_dpms_manager *tz_dpms
}
_D("Dpms_state_cb set - mode:%u, error:%u", mode, error);
- dpms_client->dpms_mode = mode;
dpms_set_state_done = true;
if (g_main_loop_is_running(dpms_loop))
@@ -514,6 +515,8 @@ void dpms_set_state(int on)
wait_response(DPMS_RESPONSE_TIMEOUT);
+ dpms_cache = on;
+
if (!dpms_set_state_done) {
_E("No response for DPMS request(%d) for %d seconds.",
mode, DPMS_RESPONSE_TIMEOUT);
@@ -549,6 +552,16 @@ int dpms_get_state(void)
}
}
+int dpms_get_cached_state(void)
+{
+ if (!dpms_is_available()) {
+ _E("Dpms is not available.");
+ return -1;
+ }
+
+ return dpms_cache;
+}
+
bool init_dpms(void)
{
if (dpms_client)
diff --git a/src/display/display-dpms.h b/src/display/display-dpms.h
index 4a936ee9..b9ac040d 100644
--- a/src/display/display-dpms.h
+++ b/src/display/display-dpms.h
@@ -21,6 +21,7 @@
void dpms_set_state(int on);
int dpms_get_state(void);
+int dpms_get_cached_state(void);
bool init_dpms(void);
void exit_dpms(void);
void __register_dpms_checklist(int mode, void (*checker)(void), const char *caller);
diff --git a/src/touchscreen/touchscreen.c b/src/touchscreen/touchscreen.c
index e3d2231b..b2c81826 100644
--- a/src/touchscreen/touchscreen.c
+++ b/src/touchscreen/touchscreen.c
@@ -104,6 +104,7 @@ static int touchscreen_powersaving(enum ps_mode mode)
return 0;
}
+
static int touchscreen_probe(void *data)
{
int ret;
@@ -204,7 +205,9 @@ static int touchscreen_start(enum device_flags flags)
*/
ret = touchscreen_set_state(TOUCHSCREEN_ON);
- state = backlight_ops->get_lcd_power();
+ state = -1;
+ if (backlight_ops && backlight_ops->get_lcd_power_cached)
+ state = backlight_ops->get_lcd_power_cached();
if (state == DPMS_OFF)
touchscreen_powersaving(POWERSAVING_ON);