mbox series

[RFC,v2,0/2] usb: typec: Add driver for Microchip sama7g5 tcpc

Message ID 20210330205442.981649-1-cristian.birsan@microchip.com
Headers show
Series usb: typec: Add driver for Microchip sama7g5 tcpc | expand

Message

cristian.birsan@microchip.com March 30, 2021, 8:54 p.m. UTC
From: Cristian Birsan <cristian.birsan@microchip.com>

This patch set adds initial driver support for Microchip USB Type-C Port
Controller (TCPC) embedded in sama7g5 SoC.

The controller does not implement power delivery and the driver uses dummy
functions to register the port with TCPM. The current silicon version is
not able to trigger interrupts so the driver will poll for changes on
CC1/CC2 lines.

Support for sink is implemented and tested with an USB device. The plan is
to extend the driver and add source support.

Changes in v2:
- fix DT bindings yamllint warnings/errors
- fix compilation error reported by: kernel test robot <lkp@intel.com>

Cristian Birsan (2):
  dt-bindings: usb: Add DT bindings for Microchip sama7g5 tcpc
  usb: typec: sama7g5_tcpc: add driver for Microchip sama7g5 tcpc

 .../bindings/usb/microchip,sama7g5-tcpc.yaml  |  90 +++
 drivers/usb/typec/tcpm/Kconfig                |   8 +
 drivers/usb/typec/tcpm/Makefile               |   1 +
 drivers/usb/typec/tcpm/sama7g5_tcpc.c         | 610 ++++++++++++++++++
 4 files changed, 709 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/usb/microchip,sama7g5-tcpc.yaml
 create mode 100644 drivers/usb/typec/tcpm/sama7g5_tcpc.c

Comments

Rob Herring (Arm) April 1, 2021, 5:16 p.m. UTC | #1
On Tue, Mar 30, 2021 at 11:54:41PM +0300, cristian.birsan@microchip.com wrote:
> From: Cristian Birsan <cristian.birsan@microchip.com>
> 
> This patch adds DT bindings for the new Microchip USB Type-C Port
> Controller (TCPC) embedded in sama7g5 SoC.
> 
> Signed-off-by: Cristian Birsan <cristian.birsan@microchip.com>
> ---
>  .../bindings/usb/microchip,sama7g5-tcpc.yaml  | 90 +++++++++++++++++++
>  1 file changed, 90 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/usb/microchip,sama7g5-tcpc.yaml
> 
> diff --git a/Documentation/devicetree/bindings/usb/microchip,sama7g5-tcpc.yaml b/Documentation/devicetree/bindings/usb/microchip,sama7g5-tcpc.yaml
> new file mode 100644
> index 000000000000..2d3289dd9ac9
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/usb/microchip,sama7g5-tcpc.yaml
> @@ -0,0 +1,90 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: "http://devicetree.org/schemas/usb/microchip,sama7g5-tcpc.yaml#"
> +$schema: "http://devicetree.org/meta-schemas/core.yaml#"
> +
> +title: Microchip SAMA7G5 Type-C port controller bindings
> +
> +maintainers:
> +  - Cristian Birsan <cristian.birsan@microchip.com>
> +
> +properties:
> +  compatible:
> +    enum:
> +      - microchip,sama7g5-tcpc
> +
> +  reg:
> +    maxItems: 1
> +
> +  clocks:
> +    items:
> +      - description: Peripheral Bus Clock
> +      - description: Generic Clock
> +
> +  clock-names:
> +    items:
> +      - const: pclk
> +      - const: gclk
> +
> +  vbus-supply:
> +    description: vbus power supply (5V) phandle

This belongs in the connector node unless this chip uses Vbus as a 
supply.

> +
> +  microchip,vbus-gpio:
> +    description: vbus detect gpio

We have standard property for this in the connector node.

> +
> +  connector:
> +    type: object
> +
> +    allOf:
> +      - $ref: ../connector/usb-connector.yaml

You can drop 'allOf'. And add:

       unevaluatedProperties: false

> +
> +    properties:
> +      compatible:
> +        const: usb-c-connector
> +
> +      power-role: true
> +
> +    required:
> +      - compatible
> +
> +required:
> +  - compatible
> +  - reg
> +  - connector
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/clock/at91.h>
> +    #include <dt-bindings/usb/pd.h>
> +    tcpcb: tcpcb@e0844000 {
> +      compatible = "microchip,sama7g5-tcpc";
> +      reg = <0xe0844000 0x3fff>;
> +      clocks = <&pmc PMC_TYPE_PERIPHERAL 95>, <&pmc PMC_TYPE_GCK 95>;
> +      clock-names = "pclk", "gclk";
> +
> +      usb_con: connector {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +        compatible = "usb-c-connector";
> +        label = "USB-C";
> +        data-role = "device";
> +        power-role = "sink";
> +        try-power-role = "sink";
> +        source-pdos = <PDO_FIXED(5000, 500,
> +            PDO_FIXED_USB_COMM)>;
> +        sink-pdos = <PDO_FIXED(5000, 500,
> +            PDO_FIXED_USB_COMM)>;
> +        op-sink-microwatt = <2500000>;
> +
> +        port@1 {
> +          reg = <1>;
> +          usb_con_hs: endpoint {
> +            remote-endpoint = <&usb_phy1>;
> +          };
> +        };
> +      };
> +    };
> +...
> -- 
> 2.25.1
>