* [PATCH v6 1/3] media: i2c: ov772x: Parse endpoint properties
2020-09-17 17:42 [PATCH v6 0/3] media: i2c: ov772x: Enable BT.656 mode and test pattern support Lad Prabhakar
@ 2020-09-17 17:42 ` Lad Prabhakar
2020-09-30 10:30 ` Jacopo Mondi
2020-09-30 11:45 ` Sakari Ailus
2020-09-17 17:42 ` [PATCH v6 2/3] media: i2c: ov772x: Add support for BT.656 mode Lad Prabhakar
2020-09-17 17:42 ` [PATCH v6 3/3] media: i2c: ov772x: Add test pattern control Lad Prabhakar
2 siblings, 2 replies; 9+ messages in thread
From: Lad Prabhakar @ 2020-09-17 17:42 UTC (permalink / raw)
To: Jacopo Mondi, Sakari Ailus, Hans Verkuil, Laurent Pinchart,
Mauro Carvalho Chehab
Cc: linux-media, linux-kernel, linux-renesas-soc, Lad Prabhakar,
Biju Das, Lad, Prabhakar
Parse endpoint properties using v4l2_fwnode_endpoint_alloc_parse()
to determine the bus type and store it in the driver structure.
Set bus_type to V4L2_MBUS_PARALLEL as it's the only supported one
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
drivers/media/i2c/ov772x.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/drivers/media/i2c/ov772x.c b/drivers/media/i2c/ov772x.c
index 2cc6a678069a..f61a3f09ad64 100644
--- a/drivers/media/i2c/ov772x.c
+++ b/drivers/media/i2c/ov772x.c
@@ -31,6 +31,7 @@
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-event.h>
+#include <media/v4l2-fwnode.h>
#include <media/v4l2-image-sizes.h>
#include <media/v4l2-subdev.h>
@@ -434,6 +435,7 @@ struct ov772x_priv {
#ifdef CONFIG_MEDIA_CONTROLLER
struct media_pad pad;
#endif
+ enum v4l2_mbus_type bus_type;
};
/*
@@ -1348,6 +1350,34 @@ static const struct v4l2_subdev_ops ov772x_subdev_ops = {
.pad = &ov772x_subdev_pad_ops,
};
+static int ov772x_parse_dt(struct i2c_client *client,
+ struct ov772x_priv *priv)
+{
+ struct v4l2_fwnode_endpoint bus_cfg;
+ struct fwnode_handle *ep;
+ int ret;
+
+ ep = fwnode_graph_get_next_endpoint(dev_fwnode(&client->dev),
+ NULL);
+ if (!ep) {
+ dev_err(&client->dev, "Endpoint node not found\n");
+ return -EINVAL;
+ }
+
+ bus_cfg.bus_type = V4L2_MBUS_PARALLEL;
+ ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
+ if (ret)
+ goto error_fwnode_put;
+
+ priv->bus_type = bus_cfg.bus_type;
+ v4l2_fwnode_endpoint_free(&bus_cfg);
+
+error_fwnode_put:
+ fwnode_handle_put(ep);
+
+ return ret;
+}
+
/*
* i2c_driver function
*/
@@ -1415,6 +1445,10 @@ static int ov772x_probe(struct i2c_client *client)
goto error_clk_put;
}
+ ret = ov772x_parse_dt(client, priv);
+ if (ret)
+ goto error_clk_put;
+
ret = ov772x_video_probe(priv);
if (ret < 0)
goto error_gpio_put;
--
2.17.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v6 1/3] media: i2c: ov772x: Parse endpoint properties
2020-09-17 17:42 ` [PATCH v6 1/3] media: i2c: ov772x: Parse endpoint properties Lad Prabhakar
@ 2020-09-30 10:30 ` Jacopo Mondi
2020-09-30 11:45 ` Sakari Ailus
1 sibling, 0 replies; 9+ messages in thread
From: Jacopo Mondi @ 2020-09-30 10:30 UTC (permalink / raw)
To: Lad Prabhakar
Cc: Sakari Ailus, Hans Verkuil, Laurent Pinchart,
Mauro Carvalho Chehab, linux-media, linux-kernel,
linux-renesas-soc, Biju Das, Lad, Prabhakar
Hi
On Thu, Sep 17, 2020 at 06:42:22PM +0100, Lad Prabhakar wrote:
> Parse endpoint properties using v4l2_fwnode_endpoint_alloc_parse()
> to determine the bus type and store it in the driver structure.
>
> Set bus_type to V4L2_MBUS_PARALLEL as it's the only supported one
>
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Looks good!
Reviewed-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
Thanks
j
> ---
> drivers/media/i2c/ov772x.c | 34 ++++++++++++++++++++++++++++++++++
> 1 file changed, 34 insertions(+)
>
> diff --git a/drivers/media/i2c/ov772x.c b/drivers/media/i2c/ov772x.c
> index 2cc6a678069a..f61a3f09ad64 100644
> --- a/drivers/media/i2c/ov772x.c
> +++ b/drivers/media/i2c/ov772x.c
> @@ -31,6 +31,7 @@
> #include <media/v4l2-ctrls.h>
> #include <media/v4l2-device.h>
> #include <media/v4l2-event.h>
> +#include <media/v4l2-fwnode.h>
> #include <media/v4l2-image-sizes.h>
> #include <media/v4l2-subdev.h>
>
> @@ -434,6 +435,7 @@ struct ov772x_priv {
> #ifdef CONFIG_MEDIA_CONTROLLER
> struct media_pad pad;
> #endif
> + enum v4l2_mbus_type bus_type;
> };
>
> /*
> @@ -1348,6 +1350,34 @@ static const struct v4l2_subdev_ops ov772x_subdev_ops = {
> .pad = &ov772x_subdev_pad_ops,
> };
>
> +static int ov772x_parse_dt(struct i2c_client *client,
> + struct ov772x_priv *priv)
> +{
> + struct v4l2_fwnode_endpoint bus_cfg;
> + struct fwnode_handle *ep;
> + int ret;
> +
> + ep = fwnode_graph_get_next_endpoint(dev_fwnode(&client->dev),
> + NULL);
> + if (!ep) {
> + dev_err(&client->dev, "Endpoint node not found\n");
> + return -EINVAL;
> + }
> +
> + bus_cfg.bus_type = V4L2_MBUS_PARALLEL;
> + ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
> + if (ret)
> + goto error_fwnode_put;
> +
> + priv->bus_type = bus_cfg.bus_type;
> + v4l2_fwnode_endpoint_free(&bus_cfg);
> +
> +error_fwnode_put:
> + fwnode_handle_put(ep);
> +
> + return ret;
> +}
> +
> /*
> * i2c_driver function
> */
> @@ -1415,6 +1445,10 @@ static int ov772x_probe(struct i2c_client *client)
> goto error_clk_put;
> }
>
> + ret = ov772x_parse_dt(client, priv);
> + if (ret)
> + goto error_clk_put;
> +
> ret = ov772x_video_probe(priv);
> if (ret < 0)
> goto error_gpio_put;
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v6 1/3] media: i2c: ov772x: Parse endpoint properties
2020-09-17 17:42 ` [PATCH v6 1/3] media: i2c: ov772x: Parse endpoint properties Lad Prabhakar
2020-09-30 10:30 ` Jacopo Mondi
@ 2020-09-30 11:45 ` Sakari Ailus
2020-09-30 12:19 ` Lad, Prabhakar
1 sibling, 1 reply; 9+ messages in thread
From: Sakari Ailus @ 2020-09-30 11:45 UTC (permalink / raw)
To: Lad Prabhakar
Cc: Jacopo Mondi, Hans Verkuil, Laurent Pinchart,
Mauro Carvalho Chehab, linux-media, linux-kernel,
linux-renesas-soc, Biju Das, Lad, Prabhakar
Hi Prabhakar,
On Thu, Sep 17, 2020 at 06:42:22PM +0100, Lad Prabhakar wrote:
> Parse endpoint properties using v4l2_fwnode_endpoint_alloc_parse()
> to determine the bus type and store it in the driver structure.
>
> Set bus_type to V4L2_MBUS_PARALLEL as it's the only supported one
>
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> ---
> drivers/media/i2c/ov772x.c | 34 ++++++++++++++++++++++++++++++++++
> 1 file changed, 34 insertions(+)
>
> diff --git a/drivers/media/i2c/ov772x.c b/drivers/media/i2c/ov772x.c
> index 2cc6a678069a..f61a3f09ad64 100644
> --- a/drivers/media/i2c/ov772x.c
> +++ b/drivers/media/i2c/ov772x.c
> @@ -31,6 +31,7 @@
> #include <media/v4l2-ctrls.h>
> #include <media/v4l2-device.h>
> #include <media/v4l2-event.h>
> +#include <media/v4l2-fwnode.h>
> #include <media/v4l2-image-sizes.h>
> #include <media/v4l2-subdev.h>
>
> @@ -434,6 +435,7 @@ struct ov772x_priv {
> #ifdef CONFIG_MEDIA_CONTROLLER
> struct media_pad pad;
> #endif
> + enum v4l2_mbus_type bus_type;
> };
>
> /*
> @@ -1348,6 +1350,34 @@ static const struct v4l2_subdev_ops ov772x_subdev_ops = {
> .pad = &ov772x_subdev_pad_ops,
> };
>
> +static int ov772x_parse_dt(struct i2c_client *client,
> + struct ov772x_priv *priv)
> +{
> + struct v4l2_fwnode_endpoint bus_cfg;
> + struct fwnode_handle *ep;
> + int ret;
> +
> + ep = fwnode_graph_get_next_endpoint(dev_fwnode(&client->dev),
> + NULL);
> + if (!ep) {
> + dev_err(&client->dev, "Endpoint node not found\n");
> + return -EINVAL;
> + }
> +
> + bus_cfg.bus_type = V4L2_MBUS_PARALLEL;
Please zero the entire struct, i.e. do this assignment in the declaration.
You can also use v4l2_fwnode_endpoint_parse() if you're not using the link
frequencies --- sensor drivers generally should but you could only add them
as optional at this point (out of scope of this patch).
> + ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
> + if (ret)
> + goto error_fwnode_put;
> +
> + priv->bus_type = bus_cfg.bus_type;
> + v4l2_fwnode_endpoint_free(&bus_cfg);
> +
> +error_fwnode_put:
> + fwnode_handle_put(ep);
> +
> + return ret;
> +}
> +
> /*
> * i2c_driver function
> */
> @@ -1415,6 +1445,10 @@ static int ov772x_probe(struct i2c_client *client)
> goto error_clk_put;
> }
>
> + ret = ov772x_parse_dt(client, priv);
> + if (ret)
> + goto error_clk_put;
> +
> ret = ov772x_video_probe(priv);
> if (ret < 0)
> goto error_gpio_put;
> --
> 2.17.1
>
--
Sakari Ailus
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v6 1/3] media: i2c: ov772x: Parse endpoint properties
2020-09-30 11:45 ` Sakari Ailus
@ 2020-09-30 12:19 ` Lad, Prabhakar
2020-10-01 19:34 ` Sakari Ailus
0 siblings, 1 reply; 9+ messages in thread
From: Lad, Prabhakar @ 2020-09-30 12:19 UTC (permalink / raw)
To: Sakari Ailus
Cc: Lad Prabhakar, Jacopo Mondi, Hans Verkuil, Laurent Pinchart,
Mauro Carvalho Chehab, linux-media, LKML, Linux-Renesas,
Biju Das
HI Sakari,
Thank you for the review.
On Wed, Sep 30, 2020 at 12:45 PM Sakari Ailus
<sakari.ailus@linux.intel.com> wrote:
>
> Hi Prabhakar,
>
> On Thu, Sep 17, 2020 at 06:42:22PM +0100, Lad Prabhakar wrote:
> > Parse endpoint properties using v4l2_fwnode_endpoint_alloc_parse()
> > to determine the bus type and store it in the driver structure.
> >
> > Set bus_type to V4L2_MBUS_PARALLEL as it's the only supported one
> >
> > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> > ---
> > drivers/media/i2c/ov772x.c | 34 ++++++++++++++++++++++++++++++++++
> > 1 file changed, 34 insertions(+)
> >
> > diff --git a/drivers/media/i2c/ov772x.c b/drivers/media/i2c/ov772x.c
> > index 2cc6a678069a..f61a3f09ad64 100644
> > --- a/drivers/media/i2c/ov772x.c
> > +++ b/drivers/media/i2c/ov772x.c
> > @@ -31,6 +31,7 @@
> > #include <media/v4l2-ctrls.h>
> > #include <media/v4l2-device.h>
> > #include <media/v4l2-event.h>
> > +#include <media/v4l2-fwnode.h>
> > #include <media/v4l2-image-sizes.h>
> > #include <media/v4l2-subdev.h>
> >
> > @@ -434,6 +435,7 @@ struct ov772x_priv {
> > #ifdef CONFIG_MEDIA_CONTROLLER
> > struct media_pad pad;
> > #endif
> > + enum v4l2_mbus_type bus_type;
> > };
> >
> > /*
> > @@ -1348,6 +1350,34 @@ static const struct v4l2_subdev_ops ov772x_subdev_ops = {
> > .pad = &ov772x_subdev_pad_ops,
> > };
> >
> > +static int ov772x_parse_dt(struct i2c_client *client,
> > + struct ov772x_priv *priv)
> > +{
> > + struct v4l2_fwnode_endpoint bus_cfg;
> > + struct fwnode_handle *ep;
> > + int ret;
> > +
> > + ep = fwnode_graph_get_next_endpoint(dev_fwnode(&client->dev),
> > + NULL);
> > + if (!ep) {
> > + dev_err(&client->dev, "Endpoint node not found\n");
> > + return -EINVAL;
> > + }
> > +
> > + bus_cfg.bus_type = V4L2_MBUS_PARALLEL;
>
> Please zero the entire struct, i.e. do this assignment in the declaration.
>
Agreed, but instead at the declaration I would prefer here as below,
since patch 2/3 has a comment related to backward compatibility with
the bindings. Is this OK with you ?
bus_cfg = (struct v4l2_fwnode_endpoint)
{ .bus_type = V4L2_MBUS_PARALLEL };
> You can also use v4l2_fwnode_endpoint_parse() if you're not using the link
> frequencies --- sensor drivers generally should but you could only add them
> as optional at this point (out of scope of this patch).
>
will stick with this for now :)
Cheers,
Prabhakar
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v6 1/3] media: i2c: ov772x: Parse endpoint properties
2020-09-30 12:19 ` Lad, Prabhakar
@ 2020-10-01 19:34 ` Sakari Ailus
0 siblings, 0 replies; 9+ messages in thread
From: Sakari Ailus @ 2020-10-01 19:34 UTC (permalink / raw)
To: Lad, Prabhakar
Cc: Lad Prabhakar, Jacopo Mondi, Hans Verkuil, Laurent Pinchart,
Mauro Carvalho Chehab, linux-media, LKML, Linux-Renesas,
Biju Das
On Wed, Sep 30, 2020 at 01:19:40PM +0100, Lad, Prabhakar wrote:
> HI Sakari,
>
> Thank you for the review.
>
> On Wed, Sep 30, 2020 at 12:45 PM Sakari Ailus
> <sakari.ailus@linux.intel.com> wrote:
> >
> > Hi Prabhakar,
> >
> > On Thu, Sep 17, 2020 at 06:42:22PM +0100, Lad Prabhakar wrote:
> > > Parse endpoint properties using v4l2_fwnode_endpoint_alloc_parse()
> > > to determine the bus type and store it in the driver structure.
> > >
> > > Set bus_type to V4L2_MBUS_PARALLEL as it's the only supported one
> > >
> > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> > > ---
> > > drivers/media/i2c/ov772x.c | 34 ++++++++++++++++++++++++++++++++++
> > > 1 file changed, 34 insertions(+)
> > >
> > > diff --git a/drivers/media/i2c/ov772x.c b/drivers/media/i2c/ov772x.c
> > > index 2cc6a678069a..f61a3f09ad64 100644
> > > --- a/drivers/media/i2c/ov772x.c
> > > +++ b/drivers/media/i2c/ov772x.c
> > > @@ -31,6 +31,7 @@
> > > #include <media/v4l2-ctrls.h>
> > > #include <media/v4l2-device.h>
> > > #include <media/v4l2-event.h>
> > > +#include <media/v4l2-fwnode.h>
> > > #include <media/v4l2-image-sizes.h>
> > > #include <media/v4l2-subdev.h>
> > >
> > > @@ -434,6 +435,7 @@ struct ov772x_priv {
> > > #ifdef CONFIG_MEDIA_CONTROLLER
> > > struct media_pad pad;
> > > #endif
> > > + enum v4l2_mbus_type bus_type;
> > > };
> > >
> > > /*
> > > @@ -1348,6 +1350,34 @@ static const struct v4l2_subdev_ops ov772x_subdev_ops = {
> > > .pad = &ov772x_subdev_pad_ops,
> > > };
> > >
> > > +static int ov772x_parse_dt(struct i2c_client *client,
> > > + struct ov772x_priv *priv)
> > > +{
> > > + struct v4l2_fwnode_endpoint bus_cfg;
> > > + struct fwnode_handle *ep;
> > > + int ret;
> > > +
> > > + ep = fwnode_graph_get_next_endpoint(dev_fwnode(&client->dev),
> > > + NULL);
> > > + if (!ep) {
> > > + dev_err(&client->dev, "Endpoint node not found\n");
> > > + return -EINVAL;
> > > + }
> > > +
> > > + bus_cfg.bus_type = V4L2_MBUS_PARALLEL;
> >
> > Please zero the entire struct, i.e. do this assignment in the declaration.
> >
> Agreed, but instead at the declaration I would prefer here as below,
> since patch 2/3 has a comment related to backward compatibility with
> the bindings. Is this OK with you ?
> bus_cfg = (struct v4l2_fwnode_endpoint)
> { .bus_type = V4L2_MBUS_PARALLEL };
Why not in variable declaration?
--
Sakari Ailus
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v6 2/3] media: i2c: ov772x: Add support for BT.656 mode
2020-09-17 17:42 [PATCH v6 0/3] media: i2c: ov772x: Enable BT.656 mode and test pattern support Lad Prabhakar
2020-09-17 17:42 ` [PATCH v6 1/3] media: i2c: ov772x: Parse endpoint properties Lad Prabhakar
@ 2020-09-17 17:42 ` Lad Prabhakar
2020-09-30 10:32 ` Jacopo Mondi
2020-09-17 17:42 ` [PATCH v6 3/3] media: i2c: ov772x: Add test pattern control Lad Prabhakar
2 siblings, 1 reply; 9+ messages in thread
From: Lad Prabhakar @ 2020-09-17 17:42 UTC (permalink / raw)
To: Jacopo Mondi, Sakari Ailus, Hans Verkuil, Laurent Pinchart,
Mauro Carvalho Chehab
Cc: linux-media, linux-kernel, linux-renesas-soc, Lad Prabhakar,
Biju Das, Lad, Prabhakar
Add support to read the bus-type for V4L2_MBUS_BT656 and enable BT.656
mode in the sensor if needed.
For backward compatibility with older DTS where the bus-type property was
not mandatory, assume V4L2_MBUS_PARALLEL as it was the only supported bus
at the time. v4l2_fwnode_endpoint_alloc_parse() will not fail if
'bus-type' is not specified.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/media/i2c/ov772x.c | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/drivers/media/i2c/ov772x.c b/drivers/media/i2c/ov772x.c
index f61a3f09ad64..fe48b5881ad9 100644
--- a/drivers/media/i2c/ov772x.c
+++ b/drivers/media/i2c/ov772x.c
@@ -583,6 +583,13 @@ static int ov772x_s_stream(struct v4l2_subdev *sd, int enable)
if (priv->streaming == enable)
goto done;
+ if (priv->bus_type == V4L2_MBUS_BT656) {
+ ret = regmap_update_bits(priv->regmap, COM7, ITU656_ON_OFF,
+ enable ? ITU656_ON_OFF : ~ITU656_ON_OFF);
+ if (ret)
+ goto done;
+ }
+
ret = regmap_update_bits(priv->regmap, COM2, SOFT_SLEEP_MODE,
enable ? 0 : SOFT_SLEEP_MODE);
if (ret)
@@ -1364,10 +1371,22 @@ static int ov772x_parse_dt(struct i2c_client *client,
return -EINVAL;
}
+ /*
+ * For backward compatibility with older DTS where the
+ * bus-type property was not mandatory, assume
+ * V4L2_MBUS_PARALLEL as it was the only supported bus at the
+ * time. v4l2_fwnode_endpoint_alloc_parse() will not fail if
+ * 'bus-type' is not specified.
+ */
bus_cfg.bus_type = V4L2_MBUS_PARALLEL;
ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
- if (ret)
- goto error_fwnode_put;
+ if (ret) {
+ bus_cfg = (struct v4l2_fwnode_endpoint)
+ { .bus_type = V4L2_MBUS_BT656 };
+ ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
+ if (ret)
+ goto error_fwnode_put;
+ }
priv->bus_type = bus_cfg.bus_type;
v4l2_fwnode_endpoint_free(&bus_cfg);
--
2.17.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v6 2/3] media: i2c: ov772x: Add support for BT.656 mode
2020-09-17 17:42 ` [PATCH v6 2/3] media: i2c: ov772x: Add support for BT.656 mode Lad Prabhakar
@ 2020-09-30 10:32 ` Jacopo Mondi
0 siblings, 0 replies; 9+ messages in thread
From: Jacopo Mondi @ 2020-09-30 10:32 UTC (permalink / raw)
To: Lad Prabhakar
Cc: Sakari Ailus, Hans Verkuil, Laurent Pinchart,
Mauro Carvalho Chehab, linux-media, linux-kernel,
linux-renesas-soc, Biju Das, Lad, Prabhakar
Hello,
On Thu, Sep 17, 2020 at 06:42:23PM +0100, Lad Prabhakar wrote:
> Add support to read the bus-type for V4L2_MBUS_BT656 and enable BT.656
> mode in the sensor if needed.
>
> For backward compatibility with older DTS where the bus-type property was
> not mandatory, assume V4L2_MBUS_PARALLEL as it was the only supported bus
> at the time. v4l2_fwnode_endpoint_alloc_parse() will not fail if
> 'bus-type' is not specified.
>
> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
Thanks
j
> ---
> drivers/media/i2c/ov772x.c | 23 +++++++++++++++++++++--
> 1 file changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/i2c/ov772x.c b/drivers/media/i2c/ov772x.c
> index f61a3f09ad64..fe48b5881ad9 100644
> --- a/drivers/media/i2c/ov772x.c
> +++ b/drivers/media/i2c/ov772x.c
> @@ -583,6 +583,13 @@ static int ov772x_s_stream(struct v4l2_subdev *sd, int enable)
> if (priv->streaming == enable)
> goto done;
>
> + if (priv->bus_type == V4L2_MBUS_BT656) {
> + ret = regmap_update_bits(priv->regmap, COM7, ITU656_ON_OFF,
> + enable ? ITU656_ON_OFF : ~ITU656_ON_OFF);
> + if (ret)
> + goto done;
> + }
> +
> ret = regmap_update_bits(priv->regmap, COM2, SOFT_SLEEP_MODE,
> enable ? 0 : SOFT_SLEEP_MODE);
> if (ret)
> @@ -1364,10 +1371,22 @@ static int ov772x_parse_dt(struct i2c_client *client,
> return -EINVAL;
> }
>
> + /*
> + * For backward compatibility with older DTS where the
> + * bus-type property was not mandatory, assume
> + * V4L2_MBUS_PARALLEL as it was the only supported bus at the
> + * time. v4l2_fwnode_endpoint_alloc_parse() will not fail if
> + * 'bus-type' is not specified.
> + */
> bus_cfg.bus_type = V4L2_MBUS_PARALLEL;
> ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
> - if (ret)
> - goto error_fwnode_put;
> + if (ret) {
> + bus_cfg = (struct v4l2_fwnode_endpoint)
> + { .bus_type = V4L2_MBUS_BT656 };
> + ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
> + if (ret)
> + goto error_fwnode_put;
> + }
>
> priv->bus_type = bus_cfg.bus_type;
> v4l2_fwnode_endpoint_free(&bus_cfg);
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v6 3/3] media: i2c: ov772x: Add test pattern control
2020-09-17 17:42 [PATCH v6 0/3] media: i2c: ov772x: Enable BT.656 mode and test pattern support Lad Prabhakar
2020-09-17 17:42 ` [PATCH v6 1/3] media: i2c: ov772x: Parse endpoint properties Lad Prabhakar
2020-09-17 17:42 ` [PATCH v6 2/3] media: i2c: ov772x: Add support for BT.656 mode Lad Prabhakar
@ 2020-09-17 17:42 ` Lad Prabhakar
2 siblings, 0 replies; 9+ messages in thread
From: Lad Prabhakar @ 2020-09-17 17:42 UTC (permalink / raw)
To: Jacopo Mondi, Sakari Ailus, Hans Verkuil, Laurent Pinchart,
Mauro Carvalho Chehab
Cc: linux-media, linux-kernel, linux-renesas-soc, Lad Prabhakar,
Biju Das, Lad, Prabhakar
Add support for test pattern control supported by the sensor.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
---
drivers/media/i2c/ov772x.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/drivers/media/i2c/ov772x.c b/drivers/media/i2c/ov772x.c
index fe48b5881ad9..c3d36e003cad 100644
--- a/drivers/media/i2c/ov772x.c
+++ b/drivers/media/i2c/ov772x.c
@@ -227,7 +227,7 @@
/* COM3 */
#define SWAP_MASK (SWAP_RGB | SWAP_YUV | SWAP_ML)
-#define IMG_MASK (VFLIP_IMG | HFLIP_IMG)
+#define IMG_MASK (VFLIP_IMG | HFLIP_IMG | SCOLOR_TEST)
#define VFLIP_IMG 0x80 /* Vertical flip image ON/OFF selection */
#define HFLIP_IMG 0x40 /* Horizontal mirror image ON/OFF selection */
@@ -425,6 +425,7 @@ struct ov772x_priv {
const struct ov772x_win_size *win;
struct v4l2_ctrl *vflip_ctrl;
struct v4l2_ctrl *hflip_ctrl;
+ unsigned int test_pattern;
/* band_filter = COM8[5] ? 256 - BDBASE : 0 */
struct v4l2_ctrl *band_filter_ctrl;
unsigned int fps;
@@ -540,6 +541,11 @@ static const struct ov772x_win_size ov772x_win_sizes[] = {
},
};
+static const char * const ov772x_test_pattern_menu[] = {
+ "Disabled",
+ "Vertical Color Bar Type 1",
+};
+
/*
* frame rate settings lists
*/
@@ -809,6 +815,9 @@ static int ov772x_s_ctrl(struct v4l2_ctrl *ctrl)
}
return ret;
+ case V4L2_CID_TEST_PATTERN:
+ priv->test_pattern = ctrl->val;
+ return 0;
}
return -EINVAL;
@@ -1107,6 +1116,8 @@ static int ov772x_set_params(struct ov772x_priv *priv,
val ^= VFLIP_IMG;
if (priv->hflip_ctrl->val)
val ^= HFLIP_IMG;
+ if (priv->test_pattern)
+ val |= SCOLOR_TEST;
ret = regmap_update_bits(priv->regmap, COM3, SWAP_MASK | IMG_MASK, val);
if (ret < 0)
@@ -1443,6 +1454,10 @@ static int ov772x_probe(struct i2c_client *client)
priv->band_filter_ctrl = v4l2_ctrl_new_std(&priv->hdl, &ov772x_ctrl_ops,
V4L2_CID_BAND_STOP_FILTER,
0, 256, 1, 0);
+ v4l2_ctrl_new_std_menu_items(&priv->hdl, &ov772x_ctrl_ops,
+ V4L2_CID_TEST_PATTERN,
+ ARRAY_SIZE(ov772x_test_pattern_menu) - 1,
+ 0, 0, ov772x_test_pattern_menu);
priv->subdev.ctrl_handler = &priv->hdl;
if (priv->hdl.error) {
ret = priv->hdl.error;
--
2.17.1
^ permalink raw reply related [flat|nested] 9+ messages in thread