diff options
author | Edward Hill <ecgh@chromium.org> | 2018-03-15 17:40:55 -0600 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-03-16 15:56:25 -0700 |
commit | 27a0cf0233090737079373604da1469fafb6869a (patch) | |
tree | 86756236c81a9d6b318ef4f3e4a6cd35dcf6a317 /board/grunt | |
parent | 43d0769918a0c674423227bb9e81226a0dba6274 (diff) | |
download | chrome-ec-27a0cf0233090737079373604da1469fafb6869a.tar.gz |
grunt: GPIO changes for board version 2
Define GPIOs for board versions 0 and 2. Read version in board_init()
and configure GPIOs correctly.
BUG=b:74538637
BRANCH=none
TEST=build + boot grunt (version 0)
Change-Id: I1ff23d5c114cb12e3a32ef069f5e5dff50640d3f
Signed-off-by: Edward Hill <ecgh@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/966591
Reviewed-by: Martin Roth <martinroth@chromium.org>
Diffstat (limited to 'board/grunt')
-rw-r--r-- | board/grunt/board.c | 52 | ||||
-rw-r--r-- | board/grunt/board.h | 11 | ||||
-rw-r--r-- | board/grunt/gpio.inc | 16 |
3 files changed, 55 insertions, 24 deletions
diff --git a/board/grunt/board.c b/board/grunt/board.c index f7039c5a6a..b9b477f19a 100644 --- a/board/grunt/board.c +++ b/board/grunt/board.c @@ -47,13 +47,20 @@ #include "usbc_ppc.h" #include "util.h" +/* + * These GPIOs change pins depending on board version. They are configured + * in board_init. + */ +static enum gpio_signal gpio_usb_c1_oc_l = GPIO_USB_C1_OC_L_V2; +static enum gpio_signal gpio_usb_c0_pd_rst_l = GPIO_USB_C0_PD_RST_L_V2; + #define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) #define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) static void tcpc_alert_event(enum gpio_signal signal) { if ((signal == GPIO_USB_C0_PD_INT_ODL) && - !gpio_get_level(GPIO_USB_C0_PD_RST_L)) + !gpio_get_level(gpio_usb_c0_pd_rst_l)) return; if ((signal == GPIO_USB_C1_PD_INT_ODL) && @@ -70,7 +77,7 @@ static void tcpc_alert_event(enum gpio_signal signal) static void anx74xx_cable_det_handler(void) { int cable_det = gpio_get_level(GPIO_USB_C0_CABLE_DET); - int reset_n = gpio_get_level(GPIO_USB_C0_PD_RST_L); + int reset_n = gpio_get_level(gpio_usb_c0_pd_rst_l); /* * A cable_det low->high transition was detected. If following the @@ -116,7 +123,11 @@ const struct adc_t adc_channels[] = { [ADC_TEMP_SENSOR_SOC] = { "SOC", NPCX_ADC_CH1, ADC_MAX_VOLT, ADC_READ_MAX+1, 0 }, + [ADC_VBUS] = { + "VBUS", NPCX_ADC_CH8, ADC_MAX_VOLT*10, ADC_READ_MAX+1, 0 + }, }; +BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); /* Power signal list. Must match order of enum power_signal. */ const struct power_signal_info power_signal_list[] = { @@ -161,7 +172,7 @@ uint16_t tcpc_get_alert_status(void) uint16_t status = 0; if (!gpio_get_level(GPIO_USB_C0_PD_INT_ODL)) { - if (gpio_get_level(GPIO_USB_C0_PD_RST_L)) + if (gpio_get_level(gpio_usb_c0_pd_rst_l)) status |= PD_STATUS_TCPC_ALERT_0; } @@ -204,7 +215,7 @@ const unsigned int ppc_cnt = ARRAY_SIZE(ppc_chips); /* BC 1.2 chip Configuration */ const struct bq24392_config_t bq24392_config[CONFIG_USB_PD_PORT_COUNT] = { [USB_PD_PORT_ANX74XX] = { - .chip_enable_pin = GPIO_USB_C0_BC12_VBUS_ON_L, + .chip_enable_pin = GPIO_USB_C0_BC12_VBUS_ON_L_V2, .chg_det_pin = GPIO_USB_C0_BC12_CHG_DET, .flags = BQ24392_FLAGS_ENABLE_ACTIVE_LOW, }, @@ -215,13 +226,31 @@ const struct bq24392_config_t bq24392_config[CONFIG_USB_PD_PORT_COUNT] = { }, }; -const int usb_port_enable[CONFIG_USB_PORT_POWER_SMART_PORT_COUNT] = { +const int usb_port_enable[USB_PORT_COUNT] = { GPIO_EN_USB_A0_5V, GPIO_EN_USB_A1_5V, }; static void board_init(void) { + if (system_get_board_version() < 2) { + /* + * These GPIOs change pins depending on board version. Change + * them here from the V2 pin to the V0 pin. + */ + gpio_usb_c1_oc_l = GPIO_USB_C1_OC_L_V0; + gpio_usb_c0_pd_rst_l = GPIO_USB_C0_PD_RST_L_V0; + } else { + /* Alternate functions for board version 2 only. */ + gpio_set_alternate_function(GPIO_F, 0x02, 1); /* ADC8 */ + gpio_set_alternate_function(GPIO_0, 0x10, 0); /* KSO_13 */ + gpio_set_alternate_function(GPIO_8, 0x04, 0); /* KSO_14 */ + } + + /* Now that we know which pin to use, set the correct output mode. */ + gpio_set_flags(gpio_usb_c1_oc_l, GPIO_OUT_HIGH); + gpio_set_flags(gpio_usb_c0_pd_rst_l, GPIO_OUT_HIGH); + /* Enable Gyro interrupts */ gpio_enable_interrupt(GPIO_6AXIS_INT_L); } @@ -286,10 +315,10 @@ void board_set_tcpc_power_mode(int port, int mode) case ANX74XX_NORMAL_MODE: gpio_set_level(GPIO_EN_USB_C0_TCPC_PWR, 1); msleep(ANX74XX_PWR_H_RST_H_DELAY_MS); - gpio_set_level(GPIO_USB_C0_PD_RST_L, 1); + gpio_set_level(gpio_usb_c0_pd_rst_l, 1); break; case ANX74XX_STANDBY_MODE: - gpio_set_level(GPIO_USB_C0_PD_RST_L, 0); + gpio_set_level(gpio_usb_c0_pd_rst_l, 0); msleep(ANX74XX_RST_L_PWR_L_DELAY_MS); gpio_set_level(GPIO_EN_USB_C0_TCPC_PWR, 0); msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS); @@ -305,7 +334,7 @@ void board_reset_pd_mcu(void) gpio_set_level(GPIO_USB_C1_PD_RST_L, 0); /* Assert reset to TCPC0 (anx3429) */ - gpio_set_level(GPIO_USB_C0_PD_RST_L, 0); + gpio_set_level(gpio_usb_c0_pd_rst_l, 0); /* TCPC1 (ps8751) requires 1ms reset down assertion */ msleep(MAX(1, ANX74XX_RST_L_PWR_L_DELAY_MS)); @@ -342,7 +371,10 @@ void board_tcpc_init(void) /* Enable PPC interrupts. */ gpio_enable_interrupt(GPIO_USB_C0_SWCTL_INT_ODL); - gpio_enable_interrupt(GPIO_USB_C1_SWCTL_INT_ODL); + if (system_get_board_version() < 2) + gpio_enable_interrupt(GPIO_USB_C1_SWCTL_INT_ODL_V0); + else + gpio_enable_interrupt(GPIO_USB_C1_SWCTL_INT_ODL_V2); /* Enable TCPC interrupts. */ gpio_enable_interrupt(GPIO_USB_C0_PD_INT_ODL); @@ -367,7 +399,7 @@ DECLARE_HOOK(HOOK_INIT, board_tcpc_init, HOOK_PRIO_INIT_I2C + 1); void board_overcurrent_event(int port) { enum gpio_signal signal = (port == 0) ? GPIO_USB_C0_OC_L - : GPIO_USB_C1_OC_L; + : gpio_usb_c1_oc_l; gpio_set_level(signal, 0); diff --git a/board/grunt/board.h b/board/grunt/board.h index 824e7d7714..65e3d1ebb5 100644 --- a/board/grunt/board.h +++ b/board/grunt/board.h @@ -92,19 +92,15 @@ #define CONFIG_USB_PD_TCPM_TCPCI #define CONFIG_USB_PD_TRY_SRC #define CONFIG_USB_PD_VBUS_DETECT_PPC -#define CONFIG_USB_PD_VBUS_MEASURE_NOT_PRESENT #define CONFIG_USBC_PPC_SN5S330 #define CONFIG_USBC_SS_MUX #define CONFIG_USBC_SS_MUX_DFP_ONLY #define CONFIG_USBC_VCONN #define CONFIG_USBC_VCONN_SWAP -/* USB Type-A Port BC1.2 support */ -#define CONFIG_USB_PORT_POWER_SMART -#define CONFIG_USB_PORT_POWER_SMART_CDP_SDP_ONLY -#define CONFIG_USB_PORT_POWER_SMART_INVERTED -#define GPIO_USB1_ILIM_SEL GPIO_USB_A0_CHARGE_EN_L -#define GPIO_USB2_ILIM_SEL GPIO_USB_A1_CHARGE_EN_L +/* USB-A config */ +#define CONFIG_USB_PORT_POWER_DUMB +#define USB_PORT_COUNT 2 /* TODO(b/69683108): Use correct PD delay values */ #define PD_POWER_SUPPLY_TURN_ON_DELAY 30000 /* us */ @@ -176,6 +172,7 @@ enum adc_channel { ADC_TEMP_SENSOR_CHARGER, ADC_TEMP_SENSOR_SOC, + ADC_VBUS, ADC_CH_COUNT }; diff --git a/board/grunt/gpio.inc b/board/grunt/gpio.inc index 3f4ddfde57..458cd6a41a 100644 --- a/board/grunt/gpio.inc +++ b/board/grunt/gpio.inc @@ -11,11 +11,12 @@ GPIO_INT(USB_C0_PD_INT_ODL, PIN(A, 0), GPIO_INT_FALLING, tcpc_alert_event) GPIO_INT(USB_C1_PD_INT_ODL, PIN(F, 5), GPIO_INT_FALLING, tcpc_alert_event) GPIO_INT(USB_C0_SWCTL_INT_ODL, PIN(0, 3), GPIO_INT_FALLING, ppc_interrupt) -GPIO_INT(USB_C1_SWCTL_INT_ODL, PIN(0, 4), GPIO_INT_FALLING, ppc_interrupt) +GPIO_INT(USB_C1_SWCTL_INT_ODL_V0, PIN(0, 4), GPIO_INT_FALLING, ppc_interrupt) +GPIO_INT(USB_C1_SWCTL_INT_ODL_V2, PIN(D, 4), GPIO_INT_FALLING, ppc_interrupt) GPIO_INT(PCH_SLP_S3_L, PIN(A, 6), GPIO_INT_BOTH, power_signal_interrupt) GPIO_INT(PCH_SLP_S5_L, PIN(A, 3), GPIO_INT_BOTH, power_signal_interrupt) GPIO_INT(VGATE, PIN(F, 4), GPIO_INT_BOTH, power_signal_interrupt) -GPIO_INT(SPOK, PIN(6, 3), GPIO_INT_BOTH, power_signal_interrupt) +GPIO_INT(SPOK, PIN(6, 3), GPIO_INT_BOTH | GPIO_PULL_UP, power_signal_interrupt) GPIO_INT(POWER_BUTTON_L, PIN(0, 1), GPIO_INT_BOTH, power_button_interrupt) GPIO_INT(LID_OPEN, PIN(D, 2), GPIO_INT_BOTH | GPIO_HIB_WAKE_HIGH, lid_interrupt) GPIO_INT(AC_PRESENT, PIN(0, 0), GPIO_INT_BOTH | GPIO_HIB_WAKE_HIGH, extpower_interrupt) @@ -70,14 +71,15 @@ GPIO(PCH_SLP_S0_L, PIN(A, 4), GPIO_INPUT) GPIO(EN_USB_A0_5V, PIN(6, 1), GPIO_OUT_LOW) /* Enable A0 5V Charging */ GPIO(EN_USB_A1_5V, PIN(C, 0), GPIO_OUT_LOW) /* Enable A1 5V Charging */ -GPIO(USB_A0_CHARGE_EN_L, PIN(4, 0), GPIO_OUT_HIGH) /* Enable A0 1.5A Charging */ -GPIO(USB_A1_CHARGE_EN_L, PIN(D, 4), GPIO_OUT_HIGH) /* Enable A1 1.5A Charging */ GPIO(EN_USB_C0_TCPC_PWR, PIN(6, 0), GPIO_OUT_LOW) /* Enable C0 TCPC Power */ GPIO(USB_C0_OC_L, PIN(7, 3), GPIO_OUT_HIGH) /* C0 Over Current */ -GPIO(USB_C1_OC_L, PIN(D, 7), GPIO_OUT_HIGH) /* C1 Over Current */ -GPIO(USB_C0_PD_RST_L, PIN(F, 1), GPIO_OUT_HIGH) /* C0 PD Reset */ +GPIO(USB_C1_OC_L_V0, PIN(D, 7), GPIO_INPUT) /* C1 Over Current */ +GPIO(USB_C1_OC_L_V2, PIN(7, 2), GPIO_INPUT) /* C1 Over Current */ +GPIO(USB_C0_PD_RST_L_V0, PIN(F, 1), GPIO_INPUT) /* C0 PD Reset */ +GPIO(USB_C0_PD_RST_L_V2, PIN(3, 2), GPIO_INPUT) /* C0 PD Reset */ GPIO(USB_C1_PD_RST_L, PIN(D, 5), GPIO_OUT_HIGH) /* C1 PD Reset */ -GPIO(USB_C0_BC12_VBUS_ON_L, PIN(8, 2), GPIO_ODR_HIGH) /* C0 BC1.2 Power */ +GPIO(USB_C0_BC12_VBUS_ON_L_V0, PIN(8, 2), GPIO_INPUT) /* C0 BC1.2 Power */ +GPIO(USB_C0_BC12_VBUS_ON_L_V2, PIN(4, 0), GPIO_ODR_HIGH) /* C0 BC1.2 Power */ GPIO(USB_C1_BC12_VBUS_ON_L, PIN(B, 1), GPIO_ODR_HIGH) /* C1 BC1.2 Power */ GPIO(USB_C0_BC12_CHG_DET, PIN(6, 2), GPIO_INPUT) /* C0 BC1.2 Detect */ GPIO(USB_C1_BC12_CHG_DET, PIN(8, 3), GPIO_INPUT) /* C1 BC1.2 Detect */ |