diff options
-rw-r--r-- | board/firefly/usb_pd_config.h | 5 | ||||
-rw-r--r-- | board/fruitpie/usb_pd_config.h | 5 | ||||
-rw-r--r-- | board/samus_pd/usb_pd_config.h | 5 | ||||
-rw-r--r-- | common/usb_pd_protocol.c | 8 |
4 files changed, 23 insertions, 0 deletions
diff --git a/board/firefly/usb_pd_config.h b/board/firefly/usb_pd_config.h index 8e3a3a4af7..595b977d48 100644 --- a/board/firefly/usb_pd_config.h +++ b/board/firefly/usb_pd_config.h @@ -96,6 +96,11 @@ static inline int pd_adc_read(int cc) return adc_read_channel(ADC_CH_CC2_PD); } +static inline int pd_snk_is_vbus_provided(void) +{ + return 1; +} + /* Standard-current DFP : no-connect voltage is 1.55V */ #define PD_SRC_VNC 1550 /* mV */ diff --git a/board/fruitpie/usb_pd_config.h b/board/fruitpie/usb_pd_config.h index 3c53d5e923..75d3b112c3 100644 --- a/board/fruitpie/usb_pd_config.h +++ b/board/fruitpie/usb_pd_config.h @@ -84,6 +84,11 @@ static inline int pd_adc_read(int cc) return adc_read_channel(ADC_CH_CC2_PD); } +static inline int pd_snk_is_vbus_provided(void) +{ + return 1; +} + /* Standard-current DFP : no-connect voltage is 1.55V */ #define PD_SRC_VNC 1550 /* mV */ diff --git a/board/samus_pd/usb_pd_config.h b/board/samus_pd/usb_pd_config.h index 9606913e06..016394e8bb 100644 --- a/board/samus_pd/usb_pd_config.h +++ b/board/samus_pd/usb_pd_config.h @@ -108,6 +108,11 @@ static inline int pd_adc_read(int cc) return adc_read_channel(ADC_C0_CC2_PD); } +static inline int pd_snk_is_vbus_provided(void) +{ + return gpio_get_level(GPIO_USB_C0_VBUS_WAKE); +} + /* Standard-current DFP : no-connect voltage is 1.55V */ #define PD_SRC_VNC 1550 /* mV */ diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c index d15f9bcc0e..48e2763712 100644 --- a/common/usb_pd_protocol.c +++ b/common/usb_pd_protocol.c @@ -778,6 +778,14 @@ void pd_task(void) break; case PD_STATE_SNK_READY: /* we have power and we are happy */ + + /* if we have lost vbus, go back to disconnected */ + if (!pd_snk_is_vbus_provided()) { + pd_task_state = PD_STATE_SNK_DISCONNECTED; + /* set timeout small to reconnect fast */ + timeout = 5*MSEC; + } + /* check vital parameters from time to time */ timeout = 100*MSEC; break; |