diff options
author | Super Liu <supercjliu@google.com> | 2022-05-12 09:16:05 +0800 |
---|---|---|
committer | Super Liu <supercjliu@google.com> | 2022-05-19 15:14:23 +0800 |
commit | 4248cdf35a9bd097fdb437cfe71dbdaca691f5ad (patch) | |
tree | 8d3c1234f53a8afd8e490ea4f6333564a0a027f2 | |
parent | 2b29a5d3f14dd72e13288b5765a933d6ac7eacbf (diff) | |
download | common-android-gs-bluejay-5.10-t-beta-4.tar.gz |
touch/common: GTI support vendor device pm notification.android-t-beta-4_r0.6android-t-beta-4_r0.5android-t-beta-4_r0.4android-t-beta-3.3_r0.4android-t-beta-3.2_r0.4android-13.0.0_r0.5android-13.0.0_r0.44android-13.0.0_r0.43android-13.0.0_r0.4android-13.0.0_r0.20android-13.0.0_r0.19android-13.0.0_r0.15android-13.0.0_r0.14android-gs-raviole-5.10-t-beta-4android-gs-raviole-5.10-t-beta-3android-gs-raviole-5.10-android13android-gs-bluejay-5.10-t-beta-4android-gs-bluejay-5.10-android13
Bug: 201610482
Bug: 232030989
Signed-off-by: Super Liu <supercjliu@google.com>
Change-Id: I5647ece259d0df91405f101f5f01be9135133e53
-rw-r--r-- | goog_touch_interface.c | 60 | ||||
-rw-r--r-- | goog_touch_interface.h | 29 | ||||
-rw-r--r-- | goog_touch_interface_nop.h | 11 |
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; }; |