Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: typec: displayport: Fill the negotiated SVDM Version in the header

VDM header now requires SVDM Version. Get it from typec_partner.

Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Kyle Tso <kyletso@google.com>
Link: https://lore.kernel.org/r/20210205033415.3320439-6-kyletso@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Kyle Tso and committed by
Greg Kroah-Hartman
4c93cad8 372adf07

+13 -4
+13 -4
drivers/usb/typec/altmodes/displayport.c
··· 15 15 #include <linux/usb/typec_dp.h> 16 16 #include "displayport.h" 17 17 18 - #define DP_HEADER(_dp, cmd) (VDO((_dp)->alt->svid, 1, SVDM_VER_1_0, cmd) | \ 19 - VDO_OPOS(USB_TYPEC_DP_MODE)) 18 + #define DP_HEADER(_dp, ver, cmd) (VDO((_dp)->alt->svid, 1, ver, cmd) \ 19 + | VDO_OPOS(USB_TYPEC_DP_MODE)) 20 20 21 21 enum { 22 22 DP_CONF_USB, ··· 156 156 157 157 static int dp_altmode_configure_vdm(struct dp_altmode *dp, u32 conf) 158 158 { 159 - u32 header = DP_HEADER(dp, DP_CMD_CONFIGURE); 159 + int svdm_version = typec_altmode_get_svdm_version(dp->alt); 160 + u32 header; 160 161 int ret; 161 162 163 + if (svdm_version < 0) 164 + return svdm_version; 165 + 166 + header = DP_HEADER(dp, svdm_version, DP_CMD_CONFIGURE); 162 167 ret = typec_altmode_notify(dp->alt, TYPEC_STATE_SAFE, &dp->data); 163 168 if (ret) { 164 169 dev_err(&dp->alt->dev, ··· 186 181 static void dp_altmode_work(struct work_struct *work) 187 182 { 188 183 struct dp_altmode *dp = container_of(work, struct dp_altmode, work); 184 + int svdm_version; 189 185 u32 header; 190 186 u32 vdo; 191 187 int ret; ··· 200 194 dev_err(&dp->alt->dev, "failed to enter mode\n"); 201 195 break; 202 196 case DP_STATE_UPDATE: 203 - header = DP_HEADER(dp, DP_CMD_STATUS_UPDATE); 197 + svdm_version = typec_altmode_get_svdm_version(dp->alt); 198 + if (svdm_version < 0) 199 + break; 200 + header = DP_HEADER(dp, svdm_version, DP_CMD_STATUS_UPDATE); 204 201 vdo = 1; 205 202 ret = typec_altmode_vdm(dp->alt, header, &vdo, 2); 206 203 if (ret)