#include <system/syscommon-plugin-deviced-common-interface.h>
#include <system/syscommon-plugin-deviced-display.h>
#include <system/syscommon-plugin-deviced-display-interface.h>
+#include <system/syscommon-plugin-deviced-power-interface.h>
+#include <system/syscommon-plugin-deviced-touchled-interface.h>
#define EXPORT __attribute__ ((visibility("default")))
return 0;
}
+static int lcd_on_procedure(enum syscommon_deviced_display_state state, enum deviced_event reason)
+{
+ int ret;
+ bool lcd_on_broadcast;
+
+ /* Disable Doze doze */
+ ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_POWER),
+ DEVICED_POWER_ATTR_INT_DOZE_MODE,
+ SYSCOMMON_DEVICED_POWER_DISABLE_DOZE_MODE);
+ if (ret < 0)
+ _W("Disable power doze mode err(%d)", ret);
+
+ _I("[lcdstep] reason: %s", syscommon_plugin_deviced_common_get_event_name(reason));
+
+ /* Broadcast lcd on signal with cause */
+ ret = syscommon_resman_get_resource_attr_bool(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_BOOL_BROADCASTED_FLAG,
+ &lcd_on_broadcast);
+ if (ret < 0)
+ _W("Cannot get lcd on broadcast flag err(%d)", ret);
+
+ if (!lcd_on_broadcast) {
+ ret = syscommon_resman_set_resource_attr_uint64_2(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_TUPLE2_BROADCAST_LCD_ON,
+ SYSCOMMON_DEVICED_DISPLAY_SIGNAL_PRE,
+ reason);
+ if (ret < 0)
+ _W("Broadcast lcd on signal pre step err(%d)", ret);
+ }
+
+ /* Update brightness as display brightness type */
+ if (state == SYSCOMMON_DEVICED_DISPLAY_STATE_DIM) {
+ ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_INT_UPDATE_BRIGHTNESS,
+ SYSCOMMON_DEVICED_DISPLAY_BRIGHTNESS_DIM);
+ if (ret < 0) {
+ _W("Cannot update brightness as dim brightness err(%d)", ret);
+ }
+ } else if (state == SYSCOMMON_DEVICED_DISPLAY_STATE_ON) {
+ ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_INT_UPDATE_BRIGHTNESS,
+ SYSCOMMON_DEVICED_DISPLAY_BRIGHTNESS_DEFAULT);
+ if (ret < 0) {
+ _W("Cannot update brightness as default brightness err(%d)", ret);
+ }
+ }
+
+ /* Set pmstate of vconf */
+ if (state == SYSCOMMON_DEVICED_DISPLAY_STATE_DIM) {
+ ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_INT_PM_STATE,
+ SYSCOMMON_DEVICED_DISPLAY_STATE_DIM);
+ if (ret < 0) {
+ _E("Failed to set pm state as dim err(%d)", ret);
+ return ret;
+ }
+ } else if (state == SYSCOMMON_DEVICED_DISPLAY_STATE_ON) {
+ ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_INT_PM_STATE,
+ SYSCOMMON_DEVICED_DISPLAY_STATE_ON);
+ if (ret < 0) {
+ _E("Failed to set pm state as on err(%d)", ret);
+ return ret;
+ }
+ }
+
+ /**
+ * Display on operate
+ * - a. display on
+ * - b. TSP(touch screen) and touchkey enable
+ */
+ ret = syscommon_resman_set_resource_attr_uint64_2(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_TUPLE2_START_DEPENDENT_DEVICE,
+ SYSCOMMON_DEVICED_DISPLAY_DEVICE_TYPE_DISPLAY,
+ reason);
+ if (ret < 0) {
+ _E("Failed to start display device err(%d)", ret);
+ return ret;
+ }
+ ret = syscommon_resman_set_resource_attr_uint64_2(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_TUPLE2_START_DEPENDENT_DEVICE,
+ SYSCOMMON_DEVICED_DISPLAY_DEVICE_TYPE_TOUCHSCREEN,
+ reason);
+ if (ret < 0) {
+ _W("Cannot start touchscreen device err(%d)");
+ }
+ ret = syscommon_resman_set_resource_attr_uint64_2(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_TUPLE2_START_DEPENDENT_DEVICE,
+ SYSCOMMON_DEVICED_DISPLAY_DEVICE_TYPE_TOUCHKEY,
+ reason);
+ if (ret < 0) {
+ _W("Cannot start touchkey device err(%d)");
+ }
+
+ /* Broadcast lcd on complete signal */
+ if (!lcd_on_broadcast) {
+ ret = syscommon_resman_set_resource_attr_uint64_2(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_TUPLE2_BROADCAST_LCD_ON,
+ SYSCOMMON_DEVICED_DISPLAY_SIGNAL_POST,
+ reason);
+ if (ret == 0) {
+ ret = syscommon_resman_set_resource_attr_bool(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_BOOL_BROADCASTED_FLAG,
+ true);
+ if (ret < 0) {
+ _W("Broadcast flag setting as true err(%d)", ret);
+ }
+ } else if (ret < 0) {
+ _W("Broadcast lcd on signal post step err(%d)", ret);
+ }
+ }
+
+ /* Enable key backlight */
+ ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_TOUCHLED),
+ DEVICED_TOUCHLED_ATTR_INT_BACKLIGHT,
+ SYSCOMMON_DEVICED_TOUCHLED_DIRECT_ON);
+ if (ret < 0)
+ _W("Enable key backlight as touchled direct on err(%d)", ret);
+
+ ret = syscommon_resman_set_resource_attr_int(SYSCOMMON_RESOURCE_ID(DEVICED_RESOURCE_TYPE_DISPLAY),
+ DEVICED_DISPLAY_ATTR_INT_TOUCH_EVENT_BLOCKED,
+ false);
+ if (ret < 0)
+ _W("Set touch event blocked as false err(%d)", ret);
+
+ return 0;
+}
+
static syscommon_plugin_backend_deviced_display_funcs g_display_funcs = {
.load_display_config = load_display_config,
+ .lcd_on_procedure = lcd_on_procedure,
};
static int setup_display_with_dpms_init(void *data)