diff options
-rw-r--r-- | baseboard/asurada/baseboard.c | 17 | ||||
-rw-r--r-- | baseboard/asurada/baseboard.h | 3 | ||||
-rw-r--r-- | baseboard/asurada/usb_pd_policy.c | 12 | ||||
-rw-r--r-- | board/asurada/gpio.inc | 3 | ||||
-rw-r--r-- | board/spherion/gpio.inc | 8 |
5 files changed, 32 insertions, 11 deletions
diff --git a/baseboard/asurada/baseboard.c b/baseboard/asurada/baseboard.c index 5376aa6dc2..a9e8d029c5 100644 --- a/baseboard/asurada/baseboard.c +++ b/baseboard/asurada/baseboard.c @@ -60,6 +60,7 @@ static void x_ec_interrupt(enum gpio_signal signal); #include "gpio_list.h" +#define CPRINTSUSB(format, args...) cprints(CC_USBCHARGE, format, ## args) #define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ## args) #define CPRINTF(format, args...) cprintf(CC_SYSTEM, format, ## args) @@ -129,12 +130,13 @@ DECLARE_HOOK(HOOK_INIT, board_tcpc_init, HOOK_PRIO_INIT_I2C + 1); /* ADC channels. Must be in the exactly same order as in enum adc_channel. */ const struct adc_t adc_channels[] = { /* Convert to mV (3000mV/1024). */ - {"VBUS", ADC_MAX_MVOLT * 10, ADC_READ_MAX + 1, 0, CHIP_ADC_CH0}, + {"VBUS_C0", ADC_MAX_MVOLT * 10, ADC_READ_MAX + 1, 0, CHIP_ADC_CH0}, {"BOARD_ID_0", ADC_MAX_MVOLT, ADC_READ_MAX + 1, 0, CHIP_ADC_CH1}, {"BOARD_ID_1", ADC_MAX_MVOLT, ADC_READ_MAX + 1, 0, CHIP_ADC_CH2}, /* AMON/BMON gain = 17.97 */ {"CHARGER_AMON_R", ADC_MAX_MVOLT * 1000 / 17.97, ADC_READ_MAX + 1, 0, CHIP_ADC_CH3}, + {"VBUS_C1", ADC_MAX_MVOLT * 10, ADC_READ_MAX + 1, 0, CHIP_ADC_CH5}, {"CHARGER_PMON", ADC_MAX_MVOLT, ADC_READ_MAX + 1, 0, CHIP_ADC_CH6}, }; BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); @@ -614,3 +616,16 @@ static void baseboard_init(void) gpio_enable_interrupt(GPIO_USB_C0_BC12_INT_ODL); } DECLARE_HOOK(HOOK_INIT, baseboard_init, HOOK_PRIO_DEFAULT-1); + + +#ifdef CONFIG_USB_PD_VBUS_MEASURE_ADC_EACH_PORT +enum adc_channel board_get_vbus_adc(int port) +{ + if (port == 0) + return ADC_VBUS_C0; + if (port == 1) + return ADC_VBUS_C1; + CPRINTSUSB("Unknown vbus adc port id: %d", port); + return ADC_VBUS_C0; +} +#endif /* CONFIG_USB_PD_VBUS_MEASURE_ADC_EACH_PORT */ diff --git a/baseboard/asurada/baseboard.h b/baseboard/asurada/baseboard.h index e9b6b2bf4b..9eb0b38509 100644 --- a/baseboard/asurada/baseboard.h +++ b/baseboard/asurada/baseboard.h @@ -55,6 +55,7 @@ /* Charger */ #define ADC_AMON_BMON ADC_CHARGER_AMON_R /* ADC name remap */ #define ADC_PSYS ADC_CHARGER_PMON /* ADC name remap */ +#define ADC_VBUS ADC_VBUS_C0 /* ADC name remap */ #define CONFIG_CHARGE_MANAGER #define CONFIG_CHARGER #define CONFIG_CHARGE_RAMP_HW @@ -129,6 +130,7 @@ #define CONFIG_USB_PD_TCPMV2 #define CONFIG_USB_PD_TRY_SRC #define CONFIG_USB_PD_VBUS_DETECT_PPC +#define CONFIG_USB_PD_VBUS_MEASURE_ADC_EACH_PORT #define CONFIG_USB_PID 0x5566 /* TODO: update PID */ #define CONFIG_USB_POWER_DELIVERY @@ -199,6 +201,7 @@ enum adc_channel { ADC_BOARD_ID_0, /* ADC 1 */ ADC_BOARD_ID_1, /* ADC 2 */ ADC_CHARGER_AMON_R, /* ADC 3 */ + ADC_VBUS_C1, /* ADC 5 */ ADC_CHARGER_PMON, /* ADC 6 */ /* Number of ADC channels */ diff --git a/baseboard/asurada/usb_pd_policy.c b/baseboard/asurada/usb_pd_policy.c index 20e315b6db..7422e6771f 100644 --- a/baseboard/asurada/usb_pd_policy.c +++ b/baseboard/asurada/usb_pd_policy.c @@ -148,7 +148,16 @@ __override void svdm_exit_dp_mode(int port) int pd_snk_is_vbus_provided(int port) { - return ppc_is_vbus_present(port); + if ((IS_ENABLED(BOARD_HAYATO) && board_get_version() < 4) || + (IS_ENABLED(BOARD_SPHERION) && board_get_version() < 1)) + return ppc_is_vbus_present(port); + + /* + * (b:181203590#comment20) TODO(yllin): use + * PD_VSINK_DISCONNECT_PD for non-5V case. + */ + return charge_manager_get_vbus_voltage(port) >= + PD_V_SINK_DISCONNECT_MAX; } void pd_power_supply_reset(int port) @@ -200,4 +209,3 @@ int board_vbus_source_enabled(int port) { return ppc_is_sourcing_vbus(port); } - diff --git a/board/asurada/gpio.inc b/board/asurada/gpio.inc index 6856efe956..209de9c901 100644 --- a/board/asurada/gpio.inc +++ b/board/asurada/gpio.inc @@ -128,7 +128,7 @@ ALTERNATE(PIN_MASK(B, 0x03), 1, MODULE_UART, 0) /* EC to Servo */ ALTERNATE(PIN_MASK(A, 0x07), 1, MODULE_PWM, 0) /* PWM 0~2 */ /* ADC */ -ALTERNATE(PIN_MASK(I, 0x4F), 0, MODULE_ADC, 0) /* ADC 0,1,2,3,6 */ +ALTERNATE(PIN_MASK(I, 0x6F), 0, MODULE_ADC, 0) /* ADC 0,1,2,3,5,6 */ /* SPI */ ALTERNATE(PIN_MASK(M, 0x33), 0, MODULE_SPI, 0) /* SPI */ @@ -149,7 +149,6 @@ GPIO(CCD_MODE_ODL, PIN(C, 4), GPIO_INPUT) * ADC pins don't have internal pull-down capability, * so we set them as output low. */ -GPIO(NC_GPI5, PIN(I, 5), GPIO_OUT_LOW) GPIO(NC_GPI7, PIN(I, 7), GPIO_OUT_LOW) /* NC pins, enable internal pull-up/down to avoid floating state. */ #ifdef BOARD_ASURADA_REV0 diff --git a/board/spherion/gpio.inc b/board/spherion/gpio.inc index 5794a456dc..369896f91f 100644 --- a/board/spherion/gpio.inc +++ b/board/spherion/gpio.inc @@ -108,7 +108,7 @@ ALTERNATE(PIN_MASK(E, 0x81), 1, MODULE_I2C, 0) /* I2C E */ ALTERNATE(PIN_MASK(B, 0x03), 1, MODULE_UART, 0) /* EC to Servo */ /* ADC */ -ALTERNATE(PIN_MASK(I, 0x4F), 0, MODULE_ADC, 0) /* ADC 0,1,2,3,6 */ +ALTERNATE(PIN_MASK(I, 0x6F), 0, MODULE_ADC, 0) /* ADC 0,1,2,3,5,6 */ /* SPI */ ALTERNATE(PIN_MASK(M, 0x33), 0, MODULE_SPI, 0) /* SPI */ @@ -133,11 +133,7 @@ GPIO(PG_MT6315_GPU_ODL, PIN(H, 6), GPIO_INPUT) GPIO(EN_PP3000_SD_U, PIN(G, 1), GPIO_INPUT | GPIO_PULL_DOWN | GPIO_SEL_1P8V) /* reserved for future use */ GPIO(CCD_MODE_ODL, PIN(C, 4), GPIO_INPUT) -/* - * ADC pins don't have internal pull-down capability, - * so we set them as output low. - */ -GPIO(NC_GPI5, PIN(I, 5), GPIO_OUT_LOW) + /* NC pins, enable internal pull-up/down to avoid floating state. */ GPIO(NC_GPM2, PIN(M, 2), GPIO_INPUT | GPIO_PULL_DOWN) GPIO(NC_GPM3, PIN(M, 3), GPIO_INPUT | GPIO_PULL_DOWN) |