mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-17 18:41:22 +00:00
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>
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user