mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-25 20:10:23 +09:00
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:
committed by
Greg Kroah-Hartman
parent
22116da321
commit
bbdac2c2ad
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user