summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@chromium.org>2021-03-29 07:37:06 +0000
committerCommit Bot <commit-bot@chromium.org>2021-03-29 08:49:22 +0000
commit9d8f28dd760f4f0e68ed3746bb9e50dc31687859 (patch)
treee0b369ef0322bdbb73ef363ed39047e5ec8e1d17 /driver
parenta68f4691e240a46fed4b8b9f6977382036f93c7d (diff)
downloadchrome-ec-9d8f28dd760f4f0e68ed3746bb9e50dc31687859.tar.gz
Revert "touchpad_elan: implement sleep mode"
This reverts commit 1e86df339d40526911ebea45530b20c36be47a5d. Reason for revert: b/176137996#comment65 Original change's description: > touchpad_elan: implement sleep mode > > Implement sleep mode to save S3 power. After this patch, the touchpad > enters sleep mode when suspend with lid opened. > > Also did some refactor but the logic doesn't change > > BUG=b:176137996 > TEST=tested following scenarios: > 1) suspend when lid open > 2) lid close > 3) hammer reboot > verify that power/sleep state are configured correctly > BRANCH=trogdor > > Signed-off-by: Ting Shen <phoenixshen@google.com> > Change-Id: I0742460ef5d3ec34c6bf16ee4a02a87966069087 > Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2752530 > Reviewed-by: Nicolas Boichat <drinkcat@chromium.org> > Commit-Queue: Ting Shen <phoenixshen@chromium.org> > Tested-by: Ting Shen <phoenixshen@chromium.org> Bug: b:176137996 Change-Id: I0be526ee74b127b7a3ef901b885d825f2356d0c0 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2789781 Auto-Submit: Ting Shen <phoenixshen@chromium.org> Reviewed-by: Ting Shen <phoenixshen@chromium.org> Commit-Queue: Ting Shen <phoenixshen@chromium.org> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Tested-by: Ting Shen <phoenixshen@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Diffstat (limited to 'driver')
-rw-r--r--driver/touchpad_elan.c65
1 files changed, 24 insertions, 41 deletions
diff --git a/driver/touchpad_elan.c b/driver/touchpad_elan.c
index 1501e1fb67..d2e28d53a6 100644
--- a/driver/touchpad_elan.c
+++ b/driver/touchpad_elan.c
@@ -141,18 +141,18 @@ static int elan_tp_write_cmd(uint16_t reg, uint16_t val)
buf, sizeof(buf), NULL, 0);
}
-static bool elan_tp_power = true;
-static bool elan_tp_sleep;
+/* Power is on by default. */
+static int elan_tp_power = 1;
-static int elan_tp_power_enable(bool enable)
+static int elan_tp_set_power(int enable)
{
int rv;
uint16_t val;
- if (elan_tp_power == enable)
+ if ((enable && elan_tp_power) || (!enable && !elan_tp_power))
return EC_SUCCESS;
- CPRINTS("tp power: %d", enable);
+ CPRINTS("elan TP power %s", enable ? "on" : "off");
rv = elan_tp_read_cmd(ETP_I2C_POWER_CMD, &val);
if (rv)
@@ -170,19 +170,6 @@ out:
return rv;
}
-static int elan_tp_sleep_enable(bool sleep)
-{
- if (elan_tp_sleep == sleep)
- return EC_SUCCESS;
-
- CPRINTS("tp sleep: %d", sleep);
-
- elan_tp_sleep = sleep;
-
- return elan_tp_write_cmd(ETP_I2C_STAND_CMD,
- sleep ? ETP_I2C_SLEEP : ETP_I2C_WAKE_UP);
-}
-
static int finger_status[ETP_MAX_FINGERS] = {0};
/*
@@ -431,8 +418,6 @@ static void elan_tp_init(void)
gpio_enable_interrupt(GPIO_TOUCHPAD_INT);
out:
- elan_tp_power = true;
- elan_tp_sleep = false;
CPRINTS("%s:%d", __func__, rv);
return;
@@ -803,23 +788,24 @@ void touchpad_interrupt(enum gpio_signal signal)
/* Make a decision on touchpad power, based on USB and tablet mode status. */
static void touchpad_power_control(void)
{
- if (IS_ENABLED(CONFIG_TABLET_MODE) && tablet_get_mode()) {
- /* power off */
- elan_tp_power_enable(false);
- } else if (IS_ENABLED(CONFIG_USB_SUSPEND) && usb_is_suspended()) {
- if (usb_is_remote_wakeup_enabled()) {
- /* sleep */
- elan_tp_power_enable(true);
- elan_tp_sleep_enable(true);
- } else {
- /* power off */
- elan_tp_power_enable(false);
- }
- } else {
- /* power on */
- elan_tp_power_enable(true);
- elan_tp_sleep_enable(false);
- }
+ static int enabled = 1;
+ int enable = 1;
+
+#ifdef CONFIG_USB_SUSPEND
+ enable = enable &&
+ (!usb_is_suspended() || usb_is_remote_wakeup_enabled());
+#endif
+
+#ifdef CONFIG_TABLET_MODE
+ enable = enable && !tablet_get_mode();
+#endif
+
+ if (enabled == enable)
+ return;
+
+ elan_tp_set_power(enable);
+
+ enabled = enable;
}
void touchpad_task(void *u)
@@ -832,11 +818,8 @@ void touchpad_task(void *u)
while (1) {
event = task_wait_event(-1);
- if (event & TASK_EVENT_WAKE) {
- elan_tp_power_enable(true);
- elan_tp_sleep_enable(false);
+ if (event & TASK_EVENT_WAKE)
elan_tp_read_report_retry();
- }
if (event & TASK_EVENT_POWER)
touchpad_power_control();