usb: typec: tps6598x: Move the driver under its own subdirectory
authorHeikki Krogerus <heikki.krogerus@linux.intel.com>
Wed, 10 Mar 2021 10:46:29 +0000 (13:46 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 12 Mar 2021 14:32:20 +0000 (15:32 +0100)
The driver consist of multiple files. Grouping all of them
under a separate directory drivers/usb/typec/tipd/.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://lore.kernel.org/r/20210310104630.77945-3-heikki.krogerus@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/Kconfig
drivers/usb/typec/Makefile
drivers/usb/typec/tipd/Kconfig [new file with mode: 0644]
drivers/usb/typec/tipd/Makefile [new file with mode: 0644]
drivers/usb/typec/tipd/tps6598x.c [new file with mode: 0644]
drivers/usb/typec/tipd/tps6598x.h [new file with mode: 0644]
drivers/usb/typec/tipd/tps6598x_trace.h [new file with mode: 0644]
drivers/usb/typec/tps6598x.c [deleted file]
drivers/usb/typec/tps6598x.h [deleted file]
drivers/usb/typec/tps6598x_trace.h [deleted file]

index 270e81c087e925cdc968238d3a2f8d9daee59519..a0418f23b4aae298f44a87aa90744b0a82432858 100644 (file)
@@ -50,6 +50,8 @@ source "drivers/usb/typec/tcpm/Kconfig"
 
 source "drivers/usb/typec/ucsi/Kconfig"
 
+source "drivers/usb/typec/tipd/Kconfig"
+
 config TYPEC_HD3SS3220
        tristate "TI HD3SS3220 Type-C DRP Port controller driver"
        depends on I2C
@@ -61,19 +63,6 @@ config TYPEC_HD3SS3220
          If you choose to build this driver as a dynamically linked module, the
          module will be called hd3ss3220.ko.
 
-config TYPEC_TPS6598X
-       tristate "TI TPS6598x USB Power Delivery controller driver"
-       depends on I2C
-       select POWER_SUPPLY
-       select REGMAP_I2C
-       select USB_ROLE_SWITCH
-       help
-         Say Y or M here if your system has TI TPS65982 or TPS65983 USB Power
-         Delivery controller.
-
-         If you choose to build this driver as a dynamically linked module, the
-         module will be called tps6598x.ko.
-
 config TYPEC_STUSB160X
        tristate "STMicroelectronics STUSB160x Type-C controller driver"
        depends on I2C
index 27aa1212919075bc94285e3c2899dcf82ccd6845..1fb8b6668b1ba0f6dabd171ac226d64879db5d6a 100644 (file)
@@ -1,14 +1,11 @@
 # SPDX-License-Identifier: GPL-2.0
-# define_trace.h needs to know how to find our header
-CFLAGS_tps6598x.o              := -I$(src)
-
 obj-$(CONFIG_TYPEC)            += typec.o
 typec-y                                := class.o mux.o bus.o
 obj-$(CONFIG_TYPEC)            += altmodes/
 obj-$(CONFIG_TYPEC_TCPM)       += tcpm/
 obj-$(CONFIG_TYPEC_UCSI)       += ucsi/
+obj-$(CONFIG_TYPEC_TPS6598X)   += tipd/
 obj-$(CONFIG_TYPEC_HD3SS3220)  += hd3ss3220.o
-obj-$(CONFIG_TYPEC_TPS6598X)   += tps6598x.o
 obj-$(CONFIG_TYPEC_QCOM_PMIC)  += qcom-pmic-typec.o
 obj-$(CONFIG_TYPEC_STUSB160X)  += stusb160x.o
 obj-$(CONFIG_TYPEC)            += mux/
diff --git a/drivers/usb/typec/tipd/Kconfig b/drivers/usb/typec/tipd/Kconfig
new file mode 100644 (file)
index 0000000..b827152
--- /dev/null
@@ -0,0 +1,12 @@
+config TYPEC_TPS6598X
+       tristate "TI TPS6598x USB Power Delivery controller driver"
+       depends on I2C
+       select POWER_SUPPLY
+       select REGMAP_I2C
+       select USB_ROLE_SWITCH
+       help
+         Say Y or M here if your system has TI TPS65982 or TPS65983 USB Power
+         Delivery controller.
+
+         If you choose to build this driver as a dynamically linked module, the
+         module will be called tps6598x.ko.
diff --git a/drivers/usb/typec/tipd/Makefile b/drivers/usb/typec/tipd/Makefile
new file mode 100644 (file)
index 0000000..4c19ead
--- /dev/null
@@ -0,0 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0
+CFLAGS_tps6598x.o              := -I$(src)
+
+obj-$(CONFIG_TYPEC_TPS6598X)   += tps6598x.o
diff --git a/drivers/usb/typec/tipd/tps6598x.c b/drivers/usb/typec/tipd/tps6598x.c
new file mode 100644 (file)
index 0000000..2c4ab90
--- /dev/null
@@ -0,0 +1,751 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Driver for TI TPS6598x USB Power Delivery controller family
+ *
+ * Copyright (C) 2017, Intel Corporation
+ * Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
+ */
+
+#include "tps6598x.h"
+
+#include <linux/i2c.h>
+#include <linux/acpi.h>
+#include <linux/module.h>
+#include <linux/power_supply.h>
+#include <linux/regmap.h>
+#include <linux/interrupt.h>
+#include <linux/usb/typec.h>
+#include <linux/usb/role.h>
+
+#define CREATE_TRACE_POINTS
+#include "tps6598x_trace.h"
+
+/* Register offsets */
+#define TPS_REG_VID                    0x00
+#define TPS_REG_MODE                   0x03
+#define TPS_REG_CMD1                   0x08
+#define TPS_REG_DATA1                  0x09
+#define TPS_REG_INT_EVENT1             0x14
+#define TPS_REG_INT_EVENT2             0x15
+#define TPS_REG_INT_MASK1              0x16
+#define TPS_REG_INT_MASK2              0x17
+#define TPS_REG_INT_CLEAR1             0x18
+#define TPS_REG_INT_CLEAR2             0x19
+#define TPS_REG_STATUS                 0x1a
+#define TPS_REG_SYSTEM_CONF            0x28
+#define TPS_REG_CTRL_CONF              0x29
+#define TPS_REG_POWER_STATUS           0x3f
+#define TPS_REG_RX_IDENTITY_SOP                0x48
+#define TPS_REG_DATA_STATUS            0x5f
+
+/* TPS_REG_SYSTEM_CONF bits */
+#define TPS_SYSCONF_PORTINFO(c)                ((c) & 7)
+
+enum {
+       TPS_PORTINFO_SINK,
+       TPS_PORTINFO_SINK_ACCESSORY,
+       TPS_PORTINFO_DRP_UFP,
+       TPS_PORTINFO_DRP_UFP_DRD,
+       TPS_PORTINFO_DRP_DFP,
+       TPS_PORTINFO_DRP_DFP_DRD,
+       TPS_PORTINFO_SOURCE,
+};
+
+/* TPS_REG_RX_IDENTITY_SOP */
+struct tps6598x_rx_identity_reg {
+       u8 status;
+       struct usb_pd_identity identity;
+       u32 vdo[3];
+} __packed;
+
+/* Standard Task return codes */
+#define TPS_TASK_TIMEOUT               1
+#define TPS_TASK_REJECTED              3
+
+enum {
+       TPS_MODE_APP,
+       TPS_MODE_BOOT,
+       TPS_MODE_BIST,
+       TPS_MODE_DISC,
+};
+
+static const char *const modes[] = {
+       [TPS_MODE_APP]  = "APP ",
+       [TPS_MODE_BOOT] = "BOOT",
+       [TPS_MODE_BIST] = "BIST",
+       [TPS_MODE_DISC] = "DISC",
+};
+
+/* Unrecognized commands will be replaced with "!CMD" */
+#define INVALID_CMD(_cmd_)             (_cmd_ == 0x444d4321)
+
+struct tps6598x {
+       struct device *dev;
+       struct regmap *regmap;
+       struct mutex lock; /* device lock */
+       u8 i2c_protocol:1;
+
+       struct typec_port *port;
+       struct typec_partner *partner;
+       struct usb_pd_identity partner_identity;
+       struct usb_role_switch *role_sw;
+       struct typec_capability typec_cap;
+
+       struct power_supply *psy;
+       struct power_supply_desc psy_desc;
+       enum power_supply_usb_type usb_type;
+};
+
+static enum power_supply_property tps6598x_psy_props[] = {
+       POWER_SUPPLY_PROP_USB_TYPE,
+       POWER_SUPPLY_PROP_ONLINE,
+};
+
+static enum power_supply_usb_type tps6598x_psy_usb_types[] = {
+       POWER_SUPPLY_USB_TYPE_C,
+       POWER_SUPPLY_USB_TYPE_PD,
+};
+
+static const char *tps6598x_psy_name_prefix = "tps6598x-source-psy-";
+
+/*
+ * Max data bytes for Data1, Data2, and other registers. See ch 1.3.2:
+ * https://www.ti.com/lit/ug/slvuan1a/slvuan1a.pdf
+ */
+#define TPS_MAX_LEN    64
+
+static int
+tps6598x_block_read(struct tps6598x *tps, u8 reg, void *val, size_t len)
+{
+       u8 data[TPS_MAX_LEN + 1];
+       int ret;
+
+       if (WARN_ON(len + 1 > sizeof(data)))
+               return -EINVAL;
+
+       if (!tps->i2c_protocol)
+               return regmap_raw_read(tps->regmap, reg, val, len);
+
+       ret = regmap_raw_read(tps->regmap, reg, data, sizeof(data));
+       if (ret)
+               return ret;
+
+       if (data[0] < len)
+               return -EIO;
+
+       memcpy(val, &data[1], len);
+       return 0;
+}
+
+static int tps6598x_block_write(struct tps6598x *tps, u8 reg,
+                               const void *val, size_t len)
+{
+       u8 data[TPS_MAX_LEN + 1];
+
+       if (!tps->i2c_protocol)
+               return regmap_raw_write(tps->regmap, reg, val, len);
+
+       data[0] = len;
+       memcpy(&data[1], val, len);
+
+       return regmap_raw_write(tps->regmap, reg, data, sizeof(data));
+}
+
+static inline int tps6598x_read16(struct tps6598x *tps, u8 reg, u16 *val)
+{
+       return tps6598x_block_read(tps, reg, val, sizeof(u16));
+}
+
+static inline int tps6598x_read32(struct tps6598x *tps, u8 reg, u32 *val)
+{
+       return tps6598x_block_read(tps, reg, val, sizeof(u32));
+}
+
+static inline int tps6598x_read64(struct tps6598x *tps, u8 reg, u64 *val)
+{
+       return tps6598x_block_read(tps, reg, val, sizeof(u64));
+}
+
+static inline int tps6598x_write16(struct tps6598x *tps, u8 reg, u16 val)
+{
+       return tps6598x_block_write(tps, reg, &val, sizeof(u16));
+}
+
+static inline int tps6598x_write32(struct tps6598x *tps, u8 reg, u32 val)
+{
+       return tps6598x_block_write(tps, reg, &val, sizeof(u32));
+}
+
+static inline int tps6598x_write64(struct tps6598x *tps, u8 reg, u64 val)
+{
+       return tps6598x_block_write(tps, reg, &val, sizeof(u64));
+}
+
+static inline int
+tps6598x_write_4cc(struct tps6598x *tps, u8 reg, const char *val)
+{
+       return tps6598x_block_write(tps, reg, val, 4);
+}
+
+static int tps6598x_read_partner_identity(struct tps6598x *tps)
+{
+       struct tps6598x_rx_identity_reg id;
+       int ret;
+
+       ret = tps6598x_block_read(tps, TPS_REG_RX_IDENTITY_SOP,
+                                 &id, sizeof(id));
+       if (ret)
+               return ret;
+
+       tps->partner_identity = id.identity;
+
+       return 0;
+}
+
+static void tps6598x_set_data_role(struct tps6598x *tps,
+                                  enum typec_data_role role, bool connected)
+{
+       enum usb_role role_val;
+
+       if (role == TYPEC_HOST)
+               role_val = USB_ROLE_HOST;
+       else
+               role_val = USB_ROLE_DEVICE;
+
+       if (!connected)
+               role_val = USB_ROLE_NONE;
+
+       usb_role_switch_set_role(tps->role_sw, role_val);
+       typec_set_data_role(tps->port, role);
+}
+
+static int tps6598x_connect(struct tps6598x *tps, u32 status)
+{
+       struct typec_partner_desc desc;
+       enum typec_pwr_opmode mode;
+       u16 pwr_status;
+       int ret;
+
+       if (tps->partner)
+               return 0;
+
+       ret = tps6598x_read16(tps, TPS_REG_POWER_STATUS, &pwr_status);
+       if (ret < 0)
+               return ret;
+
+       mode = TPS_POWER_STATUS_PWROPMODE(pwr_status);
+
+       desc.usb_pd = mode == TYPEC_PWR_MODE_PD;
+       desc.accessory = TYPEC_ACCESSORY_NONE; /* XXX: handle accessories */
+       desc.identity = NULL;
+
+       if (desc.usb_pd) {
+               ret = tps6598x_read_partner_identity(tps);
+               if (ret)
+                       return ret;
+               desc.identity = &tps->partner_identity;
+       }
+
+       typec_set_pwr_opmode(tps->port, mode);
+       typec_set_pwr_role(tps->port, TPS_STATUS_TO_TYPEC_PORTROLE(status));
+       typec_set_vconn_role(tps->port, TPS_STATUS_TO_TYPEC_VCONN(status));
+       tps6598x_set_data_role(tps, TPS_STATUS_TO_TYPEC_DATAROLE(status), true);
+
+       tps->partner = typec_register_partner(tps->port, &desc);
+       if (IS_ERR(tps->partner))
+               return PTR_ERR(tps->partner);
+
+       if (desc.identity)
+               typec_partner_set_identity(tps->partner);
+
+       power_supply_changed(tps->psy);
+
+       return 0;
+}
+
+static void tps6598x_disconnect(struct tps6598x *tps, u32 status)
+{
+       if (!IS_ERR(tps->partner))
+               typec_unregister_partner(tps->partner);
+       tps->partner = NULL;
+       typec_set_pwr_opmode(tps->port, TYPEC_PWR_MODE_USB);
+       typec_set_pwr_role(tps->port, TPS_STATUS_TO_TYPEC_PORTROLE(status));
+       typec_set_vconn_role(tps->port, TPS_STATUS_TO_TYPEC_VCONN(status));
+       tps6598x_set_data_role(tps, TPS_STATUS_TO_TYPEC_DATAROLE(status), false);
+
+       power_supply_changed(tps->psy);
+}
+
+static int tps6598x_exec_cmd(struct tps6598x *tps, const char *cmd,
+                            size_t in_len, u8 *in_data,
+                            size_t out_len, u8 *out_data)
+{
+       unsigned long timeout;
+       u32 val;
+       int ret;
+
+       ret = tps6598x_read32(tps, TPS_REG_CMD1, &val);
+       if (ret)
+               return ret;
+       if (val && !INVALID_CMD(val))
+               return -EBUSY;
+
+       if (in_len) {
+               ret = tps6598x_block_write(tps, TPS_REG_DATA1,
+                                          in_data, in_len);
+               if (ret)
+                       return ret;
+       }
+
+       ret = tps6598x_write_4cc(tps, TPS_REG_CMD1, cmd);
+       if (ret < 0)
+               return ret;
+
+       /* XXX: Using 1s for now, but it may not be enough for every command. */
+       timeout = jiffies + msecs_to_jiffies(1000);
+
+       do {
+               ret = tps6598x_read32(tps, TPS_REG_CMD1, &val);
+               if (ret)
+                       return ret;
+               if (INVALID_CMD(val))
+                       return -EINVAL;
+
+               if (time_is_before_jiffies(timeout))
+                       return -ETIMEDOUT;
+       } while (val);
+
+       if (out_len) {
+               ret = tps6598x_block_read(tps, TPS_REG_DATA1,
+                                         out_data, out_len);
+               if (ret)
+                       return ret;
+               val = out_data[0];
+       } else {
+               ret = tps6598x_block_read(tps, TPS_REG_DATA1, &val, sizeof(u8));
+               if (ret)
+                       return ret;
+       }
+
+       switch (val) {
+       case TPS_TASK_TIMEOUT:
+               return -ETIMEDOUT;
+       case TPS_TASK_REJECTED:
+               return -EPERM;
+       default:
+               break;
+       }
+
+       return 0;
+}
+
+static int tps6598x_dr_set(struct typec_port *port, enum typec_data_role role)
+{
+       const char *cmd = (role == TYPEC_DEVICE) ? "SWUF" : "SWDF";
+       struct tps6598x *tps = typec_get_drvdata(port);
+       u32 status;
+       int ret;
+
+       mutex_lock(&tps->lock);
+
+       ret = tps6598x_exec_cmd(tps, cmd, 0, NULL, 0, NULL);
+       if (ret)
+               goto out_unlock;
+
+       ret = tps6598x_read32(tps, TPS_REG_STATUS, &status);
+       if (ret)
+               goto out_unlock;
+
+       if (role != TPS_STATUS_TO_TYPEC_DATAROLE(status)) {
+               ret = -EPROTO;
+               goto out_unlock;
+       }
+
+       tps6598x_set_data_role(tps, role, true);
+
+out_unlock:
+       mutex_unlock(&tps->lock);
+
+       return ret;
+}
+
+static int tps6598x_pr_set(struct typec_port *port, enum typec_role role)
+{
+       const char *cmd = (role == TYPEC_SINK) ? "SWSk" : "SWSr";
+       struct tps6598x *tps = typec_get_drvdata(port);
+       u32 status;
+       int ret;
+
+       mutex_lock(&tps->lock);
+
+       ret = tps6598x_exec_cmd(tps, cmd, 0, NULL, 0, NULL);
+       if (ret)
+               goto out_unlock;
+
+       ret = tps6598x_read32(tps, TPS_REG_STATUS, &status);
+       if (ret)
+               goto out_unlock;
+
+       if (role != TPS_STATUS_TO_TYPEC_PORTROLE(status)) {
+               ret = -EPROTO;
+               goto out_unlock;
+       }
+
+       typec_set_pwr_role(tps->port, role);
+
+out_unlock:
+       mutex_unlock(&tps->lock);
+
+       return ret;
+}
+
+static const struct typec_operations tps6598x_ops = {
+       .dr_set = tps6598x_dr_set,
+       .pr_set = tps6598x_pr_set,
+};
+
+static irqreturn_t tps6598x_interrupt(int irq, void *data)
+{
+       struct tps6598x *tps = data;
+       u64 event1;
+       u64 event2;
+       u32 status, data_status;
+       u16 pwr_status;
+       int ret;
+
+       mutex_lock(&tps->lock);
+
+       ret = tps6598x_read64(tps, TPS_REG_INT_EVENT1, &event1);
+       ret |= tps6598x_read64(tps, TPS_REG_INT_EVENT2, &event2);
+       if (ret) {
+               dev_err(tps->dev, "%s: failed to read events\n", __func__);
+               goto err_unlock;
+       }
+       trace_tps6598x_irq(event1, event2);
+
+       ret = tps6598x_read32(tps, TPS_REG_STATUS, &status);
+       if (ret) {
+               dev_err(tps->dev, "%s: failed to read status\n", __func__);
+               goto err_clear_ints;
+       }
+       trace_tps6598x_status(status);
+
+       if ((event1 | event2) & TPS_REG_INT_POWER_STATUS_UPDATE) {
+               ret = tps6598x_read16(tps, TPS_REG_POWER_STATUS, &pwr_status);
+               if (ret < 0) {
+                       dev_err(tps->dev, "failed to read power status: %d\n", ret);
+                       goto err_clear_ints;
+               }
+               trace_tps6598x_power_status(pwr_status);
+       }
+
+       if ((event1 | event2) & TPS_REG_INT_DATA_STATUS_UPDATE) {
+               ret = tps6598x_read32(tps, TPS_REG_DATA_STATUS, &data_status);
+               if (ret < 0) {
+                       dev_err(tps->dev, "failed to read data status: %d\n", ret);
+                       goto err_clear_ints;
+               }
+               trace_tps6598x_data_status(data_status);
+       }
+
+       /* Handle plug insert or removal */
+       if ((event1 | event2) & TPS_REG_INT_PLUG_EVENT) {
+               if (status & TPS_STATUS_PLUG_PRESENT) {
+                       ret = tps6598x_connect(tps, status);
+                       if (ret)
+                               dev_err(tps->dev,
+                                       "failed to register partner\n");
+               } else {
+                       tps6598x_disconnect(tps, status);
+               }
+       }
+
+err_clear_ints:
+       tps6598x_write64(tps, TPS_REG_INT_CLEAR1, event1);
+       tps6598x_write64(tps, TPS_REG_INT_CLEAR2, event2);
+
+err_unlock:
+       mutex_unlock(&tps->lock);
+
+       return IRQ_HANDLED;
+}
+
+static int tps6598x_check_mode(struct tps6598x *tps)
+{
+       char mode[5] = { };
+       int ret;
+
+       ret = tps6598x_read32(tps, TPS_REG_MODE, (void *)mode);
+       if (ret)
+               return ret;
+
+       switch (match_string(modes, ARRAY_SIZE(modes), mode)) {
+       case TPS_MODE_APP:
+               return 0;
+       case TPS_MODE_BOOT:
+               dev_warn(tps->dev, "dead-battery condition\n");
+               return 0;
+       case TPS_MODE_BIST:
+       case TPS_MODE_DISC:
+       default:
+               dev_err(tps->dev, "controller in unsupported mode \"%s\"\n",
+                       mode);
+               break;
+       }
+
+       return -ENODEV;
+}
+
+static const struct regmap_config tps6598x_regmap_config = {
+       .reg_bits = 8,
+       .val_bits = 8,
+       .max_register = 0x7F,
+};
+
+static int tps6598x_psy_get_online(struct tps6598x *tps,
+                                  union power_supply_propval *val)
+{
+       int ret;
+       u16 pwr_status;
+
+       ret = tps6598x_read16(tps, TPS_REG_POWER_STATUS, &pwr_status);
+       if (ret < 0)
+               return ret;
+
+       if (TPS_POWER_STATUS_CONNECTION(pwr_status) &&
+           TPS_POWER_STATUS_SOURCESINK(pwr_status)) {
+               val->intval = 1;
+       } else {
+               val->intval = 0;
+       }
+       return 0;
+}
+
+static int tps6598x_psy_get_prop(struct power_supply *psy,
+                                enum power_supply_property psp,
+                                union power_supply_propval *val)
+{
+       struct tps6598x *tps = power_supply_get_drvdata(psy);
+       u16 pwr_status;
+       int ret = 0;
+
+       switch (psp) {
+       case POWER_SUPPLY_PROP_USB_TYPE:
+               ret = tps6598x_read16(tps, TPS_REG_POWER_STATUS, &pwr_status);
+               if (ret < 0)
+                       return ret;
+               if (TPS_POWER_STATUS_PWROPMODE(pwr_status) == TYPEC_PWR_MODE_PD)
+                       val->intval = POWER_SUPPLY_USB_TYPE_PD;
+               else
+                       val->intval = POWER_SUPPLY_USB_TYPE_C;
+               break;
+       case POWER_SUPPLY_PROP_ONLINE:
+               ret = tps6598x_psy_get_online(tps, val);
+               break;
+       default:
+               ret = -EINVAL;
+               break;
+       }
+
+       return ret;
+}
+
+static int devm_tps6598_psy_register(struct tps6598x *tps)
+{
+       struct power_supply_config psy_cfg = {};
+       const char *port_dev_name = dev_name(tps->dev);
+       char *psy_name;
+
+       psy_cfg.drv_data = tps;
+       psy_cfg.fwnode = dev_fwnode(tps->dev);
+
+       psy_name = devm_kasprintf(tps->dev, GFP_KERNEL, "%s%s", tps6598x_psy_name_prefix,
+                                 port_dev_name);
+       if (!psy_name)
+               return -ENOMEM;
+
+       tps->psy_desc.name = psy_name;
+       tps->psy_desc.type = POWER_SUPPLY_TYPE_USB;
+       tps->psy_desc.usb_types = tps6598x_psy_usb_types;
+       tps->psy_desc.num_usb_types = ARRAY_SIZE(tps6598x_psy_usb_types);
+       tps->psy_desc.properties = tps6598x_psy_props;
+       tps->psy_desc.num_properties = ARRAY_SIZE(tps6598x_psy_props);
+       tps->psy_desc.get_property = tps6598x_psy_get_prop;
+
+       tps->usb_type = POWER_SUPPLY_USB_TYPE_C;
+
+       tps->psy = devm_power_supply_register(tps->dev, &tps->psy_desc,
+                                              &psy_cfg);
+       return PTR_ERR_OR_ZERO(tps->psy);
+}
+
+static int tps6598x_probe(struct i2c_client *client)
+{
+       struct typec_capability typec_cap = { };
+       struct tps6598x *tps;
+       struct fwnode_handle *fwnode;
+       u32 status;
+       u32 conf;
+       u32 vid;
+       int ret;
+
+       tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL);
+       if (!tps)
+               return -ENOMEM;
+
+       mutex_init(&tps->lock);
+       tps->dev = &client->dev;
+
+       tps->regmap = devm_regmap_init_i2c(client, &tps6598x_regmap_config);
+       if (IS_ERR(tps->regmap))
+               return PTR_ERR(tps->regmap);
+
+       ret = tps6598x_read32(tps, TPS_REG_VID, &vid);
+       if (ret < 0 || !vid)
+               return -ENODEV;
+
+       /*
+        * Checking can the adapter handle SMBus protocol. If it can not, the
+        * driver needs to take care of block reads separately.
+        *
+        * FIXME: Testing with I2C_FUNC_I2C. regmap-i2c uses I2C protocol
+        * unconditionally if the adapter has I2C_FUNC_I2C set.
+        */
+       if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
+               tps->i2c_protocol = true;
+
+       /* Make sure the controller has application firmware running */
+       ret = tps6598x_check_mode(tps);
+       if (ret)
+               return ret;
+
+       ret = tps6598x_read32(tps, TPS_REG_STATUS, &status);
+       if (ret < 0)
+               return ret;
+       trace_tps6598x_status(status);
+
+       ret = tps6598x_read32(tps, TPS_REG_SYSTEM_CONF, &conf);
+       if (ret < 0)
+               return ret;
+
+       fwnode = device_get_named_child_node(&client->dev, "connector");
+       if (!fwnode)
+               return -ENODEV;
+
+       tps->role_sw = fwnode_usb_role_switch_get(fwnode);
+       if (IS_ERR(tps->role_sw)) {
+               ret = PTR_ERR(tps->role_sw);
+               goto err_fwnode_put;
+       }
+
+       typec_cap.revision = USB_TYPEC_REV_1_2;
+       typec_cap.pd_revision = 0x200;
+       typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE;
+       typec_cap.driver_data = tps;
+       typec_cap.ops = &tps6598x_ops;
+       typec_cap.fwnode = fwnode;
+
+       switch (TPS_SYSCONF_PORTINFO(conf)) {
+       case TPS_PORTINFO_SINK_ACCESSORY:
+       case TPS_PORTINFO_SINK:
+               typec_cap.type = TYPEC_PORT_SNK;
+               typec_cap.data = TYPEC_PORT_UFP;
+               break;
+       case TPS_PORTINFO_DRP_UFP_DRD:
+       case TPS_PORTINFO_DRP_DFP_DRD:
+               typec_cap.type = TYPEC_PORT_DRP;
+               typec_cap.data = TYPEC_PORT_DRD;
+               break;
+       case TPS_PORTINFO_DRP_UFP:
+               typec_cap.type = TYPEC_PORT_DRP;
+               typec_cap.data = TYPEC_PORT_UFP;
+               break;
+       case TPS_PORTINFO_DRP_DFP:
+               typec_cap.type = TYPEC_PORT_DRP;
+               typec_cap.data = TYPEC_PORT_DFP;
+               break;
+       case TPS_PORTINFO_SOURCE:
+               typec_cap.type = TYPEC_PORT_SRC;
+               typec_cap.data = TYPEC_PORT_DFP;
+               break;
+       default:
+               ret = -ENODEV;
+               goto err_role_put;
+       }
+
+       ret = devm_tps6598_psy_register(tps);
+       if (ret)
+               return ret;
+
+       tps->port = typec_register_port(&client->dev, &typec_cap);
+       if (IS_ERR(tps->port)) {
+               ret = PTR_ERR(tps->port);
+               goto err_role_put;
+       }
+       fwnode_handle_put(fwnode);
+
+       if (status & TPS_STATUS_PLUG_PRESENT) {
+               ret = tps6598x_connect(tps, status);
+               if (ret)
+                       dev_err(&client->dev, "failed to register partner\n");
+       }
+
+       ret = devm_request_threaded_irq(&client->dev, client->irq, NULL,
+                                       tps6598x_interrupt,
+                                       IRQF_SHARED | IRQF_ONESHOT,
+                                       dev_name(&client->dev), tps);
+       if (ret) {
+               tps6598x_disconnect(tps, 0);
+               typec_unregister_port(tps->port);
+               goto err_role_put;
+       }
+
+       i2c_set_clientdata(client, tps);
+
+       return 0;
+
+err_role_put:
+       usb_role_switch_put(tps->role_sw);
+err_fwnode_put:
+       fwnode_handle_put(fwnode);
+
+       return ret;
+}
+
+static int tps6598x_remove(struct i2c_client *client)
+{
+       struct tps6598x *tps = i2c_get_clientdata(client);
+
+       tps6598x_disconnect(tps, 0);
+       typec_unregister_port(tps->port);
+       usb_role_switch_put(tps->role_sw);
+
+       return 0;
+}
+
+static const struct of_device_id tps6598x_of_match[] = {
+       { .compatible = "ti,tps6598x", },
+       {}
+};
+MODULE_DEVICE_TABLE(of, tps6598x_of_match);
+
+static const struct i2c_device_id tps6598x_id[] = {
+       { "tps6598x" },
+       { }
+};
+MODULE_DEVICE_TABLE(i2c, tps6598x_id);
+
+static struct i2c_driver tps6598x_i2c_driver = {
+       .driver = {
+               .name = "tps6598x",
+               .of_match_table = tps6598x_of_match,
+       },
+       .probe_new = tps6598x_probe,
+       .remove = tps6598x_remove,
+       .id_table = tps6598x_id,
+};
+module_i2c_driver(tps6598x_i2c_driver);
+
+MODULE_AUTHOR("Heikki Krogerus <heikki.krogerus@linux.intel.com>");
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("TI TPS6598x USB Power Delivery Controller Driver");
diff --git a/drivers/usb/typec/tipd/tps6598x.h b/drivers/usb/typec/tipd/tps6598x.h
new file mode 100644 (file)
index 0000000..003a577
--- /dev/null
@@ -0,0 +1,189 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Driver for TI TPS6598x USB Power Delivery controller family
+ *
+ * Copyright (C) 2017, Intel Corporation
+ * Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
+ */
+
+#include <linux/bits.h>
+#include <linux/bitfield.h>
+
+#ifndef __TPS6598X_H__
+#define __TPS6598X_H__
+
+#define TPS_FIELD_GET(_mask, _reg) ((typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)))
+
+/* TPS_REG_STATUS bits */
+#define TPS_STATUS_PLUG_PRESENT                BIT(0)
+#define TPS_STATUS_PLUG_UPSIDE_DOWN    BIT(4)
+#define TPS_STATUS_PORTROLE            BIT(5)
+#define TPS_STATUS_TO_TYPEC_PORTROLE(s) (!!((s) & TPS_STATUS_PORTROLE))
+#define TPS_STATUS_DATAROLE            BIT(6)
+#define TPS_STATUS_TO_TYPEC_DATAROLE(s)        (!!((s) & TPS_STATUS_DATAROLE))
+#define TPS_STATUS_VCONN               BIT(7)
+#define TPS_STATUS_TO_TYPEC_VCONN(s)   (!!((s) & TPS_STATUS_VCONN))
+#define TPS_STATUS_OVERCURRENT         BIT(16)
+#define TPS_STATUS_GOTO_MIN_ACTIVE     BIT(26)
+#define TPS_STATUS_BIST                        BIT(27)
+#define TPS_STATUS_HIGH_VOLAGE_WARNING BIT(28)
+#define TPS_STATUS_HIGH_LOW_VOLTAGE_WARNING BIT(29)
+
+#define TPS_STATUS_CONN_STATE_MASK             GENMASK(3, 1)
+#define TPS_STATUS_CONN_STATE(x)               TPS_FIELD_GET(TPS_STATUS_CONN_STATE_MASK, (x))
+#define TPS_STATUS_PP_5V0_SWITCH_MASK          GENMASK(9, 8)
+#define TPS_STATUS_PP_5V0_SWITCH(x)            TPS_FIELD_GET(TPS_STATUS_PP_5V0_SWITCH_MASK, (x))
+#define TPS_STATUS_PP_HV_SWITCH_MASK           GENMASK(11, 10)
+#define TPS_STATUS_PP_HV_SWITCH(x)             TPS_FIELD_GET(TPS_STATUS_PP_HV_SWITCH_MASK, (x))
+#define TPS_STATUS_PP_EXT_SWITCH_MASK          GENMASK(13, 12)
+#define TPS_STATUS_PP_EXT_SWITCH(x)            TPS_FIELD_GET(TPS_STATUS_PP_EXT_SWITCH_MASK, (x))
+#define TPS_STATUS_PP_CABLE_SWITCH_MASK                GENMASK(15, 14)
+#define TPS_STATUS_PP_CABLE_SWITCH(x)          TPS_FIELD_GET(TPS_STATUS_PP_CABLE_SWITCH_MASK, (x))
+#define TPS_STATUS_POWER_SOURCE_MASK           GENMASK(19, 18)
+#define TPS_STATUS_POWER_SOURCE(x)             TPS_FIELD_GET(TPS_STATUS_POWER_SOURCE_MASK, (x))
+#define TPS_STATUS_VBUS_STATUS_MASK            GENMASK(21, 20)
+#define TPS_STATUS_VBUS_STATUS(x)              TPS_FIELD_GET(TPS_STATUS_VBUS_STATUS_MASK, (x))
+#define TPS_STATUS_USB_HOST_PRESENT_MASK       GENMASK(23, 22)
+#define TPS_STATUS_USB_HOST_PRESENT(x)         TPS_FIELD_GET(TPS_STATUS_USB_HOST_PRESENT_MASK, (x))
+#define TPS_STATUS_LEGACY_MASK                 GENMASK(25, 24)
+#define TPS_STATUS_LEGACY(x)                   TPS_FIELD_GET(TPS_STATUS_LEGACY_MASK, (x))
+
+#define TPS_STATUS_CONN_STATE_NO_CONN          0
+#define TPS_STATUS_CONN_STATE_DISABLED         1
+#define TPS_STATUS_CONN_STATE_AUDIO_CONN       2
+#define TPS_STATUS_CONN_STATE_DEBUG_CONN       3
+#define TPS_STATUS_CONN_STATE_NO_CONN_R_A      4
+#define TPS_STATUS_CONN_STATE_RESERVED         5
+#define TPS_STATUS_CONN_STATE_CONN_NO_R_A      6
+#define TPS_STATUS_CONN_STATE_CONN_WITH_R_A    7
+
+#define TPS_STATUS_PP_SWITCH_STATE_DISABLED    0
+#define TPS_STATUS_PP_SWITCH_STATE_FAULT       1
+#define TPS_STATUS_PP_SWITCH_STATE_OUT         2
+#define TPS_STATUS_PP_SWITCH_STATE_IN          3
+
+#define TPS_STATUS_POWER_SOURCE_UNKNOWN                0
+#define TPS_STATUS_POWER_SOURCE_VIN_3P3                1
+#define TPS_STATUS_POWER_SOURCE_DEAD_BAT       2
+#define TPS_STATUS_POWER_SOURCE_VBUS           3
+
+#define TPS_STATUS_VBUS_STATUS_VSAFE0V         0
+#define TPS_STATUS_VBUS_STATUS_VSAFE5V         1
+#define TPS_STATUS_VBUS_STATUS_PD              2
+#define TPS_STATUS_VBUS_STATUS_FAULT           3
+
+#define TPS_STATUS_USB_HOST_PRESENT_NO         0
+#define TPS_STATUS_USB_HOST_PRESENT_PD_NO_USB  1
+#define TPS_STATUS_USB_HOST_PRESENT_NO_PD      2
+#define TPS_STATUS_USB_HOST_PRESENT_PD_USB     3
+
+#define TPS_STATUS_LEGACY_NO                   0
+#define TPS_STATUS_LEGACY_SINK                 1
+#define TPS_STATUS_LEGACY_SOURCE               2
+
+/* TPS_REG_INT_* bits */
+#define TPS_REG_INT_USER_VID_ALT_MODE_OTHER_VDM                BIT_ULL(27+32)
+#define TPS_REG_INT_USER_VID_ALT_MODE_ATTN_VDM         BIT_ULL(26+32)
+#define TPS_REG_INT_USER_VID_ALT_MODE_EXIT             BIT_ULL(25+32)
+#define TPS_REG_INT_USER_VID_ALT_MODE_ENTERED          BIT_ULL(24+32)
+#define TPS_REG_INT_EXIT_MODES_COMPLETE                        BIT_ULL(20+32)
+#define TPS_REG_INT_DISCOVER_MODES_COMPLETE            BIT_ULL(19+32)
+#define TPS_REG_INT_VDM_MSG_SENT                       BIT_ULL(18+32)
+#define TPS_REG_INT_VDM_ENTERED_MODE                   BIT_ULL(17+32)
+#define TPS_REG_INT_ERROR_UNABLE_TO_SOURCE             BIT_ULL(14+32)
+#define TPS_REG_INT_SRC_TRANSITION                     BIT_ULL(10+32)
+#define TPS_REG_INT_ERROR_DISCHARGE_FAILED             BIT_ULL(9+32)
+#define TPS_REG_INT_ERROR_MESSAGE_DATA                 BIT_ULL(7+32)
+#define TPS_REG_INT_ERROR_PROTOCOL_ERROR               BIT_ULL(6+32)
+#define TPS_REG_INT_ERROR_MISSING_GET_CAP_MESSAGE      BIT_ULL(4+32)
+#define TPS_REG_INT_ERROR_POWER_EVENT_OCCURRED         BIT_ULL(3+32)
+#define TPS_REG_INT_ERROR_CAN_PROVIDE_PWR_LATER                BIT_ULL(2+32)
+#define TPS_REG_INT_ERROR_CANNOT_PROVIDE_PWR           BIT_ULL(1+32)
+#define TPS_REG_INT_ERROR_DEVICE_INCOMPATIBLE          BIT_ULL(0+32)
+#define TPS_REG_INT_CMD2_COMPLETE                      BIT(31)
+#define TPS_REG_INT_CMD1_COMPLETE                      BIT(30)
+#define TPS_REG_INT_ADC_HIGH_THRESHOLD                 BIT(29)
+#define TPS_REG_INT_ADC_LOW_THRESHOLD                  BIT(28)
+#define TPS_REG_INT_PD_STATUS_UPDATE                   BIT(27)
+#define TPS_REG_INT_STATUS_UPDATE                      BIT(26)
+#define TPS_REG_INT_DATA_STATUS_UPDATE                 BIT(25)
+#define TPS_REG_INT_POWER_STATUS_UPDATE                        BIT(24)
+#define TPS_REG_INT_PP_SWITCH_CHANGED                  BIT(23)
+#define TPS_REG_INT_HIGH_VOLTAGE_WARNING               BIT(22)
+#define TPS_REG_INT_USB_HOST_PRESENT_NO_LONGER         BIT(21)
+#define TPS_REG_INT_USB_HOST_PRESENT                   BIT(20)
+#define TPS_REG_INT_GOTO_MIN_RECEIVED                  BIT(19)
+#define TPS_REG_INT_PR_SWAP_REQUESTED                  BIT(17)
+#define TPS_REG_INT_SINK_CAP_MESSAGE_READY             BIT(15)
+#define TPS_REG_INT_SOURCE_CAP_MESSAGE_READY           BIT(14)
+#define TPS_REG_INT_NEW_CONTRACT_AS_PROVIDER           BIT(13)
+#define TPS_REG_INT_NEW_CONTRACT_AS_CONSUMER           BIT(12)
+#define TPS_REG_INT_VDM_RECEIVED                       BIT(11)
+#define TPS_REG_INT_ATTENTION_RECEIVED                 BIT(10)
+#define TPS_REG_INT_OVERCURRENT                                BIT(9)
+#define TPS_REG_INT_BIST                               BIT(8)
+#define TPS_REG_INT_RDO_RECEIVED_FROM_SINK             BIT(7)
+#define TPS_REG_INT_DR_SWAP_COMPLETE                   BIT(5)
+#define TPS_REG_INT_PR_SWAP_COMPLETE                   BIT(4)
+#define TPS_REG_INT_PLUG_EVENT                         BIT(3)
+#define TPS_REG_INT_HARD_RESET                         BIT(1)
+#define TPS_REG_INT_PD_SOFT_RESET                      BIT(0)
+
+/* TPS_REG_POWER_STATUS bits */
+#define TPS_POWER_STATUS_CONNECTION(x)  TPS_FIELD_GET(BIT(0), (x))
+#define TPS_POWER_STATUS_SOURCESINK(x) TPS_FIELD_GET(BIT(1), (x))
+#define TPS_POWER_STATUS_BC12_DET(x)   TPS_FIELD_GET(BIT(2), (x))
+
+#define TPS_POWER_STATUS_TYPEC_CURRENT_MASK GENMASK(3, 2)
+#define TPS_POWER_STATUS_PWROPMODE(p)      TPS_FIELD_GET(TPS_POWER_STATUS_TYPEC_CURRENT_MASK, (p))
+#define TPS_POWER_STATUS_BC12_STATUS_MASK   GENMASK(6, 5)
+#define TPS_POWER_STATUS_BC12_STATUS(p)            TPS_FIELD_GET(TPS_POWER_STATUS_BC12_STATUS_MASK, (p))
+
+#define TPS_POWER_STATUS_TYPEC_CURRENT_USB     0
+#define TPS_POWER_STATUS_TYPEC_CURRENT_1A5     1
+#define TPS_POWER_STATUS_TYPEC_CURRENT_3A0     2
+#define TPS_POWER_STATUS_TYPEC_CURRENT_PD      3
+
+#define TPS_POWER_STATUS_BC12_STATUS_SDP 0
+#define TPS_POWER_STATUS_BC12_STATUS_CDP 2
+#define TPS_POWER_STATUS_BC12_STATUS_DCP 3
+
+/* TPS_REG_DATA_STATUS bits */
+#define TPS_DATA_STATUS_DATA_CONNECTION             BIT(0)
+#define TPS_DATA_STATUS_UPSIDE_DOWN         BIT(1)
+#define TPS_DATA_STATUS_ACTIVE_CABLE        BIT(2)
+#define TPS_DATA_STATUS_USB2_CONNECTION             BIT(4)
+#define TPS_DATA_STATUS_USB3_CONNECTION             BIT(5)
+#define TPS_DATA_STATUS_USB3_GEN2           BIT(6)
+#define TPS_DATA_STATUS_USB_DATA_ROLE       BIT(7)
+#define TPS_DATA_STATUS_DP_CONNECTION       BIT(8)
+#define TPS_DATA_STATUS_DP_SINK                     BIT(9)
+#define TPS_DATA_STATUS_TBT_CONNECTION      BIT(16)
+#define TPS_DATA_STATUS_TBT_TYPE            BIT(17)
+#define TPS_DATA_STATUS_OPTICAL_CABLE       BIT(18)
+#define TPS_DATA_STATUS_ACTIVE_LINK_TRAIN    BIT(20)
+#define TPS_DATA_STATUS_FORCE_LSX           BIT(23)
+#define TPS_DATA_STATUS_POWER_MISMATCH      BIT(24)
+
+#define TPS_DATA_STATUS_DP_PIN_ASSIGNMENT_MASK GENMASK(11, 10)
+#define TPS_DATA_STATUS_DP_PIN_ASSIGNMENT(x) \
+       TPS_FIELD_GET(TPS_DATA_STATUS_DP_PIN_ASSIGNMENT_MASK, (x))
+#define TPS_DATA_STATUS_TBT_CABLE_SPEED_MASK   GENMASK(27, 25)
+#define TPS_DATA_STATUS_TBT_CABLE_SPEED \
+       TPS_FIELD_GET(TPS_DATA_STATUS_TBT_CABLE_SPEED_MASK, (x))
+#define TPS_DATA_STATUS_TBT_CABLE_GEN_MASK     GENMASK(29, 28)
+#define TPS_DATA_STATUS_TBT_CABLE_GEN \
+       TPS_FIELD_GET(TPS_DATA_STATUS_TBT_CABLE_GEN_MASK, (x))
+
+/* Map data status to DP spec assignments */
+#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT(x) \
+       ((TPS_DATA_STATUS_DP_PIN_ASSIGNMENT(x) << 1) | \
+               TPS_FIELD_GET(TPS_DATA_STATUS_USB3_CONNECTION, (x)))
+#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_E    0
+#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_F    BIT(0)
+#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_C    BIT(1)
+#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_D    (BIT(1) | BIT(0))
+#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_A    BIT(2)
+#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_B    (BIT(2) | BIT(1))
+
+#endif /* __TPS6598X_H__ */
diff --git a/drivers/usb/typec/tipd/tps6598x_trace.h b/drivers/usb/typec/tipd/tps6598x_trace.h
new file mode 100644 (file)
index 0000000..2191775
--- /dev/null
@@ -0,0 +1,283 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Driver for TI TPS6598x USB Power Delivery controller family
+ *
+ * Copyright (C) 2020 Purism SPC
+ * Author: Guido Günther <agx@sigxcpu.org>
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM tps6598x
+
+#if !defined(_TPS6598X_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
+#define _TPS6598X_TRACE_H_
+
+#include "tps6598x.h"
+
+#include <linux/stringify.h>
+#include <linux/types.h>
+#include <linux/tracepoint.h>
+
+#define show_irq_flags(flags) \
+       __print_flags_u64(flags, "|", \
+               { TPS_REG_INT_PD_SOFT_RESET,                    "PD_SOFT_RESET" }, \
+               { TPS_REG_INT_HARD_RESET,                       "HARD_RESET" }, \
+               { TPS_REG_INT_PLUG_EVENT,                       "PLUG_EVENT" }, \
+               { TPS_REG_INT_PR_SWAP_COMPLETE,                 "PR_SWAP_COMPLETE" }, \
+               { TPS_REG_INT_DR_SWAP_COMPLETE,                 "DR_SWAP_COMPLETE" }, \
+               { TPS_REG_INT_RDO_RECEIVED_FROM_SINK,           "RDO_RECEIVED_FROM_SINK" }, \
+               { TPS_REG_INT_BIST,                             "BIST" }, \
+               { TPS_REG_INT_OVERCURRENT,                      "OVERCURRENT" }, \
+               { TPS_REG_INT_ATTENTION_RECEIVED,               "ATTENTION_RECEIVED" }, \
+               { TPS_REG_INT_VDM_RECEIVED,                     "VDM_RECEIVED" }, \
+               { TPS_REG_INT_NEW_CONTRACT_AS_CONSUMER,         "NEW_CONTRACT_AS_CONSUMER" }, \
+               { TPS_REG_INT_NEW_CONTRACT_AS_PROVIDER,         "NEW_CONTRACT_AS_PROVIDER" }, \
+               { TPS_REG_INT_SOURCE_CAP_MESSAGE_READY,         "SOURCE_CAP_MESSAGE_READY" }, \
+               { TPS_REG_INT_SINK_CAP_MESSAGE_READY,           "SINK_CAP_MESSAGE_READY" }, \
+               { TPS_REG_INT_PR_SWAP_REQUESTED,                "PR_SWAP_REQUESTED" }, \
+               { TPS_REG_INT_GOTO_MIN_RECEIVED,                "GOTO_MIN_RECEIVED" }, \
+               { TPS_REG_INT_USB_HOST_PRESENT,                 "USB_HOST_PRESENT" }, \
+               { TPS_REG_INT_USB_HOST_PRESENT_NO_LONGER,       "USB_HOST_PRESENT_NO_LONGER" }, \
+               { TPS_REG_INT_HIGH_VOLTAGE_WARNING,             "HIGH_VOLTAGE_WARNING" }, \
+               { TPS_REG_INT_PP_SWITCH_CHANGED,                "PP_SWITCH_CHANGED" }, \
+               { TPS_REG_INT_POWER_STATUS_UPDATE,              "POWER_STATUS_UPDATE" }, \
+               { TPS_REG_INT_DATA_STATUS_UPDATE,               "DATA_STATUS_UPDATE" }, \
+               { TPS_REG_INT_STATUS_UPDATE,                    "STATUS_UPDATE" }, \
+               { TPS_REG_INT_PD_STATUS_UPDATE,                 "PD_STATUS_UPDATE" }, \
+               { TPS_REG_INT_ADC_LOW_THRESHOLD,                "ADC_LOW_THRESHOLD" }, \
+               { TPS_REG_INT_ADC_HIGH_THRESHOLD,               "ADC_HIGH_THRESHOLD" }, \
+               { TPS_REG_INT_CMD1_COMPLETE,                    "CMD1_COMPLETE" }, \
+               { TPS_REG_INT_CMD2_COMPLETE,                    "CMD2_COMPLETE" }, \
+               { TPS_REG_INT_ERROR_DEVICE_INCOMPATIBLE,        "ERROR_DEVICE_INCOMPATIBLE" }, \
+               { TPS_REG_INT_ERROR_CANNOT_PROVIDE_PWR,         "ERROR_CANNOT_PROVIDE_PWR" }, \
+               { TPS_REG_INT_ERROR_CAN_PROVIDE_PWR_LATER,      "ERROR_CAN_PROVIDE_PWR_LATER" }, \
+               { TPS_REG_INT_ERROR_POWER_EVENT_OCCURRED,       "ERROR_POWER_EVENT_OCCURRED" }, \
+               { TPS_REG_INT_ERROR_MISSING_GET_CAP_MESSAGE,    "ERROR_MISSING_GET_CAP_MESSAGE" }, \
+               { TPS_REG_INT_ERROR_PROTOCOL_ERROR,             "ERROR_PROTOCOL_ERROR" }, \
+               { TPS_REG_INT_ERROR_MESSAGE_DATA,               "ERROR_MESSAGE_DATA" }, \
+               { TPS_REG_INT_ERROR_DISCHARGE_FAILED,           "ERROR_DISCHARGE_FAILED" }, \
+               { TPS_REG_INT_SRC_TRANSITION,                   "SRC_TRANSITION" }, \
+               { TPS_REG_INT_ERROR_UNABLE_TO_SOURCE,           "ERROR_UNABLE_TO_SOURCE" }, \
+               { TPS_REG_INT_VDM_ENTERED_MODE,                 "VDM_ENTERED_MODE" }, \
+               { TPS_REG_INT_VDM_MSG_SENT,                     "VDM_MSG_SENT" }, \
+               { TPS_REG_INT_DISCOVER_MODES_COMPLETE,          "DISCOVER_MODES_COMPLETE" }, \
+               { TPS_REG_INT_EXIT_MODES_COMPLETE,              "EXIT_MODES_COMPLETE" }, \
+               { TPS_REG_INT_USER_VID_ALT_MODE_ENTERED,        "USER_VID_ALT_MODE_ENTERED" }, \
+               { TPS_REG_INT_USER_VID_ALT_MODE_EXIT,           "USER_VID_ALT_MODE_EXIT" }, \
+               { TPS_REG_INT_USER_VID_ALT_MODE_ATTN_VDM,       "USER_VID_ALT_MODE_ATTN_VDM" }, \
+               { TPS_REG_INT_USER_VID_ALT_MODE_OTHER_VDM,      "USER_VID_ALT_MODE_OTHER_VDM" })
+
+#define TPS6598X_STATUS_FLAGS_MASK (GENMASK(31, 0) ^ (TPS_STATUS_CONN_STATE_MASK | \
+                                                     TPS_STATUS_PP_5V0_SWITCH_MASK | \
+                                                     TPS_STATUS_PP_HV_SWITCH_MASK | \
+                                                     TPS_STATUS_PP_EXT_SWITCH_MASK | \
+                                                     TPS_STATUS_PP_CABLE_SWITCH_MASK | \
+                                                     TPS_STATUS_POWER_SOURCE_MASK | \
+                                                     TPS_STATUS_VBUS_STATUS_MASK | \
+                                                     TPS_STATUS_USB_HOST_PRESENT_MASK | \
+                                                     TPS_STATUS_LEGACY_MASK))
+
+#define show_status_conn_state(status) \
+       __print_symbolic(TPS_STATUS_CONN_STATE((status)), \
+               { TPS_STATUS_CONN_STATE_CONN_WITH_R_A,  "conn-Ra"  }, \
+               { TPS_STATUS_CONN_STATE_CONN_NO_R_A,    "conn-no-Ra" }, \
+               { TPS_STATUS_CONN_STATE_NO_CONN_R_A,    "no-conn-Ra" }, \
+               { TPS_STATUS_CONN_STATE_DEBUG_CONN,     "debug"  }, \
+               { TPS_STATUS_CONN_STATE_AUDIO_CONN,     "audio"  }, \
+               { TPS_STATUS_CONN_STATE_DISABLED,       "disabled" }, \
+               { TPS_STATUS_CONN_STATE_NO_CONN,        "no-conn" })
+
+#define show_status_pp_switch_state(status) \
+       __print_symbolic(status, \
+               { TPS_STATUS_PP_SWITCH_STATE_IN,        "in" }, \
+               { TPS_STATUS_PP_SWITCH_STATE_OUT,       "out" }, \
+               { TPS_STATUS_PP_SWITCH_STATE_FAULT,     "fault" }, \
+               { TPS_STATUS_PP_SWITCH_STATE_DISABLED,  "off" })
+
+#define show_status_power_sources(status) \
+       __print_symbolic(TPS_STATUS_POWER_SOURCE(status), \
+               { TPS_STATUS_POWER_SOURCE_VBUS,         "vbus" }, \
+               { TPS_STATUS_POWER_SOURCE_VIN_3P3,      "vin-3p3" }, \
+               { TPS_STATUS_POWER_SOURCE_DEAD_BAT,     "dead-battery" }, \
+               { TPS_STATUS_POWER_SOURCE_UNKNOWN,      "unknown" })
+
+#define show_status_vbus_status(status) \
+       __print_symbolic(TPS_STATUS_VBUS_STATUS(status), \
+               { TPS_STATUS_VBUS_STATUS_VSAFE0V,       "vSafe0V" }, \
+               { TPS_STATUS_VBUS_STATUS_VSAFE5V,       "vSafe5V" }, \
+               { TPS_STATUS_VBUS_STATUS_PD,            "pd" }, \
+               { TPS_STATUS_VBUS_STATUS_FAULT,         "fault" })
+
+#define show_status_usb_host_present(status) \
+       __print_symbolic(TPS_STATUS_USB_HOST_PRESENT(status), \
+               { TPS_STATUS_USB_HOST_PRESENT_PD_USB,    "pd-usb" }, \
+               { TPS_STATUS_USB_HOST_PRESENT_NO_PD,     "no-pd" }, \
+               { TPS_STATUS_USB_HOST_PRESENT_PD_NO_USB, "pd-no-usb" }, \
+               { TPS_STATUS_USB_HOST_PRESENT_NO,        "no" })
+
+#define show_status_legacy(status) \
+       __print_symbolic(TPS_STATUS_LEGACY(status),          \
+               { TPS_STATUS_LEGACY_SOURCE,              "source" }, \
+               { TPS_STATUS_LEGACY_SINK,                "sink" }, \
+               { TPS_STATUS_LEGACY_NO,                  "no" })
+
+#define show_status_flags(flags) \
+       __print_flags((flags & TPS6598X_STATUS_FLAGS_MASK), "|", \
+                     { TPS_STATUS_PLUG_PRESENT,        "PLUG_PRESENT" }, \
+                     { TPS_STATUS_PLUG_UPSIDE_DOWN,    "UPSIDE_DOWN" }, \
+                     { TPS_STATUS_PORTROLE,            "PORTROLE" }, \
+                     { TPS_STATUS_DATAROLE,            "DATAROLE" }, \
+                     { TPS_STATUS_VCONN,               "VCONN" }, \
+                     { TPS_STATUS_OVERCURRENT,         "OVERCURRENT" }, \
+                     { TPS_STATUS_GOTO_MIN_ACTIVE,     "GOTO_MIN_ACTIVE" }, \
+                     { TPS_STATUS_BIST,                "BIST" }, \
+                     { TPS_STATUS_HIGH_VOLAGE_WARNING, "HIGH_VOLAGE_WARNING" }, \
+                     { TPS_STATUS_HIGH_LOW_VOLTAGE_WARNING, "HIGH_LOW_VOLTAGE_WARNING" })
+
+#define show_power_status_source_sink(power_status) \
+       __print_symbolic(TPS_POWER_STATUS_SOURCESINK(power_status), \
+               { 1, "sink" }, \
+               { 0, "source" })
+
+#define show_power_status_typec_status(power_status) \
+       __print_symbolic(TPS_POWER_STATUS_PWROPMODE(power_status), \
+               { TPS_POWER_STATUS_TYPEC_CURRENT_PD,  "pd" }, \
+               { TPS_POWER_STATUS_TYPEC_CURRENT_3A0, "3.0A" }, \
+               { TPS_POWER_STATUS_TYPEC_CURRENT_1A5, "1.5A" }, \
+               { TPS_POWER_STATUS_TYPEC_CURRENT_USB, "usb" })
+
+#define show_power_status_bc12_status(power_status) \
+       __print_symbolic(TPS_POWER_STATUS_BC12_STATUS(power_status), \
+               { TPS_POWER_STATUS_BC12_STATUS_DCP, "dcp" }, \
+               { TPS_POWER_STATUS_BC12_STATUS_CDP, "cdp" }, \
+               { TPS_POWER_STATUS_BC12_STATUS_SDP, "sdp" })
+
+#define TPS_DATA_STATUS_FLAGS_MASK (GENMASK(31, 0) ^ (TPS_DATA_STATUS_DP_PIN_ASSIGNMENT_MASK | \
+                                                     TPS_DATA_STATUS_TBT_CABLE_SPEED_MASK | \
+                                                     TPS_DATA_STATUS_TBT_CABLE_GEN_MASK))
+
+#define show_data_status_flags(data_status) \
+       __print_flags(data_status & TPS_DATA_STATUS_FLAGS_MASK, "|", \
+               { TPS_DATA_STATUS_DATA_CONNECTION,      "DATA_CONNECTION" }, \
+               { TPS_DATA_STATUS_UPSIDE_DOWN,          "DATA_UPSIDE_DOWN" }, \
+               { TPS_DATA_STATUS_ACTIVE_CABLE,         "ACTIVE_CABLE" }, \
+               { TPS_DATA_STATUS_USB2_CONNECTION,      "USB2_CONNECTION" }, \
+               { TPS_DATA_STATUS_USB3_CONNECTION,      "USB3_CONNECTION" }, \
+               { TPS_DATA_STATUS_USB3_GEN2,            "USB3_GEN2" }, \
+               { TPS_DATA_STATUS_USB_DATA_ROLE,        "USB_DATA_ROLE" }, \
+               { TPS_DATA_STATUS_DP_CONNECTION,        "DP_CONNECTION" }, \
+               { TPS_DATA_STATUS_DP_SINK,              "DP_SINK" }, \
+               { TPS_DATA_STATUS_TBT_CONNECTION,       "TBT_CONNECTION" }, \
+               { TPS_DATA_STATUS_TBT_TYPE,             "TBT_TYPE" }, \
+               { TPS_DATA_STATUS_OPTICAL_CABLE,        "OPTICAL_CABLE" }, \
+               { TPS_DATA_STATUS_ACTIVE_LINK_TRAIN,    "ACTIVE_LINK_TRAIN" }, \
+               { TPS_DATA_STATUS_FORCE_LSX,            "FORCE_LSX" }, \
+               { TPS_DATA_STATUS_POWER_MISMATCH,       "POWER_MISMATCH" })
+
+#define show_data_status_dp_pin_assignment(data_status) \
+       __print_symbolic(TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT(data_status), \
+               { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_E, "E" }, \
+               { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_F, "F" }, \
+               { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_C, "C" }, \
+               { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_D, "D" }, \
+               { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_A, "A" }, \
+               { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_B, "B" })
+
+#define maybe_show_data_status_dp_pin_assignment(data_status) \
+       (data_status & TPS_DATA_STATUS_DP_CONNECTION ? \
+        show_data_status_dp_pin_assignment(data_status) : "")
+
+TRACE_EVENT(tps6598x_irq,
+           TP_PROTO(u64 event1,
+                    u64 event2),
+           TP_ARGS(event1, event2),
+
+           TP_STRUCT__entry(
+                            __field(u64, event1)
+                            __field(u64, event2)
+                            ),
+
+           TP_fast_assign(
+                          __entry->event1 = event1;
+                          __entry->event2 = event2;
+                          ),
+
+           TP_printk("event1=%s, event2=%s",
+                     show_irq_flags(__entry->event1),
+                     show_irq_flags(__entry->event2))
+);
+
+TRACE_EVENT(tps6598x_status,
+           TP_PROTO(u32 status),
+           TP_ARGS(status),
+
+           TP_STRUCT__entry(
+                            __field(u32, status)
+                            ),
+
+           TP_fast_assign(
+                          __entry->status = status;
+                          ),
+
+           TP_printk("conn: %s, pp_5v0: %s, pp_hv: %s, pp_ext: %s, pp_cable: %s, "
+                     "pwr-src: %s, vbus: %s, usb-host: %s, legacy: %s, flags: %s",
+                     show_status_conn_state(__entry->status),
+                     show_status_pp_switch_state(TPS_STATUS_PP_5V0_SWITCH(__entry->status)),
+                     show_status_pp_switch_state(TPS_STATUS_PP_HV_SWITCH(__entry->status)),
+                     show_status_pp_switch_state(TPS_STATUS_PP_EXT_SWITCH(__entry->status)),
+                     show_status_pp_switch_state(TPS_STATUS_PP_CABLE_SWITCH(__entry->status)),
+                     show_status_power_sources(__entry->status),
+                     show_status_vbus_status(__entry->status),
+                     show_status_usb_host_present(__entry->status),
+                     show_status_legacy(__entry->status),
+                     show_status_flags(__entry->status)
+                   )
+);
+
+TRACE_EVENT(tps6598x_power_status,
+           TP_PROTO(u16 power_status),
+           TP_ARGS(power_status),
+
+           TP_STRUCT__entry(
+                            __field(u16, power_status)
+                            ),
+
+           TP_fast_assign(
+                          __entry->power_status = power_status;
+                          ),
+
+           TP_printk("conn: %d, pwr-role: %s, typec: %s, bc: %s",
+                     !!TPS_POWER_STATUS_CONNECTION(__entry->power_status),
+                     show_power_status_source_sink(__entry->power_status),
+                     show_power_status_typec_status(__entry->power_status),
+                     show_power_status_bc12_status(__entry->power_status)
+                   )
+);
+
+TRACE_EVENT(tps6598x_data_status,
+           TP_PROTO(u32 data_status),
+           TP_ARGS(data_status),
+
+           TP_STRUCT__entry(
+                            __field(u32, data_status)
+                            ),
+
+           TP_fast_assign(
+                          __entry->data_status = data_status;
+                          ),
+
+           TP_printk("%s%s%s",
+                     show_data_status_flags(__entry->data_status),
+                     __entry->data_status & TPS_DATA_STATUS_DP_CONNECTION ? ", DP pinout " : "",
+                     maybe_show_data_status_dp_pin_assignment(__entry->data_status)
+                   )
+);
+
+#endif /* _TPS6598X_TRACE_H_ */
+
+/* This part must be outside protection */
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_FILE tps6598x_trace
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH .
+#include <trace/define_trace.h>
diff --git a/drivers/usb/typec/tps6598x.c b/drivers/usb/typec/tps6598x.c
deleted file mode 100644 (file)
index 2c4ab90..0000000
+++ /dev/null
@@ -1,751 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Driver for TI TPS6598x USB Power Delivery controller family
- *
- * Copyright (C) 2017, Intel Corporation
- * Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
- */
-
-#include "tps6598x.h"
-
-#include <linux/i2c.h>
-#include <linux/acpi.h>
-#include <linux/module.h>
-#include <linux/power_supply.h>
-#include <linux/regmap.h>
-#include <linux/interrupt.h>
-#include <linux/usb/typec.h>
-#include <linux/usb/role.h>
-
-#define CREATE_TRACE_POINTS
-#include "tps6598x_trace.h"
-
-/* Register offsets */
-#define TPS_REG_VID                    0x00
-#define TPS_REG_MODE                   0x03
-#define TPS_REG_CMD1                   0x08
-#define TPS_REG_DATA1                  0x09
-#define TPS_REG_INT_EVENT1             0x14
-#define TPS_REG_INT_EVENT2             0x15
-#define TPS_REG_INT_MASK1              0x16
-#define TPS_REG_INT_MASK2              0x17
-#define TPS_REG_INT_CLEAR1             0x18
-#define TPS_REG_INT_CLEAR2             0x19
-#define TPS_REG_STATUS                 0x1a
-#define TPS_REG_SYSTEM_CONF            0x28
-#define TPS_REG_CTRL_CONF              0x29
-#define TPS_REG_POWER_STATUS           0x3f
-#define TPS_REG_RX_IDENTITY_SOP                0x48
-#define TPS_REG_DATA_STATUS            0x5f
-
-/* TPS_REG_SYSTEM_CONF bits */
-#define TPS_SYSCONF_PORTINFO(c)                ((c) & 7)
-
-enum {
-       TPS_PORTINFO_SINK,
-       TPS_PORTINFO_SINK_ACCESSORY,
-       TPS_PORTINFO_DRP_UFP,
-       TPS_PORTINFO_DRP_UFP_DRD,
-       TPS_PORTINFO_DRP_DFP,
-       TPS_PORTINFO_DRP_DFP_DRD,
-       TPS_PORTINFO_SOURCE,
-};
-
-/* TPS_REG_RX_IDENTITY_SOP */
-struct tps6598x_rx_identity_reg {
-       u8 status;
-       struct usb_pd_identity identity;
-       u32 vdo[3];
-} __packed;
-
-/* Standard Task return codes */
-#define TPS_TASK_TIMEOUT               1
-#define TPS_TASK_REJECTED              3
-
-enum {
-       TPS_MODE_APP,
-       TPS_MODE_BOOT,
-       TPS_MODE_BIST,
-       TPS_MODE_DISC,
-};
-
-static const char *const modes[] = {
-       [TPS_MODE_APP]  = "APP ",
-       [TPS_MODE_BOOT] = "BOOT",
-       [TPS_MODE_BIST] = "BIST",
-       [TPS_MODE_DISC] = "DISC",
-};
-
-/* Unrecognized commands will be replaced with "!CMD" */
-#define INVALID_CMD(_cmd_)             (_cmd_ == 0x444d4321)
-
-struct tps6598x {
-       struct device *dev;
-       struct regmap *regmap;
-       struct mutex lock; /* device lock */
-       u8 i2c_protocol:1;
-
-       struct typec_port *port;
-       struct typec_partner *partner;
-       struct usb_pd_identity partner_identity;
-       struct usb_role_switch *role_sw;
-       struct typec_capability typec_cap;
-
-       struct power_supply *psy;
-       struct power_supply_desc psy_desc;
-       enum power_supply_usb_type usb_type;
-};
-
-static enum power_supply_property tps6598x_psy_props[] = {
-       POWER_SUPPLY_PROP_USB_TYPE,
-       POWER_SUPPLY_PROP_ONLINE,
-};
-
-static enum power_supply_usb_type tps6598x_psy_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_C,
-       POWER_SUPPLY_USB_TYPE_PD,
-};
-
-static const char *tps6598x_psy_name_prefix = "tps6598x-source-psy-";
-
-/*
- * Max data bytes for Data1, Data2, and other registers. See ch 1.3.2:
- * https://www.ti.com/lit/ug/slvuan1a/slvuan1a.pdf
- */
-#define TPS_MAX_LEN    64
-
-static int
-tps6598x_block_read(struct tps6598x *tps, u8 reg, void *val, size_t len)
-{
-       u8 data[TPS_MAX_LEN + 1];
-       int ret;
-
-       if (WARN_ON(len + 1 > sizeof(data)))
-               return -EINVAL;
-
-       if (!tps->i2c_protocol)
-               return regmap_raw_read(tps->regmap, reg, val, len);
-
-       ret = regmap_raw_read(tps->regmap, reg, data, sizeof(data));
-       if (ret)
-               return ret;
-
-       if (data[0] < len)
-               return -EIO;
-
-       memcpy(val, &data[1], len);
-       return 0;
-}
-
-static int tps6598x_block_write(struct tps6598x *tps, u8 reg,
-                               const void *val, size_t len)
-{
-       u8 data[TPS_MAX_LEN + 1];
-
-       if (!tps->i2c_protocol)
-               return regmap_raw_write(tps->regmap, reg, val, len);
-
-       data[0] = len;
-       memcpy(&data[1], val, len);
-
-       return regmap_raw_write(tps->regmap, reg, data, sizeof(data));
-}
-
-static inline int tps6598x_read16(struct tps6598x *tps, u8 reg, u16 *val)
-{
-       return tps6598x_block_read(tps, reg, val, sizeof(u16));
-}
-
-static inline int tps6598x_read32(struct tps6598x *tps, u8 reg, u32 *val)
-{
-       return tps6598x_block_read(tps, reg, val, sizeof(u32));
-}
-
-static inline int tps6598x_read64(struct tps6598x *tps, u8 reg, u64 *val)
-{
-       return tps6598x_block_read(tps, reg, val, sizeof(u64));
-}
-
-static inline int tps6598x_write16(struct tps6598x *tps, u8 reg, u16 val)
-{
-       return tps6598x_block_write(tps, reg, &val, sizeof(u16));
-}
-
-static inline int tps6598x_write32(struct tps6598x *tps, u8 reg, u32 val)
-{
-       return tps6598x_block_write(tps, reg, &val, sizeof(u32));
-}
-
-static inline int tps6598x_write64(struct tps6598x *tps, u8 reg, u64 val)
-{
-       return tps6598x_block_write(tps, reg, &val, sizeof(u64));
-}
-
-static inline int
-tps6598x_write_4cc(struct tps6598x *tps, u8 reg, const char *val)
-{
-       return tps6598x_block_write(tps, reg, val, 4);
-}
-
-static int tps6598x_read_partner_identity(struct tps6598x *tps)
-{
-       struct tps6598x_rx_identity_reg id;
-       int ret;
-
-       ret = tps6598x_block_read(tps, TPS_REG_RX_IDENTITY_SOP,
-                                 &id, sizeof(id));
-       if (ret)
-               return ret;
-
-       tps->partner_identity = id.identity;
-
-       return 0;
-}
-
-static void tps6598x_set_data_role(struct tps6598x *tps,
-                                  enum typec_data_role role, bool connected)
-{
-       enum usb_role role_val;
-
-       if (role == TYPEC_HOST)
-               role_val = USB_ROLE_HOST;
-       else
-               role_val = USB_ROLE_DEVICE;
-
-       if (!connected)
-               role_val = USB_ROLE_NONE;
-
-       usb_role_switch_set_role(tps->role_sw, role_val);
-       typec_set_data_role(tps->port, role);
-}
-
-static int tps6598x_connect(struct tps6598x *tps, u32 status)
-{
-       struct typec_partner_desc desc;
-       enum typec_pwr_opmode mode;
-       u16 pwr_status;
-       int ret;
-
-       if (tps->partner)
-               return 0;
-
-       ret = tps6598x_read16(tps, TPS_REG_POWER_STATUS, &pwr_status);
-       if (ret < 0)
-               return ret;
-
-       mode = TPS_POWER_STATUS_PWROPMODE(pwr_status);
-
-       desc.usb_pd = mode == TYPEC_PWR_MODE_PD;
-       desc.accessory = TYPEC_ACCESSORY_NONE; /* XXX: handle accessories */
-       desc.identity = NULL;
-
-       if (desc.usb_pd) {
-               ret = tps6598x_read_partner_identity(tps);
-               if (ret)
-                       return ret;
-               desc.identity = &tps->partner_identity;
-       }
-
-       typec_set_pwr_opmode(tps->port, mode);
-       typec_set_pwr_role(tps->port, TPS_STATUS_TO_TYPEC_PORTROLE(status));
-       typec_set_vconn_role(tps->port, TPS_STATUS_TO_TYPEC_VCONN(status));
-       tps6598x_set_data_role(tps, TPS_STATUS_TO_TYPEC_DATAROLE(status), true);
-
-       tps->partner = typec_register_partner(tps->port, &desc);
-       if (IS_ERR(tps->partner))
-               return PTR_ERR(tps->partner);
-
-       if (desc.identity)
-               typec_partner_set_identity(tps->partner);
-
-       power_supply_changed(tps->psy);
-
-       return 0;
-}
-
-static void tps6598x_disconnect(struct tps6598x *tps, u32 status)
-{
-       if (!IS_ERR(tps->partner))
-               typec_unregister_partner(tps->partner);
-       tps->partner = NULL;
-       typec_set_pwr_opmode(tps->port, TYPEC_PWR_MODE_USB);
-       typec_set_pwr_role(tps->port, TPS_STATUS_TO_TYPEC_PORTROLE(status));
-       typec_set_vconn_role(tps->port, TPS_STATUS_TO_TYPEC_VCONN(status));
-       tps6598x_set_data_role(tps, TPS_STATUS_TO_TYPEC_DATAROLE(status), false);
-
-       power_supply_changed(tps->psy);
-}
-
-static int tps6598x_exec_cmd(struct tps6598x *tps, const char *cmd,
-                            size_t in_len, u8 *in_data,
-                            size_t out_len, u8 *out_data)
-{
-       unsigned long timeout;
-       u32 val;
-       int ret;
-
-       ret = tps6598x_read32(tps, TPS_REG_CMD1, &val);
-       if (ret)
-               return ret;
-       if (val && !INVALID_CMD(val))
-               return -EBUSY;
-
-       if (in_len) {
-               ret = tps6598x_block_write(tps, TPS_REG_DATA1,
-                                          in_data, in_len);
-               if (ret)
-                       return ret;
-       }
-
-       ret = tps6598x_write_4cc(tps, TPS_REG_CMD1, cmd);
-       if (ret < 0)
-               return ret;
-
-       /* XXX: Using 1s for now, but it may not be enough for every command. */
-       timeout = jiffies + msecs_to_jiffies(1000);
-
-       do {
-               ret = tps6598x_read32(tps, TPS_REG_CMD1, &val);
-               if (ret)
-                       return ret;
-               if (INVALID_CMD(val))
-                       return -EINVAL;
-
-               if (time_is_before_jiffies(timeout))
-                       return -ETIMEDOUT;
-       } while (val);
-
-       if (out_len) {
-               ret = tps6598x_block_read(tps, TPS_REG_DATA1,
-                                         out_data, out_len);
-               if (ret)
-                       return ret;
-               val = out_data[0];
-       } else {
-               ret = tps6598x_block_read(tps, TPS_REG_DATA1, &val, sizeof(u8));
-               if (ret)
-                       return ret;
-       }
-
-       switch (val) {
-       case TPS_TASK_TIMEOUT:
-               return -ETIMEDOUT;
-       case TPS_TASK_REJECTED:
-               return -EPERM;
-       default:
-               break;
-       }
-
-       return 0;
-}
-
-static int tps6598x_dr_set(struct typec_port *port, enum typec_data_role role)
-{
-       const char *cmd = (role == TYPEC_DEVICE) ? "SWUF" : "SWDF";
-       struct tps6598x *tps = typec_get_drvdata(port);
-       u32 status;
-       int ret;
-
-       mutex_lock(&tps->lock);
-
-       ret = tps6598x_exec_cmd(tps, cmd, 0, NULL, 0, NULL);
-       if (ret)
-               goto out_unlock;
-
-       ret = tps6598x_read32(tps, TPS_REG_STATUS, &status);
-       if (ret)
-               goto out_unlock;
-
-       if (role != TPS_STATUS_TO_TYPEC_DATAROLE(status)) {
-               ret = -EPROTO;
-               goto out_unlock;
-       }
-
-       tps6598x_set_data_role(tps, role, true);
-
-out_unlock:
-       mutex_unlock(&tps->lock);
-
-       return ret;
-}
-
-static int tps6598x_pr_set(struct typec_port *port, enum typec_role role)
-{
-       const char *cmd = (role == TYPEC_SINK) ? "SWSk" : "SWSr";
-       struct tps6598x *tps = typec_get_drvdata(port);
-       u32 status;
-       int ret;
-
-       mutex_lock(&tps->lock);
-
-       ret = tps6598x_exec_cmd(tps, cmd, 0, NULL, 0, NULL);
-       if (ret)
-               goto out_unlock;
-
-       ret = tps6598x_read32(tps, TPS_REG_STATUS, &status);
-       if (ret)
-               goto out_unlock;
-
-       if (role != TPS_STATUS_TO_TYPEC_PORTROLE(status)) {
-               ret = -EPROTO;
-               goto out_unlock;
-       }
-
-       typec_set_pwr_role(tps->port, role);
-
-out_unlock:
-       mutex_unlock(&tps->lock);
-
-       return ret;
-}
-
-static const struct typec_operations tps6598x_ops = {
-       .dr_set = tps6598x_dr_set,
-       .pr_set = tps6598x_pr_set,
-};
-
-static irqreturn_t tps6598x_interrupt(int irq, void *data)
-{
-       struct tps6598x *tps = data;
-       u64 event1;
-       u64 event2;
-       u32 status, data_status;
-       u16 pwr_status;
-       int ret;
-
-       mutex_lock(&tps->lock);
-
-       ret = tps6598x_read64(tps, TPS_REG_INT_EVENT1, &event1);
-       ret |= tps6598x_read64(tps, TPS_REG_INT_EVENT2, &event2);
-       if (ret) {
-               dev_err(tps->dev, "%s: failed to read events\n", __func__);
-               goto err_unlock;
-       }
-       trace_tps6598x_irq(event1, event2);
-
-       ret = tps6598x_read32(tps, TPS_REG_STATUS, &status);
-       if (ret) {
-               dev_err(tps->dev, "%s: failed to read status\n", __func__);
-               goto err_clear_ints;
-       }
-       trace_tps6598x_status(status);
-
-       if ((event1 | event2) & TPS_REG_INT_POWER_STATUS_UPDATE) {
-               ret = tps6598x_read16(tps, TPS_REG_POWER_STATUS, &pwr_status);
-               if (ret < 0) {
-                       dev_err(tps->dev, "failed to read power status: %d\n", ret);
-                       goto err_clear_ints;
-               }
-               trace_tps6598x_power_status(pwr_status);
-       }
-
-       if ((event1 | event2) & TPS_REG_INT_DATA_STATUS_UPDATE) {
-               ret = tps6598x_read32(tps, TPS_REG_DATA_STATUS, &data_status);
-               if (ret < 0) {
-                       dev_err(tps->dev, "failed to read data status: %d\n", ret);
-                       goto err_clear_ints;
-               }
-               trace_tps6598x_data_status(data_status);
-       }
-
-       /* Handle plug insert or removal */
-       if ((event1 | event2) & TPS_REG_INT_PLUG_EVENT) {
-               if (status & TPS_STATUS_PLUG_PRESENT) {
-                       ret = tps6598x_connect(tps, status);
-                       if (ret)
-                               dev_err(tps->dev,
-                                       "failed to register partner\n");
-               } else {
-                       tps6598x_disconnect(tps, status);
-               }
-       }
-
-err_clear_ints:
-       tps6598x_write64(tps, TPS_REG_INT_CLEAR1, event1);
-       tps6598x_write64(tps, TPS_REG_INT_CLEAR2, event2);
-
-err_unlock:
-       mutex_unlock(&tps->lock);
-
-       return IRQ_HANDLED;
-}
-
-static int tps6598x_check_mode(struct tps6598x *tps)
-{
-       char mode[5] = { };
-       int ret;
-
-       ret = tps6598x_read32(tps, TPS_REG_MODE, (void *)mode);
-       if (ret)
-               return ret;
-
-       switch (match_string(modes, ARRAY_SIZE(modes), mode)) {
-       case TPS_MODE_APP:
-               return 0;
-       case TPS_MODE_BOOT:
-               dev_warn(tps->dev, "dead-battery condition\n");
-               return 0;
-       case TPS_MODE_BIST:
-       case TPS_MODE_DISC:
-       default:
-               dev_err(tps->dev, "controller in unsupported mode \"%s\"\n",
-                       mode);
-               break;
-       }
-
-       return -ENODEV;
-}
-
-static const struct regmap_config tps6598x_regmap_config = {
-       .reg_bits = 8,
-       .val_bits = 8,
-       .max_register = 0x7F,
-};
-
-static int tps6598x_psy_get_online(struct tps6598x *tps,
-                                  union power_supply_propval *val)
-{
-       int ret;
-       u16 pwr_status;
-
-       ret = tps6598x_read16(tps, TPS_REG_POWER_STATUS, &pwr_status);
-       if (ret < 0)
-               return ret;
-
-       if (TPS_POWER_STATUS_CONNECTION(pwr_status) &&
-           TPS_POWER_STATUS_SOURCESINK(pwr_status)) {
-               val->intval = 1;
-       } else {
-               val->intval = 0;
-       }
-       return 0;
-}
-
-static int tps6598x_psy_get_prop(struct power_supply *psy,
-                                enum power_supply_property psp,
-                                union power_supply_propval *val)
-{
-       struct tps6598x *tps = power_supply_get_drvdata(psy);
-       u16 pwr_status;
-       int ret = 0;
-
-       switch (psp) {
-       case POWER_SUPPLY_PROP_USB_TYPE:
-               ret = tps6598x_read16(tps, TPS_REG_POWER_STATUS, &pwr_status);
-               if (ret < 0)
-                       return ret;
-               if (TPS_POWER_STATUS_PWROPMODE(pwr_status) == TYPEC_PWR_MODE_PD)
-                       val->intval = POWER_SUPPLY_USB_TYPE_PD;
-               else
-                       val->intval = POWER_SUPPLY_USB_TYPE_C;
-               break;
-       case POWER_SUPPLY_PROP_ONLINE:
-               ret = tps6598x_psy_get_online(tps, val);
-               break;
-       default:
-               ret = -EINVAL;
-               break;
-       }
-
-       return ret;
-}
-
-static int devm_tps6598_psy_register(struct tps6598x *tps)
-{
-       struct power_supply_config psy_cfg = {};
-       const char *port_dev_name = dev_name(tps->dev);
-       char *psy_name;
-
-       psy_cfg.drv_data = tps;
-       psy_cfg.fwnode = dev_fwnode(tps->dev);
-
-       psy_name = devm_kasprintf(tps->dev, GFP_KERNEL, "%s%s", tps6598x_psy_name_prefix,
-                                 port_dev_name);
-       if (!psy_name)
-               return -ENOMEM;
-
-       tps->psy_desc.name = psy_name;
-       tps->psy_desc.type = POWER_SUPPLY_TYPE_USB;
-       tps->psy_desc.usb_types = tps6598x_psy_usb_types;
-       tps->psy_desc.num_usb_types = ARRAY_SIZE(tps6598x_psy_usb_types);
-       tps->psy_desc.properties = tps6598x_psy_props;
-       tps->psy_desc.num_properties = ARRAY_SIZE(tps6598x_psy_props);
-       tps->psy_desc.get_property = tps6598x_psy_get_prop;
-
-       tps->usb_type = POWER_SUPPLY_USB_TYPE_C;
-
-       tps->psy = devm_power_supply_register(tps->dev, &tps->psy_desc,
-                                              &psy_cfg);
-       return PTR_ERR_OR_ZERO(tps->psy);
-}
-
-static int tps6598x_probe(struct i2c_client *client)
-{
-       struct typec_capability typec_cap = { };
-       struct tps6598x *tps;
-       struct fwnode_handle *fwnode;
-       u32 status;
-       u32 conf;
-       u32 vid;
-       int ret;
-
-       tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL);
-       if (!tps)
-               return -ENOMEM;
-
-       mutex_init(&tps->lock);
-       tps->dev = &client->dev;
-
-       tps->regmap = devm_regmap_init_i2c(client, &tps6598x_regmap_config);
-       if (IS_ERR(tps->regmap))
-               return PTR_ERR(tps->regmap);
-
-       ret = tps6598x_read32(tps, TPS_REG_VID, &vid);
-       if (ret < 0 || !vid)
-               return -ENODEV;
-
-       /*
-        * Checking can the adapter handle SMBus protocol. If it can not, the
-        * driver needs to take care of block reads separately.
-        *
-        * FIXME: Testing with I2C_FUNC_I2C. regmap-i2c uses I2C protocol
-        * unconditionally if the adapter has I2C_FUNC_I2C set.
-        */
-       if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
-               tps->i2c_protocol = true;
-
-       /* Make sure the controller has application firmware running */
-       ret = tps6598x_check_mode(tps);
-       if (ret)
-               return ret;
-
-       ret = tps6598x_read32(tps, TPS_REG_STATUS, &status);
-       if (ret < 0)
-               return ret;
-       trace_tps6598x_status(status);
-
-       ret = tps6598x_read32(tps, TPS_REG_SYSTEM_CONF, &conf);
-       if (ret < 0)
-               return ret;
-
-       fwnode = device_get_named_child_node(&client->dev, "connector");
-       if (!fwnode)
-               return -ENODEV;
-
-       tps->role_sw = fwnode_usb_role_switch_get(fwnode);
-       if (IS_ERR(tps->role_sw)) {
-               ret = PTR_ERR(tps->role_sw);
-               goto err_fwnode_put;
-       }
-
-       typec_cap.revision = USB_TYPEC_REV_1_2;
-       typec_cap.pd_revision = 0x200;
-       typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE;
-       typec_cap.driver_data = tps;
-       typec_cap.ops = &tps6598x_ops;
-       typec_cap.fwnode = fwnode;
-
-       switch (TPS_SYSCONF_PORTINFO(conf)) {
-       case TPS_PORTINFO_SINK_ACCESSORY:
-       case TPS_PORTINFO_SINK:
-               typec_cap.type = TYPEC_PORT_SNK;
-               typec_cap.data = TYPEC_PORT_UFP;
-               break;
-       case TPS_PORTINFO_DRP_UFP_DRD:
-       case TPS_PORTINFO_DRP_DFP_DRD:
-               typec_cap.type = TYPEC_PORT_DRP;
-               typec_cap.data = TYPEC_PORT_DRD;
-               break;
-       case TPS_PORTINFO_DRP_UFP:
-               typec_cap.type = TYPEC_PORT_DRP;
-               typec_cap.data = TYPEC_PORT_UFP;
-               break;
-       case TPS_PORTINFO_DRP_DFP:
-               typec_cap.type = TYPEC_PORT_DRP;
-               typec_cap.data = TYPEC_PORT_DFP;
-               break;
-       case TPS_PORTINFO_SOURCE:
-               typec_cap.type = TYPEC_PORT_SRC;
-               typec_cap.data = TYPEC_PORT_DFP;
-               break;
-       default:
-               ret = -ENODEV;
-               goto err_role_put;
-       }
-
-       ret = devm_tps6598_psy_register(tps);
-       if (ret)
-               return ret;
-
-       tps->port = typec_register_port(&client->dev, &typec_cap);
-       if (IS_ERR(tps->port)) {
-               ret = PTR_ERR(tps->port);
-               goto err_role_put;
-       }
-       fwnode_handle_put(fwnode);
-
-       if (status & TPS_STATUS_PLUG_PRESENT) {
-               ret = tps6598x_connect(tps, status);
-               if (ret)
-                       dev_err(&client->dev, "failed to register partner\n");
-       }
-
-       ret = devm_request_threaded_irq(&client->dev, client->irq, NULL,
-                                       tps6598x_interrupt,
-                                       IRQF_SHARED | IRQF_ONESHOT,
-                                       dev_name(&client->dev), tps);
-       if (ret) {
-               tps6598x_disconnect(tps, 0);
-               typec_unregister_port(tps->port);
-               goto err_role_put;
-       }
-
-       i2c_set_clientdata(client, tps);
-
-       return 0;
-
-err_role_put:
-       usb_role_switch_put(tps->role_sw);
-err_fwnode_put:
-       fwnode_handle_put(fwnode);
-
-       return ret;
-}
-
-static int tps6598x_remove(struct i2c_client *client)
-{
-       struct tps6598x *tps = i2c_get_clientdata(client);
-
-       tps6598x_disconnect(tps, 0);
-       typec_unregister_port(tps->port);
-       usb_role_switch_put(tps->role_sw);
-
-       return 0;
-}
-
-static const struct of_device_id tps6598x_of_match[] = {
-       { .compatible = "ti,tps6598x", },
-       {}
-};
-MODULE_DEVICE_TABLE(of, tps6598x_of_match);
-
-static const struct i2c_device_id tps6598x_id[] = {
-       { "tps6598x" },
-       { }
-};
-MODULE_DEVICE_TABLE(i2c, tps6598x_id);
-
-static struct i2c_driver tps6598x_i2c_driver = {
-       .driver = {
-               .name = "tps6598x",
-               .of_match_table = tps6598x_of_match,
-       },
-       .probe_new = tps6598x_probe,
-       .remove = tps6598x_remove,
-       .id_table = tps6598x_id,
-};
-module_i2c_driver(tps6598x_i2c_driver);
-
-MODULE_AUTHOR("Heikki Krogerus <heikki.krogerus@linux.intel.com>");
-MODULE_LICENSE("GPL v2");
-MODULE_DESCRIPTION("TI TPS6598x USB Power Delivery Controller Driver");
diff --git a/drivers/usb/typec/tps6598x.h b/drivers/usb/typec/tps6598x.h
deleted file mode 100644 (file)
index 003a577..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * Driver for TI TPS6598x USB Power Delivery controller family
- *
- * Copyright (C) 2017, Intel Corporation
- * Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
- */
-
-#include <linux/bits.h>
-#include <linux/bitfield.h>
-
-#ifndef __TPS6598X_H__
-#define __TPS6598X_H__
-
-#define TPS_FIELD_GET(_mask, _reg) ((typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)))
-
-/* TPS_REG_STATUS bits */
-#define TPS_STATUS_PLUG_PRESENT                BIT(0)
-#define TPS_STATUS_PLUG_UPSIDE_DOWN    BIT(4)
-#define TPS_STATUS_PORTROLE            BIT(5)
-#define TPS_STATUS_TO_TYPEC_PORTROLE(s) (!!((s) & TPS_STATUS_PORTROLE))
-#define TPS_STATUS_DATAROLE            BIT(6)
-#define TPS_STATUS_TO_TYPEC_DATAROLE(s)        (!!((s) & TPS_STATUS_DATAROLE))
-#define TPS_STATUS_VCONN               BIT(7)
-#define TPS_STATUS_TO_TYPEC_VCONN(s)   (!!((s) & TPS_STATUS_VCONN))
-#define TPS_STATUS_OVERCURRENT         BIT(16)
-#define TPS_STATUS_GOTO_MIN_ACTIVE     BIT(26)
-#define TPS_STATUS_BIST                        BIT(27)
-#define TPS_STATUS_HIGH_VOLAGE_WARNING BIT(28)
-#define TPS_STATUS_HIGH_LOW_VOLTAGE_WARNING BIT(29)
-
-#define TPS_STATUS_CONN_STATE_MASK             GENMASK(3, 1)
-#define TPS_STATUS_CONN_STATE(x)               TPS_FIELD_GET(TPS_STATUS_CONN_STATE_MASK, (x))
-#define TPS_STATUS_PP_5V0_SWITCH_MASK          GENMASK(9, 8)
-#define TPS_STATUS_PP_5V0_SWITCH(x)            TPS_FIELD_GET(TPS_STATUS_PP_5V0_SWITCH_MASK, (x))
-#define TPS_STATUS_PP_HV_SWITCH_MASK           GENMASK(11, 10)
-#define TPS_STATUS_PP_HV_SWITCH(x)             TPS_FIELD_GET(TPS_STATUS_PP_HV_SWITCH_MASK, (x))
-#define TPS_STATUS_PP_EXT_SWITCH_MASK          GENMASK(13, 12)
-#define TPS_STATUS_PP_EXT_SWITCH(x)            TPS_FIELD_GET(TPS_STATUS_PP_EXT_SWITCH_MASK, (x))
-#define TPS_STATUS_PP_CABLE_SWITCH_MASK                GENMASK(15, 14)
-#define TPS_STATUS_PP_CABLE_SWITCH(x)          TPS_FIELD_GET(TPS_STATUS_PP_CABLE_SWITCH_MASK, (x))
-#define TPS_STATUS_POWER_SOURCE_MASK           GENMASK(19, 18)
-#define TPS_STATUS_POWER_SOURCE(x)             TPS_FIELD_GET(TPS_STATUS_POWER_SOURCE_MASK, (x))
-#define TPS_STATUS_VBUS_STATUS_MASK            GENMASK(21, 20)
-#define TPS_STATUS_VBUS_STATUS(x)              TPS_FIELD_GET(TPS_STATUS_VBUS_STATUS_MASK, (x))
-#define TPS_STATUS_USB_HOST_PRESENT_MASK       GENMASK(23, 22)
-#define TPS_STATUS_USB_HOST_PRESENT(x)         TPS_FIELD_GET(TPS_STATUS_USB_HOST_PRESENT_MASK, (x))
-#define TPS_STATUS_LEGACY_MASK                 GENMASK(25, 24)
-#define TPS_STATUS_LEGACY(x)                   TPS_FIELD_GET(TPS_STATUS_LEGACY_MASK, (x))
-
-#define TPS_STATUS_CONN_STATE_NO_CONN          0
-#define TPS_STATUS_CONN_STATE_DISABLED         1
-#define TPS_STATUS_CONN_STATE_AUDIO_CONN       2
-#define TPS_STATUS_CONN_STATE_DEBUG_CONN       3
-#define TPS_STATUS_CONN_STATE_NO_CONN_R_A      4
-#define TPS_STATUS_CONN_STATE_RESERVED         5
-#define TPS_STATUS_CONN_STATE_CONN_NO_R_A      6
-#define TPS_STATUS_CONN_STATE_CONN_WITH_R_A    7
-
-#define TPS_STATUS_PP_SWITCH_STATE_DISABLED    0
-#define TPS_STATUS_PP_SWITCH_STATE_FAULT       1
-#define TPS_STATUS_PP_SWITCH_STATE_OUT         2
-#define TPS_STATUS_PP_SWITCH_STATE_IN          3
-
-#define TPS_STATUS_POWER_SOURCE_UNKNOWN                0
-#define TPS_STATUS_POWER_SOURCE_VIN_3P3                1
-#define TPS_STATUS_POWER_SOURCE_DEAD_BAT       2
-#define TPS_STATUS_POWER_SOURCE_VBUS           3
-
-#define TPS_STATUS_VBUS_STATUS_VSAFE0V         0
-#define TPS_STATUS_VBUS_STATUS_VSAFE5V         1
-#define TPS_STATUS_VBUS_STATUS_PD              2
-#define TPS_STATUS_VBUS_STATUS_FAULT           3
-
-#define TPS_STATUS_USB_HOST_PRESENT_NO         0
-#define TPS_STATUS_USB_HOST_PRESENT_PD_NO_USB  1
-#define TPS_STATUS_USB_HOST_PRESENT_NO_PD      2
-#define TPS_STATUS_USB_HOST_PRESENT_PD_USB     3
-
-#define TPS_STATUS_LEGACY_NO                   0
-#define TPS_STATUS_LEGACY_SINK                 1
-#define TPS_STATUS_LEGACY_SOURCE               2
-
-/* TPS_REG_INT_* bits */
-#define TPS_REG_INT_USER_VID_ALT_MODE_OTHER_VDM                BIT_ULL(27+32)
-#define TPS_REG_INT_USER_VID_ALT_MODE_ATTN_VDM         BIT_ULL(26+32)
-#define TPS_REG_INT_USER_VID_ALT_MODE_EXIT             BIT_ULL(25+32)
-#define TPS_REG_INT_USER_VID_ALT_MODE_ENTERED          BIT_ULL(24+32)
-#define TPS_REG_INT_EXIT_MODES_COMPLETE                        BIT_ULL(20+32)
-#define TPS_REG_INT_DISCOVER_MODES_COMPLETE            BIT_ULL(19+32)
-#define TPS_REG_INT_VDM_MSG_SENT                       BIT_ULL(18+32)
-#define TPS_REG_INT_VDM_ENTERED_MODE                   BIT_ULL(17+32)
-#define TPS_REG_INT_ERROR_UNABLE_TO_SOURCE             BIT_ULL(14+32)
-#define TPS_REG_INT_SRC_TRANSITION                     BIT_ULL(10+32)
-#define TPS_REG_INT_ERROR_DISCHARGE_FAILED             BIT_ULL(9+32)
-#define TPS_REG_INT_ERROR_MESSAGE_DATA                 BIT_ULL(7+32)
-#define TPS_REG_INT_ERROR_PROTOCOL_ERROR               BIT_ULL(6+32)
-#define TPS_REG_INT_ERROR_MISSING_GET_CAP_MESSAGE      BIT_ULL(4+32)
-#define TPS_REG_INT_ERROR_POWER_EVENT_OCCURRED         BIT_ULL(3+32)
-#define TPS_REG_INT_ERROR_CAN_PROVIDE_PWR_LATER                BIT_ULL(2+32)
-#define TPS_REG_INT_ERROR_CANNOT_PROVIDE_PWR           BIT_ULL(1+32)
-#define TPS_REG_INT_ERROR_DEVICE_INCOMPATIBLE          BIT_ULL(0+32)
-#define TPS_REG_INT_CMD2_COMPLETE                      BIT(31)
-#define TPS_REG_INT_CMD1_COMPLETE                      BIT(30)
-#define TPS_REG_INT_ADC_HIGH_THRESHOLD                 BIT(29)
-#define TPS_REG_INT_ADC_LOW_THRESHOLD                  BIT(28)
-#define TPS_REG_INT_PD_STATUS_UPDATE                   BIT(27)
-#define TPS_REG_INT_STATUS_UPDATE                      BIT(26)
-#define TPS_REG_INT_DATA_STATUS_UPDATE                 BIT(25)
-#define TPS_REG_INT_POWER_STATUS_UPDATE                        BIT(24)
-#define TPS_REG_INT_PP_SWITCH_CHANGED                  BIT(23)
-#define TPS_REG_INT_HIGH_VOLTAGE_WARNING               BIT(22)
-#define TPS_REG_INT_USB_HOST_PRESENT_NO_LONGER         BIT(21)
-#define TPS_REG_INT_USB_HOST_PRESENT                   BIT(20)
-#define TPS_REG_INT_GOTO_MIN_RECEIVED                  BIT(19)
-#define TPS_REG_INT_PR_SWAP_REQUESTED                  BIT(17)
-#define TPS_REG_INT_SINK_CAP_MESSAGE_READY             BIT(15)
-#define TPS_REG_INT_SOURCE_CAP_MESSAGE_READY           BIT(14)
-#define TPS_REG_INT_NEW_CONTRACT_AS_PROVIDER           BIT(13)
-#define TPS_REG_INT_NEW_CONTRACT_AS_CONSUMER           BIT(12)
-#define TPS_REG_INT_VDM_RECEIVED                       BIT(11)
-#define TPS_REG_INT_ATTENTION_RECEIVED                 BIT(10)
-#define TPS_REG_INT_OVERCURRENT                                BIT(9)
-#define TPS_REG_INT_BIST                               BIT(8)
-#define TPS_REG_INT_RDO_RECEIVED_FROM_SINK             BIT(7)
-#define TPS_REG_INT_DR_SWAP_COMPLETE                   BIT(5)
-#define TPS_REG_INT_PR_SWAP_COMPLETE                   BIT(4)
-#define TPS_REG_INT_PLUG_EVENT                         BIT(3)
-#define TPS_REG_INT_HARD_RESET                         BIT(1)
-#define TPS_REG_INT_PD_SOFT_RESET                      BIT(0)
-
-/* TPS_REG_POWER_STATUS bits */
-#define TPS_POWER_STATUS_CONNECTION(x)  TPS_FIELD_GET(BIT(0), (x))
-#define TPS_POWER_STATUS_SOURCESINK(x) TPS_FIELD_GET(BIT(1), (x))
-#define TPS_POWER_STATUS_BC12_DET(x)   TPS_FIELD_GET(BIT(2), (x))
-
-#define TPS_POWER_STATUS_TYPEC_CURRENT_MASK GENMASK(3, 2)
-#define TPS_POWER_STATUS_PWROPMODE(p)      TPS_FIELD_GET(TPS_POWER_STATUS_TYPEC_CURRENT_MASK, (p))
-#define TPS_POWER_STATUS_BC12_STATUS_MASK   GENMASK(6, 5)
-#define TPS_POWER_STATUS_BC12_STATUS(p)            TPS_FIELD_GET(TPS_POWER_STATUS_BC12_STATUS_MASK, (p))
-
-#define TPS_POWER_STATUS_TYPEC_CURRENT_USB     0
-#define TPS_POWER_STATUS_TYPEC_CURRENT_1A5     1
-#define TPS_POWER_STATUS_TYPEC_CURRENT_3A0     2
-#define TPS_POWER_STATUS_TYPEC_CURRENT_PD      3
-
-#define TPS_POWER_STATUS_BC12_STATUS_SDP 0
-#define TPS_POWER_STATUS_BC12_STATUS_CDP 2
-#define TPS_POWER_STATUS_BC12_STATUS_DCP 3
-
-/* TPS_REG_DATA_STATUS bits */
-#define TPS_DATA_STATUS_DATA_CONNECTION             BIT(0)
-#define TPS_DATA_STATUS_UPSIDE_DOWN         BIT(1)
-#define TPS_DATA_STATUS_ACTIVE_CABLE        BIT(2)
-#define TPS_DATA_STATUS_USB2_CONNECTION             BIT(4)
-#define TPS_DATA_STATUS_USB3_CONNECTION             BIT(5)
-#define TPS_DATA_STATUS_USB3_GEN2           BIT(6)
-#define TPS_DATA_STATUS_USB_DATA_ROLE       BIT(7)
-#define TPS_DATA_STATUS_DP_CONNECTION       BIT(8)
-#define TPS_DATA_STATUS_DP_SINK                     BIT(9)
-#define TPS_DATA_STATUS_TBT_CONNECTION      BIT(16)
-#define TPS_DATA_STATUS_TBT_TYPE            BIT(17)
-#define TPS_DATA_STATUS_OPTICAL_CABLE       BIT(18)
-#define TPS_DATA_STATUS_ACTIVE_LINK_TRAIN    BIT(20)
-#define TPS_DATA_STATUS_FORCE_LSX           BIT(23)
-#define TPS_DATA_STATUS_POWER_MISMATCH      BIT(24)
-
-#define TPS_DATA_STATUS_DP_PIN_ASSIGNMENT_MASK GENMASK(11, 10)
-#define TPS_DATA_STATUS_DP_PIN_ASSIGNMENT(x) \
-       TPS_FIELD_GET(TPS_DATA_STATUS_DP_PIN_ASSIGNMENT_MASK, (x))
-#define TPS_DATA_STATUS_TBT_CABLE_SPEED_MASK   GENMASK(27, 25)
-#define TPS_DATA_STATUS_TBT_CABLE_SPEED \
-       TPS_FIELD_GET(TPS_DATA_STATUS_TBT_CABLE_SPEED_MASK, (x))
-#define TPS_DATA_STATUS_TBT_CABLE_GEN_MASK     GENMASK(29, 28)
-#define TPS_DATA_STATUS_TBT_CABLE_GEN \
-       TPS_FIELD_GET(TPS_DATA_STATUS_TBT_CABLE_GEN_MASK, (x))
-
-/* Map data status to DP spec assignments */
-#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT(x) \
-       ((TPS_DATA_STATUS_DP_PIN_ASSIGNMENT(x) << 1) | \
-               TPS_FIELD_GET(TPS_DATA_STATUS_USB3_CONNECTION, (x)))
-#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_E    0
-#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_F    BIT(0)
-#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_C    BIT(1)
-#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_D    (BIT(1) | BIT(0))
-#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_A    BIT(2)
-#define TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_B    (BIT(2) | BIT(1))
-
-#endif /* __TPS6598X_H__ */
diff --git a/drivers/usb/typec/tps6598x_trace.h b/drivers/usb/typec/tps6598x_trace.h
deleted file mode 100644 (file)
index 2191775..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * Driver for TI TPS6598x USB Power Delivery controller family
- *
- * Copyright (C) 2020 Purism SPC
- * Author: Guido Günther <agx@sigxcpu.org>
- */
-
-#undef TRACE_SYSTEM
-#define TRACE_SYSTEM tps6598x
-
-#if !defined(_TPS6598X_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
-#define _TPS6598X_TRACE_H_
-
-#include "tps6598x.h"
-
-#include <linux/stringify.h>
-#include <linux/types.h>
-#include <linux/tracepoint.h>
-
-#define show_irq_flags(flags) \
-       __print_flags_u64(flags, "|", \
-               { TPS_REG_INT_PD_SOFT_RESET,                    "PD_SOFT_RESET" }, \
-               { TPS_REG_INT_HARD_RESET,                       "HARD_RESET" }, \
-               { TPS_REG_INT_PLUG_EVENT,                       "PLUG_EVENT" }, \
-               { TPS_REG_INT_PR_SWAP_COMPLETE,                 "PR_SWAP_COMPLETE" }, \
-               { TPS_REG_INT_DR_SWAP_COMPLETE,                 "DR_SWAP_COMPLETE" }, \
-               { TPS_REG_INT_RDO_RECEIVED_FROM_SINK,           "RDO_RECEIVED_FROM_SINK" }, \
-               { TPS_REG_INT_BIST,                             "BIST" }, \
-               { TPS_REG_INT_OVERCURRENT,                      "OVERCURRENT" }, \
-               { TPS_REG_INT_ATTENTION_RECEIVED,               "ATTENTION_RECEIVED" }, \
-               { TPS_REG_INT_VDM_RECEIVED,                     "VDM_RECEIVED" }, \
-               { TPS_REG_INT_NEW_CONTRACT_AS_CONSUMER,         "NEW_CONTRACT_AS_CONSUMER" }, \
-               { TPS_REG_INT_NEW_CONTRACT_AS_PROVIDER,         "NEW_CONTRACT_AS_PROVIDER" }, \
-               { TPS_REG_INT_SOURCE_CAP_MESSAGE_READY,         "SOURCE_CAP_MESSAGE_READY" }, \
-               { TPS_REG_INT_SINK_CAP_MESSAGE_READY,           "SINK_CAP_MESSAGE_READY" }, \
-               { TPS_REG_INT_PR_SWAP_REQUESTED,                "PR_SWAP_REQUESTED" }, \
-               { TPS_REG_INT_GOTO_MIN_RECEIVED,                "GOTO_MIN_RECEIVED" }, \
-               { TPS_REG_INT_USB_HOST_PRESENT,                 "USB_HOST_PRESENT" }, \
-               { TPS_REG_INT_USB_HOST_PRESENT_NO_LONGER,       "USB_HOST_PRESENT_NO_LONGER" }, \
-               { TPS_REG_INT_HIGH_VOLTAGE_WARNING,             "HIGH_VOLTAGE_WARNING" }, \
-               { TPS_REG_INT_PP_SWITCH_CHANGED,                "PP_SWITCH_CHANGED" }, \
-               { TPS_REG_INT_POWER_STATUS_UPDATE,              "POWER_STATUS_UPDATE" }, \
-               { TPS_REG_INT_DATA_STATUS_UPDATE,               "DATA_STATUS_UPDATE" }, \
-               { TPS_REG_INT_STATUS_UPDATE,                    "STATUS_UPDATE" }, \
-               { TPS_REG_INT_PD_STATUS_UPDATE,                 "PD_STATUS_UPDATE" }, \
-               { TPS_REG_INT_ADC_LOW_THRESHOLD,                "ADC_LOW_THRESHOLD" }, \
-               { TPS_REG_INT_ADC_HIGH_THRESHOLD,               "ADC_HIGH_THRESHOLD" }, \
-               { TPS_REG_INT_CMD1_COMPLETE,                    "CMD1_COMPLETE" }, \
-               { TPS_REG_INT_CMD2_COMPLETE,                    "CMD2_COMPLETE" }, \
-               { TPS_REG_INT_ERROR_DEVICE_INCOMPATIBLE,        "ERROR_DEVICE_INCOMPATIBLE" }, \
-               { TPS_REG_INT_ERROR_CANNOT_PROVIDE_PWR,         "ERROR_CANNOT_PROVIDE_PWR" }, \
-               { TPS_REG_INT_ERROR_CAN_PROVIDE_PWR_LATER,      "ERROR_CAN_PROVIDE_PWR_LATER" }, \
-               { TPS_REG_INT_ERROR_POWER_EVENT_OCCURRED,       "ERROR_POWER_EVENT_OCCURRED" }, \
-               { TPS_REG_INT_ERROR_MISSING_GET_CAP_MESSAGE,    "ERROR_MISSING_GET_CAP_MESSAGE" }, \
-               { TPS_REG_INT_ERROR_PROTOCOL_ERROR,             "ERROR_PROTOCOL_ERROR" }, \
-               { TPS_REG_INT_ERROR_MESSAGE_DATA,               "ERROR_MESSAGE_DATA" }, \
-               { TPS_REG_INT_ERROR_DISCHARGE_FAILED,           "ERROR_DISCHARGE_FAILED" }, \
-               { TPS_REG_INT_SRC_TRANSITION,                   "SRC_TRANSITION" }, \
-               { TPS_REG_INT_ERROR_UNABLE_TO_SOURCE,           "ERROR_UNABLE_TO_SOURCE" }, \
-               { TPS_REG_INT_VDM_ENTERED_MODE,                 "VDM_ENTERED_MODE" }, \
-               { TPS_REG_INT_VDM_MSG_SENT,                     "VDM_MSG_SENT" }, \
-               { TPS_REG_INT_DISCOVER_MODES_COMPLETE,          "DISCOVER_MODES_COMPLETE" }, \
-               { TPS_REG_INT_EXIT_MODES_COMPLETE,              "EXIT_MODES_COMPLETE" }, \
-               { TPS_REG_INT_USER_VID_ALT_MODE_ENTERED,        "USER_VID_ALT_MODE_ENTERED" }, \
-               { TPS_REG_INT_USER_VID_ALT_MODE_EXIT,           "USER_VID_ALT_MODE_EXIT" }, \
-               { TPS_REG_INT_USER_VID_ALT_MODE_ATTN_VDM,       "USER_VID_ALT_MODE_ATTN_VDM" }, \
-               { TPS_REG_INT_USER_VID_ALT_MODE_OTHER_VDM,      "USER_VID_ALT_MODE_OTHER_VDM" })
-
-#define TPS6598X_STATUS_FLAGS_MASK (GENMASK(31, 0) ^ (TPS_STATUS_CONN_STATE_MASK | \
-                                                     TPS_STATUS_PP_5V0_SWITCH_MASK | \
-                                                     TPS_STATUS_PP_HV_SWITCH_MASK | \
-                                                     TPS_STATUS_PP_EXT_SWITCH_MASK | \
-                                                     TPS_STATUS_PP_CABLE_SWITCH_MASK | \
-                                                     TPS_STATUS_POWER_SOURCE_MASK | \
-                                                     TPS_STATUS_VBUS_STATUS_MASK | \
-                                                     TPS_STATUS_USB_HOST_PRESENT_MASK | \
-                                                     TPS_STATUS_LEGACY_MASK))
-
-#define show_status_conn_state(status) \
-       __print_symbolic(TPS_STATUS_CONN_STATE((status)), \
-               { TPS_STATUS_CONN_STATE_CONN_WITH_R_A,  "conn-Ra"  }, \
-               { TPS_STATUS_CONN_STATE_CONN_NO_R_A,    "conn-no-Ra" }, \
-               { TPS_STATUS_CONN_STATE_NO_CONN_R_A,    "no-conn-Ra" }, \
-               { TPS_STATUS_CONN_STATE_DEBUG_CONN,     "debug"  }, \
-               { TPS_STATUS_CONN_STATE_AUDIO_CONN,     "audio"  }, \
-               { TPS_STATUS_CONN_STATE_DISABLED,       "disabled" }, \
-               { TPS_STATUS_CONN_STATE_NO_CONN,        "no-conn" })
-
-#define show_status_pp_switch_state(status) \
-       __print_symbolic(status, \
-               { TPS_STATUS_PP_SWITCH_STATE_IN,        "in" }, \
-               { TPS_STATUS_PP_SWITCH_STATE_OUT,       "out" }, \
-               { TPS_STATUS_PP_SWITCH_STATE_FAULT,     "fault" }, \
-               { TPS_STATUS_PP_SWITCH_STATE_DISABLED,  "off" })
-
-#define show_status_power_sources(status) \
-       __print_symbolic(TPS_STATUS_POWER_SOURCE(status), \
-               { TPS_STATUS_POWER_SOURCE_VBUS,         "vbus" }, \
-               { TPS_STATUS_POWER_SOURCE_VIN_3P3,      "vin-3p3" }, \
-               { TPS_STATUS_POWER_SOURCE_DEAD_BAT,     "dead-battery" }, \
-               { TPS_STATUS_POWER_SOURCE_UNKNOWN,      "unknown" })
-
-#define show_status_vbus_status(status) \
-       __print_symbolic(TPS_STATUS_VBUS_STATUS(status), \
-               { TPS_STATUS_VBUS_STATUS_VSAFE0V,       "vSafe0V" }, \
-               { TPS_STATUS_VBUS_STATUS_VSAFE5V,       "vSafe5V" }, \
-               { TPS_STATUS_VBUS_STATUS_PD,            "pd" }, \
-               { TPS_STATUS_VBUS_STATUS_FAULT,         "fault" })
-
-#define show_status_usb_host_present(status) \
-       __print_symbolic(TPS_STATUS_USB_HOST_PRESENT(status), \
-               { TPS_STATUS_USB_HOST_PRESENT_PD_USB,    "pd-usb" }, \
-               { TPS_STATUS_USB_HOST_PRESENT_NO_PD,     "no-pd" }, \
-               { TPS_STATUS_USB_HOST_PRESENT_PD_NO_USB, "pd-no-usb" }, \
-               { TPS_STATUS_USB_HOST_PRESENT_NO,        "no" })
-
-#define show_status_legacy(status) \
-       __print_symbolic(TPS_STATUS_LEGACY(status),          \
-               { TPS_STATUS_LEGACY_SOURCE,              "source" }, \
-               { TPS_STATUS_LEGACY_SINK,                "sink" }, \
-               { TPS_STATUS_LEGACY_NO,                  "no" })
-
-#define show_status_flags(flags) \
-       __print_flags((flags & TPS6598X_STATUS_FLAGS_MASK), "|", \
-                     { TPS_STATUS_PLUG_PRESENT,        "PLUG_PRESENT" }, \
-                     { TPS_STATUS_PLUG_UPSIDE_DOWN,    "UPSIDE_DOWN" }, \
-                     { TPS_STATUS_PORTROLE,            "PORTROLE" }, \
-                     { TPS_STATUS_DATAROLE,            "DATAROLE" }, \
-                     { TPS_STATUS_VCONN,               "VCONN" }, \
-                     { TPS_STATUS_OVERCURRENT,         "OVERCURRENT" }, \
-                     { TPS_STATUS_GOTO_MIN_ACTIVE,     "GOTO_MIN_ACTIVE" }, \
-                     { TPS_STATUS_BIST,                "BIST" }, \
-                     { TPS_STATUS_HIGH_VOLAGE_WARNING, "HIGH_VOLAGE_WARNING" }, \
-                     { TPS_STATUS_HIGH_LOW_VOLTAGE_WARNING, "HIGH_LOW_VOLTAGE_WARNING" })
-
-#define show_power_status_source_sink(power_status) \
-       __print_symbolic(TPS_POWER_STATUS_SOURCESINK(power_status), \
-               { 1, "sink" }, \
-               { 0, "source" })
-
-#define show_power_status_typec_status(power_status) \
-       __print_symbolic(TPS_POWER_STATUS_PWROPMODE(power_status), \
-               { TPS_POWER_STATUS_TYPEC_CURRENT_PD,  "pd" }, \
-               { TPS_POWER_STATUS_TYPEC_CURRENT_3A0, "3.0A" }, \
-               { TPS_POWER_STATUS_TYPEC_CURRENT_1A5, "1.5A" }, \
-               { TPS_POWER_STATUS_TYPEC_CURRENT_USB, "usb" })
-
-#define show_power_status_bc12_status(power_status) \
-       __print_symbolic(TPS_POWER_STATUS_BC12_STATUS(power_status), \
-               { TPS_POWER_STATUS_BC12_STATUS_DCP, "dcp" }, \
-               { TPS_POWER_STATUS_BC12_STATUS_CDP, "cdp" }, \
-               { TPS_POWER_STATUS_BC12_STATUS_SDP, "sdp" })
-
-#define TPS_DATA_STATUS_FLAGS_MASK (GENMASK(31, 0) ^ (TPS_DATA_STATUS_DP_PIN_ASSIGNMENT_MASK | \
-                                                     TPS_DATA_STATUS_TBT_CABLE_SPEED_MASK | \
-                                                     TPS_DATA_STATUS_TBT_CABLE_GEN_MASK))
-
-#define show_data_status_flags(data_status) \
-       __print_flags(data_status & TPS_DATA_STATUS_FLAGS_MASK, "|", \
-               { TPS_DATA_STATUS_DATA_CONNECTION,      "DATA_CONNECTION" }, \
-               { TPS_DATA_STATUS_UPSIDE_DOWN,          "DATA_UPSIDE_DOWN" }, \
-               { TPS_DATA_STATUS_ACTIVE_CABLE,         "ACTIVE_CABLE" }, \
-               { TPS_DATA_STATUS_USB2_CONNECTION,      "USB2_CONNECTION" }, \
-               { TPS_DATA_STATUS_USB3_CONNECTION,      "USB3_CONNECTION" }, \
-               { TPS_DATA_STATUS_USB3_GEN2,            "USB3_GEN2" }, \
-               { TPS_DATA_STATUS_USB_DATA_ROLE,        "USB_DATA_ROLE" }, \
-               { TPS_DATA_STATUS_DP_CONNECTION,        "DP_CONNECTION" }, \
-               { TPS_DATA_STATUS_DP_SINK,              "DP_SINK" }, \
-               { TPS_DATA_STATUS_TBT_CONNECTION,       "TBT_CONNECTION" }, \
-               { TPS_DATA_STATUS_TBT_TYPE,             "TBT_TYPE" }, \
-               { TPS_DATA_STATUS_OPTICAL_CABLE,        "OPTICAL_CABLE" }, \
-               { TPS_DATA_STATUS_ACTIVE_LINK_TRAIN,    "ACTIVE_LINK_TRAIN" }, \
-               { TPS_DATA_STATUS_FORCE_LSX,            "FORCE_LSX" }, \
-               { TPS_DATA_STATUS_POWER_MISMATCH,       "POWER_MISMATCH" })
-
-#define show_data_status_dp_pin_assignment(data_status) \
-       __print_symbolic(TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT(data_status), \
-               { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_E, "E" }, \
-               { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_F, "F" }, \
-               { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_C, "C" }, \
-               { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_D, "D" }, \
-               { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_A, "A" }, \
-               { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_B, "B" })
-
-#define maybe_show_data_status_dp_pin_assignment(data_status) \
-       (data_status & TPS_DATA_STATUS_DP_CONNECTION ? \
-        show_data_status_dp_pin_assignment(data_status) : "")
-
-TRACE_EVENT(tps6598x_irq,
-           TP_PROTO(u64 event1,
-                    u64 event2),
-           TP_ARGS(event1, event2),
-
-           TP_STRUCT__entry(
-                            __field(u64, event1)
-                            __field(u64, event2)
-                            ),
-
-           TP_fast_assign(
-                          __entry->event1 = event1;
-                          __entry->event2 = event2;
-                          ),
-
-           TP_printk("event1=%s, event2=%s",
-                     show_irq_flags(__entry->event1),
-                     show_irq_flags(__entry->event2))
-);
-
-TRACE_EVENT(tps6598x_status,
-           TP_PROTO(u32 status),
-           TP_ARGS(status),
-
-           TP_STRUCT__entry(
-                            __field(u32, status)
-                            ),
-
-           TP_fast_assign(
-                          __entry->status = status;
-                          ),
-
-           TP_printk("conn: %s, pp_5v0: %s, pp_hv: %s, pp_ext: %s, pp_cable: %s, "
-                     "pwr-src: %s, vbus: %s, usb-host: %s, legacy: %s, flags: %s",
-                     show_status_conn_state(__entry->status),
-                     show_status_pp_switch_state(TPS_STATUS_PP_5V0_SWITCH(__entry->status)),
-                     show_status_pp_switch_state(TPS_STATUS_PP_HV_SWITCH(__entry->status)),
-                     show_status_pp_switch_state(TPS_STATUS_PP_EXT_SWITCH(__entry->status)),
-                     show_status_pp_switch_state(TPS_STATUS_PP_CABLE_SWITCH(__entry->status)),
-                     show_status_power_sources(__entry->status),
-                     show_status_vbus_status(__entry->status),
-                     show_status_usb_host_present(__entry->status),
-                     show_status_legacy(__entry->status),
-                     show_status_flags(__entry->status)
-                   )
-);
-
-TRACE_EVENT(tps6598x_power_status,
-           TP_PROTO(u16 power_status),
-           TP_ARGS(power_status),
-
-           TP_STRUCT__entry(
-                            __field(u16, power_status)
-                            ),
-
-           TP_fast_assign(
-                          __entry->power_status = power_status;
-                          ),
-
-           TP_printk("conn: %d, pwr-role: %s, typec: %s, bc: %s",
-                     !!TPS_POWER_STATUS_CONNECTION(__entry->power_status),
-                     show_power_status_source_sink(__entry->power_status),
-                     show_power_status_typec_status(__entry->power_status),
-                     show_power_status_bc12_status(__entry->power_status)
-                   )
-);
-
-TRACE_EVENT(tps6598x_data_status,
-           TP_PROTO(u32 data_status),
-           TP_ARGS(data_status),
-
-           TP_STRUCT__entry(
-                            __field(u32, data_status)
-                            ),
-
-           TP_fast_assign(
-                          __entry->data_status = data_status;
-                          ),
-
-           TP_printk("%s%s%s",
-                     show_data_status_flags(__entry->data_status),
-                     __entry->data_status & TPS_DATA_STATUS_DP_CONNECTION ? ", DP pinout " : "",
-                     maybe_show_data_status_dp_pin_assignment(__entry->data_status)
-                   )
-);
-
-#endif /* _TPS6598X_TRACE_H_ */
-
-/* This part must be outside protection */
-#undef TRACE_INCLUDE_FILE
-#define TRACE_INCLUDE_FILE tps6598x_trace
-#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
-#include <trace/define_trace.h>