Message ID | 20191104142435.29960-18-heikki.krogerus@linux.intel.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | e716bb38edb44b6a7dd9b825f57450118b3066ae |
Headers | show |
Series | usb: typec: API improvements | expand |
On 11/4/19 6:24 AM, Heikki Krogerus wrote: > Adding new error codes to the driver that were introduced in > UCSI specification v1.1. > > Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> > Tested-by: Ajay Gupta <ajayg@nvidia.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> > --- > drivers/usb/typec/ucsi/ucsi.c | 25 ++++++++++++++++++++----- > drivers/usb/typec/ucsi/ucsi.h | 6 ++++++ > 2 files changed, 26 insertions(+), 5 deletions(-) > > diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c > index 6c6def96a55b..772f55c92ba3 100644 > --- a/drivers/usb/typec/ucsi/ucsi.c > +++ b/drivers/usb/typec/ucsi/ucsi.c > @@ -86,18 +86,33 @@ static int ucsi_read_error(struct ucsi *ucsi) > case UCSI_ERROR_DEAD_BATTERY: > dev_warn(ucsi->dev, "Dead battery condition!\n"); > return -EPERM; > - /* The following mean a bug in this driver */ > case UCSI_ERROR_INVALID_CON_NUM: > case UCSI_ERROR_UNREGONIZED_CMD: > case UCSI_ERROR_INVALID_CMD_ARGUMENT: > - dev_err(ucsi->dev, "possible UCSI driver bug (0x%x)\n", error); > + dev_err(ucsi->dev, "possible UCSI driver bug %u\n", error); > return -EINVAL; > + case UCSI_ERROR_OVERCURRENT: > + dev_warn(ucsi->dev, "Overcurrent condition\n"); > + break; > + case UCSI_ERROR_PARTNER_REJECTED_SWAP: > + dev_warn(ucsi->dev, "Partner rejected swap\n"); > + break; > + case UCSI_ERROR_HARD_RESET: > + dev_warn(ucsi->dev, "Hard reset occurred\n"); > + break; > + case UCSI_ERROR_PPM_POLICY_CONFLICT: > + dev_warn(ucsi->dev, "PPM Policy conflict\n"); > + break; > + case UCSI_ERROR_SWAP_REJECTED: > + dev_warn(ucsi->dev, "Swap rejected\n"); > + break; > + case UCSI_ERROR_UNDEFINED: > default: > - dev_err(ucsi->dev, "%s: error without status\n", __func__); > - return -EIO; > + dev_err(ucsi->dev, "unknown error %u\n", error); > + break; > } > > - return 0; > + return -EIO; > } > > static int ucsi_exec_command(struct ucsi *ucsi, u64 cmd) > diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h > index bc2254e7a3a3..8569bbd3762f 100644 > --- a/drivers/usb/typec/ucsi/ucsi.h > +++ b/drivers/usb/typec/ucsi/ucsi.h > @@ -133,6 +133,12 @@ void ucsi_connector_change(struct ucsi *ucsi, u8 num); > #define UCSI_ERROR_CC_COMMUNICATION_ERR BIT(4) > #define UCSI_ERROR_DEAD_BATTERY BIT(5) > #define UCSI_ERROR_CONTRACT_NEGOTIATION_FAIL BIT(6) > +#define UCSI_ERROR_OVERCURRENT BIT(7) > +#define UCSI_ERROR_UNDEFINED BIT(8) > +#define UCSI_ERROR_PARTNER_REJECTED_SWAP BIT(9) > +#define UCSI_ERROR_HARD_RESET BIT(10) > +#define UCSI_ERROR_PPM_POLICY_CONFLICT BIT(11) > +#define UCSI_ERROR_SWAP_REJECTED BIT(12) > > /* Data structure filled by PPM in response to GET_CAPABILITY command. */ > struct ucsi_capability { >
diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c index 6c6def96a55b..772f55c92ba3 100644 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -86,18 +86,33 @@ static int ucsi_read_error(struct ucsi *ucsi) case UCSI_ERROR_DEAD_BATTERY: dev_warn(ucsi->dev, "Dead battery condition!\n"); return -EPERM; - /* The following mean a bug in this driver */ case UCSI_ERROR_INVALID_CON_NUM: case UCSI_ERROR_UNREGONIZED_CMD: case UCSI_ERROR_INVALID_CMD_ARGUMENT: - dev_err(ucsi->dev, "possible UCSI driver bug (0x%x)\n", error); + dev_err(ucsi->dev, "possible UCSI driver bug %u\n", error); return -EINVAL; + case UCSI_ERROR_OVERCURRENT: + dev_warn(ucsi->dev, "Overcurrent condition\n"); + break; + case UCSI_ERROR_PARTNER_REJECTED_SWAP: + dev_warn(ucsi->dev, "Partner rejected swap\n"); + break; + case UCSI_ERROR_HARD_RESET: + dev_warn(ucsi->dev, "Hard reset occurred\n"); + break; + case UCSI_ERROR_PPM_POLICY_CONFLICT: + dev_warn(ucsi->dev, "PPM Policy conflict\n"); + break; + case UCSI_ERROR_SWAP_REJECTED: + dev_warn(ucsi->dev, "Swap rejected\n"); + break; + case UCSI_ERROR_UNDEFINED: default: - dev_err(ucsi->dev, "%s: error without status\n", __func__); - return -EIO; + dev_err(ucsi->dev, "unknown error %u\n", error); + break; } - return 0; + return -EIO; } static int ucsi_exec_command(struct ucsi *ucsi, u64 cmd) diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h index bc2254e7a3a3..8569bbd3762f 100644 --- a/drivers/usb/typec/ucsi/ucsi.h +++ b/drivers/usb/typec/ucsi/ucsi.h @@ -133,6 +133,12 @@ void ucsi_connector_change(struct ucsi *ucsi, u8 num); #define UCSI_ERROR_CC_COMMUNICATION_ERR BIT(4) #define UCSI_ERROR_DEAD_BATTERY BIT(5) #define UCSI_ERROR_CONTRACT_NEGOTIATION_FAIL BIT(6) +#define UCSI_ERROR_OVERCURRENT BIT(7) +#define UCSI_ERROR_UNDEFINED BIT(8) +#define UCSI_ERROR_PARTNER_REJECTED_SWAP BIT(9) +#define UCSI_ERROR_HARD_RESET BIT(10) +#define UCSI_ERROR_PPM_POLICY_CONFLICT BIT(11) +#define UCSI_ERROR_SWAP_REJECTED BIT(12) /* Data structure filled by PPM in response to GET_CAPABILITY command. */ struct ucsi_capability {