diff options
author | Alec Berg <alecaberg@chromium.org> | 2015-01-04 13:39:38 -0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-01-07 02:32:38 +0000 |
commit | e39f43ed2d79195098c2373389f0495f20e3247c (patch) | |
tree | b871704c8dbbd93801c9284ab8b5e08a9411ddad /board | |
parent | 563e7bed1ee5ec4b86b13d759507b5f185706c09 (diff) | |
download | chrome-ec-e39f43ed2d79195098c2373389f0495f20e3247c.tar.gz |
samus: pd: on PD connection, if sink, ask for power swap
For samus, on PD connection or on resume to S0, if we are a sink,
and the other side supports PR_SWAP, then attempt a power swap.
This adds callback functions into board policy file to check
and issue power or data swaps if required by the product.
BUG=chrome-os-partner:31195
BRANCH=samus
TEST=connect samus to zinger and make sure zinger always ends up
as SRC-UFP.
connect samus to samus with both in S0 and see that
they swap power roles once and not data roles.
connect one samus in S0 to one samus in S5 and see that the one
in S5 is sink. then when you boot the one in S5 it switches to a
source.
connect samus to samus with both in S0. do chgoverride 1 on one
side to start charging from the other samus. then on the same
side, turn off the machine (S5) and resume (S0), and see that it
is still charging from the other samus (ie has not switched roles
to source).
Change-Id: Ifab2465fccef77448ac4771a3c2de1c867cbbec4
Signed-off-by: Alec Berg <alecaberg@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/238302
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'board')
-rw-r--r-- | board/dingdong/usb_pd_policy.c | 7 | ||||
-rw-r--r-- | board/firefly/usb_pd_policy.c | 7 | ||||
-rw-r--r-- | board/fruitpie/usb_pd_policy.c | 7 | ||||
-rw-r--r-- | board/hoho/usb_pd_policy.c | 7 | ||||
-rw-r--r-- | board/host/usb_pd_policy.c | 7 | ||||
-rw-r--r-- | board/plankton/usb_pd_policy.c | 7 | ||||
-rw-r--r-- | board/ryu/usb_pd_policy.c | 7 | ||||
-rw-r--r-- | board/ryu_p1/usb_pd_policy.c | 7 | ||||
-rw-r--r-- | board/samus_pd/usb_pd_policy.c | 11 | ||||
-rw-r--r-- | board/twinkie/usb_pd_policy.c | 7 | ||||
-rw-r--r-- | board/zinger/usb_pd_policy.c | 7 |
11 files changed, 59 insertions, 22 deletions
diff --git a/board/dingdong/usb_pd_policy.c b/board/dingdong/usb_pd_policy.c index 85eb07020f..5c14e4a6da 100644 --- a/board/dingdong/usb_pd_policy.c +++ b/board/dingdong/usb_pd_policy.c @@ -86,8 +86,11 @@ void pd_execute_data_swap(int port, int data_role) /* Do nothing */ } -void pd_new_contract(int port, int pr_role, int dr_role, - int partner_pr_swap, int partner_dr_swap) +void pd_check_pr_role(int port, int pr_role, int partner_pr_swap) +{ +} + +void pd_check_dr_role(int port, int dr_role, int partner_dr_swap) { } /* ----------------- Vendor Defined Messages ------------------ */ diff --git a/board/firefly/usb_pd_policy.c b/board/firefly/usb_pd_policy.c index 45042cd35a..5917e1a7ef 100644 --- a/board/firefly/usb_pd_policy.c +++ b/board/firefly/usb_pd_policy.c @@ -124,8 +124,11 @@ void pd_execute_data_swap(int port, int data_role) /* Do nothing */ } -void pd_new_contract(int port, int pr_role, int dr_role, - int partner_pr_swap, int partner_dr_swap) +void pd_check_pr_role(int port, int pr_role, int partner_pr_swap) +{ +} + +void pd_check_dr_role(int port, int dr_role, int partner_dr_swap) { } diff --git a/board/fruitpie/usb_pd_policy.c b/board/fruitpie/usb_pd_policy.c index cf0b740260..ed7e1386fb 100644 --- a/board/fruitpie/usb_pd_policy.c +++ b/board/fruitpie/usb_pd_policy.c @@ -111,8 +111,11 @@ void pd_execute_data_swap(int port, int data_role) /* Do nothing */ } -void pd_new_contract(int port, int pr_role, int dr_role, - int partner_pr_swap, int partner_dr_swap) +void pd_check_pr_role(int port, int pr_role, int partner_pr_swap) +{ +} + +void pd_check_dr_role(int port, int dr_role, int partner_dr_swap) { } /* ----------------- Vendor Defined Messages ------------------ */ diff --git a/board/hoho/usb_pd_policy.c b/board/hoho/usb_pd_policy.c index 8252e03d49..9ecfd38611 100644 --- a/board/hoho/usb_pd_policy.c +++ b/board/hoho/usb_pd_policy.c @@ -86,8 +86,11 @@ void pd_execute_data_swap(int port, int data_role) /* Do nothing */ } -void pd_new_contract(int port, int pr_role, int dr_role, - int partner_pr_swap, int partner_dr_swap) +void pd_check_pr_role(int port, int pr_role, int partner_pr_swap) +{ +} + +void pd_check_dr_role(int port, int dr_role, int partner_dr_swap) { } /* ----------------- Vendor Defined Messages ------------------ */ diff --git a/board/host/usb_pd_policy.c b/board/host/usb_pd_policy.c index f477115e6f..d77731a8ff 100644 --- a/board/host/usb_pd_policy.c +++ b/board/host/usb_pd_policy.c @@ -95,8 +95,11 @@ void pd_execute_data_swap(int port, int data_role) /* Do nothing */ } -void pd_new_contract(int port, int pr_role, int dr_role, - int partner_pr_swap, int partner_dr_swap) +void pd_check_pr_role(int port, int pr_role, int partner_pr_swap) +{ +} + +void pd_check_dr_role(int port, int dr_role, int partner_dr_swap) { } diff --git a/board/plankton/usb_pd_policy.c b/board/plankton/usb_pd_policy.c index ff6de38654..4e56ba8b36 100644 --- a/board/plankton/usb_pd_policy.c +++ b/board/plankton/usb_pd_policy.c @@ -137,8 +137,11 @@ void pd_execute_data_swap(int port, int data_role) /* Do nothing */ } -void pd_new_contract(int port, int pr_role, int dr_role, - int partner_pr_swap, int partner_dr_swap) +void pd_check_pr_role(int port, int pr_role, int partner_pr_swap) +{ +} + +void pd_check_dr_role(int port, int dr_role, int partner_dr_swap) { } diff --git a/board/ryu/usb_pd_policy.c b/board/ryu/usb_pd_policy.c index aa2f62704b..b914cabc83 100644 --- a/board/ryu/usb_pd_policy.c +++ b/board/ryu/usb_pd_policy.c @@ -104,8 +104,11 @@ int pd_check_data_swap(int port, int data_role) return 1; } -void pd_new_contract(int port, int pr_role, int dr_role, - int partner_pr_swap, int partner_dr_swap) +void pd_check_pr_role(int port, int pr_role, int partner_pr_swap) +{ +} + +void pd_check_dr_role(int port, int dr_role, int partner_dr_swap) { } diff --git a/board/ryu_p1/usb_pd_policy.c b/board/ryu_p1/usb_pd_policy.c index e801cf49c2..99e06e39c1 100644 --- a/board/ryu_p1/usb_pd_policy.c +++ b/board/ryu_p1/usb_pd_policy.c @@ -105,8 +105,11 @@ int pd_check_data_swap(int port, int data_role) return 1; } -void pd_new_contract(int port, int pr_role, int dr_role, - int partner_pr_swap, int partner_dr_swap) +void pd_check_pr_role(int port, int pr_role, int partner_pr_swap) +{ +} + +void pd_check_dr_role(int port, int dr_role, int partner_dr_swap) { } diff --git a/board/samus_pd/usb_pd_policy.c b/board/samus_pd/usb_pd_policy.c index ecf2df31cc..f767a1d7cf 100644 --- a/board/samus_pd/usb_pd_policy.c +++ b/board/samus_pd/usb_pd_policy.c @@ -139,8 +139,15 @@ void pd_execute_data_swap(int port, int data_role) pi3usb9281_set_switches(port, (data_role == PD_ROLE_UFP)); } -void pd_new_contract(int port, int pr_role, int dr_role, - int partner_pr_swap, int partner_dr_swap) +void pd_check_pr_role(int port, int pr_role, int partner_pr_swap) +{ + /* If sink, and dual role toggling is on, then switch to source */ + if (partner_pr_swap && pr_role == PD_ROLE_SINK && + pd_get_dual_role() == PD_DRP_TOGGLE_ON) + pd_request_power_swap(port); +} + +void pd_check_dr_role(int port, int dr_role, int partner_dr_swap) { /* If UFP, try to switch to DFP */ if (partner_dr_swap && dr_role == PD_ROLE_UFP) diff --git a/board/twinkie/usb_pd_policy.c b/board/twinkie/usb_pd_policy.c index 4d568aff83..3491326ec3 100644 --- a/board/twinkie/usb_pd_policy.c +++ b/board/twinkie/usb_pd_policy.c @@ -100,8 +100,11 @@ int pd_check_data_swap(int port, int data_role) return 1; } -void pd_new_contract(int port, int pr_role, int dr_role, - int partner_pr_swap, int partner_dr_swap) +void pd_check_pr_role(int port, int pr_role, int partner_pr_swap) +{ +} + +void pd_check_dr_role(int port, int dr_role, int partner_dr_swap) { } diff --git a/board/zinger/usb_pd_policy.c b/board/zinger/usb_pd_policy.c index 09c52332f9..9559ec92b8 100644 --- a/board/zinger/usb_pd_policy.c +++ b/board/zinger/usb_pd_policy.c @@ -271,8 +271,11 @@ void pd_execute_data_swap(int port, int data_role) /* Do nothing */ } -void pd_new_contract(int port, int pr_role, int dr_role, - int partner_pr_swap, int partner_dr_swap) +void pd_check_pr_role(int port, int pr_role, int partner_pr_swap) +{ +} + +void pd_check_dr_role(int port, int dr_role, int partner_dr_swap) { /* If DFP, try to switch to UFP */ if (partner_dr_swap && dr_role == PD_ROLE_DFP) |