diff options
author | Youngjae Cho <y0.cho@samsung.com> | 2020-10-05 17:09:04 +0900 |
---|---|---|
committer | Youngjae Cho <y0.cho@samsung.com> | 2020-10-12 17:45:59 +0900 |
commit | cdf32833d23343df183324049c6aa49a04bc5d30 (patch) | |
tree | c0115b6e0fca8accf68c21a9ef1fa35f90a9da1b | |
parent | ce51a0a20b5a136a69c412e074860dc8455bf6f8 (diff) | |
download | deviced-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.c | 1 | ||||
-rw-r--r-- | plugins/mobile/display/device-interface.c | 1 | ||||
-rw-r--r-- | plugins/tv/display/device-interface.c | 1 | ||||
-rw-r--r-- | plugins/wearable/display/device-interface.c | 1 | ||||
-rw-r--r-- | src/display/device-interface.h | 1 | ||||
-rw-r--r-- | src/display/display-dpms.c | 15 | ||||
-rw-r--r-- | src/display/display-dpms.h | 1 | ||||
-rw-r--r-- | src/touchscreen/touchscreen.c | 5 |
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); |