[media] sh-mobile-ceu-driver: support max width and height in DT
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Mon, 17 Sep 2012 10:48:33 +0000 (07:48 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 21 Jun 2013 19:25:08 +0000 (16:25 -0300)
Some CEU implementations have non-standard (larger) maximum supported
width and height values. Add two OF properties to specify them.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Documentation/devicetree/bindings/media/sh_mobile_ceu.txt [new file with mode: 0644]
drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c

diff --git a/Documentation/devicetree/bindings/media/sh_mobile_ceu.txt b/Documentation/devicetree/bindings/media/sh_mobile_ceu.txt
new file mode 100644 (file)
index 0000000..1ce4e46
--- /dev/null
@@ -0,0 +1,18 @@
+Bindings, specific for the sh_mobile_ceu_camera.c driver:
+ - compatible: Should be "renesas,sh-mobile-ceu"
+ - reg: register base and size
+ - interrupts: the interrupt number
+ - interrupt-parent: the interrupt controller
+ - renesas,max-width: maximum image width, supported on this SoC
+ - renesas,max-height: maximum image height, supported on this SoC
+
+Example:
+
+ceu0: ceu@0xfe910000 {
+       compatible = "renesas,sh-mobile-ceu";
+       reg = <0xfe910000 0xa0>;
+       interrupt-parent = <&intcs>;
+       interrupts = <0x880>;
+       renesas,max-width = <8188>;
+       renesas,max-height = <8188>;
+};
index fcc13d8eb0701a4e15dad01cced9f750dbf4cdbd..b0f0995fc80b98069ab61a51ea8331068f643d9a 100644 (file)
@@ -2116,11 +2116,30 @@ static int sh_mobile_ceu_probe(struct platform_device *pdev)
 
        /* TODO: implement per-device bus flags */
        if (pcdev->pdata) {
-               pcdev->max_width = pcdev->pdata->max_width ? : 2560;
-               pcdev->max_height = pcdev->pdata->max_height ? : 1920;
+               pcdev->max_width = pcdev->pdata->max_width;
+               pcdev->max_height = pcdev->pdata->max_height;
                pcdev->flags = pcdev->pdata->flags;
        }
 
+       if (!pcdev->max_width) {
+               unsigned int v;
+               err = of_property_read_u32(pdev->dev.of_node, "renesas,max-width", &v);
+               if (!err)
+                       pcdev->max_width = v;
+
+               if (!pcdev->max_width)
+                       pcdev->max_width = 2560;
+       }
+       if (!pcdev->max_height) {
+               unsigned int v;
+               err = of_property_read_u32(pdev->dev.of_node, "renesas,max-height", &v);
+               if (!err)
+                       pcdev->max_height = v;
+
+               if (!pcdev->max_height)
+                       pcdev->max_height = 1920;
+       }
+
        base = devm_ioremap_resource(&pdev->dev, res);
        if (IS_ERR(base))
                return PTR_ERR(base);