diff options
author | Youngjae Cho <y0.cho@samsung.com> | 2020-07-15 18:22:28 +0900 |
---|---|---|
committer | Yunmi Ha <yunmi.ha@samsung.com> | 2020-08-14 15:51:09 +0900 |
commit | 2d618a9afdf5910ff640fcd5c0dcb94bb3233e82 (patch) | |
tree | bd889cd5d5501513a46ea819467b46f3b9ff3480 | |
parent | 23a4276cef9262f0d072c982e7ff18915c717ac9 (diff) | |
download | deviced-2d618a9afdf5910ff640fcd5c0dcb94bb3233e82.tar.gz deviced-2d618a9afdf5910ff640fcd5c0dcb94bb3233e82.tar.bz2 deviced-2d618a9afdf5910ff640fcd5c0dcb94bb3233e82.zip |
Change backlight_ops static
Change-Id: I8d958fc084a74e6272f470bf81a7f1a342c10492
Signed-off-by: Youngjae Cho <y0.cho@samsung.com>
25 files changed, 494 insertions, 360 deletions
diff --git a/plugins/iot/display/core.c b/plugins/iot/display/core.c index 0fe3a8ab..2ed514ce 100644 --- a/plugins/iot/display/core.c +++ b/plugins/iot/display/core.c @@ -94,7 +94,7 @@ extern int get_charging_status(int *val); extern void init_save_userlock(void); static struct display_plugin *disp_plgn; - +static struct _backlight_ops *backlight_ops; static void (*power_saving_func) (int onoff); static enum device_ops_status status = DEVICE_OPS_STATUS_UNINIT; @@ -319,7 +319,7 @@ static gboolean late_transit_on(void *data) g_source_remove(transit_timer); transit_timer = 0; - backlight_ops.transit_state(DPMS_ON); + backlight_ops->transit_state(DPMS_ON); return G_SOURCE_REMOVE; } @@ -346,7 +346,7 @@ void lcd_on_procedure(int state, enum device_flags flag) _I("[lcdstep] 0x%lx", flags); if (flags & AMBIENT_MODE) { - if (ambient_get_state() == false && backlight_ops.get_lcd_power() == DPMS_ON) + if (ambient_get_state() == false && backlight_ops->get_lcd_power() == DPMS_ON) return; ambient_set_state(false); } @@ -358,9 +358,9 @@ void lcd_on_procedure(int state, enum device_flags flag) if (!(flags & LCD_PHASED_TRANSIT_MODE)) { /* Update brightness level */ if (state == LCD_DIM) - backlight_ops.dim(); + backlight_ops->dim(); else if (state == LCD_NORMAL) - backlight_ops.update(); + backlight_ops->update(); } if (state == LCD_NORMAL) @@ -445,7 +445,7 @@ inline void lcd_off_procedure(enum device_flags flag) } if (flags & LCD_PHASED_TRANSIT_MODE) - backlight_ops.transit_state(DPMS_OFF); + backlight_ops->transit_state(DPMS_OFF); DD_LIST_FOREACH(lcdon_ops, l, ops) ops->stop(flags); @@ -717,7 +717,7 @@ void lcd_on_direct(enum device_flags flags) static inline bool check_lcd_is_on(void) { - if (backlight_ops.get_lcd_power() != DPMS_ON) + if (backlight_ops->get_lcd_power() != DPMS_ON) return false; return true; @@ -790,7 +790,7 @@ int custom_lcdoff(enum device_flags flag) } _I("custom lcd off by flag(%d)", flag); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(flag); if (set_custom_lcdon_timeout(0) == true) @@ -878,7 +878,7 @@ int display_off_by_reason(const char *reason) } _I("platform lcd off by %s", reason); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(flag); /* state transition */ @@ -928,7 +928,7 @@ static int default_proc_change_state(unsigned int cond, pid_t pid) default_proc_change_state_action(next, -1); break; case S_LCDOFF: - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(LCD_OFF_BY_EVENT); if (set_custom_lcdon_timeout(0)) update_display_time(); @@ -1541,7 +1541,7 @@ static int default_action(int timeout) if ((get_pm_old_state() == S_LCDOFF) || (get_pm_old_state() == S_SLEEP)) check_lock_screen(); else if (get_pm_old_state() == S_LCDDIM) - backlight_ops.update(); + backlight_ops->update(); if (check_lcd_is_on() == false) lcd_on_procedure(LCD_NORMAL, NORMAL_MODE); @@ -1549,10 +1549,10 @@ static int default_action(int timeout) case S_LCDDIM: if ((get_pm_old_state() == S_NORMAL) && - backlight_ops.get_custom_status()) - backlight_ops.save_custom_brightness(); + backlight_ops->get_custom_status()) + backlight_ops->save_custom_brightness(); /* lcd dim state : dim the brightness */ - backlight_ops.dim(); + backlight_ops->dim(); if ((get_pm_old_state() == S_LCDOFF) || (get_pm_old_state() == S_SLEEP)) lcd_on_procedure(LCD_DIM, NORMAL_MODE); @@ -1562,11 +1562,11 @@ static int default_action(int timeout) if ((get_pm_old_state() != S_SLEEP) && (get_pm_old_state() != S_LCDOFF)) { stop_lock_timer(); /* lcd off state : turn off the backlight */ - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(LCD_OFF_BY_TIMEOUT); } - if (backlight_ops.get_lcd_power() == DPMS_ON + if (backlight_ops->get_lcd_power() == DPMS_ON || lcd_paneloff_mode) lcd_off_procedure(LCD_OFF_BY_TIMEOUT); break; @@ -1575,7 +1575,7 @@ static int default_action(int timeout) if ((get_pm_old_state() != S_SLEEP) && (get_pm_old_state() != S_LCDOFF)) stop_lock_timer(); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(LCD_OFF_BY_TIMEOUT); if (!pm_get_power_lock_support()) { @@ -1677,7 +1677,7 @@ static void default_saving_mode(int onoff) clear_pm_status_flag(PWRSV_FLAG); if (get_pm_cur_state() == S_NORMAL) - backlight_ops.update(); + backlight_ops->update(); } static int poll_callback(int condition, PMMsg *data) @@ -1775,7 +1775,7 @@ static int update_setting(int key_idx, int val) _I("Brightness changed in low battery," "escape dim state."); } - backlight_ops.set_default_brt(val); + backlight_ops->set_default_brt(val); break; case SETTING_LOCK_SCREEN: set_lock_screen_state(val); @@ -1787,7 +1787,7 @@ static int update_setting(int key_idx, int val) /* LCD on if lock screen show before waiting time */ if ((get_pm_cur_state() == S_NORMAL) && val == VCONFKEY_IDLE_LOCK && - backlight_ops.get_lcd_power() != DPMS_ON && + backlight_ops->get_lcd_power() != DPMS_ON && is_lcdon_blocked() == LCDON_BLOCK_NONE) lcd_on_procedure(LCD_NORMAL, LCD_ON_BY_EVENT); stop_lock_timer(); @@ -1814,9 +1814,9 @@ static int update_setting(int key_idx, int val) break; case SETTING_POWER_CUSTOM_BRIGHTNESS: if (val == VCONFKEY_PM_CUSTOM_BRIGHTNESS_ON) - backlight_ops.set_custom_status(true); + backlight_ops->set_custom_status(true); else - backlight_ops.set_custom_status(false); + backlight_ops->set_custom_status(false); break; default: @@ -1849,8 +1849,8 @@ static void check_seed_status(void) tmp = brt; } _I("Set brightness(%d) from setting app.", tmp); - backlight_ops.set_default_brt(tmp); - backlight_ops.set_brightness(tmp); + backlight_ops->set_default_brt(tmp); + backlight_ops->set_brightness(tmp); ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state); if (ret < 0) { @@ -2063,8 +2063,8 @@ static int battery_health_changed(void *data) set_pm_status_flag(DIMSTAY_FLAG); } - if (backlight_ops.get_lcd_power() == DPMS_ON) - backlight_ops.update(); + if (backlight_ops->get_lcd_power() == DPMS_ON) + backlight_ops->update(); return 0; } @@ -2225,8 +2225,8 @@ static void esd_action(void) if (!check_default(touchscreen_ops)) touchscreen_ops->stop(NORMAL_MODE); - backlight_ops.off(NORMAL_MODE); - backlight_ops.on(NORMAL_MODE); + backlight_ops->off(NORMAL_MODE); + backlight_ops->on(NORMAL_MODE); if (!check_default(touchscreen_ops)) touchscreen_ops->start(NORMAL_MODE); } @@ -2291,6 +2291,11 @@ static void display_init(void *data) if (display_conf.timeout_enable) get_lcd_timeout_from_settings(); ret = init_sysfs(flags); + backlight_ops = get_backlight_ops(); + if (!backlight_ops) { + _E("Failed to get backlight operator."); + ret = -1; + } break; case INIT_POLL: _I("input init"); @@ -2319,7 +2324,7 @@ static void display_init(void *data) check_seed_status(); /* In smd test, TSP should be turned off if display panel is not existed. */ - if (backlight_ops.get_lcd_power() == -ENOENT) { + if (backlight_ops->get_lcd_power() == -ENOENT) { _I("Display panel is not existed."); lcd_direct_control(DPMS_OFF, NORMAL_MODE); exit_lcd_operation(); @@ -2440,10 +2445,10 @@ static int display_start(enum device_flags flags) if (flags & NORMAL_MODE) { if (flags & LCD_PANEL_OFF_MODE) /* standby on */ - backlight_ops.standby(true); + backlight_ops->standby(true); else /* normal lcd on */ - backlight_ops.on(flags); + backlight_ops->on(flags); return 0; } @@ -2467,7 +2472,7 @@ static int display_stop(enum device_flags flags) { /* NORMAL MODE */ if (flags & NORMAL_MODE || flags & FORCE_OFF_MODE) { - backlight_ops.off(flags); + backlight_ops->off(flags); return 0; } @@ -2507,6 +2512,10 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } /** * @} diff --git a/plugins/iot/display/device-interface.c b/plugins/iot/display/device-interface.c index db92d760..49c9172a 100644 --- a/plugins/iot/display/device-interface.c +++ b/plugins/iot/display/device-interface.c @@ -44,6 +44,7 @@ #include "device-node.h" #include "display/display-dpms.h" #include "display/display.h" +#include "display/display-lock.h" #define TOUCH_ON 1 #define TOUCH_OFF 0 @@ -67,8 +68,7 @@ #define FREEZER_VITAL_WAKEUP_CGROUP "/sys/fs/cgroup/freezer/vital_wakeup/freezer.state" -struct _backlight_ops backlight_ops; - +static struct _backlight_ops backlight_ops; static bool custom_status; static int custom_brightness; static int force_brightness; @@ -77,6 +77,11 @@ static int dpms_running_state = DPMS_SETTING_DONE; static struct display_device *display_dev; static guint release_timer; +inline struct _backlight_ops *get_backlight_ops(void) +{ + return &backlight_ops; +} + struct display_device *display_dev_get(void) { return display_dev; @@ -722,36 +727,35 @@ static void restore_brightness_func(void) backlight_ops.transit_brt = change_brightness; } -static void _init_ops(void) -{ - backlight_ops.off = backlight_off; - backlight_ops.dim = backlight_dim; - backlight_ops.on = backlight_on; - backlight_ops.update = backlight_update; - backlight_ops.standby = backlight_standby; - backlight_ops.set_default_brt = set_default_brt; - backlight_ops.get_default_brt = get_default_brt; - backlight_ops.get_lcd_power = get_lcd_power; - backlight_ops.set_custom_status = set_custom_status; - backlight_ops.get_custom_status = get_custom_status; - backlight_ops.save_custom_brightness = save_custom_brightness; - backlight_ops.custom_update = custom_backlight_update; - backlight_ops.set_force_brightness = set_force_brightness; - backlight_ops.set_brightness = set_brightness; - backlight_ops.get_brightness = get_brightness; - backlight_ops.restore_brightness_func = restore_brightness_func; - backlight_ops.get_brightness_by_light_sensor = get_brightness_by_light_sensor; - backlight_ops.get_image_effect = get_image_effect; - backlight_ops.set_image_effect = set_image_effect; - backlight_ops.get_panel_mode = get_panel_mode; - backlight_ops.set_panel_mode = set_panel_mode; - backlight_ops.get_frame_rate = get_frame_rate; - backlight_ops.set_frame_rate = set_frame_rate; - backlight_ops.transit_state = backlight_transit_state; - backlight_ops.transit_brt = change_brightness; - backlight_ops.blink = blink; - backlight_ops.release_blink = release_blink; -} +static struct _backlight_ops backlight_ops = { + .off = backlight_off, + .dim = backlight_dim, + .on = backlight_on, + .update = backlight_update, + .standby = backlight_standby, + .set_default_brt = set_default_brt, + .get_default_brt = get_default_brt, + .get_lcd_power = get_lcd_power, + .set_custom_status = set_custom_status, + .get_custom_status = get_custom_status, + .save_custom_brightness = save_custom_brightness, + .custom_update = custom_backlight_update, + .set_force_brightness = set_force_brightness, + .set_brightness = set_brightness, + .get_brightness = get_brightness, + .restore_brightness_func = restore_brightness_func, + .get_brightness_by_light_sensor = get_brightness_by_light_sensor, + .get_image_effect = get_image_effect, + .set_image_effect = set_image_effect, + .get_panel_mode = get_panel_mode, + .set_panel_mode = set_panel_mode, + .get_frame_rate = get_frame_rate, + .set_frame_rate = set_frame_rate, + .transit_state = backlight_transit_state, + .transit_brt = change_brightness, + .blink = blink, + .release_blink = release_blink, +}; int display_service_load(void) { @@ -808,8 +812,6 @@ int is_lcdon_blocked(void) int init_sysfs(unsigned int flags) { - _init_ops(); - register_notifier(DEVICE_NOTIFIER_VITAL_STATE, vital_state_changed); return 0; diff --git a/plugins/iot/display/key-filter.c b/plugins/iot/display/key-filter.c index 186a1157..d8d4df35 100644 --- a/plugins/iot/display/key-filter.c +++ b/plugins/iot/display/key-filter.c @@ -91,6 +91,7 @@ enum combination_process { }; static struct display_plugin *disp_plgn; +static struct _backlight_ops *backlight_ops; static struct timeval pressed_time; static guint longkey_timeout_id = 0; static guint longkey_restore_id = 0; @@ -113,8 +114,8 @@ static inline int current_state_in_on(void) static inline void restore_custom_brightness(void) { if ((get_pm_cur_state() == S_LCDDIM) && - backlight_ops.get_custom_status()) - backlight_ops.custom_update(); + backlight_ops->get_custom_status()) + backlight_ops->custom_update(); } static void pwroff_popup(void) @@ -208,7 +209,7 @@ static inline bool switch_on_lcd(enum device_flags flags) if (current_state_in_on()) return false; - if (backlight_ops.get_lcd_power() == DPMS_ON) { + if (backlight_ops->get_lcd_power() == DPMS_ON) { if (ambient_get_state() == false) return false; } @@ -228,7 +229,7 @@ static inline void switch_off_lcd(void) if (!current_state_in_on()) return; - if (backlight_ops.get_lcd_power() == DPMS_OFF) + if (backlight_ops->get_lcd_power() == DPMS_OFF) return; broadcast_lcdoff_by_powerkey(); @@ -355,7 +356,7 @@ static int decide_lcdoff(void) { /* It's not needed if it's already LCD off state */ if (!current_state_in_on() && - backlight_ops.get_lcd_power() != DPMS_ON) + backlight_ops->get_lcd_power() != DPMS_ON) return false; /* @@ -797,4 +798,8 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } diff --git a/plugins/mobile/display/core.c b/plugins/mobile/display/core.c index 80cef01c..e9cc44ca 100644 --- a/plugins/mobile/display/core.c +++ b/plugins/mobile/display/core.c @@ -96,6 +96,7 @@ extern int get_charging_status(int *val); extern void init_save_userlock(void); static struct display_plugin *disp_plgn; +static struct _backlight_ops *backlight_ops; static void (*power_saving_func) (int onoff); static enum device_ops_status status = DEVICE_OPS_STATUS_UNINIT; @@ -326,7 +327,7 @@ static gboolean late_transit_on(void *data) g_source_remove(transit_timer); transit_timer = 0; - backlight_ops.transit_state(DPMS_ON); + backlight_ops->transit_state(DPMS_ON); return G_SOURCE_REMOVE; } @@ -353,7 +354,7 @@ void lcd_on_procedure(int state, enum device_flags flag) _I("[lcdstep] 0x%lx", flags); if (flags & AMBIENT_MODE) { - if (ambient_get_state() == false && backlight_ops.get_lcd_power() == DPMS_ON) + if (ambient_get_state() == false && backlight_ops->get_lcd_power() == DPMS_ON) return; ambient_set_state(false); } @@ -365,9 +366,9 @@ void lcd_on_procedure(int state, enum device_flags flag) if (!(flags & LCD_PHASED_TRANSIT_MODE)) { /* Update brightness level */ if (state == LCD_DIM) - backlight_ops.dim(); + backlight_ops->dim(); else if (state == LCD_NORMAL) - backlight_ops.update(); + backlight_ops->update(); } if (state == LCD_NORMAL) @@ -452,7 +453,7 @@ inline void lcd_off_procedure(enum device_flags flag) } if (flags & LCD_PHASED_TRANSIT_MODE) - backlight_ops.transit_state(DPMS_OFF); + backlight_ops->transit_state(DPMS_OFF); DD_LIST_FOREACH(lcdon_ops, l, ops) ops->stop(flags); @@ -724,7 +725,7 @@ void lcd_on_direct(enum device_flags flags) static inline bool check_lcd_is_on(void) { - if (backlight_ops.get_lcd_power() != DPMS_ON) + if (backlight_ops->get_lcd_power() != DPMS_ON) return false; return true; @@ -797,7 +798,7 @@ int custom_lcdoff(enum device_flags flag) } _I("custom lcd off by flag(%d)", flag); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(flag); if (set_custom_lcdon_timeout(0) == true) @@ -885,7 +886,7 @@ int display_off_by_reason(const char *reason) } _I("platform lcd off by %s", reason); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(flag); /* state transition */ @@ -935,7 +936,7 @@ static int default_proc_change_state(unsigned int cond, pid_t pid) default_proc_change_state_action(next, -1); break; case S_LCDOFF: - if (backlight_ops.get_lcd_power() == DPMS_ON) { + if (backlight_ops->get_lcd_power() == DPMS_ON) { if (get_proximity_state() == SENSOR_PROXIMITY_NEAR) lcd_off_procedure(LCD_OFF_BY_PROXIMITY); else @@ -1551,7 +1552,7 @@ static int default_action(int timeout) if ((get_pm_old_state() == S_LCDOFF) || (get_pm_old_state() == S_SLEEP)) check_lock_screen(); else if (get_pm_old_state() == S_LCDDIM) - backlight_ops.update(); + backlight_ops->update(); if (check_lcd_is_on() == false) lcd_on_procedure(LCD_NORMAL, NORMAL_MODE); @@ -1559,10 +1560,10 @@ static int default_action(int timeout) case S_LCDDIM: if ((get_pm_old_state() == S_NORMAL) && - backlight_ops.get_custom_status()) - backlight_ops.save_custom_brightness(); + backlight_ops->get_custom_status()) + backlight_ops->save_custom_brightness(); /* lcd dim state : dim the brightness */ - backlight_ops.dim(); + backlight_ops->dim(); if ((get_pm_old_state() == S_LCDOFF) || (get_pm_old_state() == S_SLEEP)) lcd_on_procedure(LCD_DIM, NORMAL_MODE); @@ -1572,11 +1573,11 @@ static int default_action(int timeout) if ((get_pm_old_state() != S_SLEEP) && (get_pm_old_state() != S_LCDOFF)) { stop_lock_timer(); /* lcd off state : turn off the backlight */ - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(LCD_OFF_BY_TIMEOUT); } - if (backlight_ops.get_lcd_power() == DPMS_ON + if (backlight_ops->get_lcd_power() == DPMS_ON || lcd_paneloff_mode) lcd_off_procedure(LCD_OFF_BY_TIMEOUT); break; @@ -1585,7 +1586,7 @@ static int default_action(int timeout) if ((get_pm_old_state() != S_SLEEP) && (get_pm_old_state() != S_LCDOFF)) stop_lock_timer(); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(LCD_OFF_BY_TIMEOUT); if (!pm_get_power_lock_support()) { @@ -1687,7 +1688,7 @@ static void default_saving_mode(int onoff) clear_pm_status_flag(PWRSV_FLAG); if (get_pm_cur_state() == S_NORMAL) - backlight_ops.update(); + backlight_ops->update(); } static int poll_callback(int condition, PMMsg *data) @@ -1785,7 +1786,7 @@ static int update_setting(int key_idx, int val) _I("Brightness changed in low battery," "escape dim state."); } - backlight_ops.set_default_brt(val); + backlight_ops->set_default_brt(val); break; case SETTING_LOCK_SCREEN: set_lock_screen_state(val); @@ -1797,7 +1798,7 @@ static int update_setting(int key_idx, int val) /* LCD on if lock screen show before waiting time */ if ((get_pm_cur_state() == S_NORMAL) && val == VCONFKEY_IDLE_LOCK && - backlight_ops.get_lcd_power() != DPMS_ON && + backlight_ops->get_lcd_power() != DPMS_ON && is_lcdon_blocked() == LCDON_BLOCK_NONE) lcd_on_procedure(LCD_NORMAL, LCD_ON_BY_EVENT); stop_lock_timer(); @@ -1824,9 +1825,9 @@ static int update_setting(int key_idx, int val) break; case SETTING_POWER_CUSTOM_BRIGHTNESS: if (val == VCONFKEY_PM_CUSTOM_BRIGHTNESS_ON) - backlight_ops.set_custom_status(true); + backlight_ops->set_custom_status(true); else - backlight_ops.set_custom_status(false); + backlight_ops->set_custom_status(false); break; default: @@ -1859,8 +1860,8 @@ static void check_seed_status(void) tmp = brt; } _I("Set brightness(%d) from setting app.", tmp); - backlight_ops.set_default_brt(tmp); - backlight_ops.set_brightness(tmp); + backlight_ops->set_default_brt(tmp); + backlight_ops->set_brightness(tmp); ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state); if (ret < 0) { @@ -2073,8 +2074,8 @@ static int battery_health_changed(void *data) set_pm_status_flag(DIMSTAY_FLAG); } - if (backlight_ops.get_lcd_power() == DPMS_ON) - backlight_ops.update(); + if (backlight_ops->get_lcd_power() == DPMS_ON) + backlight_ops->update(); return 0; } @@ -2235,8 +2236,8 @@ static void esd_action(void) if (!check_default(touchscreen_ops)) touchscreen_ops->stop(NORMAL_MODE); - backlight_ops.off(NORMAL_MODE); - backlight_ops.on(NORMAL_MODE); + backlight_ops->off(NORMAL_MODE); + backlight_ops->on(NORMAL_MODE); if (!check_default(touchscreen_ops)) touchscreen_ops->start(NORMAL_MODE); } @@ -2329,7 +2330,7 @@ static void display_init(void *data) check_seed_status(); /* In smd test, TSP should be turned off if display panel is not existed. */ - if (backlight_ops.get_lcd_power() == -ENOENT) { + if (backlight_ops->get_lcd_power() == -ENOENT) { _I("Display panel is not existed."); lcd_direct_control(DPMS_OFF, NORMAL_MODE); exit_lcd_operation(); @@ -2453,10 +2454,10 @@ static int display_start(enum device_flags flags) if (flags & NORMAL_MODE) { if (flags & LCD_PANEL_OFF_MODE) /* standby on */ - backlight_ops.standby(true); + backlight_ops->standby(true); else /* normal lcd on */ - backlight_ops.on(flags); + backlight_ops->on(flags); FIND_DISPLAY(enhance_ops, "enhance"); if (enhance_ops && enhance_ops->func) enhance_ops->func(RESTORE_ENHANCE_OUTDOOR, &on); @@ -2482,7 +2483,7 @@ static int display_stop(enum device_flags flags) { /* NORMAL MODE */ if (flags & NORMAL_MODE || flags & FORCE_OFF_MODE) { - backlight_ops.off(flags); + backlight_ops->off(flags); return 0; } @@ -2522,6 +2523,10 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } /** * @} diff --git a/plugins/mobile/display/device-interface.c b/plugins/mobile/display/device-interface.c index 8d53e2ef..054e181c 100644 --- a/plugins/mobile/display/device-interface.c +++ b/plugins/mobile/display/device-interface.c @@ -43,6 +43,7 @@ #include "device-node.h" #include "display/display-dpms.h" #include "display/display.h" +#include "display/display-lock.h" #include "power/boot.h" #include "power/power-control.h" @@ -66,8 +67,7 @@ #define PALM_STR "palm" #define UNKNOWN_STR "unknown" -struct _backlight_ops backlight_ops; - +static struct _backlight_ops backlight_ops; static bool custom_status; static int custom_brightness; static int force_brightness; @@ -76,6 +76,11 @@ static int dpms_running_state = DPMS_SETTING_DONE; static struct display_device *display_dev; static guint release_timer; +inline struct _backlight_ops *get_backlight_ops(void) +{ + return &backlight_ops; +} + struct display_device *display_dev_get(void) { return display_dev; @@ -721,36 +726,35 @@ static void restore_brightness_func(void) backlight_ops.transit_brt = change_brightness; } -static void _init_ops(void) -{ - backlight_ops.off = backlight_off; - backlight_ops.dim = backlight_dim; - backlight_ops.on = backlight_on; - backlight_ops.update = backlight_update; - backlight_ops.standby = backlight_standby; - backlight_ops.set_default_brt = set_default_brt; - backlight_ops.get_default_brt = get_default_brt; - backlight_ops.get_lcd_power = get_lcd_power; - backlight_ops.set_custom_status = set_custom_status; - backlight_ops.get_custom_status = get_custom_status; - backlight_ops.save_custom_brightness = save_custom_brightness; - backlight_ops.custom_update = custom_backlight_update; - backlight_ops.set_force_brightness = set_force_brightness; - backlight_ops.set_brightness = set_brightness; - backlight_ops.get_brightness = get_brightness; - backlight_ops.restore_brightness_func = restore_brightness_func; - backlight_ops.get_brightness_by_light_sensor = get_brightness_by_light_sensor; - backlight_ops.get_image_effect = get_image_effect; - backlight_ops.set_image_effect = set_image_effect; - backlight_ops.get_panel_mode = get_panel_mode; - backlight_ops.set_panel_mode = set_panel_mode; - backlight_ops.get_frame_rate = get_frame_rate; - backlight_ops.set_frame_rate = set_frame_rate; - backlight_ops.transit_state = backlight_transit_state; - backlight_ops.transit_brt = change_brightness; - backlight_ops.blink = blink; - backlight_ops.release_blink = release_blink; -} +static struct _backlight_ops backlight_ops = { + .off = backlight_off, + .dim = backlight_dim, + .on = backlight_on, + .update = backlight_update, + .standby = backlight_standby, + .set_default_brt = set_default_brt, + .get_default_brt = get_default_brt, + .get_lcd_power = get_lcd_power, + .set_custom_status = set_custom_status, + .get_custom_status = get_custom_status, + .save_custom_brightness = save_custom_brightness, + .custom_update = custom_backlight_update, + .set_force_brightness = set_force_brightness, + .set_brightness = set_brightness, + .get_brightness = get_brightness, + .restore_brightness_func = restore_brightness_func, + .get_brightness_by_light_sensor = get_brightness_by_light_sensor, + .get_image_effect = get_image_effect, + .set_image_effect = set_image_effect, + .get_panel_mode = get_panel_mode, + .set_panel_mode = set_panel_mode, + .get_frame_rate = get_frame_rate, + .set_frame_rate = set_frame_rate, + .transit_state = backlight_transit_state, + .transit_brt = change_brightness, + .blink = blink, + .release_blink = release_blink, +}; int display_service_load(void) { @@ -822,8 +826,6 @@ int is_lcdon_blocked(void) int init_sysfs(unsigned int flags) { - _init_ops(); - register_notifier(DEVICE_NOTIFIER_VITAL_STATE, vital_state_changed); register_notifier(DEVICE_NOTIFIER_BOOTING_DONE, booting_done); diff --git a/plugins/mobile/display/key-filter.c b/plugins/mobile/display/key-filter.c index bd939ff6..b5fdf710 100644 --- a/plugins/mobile/display/key-filter.c +++ b/plugins/mobile/display/key-filter.c @@ -91,6 +91,7 @@ enum combination_process { }; static struct display_plugin *disp_plgn; +static struct _backlight_ops *backlight_ops; static struct timeval pressed_time; static guint longkey_timeout_id = 0; static guint longkey_restore_id = 0; @@ -113,8 +114,8 @@ static inline int current_state_in_on(void) static inline void restore_custom_brightness(void) { if ((get_pm_cur_state() == S_LCDDIM) && - backlight_ops.get_custom_status()) - backlight_ops.custom_update(); + backlight_ops->get_custom_status()) + backlight_ops->custom_update(); } static void longkey_pressed(void) @@ -197,7 +198,7 @@ static inline bool switch_on_lcd(enum device_flags flags) if (current_state_in_on()) return false; - if (backlight_ops.get_lcd_power() == DPMS_ON) { + if (backlight_ops->get_lcd_power() == DPMS_ON) { if (ambient_get_state() == false) return false; } @@ -217,7 +218,7 @@ static inline void switch_off_lcd(void) if (!current_state_in_on()) return; - if (backlight_ops.get_lcd_power() == DPMS_OFF) + if (backlight_ops->get_lcd_power() == DPMS_OFF) return; broadcast_lcdoff_by_powerkey(); @@ -344,7 +345,7 @@ static int decide_lcdoff(void) { /* It's not needed if it's already LCD off state */ if (!current_state_in_on() && - backlight_ops.get_lcd_power() != DPMS_ON) + backlight_ops->get_lcd_power() != DPMS_ON) return false; /* @@ -407,7 +408,7 @@ static bool key_check_display_on(void) if (current_state_in_on()) return false; - if (backlight_ops.get_lcd_power() == DPMS_ON) { + if (backlight_ops->get_lcd_power() == DPMS_ON) { _W("display power was on"); return false; } @@ -421,7 +422,7 @@ static gboolean display_on_cb(void *data) return G_SOURCE_REMOVE; displayon_by_powerkey_timeout_id = 0; - if (backlight_ops.get_lcd_power() != DPMS_ON || + if (backlight_ops->get_lcd_power() != DPMS_ON || current_state_in_on() == false) { broadcast_lcdon_by_powerkey(); lcd_on_direct(LCD_ON_BY_POWER_KEY); @@ -490,7 +491,7 @@ static int process_power_key(struct input_event *pinput) ignore = true; if (!displayon_by_powerkey_timeout_id && - backlight_ops.get_lcd_power() != DPMS_ON && + backlight_ops->get_lcd_power() != DPMS_ON && key_combination != COMBINATION_TORCH) { displayon_by_powerkey_timeout_id = g_timeout_add( 100, @@ -824,4 +825,8 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } diff --git a/plugins/tv/display/core.c b/plugins/tv/display/core.c index f997dd14..fbf58d06 100644 --- a/plugins/tv/display/core.c +++ b/plugins/tv/display/core.c @@ -94,6 +94,7 @@ extern int get_charging_status(int *val); extern void init_save_userlock(void); static struct display_plugin *disp_plgn; +static struct _backlight_ops *backlight_ops; static void (*power_saving_func) (int onoff); static enum device_ops_status status = DEVICE_OPS_STATUS_UNINIT; @@ -319,7 +320,7 @@ static gboolean late_transit_on(void *data) g_source_remove(transit_timer); transit_timer = 0; - backlight_ops.transit_state(DPMS_ON); + backlight_ops->transit_state(DPMS_ON); return G_SOURCE_REMOVE; } @@ -346,7 +347,7 @@ void lcd_on_procedure(int state, enum device_flags flag) _I("[lcdstep] 0x%lx", flags); if (flags & AMBIENT_MODE) { - if (ambient_get_state() == false && backlight_ops.get_lcd_power() == DPMS_ON) + if (ambient_get_state() == false && backlight_ops->get_lcd_power() == DPMS_ON) return; ambient_set_state(false); } @@ -358,9 +359,9 @@ void lcd_on_procedure(int state, enum device_flags flag) if (!(flags & LCD_PHASED_TRANSIT_MODE)) { /* Update brightness level */ if (state == LCD_DIM) - backlight_ops.dim(); + backlight_ops->dim(); else if (state == LCD_NORMAL) - backlight_ops.update(); + backlight_ops->update(); } if (state == LCD_NORMAL) @@ -445,7 +446,7 @@ inline void lcd_off_procedure(enum device_flags flag) } if (flags & LCD_PHASED_TRANSIT_MODE) - backlight_ops.transit_state(DPMS_OFF); + backlight_ops->transit_state(DPMS_OFF); DD_LIST_FOREACH(lcdon_ops, l, ops) ops->stop(flags); @@ -717,7 +718,7 @@ void lcd_on_direct(enum device_flags flags) static inline bool check_lcd_is_on(void) { - if (backlight_ops.get_lcd_power() != DPMS_ON) + if (backlight_ops->get_lcd_power() != DPMS_ON) return false; return true; @@ -790,7 +791,7 @@ int custom_lcdoff(enum device_flags flag) } _I("custom lcd off by flag(%d)", flag); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(flag); if (set_custom_lcdon_timeout(0) == true) @@ -878,7 +879,7 @@ int display_off_by_reason(const char *reason) } _I("platform lcd off by %s", reason); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(flag); /* state transition */ @@ -928,7 +929,7 @@ static int default_proc_change_state(unsigned int cond, pid_t pid) default_proc_change_state_action(next, -1); break; case S_LCDOFF: - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(LCD_OFF_BY_EVENT); if (set_custom_lcdon_timeout(0)) update_display_time(); @@ -1541,7 +1542,7 @@ static int default_action(int timeout) if ((get_pm_old_state() == S_LCDOFF) || (get_pm_old_state() == S_SLEEP)) check_lock_screen(); else if (get_pm_old_state() == S_LCDDIM) - backlight_ops.update(); + backlight_ops->update(); if (check_lcd_is_on() == false) lcd_on_procedure(LCD_NORMAL, NORMAL_MODE); @@ -1549,10 +1550,10 @@ static int default_action(int timeout) case S_LCDDIM: if ((get_pm_old_state() == S_NORMAL) && - backlight_ops.get_custom_status()) - backlight_ops.save_custom_brightness(); + backlight_ops->get_custom_status()) + backlight_ops->save_custom_brightness(); /* lcd dim state : dim the brightness */ - backlight_ops.dim(); + backlight_ops->dim(); if ((get_pm_old_state() == S_LCDOFF) || (get_pm_old_state() == S_SLEEP)) lcd_on_procedure(LCD_DIM, NORMAL_MODE); @@ -1562,11 +1563,11 @@ static int default_action(int timeout) if ((get_pm_old_state() != S_SLEEP) && (get_pm_old_state() != S_LCDOFF)) { stop_lock_timer(); /* lcd off state : turn off the backlight */ - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(LCD_OFF_BY_TIMEOUT); } - if (backlight_ops.get_lcd_power() == DPMS_ON + if (backlight_ops->get_lcd_power() == DPMS_ON || lcd_paneloff_mode) lcd_off_procedure(LCD_OFF_BY_TIMEOUT); break; @@ -1575,7 +1576,7 @@ static int default_action(int timeout) if ((get_pm_old_state() != S_SLEEP) && (get_pm_old_state() != S_LCDOFF)) stop_lock_timer(); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(LCD_OFF_BY_TIMEOUT); if (!pm_get_power_lock_support()) { @@ -1677,7 +1678,7 @@ static void default_saving_mode(int onoff) clear_pm_status_flag(PWRSV_FLAG); if (get_pm_cur_state() == S_NORMAL) - backlight_ops.update(); + backlight_ops->update(); } static int poll_callback(int condition, PMMsg *data) @@ -1775,7 +1776,7 @@ static int update_setting(int key_idx, int val) _I("Brightness changed in low battery," "escape dim state."); } - backlight_ops.set_default_brt(val); + backlight_ops->set_default_brt(val); break; case SETTING_LOCK_SCREEN: set_lock_screen_state(val); @@ -1787,7 +1788,7 @@ static int update_setting(int key_idx, int val) /* LCD on if lock screen show before waiting time */ if ((get_pm_cur_state() == S_NORMAL) && val == VCONFKEY_IDLE_LOCK && - backlight_ops.get_lcd_power() != DPMS_ON && + backlight_ops->get_lcd_power() != DPMS_ON && is_lcdon_blocked() == LCDON_BLOCK_NONE) lcd_on_procedure(LCD_NORMAL, LCD_ON_BY_EVENT); stop_lock_timer(); @@ -1814,9 +1815,9 @@ static int update_setting(int key_idx, int val) break; case SETTING_POWER_CUSTOM_BRIGHTNESS: if (val == VCONFKEY_PM_CUSTOM_BRIGHTNESS_ON) - backlight_ops.set_custom_status(true); + backlight_ops->set_custom_status(true); else - backlight_ops.set_custom_status(false); + backlight_ops->set_custom_status(false); break; default: @@ -1849,8 +1850,8 @@ static void check_seed_status(void) tmp = brt; } _I("Set brightness(%d) from setting app.", tmp); - backlight_ops.set_default_brt(tmp); - backlight_ops.set_brightness(tmp); + backlight_ops->set_default_brt(tmp); + backlight_ops->set_brightness(tmp); ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state); if (ret < 0) { @@ -2063,8 +2064,8 @@ static int battery_health_changed(void *data) set_pm_status_flag(DIMSTAY_FLAG); } - if (backlight_ops.get_lcd_power() == DPMS_ON) - backlight_ops.update(); + if (backlight_ops->get_lcd_power() == DPMS_ON) + backlight_ops->update(); return 0; } @@ -2226,8 +2227,8 @@ static void esd_action(void) if (!check_default(touchscreen_ops)) touchscreen_ops->stop(NORMAL_MODE); - backlight_ops.off(NORMAL_MODE); - backlight_ops.on(NORMAL_MODE); + backlight_ops->off(NORMAL_MODE); + backlight_ops->on(NORMAL_MODE); if (!check_default(touchscreen_ops)) touchscreen_ops->start(NORMAL_MODE); } @@ -2320,7 +2321,7 @@ static void display_init(void *data) check_seed_status(); /* In smd test, TSP should be turned off if display panel is not existed. */ - if (backlight_ops.get_lcd_power() == -ENOENT) { + if (backlight_ops->get_lcd_power() == -ENOENT) { _I("Display panel is not existed."); lcd_direct_control(DPMS_OFF, NORMAL_MODE); exit_lcd_operation(); @@ -2441,10 +2442,10 @@ static int display_start(enum device_flags flags) if (flags & NORMAL_MODE) { if (flags & LCD_PANEL_OFF_MODE) /* standby on */ - backlight_ops.standby(true); + backlight_ops->standby(true); else /* normal lcd on */ - backlight_ops.on(flags); + backlight_ops->on(flags); return 0; } @@ -2468,7 +2469,7 @@ static int display_stop(enum device_flags flags) { /* NORMAL MODE */ if (flags & NORMAL_MODE || flags & FORCE_OFF_MODE) { - backlight_ops.off(flags); + backlight_ops->off(flags); return 0; } @@ -2508,6 +2509,10 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } /** * @} diff --git a/plugins/tv/display/device-interface.c b/plugins/tv/display/device-interface.c index ebaf5693..28c4075e 100644 --- a/plugins/tv/display/device-interface.c +++ b/plugins/tv/display/device-interface.c @@ -44,6 +44,7 @@ #include "display/display-dpms.h" #include "display/display.h" #include "power/power-control.h" +#include "display/display-lock.h" #define TOUCH_ON 1 #define TOUCH_OFF 0 @@ -67,8 +68,7 @@ #define FREEZER_VITAL_WAKEUP_CGROUP "/sys/fs/cgroup/freezer/vital_wakeup/freezer.state" -struct _backlight_ops backlight_ops; - +static struct _backlight_ops backlight_ops; static bool custom_status; static int custom_brightness; static int force_brightness; @@ -77,6 +77,11 @@ static int dpms_running_state = DPMS_SETTING_DONE; static struct display_device *display_dev; static guint release_timer; +inline struct _backlight_ops *get_backlight_ops(void) +{ + return &backlight_ops; +} + struct display_device *display_dev_get(void) { return display_dev; @@ -722,36 +727,35 @@ static void restore_brightness_func(void) backlight_ops.transit_brt = change_brightness; } -static void _init_ops(void) -{ - backlight_ops.off = backlight_off; - backlight_ops.dim = backlight_dim; - backlight_ops.on = backlight_on; - backlight_ops.update = backlight_update; - backlight_ops.standby = backlight_standby; - backlight_ops.set_default_brt = set_default_brt; - backlight_ops.get_default_brt = get_default_brt; - backlight_ops.get_lcd_power = get_lcd_power; - backlight_ops.set_custom_status = set_custom_status; - backlight_ops.get_custom_status = get_custom_status; - backlight_ops.save_custom_brightness = save_custom_brightness; - backlight_ops.custom_update = custom_backlight_update; - backlight_ops.set_force_brightness = set_force_brightness; - backlight_ops.set_brightness = set_brightness; - backlight_ops.get_brightness = get_brightness; - backlight_ops.restore_brightness_func = restore_brightness_func; - backlight_ops.get_brightness_by_light_sensor = get_brightness_by_light_sensor; - backlight_ops.get_image_effect = get_image_effect; - backlight_ops.set_image_effect = set_image_effect; - backlight_ops.get_panel_mode = get_panel_mode; - backlight_ops.set_panel_mode = set_panel_mode; - backlight_ops.get_frame_rate = get_frame_rate; - backlight_ops.set_frame_rate = set_frame_rate; - backlight_ops.transit_state = backlight_transit_state; - backlight_ops.transit_brt = change_brightness; - backlight_ops.blink = blink; - backlight_ops.release_blink = release_blink; -} +static struct _backlight_ops backlight_ops = { + .off = backlight_off, + .dim = backlight_dim, + .on = backlight_on, + .update = backlight_update, + .standby = backlight_standby, + .set_default_brt = set_default_brt, + .get_default_brt = get_default_brt, + .get_lcd_power = get_lcd_power, + .set_custom_status = set_custom_status, + .get_custom_status = get_custom_status, + .save_custom_brightness = save_custom_brightness, + .custom_update = custom_backlight_update, + .set_force_brightness = set_force_brightness, + .set_brightness = set_brightness, + .get_brightness = get_brightness, + .restore_brightness_func = restore_brightness_func, + .get_brightness_by_light_sensor = get_brightness_by_light_sensor, + .get_image_effect = get_image_effect, + .set_image_effect = set_image_effect, + .get_panel_mode = get_panel_mode, + .set_panel_mode = set_panel_mode, + .get_frame_rate = get_frame_rate, + .set_frame_rate = set_frame_rate, + .transit_state = backlight_transit_state, + .transit_brt = change_brightness, + .blink = blink, + .release_blink = release_blink, +}; int display_service_load(void) { @@ -809,8 +813,6 @@ int is_lcdon_blocked(void) int init_sysfs(unsigned int flags) { - _init_ops(); - register_notifier(DEVICE_NOTIFIER_VITAL_STATE, vital_state_changed); return 0; diff --git a/plugins/tv/display/key-filter.c b/plugins/tv/display/key-filter.c index 3874dbaf..7abfd2fa 100644 --- a/plugins/tv/display/key-filter.c +++ b/plugins/tv/display/key-filter.c @@ -91,6 +91,7 @@ enum combination_process { }; static struct display_plugin *disp_plgn; +static struct _backlight_ops *backlight_ops; static struct timeval pressed_time; static guint longkey_timeout_id = 0; static guint longkey_restore_id = 0; @@ -113,8 +114,8 @@ static inline int current_state_in_on(void) static inline void restore_custom_brightness(void) { if ((get_pm_cur_state() == S_LCDDIM) && - backlight_ops.get_custom_status()) - backlight_ops.custom_update(); + backlight_ops->get_custom_status()) + backlight_ops->custom_update(); } static void pwroff_popup(void) @@ -208,7 +209,7 @@ static inline bool switch_on_lcd(enum device_flags flags) if (current_state_in_on()) return false; - if (backlight_ops.get_lcd_power() == DPMS_ON) { + if (backlight_ops->get_lcd_power() == DPMS_ON) { if (ambient_get_state() == false) return false; } @@ -228,7 +229,7 @@ static inline void switch_off_lcd(void) if (!current_state_in_on()) return; - if (backlight_ops.get_lcd_power() == DPMS_OFF) + if (backlight_ops->get_lcd_power() == DPMS_OFF) return; broadcast_lcdoff_by_powerkey(); @@ -355,7 +356,7 @@ static int decide_lcdoff(void) { /* It's not needed if it's already LCD off state */ if (!current_state_in_on() && - backlight_ops.get_lcd_power() != DPMS_ON) + backlight_ops->get_lcd_power() != DPMS_ON) return false; /* @@ -791,4 +792,8 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } diff --git a/plugins/tv/display/state-tv.c b/plugins/tv/display/state-tv.c index f8f1df13..0a86fde4 100644 --- a/plugins/tv/display/state-tv.c +++ b/plugins/tv/display/state-tv.c @@ -43,6 +43,7 @@ #define SIGNAL_EARLY_WAKEUP "EarlyWakeUp" static struct display_plugin *disp_plgn; +static struct _backlight_ops *backlight_ops; static guint standby_timer; static int change_state(pid_t pid, int type, enum state_t st) @@ -178,7 +179,7 @@ static int lcdon_action(int timeout) /* TODO: post resume */ - backlight_ops.on(0); + backlight_ops->on(0); return 0; } @@ -246,7 +247,7 @@ static int lcdoff_action(int timeout) (get_pm_old_state() == S_LCDOFF)) return 0; - backlight_ops.off(0); + backlight_ops->off(0); return 0; } @@ -313,7 +314,7 @@ static int standby_post(void *data) if (ret < 0) _E("Failed to send dbus signal(%s)", SIGNAL_CHANGE_STATE); - backlight_ops.off(0); + backlight_ops->off(0); /* Set power */ @@ -347,7 +348,7 @@ static int standby_action(int timeout) (get_pm_cur_state() != S_SLEEP)) set_setting_pmstate(get_pm_cur_state()); - backlight_ops.off(0); + backlight_ops->off(0); standby_timer = g_timeout_add_seconds(0, standby_go_next_state, NULL); @@ -574,4 +575,8 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } diff --git a/plugins/wearable/display/auto-brightness-sensorhub.c b/plugins/wearable/display/auto-brightness-sensorhub.c index 502c86f2..c2e17730 100644 --- a/plugins/wearable/display/auto-brightness-sensorhub.c +++ b/plugins/wearable/display/auto-brightness-sensorhub.c @@ -37,12 +37,13 @@ #define LOWBATCAPACITY 5 static struct display_plugin *disp_plgn; +static struct _backlight_ops *backlight_ops; static int auto_brightness_state = SETTING_BRIGHTNESS_AUTOMATIC_OFF; static bool lbm, hbm, hold_brt, lowdim; static void change_brightness_transit(int start, int end) { - backlight_ops.transit_brt(start, end, + backlight_ops->transit_brt(start, end, display_conf.brightness_change_step); } @@ -86,8 +87,8 @@ static void set_brightness_level(int level) auto_brightness_control(BR_HBM_ON, BR_IMPLICIT); break; case SPECIFIC_MODE_OFF: - default_brightness = backlight_ops.get_default_brt(); - backlight_ops.get_brightness(¤t_brightness); + default_brightness = backlight_ops->get_default_brt(); + backlight_ops->get_brightness(¤t_brightness); /* Disable HBM, LBM */ auto_brightness_control(BR_HBM_OFF, BR_IMPLICIT); @@ -118,9 +119,9 @@ static void set_default_brightness(void) { int default_brt; - default_brt = backlight_ops.get_default_brt(); - backlight_ops.set_default_brt(default_brt); - backlight_ops.update(); + default_brt = backlight_ops->get_default_brt(); + backlight_ops->set_default_brt(default_brt); + backlight_ops->update(); } static void set_automatic_state_cb(keynode_t *key_nodes, void *data) @@ -179,8 +180,8 @@ int auto_brightness_control(enum brightness_request_e request, int set_brightnes int current_brightness; int ret; - default_brightness = backlight_ops.get_default_brt(); - backlight_ops.get_brightness(¤t_brightness); + default_brightness = backlight_ops->get_default_brt(); + backlight_ops->get_brightness(¤t_brightness); if (request == BR_LBM_ON) { if (!get_lbm_setting()) @@ -188,12 +189,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); + backlight_ops->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); + backlight_ops->set_brightness(current_brightness); change_flag(&lbm, 1); } else if (!lbm && !hbm && hold_brt) { change_flag(&lbm, 1); @@ -219,13 +220,13 @@ 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); + backlight_ops->set_brightness(set_brightness); } change_flag(&hold_brt, 1); } else if (request == BR_LOWDIM_ON) { if (!lowdim) { if (!hbm && !hold_brt && (get_pm_cur_state() == S_NORMAL)) - backlight_ops.dim(); + backlight_ops->dim(); change_flag(&lowdim, 1); } } else if (request == BR_LBM_OFF) { @@ -239,9 +240,9 @@ 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); + backlight_ops->set_brightness(default_brightness); } else { - backlight_ops.dim(); + backlight_ops->dim(); } } else if (lbm && hold_brt) { change_flag(&lbm, 0); @@ -264,25 +265,25 @@ int auto_brightness_control(enum brightness_request_e request, int set_brightnes return 0; if (!lowdim) - backlight_ops.set_brightness(default_brightness); + backlight_ops->set_brightness(default_brightness); else - backlight_ops.dim(); + backlight_ops->dim(); } else if (lbm && hold_brt) { change_flag(&hold_brt, 0); if (!lowdim) { change_brightness_transit(current_brightness, lbm_down_brt(default_brightness)); lbm_set_state(true); - backlight_ops.set_brightness(default_brightness); + backlight_ops->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); + backlight_ops->set_brightness(PM_DIM_BRIGHTNESS); } } } else if (request == BR_LOWDIM_OFF) { if (lowdim) { if (!hbm && !hold_brt && (get_pm_cur_state() == S_NORMAL)) - backlight_ops.update(); + backlight_ops->update(); change_flag(&lowdim, 0); } } else if (request == BR_SET_BRIGHTNESS) { @@ -290,9 +291,9 @@ int auto_brightness_control(enum brightness_request_e request, int set_brightnes lbm_set_state(true); change_flag(&lowdim, 0); change_flag(&hold_brt, 0); - backlight_ops.set_default_brt(set_brightness); + backlight_ops->set_default_brt(set_brightness); if (!hbm) { - ret = backlight_ops.set_brightness(set_brightness); + ret = backlight_ops->set_brightness(set_brightness); if (ret < 0) { _E("Failed to set brightness to %d.", set_brightness); return ret; @@ -332,7 +333,7 @@ int auto_brightness_restore(void) return 0; /* update to the default brightness */ - return backlight_ops.update(); + return backlight_ops->update(); } int prepare_level_handler(void) @@ -371,4 +372,8 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } diff --git a/plugins/wearable/display/core.c b/plugins/wearable/display/core.c index 60d1db2d..ab576e48 100644 --- a/plugins/wearable/display/core.c +++ b/plugins/wearable/display/core.c @@ -101,6 +101,7 @@ extern int get_charging_status(int *val); extern void init_save_userlock(void); static struct display_plugin *disp_plgn; +static struct _backlight_ops *backlight_ops; static void (*power_saving_func) (int onoff); static enum device_ops_status status = DEVICE_OPS_STATUS_UNINIT; @@ -336,7 +337,7 @@ static gboolean late_transit_on(void *data) g_source_remove(transit_timer); transit_timer = 0; - backlight_ops.transit_state(DPMS_ON); + backlight_ops->transit_state(DPMS_ON); return G_SOURCE_REMOVE; } @@ -372,7 +373,7 @@ void lcd_on_procedure(int state, enum device_flags flag) _I("[lcdstep] 0x%lx", flags); if (flags & AMBIENT_MODE) { - if (ambient_get_state() == false && backlight_ops.get_lcd_power() == DPMS_ON) + if (ambient_get_state() == false && backlight_ops->get_lcd_power() == DPMS_ON) return; ambient_set_state(false); } @@ -384,9 +385,9 @@ void lcd_on_procedure(int state, enum device_flags flag) if (!(flags & LCD_PHASED_TRANSIT_MODE)) { /* Update brightness level */ if (state == LCD_DIM) - backlight_ops.dim(); + backlight_ops->dim(); else if (state == LCD_NORMAL) - backlight_ops.update(); + backlight_ops->update(); } if (state == LCD_NORMAL) @@ -471,7 +472,7 @@ inline void lcd_off_procedure(enum device_flags flag) } if (flags & LCD_PHASED_TRANSIT_MODE) - backlight_ops.transit_state(DPMS_OFF); + backlight_ops->transit_state(DPMS_OFF); DD_LIST_FOREACH(lcdon_ops, l, ops) ops->stop(flags); @@ -751,7 +752,7 @@ void lcd_on_direct(enum device_flags flags) static inline bool check_lcd_is_on(void) { - if (backlight_ops.get_lcd_power() != DPMS_ON) + if (backlight_ops->get_lcd_power() != DPMS_ON) return false; return true; @@ -852,7 +853,7 @@ int custom_lcdoff(enum device_flags flag) } _I("custom lcd off by flag(%d)", flag); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(flag); if (set_custom_lcdon_timeout(0) == true) @@ -945,7 +946,7 @@ int display_off_by_reason(const char *reason) } _I("platform lcd off by %s", reason); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(flag); /* state transition */ @@ -995,7 +996,7 @@ static int default_proc_change_state(unsigned int cond, pid_t pid) default_proc_change_state_action(next, -1); break; case S_LCDOFF: - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(LCD_OFF_BY_EVENT); if (set_custom_lcdon_timeout(0)) update_display_time(); @@ -1628,7 +1629,7 @@ static int default_action(int timeout) if ((get_pm_old_state() == S_LCDOFF) || (get_pm_old_state() == S_SLEEP)) check_lock_screen(); else if (get_pm_old_state() == S_LCDDIM) - backlight_ops.update(); + backlight_ops->update(); if (check_lcd_is_on() == false) lcd_on_procedure(LCD_NORMAL, NORMAL_MODE); @@ -1636,10 +1637,10 @@ static int default_action(int timeout) case S_LCDDIM: if ((get_pm_old_state() == S_NORMAL) && - backlight_ops.get_custom_status()) - backlight_ops.save_custom_brightness(); + backlight_ops->get_custom_status()) + backlight_ops->save_custom_brightness(); /* lcd dim state : dim the brightness */ - backlight_ops.dim(); + backlight_ops->dim(); if ((get_pm_old_state() == S_LCDOFF) || (get_pm_old_state() == S_SLEEP)) lcd_on_procedure(LCD_DIM, NORMAL_MODE); @@ -1649,11 +1650,11 @@ static int default_action(int timeout) if ((get_pm_old_state() != S_SLEEP) && (get_pm_old_state() != S_LCDOFF)) { stop_lock_timer(); /* lcd off state : turn off the backlight */ - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(LCD_OFF_BY_TIMEOUT); } - if (backlight_ops.get_lcd_power() == DPMS_ON + if (backlight_ops->get_lcd_power() == DPMS_ON || lcd_paneloff_mode) lcd_off_procedure(LCD_OFF_BY_TIMEOUT); break; @@ -1662,7 +1663,7 @@ static int default_action(int timeout) if ((get_pm_old_state() != S_SLEEP) && (get_pm_old_state() != S_LCDOFF)) stop_lock_timer(); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) lcd_off_procedure(LCD_OFF_BY_TIMEOUT); if (!pm_get_power_lock_support()) { @@ -1862,7 +1863,7 @@ static int update_setting(int key_idx, int val) _I("Brightness changed in low battery," "escape dim state."); } - backlight_ops.set_default_brt(val); + backlight_ops->set_default_brt(val); break; case SETTING_LOCK_SCREEN: set_lock_screen_state(val); @@ -1874,7 +1875,7 @@ static int update_setting(int key_idx, int val) /* LCD on if lock screen show before waiting time */ if ((get_pm_cur_state() == S_NORMAL) && val == VCONFKEY_IDLE_LOCK && - backlight_ops.get_lcd_power() != DPMS_ON && + backlight_ops->get_lcd_power() != DPMS_ON && is_lcdon_blocked() == LCDON_BLOCK_NONE) lcd_on_procedure(LCD_NORMAL, LCD_ON_BY_EVENT); stop_lock_timer(); @@ -1901,9 +1902,9 @@ static int update_setting(int key_idx, int val) break; case SETTING_POWER_CUSTOM_BRIGHTNESS: if (val == VCONFKEY_PM_CUSTOM_BRIGHTNESS_ON) - backlight_ops.set_custom_status(true); + backlight_ops->set_custom_status(true); else - backlight_ops.set_custom_status(false); + backlight_ops->set_custom_status(false); break; default: @@ -1936,8 +1937,8 @@ static void check_seed_status(void) tmp = brt; } _I("Set brightness(%d) from setting app.", tmp); - backlight_ops.set_default_brt(tmp); - backlight_ops.set_brightness(tmp); + backlight_ops->set_default_brt(tmp); + backlight_ops->set_brightness(tmp); ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state); if (ret < 0) { @@ -2149,13 +2150,13 @@ static int battery_health_changed(void *data) if (health == HEALTH_GOOD) { clear_pm_status_flag(BATTERY_FLAG); clear_pm_status_flag(DIMSTAY_FLAG); - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) auto_brightness_restore(); } else if (health == HEALTH_LOW || health == HEALTH_HIGH || health == HEALTH_OVP) { set_pm_status_flag(BATTERY_FLAG); set_pm_status_flag(DIMSTAY_FLAG); - if (backlight_ops.get_lcd_power() == DPMS_ON) - backlight_ops.update(); + if (backlight_ops->get_lcd_power() == DPMS_ON) + backlight_ops->update(); } return 0; @@ -2317,8 +2318,8 @@ static void esd_action(void) if (!check_default(touchscreen_ops)) touchscreen_ops->stop(NORMAL_MODE); - backlight_ops.off(NORMAL_MODE); - backlight_ops.on(NORMAL_MODE); + backlight_ops->off(NORMAL_MODE); + backlight_ops->on(NORMAL_MODE); if (!check_default(touchscreen_ops)) touchscreen_ops->start(NORMAL_MODE); } @@ -2443,7 +2444,7 @@ static void display_init(void *data) check_seed_status(); /* In smd test, TSP should be turned off if display panel is not existed. */ - if (backlight_ops.get_lcd_power() == -ENOENT) { + if (backlight_ops->get_lcd_power() == -ENOENT) { _I("Display panel is not existed."); lcd_direct_control(DPMS_OFF, NORMAL_MODE); exit_lcd_operation(); @@ -2567,10 +2568,10 @@ static int display_start(enum device_flags flags) if (flags & NORMAL_MODE) { if (flags & LCD_PANEL_OFF_MODE) /* standby on */ - backlight_ops.standby(true); + backlight_ops->standby(true); else /* normal lcd on */ - backlight_ops.on(flags); + backlight_ops->on(flags); FIND_DISPLAY(enhance_ops, "enhance"); if (enhance_ops && enhance_ops->func) enhance_ops->func(RESTORE_ENHANCE_OUTDOOR, &on); @@ -2596,7 +2597,7 @@ static int display_stop(enum device_flags flags) { /* NORMAL MODE */ if (flags & NORMAL_MODE || flags & FORCE_OFF_MODE) { - backlight_ops.off(flags); + backlight_ops->off(flags); return 0; } @@ -2636,7 +2637,12 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } + /** * @} */ diff --git a/plugins/wearable/display/device-interface.c b/plugins/wearable/display/device-interface.c index 224ba653..c26937e7 100644 --- a/plugins/wearable/display/device-interface.c +++ b/plugins/wearable/display/device-interface.c @@ -43,6 +43,7 @@ #include "device-node.h" #include "display/display-dpms.h" #include "display/display.h" +#include "display/display-lock.h" #include "battery-monitor.h" #include "battery/power-supply.h" #include "power/power-control.h" @@ -70,8 +71,8 @@ #define FREEZER_VITAL_WAKEUP_CGROUP "/sys/fs/cgroup/freezer/vital_wakeup/freezer.state" -struct _backlight_ops backlight_ops; +static struct _backlight_ops backlight_ops; static bool custom_status; static int custom_brightness; static int force_brightness; @@ -84,6 +85,11 @@ static int aod_normal_level = -1; static int aod_min_level = -1; static int aod_charging_level = -1; +inline struct _backlight_ops *get_backlight_ops(void) +{ + return &backlight_ops; +} + struct display_device *display_dev_get(void) { return display_dev; @@ -782,39 +788,37 @@ static void restore_brightness_func(void) backlight_ops.transit_brt = change_brightness; } -static void _init_ops(void) -{ - backlight_ops.off = backlight_off; - backlight_ops.dim = backlight_dim; - backlight_ops.on = backlight_on; - backlight_ops.update = backlight_update; - backlight_ops.standby = backlight_standby; - backlight_ops.set_default_brt = set_default_brt; - backlight_ops.get_default_brt = get_default_brt; - backlight_ops.get_lcd_power = get_lcd_power; - backlight_ops.set_custom_status = set_custom_status; - backlight_ops.get_custom_status = get_custom_status; - backlight_ops.save_custom_brightness = save_custom_brightness; - backlight_ops.custom_update = custom_backlight_update; - backlight_ops.set_force_brightness = set_force_brightness; - backlight_ops.set_brightness = set_brightness; - backlight_ops.get_brightness = get_brightness; - backlight_ops.restore_brightness_func = restore_brightness_func; - backlight_ops.get_brightness_by_light_sensor = get_brightness_by_light_sensor; - backlight_ops.get_image_effect = get_image_effect; - backlight_ops.set_image_effect = set_image_effect; - backlight_ops.get_panel_mode = get_panel_mode; - backlight_ops.set_panel_mode = set_panel_mode; - backlight_ops.get_frame_rate = get_frame_rate; - backlight_ops.set_frame_rate = set_frame_rate; - backlight_ops.transit_state = backlight_transit_state; - backlight_ops.transit_brt = change_brightness; - backlight_ops.blink = blink; - backlight_ops.release_blink = release_blink; - +static struct _backlight_ops backlight_ops = { + .off = backlight_off, + .dim = backlight_dim, + .on = backlight_on, + .update = backlight_update, + .standby = backlight_standby, + .set_default_brt = set_default_brt, + .get_default_brt = get_default_brt, + .get_lcd_power = get_lcd_power, + .set_custom_status = set_custom_status, + .get_custom_status = get_custom_status, + .save_custom_brightness = save_custom_brightness, + .custom_update = custom_backlight_update, + .set_force_brightness = set_force_brightness, + .set_brightness = set_brightness, + .get_brightness = get_brightness, + .restore_brightness_func = restore_brightness_func, + .get_brightness_by_light_sensor = get_brightness_by_light_sensor, + .get_image_effect = get_image_effect, + .set_image_effect = set_image_effect, + .get_panel_mode = get_panel_mode, + .set_panel_mode = set_panel_mode, + .get_frame_rate = get_frame_rate, + .set_frame_rate = set_frame_rate, + .transit_state = backlight_transit_state, + .transit_brt = change_brightness, + .blink = blink, + .release_blink = release_blink, /* auto-test only function */ - backlight_ops.get_brightness_raw = get_brightness; /* always fetch brightness from node even LBM mode */ -} + .get_brightness_raw = get_brightness, /* always fetch brightness from node even LBM mode */ +}; int display_service_load(void) { @@ -882,8 +886,6 @@ int is_lcdon_blocked(void) int init_sysfs(unsigned int flags) { - _init_ops(); - register_notifier(DEVICE_NOTIFIER_VITAL_STATE, vital_state_changed); return 0; diff --git a/plugins/wearable/display/display-handler.c b/plugins/wearable/display/display-handler.c index ddb25cdc..1c2f778d 100644 --- a/plugins/wearable/display/display-handler.c +++ b/plugins/wearable/display/display-handler.c @@ -43,6 +43,7 @@ enum charging_lcd_state { CHARGING_LCD_ON = 1, }; +static struct _backlight_ops *backlight_ops; static guint autobrt_timer; static int autobrtlevel; @@ -55,10 +56,10 @@ static gboolean lcdon_from_aod_cb(gpointer data) autobrt_timer = 0; /* If it is still not turned on, do not apply auto brightness */ - if (backlight_ops.get_lcd_power() != DPMS_ON) + if (backlight_ops->get_lcd_power() != DPMS_ON) return G_SOURCE_REMOVE; - backlight_ops.transit_state(DPMS_ON); + backlight_ops->transit_state(DPMS_ON); display_info.set_brightness_level(level); /* lcdon is completed, aod disappered */ @@ -141,7 +142,7 @@ static void aod_change_signal(GDBusConnection *conn, if (!aod_clock_displayed) return; - backlight_ops.transit_state(DPMS_ON); + backlight_ops->transit_state(DPMS_ON); if (autobrt_timer) { /* if there is reserved level, apply it */ g_source_remove(autobrt_timer); autobrt_timer = 0; @@ -220,3 +221,10 @@ static const struct display_ops display_handler_ops = { }; DISPLAY_OPS_REGISTER(&display_handler_ops) + +static void __CONSTRUCTOR__ initialize(void) +{ + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); +} diff --git a/plugins/wearable/display/enhance.c b/plugins/wearable/display/enhance.c index 1675d7b1..9fb32ea3 100644 --- a/plugins/wearable/display/enhance.c +++ b/plugins/wearable/display/enhance.c @@ -34,6 +34,7 @@ #define VCONF_HIGH_CONTRAST VCONFKEY_SETAPPL_ACCESSIBILITY_HIGH_CONTRAST #define VCONF_GREYSCALE VCONFKEY_SETAPPL_ACCESSIBILITY_GREYSCALE +static struct _backlight_ops *backlight_ops; static bool negative_status; static bool greyscale_status; static bool greysacle_setting; @@ -54,7 +55,7 @@ static int enhance_update_state(void) else state = DISPLAY_IMAGE_EFFECT_STANDARD; - backlight_ops.set_image_effect(state); + backlight_ops->set_image_effect(state); return state; } @@ -165,3 +166,10 @@ static const struct display_ops display_enhance_ops = { }; DISPLAY_OPS_REGISTER(&display_enhance_ops) + +static void __CONSTRUCTOR__ initialize(void) +{ + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); +} diff --git a/plugins/wearable/display/key-filter.c b/plugins/wearable/display/key-filter.c index b543a8ac..26ecf116 100644 --- a/plugins/wearable/display/key-filter.c +++ b/plugins/wearable/display/key-filter.c @@ -91,6 +91,7 @@ enum combination_process { }; static struct display_plugin *disp_plgn; +static struct _backlight_ops *backlight_ops; static struct timeval pressed_time; static guint longkey_timeout_id = 0; static guint longkey_restore_id = 0; @@ -113,8 +114,8 @@ static inline int current_state_in_on(void) static inline void restore_custom_brightness(void) { if ((get_pm_cur_state() == S_LCDDIM) && - backlight_ops.get_custom_status()) - backlight_ops.custom_update(); + backlight_ops->get_custom_status()) + backlight_ops->custom_update(); } static void longkey_pressed(void) @@ -205,7 +206,7 @@ static inline bool switch_on_lcd(enum device_flags flags) if (current_state_in_on()) return false; - if (backlight_ops.get_lcd_power() == DPMS_ON) { + if (backlight_ops->get_lcd_power() == DPMS_ON) { if (ambient_get_state() == false) return false; } @@ -225,7 +226,7 @@ static inline void switch_off_lcd(void) if (!current_state_in_on()) return; - if (backlight_ops.get_lcd_power() == DPMS_OFF) + if (backlight_ops->get_lcd_power() == DPMS_OFF) return; broadcast_lcdoff_by_powerkey(); @@ -352,7 +353,7 @@ static int decide_lcdoff(void) { /* It's not needed if it's already LCD off state */ if (!current_state_in_on() && - backlight_ops.get_lcd_power() != DPMS_ON) + backlight_ops->get_lcd_power() != DPMS_ON) return false; /* @@ -771,4 +772,8 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } diff --git a/plugins/wearable/display/lbm.c b/plugins/wearable/display/lbm.c index 41a5bb29..79ec7cd0 100644 --- a/plugins/wearable/display/lbm.c +++ b/plugins/wearable/display/lbm.c @@ -46,6 +46,7 @@ static struct lbm_config lbm_conf = { .aod_brightness_level = 0, }; +static struct _backlight_ops *backlight_ops; static int lbm_setting_mode; static int system_brightness; static struct display_device *display_dev; @@ -138,7 +139,7 @@ static void lbm_change_brightness(int start, int end, int step) if (display_dimstay_check()) return; - ret = backlight_ops.get_brightness(&prev); + ret = backlight_ops->get_brightness(&prev); if (ret < 0) { _E("Failed to get brightness, %d.", ret); @@ -160,7 +161,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); + backlight_ops->set_brightness(end); return; } @@ -182,7 +183,7 @@ static void lbm_change_brightness(int start, int end, int step) start = end; usleep(LCD_PHASED_DELAY); - backlight_ops.set_brightness(start); + backlight_ops->set_brightness(start); } } @@ -192,11 +193,11 @@ int lbm_set_state(int lbm) broadcast_lbm_state(lbm); if (lbm) { - backlight_ops.set_brightness = lbm_set_brightness; - backlight_ops.get_brightness = lbm_get_brightness; - backlight_ops.transit_brt = lbm_change_brightness; + backlight_ops->set_brightness = lbm_set_brightness; + backlight_ops->get_brightness = lbm_get_brightness; + backlight_ops->transit_brt = lbm_change_brightness; } else { - backlight_ops.restore_brightness_func(); + backlight_ops->restore_brightness_func(); } return 0; @@ -207,7 +208,7 @@ int lbm_get_state(void) if (!lbm_conf.support) return -ENODEV; - return backlight_ops.set_brightness == lbm_set_brightness; + return backlight_ops->set_brightness == lbm_set_brightness; } static void lbm_table_load(char *value, struct lbm_config *c) @@ -340,3 +341,10 @@ static const struct display_ops display_lbm_ops = { }; DISPLAY_OPS_REGISTER(&display_lbm_ops) + +static void __CONSTRUCTOR__ initialize(void) +{ + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); +} diff --git a/plugins/wearable/display/powersaver.c b/plugins/wearable/display/powersaver.c index 8177e49c..6c1de14b 100644 --- a/plugins/wearable/display/powersaver.c +++ b/plugins/wearable/display/powersaver.c @@ -30,6 +30,8 @@ #include "powersaver.h" #include "setting.h" +static struct _backlight_ops *backlight_ops; + static int set_powersaver_mode(int mode) { int timeout; @@ -42,7 +44,7 @@ static int set_powersaver_mode(int mode) _D("Powersaver mode %d pmqos %d.", mode, pmqos); device_notify(DEVICE_NOTIFIER_ULTRAPOWERSAVING, (void *)&pmqos); - backlight_ops.set_force_brightness(0); + backlight_ops->set_force_brightness(0); set_force_lcdtimeout(0); FIND_DISPLAY(hbm_ops, "hbm"); @@ -52,7 +54,7 @@ static int set_powersaver_mode(int mode) hbm_ops->func(HBM_SET_TIMEOUT_STATE, &hss); } - backlight_ops.update(); + backlight_ops->update(); get_run_timeout(&timeout); states[S_NORMAL].timeout = timeout; states[get_pm_cur_state()].trans(EVENT_INPUT); @@ -153,3 +155,10 @@ static const struct device_ops powersaver_device_ops = { }; DEVICE_OPS_REGISTER(&powersaver_device_ops) + +static void __CONSTRUCTOR__ initialize(void) +{ + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); +} diff --git a/plugins/wearable/display/swim.c b/plugins/wearable/display/swim.c index 36514561..0361d62a 100644 --- a/plugins/wearable/display/swim.c +++ b/plugins/wearable/display/swim.c @@ -32,6 +32,7 @@ #define DBUS_SWIMMODE_MEMBER_STATUS "status" static struct display_plugin *disp_plgn; +static struct _backlight_ops *backlight_ops; static const struct device_ops *touchscreen_ops; static int swimmode_status; @@ -90,7 +91,7 @@ static void swimmode_signal_handler(GDBusConnection *conn, _I("Request swim mode state %d by %d", val, pid); - if (backlight_ops.get_lcd_power != DPMS_ON) { + if (backlight_ops->get_lcd_power != DPMS_ON) { if (disp_plgn->pm_change_internal) disp_plgn->pm_change_internal(INTERNAL_LOCK_SWIM, S_NORMAL); lcd_state = true; @@ -144,4 +145,8 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } diff --git a/src/display/ambient-mode.c b/src/display/ambient-mode.c index fb8809b9..a0bb2bc7 100644 --- a/src/display/ambient-mode.c +++ b/src/display/ambient-mode.c @@ -45,6 +45,7 @@ #define AMBIENT_CLOCK_WAITING_TIME 5000 /* ms */ static struct display_plugin *disp_plgn; +static struct _backlight_ops *backlight_ops; static int ambient_state; static int ambient_condition; /* Setting Value */ static pid_t ambient_pid; /* Ambient Clock pid */ @@ -86,7 +87,7 @@ static void ambient_set_condition(keynode_t *key_nodes, void *data) val = vconf_keynode_get_bool(key_nodes); if (val != ambient_condition) { - if (backlight_ops.get_lcd_power() != DPMS_ON) + if (backlight_ops->get_lcd_power() != DPMS_ON) if (disp_plgn->pm_lock_internal) disp_plgn->pm_change_internal(INTERNAL_LOCK_PM, LCD_NORMAL); } @@ -138,7 +139,7 @@ void ambient_check_invalid_state(pid_t pid) if (is_emulator()) { /* In emulator, deviced does not turn off the display. */ - if (backlight_ops.get_lcd_power() == DPMS_ON) + if (backlight_ops->get_lcd_power() == DPMS_ON) return; } @@ -182,7 +183,7 @@ static void ambient_end_clock(pid_t pid) if (update_count == 0) { _D("lcd off"); - backlight_ops.off(NORMAL_MODE); + backlight_ops->off(NORMAL_MODE); broadcast_lcd_off_late(LCD_OFF_LATE_MODE); if (disp_plgn->pm_unlock_internal) disp_plgn->pm_unlock_internal(INTERNAL_LOCK_AMBIENT, LCD_OFF, PM_SLEEP_MARGIN); @@ -310,4 +311,8 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } diff --git a/src/display/auto-brightness.c b/src/display/auto-brightness.c index fd3f2df5..fe8fb164 100644 --- a/src/display/auto-brightness.c +++ b/src/display/auto-brightness.c @@ -60,6 +60,7 @@ #define ON_COUNT 1 #define OFF_COUNT 1 +static struct _backlight_ops *backlight_ops; static int (*_default_action) (int); static guint alc_timeout_id = 0; static guint update_timeout; @@ -107,7 +108,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 = backlight_ops->get_brightness(&tmp_value); if (ret < 0) { _E("Failed to get display brightness."); return; @@ -144,8 +145,8 @@ static void alc_set_brightness(int setting, int value, float light) (step < 0 && tmp_value < value)) tmp_value = value; - backlight_ops.set_default_brt(tmp_value); - backlight_ops.update(); + backlight_ops->set_default_brt(tmp_value); + backlight_ops->update(); } _I("Load light data(%f) auto brt=%d min brightness=%d " "brightness=%d", light, automatic_brt, min_brightness, value); @@ -190,7 +191,7 @@ static bool alc_update_brt(bool setting) } light = light_data.values[index]; - ret = backlight_ops.get_brightness_by_light_sensor( + ret = backlight_ops->get_brightness_by_light_sensor( lmax, lmin, light, &value); if (ret == -ENOTSUP) { _E("Not supported to handle the light data."); @@ -440,8 +441,8 @@ static int set_autobrightness_state(int status) default_brt = brt; } - backlight_ops.set_default_brt(default_brt); - backlight_ops.update(); + backlight_ops->set_default_brt(default_brt); + backlight_ops->update(); } return 0; @@ -656,6 +657,10 @@ static void exit_lsensor(void) static void auto_brightness_init(void *data) { + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); + display_info.update_auto_brightness = update_auto_brightness; display_info.set_autobrightness_min = set_autobrightness_min; display_info.reset_autobrightness_min = reset_autobrightness_min; diff --git a/src/display/device-interface.h b/src/display/device-interface.h index 078637bf..dec91c99 100644 --- a/src/display/device-interface.h +++ b/src/display/device-interface.h @@ -91,7 +91,7 @@ struct _backlight_ops { void (*release_blink)(void); }; -extern struct _backlight_ops backlight_ops; +struct _backlight_ops *get_backlight_ops(void); enum dpms_state { DPMS_ON, /* In use */ diff --git a/src/display/display-dbus.c b/src/display/display-dbus.c index 3cd7f200..a808ca09 100644 --- a/src/display/display-dbus.c +++ b/src/display/display-dbus.c @@ -69,6 +69,7 @@ #define EXPIRED_POPUP_ID "_REQUEST_ID_" static struct display_plugin *disp_plgn; +static struct _backlight_ops *backlight_ops; static GVariant *dbus_start(GDBusConnection *conn, const gchar *sender, const gchar *path, const gchar *iface, const gchar *name, @@ -389,7 +390,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 = backlight_ops->get_brightness(&brt); if (ret < 0) result = 0; else @@ -403,7 +404,7 @@ static GVariant *dbus_getbrightness(GDBusConnection *conn, result = brt; } } else { - result = backlight_ops.get_default_brt(); + result = backlight_ops->get_default_brt(); brt = 0; } @@ -452,8 +453,8 @@ static GVariant *dbus_setbrightness(GDBusConnection *conn, if (disp_plgn->auto_brightness_control) { ret = disp_plgn->auto_brightness_control(BR_SET_BRIGHTNESS, brt); } else { - backlight_ops.set_default_brt(brt); - ret = backlight_ops.set_brightness(brt); + backlight_ops->set_default_brt(brt); + ret = backlight_ops->set_brightness(brt); if (ret < 0) goto error; ret = vconf_set_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, brt); @@ -462,7 +463,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 = backlight_ops->set_brightness(brt); if (ret < 0) goto error; } @@ -514,7 +515,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 = backlight_ops->set_brightness(brt); if (ret < 0) goto error; @@ -577,7 +578,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 = backlight_ops->get_brightness(&brt); if (ret < 0) brt = ret; @@ -586,7 +587,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); + backlight_ops->set_brightness(0); goto error; } @@ -595,7 +596,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); + backlight_ops->set_brightness(setting); } } else if (autobrt == SETTING_BRIGHTNESS_AUTOMATIC_PAUSE) { _D("Auto brightness will be enable"); @@ -630,15 +631,15 @@ static GVariant *dbus_setrefreshrate(GDBusConnection *conn, control = display_conf.control_display; if (control) - backlight_ops.off(NORMAL_MODE); + backlight_ops->off(NORMAL_MODE); _D("app : %d, value : %d", app, val); - ret = backlight_ops.set_frame_rate(val); + ret = backlight_ops->set_frame_rate(val); if (ret < 0) _E("Failed to set frame rate (%d)", ret); if (control) - backlight_ops.on(NORMAL_MODE); + backlight_ops->on(NORMAL_MODE); error: return g_variant_new("(i)", ret); @@ -751,13 +752,13 @@ static GVariant *dbus_dumpmode(GDBusConnection *conn, if (disp_plgn->pm_lock_internal) disp_plgn->pm_lock_internal(INTERNAL_LOCK_DUMPMODE, LCD_OFF, STAY_CUR_STATE, DUMP_MODE_WATING_TIME); - backlight_ops.release_blink(); + backlight_ops->release_blink(); } else if (!strcmp(on, "off")) { if (disp_plgn->pm_unlock_internal) disp_plgn->pm_unlock_internal(INTERNAL_LOCK_DUMPMODE, LCD_OFF, PM_SLEEP_MARGIN); - backlight_ops.blink(0); + backlight_ops->blink(0); } else if (!strcmp(on, "blink")) { - backlight_ops.blink(500); + backlight_ops->blink(500); } else { ret = -EINVAL; } @@ -926,7 +927,7 @@ static GVariant *dbus_getcustombrightness(GDBusConnection *conn, { int status = 0; - status = backlight_ops.get_custom_status(); + status = backlight_ops->get_custom_status(); return g_variant_new("(i)", status); } @@ -1156,7 +1157,7 @@ static GVariant *dbus_dimstay_control(GDBusConnection *conn, } if (get_pm_cur_state() == S_NORMAL) - backlight_ops.update(); + backlight_ops->update(); return g_variant_new("(i)", 0); } @@ -1168,8 +1169,8 @@ static GVariant *dbus_getbrightnessinfo(GDBusConnection *conn, int default_brightness; int current_brightness; - default_brightness = backlight_ops.get_default_brt(); - backlight_ops.get_brightness_raw(¤t_brightness); + default_brightness = backlight_ops->get_default_brt(); + backlight_ops->get_brightness_raw(¤t_brightness); return g_variant_new("(ii)", default_brightness, current_brightness); } @@ -1304,4 +1305,8 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); } diff --git a/src/display/display-lock.c b/src/display/display-lock.c index b34ab615..088b9245 100644 --- a/src/display/display-lock.c +++ b/src/display/display-lock.c @@ -33,6 +33,7 @@ #define PID_MAX 6 #define LOCK_TIME_WARNING 60 /* 60 seconds */ +static struct _backlight_ops *backlight_ops; static dd_list *cond_head[S_END]; static int trans_condition; @@ -124,7 +125,7 @@ static gboolean pmlock_check(void *data) v = (GVariant*)data; g_variant_get(v, "(ii)", &state, &pid); - if (state == S_LCDOFF && backlight_ops.get_lcd_power() == DPMS_ON) { + if (state == S_LCDOFF && backlight_ops->get_lcd_power() == DPMS_ON) { _D("Lcd state is PM_LCD_POWER_ON"); return G_SOURCE_CONTINUE; } @@ -391,3 +392,10 @@ dd_list *get_cond_head(enum state_t s_index) { return cond_head[s_index]; } + +static void __CONSTRUCTOR__ initialize(void) +{ + backlight_ops = get_backlight_ops(); + if (!backlight_ops) + _E("Failed to get backlight operator."); +} diff --git a/src/touchscreen/touchscreen.c b/src/touchscreen/touchscreen.c index 295503bb..dff61ce9 100644 --- a/src/touchscreen/touchscreen.c +++ b/src/touchscreen/touchscreen.c @@ -50,6 +50,8 @@ static int booting_done(void *data); static struct display_config *_display_conf; static struct _backlight_ops *_backlight_ops; +static struct _backlight_ops* (*_get_backlight_ops)(void); + static void touchscreen_wakeup_status(keynode_t *key, void *data) { if (!key) @@ -315,12 +317,20 @@ static void touchscreen_init(void *data) int ret, val; _display_conf = dlsym(disp_plgn->handle, "display_conf"); - if (!_display_conf) + if (!_display_conf) _E("Failed to obtain address of display_conf, %s.", dlerror()); - _backlight_ops = dlsym(disp_plgn->handle, "backlight_ops"); - if (!_backlight_ops) - _E("Failed to obtain address of backlight_ops."); + /* 'backlight_ops' is declared static and used a lot of places with same name. + * So it fails that fetching symbol directly with name 'backlight_ops'. + * To avoid this, fetches getter function 'get_backlight_ops' instead, and + * retrieve the 'backlight_ops' by using it */ + _get_backlight_ops = dlsym(disp_plgn->handle, "get_backlight_ops"); + if (_get_backlight_ops) { + _backlight_ops = _get_backlight_ops(); + if (!_backlight_ops) + _E("Failed to get backlight operator."); + } else + _E("Failed to obtain address of get_backlight_ops, %s.", dlerror()); if (touchscreen_dev && touchscreen_dev->set_powersaving) { ret = touchscreen_dev->set_powersaving(0); |