FROMGIT: usb: typec: tcpm: Correct the responses in SVDM Version 2.0 DFP
In USB PD Spec Rev 3.1 Ver 1.0, section "6.12.5 Applicability of Structured VDM Commands", DFP is allowed and recommended to respond to Discovery Identity with ACK. And in section "6.4.4.2.5.1 Commands other than Attention", NAK should be returned only when receiving Messages with invalid fields, Messages in wrong situation, or unrecognize Messages. Still keep the original design for SVDM Version 1.0 for backward compatibilities. Fixes:193a68011f("staging: typec: tcpm: Respond to Discover Identity commands") Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Signed-off-by: Kyle Tso <kyletso@google.com> Link: https://lore.kernel.org/r/20210601123151.3441914-2-kyletso@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> (cherry picked from commitf41bfc7e9chttps://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next) Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: If1dd588040c1a3d403d29f0436f9ab23c740ea20
This commit is contained in:
parent
22116da321
commit
bbdac2c2ad
1 changed files with 10 additions and 4 deletions
|
|
@ -1597,19 +1597,25 @@ static int tcpm_pd_svdm(struct tcpm_port *port, struct typec_altmode *adev,
|
|||
if (PD_VDO_VID(p[0]) != USB_SID_PD)
|
||||
break;
|
||||
|
||||
if (PD_VDO_SVDM_VER(p[0]) < svdm_version)
|
||||
if (PD_VDO_SVDM_VER(p[0]) < svdm_version) {
|
||||
typec_partner_set_svdm_version(port->partner,
|
||||
PD_VDO_SVDM_VER(p[0]));
|
||||
svdm_version = PD_VDO_SVDM_VER(p[0]);
|
||||
}
|
||||
|
||||
tcpm_ams_start(port, DISCOVER_IDENTITY);
|
||||
/* 6.4.4.3.1: Only respond as UFP (device) */
|
||||
if (port->data_role == TYPEC_DEVICE &&
|
||||
/*
|
||||
* PD2.0 Spec 6.10.3: respond with NAK as DFP (data host)
|
||||
* PD3.1 Spec 6.4.4.2.5.1: respond with NAK if "invalid field" or
|
||||
* "wrong configuation" or "Unrecognized"
|
||||
*/
|
||||
if ((port->data_role == TYPEC_DEVICE || svdm_version >= SVDM_VER_2_0) &&
|
||||
port->nr_snk_vdo) {
|
||||
/*
|
||||
* Product Type DFP and Connector Type are not defined in SVDM
|
||||
* version 1.0 and shall be set to zero.
|
||||
*/
|
||||
if (typec_get_negotiated_svdm_version(typec) < SVDM_VER_2_0)
|
||||
if (svdm_version < SVDM_VER_2_0)
|
||||
response[1] = port->snk_vdo[0] & ~IDH_DFP_MASK
|
||||
& ~IDH_CONN_MASK;
|
||||
else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue