ec: Add support for reading the LID switch
authorVadim Bendebury <vbendeb@chromium.org>
Fri, 24 Jun 2016 02:50:40 +0000 (19:50 -0700)
committerchrome-bot <chrome-bot@chromium.org>
Fri, 24 Jun 2016 21:48:59 +0000 (14:48 -0700)
Add a function for reading the lid switch from the EC via the memmap. This
can be used to read the lid switch, for example, since if it is only
connected to the EC there is no way to use the AP GPIOs.

BUG=chrome-os-partner:53208
BRANCH=none

TEST=with the rest of the patches applied, on a Gru device, while
     observing the AP console:

  - reboot the device into linux login prompt

  - reboot the device again, close the lid once the developer mode
    screen is displayed. Observe the device stop booting, printing on
    the console
VbAudioOpen() - note count 1
Lid is closed.
VbBootDeveloper() - shutdown requested!

Change-Id: I705cac1a5ac781d4f382c7079babfb279cdc8627
Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/353940
Reviewed-by: Shawn N <shawnn@chromium.org>
src/drivers/ec/cros/ec.c
src/drivers/ec/cros/ec.h

index dc939d3..443a368 100644 (file)
@@ -1073,6 +1073,17 @@ int cros_ec_read_batt_volt(uint32_t *volt)
        return read_memmap(EC_MEMMAP_BATT_VOLT, sizeof(*volt), volt);
 }
 
+int cros_ec_read_lid_switch(uint32_t *lid)
+{
+       uint8_t flags;
+
+       if (read_memmap(EC_MEMMAP_SWITCHES, sizeof(flags), &flags))
+               return -1;
+       *lid = !!(flags & EC_SWITCH_LID_OPEN);
+
+       return 0;
+}
+
 int cros_ec_read_limit_power_request(int *limit_power)
 {
        struct ec_params_charge_state p;
index 74a8bdf..d717f65 100644 (file)
@@ -249,6 +249,14 @@ int cros_ec_read_limit_power_request(int *limit_power);
 
 int cros_ec_set_bl_pwm_duty(uint32_t percent);
 
+/**
+ * Read the value of the 'lid open' switch.
+ *
+ * @param lid          Buffer to read lid open flag (returns 0 or 1)
+ * @return 0 if ok, -1 on error
+ */
+int cros_ec_read_lid_switch(uint32_t *lid);
+
 CrosEc *new_cros_ec(CrosEcBusOps *bus, int devidx, GpioOps *interrupt_gpio);
 
 #endif