FROMGIT: usb: typec: tcpm: Move TCPC to APPLY_RC state during PR_SWAP
When vbus auto discharge is enabled, TCPCI based TCPC transitions into Attached.SNK/Attached.SRC state. During PR_SWAP, TCPCI based TCPC would disconnect when partner changes power roles. TCPC has to be moved APPLY RC state during PR_SWAP. This is done by ROLE_CONTROL.CC1 != ROLE_CONTROL.CC2 and POWER_CONTROL.AutodischargeDisconnect is 0. Once the swap sequence is done, AutoDischargeDisconnect is re-enabled. Bug: 185300749 Fixes: f321a02caebd ("usb: typec: tcpm: Implement enabling Auto Discharge disconnect support") Reviewed-by: Guenter Roeck <linux@roeck-us.net> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Signed-off-by: Badhri Jagan Sridharan <badhri@google.com> Link: https://lore.kernel.org/r/20210517192112.40934-3-badhri@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> (cherry picked from commit 59d4d06c8ab0375dcc4bab329e6ecd44dd46373e https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next) Signed-off-by: Badhri Jagan Sridharan <badhri@google.com> Change-Id: I28b2307cb2c8ccaccc611303a95cfe00f9cae35a
This commit is contained in:

committed by
Todd Kjos

parent
a7d161dc5a
commit
750135f7ae
@@ -66,6 +66,8 @@ enum tcpm_transmit_type {
|
||||
* For example, some tcpcs may include BC1.2 charger detection
|
||||
* and use that in this case.
|
||||
* @set_cc: Called to set value of CC pins
|
||||
* @apply_rc: Optional; Needed to move TCPCI based chipset to APPLY_RC state
|
||||
* as stated by the TCPCI specification.
|
||||
* @get_cc: Called to read current CC pin values
|
||||
* @set_polarity:
|
||||
* Called to set polarity
|
||||
@@ -128,6 +130,8 @@ struct tcpc_dev {
|
||||
int (*get_vbus)(struct tcpc_dev *dev);
|
||||
int (*get_current_limit)(struct tcpc_dev *dev);
|
||||
int (*set_cc)(struct tcpc_dev *dev, enum typec_cc_status cc);
|
||||
int (*apply_rc)(struct tcpc_dev *dev, enum typec_cc_status cc,
|
||||
enum typec_cc_polarity polarity);
|
||||
int (*get_cc)(struct tcpc_dev *dev, enum typec_cc_status *cc1,
|
||||
enum typec_cc_status *cc2);
|
||||
int (*set_polarity)(struct tcpc_dev *dev,
|
||||
|
Reference in New Issue
Block a user