summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--baseboard/asurada/baseboard.c17
-rw-r--r--baseboard/asurada/baseboard.h3
-rw-r--r--baseboard/asurada/usb_pd_policy.c12
-rw-r--r--board/asurada/gpio.inc3
-rw-r--r--board/spherion/gpio.inc8
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)