summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoungjae Cho <y0.cho@samsung.com>2020-07-15 18:22:28 +0900
committerYunmi Ha <yunmi.ha@samsung.com>2020-08-14 15:51:09 +0900
commit2d618a9afdf5910ff640fcd5c0dcb94bb3233e82 (patch)
treebd889cd5d5501513a46ea819467b46f3b9ff3480
parent23a4276cef9262f0d072c982e7ff18915c717ac9 (diff)
downloaddeviced-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>
-rw-r--r--plugins/iot/display/core.c73
-rw-r--r--plugins/iot/display/device-interface.c70
-rw-r--r--plugins/iot/display/key-filter.c15
-rw-r--r--plugins/mobile/display/core.c67
-rw-r--r--plugins/mobile/display/device-interface.c70
-rw-r--r--plugins/mobile/display/key-filter.c21
-rw-r--r--plugins/tv/display/core.c67
-rw-r--r--plugins/tv/display/device-interface.c70
-rw-r--r--plugins/tv/display/key-filter.c15
-rw-r--r--plugins/tv/display/state-tv.c13
-rw-r--r--plugins/wearable/display/auto-brightness-sensorhub.c49
-rw-r--r--plugins/wearable/display/core.c68
-rw-r--r--plugins/wearable/display/device-interface.c72
-rw-r--r--plugins/wearable/display/display-handler.c14
-rw-r--r--plugins/wearable/display/enhance.c10
-rw-r--r--plugins/wearable/display/key-filter.c15
-rw-r--r--plugins/wearable/display/lbm.c24
-rw-r--r--plugins/wearable/display/powersaver.c13
-rw-r--r--plugins/wearable/display/swim.c7
-rw-r--r--src/display/ambient-mode.c11
-rw-r--r--src/display/auto-brightness.c17
-rw-r--r--src/display/device-interface.h2
-rw-r--r--src/display/display-dbus.c43
-rw-r--r--src/display/display-lock.c10
-rw-r--r--src/touchscreen/touchscreen.c18
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(&current_brightness);
+ default_brightness = backlight_ops->get_default_brt();
+ backlight_ops->get_brightness(&current_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(&current_brightness);
+ default_brightness = backlight_ops->get_default_brt();
+ backlight_ops->get_brightness(&current_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(&current_brightness);
+ default_brightness = backlight_ops->get_default_brt();
+ backlight_ops->get_brightness_raw(&current_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);