summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoungjae Cho <y0.cho@samsung.com>2020-03-06 14:50:16 +0900
committerHyotaek Shim <hyotaek.shim@samsung.com>2020-03-12 05:07:47 +0000
commit44093a26d0240ae8a632643dec1338f406d79484 (patch)
treeb0f4bce764ded7f1a8b0820a9667052eb3ed7836
parent213b0a6068360bb73d0afacb39f114c005b7db88 (diff)
downloaddeviced-submit/tizen_5.5/20200312.063422.tar.gz
deviced-submit/tizen_5.5/20200312.063422.tar.bz2
deviced-submit/tizen_5.5/20200312.063422.zip
Prohibit turning on display when display has been detachedsubmit/tizen_5.5/20200312.063422accepted/tizen/5.5/unified/20200313.004355
Kernel set lcd_power node to 5 when display is detached. If the node's value is 5, deviced should ignore lcd on request. To this end, add return statement at the point that can be the entry of the LCDON procedure. Below are the functions that can be a beginning of LCDON. - __pm_change_internal - default_trans - default_action - lcd_on_direct - lcd_on_procedure - dbus_changestatebyreason - dbus_changestate - dbus_customlcdon - switch_on_lcd Change-Id: Ibee6139dede213dbcde715c928a2df64c3757324 Signed-off-by: Youngjae Cho <y0.cho@samsung.com> (cherry picked from commit 32a6e47d137a00c2a8b037b23ef4387f2ebecb23)
-rw-r--r--plugins/wearable/display/core.c33
-rwxr-xr-xplugins/wearable/display/device-interface.c9
-rw-r--r--plugins/wearable/display/key-filter.c6
-rw-r--r--src/display/device-interface.h1
-rw-r--r--src/display/display-dbus.c15
-rw-r--r--src/display/poll.c7
6 files changed, 70 insertions, 1 deletions
diff --git a/plugins/wearable/display/core.c b/plugins/wearable/display/core.c
index 5821dc9b..fba21c17 100644
--- a/plugins/wearable/display/core.c
+++ b/plugins/wearable/display/core.c
@@ -498,15 +498,23 @@ void lcd_on_procedure(int state, enum device_flags flag)
/*
* Display on procedure
+ * step 0. check if display is detached (only for factory mode)
* step 1. broadcast lcd on signal with cause
* step 2. set brightness
* step 3. set pmstate of vconf
* step 4. display on operate
* - a. display on
* - b. TSP(touch screen) and touchkey enable
- * step 5. broadcast lcd on complete siganl
+ * step 5. broadcast lcd on complete signal
* step 6. key backlight enable
*/
+
+ /* only for factory mode */
+ if (is_display_detached()) {
+ _W("Turning on display is ignored while the display is detached.");
+ return;
+ }
+
_I("[lcdstep] %lu", flags);
if (flags & AMBIENT_MODE) {
@@ -1152,6 +1160,13 @@ void lcd_on_direct(enum device_flags flags)
power_ops.power_lock();
}
+ /* only for factory mode */
+ if (is_display_detached()) {
+ _W("Turning on display is ignored while the display is detached.");
+ return;
+ }
+
+ pm_old_state = pm_cur_state;
pm_cur_state = S_NORMAL;
_D("lcd is on directly");
@@ -1976,6 +1991,14 @@ static int default_trans(int evt)
}
}
+ /* only for factory mode */
+ if (is_display_detached()) {
+ if (next_state == S_NORMAL || next_state == S_LCDDIM) {
+ _W("Turning on display is ignored while the display is detached.");
+ return -1;
+ }
+ }
+
/* state transition */
pm_old_state = pm_cur_state;
pm_cur_state = next_state;
@@ -2065,6 +2088,14 @@ static int default_action(int timeout)
return -EINVAL;
}
+ /* only for facetory mode */
+ if (is_display_detached()) {
+ if (pm_cur_state == S_NORMAL || pm_cur_state == S_LCDDIM) {
+ _W("Turning on display is ignored while the display is detached.");
+ return -ENOTSUP;
+ }
+ }
+
if (pm_cur_state != S_SLEEP) {
if (pm_cur_state == S_NORMAL &&
lcdon_tv.tv_sec != 0) {
diff --git a/plugins/wearable/display/device-interface.c b/plugins/wearable/display/device-interface.c
index b03e5c4c..72322efe 100755
--- a/plugins/wearable/display/device-interface.c
+++ b/plugins/wearable/display/device-interface.c
@@ -289,6 +289,8 @@ static int get_lcd_power(void)
return DPMS_SUSPEND;
case DISPLAY_OFF:
return DPMS_OFF;
+ case DISPLAY_DETACH:
+ return DPMS_DETACH;
default:
return -EINVAL;
}
@@ -1020,6 +1022,13 @@ bool vital_mode(void)
return vital_sleep;
}
+bool is_display_detached(void)
+{
+ int state = backlight_ops.get_lcd_power();
+
+ return (state == DPMS_DETACH) || (state == -EINVAL);
+}
+
static int vital_state_changed(void *data)
{
int type;
diff --git a/plugins/wearable/display/key-filter.c b/plugins/wearable/display/key-filter.c
index 891dadb8..87521ede 100644
--- a/plugins/wearable/display/key-filter.c
+++ b/plugins/wearable/display/key-filter.c
@@ -190,6 +190,12 @@ static inline void broadcast_lcdoff_by_powerkey(void)
static inline bool switch_on_lcd(enum device_flags flags)
{
+ /* only for factory mode */
+ if (is_display_detached()) {
+ _W("Turning on display is ignored while the display is detached.");
+ return false;
+ }
+
if (current_state_in_on())
return false;
diff --git a/src/display/device-interface.h b/src/display/device-interface.h
index e0fc0890..1cd3d7de 100644
--- a/src/display/device-interface.h
+++ b/src/display/device-interface.h
@@ -135,6 +135,7 @@ enum mainlock_state {
struct display_device *display_dev_get(void);
bool display_dimstay_check(void);
void dpms_set_running_state(int val);
+bool is_display_detached(void);
#endif
diff --git a/src/display/display-dbus.c b/src/display/display-dbus.c
index 9d88cb56..34f63875 100644
--- a/src/display/display-dbus.c
+++ b/src/display/display-dbus.c
@@ -312,6 +312,15 @@ static GVariant *dbus_changestate(GDBusConnection *conn,
goto out;
}
+ /* only for factory mode */
+ if (is_display_detached()) {
+ if (state == LCD_NORMAL || state == LCD_DIM) {
+ _W("Turning on display is ignored while the display is detached.");
+ ret = -ENOTSUP;
+ goto out;
+ }
+ }
+
if (check_dimstay(state, GOTO_STATE_NOW) == true) {
_E("LCD state can not be changed to OFF state! by %d", pid);
ret = -EBUSY;
@@ -775,6 +784,12 @@ static GVariant *dbus_customlcdon(GDBusConnection *conn,
g_variant_get(param, "(i)", &timeout);
+ /* only for factory mode */
+ if (is_display_detached()) {
+ _W("Turning on display is ignored while the display is detached.");
+ return g_variant_new("(i)", -ENOTSUP);
+ }
+
ret = custom_lcdon(timeout);
return g_variant_new("(i)", ret);
diff --git a/src/display/poll.c b/src/display/poll.c
index ee0471d3..7e008d3b 100644
--- a/src/display/poll.c
+++ b/src/display/poll.c
@@ -144,6 +144,7 @@ static int __pm_unlock_internal(pid_t pid, int s_bits, int flag)
static int __pm_change_internal(pid_t pid, int s_bits)
{
int cond;
+ const int display_on = LCD_NORMAL | LCD_DIM;
if (!pm_callback)
return -1;
@@ -152,6 +153,12 @@ static int __pm_change_internal(pid_t pid, int s_bits)
if (cond < 0)
return cond;
+ /* only for factory mode */
+ if (is_display_detached() && (cond & display_on)) {
+ _W("Turning on display is ignored while the display is detached.");
+ return -ENOTSUP;
+ }
+
if (!state_supported(cond))
return -ENOTSUP;