summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuper Liu <supercjliu@google.com>2022-05-12 09:16:05 +0800
committerSuper Liu <supercjliu@google.com>2022-05-19 15:14:23 +0800
commit4248cdf35a9bd097fdb437cfe71dbdaca691f5ad (patch)
tree8d3c1234f53a8afd8e490ea4f6333564a0a027f2
parent2b29a5d3f14dd72e13288b5765a933d6ac7eacbf (diff)
downloadcommon-android-gs-bluejay-5.10-t-beta-4.tar.gz
Bug: 201610482 Bug: 232030989 Signed-off-by: Super Liu <supercjliu@google.com> Change-Id: I5647ece259d0df91405f101f5f01be9135133e53
-rw-r--r--goog_touch_interface.c60
-rw-r--r--goog_touch_interface.h29
-rw-r--r--goog_touch_interface_nop.h11
3 files changed, 83 insertions, 17 deletions
diff --git a/goog_touch_interface.c b/goog_touch_interface.c
index 34f8f53..9e50500 100644
--- a/goog_touch_interface.c
+++ b/goog_touch_interface.c
@@ -95,16 +95,28 @@ static void panel_bridge_enable(struct drm_bridge *bridge)
if (gti->panel_is_lp_mode) {
GOOG_LOG("skip screen-on because of panel_is_lp_mode enabled!\n");
- } else {
- if (gti->tbn_register_mask)
- tbn_request_bus(gti->tbn_register_mask);
+ return;
+ }
- GOOG_LOG("screen-on.\n");
- gti->cmd.display_state_cmd.setting = GTI_DISPLAY_STATE_ON;
- ret = goog_process_vendor_cmd(gti, GTI_CMD_NOTIFY_DISPLAY_STATE);
+ GOOG_LOG("screen-on.\n");
+ if (gti->pm_state == GTI_RESUME) {
+ GOOG_WARN("GTI already resumed!\n");
+ return;
+ }
+ if (gti->vendor_dev_pm_state == GTI_VENDOR_DEV_RESUME) {
+ GOOG_WARN("unexpected vendor_dev_pm_state(%d)!\n",
+ gti->vendor_dev_pm_state);
+ }
+ if (gti->tbn_register_mask) {
+ ret = tbn_request_bus(gti->tbn_register_mask);
if (ret)
- GOOG_WARN("unexpected return(%d)!", ret);
+ GOOG_ERR("tbn_request_bus failed, ret %d!\n", ret);
}
+ gti->cmd.display_state_cmd.setting = GTI_DISPLAY_STATE_ON;
+ ret = goog_process_vendor_cmd(gti, GTI_CMD_NOTIFY_DISPLAY_STATE);
+ if (ret)
+ GOOG_WARN("unexpected vendor_cmd return(%d)!\n", ret);
+ gti->pm_state = GTI_RESUME;
}
static void panel_bridge_disable(struct drm_bridge *bridge)
@@ -121,13 +133,17 @@ static void panel_bridge_disable(struct drm_bridge *bridge)
}
GOOG_LOG("screen-off.\n");
+ if (gti->pm_state == GTI_SUSPEND) {
+ GOOG_WARN("GTI already suspended!\n");
+ return;
+ }
+ if (gti->vendor_dev_pm_state == GTI_VENDOR_DEV_SUSPEND)
+ GOOG_WARN("unexpected vendor_dev_pm_state(%d)!\n", gti->vendor_dev_pm_state);
gti->cmd.display_state_cmd.setting = GTI_DISPLAY_STATE_OFF;
ret = goog_process_vendor_cmd(gti, GTI_CMD_NOTIFY_DISPLAY_STATE);
if (ret)
- GOOG_WARN("unexpected return(%d)!", ret);
-
- if (gti->tbn_register_mask)
- tbn_release_bus(gti->tbn_register_mask);
+ GOOG_WARN("unexpected vendor_cmd return(%d)!\n", ret);
+ gti->pm_state = GTI_SUSPEND;
}
struct drm_connector *get_bridge_connector(struct drm_bridge *bridge)
@@ -996,6 +1012,28 @@ void goog_init_options(struct goog_touch_interface *gti,
}
}
+void goog_notify_vendor_dev_pm_state_done(struct goog_touch_interface *gti,
+ enum gti_vendor_dev_pm_state state)
+{
+ int ret = 0;
+
+ if (!gti)
+ return;
+
+ if (gti->vendor_dev_pm_state != state) {
+ GOOG_LOG("pm state changed: %d -> %d.\n",
+ gti->vendor_dev_pm_state, state);
+ gti->vendor_dev_pm_state = state;
+ }
+ if (gti->tbn_register_mask &&
+ gti->vendor_dev_pm_state == GTI_VENDOR_DEV_SUSPEND) {
+ ret = tbn_release_bus(gti->tbn_register_mask);
+ if (ret)
+ GOOG_ERR("tbn_release_bus failed, ret %d!\n", ret);
+ }
+}
+EXPORT_SYMBOL(goog_notify_vendor_dev_pm_state_done);
+
struct goog_touch_interface *goog_touch_interface_probe(
void *private_data,
struct device *dev,
diff --git a/goog_touch_interface.h b/goog_touch_interface.h
index ddc7f25..7f0941d 100644
--- a/goog_touch_interface.h
+++ b/goog_touch_interface.h
@@ -36,7 +36,7 @@
* GTI_MF_STATE_FILTERED_LOCKED: filtered coordinates. Locked until
* touch is lifted or timeout.
*/
-enum {
+enum gti_mf_state : u32 {
GTI_MF_STATE_FILTERED = 0,
GTI_MF_STATE_UNFILTERED,
GTI_MF_STATE_FILTERED_LOCKED,
@@ -49,7 +49,7 @@ enum {
* GTI_MF_MODE_FILTER: only report touch if coord report changed.
* GTI_MF_MODE_AUTO: for development case.
*/
-enum {
+enum gti_mf_mode : u32 {
GTI_MF_MODE_UNFILTER = 0,
GTI_MF_MODE_DEFAULT,
GTI_MF_MODE_DYNAMIC = GTI_MF_MODE_DEFAULT,
@@ -95,6 +95,16 @@ enum gti_display_state_setting : u32 {
GTI_DISPLAY_STATE_ON,
};
+enum gti_vendor_dev_pm_state : u32 {
+ GTI_VENDOR_DEV_RESUME = 0,
+ GTI_VENDOR_DEV_SUSPEND,
+};
+
+enum gti_pm_state : u32 {
+ GTI_RESUME = 0,
+ GTI_SUSPEND,
+};
+
struct gti_sensor_data_cmd {
enum gti_sensor_data_type type;
u8 *buffer;
@@ -180,6 +190,8 @@ struct gti_optional_configuration {
* @palm_setting: current palm setting.
* @mf_mode: current motion filter mode.
* @mf_state: current motion filter state.
+ * @vendor_dev_pm_state: vendor device pm state.
+ * @pm_state: GTI device pm state.
* @tbn_register_mask: the tbn_mask that used to request/release touch bus.
* @panel_is_lp_mode: display is in low power mode.
* @force_legacy_report: force to directly report input by kernel input API.
@@ -214,10 +226,12 @@ struct goog_touch_interface {
ktime_t mf_downtime;
int display_vrefresh;
- u32 grip_setting;
- u32 palm_setting;
- u32 mf_mode;
- u32 mf_state;
+ enum gti_grip_setting grip_setting;
+ enum gti_palm_setting palm_setting;
+ enum gti_mf_mode mf_mode;
+ enum gti_mf_state mf_state;
+ enum gti_vendor_dev_pm_state vendor_dev_pm_state;
+ enum gti_pm_state pm_state;
u32 tbn_register_mask;
bool panel_is_lp_mode;
@@ -261,6 +275,9 @@ inline void goog_input_report_key(
struct input_dev *dev, unsigned int code, int value);
inline void goog_input_sync(struct goog_touch_interface *gti, struct input_dev *dev);
+void goog_notify_vendor_dev_pm_state_done(
+ struct goog_touch_interface *gti,
+ enum gti_vendor_dev_pm_state state);
int goog_process_vendor_cmd(struct goog_touch_interface *gti, enum gti_cmd_type cmd_type);
int goog_input_process(struct goog_touch_interface *gti);
struct goog_touch_interface *goog_touch_interface_probe(
diff --git a/goog_touch_interface_nop.h b/goog_touch_interface_nop.h
index 88ed9ac..259cee7 100644
--- a/goog_touch_interface_nop.h
+++ b/goog_touch_interface_nop.h
@@ -15,6 +15,11 @@ enum gti_cmd_type : u32{
GTI_CMD_NOP,
};
+enum gti_vendor_dev_pm_state : u32 {
+ GTI_VENDOR_DEV_RESUME = 0,
+ GTI_VENDOR_DEV_SUSPEND,
+};
+
struct gti_union_cmd_data {
u32 nop_cmd;
};
@@ -76,6 +81,12 @@ static inline int goog_input_process(struct goog_touch_interface *gti)
return 0;
}
+static inline void goog_notify_vendor_dev_pm_state_done(
+ struct goog_touch_interface *gti,
+ enum gti_vendor_dev_pm_state state)
+{
+}
+
struct gti_optional_configuration {
u32 reserve;
};