diff options
-rw-r--r-- | common/hooks.c | 1 | ||||
-rw-r--r-- | common/usb_pd_protocol.c | 5 | ||||
-rw-r--r-- | core/cortex-m/ec.lds.S | 4 | ||||
-rw-r--r-- | core/cortex-m0/ec.lds.S | 4 | ||||
-rw-r--r-- | core/host/host_exe.lds | 4 | ||||
-rw-r--r-- | core/minute-ia/ec.lds.S | 10 | ||||
-rw-r--r-- | core/nds32/ec.lds.S | 4 | ||||
-rw-r--r-- | include/hooks.h | 9 | ||||
-rw-r--r-- | include/link_defs.h | 2 |
9 files changed, 37 insertions, 6 deletions
diff --git a/common/hooks.c b/common/hooks.c index ff85e2cfd2..fbdf8e414b 100644 --- a/common/hooks.c +++ b/common/hooks.c @@ -57,6 +57,7 @@ static const struct hook_ptrs hook_list[] = { {__hooks_tick, __hooks_tick_end}, {__hooks_second, __hooks_second_end}, {__hooks_usb_pd_disconnect, __hooks_usb_pd_disconnect_end}, + {__hooks_usb_pd_connect, __hooks_usb_pd_connect_end}, }; /* Times for deferrable functions */ diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c index 4582d5ffd2..f3f990bb25 100644 --- a/common/usb_pd_protocol.c +++ b/common/usb_pd_protocol.c @@ -3141,6 +3141,9 @@ void pd_task(void *u) break; /* Debounce complete */ + if (IS_ENABLED(CONFIG_COMMON_RUNTIME)) + hook_notify(HOOK_USB_PD_CONNECT); + #ifdef CONFIG_USBC_PPC /* * If the port is latched off, just continue to @@ -3700,6 +3703,8 @@ void pd_task(void *u) } /* We are attached */ + if (IS_ENABLED(CONFIG_COMMON_RUNTIME)) + hook_notify(HOOK_USB_PD_CONNECT); pd[port].polarity = get_snk_polarity(cc1, cc2); set_polarity(port, pd[port].polarity); /* reset message ID on connection */ diff --git a/core/cortex-m/ec.lds.S b/core/cortex-m/ec.lds.S index 2b6d39c060..1d759cf843 100644 --- a/core/cortex-m/ec.lds.S +++ b/core/cortex-m/ec.lds.S @@ -244,6 +244,10 @@ SECTIONS KEEP(*(.rodata.HOOK_USB_PD_DISCONNECT)) __hooks_usb_pd_disconnect_end = .; + __hooks_usb_pd_connect = .; + KEEP(*(.rodata.HOOK_USB_PD_CONNECT)) + __hooks_usb_pd_connect_end = .; + __deferred_funcs = .; KEEP(*(.rodata.deferred)) __deferred_funcs_end = .; diff --git a/core/cortex-m0/ec.lds.S b/core/cortex-m0/ec.lds.S index da6444dd14..fe356b8dc7 100644 --- a/core/cortex-m0/ec.lds.S +++ b/core/cortex-m0/ec.lds.S @@ -162,6 +162,10 @@ SECTIONS KEEP(*(.rodata.HOOK_USB_PD_DISCONNECT)) __hooks_usb_pd_disconnect_end = .; + __hooks_usb_pd_connect = .; + KEEP(*(.rodata.HOOK_USB_PD_CONNECT)) + __hooks_usb_pd_connect_end = .; + __deferred_funcs = .; KEEP(*(.rodata.deferred)) __deferred_funcs_end = .; diff --git a/core/host/host_exe.lds b/core/host/host_exe.lds index f4e72ec0d7..792ab36685 100644 --- a/core/host/host_exe.lds +++ b/core/host/host_exe.lds @@ -101,6 +101,10 @@ SECTIONS { *(.rodata.HOOK_USB_PD_DISCONNECT) __hooks_usb_pd_disconnect_end = .; + __hooks_usb_pd_connect = .; + KEEP(*(.rodata.HOOK_USB_PD_CONNECT)) + __hooks_usb_pd_connect_end = .; + __deferred_funcs = .; *(.rodata.deferred) __deferred_funcs_end = .; diff --git a/core/minute-ia/ec.lds.S b/core/minute-ia/ec.lds.S index 8087f7ce01..55102d5ae5 100644 --- a/core/minute-ia/ec.lds.S +++ b/core/minute-ia/ec.lds.S @@ -130,9 +130,13 @@ SECTIONS KEEP(*(.rodata.HOOK_SECOND)) __hooks_second_end = .; - __hooks_usb_pd_disconnect = .; - KEEP(*(.rodata.HOOK_USB_PD_DISCONNECT)) - __hooks_usb_pd_disconnect_end = .; + __hooks_usb_pd_disconnect = .; + KEEP(*(.rodata.HOOK_USB_PD_DISCONNECT)) + __hooks_usb_pd_disconnect_end = .; + + __hooks_usb_pd_connect = .; + KEEP(*(.rodata.HOOK_USB_PD_CONNECT)) + __hooks_usb_pd_connect_end = .; __deferred_funcs = .; KEEP(*(.rodata.deferred)) diff --git a/core/nds32/ec.lds.S b/core/nds32/ec.lds.S index bb115ed8df..751c2dc676 100644 --- a/core/nds32/ec.lds.S +++ b/core/nds32/ec.lds.S @@ -160,6 +160,10 @@ SECTIONS KEEP(*(.rodata.HOOK_USB_PD_DISCONNECT)) __hooks_usb_pd_disconnect_end = .; + __hooks_usb_pd_connect = .; + KEEP(*(.rodata.HOOK_USB_PD_CONNECT)) + __hooks_usb_pd_connect_end = .; + __deferred_funcs = .; KEEP(*(.rodata.deferred)) __deferred_funcs_end = .; diff --git a/include/hooks.h b/include/hooks.h index 8f865f81ed..24c8e6d418 100644 --- a/include/hooks.h +++ b/include/hooks.h @@ -205,11 +205,14 @@ enum hook_type { HOOK_SECOND, /* - * Detect USB PD cc disconnect. - * - * Hook routines will be called from the PD task. + * USB PD cc disconnect event. */ HOOK_USB_PD_DISCONNECT, + + /* + * USB PD cc connection event. + */ + HOOK_USB_PD_CONNECT, }; struct hook_data { diff --git a/include/link_defs.h b/include/link_defs.h index 4dd0441824..efabebe300 100644 --- a/include/link_defs.h +++ b/include/link_defs.h @@ -70,6 +70,8 @@ extern const struct hook_data __hooks_second[]; extern const struct hook_data __hooks_second_end[]; extern const struct hook_data __hooks_usb_pd_disconnect[]; extern const struct hook_data __hooks_usb_pd_disconnect_end[]; +extern const struct hook_data __hooks_usb_pd_connect[]; +extern const struct hook_data __hooks_usb_pd_connect_end[]; /* Deferrable functions and firing times*/ extern const struct deferred_data __deferred_funcs[]; |