All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20180306120202.GA4951@kuha.fi.intel.com>

diff --git a/a/1.txt b/N1/1.txt
index feac648..5ce2060 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -94,317 +94,5 @@ etc.
 
 Br,
 
-diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
-index 2620a694704f..53df10df2f9d 100644
---- a/drivers/usb/typec/class.c
-+++ b/drivers/usb/typec/class.c
-@@ -282,10 +282,10 @@ typec_altmode_roles_show(struct device *dev, struct device_attribute *attr,
- 	ssize_t ret;
- 
- 	switch (mode->roles) {
--	case TYPEC_PORT_DFP:
-+	case TYPEC_PORT_SRC:
- 		ret = sprintf(buf, "source\n");
- 		break;
--	case TYPEC_PORT_UFP:
-+	case TYPEC_PORT_SNK:
- 		ret = sprintf(buf, "sink\n");
- 		break;
- 	case TYPEC_PORT_DRP:
-@@ -797,14 +797,14 @@ static const char * const typec_data_roles[] = {
- };
- 
- static const char * const typec_port_types[] = {
--	[TYPEC_PORT_DFP] = "source",
--	[TYPEC_PORT_UFP] = "sink",
-+	[TYPEC_PORT_SRC] = "source",
-+	[TYPEC_PORT_SNK] = "sink",
- 	[TYPEC_PORT_DRP] = "dual",
- };
- 
- static const char * const typec_port_types_drp[] = {
--	[TYPEC_PORT_DFP] = "dual [source] sink",
--	[TYPEC_PORT_UFP] = "dual source [sink]",
-+	[TYPEC_PORT_SRC] = "dual [source] sink",
-+	[TYPEC_PORT_SNK] = "dual source [sink]",
- 	[TYPEC_PORT_DRP] = "[dual] source sink",
- };
- 
-@@ -875,9 +875,7 @@ static ssize_t data_role_store(struct device *dev,
- 		return ret;
- 
- 	mutex_lock(&port->port_type_lock);
--	if (port->port_type != TYPEC_PORT_DRP) {
--		dev_dbg(dev, "port type fixed at \"%s\"",
--			     typec_port_types[port->port_type]);
-+	if (port->cap->data != TYPEC_PORT_DRD) {
- 		ret = -EOPNOTSUPP;
- 		goto unlock_and_ret;
- 	}
-@@ -897,7 +895,7 @@ static ssize_t data_role_show(struct device *dev,
- {
- 	struct typec_port *port = to_typec_port(dev);
- 
--	if (port->cap->type == TYPEC_PORT_DRP)
-+	if (port->cap->data == TYPEC_PORT_DRD)
- 		return sprintf(buf, "%s\n", port->data_role == TYPEC_HOST ?
- 			       "[host] device" : "host [device]");
- 
-@@ -1328,7 +1326,6 @@ struct typec_port *typec_register_port(struct device *parent,
- 				       const struct typec_capability *cap)
- {
- 	struct typec_port *port;
--	int role;
- 	int ret;
- 	int id;
- 
-@@ -1354,21 +1351,36 @@ struct typec_port *typec_register_port(struct device *parent,
- 		goto err_mux;
- 	}
- 
--	if (cap->type == TYPEC_PORT_DFP)
--		role = TYPEC_SOURCE;
--	else if (cap->type == TYPEC_PORT_UFP)
--		role = TYPEC_SINK;
--	else
--		role = cap->prefer_role;
--
--	if (role == TYPEC_SOURCE) {
--		port->data_role = TYPEC_HOST;
-+	switch (cap->type) {
-+	case TYPEC_PORT_SRC:
- 		port->pwr_role = TYPEC_SOURCE;
- 		port->vconn_role = TYPEC_SOURCE;
--	} else {
--		port->data_role = TYPEC_DEVICE;
-+		break;
-+	case TYPEC_PORT_SNK:
- 		port->pwr_role = TYPEC_SINK;
- 		port->vconn_role = TYPEC_SINK;
-+		break;
-+	case TYPEC_PORT_DRP:
-+		if (cap->prefer_role != TYPEC_NO_PREFERRED_ROLE)
-+			port->pwr_role = cap->prefer_role;
-+		else
-+			port->pwr_role = TYPEC_SINK;
-+		break;
-+	}
-+
-+	switch (cap->data) {
-+	case TYPEC_PORT_DFP:
-+		port->data_role = TYPEC_HOST;
-+		break;
-+	case TYPEC_PORT_UFP:
-+		port->data_role = TYPEC_DEVICE;
-+		break;
-+	case TYPEC_PORT_DRD:
-+		if (cap->prefer_role == TYPEC_SOURCE)
-+			port->data_role = TYPEC_HOST;
-+		else
-+			port->data_role = TYPEC_DEVICE;
-+		break;
- 	}
- 
- 	port->id = id;
-diff --git a/drivers/usb/typec/fusb302/fusb302.c b/drivers/usb/typec/fusb302/fusb302.c
-index b267b907bf24..76c9d955fa40 100644
---- a/drivers/usb/typec/fusb302/fusb302.c
-+++ b/drivers/usb/typec/fusb302/fusb302.c
-@@ -1230,6 +1230,7 @@ static const struct tcpc_config fusb302_tcpc_config = {
- 	.max_snk_mw = 15000,
- 	.operating_snk_mw = 2500,
- 	.type = TYPEC_PORT_DRP,
-+	.data = TYPEC_PORT_DRD,
- 	.default_role = TYPEC_SINK,
- 	.alt_modes = NULL,
- };
-diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
-index bfcaf6618a1f..0e1d92381522 100644
---- a/drivers/usb/typec/tcpm.c
-+++ b/drivers/usb/typec/tcpm.c
-@@ -350,7 +350,7 @@ static enum tcpm_state tcpm_default_state(struct tcpm_port *port)
- 		else if (port->tcpc->config->default_role == TYPEC_SINK)
- 			return SNK_UNATTACHED;
- 		/* Fall through to return SRC_UNATTACHED */
--	} else if (port->port_type == TYPEC_PORT_UFP) {
-+	} else if (port->port_type == TYPEC_PORT_SNK) {
- 		return SNK_UNATTACHED;
- 	}
- 	return SRC_UNATTACHED;
-@@ -2264,7 +2264,7 @@ static inline enum tcpm_state unattached_state(struct tcpm_port *port)
- 			return SRC_UNATTACHED;
- 		else
- 			return SNK_UNATTACHED;
--	} else if (port->port_type == TYPEC_PORT_DFP) {
-+	} else if (port->port_type == TYPEC_PORT_SRC) {
- 		return SRC_UNATTACHED;
- 	}
- 
-@@ -3554,11 +3554,11 @@ static int tcpm_port_type_set(const struct typec_capability *cap,
- 
- 	if (!port->connected) {
- 		tcpm_set_state(port, PORT_RESET, 0);
--	} else if (type == TYPEC_PORT_UFP) {
-+	} else if (type == TYPEC_PORT_SNK) {
- 		if (!(port->pwr_role == TYPEC_SINK &&
- 		      port->data_role == TYPEC_DEVICE))
- 			tcpm_set_state(port, PORT_RESET, 0);
--	} else if (type == TYPEC_PORT_DFP) {
-+	} else if (type == TYPEC_PORT_SRC) {
- 		if (!(port->pwr_role == TYPEC_SOURCE &&
- 		      port->data_role == TYPEC_HOST))
- 			tcpm_set_state(port, PORT_RESET, 0);
-@@ -3748,6 +3748,7 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
- 
- 	port->typec_caps.prefer_role = tcpc->config->default_role;
- 	port->typec_caps.type = tcpc->config->type;
-+	port->typec_caps.data = tcpc->config->data;
- 	port->typec_caps.revision = 0x0120;	/* Type-C spec release 1.2 */
- 	port->typec_caps.pd_revision = 0x0200;	/* USB-PD spec release 2.0 */
- 	port->typec_caps.dr_set = tcpm_dr_set;
-diff --git a/drivers/usb/typec/tps6598x.c b/drivers/usb/typec/tps6598x.c
-index 37a15c14a6c6..8b8406867c02 100644
---- a/drivers/usb/typec/tps6598x.c
-+++ b/drivers/usb/typec/tps6598x.c
-@@ -393,31 +393,39 @@ static int tps6598x_probe(struct i2c_client *client)
- 	if (ret < 0)
- 		return ret;
- 
-+	tps->typec_cap.revision = USB_TYPEC_REV_1_2;
-+	tps->typec_cap.pd_revision = 0x200;
-+	tps->typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE;
-+	tps->typec_cap.pr_set = tps6598x_pr_set;
-+	tps->typec_cap.dr_set = tps6598x_dr_set;
-+
- 	switch (TPS_SYSCONF_PORTINFO(conf)) {
- 	case TPS_PORTINFO_SINK_ACCESSORY:
- 	case TPS_PORTINFO_SINK:
--		tps->typec_cap.type = TYPEC_PORT_UFP;
-+		tps->typec_cap.type = TYPEC_PORT_SNK;
-+		tps->typec_cap.data = TYPEC_PORT_UFP;
- 		break;
- 	case TPS_PORTINFO_DRP_UFP_DRD:
- 	case TPS_PORTINFO_DRP_DFP_DRD:
--		tps->typec_cap.dr_set = tps6598x_dr_set;
--		/* fall through */
-+		tps->typec_cap.type = TYPEC_PORT_DRP;
-+		tps->typec_cap.data = TYPEC_PORT_DRD;
-+		break;
- 	case TPS_PORTINFO_DRP_UFP:
-+		tps->typec_cap.type = TYPEC_PORT_DRP;
-+		tps->typec_cap.data = TYPEC_PORT_UFP;
-+		break;
- 	case TPS_PORTINFO_DRP_DFP:
--		tps->typec_cap.pr_set = tps6598x_pr_set;
- 		tps->typec_cap.type = TYPEC_PORT_DRP;
-+		tps->typec_cap.data = TYPEC_PORT_DFP;
- 		break;
- 	case TPS_PORTINFO_SOURCE:
--		tps->typec_cap.type = TYPEC_PORT_DFP;
-+		tps->typec_cap.type = TYPEC_PORT_SRC;
-+		tps->typec_cap.data = TYPEC_PORT_DFP;
- 		break;
- 	default:
- 		return -ENODEV;
- 	}
- 
--	tps->typec_cap.revision = USB_TYPEC_REV_1_2;
--	tps->typec_cap.pd_revision = 0x200;
--	tps->typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE;
--
- 	tps->port = typec_register_port(&client->dev, &tps->typec_cap);
- 	if (IS_ERR(tps->port))
- 		return PTR_ERR(tps->port);
-diff --git a/drivers/usb/typec/typec_wcove.c b/drivers/usb/typec/typec_wcove.c
-index 2e990e0d917d..19cca7f1b2c5 100644
---- a/drivers/usb/typec/typec_wcove.c
-+++ b/drivers/usb/typec/typec_wcove.c
-@@ -572,6 +572,7 @@ static struct tcpc_config wcove_typec_config = {
- 	.operating_snk_mw = 15000,
- 
- 	.type = TYPEC_PORT_DRP,
-+	.data = TYPEC_PORT_DRD,
- 	.default_role = TYPEC_SINK,
- };
- 
-diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
-index 69d544cfcd45..bf0977fbd100 100644
---- a/drivers/usb/typec/ucsi/ucsi.c
-+++ b/drivers/usb/typec/ucsi/ucsi.c
-@@ -592,11 +592,18 @@ static int ucsi_register_port(struct ucsi *ucsi, int index)
- 		return ret;
- 
- 	if (con->cap.op_mode & UCSI_CONCAP_OPMODE_DRP)
--		cap->type = TYPEC_PORT_DRP;
-+		cap->data = TYPEC_PORT_DRD;
- 	else if (con->cap.op_mode & UCSI_CONCAP_OPMODE_DFP)
--		cap->type = TYPEC_PORT_DFP;
-+		cap->data = TYPEC_PORT_DFP;
- 	else if (con->cap.op_mode & UCSI_CONCAP_OPMODE_UFP)
--		cap->type = TYPEC_PORT_UFP;
-+		cap->data = TYPEC_PORT_UFP;
-+
-+	if (con->cap.provider && con->cap.consumer)
-+		cap->type = TYPEC_PORT_DRP;
-+	else if (con->cap.provider)
-+		cap->type = TYPEC_PORT_SRC;
-+	else if (con->cap.consumer)
-+		cap->type = TYPEC_PORT_SNK;
- 
- 	cap->revision = ucsi->cap.typec_version;
- 	cap->pd_revision = ucsi->cap.pd_version;
-diff --git a/include/linux/usb/tcpm.h b/include/linux/usb/tcpm.h
-index fe3508e6e1df..f0d839daeaea 100644
---- a/include/linux/usb/tcpm.h
-+++ b/include/linux/usb/tcpm.h
-@@ -91,6 +91,7 @@ struct tcpc_config {
- 	unsigned int operating_snk_mw;
- 
- 	enum typec_port_type type;
-+	enum typec_port_data data;
- 	enum typec_role default_role;
- 	bool try_role_hw;	/* try.{src,snk} implemented in hardware */
- 
-diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h
-index 2408e5c2ed91..672b39bb0adc 100644
---- a/include/linux/usb/typec.h
-+++ b/include/linux/usb/typec.h
-@@ -22,9 +22,15 @@ struct typec_port;
- struct fwnode_handle;
- 
- enum typec_port_type {
-+	TYPEC_PORT_SRC,
-+	TYPEC_PORT_SNK,
-+	TYPEC_PORT_DRP,
-+};
-+
-+enum typec_port_data {
- 	TYPEC_PORT_DFP,
- 	TYPEC_PORT_UFP,
--	TYPEC_PORT_DRP,
-+	TYPEC_PORT_DRD,
- };
- 
- enum typec_plug_type {
-@@ -186,10 +192,11 @@ struct typec_partner_desc {
- 
- /*
-  * struct typec_capability - USB Type-C Port Capabilities
-- * @role: DFP (Host-only), UFP (Device-only) or DRP (Dual Role)
-+ * @type: Supported power role of the port
-+ * @data: Supported data role of the port
-  * @revision: USB Type-C Specification release. Binary coded decimal
-  * @pd_revision: USB Power Delivery Specification revision if supported
-- * @prefer_role: Initial role preference
-+ * @prefer_role: Initial role preference (DRP ports).
-  * @accessory: Supported Accessory Modes
-  * @sw: Cable plug orientation switch
-  * @mux: Multiplexer switch for Alternate/Accessory Modes
-@@ -205,6 +212,7 @@ struct typec_partner_desc {
-  */
- struct typec_capability {
- 	enum typec_port_type	type;
-+	enum typec_port_data	data;
- 	u16			revision; /* 0120H = "1.2" */
- 	u16			pd_revision; /* 0300H = "3.0" */
- 	int			prefer_role;
+-- 
+heikki
diff --git a/N1/2.hdr b/N1/2.hdr
new file mode 100644
index 0000000..26380ea
--- /dev/null
+++ b/N1/2.hdr
@@ -0,0 +1,2 @@
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: attachment; filename="0001-usb-typec-Separate-the-definitions-for-data-and-powe.patch"
diff --git a/N1/2.txt b/N1/2.txt
new file mode 100644
index 0000000..cb15537
--- /dev/null
+++ b/N1/2.txt
@@ -0,0 +1,343 @@
+>From 4f7652ba8a3d4e8f7bd30cf7ca8beba6af5ad873 Mon Sep 17 00:00:00 2001
+From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
+Date: Tue, 2 Jan 2018 17:07:58 +0300
+Subject: [PATCH] usb: typec: Separate the definitions for data and power roles
+
+USB Type-C specification v1.2 separated the power and data
+roles more clearly. Dual-Role-Data term was introduced, and
+the meaning of DRP was changed from "Dual-Role-Port" to
+"Dual-Role-Power".
+
+In order to allow the port drivers to describe the
+capabilities of the ports more clearly according to the
+newest specifications, introducing separate definitions for
+the data roles.
+
+Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
+---
+ drivers/usb/typec/class.c           | 56 ++++++++++++++++++++++---------------
+ drivers/usb/typec/fusb302/fusb302.c |  1 +
+ drivers/usb/typec/tcpm.c            |  9 +++---
+ drivers/usb/typec/tps6598x.c        | 26 +++++++++++------
+ drivers/usb/typec/typec_wcove.c     |  1 +
+ drivers/usb/typec/ucsi/ucsi.c       | 13 +++++++--
+ include/linux/usb/tcpm.h            |  1 +
+ include/linux/usb/typec.h           | 14 ++++++++--
+ 8 files changed, 80 insertions(+), 41 deletions(-)
+
+diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
+index 2620a694704f..53df10df2f9d 100644
+--- a/drivers/usb/typec/class.c
++++ b/drivers/usb/typec/class.c
+@@ -282,10 +282,10 @@ typec_altmode_roles_show(struct device *dev, struct device_attribute *attr,
+ 	ssize_t ret;
+ 
+ 	switch (mode->roles) {
+-	case TYPEC_PORT_DFP:
++	case TYPEC_PORT_SRC:
+ 		ret = sprintf(buf, "source\n");
+ 		break;
+-	case TYPEC_PORT_UFP:
++	case TYPEC_PORT_SNK:
+ 		ret = sprintf(buf, "sink\n");
+ 		break;
+ 	case TYPEC_PORT_DRP:
+@@ -797,14 +797,14 @@ static const char * const typec_data_roles[] = {
+ };
+ 
+ static const char * const typec_port_types[] = {
+-	[TYPEC_PORT_DFP] = "source",
+-	[TYPEC_PORT_UFP] = "sink",
++	[TYPEC_PORT_SRC] = "source",
++	[TYPEC_PORT_SNK] = "sink",
+ 	[TYPEC_PORT_DRP] = "dual",
+ };
+ 
+ static const char * const typec_port_types_drp[] = {
+-	[TYPEC_PORT_DFP] = "dual [source] sink",
+-	[TYPEC_PORT_UFP] = "dual source [sink]",
++	[TYPEC_PORT_SRC] = "dual [source] sink",
++	[TYPEC_PORT_SNK] = "dual source [sink]",
+ 	[TYPEC_PORT_DRP] = "[dual] source sink",
+ };
+ 
+@@ -875,9 +875,7 @@ static ssize_t data_role_store(struct device *dev,
+ 		return ret;
+ 
+ 	mutex_lock(&port->port_type_lock);
+-	if (port->port_type != TYPEC_PORT_DRP) {
+-		dev_dbg(dev, "port type fixed at \"%s\"",
+-			     typec_port_types[port->port_type]);
++	if (port->cap->data != TYPEC_PORT_DRD) {
+ 		ret = -EOPNOTSUPP;
+ 		goto unlock_and_ret;
+ 	}
+@@ -897,7 +895,7 @@ static ssize_t data_role_show(struct device *dev,
+ {
+ 	struct typec_port *port = to_typec_port(dev);
+ 
+-	if (port->cap->type == TYPEC_PORT_DRP)
++	if (port->cap->data == TYPEC_PORT_DRD)
+ 		return sprintf(buf, "%s\n", port->data_role == TYPEC_HOST ?
+ 			       "[host] device" : "host [device]");
+ 
+@@ -1328,7 +1326,6 @@ struct typec_port *typec_register_port(struct device *parent,
+ 				       const struct typec_capability *cap)
+ {
+ 	struct typec_port *port;
+-	int role;
+ 	int ret;
+ 	int id;
+ 
+@@ -1354,21 +1351,36 @@ struct typec_port *typec_register_port(struct device *parent,
+ 		goto err_mux;
+ 	}
+ 
+-	if (cap->type == TYPEC_PORT_DFP)
+-		role = TYPEC_SOURCE;
+-	else if (cap->type == TYPEC_PORT_UFP)
+-		role = TYPEC_SINK;
+-	else
+-		role = cap->prefer_role;
+-
+-	if (role == TYPEC_SOURCE) {
+-		port->data_role = TYPEC_HOST;
++	switch (cap->type) {
++	case TYPEC_PORT_SRC:
+ 		port->pwr_role = TYPEC_SOURCE;
+ 		port->vconn_role = TYPEC_SOURCE;
+-	} else {
+-		port->data_role = TYPEC_DEVICE;
++		break;
++	case TYPEC_PORT_SNK:
+ 		port->pwr_role = TYPEC_SINK;
+ 		port->vconn_role = TYPEC_SINK;
++		break;
++	case TYPEC_PORT_DRP:
++		if (cap->prefer_role != TYPEC_NO_PREFERRED_ROLE)
++			port->pwr_role = cap->prefer_role;
++		else
++			port->pwr_role = TYPEC_SINK;
++		break;
++	}
++
++	switch (cap->data) {
++	case TYPEC_PORT_DFP:
++		port->data_role = TYPEC_HOST;
++		break;
++	case TYPEC_PORT_UFP:
++		port->data_role = TYPEC_DEVICE;
++		break;
++	case TYPEC_PORT_DRD:
++		if (cap->prefer_role == TYPEC_SOURCE)
++			port->data_role = TYPEC_HOST;
++		else
++			port->data_role = TYPEC_DEVICE;
++		break;
+ 	}
+ 
+ 	port->id = id;
+diff --git a/drivers/usb/typec/fusb302/fusb302.c b/drivers/usb/typec/fusb302/fusb302.c
+index b267b907bf24..76c9d955fa40 100644
+--- a/drivers/usb/typec/fusb302/fusb302.c
++++ b/drivers/usb/typec/fusb302/fusb302.c
+@@ -1230,6 +1230,7 @@ static const struct tcpc_config fusb302_tcpc_config = {
+ 	.max_snk_mw = 15000,
+ 	.operating_snk_mw = 2500,
+ 	.type = TYPEC_PORT_DRP,
++	.data = TYPEC_PORT_DRD,
+ 	.default_role = TYPEC_SINK,
+ 	.alt_modes = NULL,
+ };
+diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
+index bfcaf6618a1f..0e1d92381522 100644
+--- a/drivers/usb/typec/tcpm.c
++++ b/drivers/usb/typec/tcpm.c
+@@ -350,7 +350,7 @@ static enum tcpm_state tcpm_default_state(struct tcpm_port *port)
+ 		else if (port->tcpc->config->default_role == TYPEC_SINK)
+ 			return SNK_UNATTACHED;
+ 		/* Fall through to return SRC_UNATTACHED */
+-	} else if (port->port_type == TYPEC_PORT_UFP) {
++	} else if (port->port_type == TYPEC_PORT_SNK) {
+ 		return SNK_UNATTACHED;
+ 	}
+ 	return SRC_UNATTACHED;
+@@ -2264,7 +2264,7 @@ static inline enum tcpm_state unattached_state(struct tcpm_port *port)
+ 			return SRC_UNATTACHED;
+ 		else
+ 			return SNK_UNATTACHED;
+-	} else if (port->port_type == TYPEC_PORT_DFP) {
++	} else if (port->port_type == TYPEC_PORT_SRC) {
+ 		return SRC_UNATTACHED;
+ 	}
+ 
+@@ -3554,11 +3554,11 @@ static int tcpm_port_type_set(const struct typec_capability *cap,
+ 
+ 	if (!port->connected) {
+ 		tcpm_set_state(port, PORT_RESET, 0);
+-	} else if (type == TYPEC_PORT_UFP) {
++	} else if (type == TYPEC_PORT_SNK) {
+ 		if (!(port->pwr_role == TYPEC_SINK &&
+ 		      port->data_role == TYPEC_DEVICE))
+ 			tcpm_set_state(port, PORT_RESET, 0);
+-	} else if (type == TYPEC_PORT_DFP) {
++	} else if (type == TYPEC_PORT_SRC) {
+ 		if (!(port->pwr_role == TYPEC_SOURCE &&
+ 		      port->data_role == TYPEC_HOST))
+ 			tcpm_set_state(port, PORT_RESET, 0);
+@@ -3748,6 +3748,7 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
+ 
+ 	port->typec_caps.prefer_role = tcpc->config->default_role;
+ 	port->typec_caps.type = tcpc->config->type;
++	port->typec_caps.data = tcpc->config->data;
+ 	port->typec_caps.revision = 0x0120;	/* Type-C spec release 1.2 */
+ 	port->typec_caps.pd_revision = 0x0200;	/* USB-PD spec release 2.0 */
+ 	port->typec_caps.dr_set = tcpm_dr_set;
+diff --git a/drivers/usb/typec/tps6598x.c b/drivers/usb/typec/tps6598x.c
+index 37a15c14a6c6..8b8406867c02 100644
+--- a/drivers/usb/typec/tps6598x.c
++++ b/drivers/usb/typec/tps6598x.c
+@@ -393,31 +393,39 @@ static int tps6598x_probe(struct i2c_client *client)
+ 	if (ret < 0)
+ 		return ret;
+ 
++	tps->typec_cap.revision = USB_TYPEC_REV_1_2;
++	tps->typec_cap.pd_revision = 0x200;
++	tps->typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE;
++	tps->typec_cap.pr_set = tps6598x_pr_set;
++	tps->typec_cap.dr_set = tps6598x_dr_set;
++
+ 	switch (TPS_SYSCONF_PORTINFO(conf)) {
+ 	case TPS_PORTINFO_SINK_ACCESSORY:
+ 	case TPS_PORTINFO_SINK:
+-		tps->typec_cap.type = TYPEC_PORT_UFP;
++		tps->typec_cap.type = TYPEC_PORT_SNK;
++		tps->typec_cap.data = TYPEC_PORT_UFP;
+ 		break;
+ 	case TPS_PORTINFO_DRP_UFP_DRD:
+ 	case TPS_PORTINFO_DRP_DFP_DRD:
+-		tps->typec_cap.dr_set = tps6598x_dr_set;
+-		/* fall through */
++		tps->typec_cap.type = TYPEC_PORT_DRP;
++		tps->typec_cap.data = TYPEC_PORT_DRD;
++		break;
+ 	case TPS_PORTINFO_DRP_UFP:
++		tps->typec_cap.type = TYPEC_PORT_DRP;
++		tps->typec_cap.data = TYPEC_PORT_UFP;
++		break;
+ 	case TPS_PORTINFO_DRP_DFP:
+-		tps->typec_cap.pr_set = tps6598x_pr_set;
+ 		tps->typec_cap.type = TYPEC_PORT_DRP;
++		tps->typec_cap.data = TYPEC_PORT_DFP;
+ 		break;
+ 	case TPS_PORTINFO_SOURCE:
+-		tps->typec_cap.type = TYPEC_PORT_DFP;
++		tps->typec_cap.type = TYPEC_PORT_SRC;
++		tps->typec_cap.data = TYPEC_PORT_DFP;
+ 		break;
+ 	default:
+ 		return -ENODEV;
+ 	}
+ 
+-	tps->typec_cap.revision = USB_TYPEC_REV_1_2;
+-	tps->typec_cap.pd_revision = 0x200;
+-	tps->typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE;
+-
+ 	tps->port = typec_register_port(&client->dev, &tps->typec_cap);
+ 	if (IS_ERR(tps->port))
+ 		return PTR_ERR(tps->port);
+diff --git a/drivers/usb/typec/typec_wcove.c b/drivers/usb/typec/typec_wcove.c
+index 2e990e0d917d..19cca7f1b2c5 100644
+--- a/drivers/usb/typec/typec_wcove.c
++++ b/drivers/usb/typec/typec_wcove.c
+@@ -572,6 +572,7 @@ static struct tcpc_config wcove_typec_config = {
+ 	.operating_snk_mw = 15000,
+ 
+ 	.type = TYPEC_PORT_DRP,
++	.data = TYPEC_PORT_DRD,
+ 	.default_role = TYPEC_SINK,
+ };
+ 
+diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
+index 69d544cfcd45..bf0977fbd100 100644
+--- a/drivers/usb/typec/ucsi/ucsi.c
++++ b/drivers/usb/typec/ucsi/ucsi.c
+@@ -592,11 +592,18 @@ static int ucsi_register_port(struct ucsi *ucsi, int index)
+ 		return ret;
+ 
+ 	if (con->cap.op_mode & UCSI_CONCAP_OPMODE_DRP)
+-		cap->type = TYPEC_PORT_DRP;
++		cap->data = TYPEC_PORT_DRD;
+ 	else if (con->cap.op_mode & UCSI_CONCAP_OPMODE_DFP)
+-		cap->type = TYPEC_PORT_DFP;
++		cap->data = TYPEC_PORT_DFP;
+ 	else if (con->cap.op_mode & UCSI_CONCAP_OPMODE_UFP)
+-		cap->type = TYPEC_PORT_UFP;
++		cap->data = TYPEC_PORT_UFP;
++
++	if (con->cap.provider && con->cap.consumer)
++		cap->type = TYPEC_PORT_DRP;
++	else if (con->cap.provider)
++		cap->type = TYPEC_PORT_SRC;
++	else if (con->cap.consumer)
++		cap->type = TYPEC_PORT_SNK;
+ 
+ 	cap->revision = ucsi->cap.typec_version;
+ 	cap->pd_revision = ucsi->cap.pd_version;
+diff --git a/include/linux/usb/tcpm.h b/include/linux/usb/tcpm.h
+index fe3508e6e1df..f0d839daeaea 100644
+--- a/include/linux/usb/tcpm.h
++++ b/include/linux/usb/tcpm.h
+@@ -91,6 +91,7 @@ struct tcpc_config {
+ 	unsigned int operating_snk_mw;
+ 
+ 	enum typec_port_type type;
++	enum typec_port_data data;
+ 	enum typec_role default_role;
+ 	bool try_role_hw;	/* try.{src,snk} implemented in hardware */
+ 
+diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h
+index 2408e5c2ed91..672b39bb0adc 100644
+--- a/include/linux/usb/typec.h
++++ b/include/linux/usb/typec.h
+@@ -22,9 +22,15 @@ struct typec_port;
+ struct fwnode_handle;
+ 
+ enum typec_port_type {
++	TYPEC_PORT_SRC,
++	TYPEC_PORT_SNK,
++	TYPEC_PORT_DRP,
++};
++
++enum typec_port_data {
+ 	TYPEC_PORT_DFP,
+ 	TYPEC_PORT_UFP,
+-	TYPEC_PORT_DRP,
++	TYPEC_PORT_DRD,
+ };
+ 
+ enum typec_plug_type {
+@@ -186,10 +192,11 @@ struct typec_partner_desc {
+ 
+ /*
+  * struct typec_capability - USB Type-C Port Capabilities
+- * @role: DFP (Host-only), UFP (Device-only) or DRP (Dual Role)
++ * @type: Supported power role of the port
++ * @data: Supported data role of the port
+  * @revision: USB Type-C Specification release. Binary coded decimal
+  * @pd_revision: USB Power Delivery Specification revision if supported
+- * @prefer_role: Initial role preference
++ * @prefer_role: Initial role preference (DRP ports).
+  * @accessory: Supported Accessory Modes
+  * @sw: Cable plug orientation switch
+  * @mux: Multiplexer switch for Alternate/Accessory Modes
+@@ -205,6 +212,7 @@ struct typec_partner_desc {
+  */
+ struct typec_capability {
+ 	enum typec_port_type	type;
++	enum typec_port_data	data;
+ 	u16			revision; /* 0120H = "1.2" */
+ 	u16			pd_revision; /* 0300H = "3.0" */
+ 	int			prefer_role;
+-- 
+2.16.1
diff --git a/a/content_digest b/N1/content_digest
index d867209..3f3a3bf 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,5 +1,12 @@
+ "ref\01519645759-12701-1-git-send-email-jun.li@nxp.com\0"
+ "ref\0CGME20180226120532epcas5p3c4b0258ec0677939f4241b24da5f48bc@epcas5p3.samsung.com\0"
+ "ref\01519645759-12701-11-git-send-email-jun.li@nxp.com\0"
+ "ref\020522804-65ab-5d48-716a-c199e4c095fc@samsung.com\0"
+ "ref\0VI1PR0402MB39175D757B94FB52CB5A09F889DA0@VI1PR0402MB3917.eurprd04.prod.outlook.com\0"
+ "ref\0133b5194-26ff-071a-d3d1-2bfca1375cae@samsung.com\0"
+ "ref\0VI1PR0402MB3917B47072CEC815AB6AE06A89D90@VI1PR0402MB3917.eurprd04.prod.outlook.com\0"
  "From\0Heikki Krogerus <heikki.krogerus@linux.intel.com>\0"
- "Subject\0[v2,10/12] dt-bindings: connector: add properties for typec power delivery\0"
+ "Subject\0Re: [PATCH v2 10/12] dt-bindings: connector: add properties for typec power delivery\0"
  "Date\0Tue, 6 Mar 2018 14:02:02 +0200\0"
  "To\0Jun Li <jun.li@nxp.com>\0"
  "Cc\0Andrzej Hajda <a.hajda@samsung.com>"
@@ -15,7 +22,7 @@
   linux-usb@vger.kernel.org <linux-usb@vger.kernel.org>
   devicetree@vger.kernel.org <devicetree@vger.kernel.org>
  " dl-linux-imx <linux-imx@nxp.com>\0"
- "\00:1\0"
+ "\01:1\0"
  "b\0"
  "Hi guys,\n"
  "\n"
@@ -113,6 +120,38 @@
  "\n"
  "Br,\n"
  "\n"
+ "-- \n"
+ heikki
+ "\01:2\0"
+ "fn\00001-usb-typec-Separate-the-definitions-for-data-and-powe.patch\0"
+ "b\0"
+ ">From 4f7652ba8a3d4e8f7bd30cf7ca8beba6af5ad873 Mon Sep 17 00:00:00 2001\n"
+ "From: Heikki Krogerus <heikki.krogerus@linux.intel.com>\n"
+ "Date: Tue, 2 Jan 2018 17:07:58 +0300\n"
+ "Subject: [PATCH] usb: typec: Separate the definitions for data and power roles\n"
+ "\n"
+ "USB Type-C specification v1.2 separated the power and data\n"
+ "roles more clearly. Dual-Role-Data term was introduced, and\n"
+ "the meaning of DRP was changed from \"Dual-Role-Port\" to\n"
+ "\"Dual-Role-Power\".\n"
+ "\n"
+ "In order to allow the port drivers to describe the\n"
+ "capabilities of the ports more clearly according to the\n"
+ "newest specifications, introducing separate definitions for\n"
+ "the data roles.\n"
+ "\n"
+ "Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>\n"
+ "---\n"
+ " drivers/usb/typec/class.c           | 56 ++++++++++++++++++++++---------------\n"
+ " drivers/usb/typec/fusb302/fusb302.c |  1 +\n"
+ " drivers/usb/typec/tcpm.c            |  9 +++---\n"
+ " drivers/usb/typec/tps6598x.c        | 26 +++++++++++------\n"
+ " drivers/usb/typec/typec_wcove.c     |  1 +\n"
+ " drivers/usb/typec/ucsi/ucsi.c       | 13 +++++++--\n"
+ " include/linux/usb/tcpm.h            |  1 +\n"
+ " include/linux/usb/typec.h           | 14 ++++++++--\n"
+ " 8 files changed, 80 insertions(+), 41 deletions(-)\n"
+ "\n"
  "diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c\n"
  "index 2620a694704f..53df10df2f9d 100644\n"
  "--- a/drivers/usb/typec/class.c\n"
@@ -426,6 +465,8 @@
  "+\tenum typec_port_data\tdata;\n"
  " \tu16\t\t\trevision; /* 0120H = \"1.2\" */\n"
  " \tu16\t\t\tpd_revision; /* 0300H = \"3.0\" */\n"
- " \tint\t\t\tprefer_role;"
+ " \tint\t\t\tprefer_role;\n"
+ "-- \n"
+ 2.16.1
 
-6b9367fd249bb614532b52881e740bab5ef4da48253b6654ce47bcf844661d91
+8e75d5e17cf8fff2004079e206a73a13e33b0e0f96bfa8cfdde7a3ce35155308

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.