Message ID | 20200714231207.866838-1-badhri@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/3,v2] usb: typec: tcpci: Support BIST test data mode for compliance. | expand |
On 7/14/20 4:12 PM, Badhri Jagan Sridharan wrote: > Quoting from TCPCI spec: > "Setting this bit to 1 is intended to be used only when a USB compliance > tester is using USB BIST Test Data to test the PHY layer of the TCPC. The > TCPM should clear this bit when a disconnect is detected. > 0: Normal Operation. Incoming messages enabled by RECEIVE_DETECT > passed to TCPM via Alert. > 1: BIST Test Mode. Incoming messages enabled by RECEIVE_DETECT > result in GoodCRC response but may not be passed to the TCPM via > Alert." > > Signed-off-by: Badhri Jagan Sridharan <badhri@google.com> This needs to be the second patch in the series. The set_bist_data callback doesn't exist yet. Other than that, for the code itself: Reviewed-by: Guenter Roeck <linux@roeck-us.net> > --- > Version history: > Changes since V1:(Guenter's suggestions) > - Split the change into two: TCPM and TCPCI > - Move BIST log to TCPM log > - Alignment and column count changes > --- > drivers/usb/typec/tcpm/tcpci.c | 9 +++++++++ > drivers/usb/typec/tcpm/tcpci.h | 1 + > 2 files changed, 10 insertions(+) > > diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c > index 753645bb25273a..f57d91fd0e0924 100644 > --- a/drivers/usb/typec/tcpm/tcpci.c > +++ b/drivers/usb/typec/tcpm/tcpci.c > @@ -227,6 +227,14 @@ static int tcpci_set_vconn(struct tcpc_dev *tcpc, bool enable) > enable ? TCPC_POWER_CTRL_VCONN_ENABLE : 0); > } > > +static int tcpci_set_bist_data(struct tcpc_dev *tcpc, bool enable) > +{ > + struct tcpci *tcpci = tcpc_to_tcpci(tcpc); > + > + return regmap_update_bits(tcpci->regmap, TCPC_TCPC_CTRL, TCPC_TCPC_CTRL_BIST_TM, > + enable ? TCPC_TCPC_CTRL_BIST_TM : 0); > +} > + > static int tcpci_set_roles(struct tcpc_dev *tcpc, bool attached, > enum typec_role role, enum typec_data_role data) > { > @@ -530,6 +538,7 @@ struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data) > tcpci->tcpc.set_pd_rx = tcpci_set_pd_rx; > tcpci->tcpc.set_roles = tcpci_set_roles; > tcpci->tcpc.pd_transmit = tcpci_pd_transmit; > + tcpci->tcpc.set_bist_data = tcpci_set_bist_data; > > err = tcpci_parse_config(tcpci); > if (err < 0) > diff --git a/drivers/usb/typec/tcpm/tcpci.h b/drivers/usb/typec/tcpm/tcpci.h > index 303ebde265465c..11c36d086c8608 100644 > --- a/drivers/usb/typec/tcpm/tcpci.h > +++ b/drivers/usb/typec/tcpm/tcpci.h > @@ -36,6 +36,7 @@ > > #define TCPC_TCPC_CTRL 0x19 > #define TCPC_TCPC_CTRL_ORIENTATION BIT(0) > +#define TCPC_TCPC_CTRL_BIST_TM BIT(1) > > #define TCPC_ROLE_CTRL 0x1a > #define TCPC_ROLE_CTRL_DRP BIT(6) >
diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c index 753645bb25273a..f57d91fd0e0924 100644 --- a/drivers/usb/typec/tcpm/tcpci.c +++ b/drivers/usb/typec/tcpm/tcpci.c @@ -227,6 +227,14 @@ static int tcpci_set_vconn(struct tcpc_dev *tcpc, bool enable) enable ? TCPC_POWER_CTRL_VCONN_ENABLE : 0); } +static int tcpci_set_bist_data(struct tcpc_dev *tcpc, bool enable) +{ + struct tcpci *tcpci = tcpc_to_tcpci(tcpc); + + return regmap_update_bits(tcpci->regmap, TCPC_TCPC_CTRL, TCPC_TCPC_CTRL_BIST_TM, + enable ? TCPC_TCPC_CTRL_BIST_TM : 0); +} + static int tcpci_set_roles(struct tcpc_dev *tcpc, bool attached, enum typec_role role, enum typec_data_role data) { @@ -530,6 +538,7 @@ struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data) tcpci->tcpc.set_pd_rx = tcpci_set_pd_rx; tcpci->tcpc.set_roles = tcpci_set_roles; tcpci->tcpc.pd_transmit = tcpci_pd_transmit; + tcpci->tcpc.set_bist_data = tcpci_set_bist_data; err = tcpci_parse_config(tcpci); if (err < 0) diff --git a/drivers/usb/typec/tcpm/tcpci.h b/drivers/usb/typec/tcpm/tcpci.h index 303ebde265465c..11c36d086c8608 100644 --- a/drivers/usb/typec/tcpm/tcpci.h +++ b/drivers/usb/typec/tcpm/tcpci.h @@ -36,6 +36,7 @@ #define TCPC_TCPC_CTRL 0x19 #define TCPC_TCPC_CTRL_ORIENTATION BIT(0) +#define TCPC_TCPC_CTRL_BIST_TM BIT(1) #define TCPC_ROLE_CTRL 0x1a #define TCPC_ROLE_CTRL_DRP BIT(6)
Quoting from TCPCI spec: "Setting this bit to 1 is intended to be used only when a USB compliance tester is using USB BIST Test Data to test the PHY layer of the TCPC. The TCPM should clear this bit when a disconnect is detected. 0: Normal Operation. Incoming messages enabled by RECEIVE_DETECT passed to TCPM via Alert. 1: BIST Test Mode. Incoming messages enabled by RECEIVE_DETECT result in GoodCRC response but may not be passed to the TCPM via Alert." Signed-off-by: Badhri Jagan Sridharan <badhri@google.com> --- Version history: Changes since V1:(Guenter's suggestions) - Split the change into two: TCPM and TCPCI - Move BIST log to TCPM log - Alignment and column count changes --- drivers/usb/typec/tcpm/tcpci.c | 9 +++++++++ drivers/usb/typec/tcpm/tcpci.h | 1 + 2 files changed, 10 insertions(+)