RE: [PATCH v3 3/4] platform/chrome: cros_ec_typec: Add Displayport Alternatemode 2.1 Support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Prashant,

Thank you for the review.

> -----Original Message-----
> From: Prashant Malani <pmalani@xxxxxxxxxxxx>
> Sent: Monday, September 11, 2023 6:18 PM
> To: Patel, Utkarsh H <utkarsh.h.patel@xxxxxxxxx>
> Cc: linux-kernel@xxxxxxxxxxxxxxx; linux-usb@xxxxxxxxxxxxxxx;
> heikki.krogerus@xxxxxxxxxxxxxxx; chrome-platform@xxxxxxxxxxxxxxx;
> andriy.shevchenko@xxxxxxxxxxxxxxx; bleung@xxxxxxxxxxxx
> Subject: Re: [PATCH v3 3/4] platform/chrome: cros_ec_typec: Add Displayport
> Alternatemode 2.1 Support
> 
> Hi Utkarsh,
> 
> On Mon, Sep 11, 2023 at 5:58 PM Utkarsh Patel <utkarsh.h.patel@xxxxxxxxx>
> wrote:
> >
> > Displayport Alternatemode 2.1 requires cable capabilities such as
> > cable signalling, cable type, DPAM version which then will be used by
> > mux driver for displayport configuration. These capabilities can be
> > derived from the Cable VDO.
> > Added a helper macro to get the Type C cable speed when provided the
> > cable VDO.
> >
> > Signed-off-by: Utkarsh Patel <utkarsh.h.patel@xxxxxxxxx>
> 
> Thank you for addressing the comments. This LGTM; I have one minor
> suggestion, but I'll leave it to USB maintainers for the final call on that
> comment, so:
> 
> Acked-by: Prashant Malani <pmalani@xxxxxxxxxxxx>
> 
> > ---
> > Changes in v3:
> > - Removed use of variable cable_seepd.
> > - Added helper macro of pd_vdo.h in this patch as cros_ec_typec is the user.
> >
> > Changes in v2:
> > - Remvoed feature flag specifice to DP2.1.
> > - Remvoed seperate function for DP2.1.
> > - Removed use of EC host coammnd to get cable details.
> > - TBT cable VDO is used to get cable details.
> > - Using VDO_CABLE_SPEED macro to get passive cable speed.
> >
> >  drivers/platform/chrome/cros_ec_typec.c | 28
> +++++++++++++++++++++++++
> >  include/linux/usb/pd_vdo.h              |  1 +
> >  2 files changed, 29 insertions(+)
> >
> > diff --git a/drivers/platform/chrome/cros_ec_typec.c
> > b/drivers/platform/chrome/cros_ec_typec.c
> > index d0b4d3fc40ed..cca913400b39 100644
> > --- a/drivers/platform/chrome/cros_ec_typec.c
> > +++ b/drivers/platform/chrome/cros_ec_typec.c
> > @@ -492,6 +492,8 @@ static int cros_typec_enable_dp(struct
> > cros_typec_data *typec,  {
> >         struct cros_typec_port *port = typec->ports[port_num];
> >         struct typec_displayport_data dp_data;
> > +       u32 cable_tbt_vdo;
> > +       u32 cable_dp_vdo;
> >         int ret;
> >
> >         if (typec->pd_ctrl_ver < 2) {
> > @@ -524,6 +526,32 @@ static int cros_typec_enable_dp(struct
> cros_typec_data *typec,
> >         port->state.data = &dp_data;
> >         port->state.mode = TYPEC_MODAL_STATE(ffs(pd_ctrl->dp_mode));
> >
> > +       /* Get cable VDO for cables with DPSID to check DPAM2.1 is supported
> */
> > +       cable_dp_vdo = cros_typec_get_cable_vdo(port,
> > + USB_TYPEC_DP_SID);
> > +
> > +       /**
> > +        * Get cable VDO for thunderbolt cables and cables with DPSID but does
> not
> > +        * support DPAM2.1.
> > +        */
> > +       cable_tbt_vdo = cros_typec_get_cable_vdo(port,
> > + USB_TYPEC_TBT_SID);
> > +
> > +       if (cable_dp_vdo & DP_CAP_DPAM_VERSION) {
> > +               dp_data.conf |= cable_dp_vdo;
> > +       } else if (cable_tbt_vdo) {
> > +               dp_data.conf |=  TBT_CABLE_SPEED(cable_tbt_vdo) <<
> > + DP_CONF_SIGNALLING_SHIFT;
> > +
> > +               /* Cable Type */
> > +               if (cable_tbt_vdo & TBT_CABLE_OPTICAL)
> > +                       dp_data.conf |= DP_CONF_CABLE_TYPE_OPTICAL <<
> DP_CONF_CABLE_TYPE_SHIFT;
> > +               else if (cable_tbt_vdo & TBT_CABLE_RETIMER)
> > +                       dp_data.conf |= DP_CONF_CABLE_TYPE_RE_TIMER <<
> DP_CONF_CABLE_TYPE_SHIFT;
> > +               else if (cable_tbt_vdo & TBT_CABLE_ACTIVE_PASSIVE)
> > +                       dp_data.conf |= DP_CONF_CABLE_TYPE_RE_DRIVER <<
> DP_CONF_CABLE_TYPE_SHIFT;
> > +       } else if (PD_IDH_PTYPE(port->c_identity.id_header) ==
> IDH_PTYPE_PCABLE) {
> > +               dp_data.conf |= VDO_TYPEC_CABLE_SPEED(port-
> >c_identity.vdo[0]) <<
> > +                               DP_CONF_SIGNALLING_SHIFT;
> > +       }
> > +
> >         ret = cros_typec_retimer_set(port->retimer, port->state);
> >         if (!ret)
> >                 ret = typec_mux_set(port->mux, &port->state); diff
> > --git a/include/linux/usb/pd_vdo.h b/include/linux/usb/pd_vdo.h index
> > b057250704e8..3a747938cdab 100644
> > --- a/include/linux/usb/pd_vdo.h
> > +++ b/include/linux/usb/pd_vdo.h
> > @@ -376,6 +376,7 @@
> >          | ((vbm) & 0x3) << 9 | (sbu) << 8 | (sbut) << 7 | ((cur) & 0x3) << 5   \
> >          | (vbt) << 4 | (sopp) << 3 | ((spd) & 0x7))
> >
> > +#define VDO_TYPEC_CABLE_SPEED(vdo)     ((vdo) & 0x7)
> 
> I would suggest putting this header modification in a separate patch; if for
> some reason we have to revert the Chrome part of the change, then we won't
> rip this part out too (some other driver down the road may use the macro and
> would break if it were to be removed). But I'll leave it to Heikki to determine
> whether that is preferred.
> 
Heikki,  What's your preference here?

Sincerely,
Utkarsh Patel.




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux