diff options
Diffstat (limited to 'src/mainboard')
-rw-r--r-- | src/mainboard/google/storm/mainboard.c | 28 |
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); +} |