diff options
author | Louis Yung-Chieh Lo <yjlou@chromium.org> | 2013-11-01 16:54:20 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2013-11-04 20:44:50 +0000 |
commit | e297b7256344a2365da7f5675eac3340a58f5955 (patch) | |
tree | 12d9e5432eaea3a3d6fca82612e43a6ba0255785 | |
parent | c1e02ca2203a7889539a88570e142f16cfd265a8 (diff) | |
download | chrome-ec-e297b7256344a2365da7f5675eac3340a58f5955.tar.gz |
Refine GPIO list of Nyan.
Refine the GPIO list according to the schematic. Comment out the XPSHOLD in
power/tegra.c for compiling. Will fix later.
BUG=None
BRANCH=None
TEST=emerge-nyan chromeos-ec &&
make runtests -j 32 && make BOARD=nyan tests -j 32
Change-Id: Id0d682fd5d48e8a8a07785e86c07f45f07d866ab
Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/175534
-rw-r--r-- | board/nyan/board.c | 15 | ||||
-rw-r--r-- | board/nyan/board.h | 8 | ||||
-rw-r--r-- | power/tegra.c | 17 |
3 files changed, 31 insertions, 9 deletions
diff --git a/board/nyan/board.c b/board/nyan/board.c index 0ea3c5020a..19cbfb08b1 100644 --- a/board/nyan/board.c +++ b/board/nyan/board.c @@ -28,8 +28,6 @@ const struct gpio_info gpio_list[] = { /* Inputs with interrupt handlers are first for efficiency */ {"KB_PWR_ON_L", GPIO_B, (1<<5), GPIO_INT_BOTH, power_interrupt}, - {"XPSHOLD", GPIO_A, (1<<3), GPIO_INT_BOTH, power_interrupt}, - {"CHARGER_INT", GPIO_C, (1<<6), GPIO_INT_RISING, NULL}, {"LID_OPEN", GPIO_C, (1<<13), GPIO_INT_BOTH, lid_interrupt}, {"SUSPEND_L", GPIO_C, (1<<7), GPIO_KB_INPUT, power_interrupt}, {"SPI1_NSS", GPIO_A, (1<<4), GPIO_INT_BOTH | GPIO_PULL_UP, @@ -62,7 +60,7 @@ const struct gpio_info gpio_list[] = { {"I2C1_SDA", GPIO_B, (1<<7), GPIO_ODR_HIGH, NULL}, {"I2C2_SCL", GPIO_B, (1<<10), GPIO_ODR_HIGH, NULL}, {"I2C2_SDA", GPIO_B, (1<<11), GPIO_ODR_HIGH, NULL}, - {"LED_POWER_L", GPIO_A, (1<<2), GPIO_OUT_HIGH, NULL}, + {"LED_POWER_L", GPIO_A, (1<<2), GPIO_OUT_HIGH, NULL}, {"PMIC_PWRON_L", GPIO_A, (1<<12), GPIO_OUT_HIGH, NULL}, {"PMIC_RESET", GPIO_A, (1<<15), GPIO_OUT_LOW, NULL}, {"KB_OUT00", GPIO_B, (1<<0), GPIO_KB_OUTPUT, NULL}, @@ -77,16 +75,21 @@ const struct gpio_info gpio_list[] = { {"KB_OUT09", GPIO_B, (1<<1), GPIO_KB_OUTPUT, NULL}, {"KB_OUT10", GPIO_C, (1<<5), GPIO_KB_OUTPUT, NULL}, {"KB_OUT11", GPIO_C, (1<<4), GPIO_KB_OUTPUT, NULL}, - {"KB_OUT12", GPIO_A, (1<<13), GPIO_KB_OUTPUT, NULL}, + {"KB_OUT12", GPIO_A, (1<<13), GPIO_KB_OUTPUT, NULL}, + {"PWR_LED0", GPIO_B, (1<<10), GPIO_OUT_LOW, NULL}, + {"PWR_LED1", GPIO_A, (1<<2), GPIO_OUT_LOW, NULL}, + {"BAT_LED0", GPIO_B, (1<<11), GPIO_OUT_LOW, NULL}, + {"BAT_LED1", GPIO_A, (1<<8), GPIO_OUT_LOW, NULL}, + {"CHARGING", GPIO_A, (1<<11), GPIO_OUT_LOW, NULL}, + {"EC_BL_OVERRIDE", GPIO_H, (1<<1), GPIO_ODR_LOW, NULL}, }; BUILD_ASSERT(ARRAY_SIZE(gpio_list) == GPIO_COUNT); /* Pins with alternate functions */ const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x0004, GPIO_ALT_TIM2, MODULE_POWER_LED}, {GPIO_A, 0x00f0, GPIO_ALT_SPI, MODULE_SPI}, {GPIO_A, 0x0600, GPIO_ALT_USART, MODULE_UART}, - {GPIO_B, 0x0cc0, GPIO_ALT_I2C, MODULE_I2C}, + {GPIO_B, 0x00c0, GPIO_ALT_I2C, MODULE_I2C}, }; const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); diff --git a/board/nyan/board.h b/board/nyan/board.h index d31eae6b48..8f90bd66ef 100644 --- a/board/nyan/board.h +++ b/board/nyan/board.h @@ -40,8 +40,6 @@ enum gpio_signal { /* Inputs with interrupt handlers are first for efficiency */ GPIO_KB_PWR_ON_L = 0, - GPIO_SOC1V8_XPSHOLD, - GPIO_CHARGER_INT, GPIO_LID_OPEN, GPIO_SUSPEND_L, GPIO_SPI1_NSS, @@ -82,6 +80,12 @@ enum gpio_signal { GPIO_KB_OUT10, GPIO_KB_OUT11, GPIO_KB_OUT12, + GPIO_PWR_LED0, + GPIO_PWR_LED1, + GPIO_BAT_LED0, + GPIO_BAT_LED1, + GPIO_CHARGING, + GPIO_EC_BL_OVERRIDE, /* Number of GPIOs; not an actual GPIO */ GPIO_COUNT }; diff --git a/power/tegra.c b/power/tegra.c index 18b39ea7fe..c955529c69 100644 --- a/power/tegra.c +++ b/power/tegra.c @@ -20,7 +20,6 @@ * released * - Holding pwron for 9s powers off the AP * - Pressing and releasing pwron within that 9s is ignored - * - If XPSHOLD is dropped by the AP, then we power the AP off */ #include "clock.h" @@ -45,6 +44,7 @@ /* Long power key press to force shutdown */ #define DELAY_FORCE_SHUTDOWN (9 * SECOND) +#ifdef TODO_XPSHOLD /* * If the power key is pressed to turn on, then held for this long, we * power off. @@ -54,6 +54,7 @@ * press or XPSHOLD == 0). */ #define DELAY_SHUTDOWN_ON_POWER_HOLD (9 * SECOND) +#endif /* TODO_XPSHOLD */ /* Maximum delay after power button press before we deassert GPIO_PMIC_PWRON */ #define DELAY_RELEASE_PWRON SECOND /* 1s */ @@ -61,11 +62,13 @@ /* debounce time to prevent accidental power-on after keyboard power off */ #define KB_PWR_ON_DEBOUNCE 250 /* 250us */ +#ifdef TODO_XPSHOLD /* * nyan's GPIO_SOC1V8_XPSHOLD will go low for ~20ms after initial high. * XPSHOLD_DEBOUNCE is used to wait this long, then check the signal again. */ #define XPSHOLD_DEBOUNCE (30 * 1000) /* 30 ms */ +#endif /* TODO_XPSHOLD */ /* Application processor power state */ static int ap_on; @@ -200,9 +203,11 @@ static int check_for_power_off_event(void) power_button_was_pressed = pressed; +#ifdef TODO_XPSHOLD /* XPSHOLD released by AP : shutdown immediately */ if (gpio_get_level(GPIO_SOC1V8_XPSHOLD) == 0) return 3; +#endif /* TODO_XPSHOLD */ return 0; } @@ -273,7 +278,9 @@ static int tegra_power_init(void) { /* Enable interrupts for our GPIOs */ gpio_enable_interrupt(GPIO_KB_PWR_ON_L); +#ifdef TODO_XPSHOLD gpio_enable_interrupt(GPIO_SOC1V8_XPSHOLD); +#endif /* TODO_XPSHOLD */ gpio_enable_interrupt(GPIO_SUSPEND_L); /* Leave power off only if requested by reset flags */ @@ -349,12 +356,14 @@ void chipset_force_shutdown(void) */ static int check_for_power_on_event(void) { +#ifdef TODO_XPSHOLD /* check if system is already ON */ if (gpio_get_level(GPIO_SOC1V8_XPSHOLD)) { CPRINTF("[%T system is on, thus clear auto_power_on]\n"); auto_power_on = 0; /* no need to arrange another power on */ return 1; } +#endif /* TODO_XPSHOLD */ /* power on requested at EC startup for recovery */ if (auto_power_on) { @@ -393,9 +402,11 @@ static int power_on(void) gpio_set_level(GPIO_AP_RESET_L, 1); set_pmic_pwrok(1); +#ifdef TODO_XPSHOLD if (gpio_get_level(GPIO_SOC1V8_XPSHOLD) == 0) /* Initialize non-AP components */ hook_notify(HOOK_CHIPSET_PRE_INIT); +#endif /* TODO_XPSHOLD */ ap_on = 1; disable_sleep(SLEEP_MASK_AP_RUN); @@ -427,6 +438,7 @@ static int wait_for_power_button_release(unsigned int timeout_us) return 0; } +#ifdef TODO_XPSHOLD /** * Wait for the XPSHOLD signal from the AP to be asserted within timeout_us * and if asserted clear the PMIC_PWRON signal @@ -454,6 +466,7 @@ static int react_to_xpshold(unsigned int timeout_us) CPRINTF("[%T XPSHOLD seen]\n"); return 0; } +#endif /* TODO_XPSHOLD */ /** * Power off the AP @@ -528,12 +541,14 @@ void chipset_task(void) if (!power_on()) { int continue_power = 0; +#ifdef TODO_XPSHOLD if (!react_to_xpshold(DELAY_RELEASE_PWRON)) { /* AP looks good */ if (!wait_for_power_button_release( DELAY_SHUTDOWN_ON_POWER_HOLD)) continue_power = 1; } +#endif /* TODO_XPSHOLD */ set_pmic_pwrok(0); if (continue_power) { power_button_was_pressed = 0; |