usb: typec: ucsi: New error codes
authorHeikki Krogerus <heikki.krogerus@linux.intel.com>
Mon, 4 Nov 2019 14:24:34 +0000 (17:24 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 4 Nov 2019 20:53:14 +0000 (21:53 +0100)
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>
Link: https://lore.kernel.org/r/20191104142435.29960-18-heikki.krogerus@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/ucsi/ucsi.c
drivers/usb/typec/ucsi/ucsi.h

index 6c6def9..772f55c 100644 (file)
@@ -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)
index bc2254e..8569bbd 100644 (file)
@@ -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 {