Message ID | cover.1698666612.git.mehdi.djait@bootlin.com |
---|---|
Headers | show |
Series | media: rockchip: Add a driver for Rockchip's camera interface | expand |
On Mon, Oct 30, 2023 at 01:25:12PM +0100, Mehdi Djait wrote: > Add a documentation for the Rockchip Camera Interface > binding. > > Signed-off-by: Mehdi Djait <mehdi.djait@bootlin.com> > --- > v8=>v9: > dropped the "Reviewed-by: Rob Herring <robh@kernel.org>" > because of the following changes: > - changed the compatible to rk3066-cif: rk3066 is the earliest Rockchip SoC > that uses cif and it is the first model starting the RK30 lineup. Is px30 compatible with rk3066? It's not clear because you didn't add rk3066 support. If not compatible, then add rk3066 when you have a user. If it is compatible, then you should have a fallback for px30. > - adjusted the description > - changed the node name to video-capture > > > .../bindings/media/rockchip,rk3066-cif.yaml | 96 +++++++++++++++++++ > 1 file changed, 96 insertions(+) > create mode 100644 Documentation/devicetree/bindings/media/rockchip,rk3066-cif.yaml > > diff --git a/Documentation/devicetree/bindings/media/rockchip,rk3066-cif.yaml b/Documentation/devicetree/bindings/media/rockchip,rk3066-cif.yaml > new file mode 100644 > index 000000000000..be69e474ed26 > --- /dev/null > +++ b/Documentation/devicetree/bindings/media/rockchip,rk3066-cif.yaml > @@ -0,0 +1,96 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/media/rockchip,rk3066-cif.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Rockchip CIF Camera Interface > + > +maintainers: > + - Mehdi Djait <mehdi.djait@bootlin.com> > + > +description: | Don't need '|' > + CIF is a camera interface present on some rockchip SoCs. It > + receives the data from Camera sensor or CCIR656 encoder and > + transfers it into system main memory by AXI bus. Wrap lines at 80. > + > +properties: > + compatible: > + enum: > + - rockchip,rk3066-cif > + - rockchip,px30-vip > + > + reg: > + maxItems: 1 > + > + interrupts: > + maxItems: 1 > + > + clocks: > + items: > + - description: ACLK > + - description: HCLK > + - description: PCLK > + > + clock-names: > + items: > + - const: aclk > + - const: hclk > + - const: pclk > + > + resets: > + items: > + - description: AXI > + - description: AHB > + - description: PCLK IN > + > + reset-names: > + items: > + - const: axi > + - const: ahb > + - const: pclkin > + > + power-domains: > + maxItems: 1 > + > + port: > + $ref: /schemas/graph.yaml#/properties/port > + description: A connection to a sensor or decoder > + > +required: > + - compatible > + - reg > + - interrupts > + - clocks > + - port > + > +additionalProperties: false > + > +examples: > + - | > + #include <dt-bindings/interrupt-controller/arm-gic.h> > + #include <dt-bindings/clock/px30-cru.h> > + #include <dt-bindings/power/px30-power.h> > + > + parent { > + #address-cells = <2>; > + #size-cells = <2>; > + > + video-capture@ff490000 { > + compatible = "rockchip,px30-vip"; > + reg = <0x0 0xff490000 0x0 0x200>; > + interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&cru ACLK_CIF>, <&cru HCLK_CIF>, <&cru PCLK_CIF>; > + clock-names = "aclk", "hclk", "pclk"; > + resets = <&cru SRST_CIF_A>, <&cru SRST_CIF_H>, <&cru SRST_CIF_PCLKIN>; > + reset-names = "axi", "ahb", "pclkin"; > + power-domains = <&power PX30_PD_VI>; > + > + port { > + endpoint { > + remote-endpoint = <&tw9900_out>; > + }; > + }; > + }; > + }; > +... > -- > 2.41.0 >
Le 31/10/2023 à 10:33, Mehdi Djait a écrit : > Hello Christophe, > > On Mon, Oct 30, 2023 at 01:47:17PM +0100, Christophe JAILLET wrote: >>> + /* Create & register platform subdev. */ >>> + ret = cif_register_stream_vdev(cif_dev); >>> + if (ret < 0) >>> + goto err_unreg_media_dev; >>> + >>> + ret = cif_subdev_notifier(cif_dev); >>> + if (ret < 0) { >>> + v4l2_err(&cif_dev->v4l2_dev, >>> + "Failed to register subdev notifier(%d)\n", ret); >>> + cif_unregister_stream_vdev(cif_dev); >>> + goto err_unreg_media_dev; >> >> Should there be another label with cif_unregister_stream_vdev(cif_dev); if >> an error occurs here? >> >> CJ > > cif_subdev_notifier() is the last function call in the probe with error > handling. So it will undo the last successful register: > cif_register_stream_vdev and use the goto to unregister the rest. Ah, I didn't see the cif_unregister_stream_vdev() call here. Sorry for the noise. > > I can add a label err_unreg_stream_vdev but it will be only used in the > error handling of cif_subdev_notifier() and I don't see the benefit. The main benefit is to be more consistent in the way the error path is written, and to be more future proof. CJ > > -- > Kind Regards > Mehdi Djait > >>> + } >>> + >>> + cif_set_default_format(cif_dev); >>> + pm_runtime_enable(&pdev->dev); >>> + >>> + return 0; >>> + >>> +err_unreg_media_dev: >>> + media_device_unregister(&cif_dev->media_dev); >>> +err_unreg_v4l2_dev: >>> + v4l2_device_unregister(&cif_dev->v4l2_dev); >>> + return ret; >>> +} >