summaryrefslogtreecommitdiff
path: root/src/mainboard/google/storm
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainboard/google/storm')
-rw-r--r--src/mainboard/google/storm/mainboard.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/mainboard/google/storm/mainboard.c b/src/mainboard/google/storm/mainboard.c
index 94f3a92215..8982f919ae 100644
--- a/src/mainboard/google/storm/mainboard.c
+++ b/src/mainboard/google/storm/mainboard.c
@@ -19,7 +19,11 @@
#include <arch/cache.h>
#include <boot/coreboot_tables.h>
+#include <console/console.h>
#include <device/device.h>
+#include <delay.h>
+#include <string.h>
+
#include <soc/qualcomm/ipq806x/include/clock.h>
#include <soc/qualcomm/ipq806x/include/gpio.h>
#include <soc/qualcomm/ipq806x/include/usb.h>
@@ -93,3 +97,27 @@ void lb_board(struct lb_header *header)
dma->range_start = CONFIG_DRAM_DMA_START;
dma->range_size = CONFIG_DRAM_DMA_SIZE;
}
+
+static int read_gpio(gpio_t gpio_num)
+{
+ gpio_tlmm_config_set(gpio_num, GPIO_FUNC_DISABLE,
+ GPIO_NO_PULL, GPIO_2MA, GPIO_DISABLE);
+ udelay(10); /* Should be enough to settle. */
+ return gpio_get_in_value(gpio_num);
+}
+
+void fill_lb_gpios(struct lb_gpios *gpios)
+{
+ struct lb_gpio *gpio;
+ const int GPIO_COUNT = 5;
+
+ gpios->size = sizeof(*gpios) + (GPIO_COUNT * sizeof(struct lb_gpio));
+ gpios->count = GPIO_COUNT;
+
+ gpio = gpios->gpios;
+ fill_lb_gpio(gpio++, 15, ACTIVE_LOW, "developer", read_gpio(15));
+ fill_lb_gpio(gpio++, 16, ACTIVE_LOW, "recovery", read_gpio(16));
+ fill_lb_gpio(gpio++, 17, ACTIVE_LOW, "write protect", read_gpio(17));
+ fill_lb_gpio(gpio++, -1, ACTIVE_LOW, "power", 1);
+ fill_lb_gpio(gpio++, -1, ACTIVE_LOW, "lid", 0);
+}