From 4fdd6a33a6c806c6449c812120c5e4edd00e40f3 Mon Sep 17 00:00:00 2001 From: Yunhee Seo Date: Thu, 2 Mar 2023 19:53:27 +0900 Subject: [PATCH] display: backlight: Relocate display_backlight_set/get/change_brightness() to reduce plugin duplication Remove and redefine functions in the backlight_ops. - set_brightness, get_brightness, transit_brt, get_brightness_raw Wearable profile can have two status of get_brightness lbm_get_brightness/(default)get_brightness That's why get_brightness_raw was put in backlight_ops to always call (default)get_brightness. get_brightness_raw can be replaced by display_backlight_get_brightness. These functions are added to below diplay-backlight. int display_backlight_set_brightness(int brightness) int display_backlight_get_brightness(int *brightness) void display_backlight_change_brightness(int start, int end, int step) -> With these functions, it is possible to get and set brightness through HAL. int display_backlight_get_brightness_by_plugin_profile(int *brightness) -> This function is temporary, it is for handling wearable profile dependency. To keep original code intent, this is necessary for functions that are dependent on wearable profile. Change-Id: I0c9cb7675c39094576dd7e42d66d46a29da4144b Signed-off-by: Yunhee Seo --- plugins/iot-headed/display/core.c | 4 +- plugins/iot-headed/display/device-interface.c | 143 ++----------------- plugins/mobile/display/core.c | 4 +- plugins/mobile/display/device-interface.c | 143 ++----------------- plugins/tv/display/core.c | 4 +- plugins/tv/display/device-interface.c | 143 ++----------------- .../wearable/display/auto-brightness-sensorhub.c | 22 +-- plugins/wearable/display/core.c | 4 +- plugins/wearable/display/device-interface.c | 103 ++------------ plugins/wearable/display/lbm.c | 7 +- src/display/auto-brightness.c | 2 +- src/display/device-interface.h | 1 - src/display/display-backlight.c | 152 ++++++++++++++++++++- src/display/display-backlight.h | 4 + src/display/display-dbus.c | 16 +-- src/display/display-panel.c | 2 +- 16 files changed, 226 insertions(+), 528 deletions(-) diff --git a/plugins/iot-headed/display/core.c b/plugins/iot-headed/display/core.c index d87a3cc..30bf606 100644 --- a/plugins/iot-headed/display/core.c +++ b/plugins/iot-headed/display/core.c @@ -1436,7 +1436,7 @@ static int default_action(int timeout) case S_LCDDIM: display_backlight_get_custom_status(&custom_status); if ((get_pm_old_state() == S_NORMAL) && custom_status) { - backlight_ops->get_brightness(&brightness); + display_backlight_get_brightness(&brightness); display_backlight_set_custom_brightness(brightness); } /* lcd dim state : dim the brightness */ @@ -1702,7 +1702,7 @@ static void check_seed_status(void) } _I("Set brightness(%d) from setting app.", tmp); display_backlight_set_default_brightness(tmp); - backlight_ops->set_brightness(tmp); + display_backlight_set_brightness(tmp); ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state); if (ret < 0) { diff --git a/plugins/iot-headed/display/device-interface.c b/plugins/iot-headed/display/device-interface.c index cb0941c..a46ca4d 100644 --- a/plugins/iot-headed/display/device-interface.c +++ b/plugins/iot-headed/display/device-interface.c @@ -52,7 +52,6 @@ #define TOUCH_OFF 0 #define LCD_PHASED_MAX_BRIGHTNESS 100 -#define LCD_PHASED_DELAY 10000 /* microsecond */ #define DISPLAY_HAL_LIB_PATH "/usr/lib/libdisplay-hal.so" @@ -92,126 +91,6 @@ bool display_dimstay_check(void) return false; } -static void change_brightness(int start, int end, int step) -{ - int diff, val; - int ret = -1; - int prev; - - if (display_dimstay_check()) - return; - - ret = backlight_ops.get_brightness(&prev); - if (ret < 0) { - _E("Failed to get brightness: %d", ret); - return; - } - - if (prev == end) - return; - - if (get_pm_status_flag() & DIM_MASK) - end = 0; - - _I("start %d end %d step %d", start, end, step); - - if (display_dev_available) { - ret = hal_device_display_set_multi_brightness(end, step, LCD_PHASED_DELAY); - if (ret != -ENODEV) { - if (ret < 0) - _E("Failed to set_multi_brightness (%d)", ret); - - backlight_ops.set_brightness(end); - - return; - } - } - - diff = end - start; - - if (abs(diff) < step) - val = (diff > 0 ? 1 : -1); - else - val = (int)ceil((double)diff / step); - - while (start != end) { - if (val == 0) break; - - start += val; - if ((val > 0 && start > end) || - (val < 0 && start < end)) - start = end; - - display_backlight_set_brightness_with_delay(start, LCD_PHASED_DELAY); - } -} - -static int set_brightness(int val) -{ - int max, ret; - int default_brightness = 0, force_brightness = 0; - - display_backlight_get_default_brightness(&default_brightness); - display_backlight_get_force_brightness(&force_brightness); - - if (!display_dev_available) { - _E("There is no display device."); - return -ENOENT; - } - - ret = display_backlight_get_max_brightness(&max); - if (ret < 0) { - _E("Failed to get max brightness."); - return ret; - } - - if (force_brightness > 0 && val != PM_DIM_BRIGHTNESS) { - _I("brightness(%d), force brightness(%d)", - val, force_brightness); - val = force_brightness; - } - - if (get_pm_status_flag() & DIM_MASK) - val = 0; - - /* Maximum Brightness to users is 100. - * Thus real brightness need to be calculated */ - val = val * max / 100; - - _I("set brightness %d (default:%d)", val, default_brightness); - device_notify(DEVICE_NOTIFIER_DISPLAY_BRIGHTNESS, (void *)&val); - - return hal_device_display_set_brightness(val); -} - -static int get_brightness(int *val) -{ - int brt, ret; - - if (!display_dev_available) { - _E("There is no display device."); - return -ENOENT; - } - - ret = hal_device_display_get_brightness(&brt); - if (ret < 0) { - if (ret == -ENODEV) - _E("Get brightness is not supported."); - else - _E("Failed to get brightness: %d", ret); - - return ret; - } - - ret = display_backlight_get_normalized_brightness(brt, val); - if (ret < 0) { - _E("Failed to get normalized brightness."); - return ret; - } - - return 0; -} - /* It was operated only AOD enter & leave */ static int backlight_transit_state(int state) { @@ -221,21 +100,21 @@ static int backlight_transit_state(int state) display_backlight_get_default_brightness(&default_brightness); - backlight_ops.get_brightness(&brt); + display_backlight_get_brightness(&brt); if (state == DPMS_OFF) { start = brt; end = display_conf->aod_enter_level; /* - * The value of backlight_ops.get_brightness is system brightness. + * The value of display_backlight_get_brightness is system brightness. * But when device is LBM, the value is not same with real brightness. * So it should be read exactly value for transit smooth effect */ - get_brightness(&val); + display_backlight_get_brightness(&val); if (val > display_conf->aod_enter_level) - backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); + display_backlight_change_brightness(start, end, display_conf->brightness_change_step); } else { /* prevent transit effect when another effect is already executed */ if (brt != display_conf->aod_enter_level) { @@ -246,7 +125,7 @@ static int backlight_transit_state(int state) start = display_conf->aod_enter_level; end = default_brightness; - backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); + display_backlight_change_brightness(start, end, display_conf->brightness_change_step); } return 0; @@ -254,18 +133,18 @@ static int backlight_transit_state(int state) static void restore_brightness_func(void) { - backlight_ops.set_brightness = set_brightness; - backlight_ops.get_brightness = get_brightness; - backlight_ops.transit_brt = change_brightness; + backlight_ops.set_brightness = NULL; + backlight_ops.get_brightness = NULL; + backlight_ops.transit_brt = NULL; } static struct _backlight_ops backlight_ops = { .get_lcd_power = dpms_get_cached_state, - .set_brightness = set_brightness, - .get_brightness = get_brightness, + .set_brightness = NULL, + .get_brightness = NULL, .restore_brightness_func = restore_brightness_func, .transit_state = backlight_transit_state, - .transit_brt = change_brightness, + .transit_brt = NULL, }; int display_service_load(void) diff --git a/plugins/mobile/display/core.c b/plugins/mobile/display/core.c index 245d7eb..398e68b 100644 --- a/plugins/mobile/display/core.c +++ b/plugins/mobile/display/core.c @@ -1446,7 +1446,7 @@ static int default_action(int timeout) case S_LCDDIM: display_backlight_get_custom_status(&custom_status); if ((get_pm_old_state() == S_NORMAL) && custom_status) { - backlight_ops->get_brightness(&brightness); + display_backlight_get_brightness(&brightness); display_backlight_set_custom_brightness(brightness); } /* lcd dim state : dim the brightness */ @@ -1712,7 +1712,7 @@ static void check_seed_status(void) } _I("Set brightness(%d) from setting app.", tmp); display_backlight_set_default_brightness(tmp); - backlight_ops->set_brightness(tmp); + display_backlight_set_brightness(tmp); ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state); if (ret < 0) { diff --git a/plugins/mobile/display/device-interface.c b/plugins/mobile/display/device-interface.c index a416a44..fb2abbf 100644 --- a/plugins/mobile/display/device-interface.c +++ b/plugins/mobile/display/device-interface.c @@ -53,7 +53,6 @@ #define TOUCH_OFF 0 #define LCD_PHASED_MAX_BRIGHTNESS 100 -#define LCD_PHASED_DELAY 10000 /* microsecond */ #define DISPLAY_HAL_LIB_PATH "/usr/lib/libdisplay-hal.so" @@ -91,126 +90,6 @@ bool display_dimstay_check(void) return false; } -static void change_brightness(int start, int end, int step) -{ - int diff, val; - int ret = -1; - int prev; - - if (display_dimstay_check()) - return; - - ret = backlight_ops.get_brightness(&prev); - if (ret < 0) { - _E("Failed to get brightness: %d", ret); - return; - } - - if (prev == end) - return; - - if (get_pm_status_flag() & DIM_MASK) - end = 0; - - _I("start %d end %d step %d", start, end, step); - - if (display_dev_available) { - ret = hal_device_display_set_multi_brightness(end, step, LCD_PHASED_DELAY); - if (ret != -ENODEV) { - if (ret < 0) - _E("Failed to set_multi_brightness (%d)", ret); - - backlight_ops.set_brightness(end); - - return; - } - } - - diff = end - start; - - if (abs(diff) < step) - val = (diff > 0 ? 1 : -1); - else - val = (int)ceil((double)diff / step); - - while (start != end) { - if (val == 0) break; - - start += val; - if ((val > 0 && start > end) || - (val < 0 && start < end)) - start = end; - - display_backlight_set_brightness_with_delay(start, LCD_PHASED_DELAY); - } -} - -static int set_brightness(int val) -{ - int max, ret; - int default_brightness = 0, force_brightness = 0; - - display_backlight_get_default_brightness(&default_brightness); - display_backlight_get_force_brightness(&force_brightness); - - if (!display_dev_available) { - _E("There is no display device."); - return -ENOENT; - } - - ret = display_backlight_get_max_brightness(&max); - if (ret < 0) { - _E("Failed to get max brightness."); - return ret; - } - - if (force_brightness > 0 && val != PM_DIM_BRIGHTNESS) { - _I("brightness(%d), force brightness(%d)", - val, force_brightness); - val = force_brightness; - } - - if (get_pm_status_flag() & DIM_MASK) - val = 0; - - /* Maximum Brightness to users is 100. - * Thus real brightness need to be calculated */ - val = val * max / 100; - - _I("set brightness %d (default:%d)", val, default_brightness); - device_notify(DEVICE_NOTIFIER_DISPLAY_BRIGHTNESS, (void *)&val); - - return hal_device_display_set_brightness(val); -} - -static int get_brightness(int *val) -{ - int brt, ret; - - if (!display_dev_available) { - _E("There is no display device."); - return -ENOENT; - } - - ret = hal_device_display_get_brightness(&brt); - if (ret < 0) { - if (ret == -ENODEV) - _E("Get brightness is not supported."); - else - _E("Failed to get brightness: %d", ret); - - return ret; - } - - ret = display_backlight_get_normalized_brightness(brt, val); - if (ret < 0) { - _E("Failed to get normalized brightness."); - return ret; - } - - return 0; -} - /* It was operated only AOD enter & leave */ static int backlight_transit_state(int state) { @@ -220,21 +99,21 @@ static int backlight_transit_state(int state) display_backlight_get_default_brightness(&default_brightness); - backlight_ops.get_brightness(&brt); + display_backlight_get_brightness(&brt); if (state == DPMS_OFF) { start = brt; end = display_conf->aod_enter_level; /* - * The value of backlight_ops.get_brightness is system brightness. + * The value of display_backlight_get_brightness is system brightness. * But when device is LBM, the value is not same with real brightness. * So it should be read exactly value for transit smooth effect */ - get_brightness(&val); + display_backlight_get_brightness(&val); if (val > display_conf->aod_enter_level) - backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); + display_backlight_change_brightness(start, end, display_conf->brightness_change_step); } else { /* prevent transit effect when another effect is already executed */ if (brt != display_conf->aod_enter_level) { @@ -245,7 +124,7 @@ static int backlight_transit_state(int state) start = display_conf->aod_enter_level; end = default_brightness; - backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); + display_backlight_change_brightness(start, end, display_conf->brightness_change_step); } return 0; @@ -253,18 +132,18 @@ static int backlight_transit_state(int state) static void restore_brightness_func(void) { - backlight_ops.set_brightness = set_brightness; - backlight_ops.get_brightness = get_brightness; - backlight_ops.transit_brt = change_brightness; + backlight_ops.set_brightness = NULL; + backlight_ops.get_brightness = NULL; + backlight_ops.transit_brt = NULL; } static struct _backlight_ops backlight_ops = { .get_lcd_power = dpms_get_cached_state, - .set_brightness = set_brightness, - .get_brightness = get_brightness, + .set_brightness = NULL, + .get_brightness = NULL, .restore_brightness_func = restore_brightness_func, .transit_state = backlight_transit_state, - .transit_brt = change_brightness, + .transit_brt = NULL, }; int display_service_load(void) diff --git a/plugins/tv/display/core.c b/plugins/tv/display/core.c index e36a91b..d434bd4 100644 --- a/plugins/tv/display/core.c +++ b/plugins/tv/display/core.c @@ -1436,7 +1436,7 @@ static int default_action(int timeout) case S_LCDDIM: display_backlight_get_custom_status(&custom_status); if ((get_pm_old_state() == S_NORMAL) && custom_status) { - backlight_ops->get_brightness(&brightness); + display_backlight_get_brightness(&brightness); display_backlight_set_custom_brightness(brightness); } /* lcd dim state : dim the brightness */ @@ -1702,7 +1702,7 @@ static void check_seed_status(void) } _I("Set brightness(%d) from setting app.", tmp); display_backlight_set_default_brightness(tmp); - backlight_ops->set_brightness(tmp); + display_backlight_set_brightness(tmp); ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state); if (ret < 0) { diff --git a/plugins/tv/display/device-interface.c b/plugins/tv/display/device-interface.c index a52a506..1caaa12 100644 --- a/plugins/tv/display/device-interface.c +++ b/plugins/tv/display/device-interface.c @@ -52,7 +52,6 @@ #define TOUCH_OFF 0 #define LCD_PHASED_MAX_BRIGHTNESS 100 -#define LCD_PHASED_DELAY 10000 /* microsecond */ #define DISPLAY_HAL_LIB_PATH "/usr/lib/libdisplay-hal.so" @@ -92,126 +91,6 @@ bool display_dimstay_check(void) return false; } -static void change_brightness(int start, int end, int step) -{ - int diff, val; - int ret = -1; - int prev; - - if (display_dimstay_check()) - return; - - ret = backlight_ops.get_brightness(&prev); - if (ret < 0) { - _E("Failed to get brightness: %d", ret); - return; - } - - if (prev == end) - return; - - if (get_pm_status_flag() & DIM_MASK) - end = 0; - - _I("start %d end %d step %d", start, end, step); - - if (display_dev_available) { - ret = hal_device_display_set_multi_brightness(end, step, LCD_PHASED_DELAY); - if (ret != -ENODEV) { - if (ret < 0) - _E("Failed to set_multi_brightness (%d)", ret); - - backlight_ops.set_brightness(end); - - return; - } - } - - diff = end - start; - - if (abs(diff) < step) - val = (diff > 0 ? 1 : -1); - else - val = (int)ceil((double)diff / step); - - while (start != end) { - if (val == 0) break; - - start += val; - if ((val > 0 && start > end) || - (val < 0 && start < end)) - start = end; - - display_backlight_set_brightness_with_delay(start, LCD_PHASED_DELAY); - } -} - -static int set_brightness(int val) -{ - int max, ret; - int default_brightness = 0, force_brightness = 0; - - display_backlight_get_default_brightness(&default_brightness); - display_backlight_get_force_brightness(&force_brightness); - - if (!display_dev_available) { - _E("There is no display device."); - return -ENOENT; - } - - ret = display_backlight_get_max_brightness(&max); - if (ret < 0) { - _E("Failed to get max brightness."); - return ret; - } - - if (force_brightness > 0 && val != PM_DIM_BRIGHTNESS) { - _I("brightness(%d), force brightness(%d)", - val, force_brightness); - val = force_brightness; - } - - if (get_pm_status_flag() & DIM_MASK) - val = 0; - - /* Maximum Brightness to users is 100. - * Thus real brightness need to be calculated */ - val = val * max / 100; - - _I("set brightness %d (default:%d)", val, default_brightness); - device_notify(DEVICE_NOTIFIER_DISPLAY_BRIGHTNESS, (void *)&val); - - return hal_device_display_set_brightness(val); -} - -static int get_brightness(int *val) -{ - int brt, ret; - - if (!display_dev_available) { - _E("There is no display device."); - return -ENOENT; - } - - ret = hal_device_display_get_brightness(&brt); - if (ret < 0) { - if (ret == -ENODEV) - _E("Get brightness is not supported."); - else - _E("Failed to get brightness: %d", ret); - - return ret; - } - - ret = display_backlight_get_normalized_brightness(brt, val); - if (ret < 0) { - _E("Failed to get normalized brightness."); - return ret; - } - - return 0; -} - /* It was operated only AOD enter & leave */ static int backlight_transit_state(int state) { @@ -221,21 +100,21 @@ static int backlight_transit_state(int state) display_backlight_get_default_brightness(&default_brightness); - backlight_ops.get_brightness(&brt); + display_backlight_get_brightness(&brt); if (state == DPMS_OFF) { start = brt; end = display_conf->aod_enter_level; /* - * The value of backlight_ops.get_brightness is system brightness. + * The value of display_backlight_get_brightness is system brightness. * But when device is LBM, the value is not same with real brightness. * So it should be read exactly value for transit smooth effect */ - get_brightness(&val); + display_backlight_get_brightness(&val); if (val > display_conf->aod_enter_level) - backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); + display_backlight_change_brightness(start, end, display_conf->brightness_change_step); } else { /* prevent transit effect when another effect is already executed */ if (brt != display_conf->aod_enter_level) { @@ -246,7 +125,7 @@ static int backlight_transit_state(int state) start = display_conf->aod_enter_level; end = default_brightness; - backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); + display_backlight_change_brightness(start, end, display_conf->brightness_change_step); } return 0; @@ -254,18 +133,18 @@ static int backlight_transit_state(int state) static void restore_brightness_func(void) { - backlight_ops.set_brightness = set_brightness; - backlight_ops.get_brightness = get_brightness; - backlight_ops.transit_brt = change_brightness; + backlight_ops.set_brightness = NULL; + backlight_ops.get_brightness = NULL; + backlight_ops.transit_brt = NULL; } static struct _backlight_ops backlight_ops = { .get_lcd_power = dpms_get_cached_state, - .set_brightness = set_brightness, - .get_brightness = get_brightness, + .set_brightness = NULL, + .get_brightness = NULL, .restore_brightness_func = restore_brightness_func, .transit_state = backlight_transit_state, - .transit_brt = change_brightness, + .transit_brt = NULL, }; int display_service_load(void) diff --git a/plugins/wearable/display/auto-brightness-sensorhub.c b/plugins/wearable/display/auto-brightness-sensorhub.c index 6e7226e..77e5030 100644 --- a/plugins/wearable/display/auto-brightness-sensorhub.c +++ b/plugins/wearable/display/auto-brightness-sensorhub.c @@ -49,7 +49,7 @@ static void change_brightness_transit(int start, int end) _E("Failed to get display configuration variable."); return ; } - backlight_ops->transit_brt(start, end, + display_backlight_change_brightness(start, end, display_conf->brightness_change_step); } @@ -94,7 +94,7 @@ static void set_brightness_level(int level) break; case SPECIFIC_MODE_OFF: display_backlight_get_default_brightness(&default_brightness); - backlight_ops->get_brightness(¤t_brightness); + display_backlight_get_brightness_by_plugin_profile(¤t_brightness); /* Disable HBM, LBM */ auto_brightness_control(BR_HBM_OFF, BR_IMPLICIT); @@ -187,7 +187,7 @@ int auto_brightness_control(enum brightness_request_e request, int set_brightnes int ret; display_backlight_get_default_brightness(&default_brightness); - backlight_ops->get_brightness(¤t_brightness); + display_backlight_get_brightness_by_plugin_profile(¤t_brightness); if (request == BR_LBM_ON) { if (!get_lbm_setting()) @@ -195,12 +195,12 @@ int auto_brightness_control(enum brightness_request_e request, int set_brightnes if (!lbm && !hbm && !hold_brt && !lowdim) { change_brightness_transit(default_brightness, lbm_down_brt(default_brightness)); lbm_set_state(true); - backlight_ops->set_brightness(default_brightness); + display_backlight_set_brightness(default_brightness); change_flag(&lbm, 1); } else if (!lbm && !hbm && !hold_brt && lowdim) { change_brightness_transit(current_brightness, lbm_down_brt(current_brightness)); lbm_set_state(true); - backlight_ops->set_brightness(current_brightness); + display_backlight_set_brightness(current_brightness); change_flag(&lbm, 1); } else if (!lbm && !hbm && hold_brt) { change_flag(&lbm, 1); @@ -226,7 +226,7 @@ int auto_brightness_control(enum brightness_request_e request, int set_brightnes lbm_set_state(false); change_brightness_transit(lbm_down_brt(current_brightness), set_brightness); } else { - backlight_ops->set_brightness(set_brightness); + display_backlight_set_brightness(set_brightness); } change_flag(&hold_brt, 1); } else if (request == BR_LOWDIM_ON) { @@ -246,7 +246,7 @@ int auto_brightness_control(enum brightness_request_e request, int set_brightnes if (!lowdim) { change_brightness_transit(lbm_down_brt(default_brightness), default_brightness); - backlight_ops->set_brightness(default_brightness); + display_backlight_set_brightness(default_brightness); } else { display_backlight_set_brightness_by_dim_brightness(); } @@ -271,7 +271,7 @@ int auto_brightness_control(enum brightness_request_e request, int set_brightnes return 0; if (!lowdim) - backlight_ops->set_brightness(default_brightness); + display_backlight_set_brightness(default_brightness); else display_backlight_set_brightness_by_dim_brightness(); } else if (lbm && hold_brt) { @@ -279,11 +279,11 @@ int auto_brightness_control(enum brightness_request_e request, int set_brightnes if (!lowdim) { change_brightness_transit(current_brightness, lbm_down_brt(default_brightness)); lbm_set_state(true); - backlight_ops->set_brightness(default_brightness); + display_backlight_set_brightness(default_brightness); } else { change_brightness_transit(current_brightness, lbm_down_brt(PM_DIM_BRIGHTNESS)); lbm_set_state(true); - backlight_ops->set_brightness(PM_DIM_BRIGHTNESS); + display_backlight_set_brightness(PM_DIM_BRIGHTNESS); } } } else if (request == BR_LOWDIM_OFF) { @@ -299,7 +299,7 @@ int auto_brightness_control(enum brightness_request_e request, int set_brightnes change_flag(&hold_brt, 0); display_backlight_set_default_brightness(set_brightness); if (!hbm) { - ret = backlight_ops->set_brightness(set_brightness); + ret = display_backlight_set_brightness(set_brightness); if (ret < 0) { _E("Failed to set brightness to %d.", set_brightness); return ret; diff --git a/plugins/wearable/display/core.c b/plugins/wearable/display/core.c index a87e408..c62c3db 100644 --- a/plugins/wearable/display/core.c +++ b/plugins/wearable/display/core.c @@ -1707,7 +1707,7 @@ static int default_action(int timeout) case S_LCDDIM: display_backlight_get_custom_status(&custom_status); if ((get_pm_old_state() == S_NORMAL) && custom_status) { - backlight_ops->get_brightness(&brightness); + display_backlight_get_brightness(&brightness); display_backlight_set_custom_brightness(brightness); } /* lcd dim state : dim the brightness */ @@ -1969,7 +1969,7 @@ static void check_seed_status(void) } _I("Set brightness(%d) from setting app.", tmp); display_backlight_set_default_brightness(tmp); - backlight_ops->set_brightness(tmp); + display_backlight_set_brightness(tmp); ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state); if (ret < 0) { diff --git a/plugins/wearable/display/device-interface.c b/plugins/wearable/display/device-interface.c index 4b3c185..6f84242 100644 --- a/plugins/wearable/display/device-interface.c +++ b/plugins/wearable/display/device-interface.c @@ -55,7 +55,6 @@ #define TOUCH_OFF 0 #define LCD_PHASED_MAX_BRIGHTNESS 100 -#define LCD_PHASED_DELAY 10000 /* microsecond */ #define DISPLAY_HAL_LIB_PATH "/usr/lib/libdisplay-hal.so" @@ -101,60 +100,6 @@ bool display_dimstay_check(void) return false; } -static void change_brightness(int start, int end, int step) -{ - int diff, val; - int ret = -1; - int prev; - - if (display_dimstay_check()) - return; - - ret = backlight_ops.get_brightness(&prev); - if (ret < 0) { - _E("Failed to get brightness: %d", ret); - return; - } - - if (prev == end) - return; - - if (get_pm_status_flag() & DIM_MASK) - end = 0; - - _I("start %d end %d step %d", start, end, step); - - if (display_dev_available) { - ret = hal_device_display_set_multi_brightness(end, step, LCD_PHASED_DELAY); - if (ret != -ENODEV) { - if (ret < 0) - _E("Failed to set_multi_brightness (%d)", ret); - - backlight_ops.set_brightness(end); - - return; - } - } - - diff = end - start; - - if (abs(diff) < step) - val = (diff > 0 ? 1 : -1); - else - val = (int)ceil((double)diff / step); - - while (start != end) { - if (val == 0) break; - - start += val; - if ((val > 0 && start > end) || - (val < 0 && start < end)) - start = end; - - display_backlight_set_brightness_with_delay(start, LCD_PHASED_DELAY); - } -} - static int set_brightness(int val) { int max, ret; @@ -194,34 +139,6 @@ static int set_brightness(int val) return hal_device_display_set_brightness(val); } -static int get_brightness(int *val) -{ - int brt, ret; - - if (!display_dev_available) { - _E("There is no display device."); - return -ENOENT; - } - - ret = hal_device_display_get_brightness(&brt); - if (ret < 0) { - if (ret == -ENODEV) - _E("Get brightness is not supported."); - else - _E("Failed to get brightness: %d", ret); - - return ret; - } - - ret = display_backlight_get_normalized_brightness(brt, val); - if (ret < 0) { - _E("Failed to get normalized brightness."); - return ret; - } - - return 0; -} - /* It was operated only AOD enter & leave */ static int backlight_transit_state(int state) { @@ -232,17 +149,17 @@ static int backlight_transit_state(int state) display_backlight_get_default_brightness(&default_brightness); - backlight_ops.get_brightness(&brt); + display_backlight_get_brightness_by_plugin_profile(&brt); if (state == DPMS_OFF) { start = brt; /* - * The value of backlight_ops.get_brightness is system brightness. + * The value of display_backlight_get_brightness is system brightness. * But when device is LBM, the value is not same with real brightness. * So it should be read exactly value for transit smooth effect */ - get_brightness(&val); + display_backlight_get_brightness(&val); /* AOD brightness * @@ -296,7 +213,7 @@ static int backlight_transit_state(int state) if (val > aod_brightness_level) { _D("backlight transit start %d end %d DPMS OFF", start, aod_brightness_level); - backlight_ops.transit_brt(start, aod_brightness_level, display_conf->brightness_change_step); + display_backlight_change_brightness(start, aod_brightness_level, display_conf->brightness_change_step); } } else { /* prevent transit effect when another effect is already executed */ @@ -309,7 +226,7 @@ static int backlight_transit_state(int state) start = aod_brightness_level; end = default_brightness; _D("backlight transit start %d end %d DPMS ON", start, end); - backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); + display_backlight_change_brightness(start, end, display_conf->brightness_change_step); } return 0; @@ -318,19 +235,17 @@ static int backlight_transit_state(int state) static void restore_brightness_func(void) { backlight_ops.set_brightness = set_brightness; - backlight_ops.get_brightness = get_brightness; - backlight_ops.transit_brt = change_brightness; + backlight_ops.get_brightness = NULL; + backlight_ops.transit_brt = NULL; } static struct _backlight_ops backlight_ops = { .get_lcd_power = dpms_get_cached_state, .set_brightness = set_brightness, - .get_brightness = get_brightness, + .get_brightness = NULL, .restore_brightness_func = restore_brightness_func, .transit_state = backlight_transit_state, - .transit_brt = change_brightness, - /* auto-test only function */ - .get_brightness_raw = get_brightness, /* always fetch brightness from node even LBM mode */ + .transit_brt = NULL, }; int display_service_load(void) diff --git a/plugins/wearable/display/lbm.c b/plugins/wearable/display/lbm.c index f60eea9..f256247 100644 --- a/plugins/wearable/display/lbm.c +++ b/plugins/wearable/display/lbm.c @@ -26,6 +26,7 @@ #include "display-info.h" #include "display/util.h" #include "display/core.h" +#include "display/display-backlight.h" #include "display/display-ops.h" #include "shared/common.h" #include "shared/device-notifier.h" @@ -140,7 +141,7 @@ static void lbm_change_brightness(int start, int end, int step) if (display_dimstay_check()) return; - ret = backlight_ops->get_brightness(&prev); + ret = display_backlight_get_brightness_by_plugin_profile(&prev); if (ret < 0) { _E("Failed to get brightness, %d.", ret); @@ -163,7 +164,7 @@ static void lbm_change_brightness(int start, int end, int step) if (ret < 0) _E("Failed to set_multi_brightness, %d.", ret); - backlight_ops->set_brightness(end); + display_backlight_set_brightness(end); return; } @@ -186,7 +187,7 @@ static void lbm_change_brightness(int start, int end, int step) start = end; usleep(LCD_PHASED_DELAY); - backlight_ops->set_brightness(start); + display_backlight_set_brightness(start); } } diff --git a/src/display/auto-brightness.c b/src/display/auto-brightness.c index 393794f..866c6ad 100644 --- a/src/display/auto-brightness.c +++ b/src/display/auto-brightness.c @@ -110,7 +110,7 @@ static void alc_set_brightness(int setting, int value, float light) static float old; int position, tmp_value = 0, ret; - ret = backlight_ops->get_brightness(&tmp_value); + ret = display_backlight_get_brightness_by_plugin_profile(&tmp_value); if (ret < 0) { _E("Failed to get display brightness."); return; diff --git a/src/display/device-interface.h b/src/display/device-interface.h index 7de0e98..70d2592 100644 --- a/src/display/device-interface.h +++ b/src/display/device-interface.h @@ -64,7 +64,6 @@ struct _backlight_ops { int (*get_lcd_power)(void); int (*set_brightness)(int val); int (*get_brightness)(int *val); - int (*get_brightness_raw)(int *val); void (*restore_brightness_func)(void); int (*transit_state)(int state); void (*transit_brt)(int start, int end, int step); diff --git a/src/display/display-backlight.c b/src/display/display-backlight.c index 0f3e8ea..538a1da 100644 --- a/src/display/display-backlight.c +++ b/src/display/display-backlight.c @@ -16,8 +16,11 @@ * limitations under the License. */ +#include + #include +#include "shared/device-notifier.h" #include "shared/log.h" #include "power/power-suspend.h" #include "core.h" @@ -26,6 +29,7 @@ #include "display-dpms.h" #define DUMP_MODE_WAITING_TIME 600000 /* milisecond */ +#define LCD_PHASED_DELAY 10000 /* microsecond */ static const struct display_config *display_conf; static struct _backlight_ops *backlight_ops; @@ -103,6 +107,144 @@ int display_backlight_get_normalized_brightness(int raw_brightness, return 0; } +int display_backlight_set_brightness(int brightness) +{ + int max_brightness, ret; + int default_brightness = display_backlight_get_default_brightness(); + int force_brightness = display_backlight_get_force_brightness(); + + if (backlight_ops && backlight_ops->set_brightness) + return backlight_ops->set_brightness(brightness); + + if (!display_is_hal_backend_available()) { + _E("There is no display device."); + return -ENOENT; + } + + ret = display_backlight_get_max_brightness(&max_brightness); + if (ret < 0) { + _E("Failed to get max brightness."); + return ret; + } + + if (force_brightness > 0 && brightness != PM_DIM_BRIGHTNESS) { + _I("brightness(%d), force brightness(%d)", brightness, force_brightness); + brightness = force_brightness; + } + + if (get_pm_status_flag() & DIM_MASK) + brightness = PM_DIM_BRIGHTNESS; + + /* Maximum Brightness to users is 100. + * Thus real brightness need to be calculated */ + brightness = brightness * max_brightness / 100; + + _I("set brightness %d (default:%d)", brightness, default_brightness); + device_notify(DEVICE_NOTIFIER_DISPLAY_BRIGHTNESS, (void *)&brightness); + + return hal_device_display_set_brightness(brightness); +} + +int display_backlight_get_brightness(int *brightness) +{ + int brt, ret; + + if (!display_is_hal_backend_available()) { + _E("There is no display device."); + return -ENOENT; + } + + ret = hal_device_display_get_brightness(&brt); + if (ret < 0) { + if (ret == -ENODEV) + _E("Get brightness is not supported."); + else + _E("Failed to get brightness: %d", ret); + + return ret; + } + + ret = display_backlight_get_normalized_brightness(brt, brightness); + if (ret < 0) { + _E("Failed to get normalized brightness."); + return ret; + } + + return 0; +} + +/* FIXME: this function is only for wearable plugin, it should changed or removed after refactoring */ +int display_backlight_get_brightness_by_plugin_profile(int *brightness) +{ + if (backlight_ops && backlight_ops->get_brightness) + return backlight_ops->get_brightness(brightness); + + return display_backlight_get_brightness(brightness); +} + +void display_backlight_change_brightness(int start, int end, int step) +{ + int diff, val; + int ret = -1; + int prev; + + if (backlight_ops && backlight_ops->transit_brt) + return backlight_ops->transit_brt(start, end, step); + + if (display_dimstay_check()) + return; + + ret = display_backlight_get_brightness(&prev); + if (ret < 0) { + _E("Failed to get brightness: %d", ret); + return; + } + + if (prev == end) + return; + + if (get_pm_status_flag() & DIM_MASK) + end = PM_DIM_BRIGHTNESS; + + _I("start %d end %d step %d", start, end, step); + + if (!display_is_hal_backend_available()) { + ret = hal_device_display_set_multi_brightness(end, step, LCD_PHASED_DELAY); + if (ret != -ENODEV) { + if (ret < 0) + _E("Failed to set_multi_brightness (%d)", ret); + + display_backlight_set_brightness(end); + + return; + } + } + + diff = end - start; + + if (abs(diff) < step) + val = (diff > 0 ? 1 : -1); + else + val = (int)ceil((double)diff / step); + + while (start != end) { + if (val == 0) + break; + + start += val; + if ((val > 0 && start > end) || (val < 0 && start < end)) + start = end; + + display_backlight_set_brightness_with_delay(start, LCD_PHASED_DELAY); + } +} + +void display_backlight_restore_brightness_funcs(void) +{ + if (backlight_ops && backlight_ops->restore_brightness_func) + return backlight_ops->restore_brightness_func(); +} + int display_backlight_set_default_brightness(int brightness) { if (brightness < PM_MIN_BRIGHTNESS || brightness > PM_MAX_BRIGHTNESS) { @@ -127,7 +269,7 @@ int display_backlight_set_brightness_by_dim_brightness(void) { int ret = 0; - ret = backlight_ops->set_brightness(PM_DIM_BRIGHTNESS); + ret = display_backlight_set_brightness(PM_DIM_BRIGHTNESS); #ifdef ENABLE_PM_LOG if (!ret) @@ -155,7 +297,7 @@ int display_backlight_update_by_default_brightness(void) ret = display_backlight_set_brightness_by_dim_brightness(); } else { display_backlight_get_default_brightness(&default_brightness); - ret = backlight_ops->set_brightness(default_brightness); + ret = display_backlight_set_brightness(default_brightness); } return ret; @@ -179,7 +321,7 @@ int display_backlight_update_by_custom_brightness(void) ret = display_backlight_set_brightness_by_dim_brightness(); } else { _I("Custom brightness restored! %d", custom_brightness); - ret = backlight_ops->set_brightness(custom_brightness); + ret = display_backlight_set_brightness(custom_brightness); } return ret; @@ -228,7 +370,7 @@ static gboolean blink_cb(gpointer data) { static bool flag; - backlight_ops->set_brightness(flag ? PM_MAX_BRIGHTNESS : PM_MIN_BRIGHTNESS); + display_backlight_set_brightness(flag ? PM_MAX_BRIGHTNESS : PM_MIN_BRIGHTNESS); flag = !flag; return G_SOURCE_CONTINUE; @@ -282,7 +424,7 @@ int display_backlight_set_brightness_with_delay(int brightness, int delay) usleep(delay); /* Update device brightness */ - ret = backlight_ops->set_brightness(brightness); + ret = display_backlight_set_brightness(brightness); _I("Set brightness(%d): %d", brightness, ret); return ret; diff --git a/src/display/display-backlight.h b/src/display/display-backlight.h index 7c1349d..538d7c7 100644 --- a/src/display/display-backlight.h +++ b/src/display/display-backlight.h @@ -22,6 +22,10 @@ int display_backlight_get_max_brightness(int *max_brightness); int display_backlight_get_normalized_brightness(int raw_brightness, int *normalized_brightness); +int display_backlight_set_brightness(int brightness); +int display_backlight_get_brightness(int *brightness); +int display_backlight_get_brightness_by_plugin_profile(int *brightness); +void display_backlight_change_brightness(int start, int end, int step); int display_backlight_set_default_brightness(int brightness); int display_backlight_get_default_brightness(int *brightness); int display_backlight_update_by_default_brightness(void); diff --git a/src/display/display-dbus.c b/src/display/display-dbus.c index 091bcc5..cdcfc38 100644 --- a/src/display/display-dbus.c +++ b/src/display/display-dbus.c @@ -410,7 +410,7 @@ static GVariant *dbus_getbrightness(GDBusConnection *conn, int brt = -1, ret, result; if (get_pm_cur_state() == S_NORMAL) { - ret = backlight_ops->get_brightness(&brt); + ret = display_backlight_get_brightness_by_plugin_profile(&brt); if (ret < 0) result = 0; else @@ -475,7 +475,7 @@ static GVariant *dbus_setbrightness(GDBusConnection *conn, ret = disp_plgn->auto_brightness_control(BR_SET_BRIGHTNESS, brt); } else { display_backlight_set_default_brightness(brt); - ret = backlight_ops->set_brightness(brt); + ret = display_backlight_set_brightness(brt); if (ret < 0) goto error; ret = vconf_set_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, brt); @@ -484,7 +484,7 @@ static GVariant *dbus_setbrightness(GDBusConnection *conn, } } else if (state == DISPLAY_STATE_SCREEN_DIM) { if (get_pm_cur_state() == S_LCDDIM) { - ret = backlight_ops->set_brightness(brt); + ret = display_backlight_set_brightness(brt); if (ret < 0) goto error; } @@ -538,7 +538,7 @@ static GVariant *dbus_holdbrightness(GDBusConnection *conn, if (disp_plgn->auto_brightness_control) ret = disp_plgn->auto_brightness_control(BR_HOLD_BRIGHTNESS, brt); else - ret = backlight_ops->set_brightness(brt); + ret = display_backlight_set_brightness(brt); if (ret < 0) goto error; @@ -606,7 +606,7 @@ static GVariant *dbus_releasebrightness(GDBusConnection *conn, if (ret < 0) _E("Failed to set vconf value for custom brightness status: %d", vconf_get_ext_errno()); - ret = backlight_ops->get_brightness(&brt); + ret = display_backlight_get_brightness_by_plugin_profile(&brt); if (ret < 0) brt = ret; @@ -615,7 +615,7 @@ static GVariant *dbus_releasebrightness(GDBusConnection *conn, charger == VCONFKEY_SYSMAN_CHARGER_DISCONNECTED && !changed) { _D("batt warning low : brightness is not changed!"); if (brt != 0) - backlight_ops->set_brightness(0); + display_backlight_set_brightness(0); goto error; } @@ -624,7 +624,7 @@ static GVariant *dbus_releasebrightness(GDBusConnection *conn, disp_plgn->auto_brightness_control(BR_RELEASE_BRIGHTNESS, BR_IMPLICIT); } else { if (brt != setting) - backlight_ops->set_brightness(setting); + display_backlight_set_brightness(setting); } } else if (autobrt == SETTING_BRIGHTNESS_AUTOMATIC_PAUSE) { _D("Auto brightness will be enable"); @@ -1198,7 +1198,7 @@ static GVariant *dbus_getbrightnessinfo(GDBusConnection *conn, int current_brightness; display_backlight_get_default_brightness(&default_brightness); - backlight_ops->get_brightness_raw(¤t_brightness); + display_backlight_get_brightness(¤t_brightness); return g_variant_new("(ii)", default_brightness, current_brightness); } diff --git a/src/display/display-panel.c b/src/display/display-panel.c index f9e49d6..7900a58 100644 --- a/src/display/display-panel.c +++ b/src/display/display-panel.c @@ -156,7 +156,7 @@ int display_panel_set_panel_state_by_off_state(enum device_flags flags) cnt++; if (flags & LCD_PHASED_TRANSIT_MODE) - backlight_ops->transit_brt(default_brightness, + display_backlight_change_brightness(default_brightness, LCD_PHASED_MIN_BRIGHTNESS, LCD_PHASED_CHANGE_STEP); if (flags & FORCE_OFF_MODE) -- 2.7.4