summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Parker <dparker@chromium.org>2013-08-27 16:12:20 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2013-09-18 22:09:00 +0000
commit2c16da8e91c5939fc419e939de1376c7dd93046f (patch)
treef49177d681bb66e07d5265cba3540d5e045a92a0
parentfe0b6c1acddd4ffe80d4c142e138bf8bd37d29e7 (diff)
downloadchrome-ec-2c16da8e91c5939fc419e939de1376c7dd93046f.tar.gz
Haswell: Add control for touchscreen reset
BUG=chrome-os-partner:22076 BRANCH=peppy TEST=Manual. Verify touchscreen operational in S0. Change-Id: Ife2d4e11142195bddf202933430ec8af243b1309 Signed-off-by: Dave Parker <dparker@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/167150 Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--common/chipset_haswell.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/common/chipset_haswell.c b/common/chipset_haswell.c
index f90082508e..b92bbbf5ce 100644
--- a/common/chipset_haswell.c
+++ b/common/chipset_haswell.c
@@ -13,6 +13,7 @@
#include "gpio.h"
#include "hooks.h"
#include "host_command.h"
+#include "lid_switch.h"
#include "system.h"
#include "timer.h"
#include "util.h"
@@ -157,6 +158,14 @@ enum x86_state x86_handle_state(enum x86_state state)
break;
case X86_S3:
+ /*
+ * If lid is closed; hold touchscreen in reset to cut power
+ * usage. If lid is open, take touchscreen out of reset so it
+ * can wake the processor. Chipset task is awakened on lid
+ * switch transitions.
+ */
+ gpio_set_level(GPIO_TOUCHSCREEN_RESET_L, lid_is_open());
+
/* Check for state transitions */
if (!x86_has_signals(IN_PGOOD_S3)) {
/* Required rail went away */
@@ -247,12 +256,20 @@ enum x86_state x86_handle_state(enum x86_state state)
/* Enable wireless */
wireless_enable(EC_WIRELESS_SWITCH_ALL);
+ /*
+ * Make sure touchscreen is out if reset (even if the lid is
+ * still closed); it may have been turned off if the lid was
+ * closed in S3.
+ */
+ gpio_set_level(GPIO_TOUCHSCREEN_RESET_L, 1);
+
/* Wait for non-core power rails good */
if (x86_wait_signals(IN_PGOOD_S0)) {
chipset_force_shutdown();
wireless_enable(0);
gpio_set_level(GPIO_EC_EDP_VDD_EN, 0);
gpio_set_level(GPIO_PP3300_DX_EN, 0);
+ gpio_set_level(GPIO_TOUCHSCREEN_RESET_L, 0);
return X86_S3;
}