diff options
author | Anton Staaf <robotboy@chromium.org> | 2014-07-14 15:33:29 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-07-17 00:39:52 +0000 |
commit | 7746b32e17571b0e0cbdcbd101787b742d35c825 (patch) | |
tree | 5b4374d93630dda800996687239aac5cec681dc7 | |
parent | 1e73a1ba06b7879de3b03c7cefec9135bf73fcf5 (diff) | |
download | chrome-ec-7746b32e17571b0e0cbdcbd101787b742d35c825.tar.gz |
GPIO: Move definition of alternate functions to gpio.inc
This is a straightforward conversion of existing tables
into X-Macro style definitions for the GPIO alternate
functions. This change in itself, is not particularly
powerful, but having all GPIO settings in a single file
makes a board easier to understand.
Signed-off-by: Anton Staaf <robotboy@chromium.org>
BRANCH=none
TEST=make buildall -j
Followed by manual testing of interrupt on change and UART
functionality on STM32F0 based discovery board.
Change-Id: Ib7f1f014f4bd289d7c0ac3100470ba2dc71ca579
Reviewed-on: https://chromium-review.googlesource.com/207987
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Tested-by: Anton Staaf <robotboy@chromium.org>
Commit-Queue: Anton Staaf <robotboy@chromium.org>
46 files changed, 190 insertions, 270 deletions
diff --git a/board/bds/board.c b/board/bds/board.c index 8f2142df09..e1ff649a6f 100644 --- a/board/bds/board.c +++ b/board/bds/board.c @@ -39,12 +39,3 @@ const struct i2c_port_t i2c_ports[] = { const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports); #include "gpio_list.h" - -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x03, 1, MODULE_UART}, /* UART0 */ - {GPIO_G, 0x40, 3, MODULE_I2C}, /* I2C5 SCL */ - {GPIO_G, 0x80, 3, GPIO_OPEN_DRAIN}, /* I2C5 SDA */ - {GPIO_B, 0x03, 1, MODULE_UART}, /* UART1 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); diff --git a/board/bds/gpio.inc b/board/bds/gpio.inc index f22d0d0d7a..06f290e53c 100644 --- a/board/bds/gpio.inc +++ b/board/bds/gpio.inc @@ -15,3 +15,8 @@ GPIO(DEBUG_LED, A, 7, GPIO_OUT_LOW, NULL) */ UNIMPLEMENTED(WP) /* Write protect input */ UNIMPLEMENTED(ENTERING_RW) /* EC entering RW code */ + +ALTERNATE(A, 0x03, 1, MODULE_UART, 0) /* UART0 */ +ALTERNATE(G, 0x40, 3, MODULE_I2C, 0) /* I2C5 SCL */ +ALTERNATE(G, 0x80, 3, GPIO_OPEN_DRAIN, 0) /* I2C5 SDA */ +ALTERNATE(B, 0x03, 1, MODULE_UART, 0) /* UART1 */ diff --git a/board/big/board.c b/board/big/board.c index e970a80aa2..ebc7f14a5e 100644 --- a/board/big/board.c +++ b/board/big/board.c @@ -29,14 +29,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x00f0, GPIO_ALT_SPI, MODULE_SPI, GPIO_DEFAULT}, - {GPIO_A, 0x0600, GPIO_ALT_USART, MODULE_UART, GPIO_DEFAULT}, - {GPIO_B, 0x00c0, GPIO_ALT_I2C, MODULE_I2C, GPIO_DEFAULT}, -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* power signal list. Must match order of enum power_signal. */ const struct power_signal_info power_signal_list[] = { {GPIO_SOC1V8_XPSHOLD, 1, "XPSHOLD"}, diff --git a/board/big/gpio.inc b/board/big/gpio.inc index f8cd6720a3..e35673e5fe 100644 --- a/board/big/gpio.inc +++ b/board/big/gpio.inc @@ -56,3 +56,7 @@ GPIO(CHARGING, A, 11, GPIO_OUT_LOW, NULL) GPIO(EC_BL_OVERRIDE, H, 1, GPIO_ODR_HIGH, NULL) GPIO(PMIC_THERM_L, A, 1, GPIO_ODR_HIGH, NULL) GPIO(PMIC_WARM_RESET_L, C, 3, GPIO_ODR_HIGH, NULL) + +ALTERNATE(A, 0x00f0, GPIO_ALT_SPI, MODULE_SPI, GPIO_DEFAULT) +ALTERNATE(A, 0x0600, GPIO_ALT_USART, MODULE_UART, GPIO_DEFAULT) +ALTERNATE(B, 0x00c0, GPIO_ALT_I2C, MODULE_I2C, GPIO_DEFAULT) diff --git a/board/discovery-stm32f072/board.c b/board/discovery-stm32f072/board.c index 546b07d8d9..9d736dcaf5 100644 --- a/board/discovery-stm32f072/board.c +++ b/board/discovery-stm32f072/board.c @@ -33,9 +33,3 @@ static void board_init(void) gpio_enable_interrupt(GPIO_USER_BUTTON); } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); - -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0xC000, 1, MODULE_UART}, /* USART2: PA14/PA15 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); diff --git a/board/discovery-stm32f072/gpio.inc b/board/discovery-stm32f072/gpio.inc index f3e2106452..d0bd0b2f3e 100644 --- a/board/discovery-stm32f072/gpio.inc +++ b/board/discovery-stm32f072/gpio.inc @@ -17,3 +17,5 @@ GPIO(LED_R, C, 9, GPIO_OUT_LOW, NULL) /* Unimplemented signals which we need to emulate for now */ UNIMPLEMENTED(ENTERING_RW) UNIMPLEMENTED(WP_L) + +ALTERNATE(A, 0xC000, 1, MODULE_UART, 0) /* USART2: PA14/PA15 */ diff --git a/board/discovery/board.c b/board/discovery/board.c index 5548577943..1821cb6f7c 100644 --- a/board/discovery/board.c +++ b/board/discovery/board.c @@ -23,9 +23,3 @@ static void board_init(void) gpio_enable_interrupt(GPIO_USER_BUTTON); } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); - -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x0600, GPIO_ALT_USART, MODULE_UART}, -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); diff --git a/board/discovery/gpio.inc b/board/discovery/gpio.inc index 4f09cc3ab3..91e4d9587b 100644 --- a/board/discovery/gpio.inc +++ b/board/discovery/gpio.inc @@ -15,3 +15,5 @@ GPIO(LED_GREEN, B, 7, GPIO_OUT_LOW, NULL) /* Unimplemented signals which we need to emulate for now */ UNIMPLEMENTED(ENTERING_RW) UNIMPLEMENTED(WP_L) + +ALTERNATE(A, 0x0600, GPIO_ALT_USART, MODULE_UART, 0) diff --git a/board/falco/board.c b/board/falco/board.c index a9eeee7723..4d04312816 100644 --- a/board/falco/board.c +++ b/board/falco/board.c @@ -33,24 +33,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x03, 1, MODULE_UART, GPIO_PULL_UP}, /* UART0 */ - {GPIO_A, 0x40, 3, MODULE_I2C}, /* I2C1 SCL */ - {GPIO_A, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C1 SDA */ - {GPIO_B, 0x04, 3, MODULE_I2C}, /* I2C0 SCL */ - {GPIO_B, 0x08, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C0 SDA */ - {GPIO_B, 0x40, 3, MODULE_I2C}, /* I2C5 SCL */ - {GPIO_B, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C5 SDA */ - {GPIO_G, 0x30, 1, MODULE_UART}, /* UART2 */ - {GPIO_J, 0x40, 1, MODULE_PECI}, /* PECI Tx */ - {GPIO_J, 0x80, 0, MODULE_PECI, GPIO_ANALOG}, /* PECI Rx */ - {GPIO_L, 0x3f, 15, MODULE_LPC}, /* LPC */ - {GPIO_M, 0x33, 15, MODULE_LPC}, /* LPC */ - {GPIO_N, 0x0c, 1, MODULE_PWM_FAN}, /* FAN0PWM2 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* power signal list. Must match order of enum power_signal. */ const struct power_signal_info power_signal_list[] = { {GPIO_PP5000_PGOOD, 1, "PGOOD_PP5000"}, diff --git a/board/falco/gpio.inc b/board/falco/gpio.inc index f4e714a5da..3356c2ae83 100644 --- a/board/falco/gpio.inc +++ b/board/falco/gpio.inc @@ -86,3 +86,17 @@ GPIO(PWR_LED_L, N, 6, GPIO_OUT_HIGH, NULL) /* Power LED */ GPIO(KB_LED_EN, D, 4, GPIO_OUT_LOW, NULL) /* Keyboard LED */ GPIO(BAT_LED0, D, 0, GPIO_OUT_LOW, NULL) /* Battery charger status */ GPIO(BAT_LED1, D, 1, GPIO_OUT_LOW, NULL) /* Battery charger status */ + +ALTERNATE(A, 0x03, 1, MODULE_UART, GPIO_PULL_UP) /* UART0 */ +ALTERNATE(A, 0x40, 3, MODULE_I2C, 0) /* I2C1 SCL */ +ALTERNATE(A, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C1 SDA */ +ALTERNATE(B, 0x04, 3, MODULE_I2C, 0) /* I2C0 SCL */ +ALTERNATE(B, 0x08, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C0 SDA */ +ALTERNATE(B, 0x40, 3, MODULE_I2C, 0) /* I2C5 SCL */ +ALTERNATE(B, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C5 SDA */ +ALTERNATE(G, 0x30, 1, MODULE_UART, 0) /* UART2 */ +ALTERNATE(J, 0x40, 1, MODULE_PECI, 0) /* PECI Tx */ +ALTERNATE(J, 0x80, 0, MODULE_PECI, GPIO_ANALOG) /* PECI Rx */ +ALTERNATE(L, 0x3f, 15, MODULE_LPC, 0) /* LPC */ +ALTERNATE(M, 0x33, 15, MODULE_LPC, 0) /* LPC */ +ALTERNATE(N, 0x0c, 1, MODULE_PWM_FAN, 0) /* FAN0PWM2 */ diff --git a/board/firefly/board.c b/board/firefly/board.c index e5a9277ca7..da660ee0bc 100644 --- a/board/firefly/board.c +++ b/board/firefly/board.c @@ -80,15 +80,6 @@ void board_config_pre_init(void) #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_B, 0x0008, 0, MODULE_USB_PD},/* SPI1: SCK(PB3) */ - {GPIO_B, 0x0200, 2, MODULE_USB_PD},/* TIM17_CH1: PB9) */ - {GPIO_A, 0x0600, 1, MODULE_UART, GPIO_PULL_UP},/* USART1: PA9/PA10 */ - {GPIO_B, 0x00c0, 1, MODULE_I2C}, /* I2C SLAVE:PB6/7 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* ADC channels */ const struct adc_t adc_channels[] = { /* USB PD CC lines sensing. Converted to mV (3300mV/4096). */ diff --git a/board/firefly/gpio.inc b/board/firefly/gpio.inc index bf4a70851a..49863406c0 100644 --- a/board/firefly/gpio.inc +++ b/board/firefly/gpio.inc @@ -59,3 +59,8 @@ GPIO(TP_F1, F, 1, GPIO_ODR_HIGH, NULL) /* Unimplemented signals which we need to emulate for now */ UNIMPLEMENTED(ENTERING_RW) UNIMPLEMENTED(WP_L) + +ALTERNATE(B, 0x0008, 0, MODULE_USB_PD, 0) /* SPI1: SCK(PB3) */ +ALTERNATE(B, 0x0200, 2, MODULE_USB_PD, 0) /* TIM17_CH1: PB9) */ +ALTERNATE(A, 0x0600, 1, MODULE_UART, GPIO_PULL_UP) /* USART1: PA9/PA10 */ +ALTERNATE(B, 0x00c0, 1, MODULE_I2C, 0) /* I2C SLAVE:PB6/7 */ diff --git a/board/fruitpie/board.c b/board/fruitpie/board.c index e734c5c2af..7cde9d9d98 100644 --- a/board/fruitpie/board.c +++ b/board/fruitpie/board.c @@ -47,15 +47,6 @@ static void board_init(void) } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_B, 0x2000, 0, MODULE_USB_PD},/* SPI2: SCK(PB13) */ - {GPIO_B, 0x0200, 2, MODULE_USB_PD},/* TIM17_CH1: PB9) */ - {GPIO_A, 0xC000, 1, MODULE_UART}, /* USART2: PA14/PA15 */ - {GPIO_B, 0x0cc0, 1, MODULE_I2C}, /* I2C SLAVE:PB6/7 MASTER:PB10/11 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* ADC channels */ const struct adc_t adc_channels[] = { /* USB PD CC lines sensing. Converted to mV (3300mV/4096). */ diff --git a/board/fruitpie/gpio.inc b/board/fruitpie/gpio.inc index ff41c5f212..39aabd455a 100644 --- a/board/fruitpie/gpio.inc +++ b/board/fruitpie/gpio.inc @@ -66,3 +66,8 @@ GPIO(TP11, F, 1, GPIO_ODR_HIGH, NULL) /* Unimplemented signals which we need to emulate for now */ UNIMPLEMENTED(ENTERING_RW) UNIMPLEMENTED(WP_L) + +ALTERNATE(B, 0x2000, 0, MODULE_USB_PD, 0) /* SPI2: SCK(PB13) */ +ALTERNATE(B, 0x0200, 2, MODULE_USB_PD, 0) /* TIM17_CH1: PB9) */ +ALTERNATE(A, 0xC000, 1, MODULE_UART, 0) /* USART2: PA14/PA15 */ +ALTERNATE(B, 0x0cc0, 1, MODULE_I2C, 0) /* I2C SLAVE:PB6/7 MASTER:PB10/11 */ diff --git a/board/host/board.c b/board/host/board.c index 407018a573..055fad8192 100644 --- a/board/host/board.c +++ b/board/host/board.c @@ -23,11 +23,6 @@ #include "gpio_list.h" -/* Pins with alternate functions; not on simulated host platform */ -const struct gpio_alt_func gpio_alt_funcs[] = { -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - test_mockable_static int dummy_temp_get_val(int idx, int *temp_ptr) { *temp_ptr = 0; diff --git a/board/it8380dev/board.c b/board/it8380dev/board.c index 51799ba46a..401a221c44 100644 --- a/board/it8380dev/board.c +++ b/board/it8380dev/board.c @@ -24,12 +24,6 @@ void test_interrupt(enum gpio_signal signal) #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_B, 0x03, 1, MODULE_UART, GPIO_PULL_UP}, /* UART0 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* Initialize board. */ static void board_init(void) { diff --git a/board/it8380dev/gpio.inc b/board/it8380dev/gpio.inc index dd8ffebde2..5091fdb3ef 100644 --- a/board/it8380dev/gpio.inc +++ b/board/it8380dev/gpio.inc @@ -30,3 +30,5 @@ GPIO(START_SW, E, 4, GPIO_INT_FALLING, test_interrupt) /* Unimplemented signals which we need to emulate for now */ UNIMPLEMENTED(ENTERING_RW) + +ALTERNATE(B, 0x03, 1, MODULE_UART, GPIO_PULL_UP) /* UART0 */ diff --git a/board/link/board.c b/board/link/board.c index f3e22f720e..8e2881a664 100644 --- a/board/link/board.c +++ b/board/link/board.c @@ -31,25 +31,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x03, 1, MODULE_UART}, /* UART0 */ - {GPIO_A, 0x40, 3, MODULE_I2C}, /* I2C1 SCL */ - {GPIO_A, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C1 SDA */ - {GPIO_B, 0x04, 3, MODULE_I2C}, /* I2C0 SCL */ - {GPIO_B, 0x08, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C0 SDA */ - {GPIO_B, 0x40, 3, MODULE_I2C}, /* I2C5 SCL */ - {GPIO_B, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C5 SDA */ - {GPIO_C, 0x30, 2, MODULE_UART}, /* UART1 */ - {GPIO_J, 0x40, 1, MODULE_PECI}, /* PECI Tx */ - {GPIO_J, 0x80, 0, MODULE_PECI, GPIO_ANALOG}, /* PECI Rx */ - {GPIO_K, 0x40, 1, MODULE_PWM_KBLIGHT}, /* FAN0PWM1 */ - {GPIO_L, 0x3f, 15, MODULE_LPC}, /* LPC */ - {GPIO_M, 0x33, 15, MODULE_LPC}, /* LPC */ - {GPIO_M, 0xc0, 1, MODULE_PWM_FAN}, /* FAN0PWM0 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* power signal list. Must match order of enum power_signal. */ const struct power_signal_info power_signal_list[] = { {GPIO_PGOOD_5VALW, 1, "PGOOD_5VALW"}, diff --git a/board/link/gpio.inc b/board/link/gpio.inc index 30d5116110..a7c909866f 100644 --- a/board/link/gpio.inc +++ b/board/link/gpio.inc @@ -80,3 +80,18 @@ GPIO(USB2_CTL2, D, 5, GPIO_OUT_LOW, NULL) /* USB charger port 2 CTL2 GPIO(USB2_CTL3, D, 6, GPIO_OUT_LOW, NULL) /* USB charger port 2 CTL3 output */ GPIO(USB2_ENABLE, D, 7, GPIO_OUT_LOW, NULL) /* USB charger port 2 enable */ GPIO(USB2_ILIM_SEL, E, 0, GPIO_OUT_LOW, NULL) /* USB charger port 2 ILIM_SEL output */ + +ALTERNATE(A, 0x03, 1, MODULE_UART, 0) /* UART0 */ +ALTERNATE(A, 0x40, 3, MODULE_I2C, 0) /* I2C1 SCL */ +ALTERNATE(A, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C1 SDA */ +ALTERNATE(B, 0x04, 3, MODULE_I2C, 0) /* I2C0 SCL */ +ALTERNATE(B, 0x08, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C0 SDA */ +ALTERNATE(B, 0x40, 3, MODULE_I2C, 0) /* I2C5 SCL */ +ALTERNATE(B, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C5 SDA */ +ALTERNATE(C, 0x30, 2, MODULE_UART, 0) /* UART1 */ +ALTERNATE(J, 0x40, 1, MODULE_PECI, 0) /* PECI Tx */ +ALTERNATE(J, 0x80, 0, MODULE_PECI, GPIO_ANALOG) /* PECI Rx */ +ALTERNATE(K, 0x40, 1, MODULE_PWM_KBLIGHT, 0) /* FAN0PWM1 */ +ALTERNATE(L, 0x3f, 15, MODULE_LPC, 0) /* LPC */ +ALTERNATE(M, 0x33, 15, MODULE_LPC, 0) /* LPC */ +ALTERNATE(M, 0xc0, 1, MODULE_PWM_FAN, 0) /* FAN0PWM0 */ diff --git a/board/mccroskey/board.c b/board/mccroskey/board.c index 20dff4a0b0..40993923ce 100644 --- a/board/mccroskey/board.c +++ b/board/mccroskey/board.c @@ -24,15 +24,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - /* - * TODO(crosbug.com/p/23494): Use this instead of hard-coded register - * writes in board_config_pre_init(). - */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - void board_config_pre_init(void) { uint32_t val; diff --git a/board/mec1322_evb/board.c b/board/mec1322_evb/board.c index 38ff53f332..7deae735b8 100644 --- a/board/mec1322_evb/board.c +++ b/board/mec1322_evb/board.c @@ -17,29 +17,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_PORT(16), 0x24, 1, MODULE_UART}, /* UART0 */ - {GPIO_PORT(3), (1 << 4), 3, MODULE_PWM_FAN}, - {GPIO_PORT(14), (1 << 0), 3, MODULE_PWM_FAN}, - /* - * I2C0: External pull-up resistors on EVB are too weak. Let's - * also enable internal pull-up here. - */ - {GPIO_PORT(1), 0x60, 2, MODULE_I2C, GPIO_PULL_UP}, - {GPIO_PORT(0), 0xfe, 3, MODULE_KEYBOARD_SCAN, GPIO_KB_OUTPUT}, - {GPIO_PORT(1), 0x03, 3, MODULE_KEYBOARD_SCAN, GPIO_KB_OUTPUT}, - {GPIO_PORT(3), 0x04, 3, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT}, - {GPIO_PORT(4), 0x0d, 3, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT}, - {GPIO_PORT(10), 0xd8, 3, MODULE_KEYBOARD_SCAN, GPIO_KB_OUTPUT}, - {GPIO_PORT(12), 0x60, 2, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT}, - {GPIO_PORT(14), 0x14, 3, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT}, - {GPIO_PORT(2), 0x20, 2, MODULE_LPC}, - {GPIO_PORT(12), 0x14, 1, MODULE_SPI}, - {GPIO_PORT(6), 0x10, 1, MODULE_SPI}, -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* ADC channels */ const struct adc_t adc_channels[] = { [ADC_CH_1] = {"ADC1", 1, 1, 0, MEC1322_ADC_CH(1)}, diff --git a/board/mec1322_evb/gpio.inc b/board/mec1322_evb/gpio.inc index b008e90a5c..35baf9c77d 100644 --- a/board/mec1322_evb/gpio.inc +++ b/board/mec1322_evb/gpio.inc @@ -24,3 +24,22 @@ GPIO(SHD_CS0, PORT(15), 0, GPIO_ODR_HIGH, NULL) UNIMPLEMENTED(RECOVERY_L) /* Recovery signal from DOWN button */ UNIMPLEMENTED(WP) /* Write protect input */ UNIMPLEMENTED(ENTERING_RW) /* EC entering RW code */ + +ALTERNATE(PORT(16), 0x24, 1, MODULE_UART, 0) /* UART0 */ +ALTERNATE(PORT(3), (1 << 4), 3, MODULE_PWM_FAN, 0) +ALTERNATE(PORT(14), (1 << 0), 3, MODULE_PWM_FAN, 0) +/* + * I2C0: External pull-up resistors on EVB are too weak. Let's + * also enable internal pull-up here. + */ +ALTERNATE(PORT(1), 0x60, 2, MODULE_I2C, GPIO_PULL_UP) +ALTERNATE(PORT(0), 0xfe, 3, MODULE_KEYBOARD_SCAN, GPIO_KB_OUTPUT) +ALTERNATE(PORT(1), 0x03, 3, MODULE_KEYBOARD_SCAN, GPIO_KB_OUTPUT) +ALTERNATE(PORT(3), 0x04, 3, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT) +ALTERNATE(PORT(4), 0x0d, 3, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT) +ALTERNATE(PORT(10), 0xd8, 3, MODULE_KEYBOARD_SCAN, GPIO_KB_OUTPUT) +ALTERNATE(PORT(12), 0x60, 2, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT) +ALTERNATE(PORT(14), 0x14, 3, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT) +ALTERNATE(PORT(2), 0x20, 2, MODULE_LPC, 0) +ALTERNATE(PORT(12), 0x14, 1, MODULE_SPI, 0) +ALTERNATE(PORT(6), 0x10, 1, MODULE_SPI, 0) diff --git a/board/nyan/board.c b/board/nyan/board.c index 89d6a72dd7..4c246cc520 100644 --- a/board/nyan/board.c +++ b/board/nyan/board.c @@ -28,14 +28,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x00f0, GPIO_ALT_SPI, MODULE_SPI, GPIO_DEFAULT}, - {GPIO_A, 0x0600, GPIO_ALT_USART, MODULE_UART, GPIO_DEFAULT}, - {GPIO_B, 0x00c0, GPIO_ALT_I2C, MODULE_I2C, GPIO_DEFAULT}, -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* power signal list. Must match order of enum power_signal. */ const struct power_signal_info power_signal_list[] = { {GPIO_SOC1V8_XPSHOLD, 1, "XPSHOLD"}, diff --git a/board/nyan/gpio.inc b/board/nyan/gpio.inc index f8cd6720a3..e35673e5fe 100644 --- a/board/nyan/gpio.inc +++ b/board/nyan/gpio.inc @@ -56,3 +56,7 @@ GPIO(CHARGING, A, 11, GPIO_OUT_LOW, NULL) GPIO(EC_BL_OVERRIDE, H, 1, GPIO_ODR_HIGH, NULL) GPIO(PMIC_THERM_L, A, 1, GPIO_ODR_HIGH, NULL) GPIO(PMIC_WARM_RESET_L, C, 3, GPIO_ODR_HIGH, NULL) + +ALTERNATE(A, 0x00f0, GPIO_ALT_SPI, MODULE_SPI, GPIO_DEFAULT) +ALTERNATE(A, 0x0600, GPIO_ALT_USART, MODULE_UART, GPIO_DEFAULT) +ALTERNATE(B, 0x00c0, GPIO_ALT_I2C, MODULE_I2C, GPIO_DEFAULT) diff --git a/board/peppy/board.c b/board/peppy/board.c index 0758daeec6..3a3a92d29f 100644 --- a/board/peppy/board.c +++ b/board/peppy/board.c @@ -32,22 +32,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x03, 1, MODULE_UART, GPIO_PULL_UP}, /* UART0 */ - {GPIO_B, 0x04, 3, MODULE_I2C}, /* I2C0 SCL */ - {GPIO_B, 0x08, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C0 SDA */ - {GPIO_B, 0x40, 3, MODULE_I2C}, /* I2C5 SCL */ - {GPIO_B, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C5 SDA */ - {GPIO_G, 0x30, 1, MODULE_UART}, /* UART2 */ - {GPIO_J, 0x40, 1, MODULE_PECI}, /* PECI Tx */ - {GPIO_J, 0x80, 0, MODULE_PECI, GPIO_ANALOG}, /* PECI Rx */ - {GPIO_L, 0x3f, 15, MODULE_LPC}, /* LPC */ - {GPIO_M, 0x33, 15, MODULE_LPC}, /* LPC */ - {GPIO_N, 0x0c, 1, MODULE_PWM_FAN}, /* FAN0PWM2 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* power signal list. Must match order of enum power_signal. */ const struct power_signal_info power_signal_list[] = { {GPIO_PP5000_PGOOD, 1, "PGOOD_PP5000"}, diff --git a/board/peppy/gpio.inc b/board/peppy/gpio.inc index 47c4b89a7d..3e275ec397 100644 --- a/board/peppy/gpio.inc +++ b/board/peppy/gpio.inc @@ -87,3 +87,15 @@ GPIO(BAT_LED0_L, D, 0, GPIO_ODR_HIGH, NULL) /* Battery charging LED - GPIO(BAT_LED1_L, N, 4, GPIO_ODR_HIGH, NULL) /* Battery charging LED - orange */ GPIO(PWR_LED0_L, D, 1, GPIO_ODR_HIGH, NULL) /* Power LED - blue */ GPIO(PWR_LED1_L, N, 6, GPIO_ODR_HIGH, NULL) /* Power LED - orange */ + +ALTERNATE(A, 0x03, 1, MODULE_UART, GPIO_PULL_UP) /* UART0 */ +ALTERNATE(B, 0x04, 3, MODULE_I2C, 0) /* I2C0 SCL */ +ALTERNATE(B, 0x08, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C0 SDA */ +ALTERNATE(B, 0x40, 3, MODULE_I2C, 0) /* I2C5 SCL */ +ALTERNATE(B, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C5 SDA */ +ALTERNATE(G, 0x30, 1, MODULE_UART, 0) /* UART2 */ +ALTERNATE(J, 0x40, 1, MODULE_PECI, 0) /* PECI Tx */ +ALTERNATE(J, 0x80, 0, MODULE_PECI, GPIO_ANALOG) /* PECI Rx */ +ALTERNATE(L, 0x3f, 15, MODULE_LPC, 0) /* LPC */ +ALTERNATE(M, 0x33, 15, MODULE_LPC, 0) /* LPC */ +ALTERNATE(N, 0x0c, 1, MODULE_PWM_FAN, 0) /* FAN0PWM2 */ diff --git a/board/pit/board.c b/board/pit/board.c index 08f5697cfc..7015a96d4f 100644 --- a/board/pit/board.c +++ b/board/pit/board.c @@ -26,14 +26,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x00f0, GPIO_ALT_SPI, MODULE_SPI}, - {GPIO_A, 0x0600, GPIO_ALT_USART, MODULE_UART}, - {GPIO_B, 0x0cc0, GPIO_ALT_I2C, MODULE_I2C}, -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* Battery temperature ranges in degrees C */ static const struct battery_info info = { .start_charging_min_c = 0, diff --git a/board/pit/gpio.inc b/board/pit/gpio.inc index 2f64bf01e3..8c00cab0bd 100644 --- a/board/pit/gpio.inc +++ b/board/pit/gpio.inc @@ -56,3 +56,7 @@ GPIO(KB_OUT09, B, 1, GPIO_KB_OUTPUT, NULL) GPIO(KB_OUT10, C, 5, GPIO_KB_OUTPUT, NULL) GPIO(KB_OUT11, C, 4, GPIO_KB_OUTPUT, NULL) GPIO(KB_OUT12, A, 13, GPIO_KB_OUTPUT, NULL) + +ALTERNATE(A, 0x00f0, GPIO_ALT_SPI, MODULE_SPI, 0) +ALTERNATE(A, 0x0600, GPIO_ALT_USART, MODULE_UART, 0) +ALTERNATE(B, 0x0cc0, GPIO_ALT_I2C, MODULE_I2C, 0) diff --git a/board/rambi/board.c b/board/rambi/board.c index 9810f5a0c5..35e5849b73 100644 --- a/board/rambi/board.c +++ b/board/rambi/board.c @@ -34,20 +34,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x03, 1, MODULE_UART}, /* UART0 */ - {GPIO_B, 0x04, 3, MODULE_I2C}, /* I2C0 SCL */ - {GPIO_B, 0x08, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C0 SDA */ - {GPIO_B, 0x40, 3, MODULE_I2C}, /* I2C5 SCL */ - {GPIO_B, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C5 SDA */ - {GPIO_D, 0x0f, 2, MODULE_SPI}, /* SPI1 */ - {GPIO_L, 0x3f, 15, MODULE_LPC}, /* LPC */ - {GPIO_M, 0x21, 15, MODULE_LPC}, /* LPC */ - {GPIO_N, 0x50, 1, MODULE_PWM_LED, GPIO_OPEN_DRAIN}, /* FAN0PWM 3&4 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* power signal list. Must match order of enum power_signal. */ const struct power_signal_info power_signal_list[] = { {GPIO_PP1050_PGOOD, 1, "PGOOD_PP1050"}, diff --git a/board/rambi/gpio.inc b/board/rambi/gpio.inc index cdeac22574..43a87ae928 100644 --- a/board/rambi/gpio.inc +++ b/board/rambi/gpio.inc @@ -65,3 +65,13 @@ GPIO(VCORE_EN, C, 5, GPIO_OUT_LOW, NULL) /* Enable core power suppli GPIO(WLAN_OFF_L, J, 4, GPIO_OUT_LOW, NULL) /* Disable WiFi radio */ GPIO(PCH_SCI_L, M, 1, GPIO_ODR_HIGH, NULL) /* Assert SCI to PCH */ GPIO(KBD_IRQ_L, M, 3, GPIO_ODR_HIGH, NULL) /* Negative edge triggered irq. */ + +ALTERNATE(A, 0x03, 1, MODULE_UART, 0) /* UART0 */ +ALTERNATE(B, 0x04, 3, MODULE_I2C, 0) /* I2C0 SCL */ +ALTERNATE(B, 0x08, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C0 SDA */ +ALTERNATE(B, 0x40, 3, MODULE_I2C, 0) /* I2C5 SCL */ +ALTERNATE(B, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C5 SDA */ +ALTERNATE(D, 0x0f, 2, MODULE_SPI, 0) /* SPI1 */ +ALTERNATE(L, 0x3f, 15, MODULE_LPC, 0) /* LPC */ +ALTERNATE(M, 0x21, 15, MODULE_LPC, 0) /* LPC */ +ALTERNATE(N, 0x50, 1, MODULE_PWM_LED, GPIO_OPEN_DRAIN) /* FAN0PWM 3&4 */ diff --git a/board/ryu/board.c b/board/ryu/board.c index 88ae11f796..7c6af05513 100644 --- a/board/ryu/board.c +++ b/board/ryu/board.c @@ -52,17 +52,6 @@ static void board_init(void) } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_B, 0x0008, 0, MODULE_USB_PD},/* SPI1: SCK(PB3) */ - {GPIO_B, 0x0002, 0, MODULE_USB_PD},/* TIM14_CH1: PB1 */ - {GPIO_B, 0x00C0, 0, MODULE_UART}, /* USART1: PB6/PB7 */ - {GPIO_A, 0xC000, 1, MODULE_UART}, /* USART2: PA14/PA15 */ - {GPIO_C, 0x0C00, 1, MODULE_UART}, /* USART3: PC10/PC11 */ - {GPIO_B, 0x0F00, 1, MODULE_I2C}, /* I2C SLAVE:PB10/11 MASTER:PB8/9 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* ADC channels */ const struct adc_t adc_channels[] = { /* Vbus sensing. Converted to mV, /10 voltage divider. */ diff --git a/board/ryu/gpio.inc b/board/ryu/gpio.inc index 2c90eb3303..c656550087 100644 --- a/board/ryu/gpio.inc +++ b/board/ryu/gpio.inc @@ -109,3 +109,10 @@ GPIO(SH_UART_RX, C, 10, GPIO_INPUT, NULL) GPIO(AP_UART_TX, B, 6, GPIO_OUT_LOW, NULL) GPIO(AP_UART_RX, B, 7, GPIO_INPUT, NULL) #endif + +ALTERNATE(B, 0x0008, 0, MODULE_USB_PD, 0) /* SPI1: SCK(PB3) */ +ALTERNATE(B, 0x0002, 0, MODULE_USB_PD, 0) /* TIM14_CH1: PB1 */ +ALTERNATE(B, 0x00C0, 0, MODULE_UART, 0) /* USART1: PB6/PB7 */ +ALTERNATE(A, 0xC000, 1, MODULE_UART, 0) /* USART2: PA14/PA15 */ +ALTERNATE(C, 0x0C00, 1, MODULE_UART, 0) /* USART3: PC10/PC11 */ +ALTERNATE(B, 0x0F00, 1, MODULE_I2C, 0) /* I2C SLAVE:PB10/11 MASTER:PB8/9 */ diff --git a/board/samus/board.c b/board/samus/board.c index 046ddfcc5e..06ddb8e0d7 100644 --- a/board/samus/board.c +++ b/board/samus/board.c @@ -46,28 +46,6 @@ static void pd_mcu_interrupt(enum gpio_signal signal) #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x03, 1, MODULE_UART}, /* UART0 */ - {GPIO_A, 0x40, 3, MODULE_I2C}, /* I2C1 SCL */ - {GPIO_A, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C1 SDA */ - {GPIO_B, 0x04, 3, MODULE_I2C}, /* I2C0 SCL */ - {GPIO_B, 0x08, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C0 SDA */ - {GPIO_B, 0x40, 3, MODULE_I2C}, /* I2C5 SCL */ - {GPIO_B, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C5 SDA */ - {GPIO_G, 0x30, 1, MODULE_UART}, /* UART2 */ - {GPIO_J, 0x40, 1, MODULE_PECI}, /* PECI Tx */ - {GPIO_J, 0x80, 0, MODULE_PECI, GPIO_ANALOG}, /* PECI Rx */ - {GPIO_L, 0x3f, 15, MODULE_LPC}, /* LPC */ - {GPIO_M, 0x33, 15, MODULE_LPC}, /* LPC */ -#ifdef HEY_USE_BUILTIN_CLKRUN - {GPIO_M, 0x04, 15, MODULE_LPC, GPIO_OPEN_DRAIN},/* LPC */ -#endif - {GPIO_N, 0x3c, 1, MODULE_PWM_FAN}, /* FAN0PWM 2&3 */ - {GPIO_N, 0x40, 1, MODULE_PWM_KBLIGHT}, /* FAN0PWM4 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* power signal list. Must match order of enum power_signal. */ const struct power_signal_info power_signal_list[] = { {GPIO_PP1050_PGOOD, 1, "PGOOD_PP1050"}, diff --git a/board/samus/gpio.inc b/board/samus/gpio.inc index d1c954a17a..d2a4754f52 100644 --- a/board/samus/gpio.inc +++ b/board/samus/gpio.inc @@ -97,3 +97,22 @@ GPIO(USB2_CTL2, D, 1, GPIO_OUT_HIGH, NULL) /* USB charger port 2 CTL2 GPIO(USB2_CTL3, D, 4, GPIO_OUT_LOW, NULL) /* USB charger port 2 CTL3 output */ GPIO(USB2_ENABLE, D, 5, GPIO_OUT_HIGH, NULL) /* USB charger port 2 enable */ GPIO(USB2_ILIM_SEL, D, 6, GPIO_OUT_LOW, NULL) /* USB charger port 2 ILIM_SEL output */ + +ALTERNATE(A, 0x03, 1, MODULE_UART, 0) /* UART0 */ +ALTERNATE(A, 0x40, 3, MODULE_I2C, 0) /* I2C1 SCL */ +ALTERNATE(A, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C1 SDA */ +ALTERNATE(B, 0x04, 3, MODULE_I2C, 0) /* I2C0 SCL */ +ALTERNATE(B, 0x08, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C0 SDA */ +ALTERNATE(B, 0x40, 3, MODULE_I2C, 0) /* I2C5 SCL */ +ALTERNATE(B, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C5 SDA */ +ALTERNATE(G, 0x30, 1, MODULE_UART, 0) /* UART2 */ +ALTERNATE(J, 0x40, 1, MODULE_PECI, 0) /* PECI Tx */ +ALTERNATE(J, 0x80, 0, MODULE_PECI, GPIO_ANALOG) /* PECI Rx */ +ALTERNATE(L, 0x3f, 15, MODULE_LPC, 0) /* LPC */ +ALTERNATE(M, 0x33, 15, MODULE_LPC, 0) /* LPC */ +#ifdef HEY_USE_BUILTIN_CLKRUN +ALTERNATE(M, 0x04, 15, MODULE_LPC, GPIO_OPEN_DRAIN) /* LPC */ +#endif + +ALTERNATE(N, 0x3c, 1, MODULE_PWM_FAN, 0) /* FAN0PWM 2&3 */ +ALTERNATE(N, 0x40, 1, MODULE_PWM_KBLIGHT, 0) /* FAN0PWM4 */ diff --git a/board/samus_pd/board.c b/board/samus_pd/board.c index cb6431d6ff..6f7e8a211e 100644 --- a/board/samus_pd/board.c +++ b/board/samus_pd/board.c @@ -119,19 +119,6 @@ static void board_init(void) } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_B, 0x0008, 0, MODULE_USB_PD},/* SPI1: SCK(PB3) */ - {GPIO_B, 0x2000, 0, MODULE_USB_PD},/* SPI2: SCK(PB13) */ - {GPIO_B, 0x0002, 0, MODULE_USB_PD},/* TIM14_CH1: PB1) */ - {GPIO_E, 0x0002, 0, MODULE_USB_PD},/* TIM17_CH1: PE1) */ - {GPIO_A, 0x0600, 1, MODULE_UART}, /* USART1: PA9/PA10 */ - {GPIO_D, 0x0060, 0, MODULE_UART}, /* USART2: PD5/PD6 */ - {GPIO_C, 0x0030, 1, MODULE_UART}, /* USART3: PC4/PC5 */ - {GPIO_B, 0x0cc0, 1, MODULE_I2C}, /* I2C SLAVE:PB6/7 MASTER:PB10/11 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* ADC channels */ const struct adc_t adc_channels[] = { /* USB PD CC lines sensing. Converted to mV (3300mV/4096). */ diff --git a/board/samus_pd/gpio.inc b/board/samus_pd/gpio.inc index 7da19454af..03480d517f 100644 --- a/board/samus_pd/gpio.inc +++ b/board/samus_pd/gpio.inc @@ -121,3 +121,12 @@ GPIO(AP_UART_RX, D, 6, GPIO_INPUT, NULL) /* Unimplemented signals which we need to emulate for now */ UNIMPLEMENTED(ENTERING_RW) UNIMPLEMENTED(WP_L) + +ALTERNATE(B, 0x0008, 0, MODULE_USB_PD, 0) /* SPI1: SCK(PB3) */ +ALTERNATE(B, 0x2000, 0, MODULE_USB_PD, 0) /* SPI2: SCK(PB13) */ +ALTERNATE(B, 0x0002, 0, MODULE_USB_PD, 0) /* TIM14_CH1: PB1) */ +ALTERNATE(E, 0x0002, 0, MODULE_USB_PD, 0) /* TIM17_CH1: PE1) */ +ALTERNATE(A, 0x0600, 1, MODULE_UART, 0) /* USART1: PA9/PA10 */ +ALTERNATE(D, 0x0060, 0, MODULE_UART, 0) /* USART2: PD5/PD6 */ +ALTERNATE(C, 0x0030, 1, MODULE_UART, 0) /* USART3: PC4/PC5 */ +ALTERNATE(B, 0x0cc0, 1, MODULE_I2C, 0) /* I2C SLAVE:PB6/7 MASTER:PB10/11 */ diff --git a/board/snow/board.c b/board/snow/board.c index 058c95feb2..c356378fb1 100644 --- a/board/snow/board.c +++ b/board/snow/board.c @@ -33,15 +33,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - /* - * TODO(crosbug.com/p/21618): use this instead of hard-coded register - * writes in board_config_pre_init(). - */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* Battery temperature ranges in degrees C */ static const struct battery_info info = { .start_charging_min_c = 0, diff --git a/board/spring/board.c b/board/spring/board.c index fc8879694c..b501574cd1 100644 --- a/board/spring/board.c +++ b/board/spring/board.c @@ -33,15 +33,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - /* - * TODO(crosbug.com/p/21618): use this instead of hard-coded register - * writes in board_config_pre_init(). - */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* ADC channels */ const struct adc_t adc_channels[] = { /* diff --git a/board/squawks/board.c b/board/squawks/board.c index f199e99d3e..292dc31ee6 100644 --- a/board/squawks/board.c +++ b/board/squawks/board.c @@ -34,21 +34,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x03, 1, MODULE_UART}, /* UART0 */ - {GPIO_B, 0x04, 3, MODULE_I2C}, /* I2C0 SCL */ - {GPIO_B, 0x08, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C0 SDA */ - {GPIO_B, 0x40, 3, MODULE_I2C}, /* I2C5 SCL */ - {GPIO_B, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN}, /* I2C5 SDA */ - {GPIO_D, 0x0f, 2, MODULE_SPI}, /* SPI1 */ - {GPIO_L, 0x3f, 15, MODULE_LPC}, /* LPC */ - {GPIO_M, 0x21, 15, MODULE_LPC}, /* LPC */ - {GPIO_N, 0x50, 1, MODULE_PWM_LED, GPIO_OPEN_DRAIN}, /* FAN0PWM 3&4 */ - {GPIO_M, 0x40, 1, MODULE_PWM_LED, GPIO_OPEN_DRAIN}, /* FAN0PWM0 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* power signal list. Must match order of enum power_signal. */ const struct power_signal_info power_signal_list[] = { {GPIO_PP1050_PGOOD, 1, "PGOOD_PP1050"}, diff --git a/board/squawks/gpio.inc b/board/squawks/gpio.inc index 8707c8f9cc..a479672acc 100644 --- a/board/squawks/gpio.inc +++ b/board/squawks/gpio.inc @@ -65,3 +65,14 @@ GPIO(VCORE_EN, C, 5, GPIO_OUT_LOW, NULL) /* Enable core power suppli GPIO(WLAN_OFF_L, J, 4, GPIO_OUT_LOW, NULL) /* Disable WiFi radio */ GPIO(PCH_SCI_L, M, 1, GPIO_ODR_HIGH, NULL) /* Assert SCI to PCH */ GPIO(KBD_IRQ_L, M, 3, GPIO_ODR_HIGH, NULL) /* Negative edge triggered irq. */ + +ALTERNATE(A, 0x03, 1, MODULE_UART, 0) /* UART0 */ +ALTERNATE(B, 0x04, 3, MODULE_I2C, 0) /* I2C0 SCL */ +ALTERNATE(B, 0x08, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C0 SDA */ +ALTERNATE(B, 0x40, 3, MODULE_I2C, 0) /* I2C5 SCL */ +ALTERNATE(B, 0x80, 3, MODULE_I2C, GPIO_OPEN_DRAIN) /* I2C5 SDA */ +ALTERNATE(D, 0x0f, 2, MODULE_SPI, 0) /* SPI1 */ +ALTERNATE(L, 0x3f, 15, MODULE_LPC, 0) /* LPC */ +ALTERNATE(M, 0x21, 15, MODULE_LPC, 0) /* LPC */ +ALTERNATE(N, 0x50, 1, MODULE_PWM_LED, GPIO_OPEN_DRAIN) /* FAN0PWM 3&4 */ +ALTERNATE(M, 0x40, 1, MODULE_PWM_LED, GPIO_OPEN_DRAIN) /* FAN0PWM0 */ diff --git a/board/twinkie/board.c b/board/twinkie/board.c index 5e8e2773e0..669533465b 100644 --- a/board/twinkie/board.c +++ b/board/twinkie/board.c @@ -54,15 +54,6 @@ static void board_init(void) } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x0020, 0, MODULE_USB_PD},/* SPI1: SCK(PA5) */ - {GPIO_B, 0x0200, 2, MODULE_USB_PD},/* TIM17_CH1: PB9 */ - {GPIO_A, 0x0600, 1, MODULE_UART, GPIO_PULL_UP}, /* USART1: PA9/PA10 */ - {GPIO_B, 0x00C0, 1, MODULE_I2C}, /* I2C1 MASTER:PB6/7 */ -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* ADC channels */ const struct adc_t adc_channels[] = { /* USB PD CC lines sensing. Converted to mV (3300mV/4096). */ diff --git a/board/twinkie/gpio.inc b/board/twinkie/gpio.inc index 405d6f3b6b..cfb565c753 100644 --- a/board/twinkie/gpio.inc +++ b/board/twinkie/gpio.inc @@ -39,3 +39,8 @@ GPIO(CC2_RP3A0, C, 15, GPIO_ODR_HIGH, NULL) /* Unimplemented signals which we need to emulate for now */ UNIMPLEMENTED(ENTERING_RW) UNIMPLEMENTED(WP_L) + +ALTERNATE(A, 0x0020, 0, MODULE_USB_PD, 0) /* SPI1: SCK(PA5) */ +ALTERNATE(B, 0x0200, 2, MODULE_USB_PD, 0) /* TIM17_CH1: PB9 */ +ALTERNATE(A, 0x0600, 1, MODULE_UART, GPIO_PULL_UP) /* USART1: PA9/PA10 */ +ALTERNATE(B, 0x00C0, 1, MODULE_I2C, 0) /* I2C1 MASTER:PB6/7 */ diff --git a/board/veyron/board.c b/board/veyron/board.c index b20f921274..78a5df10bc 100644 --- a/board/veyron/board.c +++ b/board/veyron/board.c @@ -29,14 +29,6 @@ #include "gpio_list.h" -/* Pins with alternate functions */ -const struct gpio_alt_func gpio_alt_funcs[] = { - {GPIO_A, 0x00f0, GPIO_ALT_SPI, MODULE_SPI, GPIO_DEFAULT}, - {GPIO_A, 0x0600, GPIO_ALT_USART, MODULE_UART, GPIO_DEFAULT}, - {GPIO_B, 0x00c0, GPIO_ALT_I2C, MODULE_I2C, GPIO_DEFAULT}, -}; -const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); - /* power signal list. Must match order of enum power_signal. */ const struct power_signal_info power_signal_list[] = { {GPIO_SOC1V8_XPSHOLD, 1, "XPSHOLD"}, diff --git a/board/veyron/gpio.inc b/board/veyron/gpio.inc index f8cd6720a3..e35673e5fe 100644 --- a/board/veyron/gpio.inc +++ b/board/veyron/gpio.inc @@ -56,3 +56,7 @@ GPIO(CHARGING, A, 11, GPIO_OUT_LOW, NULL) GPIO(EC_BL_OVERRIDE, H, 1, GPIO_ODR_HIGH, NULL) GPIO(PMIC_THERM_L, A, 1, GPIO_ODR_HIGH, NULL) GPIO(PMIC_WARM_RESET_L, C, 3, GPIO_ODR_HIGH, NULL) + +ALTERNATE(A, 0x00f0, GPIO_ALT_SPI, MODULE_SPI, GPIO_DEFAULT) +ALTERNATE(A, 0x0600, GPIO_ALT_USART, MODULE_UART, GPIO_DEFAULT) +ALTERNATE(B, 0x00c0, GPIO_ALT_I2C, MODULE_I2C, GPIO_DEFAULT) diff --git a/include/gpio.wrap b/include/gpio.wrap index 941d97ac67..cf4fbb319a 100644 --- a/include/gpio.wrap +++ b/include/gpio.wrap @@ -16,7 +16,24 @@ * parameters are passed on to the gpio_info directly. */ #ifndef GPIO -#define GPIO(name, port, pin, function, signal) +#define GPIO(name, port, pin, flags, signal) +#endif + +/* + * The ALTERNATE macro is used associate a GPIO with an alternate function. + * + * Alternate functions allow hardware peripherals access to GPIO pins. + * Modules use gpio_config_module to enable and disable the alternate functions + * of GPIOs assigned to that module. So if the module parameter is MODULE_UART + * then when the uart_init function is called the GPIO will be switched to its + * alternate function mode. The function parameter is chip/variant specific + * and will usually need to be looked up in the datasheet. The flags parameter + * has the same meaning as in the GPIO macro above. This macro can assign + * multiple pins on the same port to a module, the second parameter is the + * bitmask of pins to be assigned. + */ +#ifndef ALTERNATE +#define ALTERNATE(port, mask, function, module, flags) #endif /* @@ -44,4 +61,5 @@ * Once the gpio.inc file has been included these macros are no longer needed. */ #undef GPIO +#undef ALTERNATE #undef UNIMPLEMENTED diff --git a/include/gpio_list.h b/include/gpio_list.h index 6d41fb9115..9077c17fd2 100644 --- a/include/gpio_list.h +++ b/include/gpio_list.h @@ -15,3 +15,16 @@ const struct gpio_info gpio_list[] = { }; BUILD_ASSERT(ARRAY_SIZE(gpio_list) == GPIO_COUNT); + +/* + * Construct the gpio_alt_funcs array. This array is used by gpio_config_module + * to enable and disable GPIO alternate functions on a module by module basis. + */ +#define ALTERNATE(port, mask, function, module, flags) \ + {GPIO_##port, mask, function, module, flags}, + +const struct gpio_alt_func gpio_alt_funcs[] = { + #include "gpio.wrap" +}; + +const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); |