diff mbox series

[v3,1/2] dt-bindings: usb: add documentation for typec switch via GPIO

Message ID 1552299557-6306-1-git-send-email-jun.li@nxp.com (mailing list archive)
State New, archived
Headers show
Series [v3,1/2] dt-bindings: usb: add documentation for typec switch via GPIO | expand

Commit Message

Jun Li March 11, 2019, 10:40 a.m. UTC
Some typec super speed active channel switch can be controlled via
a GPIO, this binding can be used to specify the switch node by
a GPIO and the remote endpoint of its consumer.

Signed-off-by: Li Jun <jun.li@nxp.com>
---
 .../devicetree/bindings/usb/typec-switch-gpio.txt  | 30 ++++++++++++++++++++++
 1 file changed, 30 insertions(+)

Comments

Hans de Goede March 11, 2019, 11:02 a.m. UTC | #1
Hi,

On 11-03-19 11:40, Jun Li wrote:
> Some typec super speed active channel switch can be controlled via
> a GPIO, this binding can be used to specify the switch node by
> a GPIO and the remote endpoint of its consumer.
> 
> Signed-off-by: Li Jun <jun.li@nxp.com>
> ---
>   .../devicetree/bindings/usb/typec-switch-gpio.txt  | 30 ++++++++++++++++++++++
>   1 file changed, 30 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> new file mode 100644
> index 0000000..4ef76cf
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> @@ -0,0 +1,30 @@
> +Typec orientation switch via a GPIO
> +-----------------------------------
> +
> +Required properties:
> +- compatible: should be set one of following:
> +	- "nxp,ptn36043" for NXP Type-C SuperSpeed active switch.
> +
> +- gpios: the GPIO used to switch the super speed active channel,
> +		GPIO_ACTIVE_HIGH: GPIO state high for cc1;
> +		GPIO_ACTIVE_LOW:  GPIO state low for cc1.
> +- orientation-switch: must be present.

Shouldn't this have usb-c in the propery name, e.g.:
usb-c-orientation-switch  ?

> +
> +Required sub-node:
> +- port: specify the remote endpoint of typec switch consumer.
> +
> +Example:
> +
> +ptn36043 {
> +	compatible = "nxp,ptn36043";
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pinctrl_ss_sel>;
> +	gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
> +	orientation-switch;
> +
> +	port {
> +		usb3_data_ss: endpoint {
> +			remote-endpoint = <&typec_con_ss>;


Isn't this the wrong way around, shouldn't the "usb-c-connector"
compatible port be pointing to the orientation switch, rather then
the other way around?  Both will work in the end. but to me it
feels more natural to group all the info about the type-c connector
together in the "usb-c-connector" compatible port

Regards,

Hans
Hans de Goede March 11, 2019, 11:12 a.m. UTC | #2
Hi,

On 11-03-19 12:02, Hans de Goede wrote:
> Hi,
> 
> On 11-03-19 11:40, Jun Li wrote:
>> Some typec super speed active channel switch can be controlled via
>> a GPIO, this binding can be used to specify the switch node by
>> a GPIO and the remote endpoint of its consumer.
>>
>> Signed-off-by: Li Jun <jun.li@nxp.com>
>> ---
>>   .../devicetree/bindings/usb/typec-switch-gpio.txt  | 30 ++++++++++++++++++++++
>>   1 file changed, 30 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
>> new file mode 100644
>> index 0000000..4ef76cf
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
>> @@ -0,0 +1,30 @@
>> +Typec orientation switch via a GPIO
>> +-----------------------------------
>> +
>> +Required properties:
>> +- compatible: should be set one of following:
>> +    - "nxp,ptn36043" for NXP Type-C SuperSpeed active switch.

Hmm, it seems that this binding should work fine with
other orientation-switches as well, so I think this needs
a generic compatible string.

>> +
>> +- gpios: the GPIO used to switch the super speed active channel,
>> +        GPIO_ACTIVE_HIGH: GPIO state high for cc1;
>> +        GPIO_ACTIVE_LOW:  GPIO state low for cc1.
>> +- orientation-switch: must be present.
> 
> Shouldn't this have usb-c in the propery name, e.g.:
> usb-c-orientation-switch  ?

Also perhaps it would be better to use an additional compatible
string for this, rather then a boolean property, because what you
are trying to say is that this device is compatible with some
(to be written) generic usb-c-orientation-switch binding.

So I think you may want to use an extra compatible for this
and describe the port/graph usage linking the usb-c-connector port
and the port on the orientation-switch together in a new
usb-c-orientation-switch binding document.

This new binding will then document the port usage which is
mostly undocumented in your typec-switch-gpio.txt binding and
this port usage documentation can then be re-used for other
orientation-switch bindings.

Regards,

Hans


> 
>> +
>> +Required sub-node:
>> +- port: specify the remote endpoint of typec switch consumer.
>> +
>> +Example:
>> +
>> +ptn36043 {
>> +    compatible = "nxp,ptn36043";
>> +    pinctrl-names = "default";
>> +    pinctrl-0 = <&pinctrl_ss_sel>;
>> +    gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
>> +    orientation-switch;
>> +
>> +    port {
>> +        usb3_data_ss: endpoint {
>> +            remote-endpoint = <&typec_con_ss>;
> 
> 
> Isn't this the wrong way around, shouldn't the "usb-c-connector"
> compatible port be pointing to the orientation switch, rather then
> the other way around?  Both will work in the end. but to me it
> feels more natural to group all the info about the type-c connector
> together in the "usb-c-connector" compatible port
> 
> Regards,
> 
> Hans
>
Jun Li March 12, 2019, 10:32 a.m. UTC | #3
Hi Hans
> -----Original Message-----
> From: Hans de Goede <hdegoede@redhat.com>
> Sent: 2019年3月11日 19:03
> To: Jun Li <jun.li@nxp.com>; robh+dt@kernel.org; heikki.krogerus@linux.intel.com
> Cc: gregkh@linuxfoundation.org; andy.shevchenko@gmail.com;
> linux-usb@vger.kernel.org; devicetree@vger.kernel.org; dl-linux-imx
> <linux-imx@nxp.com>
> Subject: Re: [PATCH v3 1/2] dt-bindings: usb: add documentation for typec switch
> via GPIO
> 
> Hi,
> 
> On 11-03-19 11:40, Jun Li wrote:
> > Some typec super speed active channel switch can be controlled via a
> > GPIO, this binding can be used to specify the switch node by a GPIO
> > and the remote endpoint of its consumer.
> >
> > Signed-off-by: Li Jun <jun.li@nxp.com>
> > ---
> >   .../devicetree/bindings/usb/typec-switch-gpio.txt  | 30
> ++++++++++++++++++++++
> >   1 file changed, 30 insertions(+)
> >
> > diff --git
> > a/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > new file mode 100644
> > index 0000000..4ef76cf
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > @@ -0,0 +1,30 @@
> > +Typec orientation switch via a GPIO
> > +-----------------------------------
> > +
> > +Required properties:
> > +- compatible: should be set one of following:
> > +	- "nxp,ptn36043" for NXP Type-C SuperSpeed active switch.
> > +
> > +- gpios: the GPIO used to switch the super speed active channel,
> > +		GPIO_ACTIVE_HIGH: GPIO state high for cc1;
> > +		GPIO_ACTIVE_LOW:  GPIO state low for cc1.
> > +- orientation-switch: must be present.
> 
> Shouldn't this have usb-c in the propery name, e.g.:
> usb-c-orientation-switch  ?

This is decided by drivers/usb/typec/mux.c:36
/*
 * With OF graph the mux node must have a boolean device property named
 * "orientation-switch".
 */
> 
> > +
> > +Required sub-node:
> > +- port: specify the remote endpoint of typec switch consumer.
> > +
> > +Example:
> > +
> > +ptn36043 {
> > +	compatible = "nxp,ptn36043";
> > +	pinctrl-names = "default";
> > +	pinctrl-0 = <&pinctrl_ss_sel>;
> > +	gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
> > +	orientation-switch;
> > +
> > +	port {
> > +		usb3_data_ss: endpoint {
> > +			remote-endpoint = <&typec_con_ss>;
> 
> 
> Isn't this the wrong way around, shouldn't the "usb-c-connector"
> compatible port be pointing to the orientation switch, rather then the other way
> around?  

I am not sure I am getting your point, "usb-c-connector" is the user of typec switch,
yes, it is pointing to the orientation switch provider(i.e, this example node).

>Both will work in the end. but to me it feels more natural to group all the
> info about the type-c connector together in the "usb-c-connector" compatible port
>

        ptn36043 {
                compatible = "nxp,ptn36043";
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_ss_sel>;
                gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
                orientation-switch;

                port {
                        usb3_data_ss: endpoint {
                                remote-endpoint = <&typec_con_ss>;
                        };
                };
        };

usb_con: connector {
	compatible = "usb-c-connector";
	...
	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@1 {
			reg = <1>;
			typec_con_ss: endpoint {
				remote-endpoint = <&usb3_data_ss>;
			};
		};
	};
};

Regards
Jun
> Regards,
> 
> Hans
Heikki Krogerus March 12, 2019, 10:45 a.m. UTC | #4
Hi,

On Tue, Mar 12, 2019 at 10:32:00AM +0000, Jun Li wrote:
> Hi Hans
> > -----Original Message-----
> > From: Hans de Goede <hdegoede@redhat.com>
> > Sent: 2019年3月11日 19:03
> > To: Jun Li <jun.li@nxp.com>; robh+dt@kernel.org; heikki.krogerus@linux.intel.com
> > Cc: gregkh@linuxfoundation.org; andy.shevchenko@gmail.com;
> > linux-usb@vger.kernel.org; devicetree@vger.kernel.org; dl-linux-imx
> > <linux-imx@nxp.com>
> > Subject: Re: [PATCH v3 1/2] dt-bindings: usb: add documentation for typec switch
> > via GPIO
> > 
> > Hi,
> > 
> > On 11-03-19 11:40, Jun Li wrote:
> > > Some typec super speed active channel switch can be controlled via a
> > > GPIO, this binding can be used to specify the switch node by a GPIO
> > > and the remote endpoint of its consumer.
> > >
> > > Signed-off-by: Li Jun <jun.li@nxp.com>
> > > ---
> > >   .../devicetree/bindings/usb/typec-switch-gpio.txt  | 30
> > ++++++++++++++++++++++
> > >   1 file changed, 30 insertions(+)
> > >
> > > diff --git
> > > a/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > > b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > > new file mode 100644
> > > index 0000000..4ef76cf
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > > @@ -0,0 +1,30 @@
> > > +Typec orientation switch via a GPIO
> > > +-----------------------------------
> > > +
> > > +Required properties:
> > > +- compatible: should be set one of following:
> > > +	- "nxp,ptn36043" for NXP Type-C SuperSpeed active switch.
> > > +
> > > +- gpios: the GPIO used to switch the super speed active channel,
> > > +		GPIO_ACTIVE_HIGH: GPIO state high for cc1;
> > > +		GPIO_ACTIVE_LOW:  GPIO state low for cc1.
> > > +- orientation-switch: must be present.
> > 
> > Shouldn't this have usb-c in the propery name, e.g.:
> > usb-c-orientation-switch  ?
> 
> This is decided by drivers/usb/typec/mux.c:36
> /*
>  * With OF graph the mux node must have a boolean device property named
>  * "orientation-switch".
>  */

Yes, but it's still OK to change it. It's not documented anywhere yet.

> > > +
> > > +Required sub-node:
> > > +- port: specify the remote endpoint of typec switch consumer.
> > > +
> > > +Example:
> > > +
> > > +ptn36043 {
> > > +	compatible = "nxp,ptn36043";
> > > +	pinctrl-names = "default";
> > > +	pinctrl-0 = <&pinctrl_ss_sel>;
> > > +	gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
> > > +	orientation-switch;
> > > +
> > > +	port {
> > > +		usb3_data_ss: endpoint {
> > > +			remote-endpoint = <&typec_con_ss>;
> > 
> > 
> > Isn't this the wrong way around, shouldn't the "usb-c-connector"
> > compatible port be pointing to the orientation switch, rather then the other way
> > around?  

Hans, in OF graph both endpoints will have a remote-endpoint pointing
to each other..

> I am not sure I am getting your point, "usb-c-connector" is the user of typec switch,
> yes, it is pointing to the orientation switch provider(i.e, this example node).
> 
> >Both will work in the end. but to me it feels more natural to group all the
> > info about the type-c connector together in the "usb-c-connector" compatible port
> >
> 
>         ptn36043 {
>                 compatible = "nxp,ptn36043";
>                 pinctrl-names = "default";
>                 pinctrl-0 = <&pinctrl_ss_sel>;
>                 gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
>                 orientation-switch;
> 
>                 port {
>                         usb3_data_ss: endpoint {
>                                 remote-endpoint = <&typec_con_ss>;
>                         };
>                 };
>         };
> 
> usb_con: connector {
> 	compatible = "usb-c-connector";
> 	...
> 	ports {
> 		#address-cells = <1>;
> 		#size-cells = <0>;
> 
> 		port@1 {
> 			reg = <1>;
> 			typec_con_ss: endpoint {
> 				remote-endpoint = <&usb3_data_ss>;
> 			};
> 		};
> 	};
> };

So like that.

thanks,
Hans de Goede March 12, 2019, 11:46 a.m. UTC | #5
Hi,

On 12-03-19 11:45, Heikki Krogerus wrote:
> Hi,
> 
> On Tue, Mar 12, 2019 at 10:32:00AM +0000, Jun Li wrote:
>> Hi Hans
>>> -----Original Message-----
>>> From: Hans de Goede <hdegoede@redhat.com>
>>> Sent: 2019年3月11日 19:03
>>> To: Jun Li <jun.li@nxp.com>; robh+dt@kernel.org; heikki.krogerus@linux.intel.com
>>> Cc: gregkh@linuxfoundation.org; andy.shevchenko@gmail.com;
>>> linux-usb@vger.kernel.org; devicetree@vger.kernel.org; dl-linux-imx
>>> <linux-imx@nxp.com>
>>> Subject: Re: [PATCH v3 1/2] dt-bindings: usb: add documentation for typec switch
>>> via GPIO
>>>
>>> Hi,
>>>
>>> On 11-03-19 11:40, Jun Li wrote:
>>>> Some typec super speed active channel switch can be controlled via a
>>>> GPIO, this binding can be used to specify the switch node by a GPIO
>>>> and the remote endpoint of its consumer.
>>>>
>>>> Signed-off-by: Li Jun <jun.li@nxp.com>
>>>> ---
>>>>    .../devicetree/bindings/usb/typec-switch-gpio.txt  | 30
>>> ++++++++++++++++++++++
>>>>    1 file changed, 30 insertions(+)
>>>>
>>>> diff --git
>>>> a/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
>>>> b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
>>>> new file mode 100644
>>>> index 0000000..4ef76cf
>>>> --- /dev/null
>>>> +++ b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
>>>> @@ -0,0 +1,30 @@
>>>> +Typec orientation switch via a GPIO
>>>> +-----------------------------------
>>>> +
>>>> +Required properties:
>>>> +- compatible: should be set one of following:
>>>> +	- "nxp,ptn36043" for NXP Type-C SuperSpeed active switch.
>>>> +
>>>> +- gpios: the GPIO used to switch the super speed active channel,
>>>> +		GPIO_ACTIVE_HIGH: GPIO state high for cc1;
>>>> +		GPIO_ACTIVE_LOW:  GPIO state low for cc1.
>>>> +- orientation-switch: must be present.
>>>
>>> Shouldn't this have usb-c in the propery name, e.g.:
>>> usb-c-orientation-switch  ?
>>
>> This is decided by drivers/usb/typec/mux.c:36
>> /*
>>   * With OF graph the mux node must have a boolean device property named
>>   * "orientation-switch".
>>   */
> 
> Yes, but it's still OK to change it. It's not documented anywhere yet.
> 
>>>> +
>>>> +Required sub-node:
>>>> +- port: specify the remote endpoint of typec switch consumer.
>>>> +
>>>> +Example:
>>>> +
>>>> +ptn36043 {
>>>> +	compatible = "nxp,ptn36043";
>>>> +	pinctrl-names = "default";
>>>> +	pinctrl-0 = <&pinctrl_ss_sel>;
>>>> +	gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
>>>> +	orientation-switch;
>>>> +
>>>> +	port {
>>>> +		usb3_data_ss: endpoint {
>>>> +			remote-endpoint = <&typec_con_ss>;
>>>
>>>
>>> Isn't this the wrong way around, shouldn't the "usb-c-connector"
>>> compatible port be pointing to the orientation switch, rather then the other way
>>> around?
> 
> Hans, in OF graph both endpoints will have a remote-endpoint pointing
> to each other..
> 
>> I am not sure I am getting your point, "usb-c-connector" is the user of typec switch,
>> yes, it is pointing to the orientation switch provider(i.e, this example node).
>>
>>> Both will work in the end. but to me it feels more natural to group all the
>>> info about the type-c connector together in the "usb-c-connector" compatible port
>>>
>>
>>          ptn36043 {
>>                  compatible = "nxp,ptn36043";
>>                  pinctrl-names = "default";
>>                  pinctrl-0 = <&pinctrl_ss_sel>;
>>                  gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
>>                  orientation-switch;
>>
>>                  port {
>>                          usb3_data_ss: endpoint {
>>                                  remote-endpoint = <&typec_con_ss>;
>>                          };
>>                  };
>>          };
>>
>> usb_con: connector {
>> 	compatible = "usb-c-connector";
>> 	...
>> 	ports {
>> 		#address-cells = <1>;
>> 		#size-cells = <0>;
>>
>> 		port@1 {
>> 			reg = <1>;
>> 			typec_con_ss: endpoint {
>> 				remote-endpoint = <&usb3_data_ss>;
>> 			};
>> 		};
>> 	};
>> };
> 
> So like that.

Ah I see, thank you for clarifying that.

Regards,

Hans
Rob Herring (Arm) March 12, 2019, 2:45 p.m. UTC | #6
On Mon, Mar 11, 2019 at 10:40:09AM +0000, Jun Li wrote:
> Some typec super speed active channel switch can be controlled via
> a GPIO, this binding can be used to specify the switch node by
> a GPIO and the remote endpoint of its consumer.
> 
> Signed-off-by: Li Jun <jun.li@nxp.com>
> ---
>  .../devicetree/bindings/usb/typec-switch-gpio.txt  | 30 ++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> new file mode 100644
> index 0000000..4ef76cf
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> @@ -0,0 +1,30 @@
> +Typec orientation switch via a GPIO
> +-----------------------------------
> +
> +Required properties:
> +- compatible: should be set one of following:
> +	- "nxp,ptn36043" for NXP Type-C SuperSpeed active switch.
> +
> +- gpios: the GPIO used to switch the super speed active channel,

Perhaps switch-gpios in case there are other gpios needed.

> +		GPIO_ACTIVE_HIGH: GPIO state high for cc1;
> +		GPIO_ACTIVE_LOW:  GPIO state low for cc1.
> +- orientation-switch: must be present.

Why is this needed? The compatible can't imply this?

> +
> +Required sub-node:
> +- port: specify the remote endpoint of typec switch consumer.
> +
> +Example:
> +
> +ptn36043 {
> +	compatible = "nxp,ptn36043";
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pinctrl_ss_sel>;
> +	gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
> +	orientation-switch;
> +
> +	port {
> +		usb3_data_ss: endpoint {
> +			remote-endpoint = <&typec_con_ss>;
> +		};
> +	};
> +};
> -- 
> 2.7.4
>
Heikki Krogerus March 13, 2019, 9:35 a.m. UTC | #7
On Tue, Mar 12, 2019 at 09:45:27AM -0500, Rob Herring wrote:
> On Mon, Mar 11, 2019 at 10:40:09AM +0000, Jun Li wrote:
> > Some typec super speed active channel switch can be controlled via
> > a GPIO, this binding can be used to specify the switch node by
> > a GPIO and the remote endpoint of its consumer.
> > 
> > Signed-off-by: Li Jun <jun.li@nxp.com>
> > ---
> >  .../devicetree/bindings/usb/typec-switch-gpio.txt  | 30 ++++++++++++++++++++++
> >  1 file changed, 30 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > new file mode 100644
> > index 0000000..4ef76cf
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > @@ -0,0 +1,30 @@
> > +Typec orientation switch via a GPIO
> > +-----------------------------------
> > +
> > +Required properties:
> > +- compatible: should be set one of following:
> > +	- "nxp,ptn36043" for NXP Type-C SuperSpeed active switch.
> > +
> > +- gpios: the GPIO used to switch the super speed active channel,
> 
> Perhaps switch-gpios in case there are other gpios needed.
> 
> > +		GPIO_ACTIVE_HIGH: GPIO state high for cc1;
> > +		GPIO_ACTIVE_LOW:  GPIO state low for cc1.
> > +- orientation-switch: must be present.
> 
> Why is this needed? The compatible can't imply this?

I think Jun Li is added that based on the comment I put to
drivers/usb/typec/mux.c, so I'm to blame here. If we can handle this
with the compatible like I guess we can, I'm happy.

thanks,
Jun Li March 18, 2019, 10:46 a.m. UTC | #8
> -----Original Message-----
> From: Hans de Goede <hdegoede@redhat.com>
> Sent: 2019年3月11日 19:12
> To: Jun Li <jun.li@nxp.com>; robh+dt@kernel.org; heikki.krogerus@linux.intel.com
> Cc: gregkh@linuxfoundation.org; andy.shevchenko@gmail.com;
> linux-usb@vger.kernel.org; devicetree@vger.kernel.org; dl-linux-imx
> <linux-imx@nxp.com>
> Subject: Re: [PATCH v3 1/2] dt-bindings: usb: add documentation for typec switch
> via GPIO
> 
> Hi,
> 
> On 11-03-19 12:02, Hans de Goede wrote:
> > Hi,
> >
> > On 11-03-19 11:40, Jun Li wrote:
> >> Some typec super speed active channel switch can be controlled via a
> >> GPIO, this binding can be used to specify the switch node by a GPIO
> >> and the remote endpoint of its consumer.
> >>
> >> Signed-off-by: Li Jun <jun.li@nxp.com>
> >> ---
> >>   .../devicetree/bindings/usb/typec-switch-gpio.txt  | 30
> >> ++++++++++++++++++++++
> >>   1 file changed, 30 insertions(+)
> >>
> >> diff --git
> >> a/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> >> b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> >> new file mode 100644
> >> index 0000000..4ef76cf
> >> --- /dev/null
> >> +++ b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> >> @@ -0,0 +1,30 @@
> >> +Typec orientation switch via a GPIO
> >> +-----------------------------------
> >> +
> >> +Required properties:
> >> +- compatible: should be set one of following:
> >> +    - "nxp,ptn36043" for NXP Type-C SuperSpeed active switch.
> 
> Hmm, it seems that this binding should work fine with other orientation-switches as
> well, so I think this needs a generic compatible string.
> 
> >> +
> >> +- gpios: the GPIO used to switch the super speed active channel,
> >> +        GPIO_ACTIVE_HIGH: GPIO state high for cc1;
> >> +        GPIO_ACTIVE_LOW:  GPIO state low for cc1.
> >> +- orientation-switch: must be present.
> >
> > Shouldn't this have usb-c in the propery name, e.g.:
> > usb-c-orientation-switch  ?
> 
> Also perhaps it would be better to use an additional compatible string for this, rather
> then a boolean property, because what you are trying to say is that this device is
> compatible with some (to be written) generic usb-c-orientation-switch binding.
> 
> So I think you may want to use an extra compatible for this and describe the
> port/graph usage linking the usb-c-connector port and the port on the
> orientation-switch together in a new usb-c-orientation-switch binding document.
> 

This patch was to only cover one kind of *typical* typec switch: done by
GPIO toggle, as I don't know how other typec switch may be implemented,
I will try to change this to be a *common* typec switch by using a generic
compatible(type-c-orientation-switch), which will for now only support
switch-gpios.

> This new binding will then document the port usage which is mostly undocumented
> in your typec-switch-gpio.txt binding and this port usage documentation can then be
> re-used for other orientation-switch bindings.

Port usage should be the same as I gave the example:
https://www.spinics.net/lists/devicetree/msg278042.html

thanks
Li Jun
> 
> Regards,
> 
> Hans
> 
> 
> >
> >> +
> >> +Required sub-node:
> >> +- port: specify the remote endpoint of typec switch consumer.
> >> +
> >> +Example:
> >> +
> >> +ptn36043 {
> >> +    compatible = "nxp,ptn36043";
> >> +    pinctrl-names = "default";
> >> +    pinctrl-0 = <&pinctrl_ss_sel>;
> >> +    gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
> >> +    orientation-switch;
> >> +
> >> +    port {
> >> +        usb3_data_ss: endpoint {
> >> +            remote-endpoint = <&typec_con_ss>;
> >
> >
> > Isn't this the wrong way around, shouldn't the "usb-c-connector"
> > compatible port be pointing to the orientation switch, rather then the
> > other way around?  Both will work in the end. but to me it feels more
> > natural to group all the info about the type-c connector together in
> > the "usb-c-connector" compatible port
> >
> > Regards,
> >
> > Hans
> >
Jun Li March 18, 2019, 10:48 a.m. UTC | #9
> -----Original Message-----
> From: Rob Herring <robh@kernel.org>
> Sent: 2019年3月12日 22:45
> To: Jun Li <jun.li@nxp.com>
> Cc: heikki.krogerus@linux.intel.com; gregkh@linuxfoundation.org;
> hdegoede@redhat.com; andy.shevchenko@gmail.com; linux-usb@vger.kernel.org;
> devicetree@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com>
> Subject: Re: [PATCH v3 1/2] dt-bindings: usb: add documentation for typec switch
> via GPIO
> 
> On Mon, Mar 11, 2019 at 10:40:09AM +0000, Jun Li wrote:
> > Some typec super speed active channel switch can be controlled via a
> > GPIO, this binding can be used to specify the switch node by a GPIO
> > and the remote endpoint of its consumer.
> >
> > Signed-off-by: Li Jun <jun.li@nxp.com>
> > ---
> >  .../devicetree/bindings/usb/typec-switch-gpio.txt  | 30
> > ++++++++++++++++++++++
> >  1 file changed, 30 insertions(+)
> >
> > diff --git
> > a/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > new file mode 100644
> > index 0000000..4ef76cf
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > @@ -0,0 +1,30 @@
> > +Typec orientation switch via a GPIO
> > +-----------------------------------
> > +
> > +Required properties:
> > +- compatible: should be set one of following:
> > +	- "nxp,ptn36043" for NXP Type-C SuperSpeed active switch.
> > +
> > +- gpios: the GPIO used to switch the super speed active channel,
> 
> Perhaps switch-gpios in case there are other gpios needed.

OK, I will change it to be switch-gpios.

> 
> > +		GPIO_ACTIVE_HIGH: GPIO state high for cc1;
> > +		GPIO_ACTIVE_LOW:  GPIO state low for cc1.
> > +- orientation-switch: must be present.
> 
> Why is this needed? The compatible can't imply this?

I will try to remove this bool property and use a general compatible string.

> 
> > +
> > +Required sub-node:
> > +- port: specify the remote endpoint of typec switch consumer.
> > +
> > +Example:
> > +
> > +ptn36043 {
> > +	compatible = "nxp,ptn36043";
> > +	pinctrl-names = "default";
> > +	pinctrl-0 = <&pinctrl_ss_sel>;
> > +	gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
> > +	orientation-switch;
> > +
> > +	port {
> > +		usb3_data_ss: endpoint {
> > +			remote-endpoint = <&typec_con_ss>;
> > +		};
> > +	};
> > +};
> > --
> > 2.7.4
> >
Jun Li March 18, 2019, 10:59 a.m. UTC | #10
> -----Original Message-----
> From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Sent: 2019年3月13日 17:36
> To: Rob Herring <robh@kernel.org>
> Cc: Jun Li <jun.li@nxp.com>; gregkh@linuxfoundation.org; hdegoede@redhat.com;
> andy.shevchenko@gmail.com; linux-usb@vger.kernel.org;
> devicetree@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com>
> Subject: Re: [PATCH v3 1/2] dt-bindings: usb: add documentation for typec switch
> via GPIO
> 
> On Tue, Mar 12, 2019 at 09:45:27AM -0500, Rob Herring wrote:
> > On Mon, Mar 11, 2019 at 10:40:09AM +0000, Jun Li wrote:
> > > Some typec super speed active channel switch can be controlled via a
> > > GPIO, this binding can be used to specify the switch node by a GPIO
> > > and the remote endpoint of its consumer.
> > >
> > > Signed-off-by: Li Jun <jun.li@nxp.com>
> > > ---
> > >  .../devicetree/bindings/usb/typec-switch-gpio.txt  | 30
> > > ++++++++++++++++++++++
> > >  1 file changed, 30 insertions(+)
> > >
> > > diff --git
> > > a/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > > b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > > new file mode 100644
> > > index 0000000..4ef76cf
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > > @@ -0,0 +1,30 @@
> > > +Typec orientation switch via a GPIO
> > > +-----------------------------------
> > > +
> > > +Required properties:
> > > +- compatible: should be set one of following:
> > > +	- "nxp,ptn36043" for NXP Type-C SuperSpeed active switch.
> > > +
> > > +- gpios: the GPIO used to switch the super speed active channel,
> >
> > Perhaps switch-gpios in case there are other gpios needed.
> >
> > > +		GPIO_ACTIVE_HIGH: GPIO state high for cc1;
> > > +		GPIO_ACTIVE_LOW:  GPIO state low for cc1.
> > > +- orientation-switch: must be present.
> >
> > Why is this needed? The compatible can't imply this?
> 
> I think Jun Li is added that based on the comment I put to drivers/usb/typec/mux.c,
> so I'm to blame here. If we can handle this with the compatible like I guess we can,
> I'm happy.

Hi Heikki

Can I just remove the original bool property check? i.e, match OK if the remote
parent node is in switch_list.

Thanks
Li Jun
> 
> thanks,
> 
> --
> heikki
Heikki Krogerus March 19, 2019, 8:18 a.m. UTC | #11
On Mon, Mar 18, 2019 at 10:59:31AM +0000, Jun Li wrote:
> 
> 
> > -----Original Message-----
> > From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> > Sent: 2019年3月13日 17:36
> > To: Rob Herring <robh@kernel.org>
> > Cc: Jun Li <jun.li@nxp.com>; gregkh@linuxfoundation.org; hdegoede@redhat.com;
> > andy.shevchenko@gmail.com; linux-usb@vger.kernel.org;
> > devicetree@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com>
> > Subject: Re: [PATCH v3 1/2] dt-bindings: usb: add documentation for typec switch
> > via GPIO
> > 
> > On Tue, Mar 12, 2019 at 09:45:27AM -0500, Rob Herring wrote:
> > > On Mon, Mar 11, 2019 at 10:40:09AM +0000, Jun Li wrote:
> > > > Some typec super speed active channel switch can be controlled via a
> > > > GPIO, this binding can be used to specify the switch node by a GPIO
> > > > and the remote endpoint of its consumer.
> > > >
> > > > Signed-off-by: Li Jun <jun.li@nxp.com>
> > > > ---
> > > >  .../devicetree/bindings/usb/typec-switch-gpio.txt  | 30
> > > > ++++++++++++++++++++++
> > > >  1 file changed, 30 insertions(+)
> > > >
> > > > diff --git
> > > > a/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > > > b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > > > new file mode 100644
> > > > index 0000000..4ef76cf
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
> > > > @@ -0,0 +1,30 @@
> > > > +Typec orientation switch via a GPIO
> > > > +-----------------------------------
> > > > +
> > > > +Required properties:
> > > > +- compatible: should be set one of following:
> > > > +	- "nxp,ptn36043" for NXP Type-C SuperSpeed active switch.
> > > > +
> > > > +- gpios: the GPIO used to switch the super speed active channel,
> > >
> > > Perhaps switch-gpios in case there are other gpios needed.
> > >
> > > > +		GPIO_ACTIVE_HIGH: GPIO state high for cc1;
> > > > +		GPIO_ACTIVE_LOW:  GPIO state low for cc1.
> > > > +- orientation-switch: must be present.
> > >
> > > Why is this needed? The compatible can't imply this?
> > 
> > I think Jun Li is added that based on the comment I put to drivers/usb/typec/mux.c,
> > so I'm to blame here. If we can handle this with the compatible like I guess we can,
> > I'm happy.
> 
> Hi Heikki
> 
> Can I just remove the original bool property check? i.e, match OK if the remote
> parent node is in switch_list.

No. If typec_switch_get() is called before the mux device is
registered, we need to return -EPROBE_DEFER. That means we need to be
able to identify the mux device node.

I think we should just use the compatible like Rob suggested. The
Type-C muxes should probable have their own bindings file where it's
defined for these muxes.


thanks,
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
new file mode 100644
index 0000000..4ef76cf
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/typec-switch-gpio.txt
@@ -0,0 +1,30 @@ 
+Typec orientation switch via a GPIO
+-----------------------------------
+
+Required properties:
+- compatible: should be set one of following:
+	- "nxp,ptn36043" for NXP Type-C SuperSpeed active switch.
+
+- gpios: the GPIO used to switch the super speed active channel,
+		GPIO_ACTIVE_HIGH: GPIO state high for cc1;
+		GPIO_ACTIVE_LOW:  GPIO state low for cc1.
+- orientation-switch: must be present.
+
+Required sub-node:
+- port: specify the remote endpoint of typec switch consumer.
+
+Example:
+
+ptn36043 {
+	compatible = "nxp,ptn36043";
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_ss_sel>;
+	gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
+	orientation-switch;
+
+	port {
+		usb3_data_ss: endpoint {
+			remote-endpoint = <&typec_con_ss>;
+		};
+	};
+};