Message ID | 20200116013247.16507-1-ajayg@nvidia.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [1/2] usb: typec: ucsi: register DP only for NVIDIA DP VDO | expand |
Hi Ajay, On Wed, Jan 15, 2020 at 05:32:46PM -0800, Ajay Gupta wrote: > From: Ajay Gupta <ajayg@nvidia.com> > > NVIDIA VirtualLink (svid 0x955) has two altmode with vdo values > of vdo=0x1 for VirtualLink DP mode and vdo=0x3 for NVIDIA test > mode. Register display altmode driver only for vdo=0x1 > > Signed-off-by: Ajay Gupta <ajayg@nvidia.com> > --- > drivers/usb/typec/ucsi/ucsi.c | 12 ++++++++++-- > include/linux/usb/typec_dp.h | 2 ++ > 2 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c > index d5a6aac86327..eca9d598a42f 100644 > --- a/drivers/usb/typec/ucsi/ucsi.c > +++ b/drivers/usb/typec/ucsi/ucsi.c > @@ -270,9 +270,16 @@ static int ucsi_register_altmode(struct ucsi_connector *con, > > switch (desc->svid) { > case USB_TYPEC_DP_SID: > - case USB_TYPEC_NVIDIA_VLINK_SID: > alt = ucsi_register_displayport(con, override, i, desc); > break; > + case USB_TYPEC_NVIDIA_VLINK_SID: > + if (desc->vdo == USB_TYPEC_NVIDIA_VLINK_DBG_VDO) > + alt = typec_port_register_altmode(con->port, > + desc); > + else > + alt = ucsi_register_displayport(con, override, > + i, desc); > + break; > default: > alt = typec_port_register_altmode(con->port, desc); > break; > @@ -475,7 +482,8 @@ static void ucsi_unregister_altmodes(struct ucsi_connector *con, u8 recipient) > while (adev[i]) { > if (recipient == UCSI_RECIPIENT_SOP && > (adev[i]->svid == USB_TYPEC_DP_SID || > - adev[i]->svid == USB_TYPEC_NVIDIA_VLINK_SID)) { > + (adev[i]->svid == USB_TYPEC_NVIDIA_VLINK_SID && > + adev[i]->vdo != USB_TYPEC_NVIDIA_VLINK_DBG_VDO))) { > pdev = typec_altmode_get_partner(adev[i]); > ucsi_displayport_remove_partner((void *)pdev); > } > diff --git a/include/linux/usb/typec_dp.h b/include/linux/usb/typec_dp.h > index fc4c7edb2e8a..848321c4498e 100644 > --- a/include/linux/usb/typec_dp.h > +++ b/include/linux/usb/typec_dp.h > @@ -10,6 +10,8 @@ > * IDs as the SVID. > */ > #define USB_TYPEC_NVIDIA_VLINK_SID 0x955 /* NVIDIA VirtualLink */ > +#define USB_TYPEC_NVIDIA_VLINK_DP_VDO 0x1 > +#define USB_TYPEC_NVIDIA_VLINK_DBG_VDO 0x3 I think those should be defined in ucsi.c for now. We can move them to the header if there is another user. thanks,
Hi Heikki > On Wed, Jan 15, 2020 at 05:32:46PM -0800, Ajay Gupta wrote: > > From: Ajay Gupta <ajayg@nvidia.com> > > > > NVIDIA VirtualLink (svid 0x955) has two altmode with vdo values of > > vdo=0x1 for VirtualLink DP mode and vdo=0x3 for NVIDIA test mode. > > Register display altmode driver only for vdo=0x1 > > > > Signed-off-by: Ajay Gupta <ajayg@nvidia.com> > > --- > > drivers/usb/typec/ucsi/ucsi.c | 12 ++++++++++-- > > include/linux/usb/typec_dp.h | 2 ++ > > 2 files changed, 12 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/usb/typec/ucsi/ucsi.c > > b/drivers/usb/typec/ucsi/ucsi.c index d5a6aac86327..eca9d598a42f > > 100644 > > --- a/drivers/usb/typec/ucsi/ucsi.c > > +++ b/drivers/usb/typec/ucsi/ucsi.c > > @@ -270,9 +270,16 @@ static int ucsi_register_altmode(struct > > ucsi_connector *con, > > > > switch (desc->svid) { > > case USB_TYPEC_DP_SID: > > - case USB_TYPEC_NVIDIA_VLINK_SID: > > alt = ucsi_register_displayport(con, override, i, desc); > > break; > > + case USB_TYPEC_NVIDIA_VLINK_SID: > > + if (desc->vdo == USB_TYPEC_NVIDIA_VLINK_DBG_VDO) > > + alt = typec_port_register_altmode(con->port, > > + desc); > > + else > > + alt = ucsi_register_displayport(con, override, > > + i, desc); > > + break; > > default: > > alt = typec_port_register_altmode(con->port, desc); > > break; > > @@ -475,7 +482,8 @@ static void ucsi_unregister_altmodes(struct > ucsi_connector *con, u8 recipient) > > while (adev[i]) { > > if (recipient == UCSI_RECIPIENT_SOP && > > (adev[i]->svid == USB_TYPEC_DP_SID || > > - adev[i]->svid == USB_TYPEC_NVIDIA_VLINK_SID)) { > > + (adev[i]->svid == USB_TYPEC_NVIDIA_VLINK_SID && > > + adev[i]->vdo != > > + USB_TYPEC_NVIDIA_VLINK_DBG_VDO))) { > > pdev = typec_altmode_get_partner(adev[i]); > > ucsi_displayport_remove_partner((void *)pdev); > > } > > diff --git a/include/linux/usb/typec_dp.h > > b/include/linux/usb/typec_dp.h index fc4c7edb2e8a..848321c4498e 100644 > > --- a/include/linux/usb/typec_dp.h > > +++ b/include/linux/usb/typec_dp.h > > @@ -10,6 +10,8 @@ > > * IDs as the SVID. > > */ > > #define USB_TYPEC_NVIDIA_VLINK_SID 0x955 /* NVIDIA VirtualLink */ > > +#define USB_TYPEC_NVIDIA_VLINK_DP_VDO 0x1 > > +#define USB_TYPEC_NVIDIA_VLINK_DBG_VDO 0x3 > > I think those should be defined in ucsi.c for now. We can move them to the > header if there is another user. Sure, I will update the change. Thanks > nvpublic > thanks, > > -- > heikki
diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c index d5a6aac86327..eca9d598a42f 100644 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -270,9 +270,16 @@ static int ucsi_register_altmode(struct ucsi_connector *con, switch (desc->svid) { case USB_TYPEC_DP_SID: - case USB_TYPEC_NVIDIA_VLINK_SID: alt = ucsi_register_displayport(con, override, i, desc); break; + case USB_TYPEC_NVIDIA_VLINK_SID: + if (desc->vdo == USB_TYPEC_NVIDIA_VLINK_DBG_VDO) + alt = typec_port_register_altmode(con->port, + desc); + else + alt = ucsi_register_displayport(con, override, + i, desc); + break; default: alt = typec_port_register_altmode(con->port, desc); break; @@ -475,7 +482,8 @@ static void ucsi_unregister_altmodes(struct ucsi_connector *con, u8 recipient) while (adev[i]) { if (recipient == UCSI_RECIPIENT_SOP && (adev[i]->svid == USB_TYPEC_DP_SID || - adev[i]->svid == USB_TYPEC_NVIDIA_VLINK_SID)) { + (adev[i]->svid == USB_TYPEC_NVIDIA_VLINK_SID && + adev[i]->vdo != USB_TYPEC_NVIDIA_VLINK_DBG_VDO))) { pdev = typec_altmode_get_partner(adev[i]); ucsi_displayport_remove_partner((void *)pdev); } diff --git a/include/linux/usb/typec_dp.h b/include/linux/usb/typec_dp.h index fc4c7edb2e8a..848321c4498e 100644 --- a/include/linux/usb/typec_dp.h +++ b/include/linux/usb/typec_dp.h @@ -10,6 +10,8 @@ * IDs as the SVID. */ #define USB_TYPEC_NVIDIA_VLINK_SID 0x955 /* NVIDIA VirtualLink */ +#define USB_TYPEC_NVIDIA_VLINK_DP_VDO 0x1 +#define USB_TYPEC_NVIDIA_VLINK_DBG_VDO 0x3 #define USB_TYPEC_DP_MODE 1 /*