summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2019-05-06 14:59:18 -0700
committerchrome-bot <chrome-bot@chromium.org>2019-05-08 19:35:13 -0700
commit608e6a4ca4a8cb46004db986f8b71c81b99b7786 (patch)
tree1f88183f53197ac59c3ba1f464d728b772feabfe
parentaa0cdc32ba82a0d0a699c4f06d78a589f7c58aa1 (diff)
downloadchrome-ec-608e6a4ca4a8cb46004db986f8b71c81b99b7786.tar.gz
USB-PD: Add hook for PD connect event
This patch adds a hook for USB PD connect event. Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> BUG=b/127228934 BRANCH=none TEST=buildall. Verify a hook is called on BC12 charger connection. Change-Id: I88fcd65d1afce07b6275398c5d0b902ecd7a44a3 Reviewed-on: https://chromium-review.googlesource.com/1597794 Commit-Ready: Daisuke Nojiri <dnojiri@chromium.org> Tested-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r--common/hooks.c1
-rw-r--r--common/usb_pd_protocol.c5
-rw-r--r--core/cortex-m/ec.lds.S4
-rw-r--r--core/cortex-m0/ec.lds.S4
-rw-r--r--core/host/host_exe.lds4
-rw-r--r--core/minute-ia/ec.lds.S10
-rw-r--r--core/nds32/ec.lds.S4
-rw-r--r--include/hooks.h9
-rw-r--r--include/link_defs.h2
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[];