* [PATCH v8 01/14] dt-bindings: connector: add properties for typec
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-26 23:45 ` [PATCH v8 02/14] dt-bindings: usb: add documentation for typec port controller(TCPCI) Li Jun
` (13 subsequent siblings)
14 siblings, 0 replies; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
Add bindings supported by current typec driver, so user can pass
all those properties via dt.
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
.../bindings/connector/usb-connector.txt | 44 +++++++++++++++
include/dt-bindings/usb/pd.h | 62 ++++++++++++++++++++++
2 files changed, 106 insertions(+)
diff --git a/Documentation/devicetree/bindings/connector/usb-connector.txt b/Documentation/devicetree/bindings/connector/usb-connector.txt
index e1463f1..8855bfc 100644
--- a/Documentation/devicetree/bindings/connector/usb-connector.txt
+++ b/Documentation/devicetree/bindings/connector/usb-connector.txt
@@ -15,6 +15,33 @@ Optional properties:
- type: size of the connector, should be specified in case of USB-A, USB-B
non-fullsize connectors: "mini", "micro".
+Optional properties for usb-c-connector:
+- power-role: should be one of "source", "sink" or "dual"(DRP) if typec
+ connector has power support.
+- try-power-role: preferred power role if "dual"(DRP) can support Try.SNK
+ or Try.SRC, should be "sink" for Try.SNK or "source" for Try.SRC.
+- data-role: should be one of "host", "device", "dual"(DRD) if typec
+ connector supports USB data.
+
+Required properties for usb-c-connector with power delivery support:
+- source-pdos: An array of u32 with each entry providing supported power
+ source data object(PDO), the detailed bit definitions of PDO can be found
+ in "Universal Serial Bus Power Delivery Specification" chapter 6.4.1.2
+ Source_Capabilities Message, the order of each entry(PDO) should follow
+ the PD spec chapter 6.4.1. Required for power source and power dual role.
+ User can specify the source PDO array via PDO_FIXED/BATT/VAR() defined in
+ dt-bindings/usb/pd.h.
+- sink-pdos: An array of u32 with each entry providing supported power
+ sink data object(PDO), the detailed bit definitions of PDO can be found
+ in "Universal Serial Bus Power Delivery Specification" chapter 6.4.1.3
+ Sink Capabilities Message, the order of each entry(PDO) should follow
+ the PD spec chapter 6.4.1. Required for power sink and power dual role.
+ User can specify the sink PDO array via PDO_FIXED/BATT/VAR() defined in
+ dt-bindings/usb/pd.h.
+- op-sink-microwatt: Sink required operating power in microwatt, if source
+ can't offer the power, Capability Mismatch is set. Required for power
+ sink and power dual role.
+
Required nodes:
- any data bus to the connector should be modeled using the OF graph bindings
specified in bindings/graph.txt, unless the bus is between parent node and
@@ -73,3 +100,20 @@ ccic: s2mm005@33 {
};
};
};
+
+3. USB-C connector attached to a typec port controller(ptn5110), which has
+power delivery support and enables drp.
+
+typec: ptn5110@50 {
+ ...
+ usb_con: connector {
+ compatible = "usb-c-connector";
+ label = "USB-C";
+ power-role = "dual";
+ try-power-role = "sink";
+ source-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)>;
+ sink-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)
+ PDO_VAR(5000, 12000, 2000)>;
+ op-sink-microwatt = <10000000>;
+ };
+};
diff --git a/include/dt-bindings/usb/pd.h b/include/dt-bindings/usb/pd.h
new file mode 100644
index 0000000..7b7a92f
--- /dev/null
+++ b/include/dt-bindings/usb/pd.h
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __DT_POWER_DELIVERY_H
+#define __DT_POWER_DELIVERY_H
+
+/* Power delivery Power Data Object definitions */
+#define PDO_TYPE_FIXED 0
+#define PDO_TYPE_BATT 1
+#define PDO_TYPE_VAR 2
+#define PDO_TYPE_APDO 3
+
+#define PDO_TYPE_SHIFT 30
+#define PDO_TYPE_MASK 0x3
+
+#define PDO_TYPE(t) ((t) << PDO_TYPE_SHIFT)
+
+#define PDO_VOLT_MASK 0x3ff
+#define PDO_CURR_MASK 0x3ff
+#define PDO_PWR_MASK 0x3ff
+
+#define PDO_FIXED_DUAL_ROLE (1 << 29) /* Power role swap supported */
+#define PDO_FIXED_SUSPEND (1 << 28) /* USB Suspend supported (Source) */
+#define PDO_FIXED_HIGHER_CAP (1 << 28) /* Requires more than vSafe5V (Sink) */
+#define PDO_FIXED_EXTPOWER (1 << 27) /* Externally powered */
+#define PDO_FIXED_USB_COMM (1 << 26) /* USB communications capable */
+#define PDO_FIXED_DATA_SWAP (1 << 25) /* Data role swap supported */
+#define PDO_FIXED_VOLT_SHIFT 10 /* 50mV units */
+#define PDO_FIXED_CURR_SHIFT 0 /* 10mA units */
+
+#define PDO_FIXED_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_FIXED_VOLT_SHIFT)
+#define PDO_FIXED_CURR(ma) ((((ma) / 10) & PDO_CURR_MASK) << PDO_FIXED_CURR_SHIFT)
+
+#define PDO_FIXED(mv, ma, flags) \
+ (PDO_TYPE(PDO_TYPE_FIXED) | (flags) | \
+ PDO_FIXED_VOLT(mv) | PDO_FIXED_CURR(ma))
+
+#define VSAFE5V 5000 /* mv units */
+
+#define PDO_BATT_MAX_VOLT_SHIFT 20 /* 50mV units */
+#define PDO_BATT_MIN_VOLT_SHIFT 10 /* 50mV units */
+#define PDO_BATT_MAX_PWR_SHIFT 0 /* 250mW units */
+
+#define PDO_BATT_MIN_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_BATT_MIN_VOLT_SHIFT)
+#define PDO_BATT_MAX_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_BATT_MAX_VOLT_SHIFT)
+#define PDO_BATT_MAX_POWER(mw) ((((mw) / 250) & PDO_PWR_MASK) << PDO_BATT_MAX_PWR_SHIFT)
+
+#define PDO_BATT(min_mv, max_mv, max_mw) \
+ (PDO_TYPE(PDO_TYPE_BATT) | PDO_BATT_MIN_VOLT(min_mv) | \
+ PDO_BATT_MAX_VOLT(max_mv) | PDO_BATT_MAX_POWER(max_mw))
+
+#define PDO_VAR_MAX_VOLT_SHIFT 20 /* 50mV units */
+#define PDO_VAR_MIN_VOLT_SHIFT 10 /* 50mV units */
+#define PDO_VAR_MAX_CURR_SHIFT 0 /* 10mA units */
+
+#define PDO_VAR_MIN_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_VAR_MIN_VOLT_SHIFT)
+#define PDO_VAR_MAX_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_VAR_MAX_VOLT_SHIFT)
+#define PDO_VAR_MAX_CURR(ma) ((((ma) / 10) & PDO_CURR_MASK) << PDO_VAR_MAX_CURR_SHIFT)
+
+#define PDO_VAR(min_mv, max_mv, max_ma) \
+ (PDO_TYPE(PDO_TYPE_VAR) | PDO_VAR_MIN_VOLT(min_mv) | \
+ PDO_VAR_MAX_VOLT(max_mv) | PDO_VAR_MAX_CURR(max_ma))
+
+ #endif /* __DT_POWER_DELIVERY_H */
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* [PATCH v8 02/14] dt-bindings: usb: add documentation for typec port controller(TCPCI)
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
2018-06-26 23:45 ` [PATCH v8 01/14] dt-bindings: connector: add properties for typec Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-26 23:45 ` [PATCH v8 03/14] staging: typec: tcpci: add compatible string for nxp ptn5110 Li Jun
` (12 subsequent siblings)
14 siblings, 0 replies; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
TCPCI stands for typec port controller interface, its implementation
has full typec port control with power delivery support, it's a
standard i2c slave with GPIO input as irq interface, detail see spec
"Universal Serial Bus Type-C Port Controller Interface Specification
Revision 1.0, Version 1.1"
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
.../devicetree/bindings/usb/typec-tcpci.txt | 49 ++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/Documentation/devicetree/bindings/usb/typec-tcpci.txt b/Documentation/devicetree/bindings/usb/typec-tcpci.txt
new file mode 100644
index 0000000..0dd1469
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/typec-tcpci.txt
@@ -0,0 +1,49 @@
+TCPCI(Typec port cotroller interface) binding
+---------------------------------------------
+
+Required properties:
+- compatible: should be set one of following:
+ - "nxp,ptn5110" for NXP USB PD TCPC PHY IC ptn5110.
+
+- reg: the i2c slave address of typec port controller device.
+- interrupt-parent: the phandle to the interrupt controller which provides
+ the interrupt.
+- interrupts: interrupt specification for tcpci alert.
+
+Required sub-node:
+- connector: The "usb-c-connector" attached to the tcpci chip, the bindings
+ of connector node are specified in
+ Documentation/devicetree/bindings/connector/usb-connector.txt
+
+Example:
+
+ptn5110@50 {
+ compatible = "nxp,ptn5110";
+ reg = <0x50>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
+
+ usb_con: connector {
+ compatible = "usb-c-connector";
+ label = "USB-C";
+ data-role = "dual";
+ power-role = "dual";
+ try-power-role = "sink";
+ source-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)>;
+ sink-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)
+ PDO_VAR(5000, 12000, 2000)>;
+ op-sink-microwatt = <10000000>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@1 {
+ reg = <1>;
+ usb_con_ss: endpoint {
+ remote-endpoint = <&usb3_data_ss>;
+ };
+ };
+ };
+ };
+};
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* [PATCH v8 03/14] staging: typec: tcpci: add compatible string for nxp ptn5110
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
2018-06-26 23:45 ` [PATCH v8 01/14] dt-bindings: connector: add properties for typec Li Jun
2018-06-26 23:45 ` [PATCH v8 02/14] dt-bindings: usb: add documentation for typec port controller(TCPCI) Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-27 0:28 ` Guenter Roeck
2018-06-26 23:45 ` [PATCH v8 04/14] usb: typec: add fwnode to tcpc Li Jun
` (11 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
Add nxp ptn5110 typec controller compatible string: "nxp,ptn5110",
which is a standard tcpci chip with power delivery support. Meanwhile
remove "usb,tcpci" because it doesn't follow the binding format rule
and has not been used yet.
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
drivers/staging/typec/tcpci.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
index 076d97e..dd29288 100644
--- a/drivers/staging/typec/tcpci.c
+++ b/drivers/staging/typec/tcpci.c
@@ -575,7 +575,7 @@ MODULE_DEVICE_TABLE(i2c, tcpci_id);
#ifdef CONFIG_OF
static const struct of_device_id tcpci_of_match[] = {
- { .compatible = "usb,tcpci", },
+ { .compatible = "nxp,ptn5110", },
{},
};
MODULE_DEVICE_TABLE(of, tcpci_of_match);
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [PATCH v8 03/14] staging: typec: tcpci: add compatible string for nxp ptn5110
2018-06-26 23:45 ` [PATCH v8 03/14] staging: typec: tcpci: add compatible string for nxp ptn5110 Li Jun
@ 2018-06-27 0:28 ` Guenter Roeck
0 siblings, 0 replies; 25+ messages in thread
From: Guenter Roeck @ 2018-06-27 0:28 UTC (permalink / raw)
To: Li Jun, robh+dt, gregkh, heikki.krogerus
Cc: a.hajda, cw00.choi, shufan_lee, peter.chen, devicetree, linux-usb,
linux-imx
On 06/26/2018 04:45 PM, Li Jun wrote:
> Add nxp ptn5110 typec controller compatible string: "nxp,ptn5110",
> which is a standard tcpci chip with power delivery support. Meanwhile
> remove "usb,tcpci" because it doesn't follow the binding format rule
> and has not been used yet.
>
> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Signed-off-by: Li Jun <jun.li@nxp.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> ---
> drivers/staging/typec/tcpci.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
> index 076d97e..dd29288 100644
> --- a/drivers/staging/typec/tcpci.c
> +++ b/drivers/staging/typec/tcpci.c
> @@ -575,7 +575,7 @@ MODULE_DEVICE_TABLE(i2c, tcpci_id);
>
> #ifdef CONFIG_OF
> static const struct of_device_id tcpci_of_match[] = {
> - { .compatible = "usb,tcpci", },
> + { .compatible = "nxp,ptn5110", },
> {},
> };
> MODULE_DEVICE_TABLE(of, tcpci_of_match);
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v8 04/14] usb: typec: add fwnode to tcpc
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
` (2 preceding siblings ...)
2018-06-26 23:45 ` [PATCH v8 03/14] staging: typec: tcpci: add compatible string for nxp ptn5110 Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-27 0:30 ` Guenter Roeck
2018-06-26 23:45 ` [PATCH v8 05/14] usb: typec: add API to get typec basic port power and data config Li Jun
` (10 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
Add fwnode handle to get the fwnode so we can get typec configs
it contains.
Suggested-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
drivers/staging/typec/tcpci.c | 7 +++++++
drivers/usb/typec/tcpm.c | 1 +
include/linux/usb/tcpm.h | 2 ++
3 files changed, 10 insertions(+)
diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
index dd29288..e59547a 100644
--- a/drivers/staging/typec/tcpci.c
+++ b/drivers/staging/typec/tcpci.c
@@ -10,6 +10,7 @@
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
+#include <linux/property.h>
#include <linux/regmap.h>
#include <linux/usb/pd.h>
#include <linux/usb/tcpm.h>
@@ -474,6 +475,12 @@ static int tcpci_parse_config(struct tcpci *tcpci)
/* TODO: Populate struct tcpc_config from ACPI/device-tree */
tcpci->tcpc.config = &tcpci_tcpc_config;
+ tcpci->tcpc.fwnode = device_get_named_child_node(tcpci->dev,
+ "connector");
+ if (!tcpci->tcpc.fwnode) {
+ dev_err(tcpci->dev, "Can't find connector node.\n");
+ return -EINVAL;
+ }
return 0;
}
diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
index 8a201dd..d22b37b 100644
--- a/drivers/usb/typec/tcpm.c
+++ b/drivers/usb/typec/tcpm.c
@@ -4576,6 +4576,7 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
else
port->try_role = TYPEC_NO_PREFERRED_ROLE;
+ port->typec_caps.fwnode = tcpc->fwnode;
port->typec_caps.prefer_role = tcpc->config->default_role;
port->typec_caps.type = tcpc->config->type;
port->typec_caps.data = tcpc->config->data;
diff --git a/include/linux/usb/tcpm.h b/include/linux/usb/tcpm.h
index b231b93..193920a 100644
--- a/include/linux/usb/tcpm.h
+++ b/include/linux/usb/tcpm.h
@@ -110,6 +110,7 @@ enum tcpc_mux_mode {
/**
* struct tcpc_dev - Port configuration and callback functions
* @config: Pointer to port configuration
+ * @fwnode: Pointer to port fwnode
* @get_vbus: Called to read current VBUS state
* @get_current_limit:
* Optional; called by the tcpm core when configured as a snk
@@ -138,6 +139,7 @@ enum tcpc_mux_mode {
*/
struct tcpc_dev {
const struct tcpc_config *config;
+ struct fwnode_handle *fwnode;
int (*init)(struct tcpc_dev *dev);
int (*get_vbus)(struct tcpc_dev *dev);
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [PATCH v8 04/14] usb: typec: add fwnode to tcpc
2018-06-26 23:45 ` [PATCH v8 04/14] usb: typec: add fwnode to tcpc Li Jun
@ 2018-06-27 0:30 ` Guenter Roeck
0 siblings, 0 replies; 25+ messages in thread
From: Guenter Roeck @ 2018-06-27 0:30 UTC (permalink / raw)
To: Li Jun, robh+dt, gregkh, heikki.krogerus
Cc: a.hajda, cw00.choi, shufan_lee, peter.chen, devicetree, linux-usb,
linux-imx
On 06/26/2018 04:45 PM, Li Jun wrote:
> Add fwnode handle to get the fwnode so we can get typec configs
> it contains.
>
> Suggested-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Signed-off-by: Li Jun <jun.li@nxp.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> ---
> drivers/staging/typec/tcpci.c | 7 +++++++
> drivers/usb/typec/tcpm.c | 1 +
> include/linux/usb/tcpm.h | 2 ++
> 3 files changed, 10 insertions(+)
>
> diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
> index dd29288..e59547a 100644
> --- a/drivers/staging/typec/tcpci.c
> +++ b/drivers/staging/typec/tcpci.c
> @@ -10,6 +10,7 @@
> #include <linux/module.h>
> #include <linux/i2c.h>
> #include <linux/interrupt.h>
> +#include <linux/property.h>
> #include <linux/regmap.h>
> #include <linux/usb/pd.h>
> #include <linux/usb/tcpm.h>
> @@ -474,6 +475,12 @@ static int tcpci_parse_config(struct tcpci *tcpci)
>
> /* TODO: Populate struct tcpc_config from ACPI/device-tree */
> tcpci->tcpc.config = &tcpci_tcpc_config;
> + tcpci->tcpc.fwnode = device_get_named_child_node(tcpci->dev,
> + "connector");
> + if (!tcpci->tcpc.fwnode) {
> + dev_err(tcpci->dev, "Can't find connector node.\n");
> + return -EINVAL;
> + }
>
> return 0;
> }
> diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
> index 8a201dd..d22b37b 100644
> --- a/drivers/usb/typec/tcpm.c
> +++ b/drivers/usb/typec/tcpm.c
> @@ -4576,6 +4576,7 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
> else
> port->try_role = TYPEC_NO_PREFERRED_ROLE;
>
> + port->typec_caps.fwnode = tcpc->fwnode;
> port->typec_caps.prefer_role = tcpc->config->default_role;
> port->typec_caps.type = tcpc->config->type;
> port->typec_caps.data = tcpc->config->data;
> diff --git a/include/linux/usb/tcpm.h b/include/linux/usb/tcpm.h
> index b231b93..193920a 100644
> --- a/include/linux/usb/tcpm.h
> +++ b/include/linux/usb/tcpm.h
> @@ -110,6 +110,7 @@ enum tcpc_mux_mode {
> /**
> * struct tcpc_dev - Port configuration and callback functions
> * @config: Pointer to port configuration
> + * @fwnode: Pointer to port fwnode
> * @get_vbus: Called to read current VBUS state
> * @get_current_limit:
> * Optional; called by the tcpm core when configured as a snk
> @@ -138,6 +139,7 @@ enum tcpc_mux_mode {
> */
> struct tcpc_dev {
> const struct tcpc_config *config;
> + struct fwnode_handle *fwnode;
>
> int (*init)(struct tcpc_dev *dev);
> int (*get_vbus)(struct tcpc_dev *dev);
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v8 05/14] usb: typec: add API to get typec basic port power and data config
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
` (3 preceding siblings ...)
2018-06-26 23:45 ` [PATCH v8 04/14] usb: typec: add fwnode to tcpc Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-26 23:45 ` [PATCH v8 06/14] usb: typec: tcpm: support get typec and pd config from device properties Li Jun
` (9 subsequent siblings)
14 siblings, 0 replies; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
This patch adds 3 APIs to get the typec port power and data type,
and preferred power role by its name string.
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
drivers/usb/typec/class.c | 58 +++++++++++++++++++++++++++++++++++++++++++----
include/linux/usb/typec.h | 3 +++
2 files changed, 57 insertions(+), 4 deletions(-)
diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
index 53df10d..6331059 100644
--- a/drivers/usb/typec/class.c
+++ b/drivers/usb/typec/class.c
@@ -796,12 +796,18 @@ static const char * const typec_data_roles[] = {
[TYPEC_HOST] = "host",
};
-static const char * const typec_port_types[] = {
+static const char * const typec_port_power_roles[] = {
[TYPEC_PORT_SRC] = "source",
[TYPEC_PORT_SNK] = "sink",
[TYPEC_PORT_DRP] = "dual",
};
+static const char * const typec_port_data_roles[] = {
+ [TYPEC_PORT_DFP] = "host",
+ [TYPEC_PORT_UFP] = "device",
+ [TYPEC_PORT_DRD] = "dual",
+};
+
static const char * const typec_port_types_drp[] = {
[TYPEC_PORT_SRC] = "dual [source] sink",
[TYPEC_PORT_SNK] = "dual source [sink]",
@@ -932,7 +938,7 @@ static ssize_t power_role_store(struct device *dev,
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]);
+ typec_port_power_roles[port->port_type]);
ret = -EOPNOTSUPP;
goto unlock_and_ret;
}
@@ -973,7 +979,7 @@ port_type_store(struct device *dev, struct device_attribute *attr,
return -EOPNOTSUPP;
}
- ret = sysfs_match_string(typec_port_types, buf);
+ ret = sysfs_match_string(typec_port_power_roles, buf);
if (ret < 0)
return ret;
@@ -1007,7 +1013,7 @@ port_type_show(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%s\n",
typec_port_types_drp[port->port_type]);
- return sprintf(buf, "[%s]\n", typec_port_types[port->cap->type]);
+ return sprintf(buf, "[%s]\n", typec_port_power_roles[port->cap->type]);
}
static DEVICE_ATTR_RW(port_type);
@@ -1252,6 +1258,50 @@ void typec_set_pwr_opmode(struct typec_port *port,
}
EXPORT_SYMBOL_GPL(typec_set_pwr_opmode);
+/**
+ * typec_find_port_power_role - Get the typec port power capability
+ * @name: port power capability string
+ *
+ * This routine is used to find the typec_port_type by its string name.
+ *
+ * Returns typec_port_type if success, otherwise negative error code.
+ */
+int typec_find_port_power_role(const char *name)
+{
+ return match_string(typec_port_power_roles,
+ ARRAY_SIZE(typec_port_power_roles), name);
+}
+EXPORT_SYMBOL_GPL(typec_find_port_power_role);
+
+/**
+ * typec_find_power_role - Find the typec one specific power role
+ * @name: power role string
+ *
+ * This routine is used to find the typec_role by its string name.
+ *
+ * Returns typec_role if success, otherwise negative error code.
+ */
+int typec_find_power_role(const char *name)
+{
+ return match_string(typec_roles, ARRAY_SIZE(typec_roles), name);
+}
+EXPORT_SYMBOL_GPL(typec_find_power_role);
+
+/**
+ * typec_find_port_data_role - Get the typec port data capability
+ * @name: port data capability string
+ *
+ * This routine is used to find the typec_port_data by its string name.
+ *
+ * Returns typec_port_data if success, otherwise negative error code.
+ */
+int typec_find_port_data_role(const char *name)
+{
+ return match_string(typec_port_data_roles,
+ ARRAY_SIZE(typec_port_data_roles), name);
+}
+EXPORT_SYMBOL_GPL(typec_find_port_data_role);
+
/* ------------------------------------------ */
/* API for Multiplexer/DeMultiplexer Switches */
diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h
index 672b39b..15f8d9a 100644
--- a/include/linux/usb/typec.h
+++ b/include/linux/usb/typec.h
@@ -267,4 +267,7 @@ int typec_set_orientation(struct typec_port *port,
enum typec_orientation orientation);
int typec_set_mode(struct typec_port *port, int mode);
+int typec_find_port_power_role(const char *name);
+int typec_find_power_role(const char *name);
+int typec_find_port_data_role(const char *name);
#endif /* __LINUX_USB_TYPEC_H */
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* [PATCH v8 06/14] usb: typec: tcpm: support get typec and pd config from device properties
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
` (4 preceding siblings ...)
2018-06-26 23:45 ` [PATCH v8 05/14] usb: typec: add API to get typec basic port power and data config Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-27 8:13 ` Adam Thomson
2018-06-26 23:45 ` [PATCH v8 07/14] staging: typec: tcpci: remove unused tcpci_tcpc_config Li Jun
` (8 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
This patch adds support of get typec and power delivery config from
firmware description.
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
drivers/usb/typec/tcpm.c | 131 +++++++++++++++++++++++++++++++++++++++--------
1 file changed, 109 insertions(+), 22 deletions(-)
diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
index d22b37b..9dcab81 100644
--- a/drivers/usb/typec/tcpm.c
+++ b/drivers/usb/typec/tcpm.c
@@ -4236,6 +4236,81 @@ static int tcpm_copy_vdos(u32 *dest_vdo, const u32 *src_vdo,
return nr_vdo;
}
+static int tcpm_fw_get_caps(struct tcpm_port *port,
+ struct fwnode_handle *fwnode)
+{
+ const char *cap_str;
+ int ret;
+ u32 mw;
+
+ if (!fwnode)
+ return -EINVAL;
+
+ /* USB data support is optional */
+ ret = fwnode_property_read_string(fwnode, "data-role", &cap_str);
+ if (ret == 0) {
+ port->typec_caps.data = typec_find_port_data_role(cap_str);
+ if (port->typec_caps.data < 0)
+ return -EINVAL;
+ }
+
+ ret = fwnode_property_read_string(fwnode, "power-role", &cap_str);
+ if (ret < 0)
+ return ret;
+
+ port->typec_caps.type = typec_find_port_power_role(cap_str);
+ if (port->typec_caps.type < 0)
+ return -EINVAL;
+ port->port_type = port->typec_caps.type;
+
+ if (port->port_type == TYPEC_PORT_SNK)
+ goto sink;
+
+ /* Get source pdos */
+ ret = fwnode_property_read_u32_array(fwnode, "source-pdos",
+ NULL, 0);
+ if (ret <= 0)
+ return -EINVAL;
+
+ port->nr_src_pdo = min(ret, PDO_MAX_OBJECTS);
+ ret = fwnode_property_read_u32_array(fwnode, "source-pdos",
+ port->src_pdo, port->nr_src_pdo);
+ if ((ret < 0) || tcpm_validate_caps(port, port->src_pdo,
+ port->nr_src_pdo))
+ return -EINVAL;
+
+ if (port->port_type == TYPEC_PORT_SRC)
+ return 0;
+
+ /* Get the preferred power role for DRP */
+ ret = fwnode_property_read_string(fwnode, "try-power-role", &cap_str);
+ if (ret < 0)
+ return ret;
+
+ port->typec_caps.prefer_role = typec_find_power_role(cap_str);
+ if (port->typec_caps.prefer_role < 0)
+ return -EINVAL;
+sink:
+ /* Get sink pdos */
+ ret = fwnode_property_read_u32_array(fwnode, "sink-pdos",
+ NULL, 0);
+ if (ret <= 0)
+ return -EINVAL;
+
+ port->nr_snk_pdo = min(ret, PDO_MAX_OBJECTS);
+ ret = fwnode_property_read_u32_array(fwnode, "sink-pdos",
+ port->snk_pdo, port->nr_snk_pdo);
+ if ((ret < 0) || tcpm_validate_caps(port, port->snk_pdo,
+ port->nr_snk_pdo))
+ return -EINVAL;
+
+ if (fwnode_property_read_u32(fwnode, "op-sink-microwatt", &mw) < 0)
+ return -EINVAL;
+ port->operating_snk_mw = mw / 1000;
+
+ return 0;
+}
+
int tcpm_update_source_capabilities(struct tcpm_port *port, const u32 *pdo,
unsigned int nr_pdo)
{
@@ -4521,12 +4596,36 @@ static int devm_tcpm_psy_register(struct tcpm_port *port)
return PTR_ERR_OR_ZERO(port->psy);
}
+static int tcpm_copy_caps(struct tcpm_port *port,
+ const struct tcpc_config *tcfg)
+{
+ if (tcpm_validate_caps(port, tcfg->src_pdo, tcfg->nr_src_pdo) ||
+ tcpm_validate_caps(port, tcfg->snk_pdo, tcfg->nr_snk_pdo))
+ return -EINVAL;
+
+ port->nr_src_pdo = tcpm_copy_pdos(port->src_pdo, tcfg->src_pdo,
+ tcfg->nr_src_pdo);
+ port->nr_snk_pdo = tcpm_copy_pdos(port->snk_pdo, tcfg->snk_pdo,
+ tcfg->nr_snk_pdo);
+
+ port->nr_snk_vdo = tcpm_copy_vdos(port->snk_vdo, tcfg->snk_vdo,
+ tcfg->nr_snk_vdo);
+
+ port->operating_snk_mw = tcfg->operating_snk_mw;
+
+ port->typec_caps.prefer_role = tcfg->default_role;
+ port->typec_caps.type = tcfg->type;
+ port->typec_caps.data = tcfg->data;
+
+ return 0;
+}
+
struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
{
struct tcpm_port *port;
int i, err;
- if (!dev || !tcpc || !tcpc->config ||
+ if (!dev || !tcpc ||
!tcpc->get_vbus || !tcpc->set_cc || !tcpc->get_cc ||
!tcpc->set_polarity || !tcpc->set_vconn || !tcpc->set_vbus ||
!tcpc->set_pd_rx || !tcpc->set_roles || !tcpc->pd_transmit)
@@ -4556,30 +4655,18 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
init_completion(&port->pps_complete);
tcpm_debugfs_init(port);
- if (tcpm_validate_caps(port, tcpc->config->src_pdo,
- tcpc->config->nr_src_pdo) ||
- tcpm_validate_caps(port, tcpc->config->snk_pdo,
- tcpc->config->nr_snk_pdo)) {
- err = -EINVAL;
+ err = tcpm_fw_get_caps(port, tcpc->fwnode);
+ if ((err < 0) && tcpc->config)
+ err = tcpm_copy_caps(port, tcpc->config);
+ if (err < 0)
goto out_destroy_wq;
- }
- port->nr_src_pdo = tcpm_copy_pdos(port->src_pdo, tcpc->config->src_pdo,
- tcpc->config->nr_src_pdo);
- port->nr_snk_pdo = tcpm_copy_pdos(port->snk_pdo, tcpc->config->snk_pdo,
- tcpc->config->nr_snk_pdo);
- port->nr_snk_vdo = tcpm_copy_vdos(port->snk_vdo, tcpc->config->snk_vdo,
- tcpc->config->nr_snk_vdo);
-
- port->operating_snk_mw = tcpc->config->operating_snk_mw;
- if (!tcpc->config->try_role_hw)
- port->try_role = tcpc->config->default_role;
+
+ if (!tcpc->config || !tcpc->config->try_role_hw)
+ port->try_role = port->typec_caps.prefer_role;
else
port->try_role = TYPEC_NO_PREFERRED_ROLE;
port->typec_caps.fwnode = tcpc->fwnode;
- 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 = 0x0300; /* USB-PD spec release 3.0 */
port->typec_caps.dr_set = tcpm_dr_set;
@@ -4589,7 +4676,7 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
port->typec_caps.port_type_set = tcpm_port_type_set;
port->partner_desc.identity = &port->partner_ident;
- port->port_type = tcpc->config->type;
+ port->port_type = port->typec_caps.type;
port->role_sw = usb_role_switch_get(port->dev);
if (IS_ERR(port->role_sw)) {
@@ -4607,7 +4694,7 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
goto out_destroy_wq;
}
- if (tcpc->config->alt_modes) {
+ if (tcpc->config && tcpc->config->alt_modes) {
const struct typec_altmode_desc *paltmode = tcpc->config->alt_modes;
i = 0;
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* RE: [PATCH v8 06/14] usb: typec: tcpm: support get typec and pd config from device properties
2018-06-26 23:45 ` [PATCH v8 06/14] usb: typec: tcpm: support get typec and pd config from device properties Li Jun
@ 2018-06-27 8:13 ` Adam Thomson
0 siblings, 0 replies; 25+ messages in thread
From: Adam Thomson @ 2018-06-27 8:13 UTC (permalink / raw)
To: Li Jun, robh+dt@kernel.org, gregkh@linuxfoundation.org,
heikki.krogerus@linux.intel.com, linux@roeck-us.net
Cc: a.hajda@samsung.com, cw00.choi@samsung.com,
shufan_lee@richtek.com, peter.chen@nxp.com,
devicetree@vger.kernel.org, linux-usb@vger.kernel.org,
linux-imx@nxp.com
On 27 June 2018 00:45, Li Jun wrote:
> This patch adds support of get typec and power delivery config from
> firmware description.
>
> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> Signed-off-by: Li Jun <jun.li@nxp.com>
Acked-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
> ---
> drivers/usb/typec/tcpm.c | 131 +++++++++++++++++++++++++++++++++++++++-----
> ---
> 1 file changed, 109 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
> index d22b37b..9dcab81 100644
> --- a/drivers/usb/typec/tcpm.c
> +++ b/drivers/usb/typec/tcpm.c
> @@ -4236,6 +4236,81 @@ static int tcpm_copy_vdos(u32 *dest_vdo, const u32
> *src_vdo,
> return nr_vdo;
> }
>
> +static int tcpm_fw_get_caps(struct tcpm_port *port,
> + struct fwnode_handle *fwnode)
> +{
> + const char *cap_str;
> + int ret;
> + u32 mw;
> +
> + if (!fwnode)
> + return -EINVAL;
> +
> + /* USB data support is optional */
> + ret = fwnode_property_read_string(fwnode, "data-role", &cap_str);
> + if (ret == 0) {
> + port->typec_caps.data = typec_find_port_data_role(cap_str);
> + if (port->typec_caps.data < 0)
> + return -EINVAL;
> + }
> +
> + ret = fwnode_property_read_string(fwnode, "power-role", &cap_str);
> + if (ret < 0)
> + return ret;
> +
> + port->typec_caps.type = typec_find_port_power_role(cap_str);
> + if (port->typec_caps.type < 0)
> + return -EINVAL;
> + port->port_type = port->typec_caps.type;
> +
> + if (port->port_type == TYPEC_PORT_SNK)
> + goto sink;
> +
> + /* Get source pdos */
> + ret = fwnode_property_read_u32_array(fwnode, "source-pdos",
> + NULL, 0);
> + if (ret <= 0)
> + return -EINVAL;
> +
> + port->nr_src_pdo = min(ret, PDO_MAX_OBJECTS);
> + ret = fwnode_property_read_u32_array(fwnode, "source-pdos",
> + port->src_pdo, port->nr_src_pdo);
> + if ((ret < 0) || tcpm_validate_caps(port, port->src_pdo,
> + port->nr_src_pdo))
> + return -EINVAL;
> +
> + if (port->port_type == TYPEC_PORT_SRC)
> + return 0;
> +
> + /* Get the preferred power role for DRP */
> + ret = fwnode_property_read_string(fwnode, "try-power-role", &cap_str);
> + if (ret < 0)
> + return ret;
> +
> + port->typec_caps.prefer_role = typec_find_power_role(cap_str);
> + if (port->typec_caps.prefer_role < 0)
> + return -EINVAL;
> +sink:
> + /* Get sink pdos */
> + ret = fwnode_property_read_u32_array(fwnode, "sink-pdos",
> + NULL, 0);
> + if (ret <= 0)
> + return -EINVAL;
> +
> + port->nr_snk_pdo = min(ret, PDO_MAX_OBJECTS);
> + ret = fwnode_property_read_u32_array(fwnode, "sink-pdos",
> + port->snk_pdo, port->nr_snk_pdo);
> + if ((ret < 0) || tcpm_validate_caps(port, port->snk_pdo,
> + port->nr_snk_pdo))
> + return -EINVAL;
> +
> + if (fwnode_property_read_u32(fwnode, "op-sink-microwatt", &mw) < 0)
> + return -EINVAL;
> + port->operating_snk_mw = mw / 1000;
> +
> + return 0;
> +}
> +
> int tcpm_update_source_capabilities(struct tcpm_port *port, const u32 *pdo,
> unsigned int nr_pdo)
> {
> @@ -4521,12 +4596,36 @@ static int devm_tcpm_psy_register(struct tcpm_port
> *port)
> return PTR_ERR_OR_ZERO(port->psy);
> }
>
> +static int tcpm_copy_caps(struct tcpm_port *port,
> + const struct tcpc_config *tcfg)
> +{
> + if (tcpm_validate_caps(port, tcfg->src_pdo, tcfg->nr_src_pdo) ||
> + tcpm_validate_caps(port, tcfg->snk_pdo, tcfg->nr_snk_pdo))
> + return -EINVAL;
> +
> + port->nr_src_pdo = tcpm_copy_pdos(port->src_pdo, tcfg->src_pdo,
> + tcfg->nr_src_pdo);
> + port->nr_snk_pdo = tcpm_copy_pdos(port->snk_pdo, tcfg->snk_pdo,
> + tcfg->nr_snk_pdo);
> +
> + port->nr_snk_vdo = tcpm_copy_vdos(port->snk_vdo, tcfg->snk_vdo,
> + tcfg->nr_snk_vdo);
> +
> + port->operating_snk_mw = tcfg->operating_snk_mw;
> +
> + port->typec_caps.prefer_role = tcfg->default_role;
> + port->typec_caps.type = tcfg->type;
> + port->typec_caps.data = tcfg->data;
> +
> + return 0;
> +}
> +
> struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
> {
> struct tcpm_port *port;
> int i, err;
>
> - if (!dev || !tcpc || !tcpc->config ||
> + if (!dev || !tcpc ||
> !tcpc->get_vbus || !tcpc->set_cc || !tcpc->get_cc ||
> !tcpc->set_polarity || !tcpc->set_vconn || !tcpc->set_vbus ||
> !tcpc->set_pd_rx || !tcpc->set_roles || !tcpc->pd_transmit)
> @@ -4556,30 +4655,18 @@ struct tcpm_port *tcpm_register_port(struct device
> *dev, struct tcpc_dev *tcpc)
> init_completion(&port->pps_complete);
> tcpm_debugfs_init(port);
>
> - if (tcpm_validate_caps(port, tcpc->config->src_pdo,
> - tcpc->config->nr_src_pdo) ||
> - tcpm_validate_caps(port, tcpc->config->snk_pdo,
> - tcpc->config->nr_snk_pdo)) {
> - err = -EINVAL;
> + err = tcpm_fw_get_caps(port, tcpc->fwnode);
> + if ((err < 0) && tcpc->config)
> + err = tcpm_copy_caps(port, tcpc->config);
> + if (err < 0)
> goto out_destroy_wq;
> - }
> - port->nr_src_pdo = tcpm_copy_pdos(port->src_pdo, tcpc->config->src_pdo,
> - tcpc->config->nr_src_pdo);
> - port->nr_snk_pdo = tcpm_copy_pdos(port->snk_pdo, tcpc->config-
> >snk_pdo,
> - tcpc->config->nr_snk_pdo);
> - port->nr_snk_vdo = tcpm_copy_vdos(port->snk_vdo, tcpc->config-
> >snk_vdo,
> - tcpc->config->nr_snk_vdo);
> -
> - port->operating_snk_mw = tcpc->config->operating_snk_mw;
> - if (!tcpc->config->try_role_hw)
> - port->try_role = tcpc->config->default_role;
> +
> + if (!tcpc->config || !tcpc->config->try_role_hw)
> + port->try_role = port->typec_caps.prefer_role;
> else
> port->try_role = TYPEC_NO_PREFERRED_ROLE;
>
> port->typec_caps.fwnode = tcpc->fwnode;
> - 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 = 0x0300; /* USB-PD spec release 3.0 */
> port->typec_caps.dr_set = tcpm_dr_set;
> @@ -4589,7 +4676,7 @@ struct tcpm_port *tcpm_register_port(struct device *dev,
> struct tcpc_dev *tcpc)
> port->typec_caps.port_type_set = tcpm_port_type_set;
>
> port->partner_desc.identity = &port->partner_ident;
> - port->port_type = tcpc->config->type;
> + port->port_type = port->typec_caps.type;
>
> port->role_sw = usb_role_switch_get(port->dev);
> if (IS_ERR(port->role_sw)) {
> @@ -4607,7 +4694,7 @@ struct tcpm_port *tcpm_register_port(struct device *dev,
> struct tcpc_dev *tcpc)
> goto out_destroy_wq;
> }
>
> - if (tcpc->config->alt_modes) {
> + if (tcpc->config && tcpc->config->alt_modes) {
> const struct typec_altmode_desc *paltmode = tcpc->config-
> >alt_modes;
>
> i = 0;
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe devicetree" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v8 07/14] staging: typec: tcpci: remove unused tcpci_tcpc_config
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
` (5 preceding siblings ...)
2018-06-26 23:45 ` [PATCH v8 06/14] usb: typec: tcpm: support get typec and pd config from device properties Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-27 0:31 ` Guenter Roeck
2018-06-26 23:45 ` [PATCH v8 08/14] staging: typec: tcpci: use IS_ERR() instead of PTR_ERR_OR_ZERO() Li Jun
` (7 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
Since we will use config settings via device properties, so
remove the hard code tcpci_tcpc_config.
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
drivers/staging/typec/tcpci.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
index e59547a..076498a 100644
--- a/drivers/staging/typec/tcpci.c
+++ b/drivers/staging/typec/tcpci.c
@@ -464,17 +464,10 @@ static const struct regmap_config tcpci_regmap_config = {
.max_register = 0x7F, /* 0x80 .. 0xFF are vendor defined */
};
-static const struct tcpc_config tcpci_tcpc_config = {
- .type = TYPEC_PORT_DFP,
- .default_role = TYPEC_SINK,
-};
-
static int tcpci_parse_config(struct tcpci *tcpci)
{
tcpci->controls_vbus = true; /* XXX */
- /* TODO: Populate struct tcpc_config from ACPI/device-tree */
- tcpci->tcpc.config = &tcpci_tcpc_config;
tcpci->tcpc.fwnode = device_get_named_child_node(tcpci->dev,
"connector");
if (!tcpci->tcpc.fwnode) {
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [PATCH v8 07/14] staging: typec: tcpci: remove unused tcpci_tcpc_config
2018-06-26 23:45 ` [PATCH v8 07/14] staging: typec: tcpci: remove unused tcpci_tcpc_config Li Jun
@ 2018-06-27 0:31 ` Guenter Roeck
0 siblings, 0 replies; 25+ messages in thread
From: Guenter Roeck @ 2018-06-27 0:31 UTC (permalink / raw)
To: Li Jun, robh+dt, gregkh, heikki.krogerus
Cc: a.hajda, cw00.choi, shufan_lee, peter.chen, devicetree, linux-usb,
linux-imx
On 06/26/2018 04:45 PM, Li Jun wrote:
> Since we will use config settings via device properties, so
> remove the hard code tcpci_tcpc_config.
>
> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Signed-off-by: Li Jun <jun.li@nxp.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> ---
> drivers/staging/typec/tcpci.c | 7 -------
> 1 file changed, 7 deletions(-)
>
> diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
> index e59547a..076498a 100644
> --- a/drivers/staging/typec/tcpci.c
> +++ b/drivers/staging/typec/tcpci.c
> @@ -464,17 +464,10 @@ static const struct regmap_config tcpci_regmap_config = {
> .max_register = 0x7F, /* 0x80 .. 0xFF are vendor defined */
> };
>
> -static const struct tcpc_config tcpci_tcpc_config = {
> - .type = TYPEC_PORT_DFP,
> - .default_role = TYPEC_SINK,
> -};
> -
> static int tcpci_parse_config(struct tcpci *tcpci)
> {
> tcpci->controls_vbus = true; /* XXX */
>
> - /* TODO: Populate struct tcpc_config from ACPI/device-tree */
> - tcpci->tcpc.config = &tcpci_tcpc_config;
> tcpci->tcpc.fwnode = device_get_named_child_node(tcpci->dev,
> "connector");
> if (!tcpci->tcpc.fwnode) {
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v8 08/14] staging: typec: tcpci: use IS_ERR() instead of PTR_ERR_OR_ZERO()
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
` (6 preceding siblings ...)
2018-06-26 23:45 ` [PATCH v8 07/14] staging: typec: tcpci: remove unused tcpci_tcpc_config Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-27 0:32 ` Guenter Roeck
2018-06-26 23:45 ` [PATCH v8 09/14] staging: typec: tcpci: register port before request irq Li Jun
` (6 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
As tcpm_register_port() and tcpci_register_port() never return
NULL and NULL is not a success in this case, use IS_ERR() to check
the return value of both.
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
drivers/staging/typec/tcpci.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
index 076498a..b63f147 100644
--- a/drivers/staging/typec/tcpci.c
+++ b/drivers/staging/typec/tcpci.c
@@ -509,7 +509,7 @@ struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data)
return ERR_PTR(err);
tcpci->port = tcpm_register_port(tcpci->dev, &tcpci->tcpc);
- if (PTR_ERR_OR_ZERO(tcpci->port))
+ if (IS_ERR(tcpci->port))
return ERR_CAST(tcpci->port);
return tcpci;
@@ -551,7 +551,7 @@ static int tcpci_probe(struct i2c_client *client,
return err;
chip->tcpci = tcpci_register_port(&client->dev, &chip->data);
- if (PTR_ERR_OR_ZERO(chip->tcpci))
+ if (IS_ERR(chip->tcpci))
return PTR_ERR(chip->tcpci);
i2c_set_clientdata(client, chip);
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [PATCH v8 08/14] staging: typec: tcpci: use IS_ERR() instead of PTR_ERR_OR_ZERO()
2018-06-26 23:45 ` [PATCH v8 08/14] staging: typec: tcpci: use IS_ERR() instead of PTR_ERR_OR_ZERO() Li Jun
@ 2018-06-27 0:32 ` Guenter Roeck
0 siblings, 0 replies; 25+ messages in thread
From: Guenter Roeck @ 2018-06-27 0:32 UTC (permalink / raw)
To: Li Jun, robh+dt, gregkh, heikki.krogerus
Cc: a.hajda, cw00.choi, shufan_lee, peter.chen, devicetree, linux-usb,
linux-imx
On 06/26/2018 04:45 PM, Li Jun wrote:
> As tcpm_register_port() and tcpci_register_port() never return
> NULL and NULL is not a success in this case, use IS_ERR() to check
> the return value of both.
>
> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Signed-off-by: Li Jun <jun.li@nxp.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> ---
> drivers/staging/typec/tcpci.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
> index 076498a..b63f147 100644
> --- a/drivers/staging/typec/tcpci.c
> +++ b/drivers/staging/typec/tcpci.c
> @@ -509,7 +509,7 @@ struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data)
> return ERR_PTR(err);
>
> tcpci->port = tcpm_register_port(tcpci->dev, &tcpci->tcpc);
> - if (PTR_ERR_OR_ZERO(tcpci->port))
> + if (IS_ERR(tcpci->port))
> return ERR_CAST(tcpci->port);
>
> return tcpci;
> @@ -551,7 +551,7 @@ static int tcpci_probe(struct i2c_client *client,
> return err;
>
> chip->tcpci = tcpci_register_port(&client->dev, &chip->data);
> - if (PTR_ERR_OR_ZERO(chip->tcpci))
> + if (IS_ERR(chip->tcpci))
> return PTR_ERR(chip->tcpci);
>
> i2c_set_clientdata(client, chip);
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v8 09/14] staging: typec: tcpci: register port before request irq
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
` (7 preceding siblings ...)
2018-06-26 23:45 ` [PATCH v8 08/14] staging: typec: tcpci: use IS_ERR() instead of PTR_ERR_OR_ZERO() Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-27 0:33 ` Guenter Roeck
2018-06-26 23:45 ` [PATCH v8 10/14] staging: typec: tcpci: enable vbus detection Li Jun
` (5 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
From: Peter Chen <peter.chen@nxp.com>
With that we can clear any pending events and the port is registered
so driver can be ready to handle typec events once we request irq.
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Peter Chen <peter.chen@nxp.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
drivers/staging/typec/tcpci.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
index b63f147..3b35fce 100644
--- a/drivers/staging/typec/tcpci.c
+++ b/drivers/staging/typec/tcpci.c
@@ -537,24 +537,27 @@ static int tcpci_probe(struct i2c_client *client,
if (IS_ERR(chip->data.regmap))
return PTR_ERR(chip->data.regmap);
+ i2c_set_clientdata(client, chip);
+
/* Disable chip interrupts before requesting irq */
err = regmap_raw_write(chip->data.regmap, TCPC_ALERT_MASK, &val,
sizeof(u16));
if (err < 0)
return err;
+ chip->tcpci = tcpci_register_port(&client->dev, &chip->data);
+ if (IS_ERR(chip->tcpci))
+ return PTR_ERR(chip->tcpci);
+
err = devm_request_threaded_irq(&client->dev, client->irq, NULL,
_tcpci_irq,
IRQF_ONESHOT | IRQF_TRIGGER_LOW,
dev_name(&client->dev), chip);
- if (err < 0)
+ if (err < 0) {
+ tcpci_unregister_port(chip->tcpci);
return err;
+ }
- chip->tcpci = tcpci_register_port(&client->dev, &chip->data);
- if (IS_ERR(chip->tcpci))
- return PTR_ERR(chip->tcpci);
-
- i2c_set_clientdata(client, chip);
return 0;
}
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [PATCH v8 09/14] staging: typec: tcpci: register port before request irq
2018-06-26 23:45 ` [PATCH v8 09/14] staging: typec: tcpci: register port before request irq Li Jun
@ 2018-06-27 0:33 ` Guenter Roeck
0 siblings, 0 replies; 25+ messages in thread
From: Guenter Roeck @ 2018-06-27 0:33 UTC (permalink / raw)
To: Li Jun, robh+dt, gregkh, heikki.krogerus
Cc: a.hajda, cw00.choi, shufan_lee, peter.chen, devicetree, linux-usb,
linux-imx
On 06/26/2018 04:45 PM, Li Jun wrote:
> From: Peter Chen <peter.chen@nxp.com>
>
> With that we can clear any pending events and the port is registered
> so driver can be ready to handle typec events once we request irq.
>
> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Signed-off-by: Peter Chen <peter.chen@nxp.com>
> Signed-off-by: Li Jun <jun.li@nxp.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> ---
> drivers/staging/typec/tcpci.c | 15 +++++++++------
> 1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
> index b63f147..3b35fce 100644
> --- a/drivers/staging/typec/tcpci.c
> +++ b/drivers/staging/typec/tcpci.c
> @@ -537,24 +537,27 @@ static int tcpci_probe(struct i2c_client *client,
> if (IS_ERR(chip->data.regmap))
> return PTR_ERR(chip->data.regmap);
>
> + i2c_set_clientdata(client, chip);
> +
> /* Disable chip interrupts before requesting irq */
> err = regmap_raw_write(chip->data.regmap, TCPC_ALERT_MASK, &val,
> sizeof(u16));
> if (err < 0)
> return err;
>
> + chip->tcpci = tcpci_register_port(&client->dev, &chip->data);
> + if (IS_ERR(chip->tcpci))
> + return PTR_ERR(chip->tcpci);
> +
> err = devm_request_threaded_irq(&client->dev, client->irq, NULL,
> _tcpci_irq,
> IRQF_ONESHOT | IRQF_TRIGGER_LOW,
> dev_name(&client->dev), chip);
> - if (err < 0)
> + if (err < 0) {
> + tcpci_unregister_port(chip->tcpci);
> return err;
> + }
>
> - chip->tcpci = tcpci_register_port(&client->dev, &chip->data);
> - if (IS_ERR(chip->tcpci))
> - return PTR_ERR(chip->tcpci);
> -
> - i2c_set_clientdata(client, chip);
> return 0;
> }
>
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v8 10/14] staging: typec: tcpci: enable vbus detection
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
` (8 preceding siblings ...)
2018-06-26 23:45 ` [PATCH v8 09/14] staging: typec: tcpci: register port before request irq Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-26 23:45 ` [PATCH v8 11/14] typec: tcpm: add starting value for drp toggling Li Jun
` (4 subsequent siblings)
14 siblings, 0 replies; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
TCPCI implementation may need SW to enable VBUS detection to generate
power status events.
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
drivers/staging/typec/tcpci.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
index 3b35fce..4d3b0ae 100644
--- a/drivers/staging/typec/tcpci.c
+++ b/drivers/staging/typec/tcpci.c
@@ -373,6 +373,12 @@ static int tcpci_init(struct tcpc_dev *tcpc)
if (ret < 0)
return ret;
+ /* Enable Vbus detection */
+ ret = regmap_write(tcpci->regmap, TCPC_COMMAND,
+ TCPC_CMD_ENABLE_VBUS_DETECT);
+ if (ret < 0)
+ return ret;
+
reg = TCPC_ALERT_TX_SUCCESS | TCPC_ALERT_TX_FAILED |
TCPC_ALERT_TX_DISCARDED | TCPC_ALERT_RX_STATUS |
TCPC_ALERT_RX_HARD_RST | TCPC_ALERT_CC_STATUS;
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* [PATCH v8 11/14] typec: tcpm: add starting value for drp toggling
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
` (9 preceding siblings ...)
2018-06-26 23:45 ` [PATCH v8 10/14] staging: typec: tcpci: enable vbus detection Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-26 23:45 ` [PATCH v8 12/14] staging: typec: tcpci: keep the disconnected cc line open Li Jun
` (3 subsequent siblings)
14 siblings, 0 replies; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
As DRP port autonomously toggles the Rp/Rd need a start value to
begin with, so add one parameter for it in tcpm_start_drp_toggling.
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
drivers/usb/typec/tcpm.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
index 9dcab81..f5e9558 100644
--- a/drivers/usb/typec/tcpm.c
+++ b/drivers/usb/typec/tcpm.c
@@ -2431,15 +2431,15 @@ static int tcpm_set_charge(struct tcpm_port *port, bool charge)
return 0;
}
-static bool tcpm_start_drp_toggling(struct tcpm_port *port)
+static bool tcpm_start_drp_toggling(struct tcpm_port *port,
+ enum typec_cc_status cc)
{
int ret;
if (port->tcpc->start_drp_toggling &&
port->port_type == TYPEC_PORT_DRP) {
tcpm_log_force(port, "Start DRP toggling");
- ret = port->tcpc->start_drp_toggling(port->tcpc,
- tcpm_rp_cc(port));
+ ret = port->tcpc->start_drp_toggling(port->tcpc, cc);
if (!ret)
return true;
}
@@ -2747,7 +2747,7 @@ static void run_state_machine(struct tcpm_port *port)
if (!port->non_pd_role_swap)
tcpm_swap_complete(port, -ENOTCONN);
tcpm_src_detach(port);
- if (tcpm_start_drp_toggling(port)) {
+ if (tcpm_start_drp_toggling(port, tcpm_rp_cc(port))) {
tcpm_set_state(port, DRP_TOGGLING, 0);
break;
}
@@ -2922,7 +2922,7 @@ static void run_state_machine(struct tcpm_port *port)
tcpm_swap_complete(port, -ENOTCONN);
tcpm_pps_complete(port, -ENOTCONN);
tcpm_snk_detach(port);
- if (tcpm_start_drp_toggling(port)) {
+ if (tcpm_start_drp_toggling(port, TYPEC_CC_RD)) {
tcpm_set_state(port, DRP_TOGGLING, 0);
break;
}
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* [PATCH v8 12/14] staging: typec: tcpci: keep the disconnected cc line open
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
` (10 preceding siblings ...)
2018-06-26 23:45 ` [PATCH v8 11/14] typec: tcpm: add starting value for drp toggling Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-27 0:37 ` Guenter Roeck
2018-06-26 23:45 ` [PATCH v8 13/14] staging: typec: tcpci: Only touch target bit when enable vconn Li Jun
` (2 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
While set polarity, we should keep the disconnected cc line to be
open.
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
drivers/staging/typec/tcpci.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
index 4d3b0ae..11c2d37 100644
--- a/drivers/staging/typec/tcpci.c
+++ b/drivers/staging/typec/tcpci.c
@@ -185,15 +185,25 @@ static int tcpci_set_polarity(struct tcpc_dev *tcpc,
enum typec_cc_polarity polarity)
{
struct tcpci *tcpci = tcpc_to_tcpci(tcpc);
+ unsigned int reg;
int ret;
- ret = regmap_write(tcpci->regmap, TCPC_TCPC_CTRL,
- (polarity == TYPEC_POLARITY_CC2) ?
- TCPC_TCPC_CTRL_ORIENTATION : 0);
+ /* Keep the disconnect cc line open */
+ ret = regmap_read(tcpci->regmap, TCPC_ROLE_CTRL, ®);
if (ret < 0)
return ret;
- return 0;
+ if (polarity == TYPEC_POLARITY_CC2)
+ reg |= TCPC_ROLE_CTRL_CC_OPEN << TCPC_ROLE_CTRL_CC1_SHIFT;
+ else
+ reg |= TCPC_ROLE_CTRL_CC_OPEN << TCPC_ROLE_CTRL_CC2_SHIFT;
+ ret = regmap_write(tcpci->regmap, TCPC_ROLE_CTRL, reg);
+ if (ret < 0)
+ return ret;
+
+ return regmap_write(tcpci->regmap, TCPC_TCPC_CTRL,
+ (polarity == TYPEC_POLARITY_CC2) ?
+ TCPC_TCPC_CTRL_ORIENTATION : 0);
}
static int tcpci_set_vconn(struct tcpc_dev *tcpc, bool enable)
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [PATCH v8 12/14] staging: typec: tcpci: keep the disconnected cc line open
2018-06-26 23:45 ` [PATCH v8 12/14] staging: typec: tcpci: keep the disconnected cc line open Li Jun
@ 2018-06-27 0:37 ` Guenter Roeck
0 siblings, 0 replies; 25+ messages in thread
From: Guenter Roeck @ 2018-06-27 0:37 UTC (permalink / raw)
To: Li Jun, robh+dt, gregkh, heikki.krogerus
Cc: a.hajda, cw00.choi, shufan_lee, peter.chen, devicetree, linux-usb,
linux-imx
On 06/26/2018 04:45 PM, Li Jun wrote:
> While set polarity, we should keep the disconnected cc line to be
> open.
>
> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Signed-off-by: Li Jun <jun.li@nxp.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> ---
> drivers/staging/typec/tcpci.c | 18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
> index 4d3b0ae..11c2d37 100644
> --- a/drivers/staging/typec/tcpci.c
> +++ b/drivers/staging/typec/tcpci.c
> @@ -185,15 +185,25 @@ static int tcpci_set_polarity(struct tcpc_dev *tcpc,
> enum typec_cc_polarity polarity)
> {
> struct tcpci *tcpci = tcpc_to_tcpci(tcpc);
> + unsigned int reg;
> int ret;
>
> - ret = regmap_write(tcpci->regmap, TCPC_TCPC_CTRL,
> - (polarity == TYPEC_POLARITY_CC2) ?
> - TCPC_TCPC_CTRL_ORIENTATION : 0);
> + /* Keep the disconnect cc line open */
> + ret = regmap_read(tcpci->regmap, TCPC_ROLE_CTRL, ®);
> if (ret < 0)
> return ret;
>
> - return 0;
> + if (polarity == TYPEC_POLARITY_CC2)
> + reg |= TCPC_ROLE_CTRL_CC_OPEN << TCPC_ROLE_CTRL_CC1_SHIFT;
> + else
> + reg |= TCPC_ROLE_CTRL_CC_OPEN << TCPC_ROLE_CTRL_CC2_SHIFT;
> + ret = regmap_write(tcpci->regmap, TCPC_ROLE_CTRL, reg);
> + if (ret < 0)
> + return ret;
> +
> + return regmap_write(tcpci->regmap, TCPC_TCPC_CTRL,
> + (polarity == TYPEC_POLARITY_CC2) ?
> + TCPC_TCPC_CTRL_ORIENTATION : 0);
> }
>
> static int tcpci_set_vconn(struct tcpc_dev *tcpc, bool enable)
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v8 13/14] staging: typec: tcpci: Only touch target bit when enable vconn
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
` (11 preceding siblings ...)
2018-06-26 23:45 ` [PATCH v8 12/14] staging: typec: tcpci: keep the disconnected cc line open Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-26 23:45 ` [PATCH v8 14/14] staging: typec: tcpci: move tcpci drivers out of staging Li Jun
2018-06-28 10:50 ` [PATCH v8 00/14] staging: typec: tcpci: move " Greg KH
14 siblings, 0 replies; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
We need regmap_update_bits to avoid touch any other bits when
enable or disable vconn.
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
---
drivers/staging/typec/tcpci.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c
index 11c2d37..ac6b418 100644
--- a/drivers/staging/typec/tcpci.c
+++ b/drivers/staging/typec/tcpci.c
@@ -218,12 +218,9 @@ static int tcpci_set_vconn(struct tcpc_dev *tcpc, bool enable)
return ret;
}
- ret = regmap_write(tcpci->regmap, TCPC_POWER_CTRL,
- enable ? TCPC_POWER_CTRL_VCONN_ENABLE : 0);
- if (ret < 0)
- return ret;
-
- return 0;
+ return regmap_update_bits(tcpci->regmap, TCPC_POWER_CTRL,
+ TCPC_POWER_CTRL_VCONN_ENABLE,
+ enable ? TCPC_POWER_CTRL_VCONN_ENABLE : 0);
}
static int tcpci_set_roles(struct tcpc_dev *tcpc, bool attached,
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* [PATCH v8 14/14] staging: typec: tcpci: move tcpci drivers out of staging
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
` (12 preceding siblings ...)
2018-06-26 23:45 ` [PATCH v8 13/14] staging: typec: tcpci: Only touch target bit when enable vconn Li Jun
@ 2018-06-26 23:45 ` Li Jun
2018-06-27 0:39 ` Guenter Roeck
2018-06-27 8:15 ` Heikki Krogerus
2018-06-28 10:50 ` [PATCH v8 00/14] staging: typec: tcpci: move " Greg KH
14 siblings, 2 replies; 25+ messages in thread
From: Li Jun @ 2018-06-26 23:45 UTC (permalink / raw)
To: robh+dt, gregkh, heikki.krogerus, linux
Cc: a.hajda, jun.li, cw00.choi, shufan_lee, peter.chen, devicetree,
linux-usb, linux-imx
Move TCPCI(Typec port controller interface) driver and rt1711h
driver out of staging.
Signed-off-by: Li Jun <jun.li@nxp.com>
---
drivers/staging/Kconfig | 2 --
drivers/staging/Makefile | 1 -
drivers/staging/typec/Kconfig | 22 ----------------------
drivers/staging/typec/Makefile | 2 --
drivers/staging/typec/TODO | 5 -----
drivers/usb/typec/Kconfig | 15 +++++++++++++++
drivers/usb/typec/Makefile | 2 ++
drivers/{staging => usb}/typec/tcpci.c | 0
drivers/{staging => usb}/typec/tcpci.h | 0
drivers/{staging => usb}/typec/tcpci_rt1711h.c | 0
10 files changed, 17 insertions(+), 32 deletions(-)
diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
index 75a4804..af9a82f 100644
--- a/drivers/staging/Kconfig
+++ b/drivers/staging/Kconfig
@@ -106,8 +106,6 @@ source "drivers/staging/greybus/Kconfig"
source "drivers/staging/vc04_services/Kconfig"
-source "drivers/staging/typec/Kconfig"
-
source "drivers/staging/vboxvideo/Kconfig"
source "drivers/staging/pi433/Kconfig"
diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
index e84959a..8479d47 100644
--- a/drivers/staging/Makefile
+++ b/drivers/staging/Makefile
@@ -2,7 +2,6 @@
# Makefile for staging directory
obj-y += media/
-obj-y += typec/
obj-$(CONFIG_PRISM2_USB) += wlan-ng/
obj-$(CONFIG_COMEDI) += comedi/
obj-$(CONFIG_FB_OLPC_DCON) += olpc_dcon/
diff --git a/drivers/staging/typec/Kconfig b/drivers/staging/typec/Kconfig
deleted file mode 100644
index 3aa981f..0000000
--- a/drivers/staging/typec/Kconfig
+++ /dev/null
@@ -1,22 +0,0 @@
-menu "USB Power Delivery and Type-C drivers"
-
-if TYPEC_TCPM
-
-config TYPEC_TCPCI
- tristate "Type-C Port Controller Interface driver"
- depends on I2C
- select REGMAP_I2C
- help
- Type-C Port Controller driver for TCPCI-compliant controller.
-
-config TYPEC_RT1711H
- tristate "Richtek RT1711H Type-C chip driver"
- select TYPEC_TCPCI
- help
- Richtek RT1711H Type-C chip driver that works with
- Type-C Port Controller Manager to provide USB PD and USB
- Type-C functionalities.
-
-endif
-
-endmenu
diff --git a/drivers/staging/typec/Makefile b/drivers/staging/typec/Makefile
deleted file mode 100644
index 7803d48..0000000
--- a/drivers/staging/typec/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-obj-$(CONFIG_TYPEC_TCPCI) += tcpci.o
-obj-$(CONFIG_TYPEC_RT1711H) += tcpci_rt1711h.o
diff --git a/drivers/staging/typec/TODO b/drivers/staging/typec/TODO
deleted file mode 100644
index 53fe2f7..0000000
--- a/drivers/staging/typec/TODO
+++ /dev/null
@@ -1,5 +0,0 @@
-tcpci:
-- Test with real hardware
-
-Please send patches to Guenter Roeck <linux@roeck-us.net> and copy
-Heikki Krogerus <heikki.krogerus@linux.intel.com>.
diff --git a/drivers/usb/typec/Kconfig b/drivers/usb/typec/Kconfig
index 2c8eab1..972fd19 100644
--- a/drivers/usb/typec/Kconfig
+++ b/drivers/usb/typec/Kconfig
@@ -56,6 +56,21 @@ config TYPEC_TCPM
if TYPEC_TCPM
+config TYPEC_TCPCI
+ tristate "Type-C Port Controller Interface driver"
+ depends on I2C
+ select REGMAP_I2C
+ help
+ Type-C Port Controller driver for TCPCI-compliant controller.
+
+config TYPEC_RT1711H
+ tristate "Richtek RT1711H Type-C chip driver"
+ select TYPEC_TCPCI
+ help
+ Richtek RT1711H Type-C chip driver that works with
+ Type-C Port Controller Manager to provide USB PD and USB
+ Type-C functionalities.
+
source "drivers/usb/typec/fusb302/Kconfig"
config TYPEC_WCOVE
diff --git a/drivers/usb/typec/Makefile b/drivers/usb/typec/Makefile
index 1f599a6..46f86ee 100644
--- a/drivers/usb/typec/Makefile
+++ b/drivers/usb/typec/Makefile
@@ -7,3 +7,5 @@ obj-$(CONFIG_TYPEC_WCOVE) += typec_wcove.o
obj-$(CONFIG_TYPEC_UCSI) += ucsi/
obj-$(CONFIG_TYPEC_TPS6598X) += tps6598x.o
obj-$(CONFIG_TYPEC) += mux/
+obj-$(CONFIG_TYPEC_TCPCI) += tcpci.o
+obj-$(CONFIG_TYPEC_RT1711H) += tcpci_rt1711h.o
diff --git a/drivers/staging/typec/tcpci.c b/drivers/usb/typec/tcpci.c
similarity index 100%
rename from drivers/staging/typec/tcpci.c
rename to drivers/usb/typec/tcpci.c
diff --git a/drivers/staging/typec/tcpci.h b/drivers/usb/typec/tcpci.h
similarity index 100%
rename from drivers/staging/typec/tcpci.h
rename to drivers/usb/typec/tcpci.h
diff --git a/drivers/staging/typec/tcpci_rt1711h.c b/drivers/usb/typec/tcpci_rt1711h.c
similarity index 100%
rename from drivers/staging/typec/tcpci_rt1711h.c
rename to drivers/usb/typec/tcpci_rt1711h.c
--
2.7.4
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [PATCH v8 14/14] staging: typec: tcpci: move tcpci drivers out of staging
2018-06-26 23:45 ` [PATCH v8 14/14] staging: typec: tcpci: move tcpci drivers out of staging Li Jun
@ 2018-06-27 0:39 ` Guenter Roeck
2018-06-27 8:15 ` Heikki Krogerus
1 sibling, 0 replies; 25+ messages in thread
From: Guenter Roeck @ 2018-06-27 0:39 UTC (permalink / raw)
To: Li Jun, robh+dt, gregkh, heikki.krogerus
Cc: a.hajda, cw00.choi, shufan_lee, peter.chen, devicetree, linux-usb,
linux-imx
On 06/26/2018 04:45 PM, Li Jun wrote:
> Move TCPCI(Typec port controller interface) driver and rt1711h
> driver out of staging.
>
> Signed-off-by: Li Jun <jun.li@nxp.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> ---
> drivers/staging/Kconfig | 2 --
> drivers/staging/Makefile | 1 -
> drivers/staging/typec/Kconfig | 22 ----------------------
> drivers/staging/typec/Makefile | 2 --
> drivers/staging/typec/TODO | 5 -----
> drivers/usb/typec/Kconfig | 15 +++++++++++++++
> drivers/usb/typec/Makefile | 2 ++
> drivers/{staging => usb}/typec/tcpci.c | 0
> drivers/{staging => usb}/typec/tcpci.h | 0
> drivers/{staging => usb}/typec/tcpci_rt1711h.c | 0
> 10 files changed, 17 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
> index 75a4804..af9a82f 100644
> --- a/drivers/staging/Kconfig
> +++ b/drivers/staging/Kconfig
> @@ -106,8 +106,6 @@ source "drivers/staging/greybus/Kconfig"
>
> source "drivers/staging/vc04_services/Kconfig"
>
> -source "drivers/staging/typec/Kconfig"
> -
> source "drivers/staging/vboxvideo/Kconfig"
>
> source "drivers/staging/pi433/Kconfig"
> diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
> index e84959a..8479d47 100644
> --- a/drivers/staging/Makefile
> +++ b/drivers/staging/Makefile
> @@ -2,7 +2,6 @@
> # Makefile for staging directory
>
> obj-y += media/
> -obj-y += typec/
> obj-$(CONFIG_PRISM2_USB) += wlan-ng/
> obj-$(CONFIG_COMEDI) += comedi/
> obj-$(CONFIG_FB_OLPC_DCON) += olpc_dcon/
> diff --git a/drivers/staging/typec/Kconfig b/drivers/staging/typec/Kconfig
> deleted file mode 100644
> index 3aa981f..0000000
> --- a/drivers/staging/typec/Kconfig
> +++ /dev/null
> @@ -1,22 +0,0 @@
> -menu "USB Power Delivery and Type-C drivers"
> -
> -if TYPEC_TCPM
> -
> -config TYPEC_TCPCI
> - tristate "Type-C Port Controller Interface driver"
> - depends on I2C
> - select REGMAP_I2C
> - help
> - Type-C Port Controller driver for TCPCI-compliant controller.
> -
> -config TYPEC_RT1711H
> - tristate "Richtek RT1711H Type-C chip driver"
> - select TYPEC_TCPCI
> - help
> - Richtek RT1711H Type-C chip driver that works with
> - Type-C Port Controller Manager to provide USB PD and USB
> - Type-C functionalities.
> -
> -endif
> -
> -endmenu
> diff --git a/drivers/staging/typec/Makefile b/drivers/staging/typec/Makefile
> deleted file mode 100644
> index 7803d48..0000000
> --- a/drivers/staging/typec/Makefile
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -obj-$(CONFIG_TYPEC_TCPCI) += tcpci.o
> -obj-$(CONFIG_TYPEC_RT1711H) += tcpci_rt1711h.o
> diff --git a/drivers/staging/typec/TODO b/drivers/staging/typec/TODO
> deleted file mode 100644
> index 53fe2f7..0000000
> --- a/drivers/staging/typec/TODO
> +++ /dev/null
> @@ -1,5 +0,0 @@
> -tcpci:
> -- Test with real hardware
> -
> -Please send patches to Guenter Roeck <linux@roeck-us.net> and copy
> -Heikki Krogerus <heikki.krogerus@linux.intel.com>.
> diff --git a/drivers/usb/typec/Kconfig b/drivers/usb/typec/Kconfig
> index 2c8eab1..972fd19 100644
> --- a/drivers/usb/typec/Kconfig
> +++ b/drivers/usb/typec/Kconfig
> @@ -56,6 +56,21 @@ config TYPEC_TCPM
>
> if TYPEC_TCPM
>
> +config TYPEC_TCPCI
> + tristate "Type-C Port Controller Interface driver"
> + depends on I2C
> + select REGMAP_I2C
> + help
> + Type-C Port Controller driver for TCPCI-compliant controller.
> +
> +config TYPEC_RT1711H
> + tristate "Richtek RT1711H Type-C chip driver"
> + select TYPEC_TCPCI
> + help
> + Richtek RT1711H Type-C chip driver that works with
> + Type-C Port Controller Manager to provide USB PD and USB
> + Type-C functionalities.
> +
> source "drivers/usb/typec/fusb302/Kconfig"
>
> config TYPEC_WCOVE
> diff --git a/drivers/usb/typec/Makefile b/drivers/usb/typec/Makefile
> index 1f599a6..46f86ee 100644
> --- a/drivers/usb/typec/Makefile
> +++ b/drivers/usb/typec/Makefile
> @@ -7,3 +7,5 @@ obj-$(CONFIG_TYPEC_WCOVE) += typec_wcove.o
> obj-$(CONFIG_TYPEC_UCSI) += ucsi/
> obj-$(CONFIG_TYPEC_TPS6598X) += tps6598x.o
> obj-$(CONFIG_TYPEC) += mux/
> +obj-$(CONFIG_TYPEC_TCPCI) += tcpci.o
> +obj-$(CONFIG_TYPEC_RT1711H) += tcpci_rt1711h.o
> diff --git a/drivers/staging/typec/tcpci.c b/drivers/usb/typec/tcpci.c
> similarity index 100%
> rename from drivers/staging/typec/tcpci.c
> rename to drivers/usb/typec/tcpci.c
> diff --git a/drivers/staging/typec/tcpci.h b/drivers/usb/typec/tcpci.h
> similarity index 100%
> rename from drivers/staging/typec/tcpci.h
> rename to drivers/usb/typec/tcpci.h
> diff --git a/drivers/staging/typec/tcpci_rt1711h.c b/drivers/usb/typec/tcpci_rt1711h.c
> similarity index 100%
> rename from drivers/staging/typec/tcpci_rt1711h.c
> rename to drivers/usb/typec/tcpci_rt1711h.c
>
^ permalink raw reply [flat|nested] 25+ messages in thread* Re: [PATCH v8 14/14] staging: typec: tcpci: move tcpci drivers out of staging
2018-06-26 23:45 ` [PATCH v8 14/14] staging: typec: tcpci: move tcpci drivers out of staging Li Jun
2018-06-27 0:39 ` Guenter Roeck
@ 2018-06-27 8:15 ` Heikki Krogerus
1 sibling, 0 replies; 25+ messages in thread
From: Heikki Krogerus @ 2018-06-27 8:15 UTC (permalink / raw)
To: Li Jun
Cc: robh+dt, gregkh, linux, a.hajda, cw00.choi, shufan_lee,
peter.chen, devicetree, linux-usb, linux-imx
On Wed, Jun 27, 2018 at 07:45:32AM +0800, Li Jun wrote:
> Move TCPCI(Typec port controller interface) driver and rt1711h
> driver out of staging.
>
> Signed-off-by: Li Jun <jun.li@nxp.com>
Thanks Li!
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> ---
> drivers/staging/Kconfig | 2 --
> drivers/staging/Makefile | 1 -
> drivers/staging/typec/Kconfig | 22 ----------------------
> drivers/staging/typec/Makefile | 2 --
> drivers/staging/typec/TODO | 5 -----
> drivers/usb/typec/Kconfig | 15 +++++++++++++++
> drivers/usb/typec/Makefile | 2 ++
> drivers/{staging => usb}/typec/tcpci.c | 0
> drivers/{staging => usb}/typec/tcpci.h | 0
> drivers/{staging => usb}/typec/tcpci_rt1711h.c | 0
> 10 files changed, 17 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
> index 75a4804..af9a82f 100644
> --- a/drivers/staging/Kconfig
> +++ b/drivers/staging/Kconfig
> @@ -106,8 +106,6 @@ source "drivers/staging/greybus/Kconfig"
>
> source "drivers/staging/vc04_services/Kconfig"
>
> -source "drivers/staging/typec/Kconfig"
> -
> source "drivers/staging/vboxvideo/Kconfig"
>
> source "drivers/staging/pi433/Kconfig"
> diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
> index e84959a..8479d47 100644
> --- a/drivers/staging/Makefile
> +++ b/drivers/staging/Makefile
> @@ -2,7 +2,6 @@
> # Makefile for staging directory
>
> obj-y += media/
> -obj-y += typec/
> obj-$(CONFIG_PRISM2_USB) += wlan-ng/
> obj-$(CONFIG_COMEDI) += comedi/
> obj-$(CONFIG_FB_OLPC_DCON) += olpc_dcon/
> diff --git a/drivers/staging/typec/Kconfig b/drivers/staging/typec/Kconfig
> deleted file mode 100644
> index 3aa981f..0000000
> --- a/drivers/staging/typec/Kconfig
> +++ /dev/null
> @@ -1,22 +0,0 @@
> -menu "USB Power Delivery and Type-C drivers"
> -
> -if TYPEC_TCPM
> -
> -config TYPEC_TCPCI
> - tristate "Type-C Port Controller Interface driver"
> - depends on I2C
> - select REGMAP_I2C
> - help
> - Type-C Port Controller driver for TCPCI-compliant controller.
> -
> -config TYPEC_RT1711H
> - tristate "Richtek RT1711H Type-C chip driver"
> - select TYPEC_TCPCI
> - help
> - Richtek RT1711H Type-C chip driver that works with
> - Type-C Port Controller Manager to provide USB PD and USB
> - Type-C functionalities.
> -
> -endif
> -
> -endmenu
> diff --git a/drivers/staging/typec/Makefile b/drivers/staging/typec/Makefile
> deleted file mode 100644
> index 7803d48..0000000
> --- a/drivers/staging/typec/Makefile
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -obj-$(CONFIG_TYPEC_TCPCI) += tcpci.o
> -obj-$(CONFIG_TYPEC_RT1711H) += tcpci_rt1711h.o
> diff --git a/drivers/staging/typec/TODO b/drivers/staging/typec/TODO
> deleted file mode 100644
> index 53fe2f7..0000000
> --- a/drivers/staging/typec/TODO
> +++ /dev/null
> @@ -1,5 +0,0 @@
> -tcpci:
> -- Test with real hardware
> -
> -Please send patches to Guenter Roeck <linux@roeck-us.net> and copy
> -Heikki Krogerus <heikki.krogerus@linux.intel.com>.
> diff --git a/drivers/usb/typec/Kconfig b/drivers/usb/typec/Kconfig
> index 2c8eab1..972fd19 100644
> --- a/drivers/usb/typec/Kconfig
> +++ b/drivers/usb/typec/Kconfig
> @@ -56,6 +56,21 @@ config TYPEC_TCPM
>
> if TYPEC_TCPM
>
> +config TYPEC_TCPCI
> + tristate "Type-C Port Controller Interface driver"
> + depends on I2C
> + select REGMAP_I2C
> + help
> + Type-C Port Controller driver for TCPCI-compliant controller.
> +
> +config TYPEC_RT1711H
> + tristate "Richtek RT1711H Type-C chip driver"
> + select TYPEC_TCPCI
> + help
> + Richtek RT1711H Type-C chip driver that works with
> + Type-C Port Controller Manager to provide USB PD and USB
> + Type-C functionalities.
> +
> source "drivers/usb/typec/fusb302/Kconfig"
>
> config TYPEC_WCOVE
> diff --git a/drivers/usb/typec/Makefile b/drivers/usb/typec/Makefile
> index 1f599a6..46f86ee 100644
> --- a/drivers/usb/typec/Makefile
> +++ b/drivers/usb/typec/Makefile
> @@ -7,3 +7,5 @@ obj-$(CONFIG_TYPEC_WCOVE) += typec_wcove.o
> obj-$(CONFIG_TYPEC_UCSI) += ucsi/
> obj-$(CONFIG_TYPEC_TPS6598X) += tps6598x.o
> obj-$(CONFIG_TYPEC) += mux/
> +obj-$(CONFIG_TYPEC_TCPCI) += tcpci.o
> +obj-$(CONFIG_TYPEC_RT1711H) += tcpci_rt1711h.o
> diff --git a/drivers/staging/typec/tcpci.c b/drivers/usb/typec/tcpci.c
> similarity index 100%
> rename from drivers/staging/typec/tcpci.c
> rename to drivers/usb/typec/tcpci.c
> diff --git a/drivers/staging/typec/tcpci.h b/drivers/usb/typec/tcpci.h
> similarity index 100%
> rename from drivers/staging/typec/tcpci.h
> rename to drivers/usb/typec/tcpci.h
> diff --git a/drivers/staging/typec/tcpci_rt1711h.c b/drivers/usb/typec/tcpci_rt1711h.c
> similarity index 100%
> rename from drivers/staging/typec/tcpci_rt1711h.c
> rename to drivers/usb/typec/tcpci_rt1711h.c
--
heikki
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v8 00/14] staging: typec: tcpci: move out of staging
2018-06-26 23:45 [PATCH v8 00/14] staging: typec: tcpci: move out of staging Li Jun
` (13 preceding siblings ...)
2018-06-26 23:45 ` [PATCH v8 14/14] staging: typec: tcpci: move tcpci drivers out of staging Li Jun
@ 2018-06-28 10:50 ` Greg KH
14 siblings, 0 replies; 25+ messages in thread
From: Greg KH @ 2018-06-28 10:50 UTC (permalink / raw)
To: Li Jun
Cc: robh+dt, heikki.krogerus, linux, a.hajda, cw00.choi, shufan_lee,
peter.chen, devicetree, linux-usb, linux-imx
On Wed, Jun 27, 2018 at 07:45:18AM +0800, Li Jun wrote:
> This patch set attempts to move the tcpci drivers out of staging by fix
> some tcpci driver issues and define typec and power delivery device
> properties, the changes are verified on NXP PTN5110, which is a standard
> tcpci typec port controller device with power delivery support, tested
> power source and sink with drp config.
Nice work, thanks for sticking with this. All now merged.
greg k-h
^ permalink raw reply [flat|nested] 25+ messages in thread