mbox series

[v5,0/4] media: dwc: add csi2host driver

Message ID 20221216143717.1002015-1-eugen.hristev@microchip.com
Headers show
Series media: dwc: add csi2host driver | expand

Message

Eugen Hristev Dec. 16, 2022, 2:37 p.m. UTC
Hi,

This is a respin of this abandoned series of patches here:
https://lore.kernel.org/lkml/1560280855-18085-1-git-send-email-luis.oliveira@synopsys.com/

I have been using this driver for the past few years, and I have reworked
much of it to cope with latest kernel changes.
The series is surely not perfect, and there is still plenty of room for
improvement.
I did not implement all the required changes from v4.
I fixed several bugs in the driver, and implemented few things that were
needed to run in our system (required clocks, etc.)
The CSI2HOST block is present in at91 product named sama7g5 , and we have been
testing it with the sama7g5 Evaluation Kit board.

I do not think I will have the time to implement further changes to this driver.
I am sharing this with the community to try to help others, and maybe
someone will pick up this work and continue the upstreaming process.

One of the big reworks is the binding document which I converted to yaml
and added the properties that were needed in our product.
The PHY binding is still in txt format as originally sent by Luis.
Since I reworked most of the binding, I added myself as author to it.
The rest of the driver keeps Luis as author and I added myself as
Co-developer on the driver which I mostly improved. The commit log
will contain information about everything that I have added to it.

P.S. I have not kept the history change log. Sorry

Eugen


Eugen Hristev (1):
  dt-bindings: media: Document bindings for DW MIPI CSI-2 Host

Luis Oliveira (3):
  dt-bindings: phy: Document the Synopsys MIPI DPHY Rx bindings
  media: platform: dwc: Add MIPI CSI-2 controller driver
  media: platform: dwc: Add DW MIPI DPHY Rx driver

 .../bindings/media/snps,dw-csi.yaml           | 149 ++++
 .../bindings/phy/snps,dw-dphy-rx.txt          |  29 +
 MAINTAINERS                                   |  11 +
 drivers/media/platform/Kconfig                |   1 +
 drivers/media/platform/Makefile               |   1 +
 drivers/media/platform/dwc/Kconfig            |  41 ++
 drivers/media/platform/dwc/Makefile           |  15 +
 drivers/media/platform/dwc/dw-csi-plat.c      | 667 ++++++++++++++++++
 drivers/media/platform/dwc/dw-csi-plat.h      | 102 +++
 drivers/media/platform/dwc/dw-csi-sysfs.c     | 623 ++++++++++++++++
 drivers/media/platform/dwc/dw-dphy-plat.c     | 224 ++++++
 drivers/media/platform/dwc/dw-dphy-rx.c       | 625 ++++++++++++++++
 drivers/media/platform/dwc/dw-dphy-rx.h       | 212 ++++++
 drivers/media/platform/dwc/dw-dphy-sysfs.c    | 232 ++++++
 drivers/media/platform/dwc/dw-mipi-csi.c      | 570 +++++++++++++++
 drivers/media/platform/dwc/dw-mipi-csi.h      | 294 ++++++++
 include/media/dwc/dw-csi-data.h               |  26 +
 include/media/dwc/dw-dphy-data.h              |  32 +
 include/media/dwc/dw-mipi-csi-pltfrm.h        | 104 +++
 19 files changed, 3958 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/media/snps,dw-csi.yaml
 create mode 100644 Documentation/devicetree/bindings/phy/snps,dw-dphy-rx.txt
 create mode 100644 drivers/media/platform/dwc/Kconfig
 create mode 100644 drivers/media/platform/dwc/Makefile
 create mode 100644 drivers/media/platform/dwc/dw-csi-plat.c
 create mode 100644 drivers/media/platform/dwc/dw-csi-plat.h
 create mode 100644 drivers/media/platform/dwc/dw-csi-sysfs.c
 create mode 100644 drivers/media/platform/dwc/dw-dphy-plat.c
 create mode 100644 drivers/media/platform/dwc/dw-dphy-rx.c
 create mode 100644 drivers/media/platform/dwc/dw-dphy-rx.h
 create mode 100644 drivers/media/platform/dwc/dw-dphy-sysfs.c
 create mode 100644 drivers/media/platform/dwc/dw-mipi-csi.c
 create mode 100644 drivers/media/platform/dwc/dw-mipi-csi.h
 create mode 100644 include/media/dwc/dw-csi-data.h
 create mode 100644 include/media/dwc/dw-dphy-data.h
 create mode 100644 include/media/dwc/dw-mipi-csi-pltfrm.h

Comments

Rob Herring (Arm) Dec. 16, 2022, 11:35 p.m. UTC | #1
On Fri, Dec 16, 2022 at 04:37:14PM +0200, Eugen Hristev wrote:
> Add bindings for Synopsys DesignWare MIPI CSI-2 host.
> 
> Signed-off-by: Luis Oliveira <lolivei@synopsys.com>
> [eugen.hristev@microchip.com: reworked binding, converted to yaml]
> Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
> ---
>  .../bindings/media/snps,dw-csi.yaml           | 149 ++++++++++++++++++
>  1 file changed, 149 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/media/snps,dw-csi.yaml
> 
> diff --git a/Documentation/devicetree/bindings/media/snps,dw-csi.yaml b/Documentation/devicetree/bindings/media/snps,dw-csi.yaml
> new file mode 100644
> index 000000000000..439eadc8e517
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/media/snps,dw-csi.yaml
> @@ -0,0 +1,149 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/media/snps,dw-csi.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Synopsys DesignWare CSI-2 Host controller (csi2host)
> +
> +maintainers:
> +  - Eugen Hristev <eugen.hristev@microchip.com>
> +
> +description:
> +  CSI2HOST is used to receive image coming from an MIPI CSI-2 compatible
> +  camera. It will convert the incoming CSI-2 stream into a dedicated
> +  interface called the Synopsys IDI (Image Data Interface).
> +  This interface is a 32-bit SoC internal only, and can be assimilated
> +  with a CSI-2 interface.
> +
> +properties:
> +  compatible:
> +    const: snps,dw-csi

This needs an SoC specific compatible.

> +
> +  reg:
> +    maxItems: 1
> +
> +  clocks:
> +    maxItems: 2
> +
> +  clock-names:
> +    description:
> +      CSI2HOST can have two clocks connected. One clock is the
> +      peripheral clock for the inside functionality of the hardware block.
> +      This is named 'perclk'. The second clock can be the phy clock,
> +      which is used to clock the phy via an internal link.
> +      This clock is named 'phyclk', phy clock.

The schema says most of this, don't repeat it in freeform text. If you 
want a description of each clock, that goes 'clocks' like this:

items:
  - description: ...
  - description: ...

> +    items:
> +      - const: perclk
> +      - const: phyclk
> +
> +  phys:
> +    maxItems: 1
> +    description: MIPI D-PHY
> +
> +  phy-names:
> +    items:
> +      - const: dphy
> +
> +  resets:
> +    maxItems: 1
> +
> +  interrupts:
> +    maxItems: 1
> +
> +  ports:
> +    $ref: /schemas/graph.yaml#/properties/ports
> +
> +    properties:
> +      port@0:
> +        $ref: /schemas/graph.yaml#/$defs/port-base
> +        unevaluatedProperties: false
> +        description:
> +          Input port node, single endpoint describing the input port.
> +
> +        properties:
> +          endpoint:
> +            $ref: video-interfaces.yaml#
> +            unevaluatedProperties: false
> +            description: Endpoint connected to input device

Don't need generic descriptions. Only the port nodes need to define what 
they are.

> +
> +            properties:
> +              bus-type:
> +                const: 4
> +
> +              data-lanes:
> +                minItems: 1
> +                maxItems: 4
> +                items:
> +                  maximum: 4
> +
> +              clock-lanes:
> +                maxItems: 1
> +
> +              remote-endpoint: true

Don't need to list this.

> +
> +      port@1:
> +        $ref: /schemas/graph.yaml#/$defs/port-base
> +        unevaluatedProperties: false
> +        description:
> +          Output port node, single endpoint describing the output port.
> +
> +        properties:
> +          endpoint:
> +            unevaluatedProperties: false
> +            $ref: video-interfaces.yaml#
> +            description: Endpoint connected to output device
> +
> +            properties:
> +              bus-type:
> +                const: 4
> +
> +              remote-endpoint: true

Ditto.

> +
> +    required:
> +      - port@0
> +      - port@1
> +
> +additionalProperties: false
> +
> +required:
> +  - compatible
> +  - ports
> +
> +examples:
> +  - |
> +    csi2: csi2@3000 {
> +        compatible = "snps,dw-csi";
> +        reg = <0x03000 0x7FF>;
> +        phys = <&mipi_dphy_rx>;
> +        phy-names = "dphy";
> +        resets = <&dw_rst 1>;
> +        interrupts = <2>;
> +
> +        ports {
> +            #address-cells = <1>;
> +            #size-cells = <0>;
> +
> +            port@0 {
> +                reg = <0>;
> +
> +                csi_ep1: endpoint {
> +                    bus-type = <4>; /* MIPI CSI2 D-PHY */
> +                    remote-endpoint = <&camera_1>;
> +                    data-lanes = <1 2>;
> +                    clock-lanes = <0>;
> +                };
> +            };
> +
> +            port@1 {
> +                reg = <1>;
> +
> +                csi_ep2: endpoint {
> +                    remote-endpoint = <&idi_receiver>;
> +                    bus-type = <4>;
> +                };
> +            };
> +        };
> +    };
> +
> +...
> -- 
> 2.25.1
> 
>