From: Marco Felsch <m.felsch@pengutronix.de>
To: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Cc: mchehab@kernel.org, p.zabel@pengutronix.de,
afshin.nasser@gmail.com, javierm@redhat.com,
sakari.ailus@linux.intel.com, laurent.pinchart@ideasonboard.com,
linux-media@vger.kernel.org, kernel@pengutronix.de
Subject: Re: [PATCH 06/22] [media] tvp5150: add FORMAT_TRY support for get/set selection handlers
Date: Thu, 9 Aug 2018 15:52:05 +0200 [thread overview]
Message-ID: <20180809135205.drqolr752nbv7bug@pengutronix.de> (raw)
In-Reply-To: <20180730210123.7f1f2b57@coco.lan>
Hi Mauro,
during my work for a v2 series, I prepared two patches which fix this in a
common way. The first will fix the compiler break and the second will
fix a missing dependency, since those helper functions require the
media_entity which is only available if MEDIA_CONTROLLER is enabled.
I attached both inline as an RFC, can give me your feedback?
I removed the devicetree guys to aviod noise.
On 18-07-30 21:01, Mauro Carvalho Chehab wrote:
> Em Thu, 28 Jun 2018 18:20:38 +0200
> Marco Felsch <m.felsch@pengutronix.de> escreveu:
>
> > Since commit 10d5509c8d50 ("[media] v4l2: remove g/s_crop from video ops")
> > the 'which' field for set/get_selection must be FORMAT_ACTIVE. There is
> > no way to try different selections. The patch adds a helper function to
> > select the correct selection memory space (sub-device file handle or
> > driver state) which will be set/returned.
> >
> > The TVP5150 AVID will be updated if the 'which' field is FORMAT_ACTIVE
> > and the requested selection rectangle differs from the already set one.
> >
> > Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
> > ---
> > drivers/media/i2c/tvp5150.c | 107 ++++++++++++++++++++++++------------
> > 1 file changed, 73 insertions(+), 34 deletions(-)
> >
> > diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
> > index d150487cc2d1..29eaf8166f25 100644
> > --- a/drivers/media/i2c/tvp5150.c
> > +++ b/drivers/media/i2c/tvp5150.c
> > @@ -18,6 +18,7 @@
> > #include <media/v4l2-ctrls.h>
> > #include <media/v4l2-fwnode.h>
> > #include <media/v4l2-mc.h>
> > +#include <media/v4l2-rect.h>
> >
> > #include "tvp5150_reg.h"
> >
> > @@ -846,20 +847,38 @@ static v4l2_std_id tvp5150_read_std(struct v4l2_subdev *sd)
> > }
> > }
> >
> > +static struct v4l2_rect *
> > +__tvp5150_get_pad_crop(struct tvp5150 *decoder,
> > + struct v4l2_subdev_pad_config *cfg, unsigned int pad,
> > + enum v4l2_subdev_format_whence which)
> > +{
> > + switch (which) {
> > + case V4L2_SUBDEV_FORMAT_TRY:
> > + return v4l2_subdev_get_try_crop(&decoder->sd, cfg, pad);
>
> This is not ok. It causes compilation breakage if the subdev API is not
> selected:
>
> drivers/media/i2c/tvp5150.c: In function ‘__tvp5150_get_pad_crop’:
> drivers/media/i2c/tvp5150.c:857:10: error: implicit declaration of function ‘v4l2_subdev_get_try_crop’; did you mean ‘v4l2_subdev_has_op’? [-Werror=implicit-function-declaration]
> return v4l2_subdev_get_try_crop(&decoder->sd, cfg, pad);
> ^~~~~~~~~~~~~~~~~~~~~~~~
> v4l2_subdev_has_op
> drivers/media/i2c/tvp5150.c:857:10: warning: returning ‘int’ from a function with return type ‘struct v4l2_rect *’ makes pointer from integer without a cast [-Wint-conversion]
> return v4l2_subdev_get_try_crop(&decoder->sd, cfg, pad);
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> The logic should keep working both with and without subdev API.
>
[ snip ]
>From d87554df5d1c6d609e44852a1cb998a6f5d99601 Mon Sep 17 00:00:00 2001
From: Marco Felsch <m.felsch@pengutronix.de>
Date: Wed, 8 Aug 2018 14:27:46 +0200
Subject: [RFC] [media] v4l2-subdev: add stubs for v4l2_subdev_get_try_*
In case of missing CONFIG_VIDEO_V4L2_SUBDEV_API those helpers aren't
available. So each driver have to add ifdefs around those helpers or
add the CONFIG_VIDEO_V4L2_SUBDEV_API as dependcy.
Make these helpers available in case of CONFIG_VIDEO_V4L2_SUBDEV_API
isn't set to avoid ifdefs. This approach is less error prone too.
Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
---
include/media/v4l2-subdev.h | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index 9102d6ca566e..ce48f1fcf295 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -912,8 +912,6 @@ struct v4l2_subdev_fh {
#define to_v4l2_subdev_fh(fh) \
container_of(fh, struct v4l2_subdev_fh, vfh)
-#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
-
/**
* v4l2_subdev_get_try_format - ancillary routine to call
* &struct v4l2_subdev_pad_config->try_fmt
@@ -927,9 +925,13 @@ static inline struct v4l2_mbus_framefmt
struct v4l2_subdev_pad_config *cfg,
unsigned int pad)
{
+#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
if (WARN_ON(pad >= sd->entity.num_pads))
pad = 0;
return &cfg[pad].try_fmt;
+#else
+ return NULL;
+#endif
}
/**
@@ -945,9 +947,13 @@ static inline struct v4l2_rect
struct v4l2_subdev_pad_config *cfg,
unsigned int pad)
{
+#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
if (WARN_ON(pad >= sd->entity.num_pads))
pad = 0;
return &cfg[pad].try_crop;
+#else
+ return NULL;
+#endif
}
/**
@@ -963,11 +969,14 @@ static inline struct v4l2_rect
struct v4l2_subdev_pad_config *cfg,
unsigned int pad)
{
+#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
if (WARN_ON(pad >= sd->entity.num_pads))
pad = 0;
return &cfg[pad].try_compose;
-}
+#else
+ return NULL;
#endif
+}
extern const struct v4l2_file_operations v4l2_subdev_fops;
--
2.18.0
>From 6abc7599fe6bdb2b8bef84fd90417d69aafb4a33 Mon Sep 17 00:00:00 2001
From: Marco Felsch <m.felsch@pengutronix.de>
Date: Wed, 8 Aug 2018 14:47:44 +0200
Subject: [RFC] [media] v4l2-subdev: fix v4l2_subdev_get_try_* dependency
These helpers make us of the media-controller entity which is only
available if the CONFIG_MEDIA_CONTROLLER is enabled.
Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
---
include/media/v4l2-subdev.h | 100 ++++++++++++++++++------------------
1 file changed, 50 insertions(+), 50 deletions(-)
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index ce48f1fcf295..79c066934ad2 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -912,6 +912,56 @@ struct v4l2_subdev_fh {
#define to_v4l2_subdev_fh(fh) \
container_of(fh, struct v4l2_subdev_fh, vfh)
+extern const struct v4l2_file_operations v4l2_subdev_fops;
+
+/**
+ * v4l2_set_subdevdata - Sets V4L2 dev private device data
+ *
+ * @sd: pointer to &struct v4l2_subdev
+ * @p: pointer to the private device data to be stored.
+ */
+static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p)
+{
+ sd->dev_priv = p;
+}
+
+/**
+ * v4l2_get_subdevdata - Gets V4L2 dev private device data
+ *
+ * @sd: pointer to &struct v4l2_subdev
+ *
+ * Returns the pointer to the private device data to be stored.
+ */
+static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd)
+{
+ return sd->dev_priv;
+}
+
+/**
+ * v4l2_set_subdev_hostdata - Sets V4L2 dev private host data
+ *
+ * @sd: pointer to &struct v4l2_subdev
+ * @p: pointer to the private data to be stored.
+ */
+static inline void v4l2_set_subdev_hostdata(struct v4l2_subdev *sd, void *p)
+{
+ sd->host_priv = p;
+}
+
+/**
+ * v4l2_get_subdev_hostdata - Gets V4L2 dev private data
+ *
+ * @sd: pointer to &struct v4l2_subdev
+ *
+ * Returns the pointer to the private host data to be stored.
+ */
+static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd)
+{
+ return sd->host_priv;
+}
+
+#ifdef CONFIG_MEDIA_CONTROLLER
+
/**
* v4l2_subdev_get_try_format - ancillary routine to call
* &struct v4l2_subdev_pad_config->try_fmt
@@ -978,56 +1028,6 @@ static inline struct v4l2_rect
#endif
}
-extern const struct v4l2_file_operations v4l2_subdev_fops;
-
-/**
- * v4l2_set_subdevdata - Sets V4L2 dev private device data
- *
- * @sd: pointer to &struct v4l2_subdev
- * @p: pointer to the private device data to be stored.
- */
-static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p)
-{
- sd->dev_priv = p;
-}
-
-/**
- * v4l2_get_subdevdata - Gets V4L2 dev private device data
- *
- * @sd: pointer to &struct v4l2_subdev
- *
- * Returns the pointer to the private device data to be stored.
- */
-static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd)
-{
- return sd->dev_priv;
-}
-
-/**
- * v4l2_set_subdev_hostdata - Sets V4L2 dev private host data
- *
- * @sd: pointer to &struct v4l2_subdev
- * @p: pointer to the private data to be stored.
- */
-static inline void v4l2_set_subdev_hostdata(struct v4l2_subdev *sd, void *p)
-{
- sd->host_priv = p;
-}
-
-/**
- * v4l2_get_subdev_hostdata - Gets V4L2 dev private data
- *
- * @sd: pointer to &struct v4l2_subdev
- *
- * Returns the pointer to the private host data to be stored.
- */
-static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd)
-{
- return sd->host_priv;
-}
-
-#ifdef CONFIG_MEDIA_CONTROLLER
-
/**
* v4l2_subdev_link_validate_default - validates a media link
*
--
2.18.0
Kind regards,
Marco
next prev parent reply other threads:[~2018-08-09 16:17 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-28 16:20 [PATCH 00/21] TVP5150 fixes and new features Marco Felsch
2018-06-28 16:20 ` [PATCH 01/22] [media] tvp5150: fix width alignment during set_selection() Marco Felsch
2018-06-28 16:20 ` [PATCH 02/22] [media] tvp5150: fix switch exit in set control handler Marco Felsch
2018-06-28 16:20 ` [PATCH 03/22] [media] tvp5150: convert register access to regmap Marco Felsch
2018-06-28 16:20 ` [PATCH 04/22] [media] tvp5150: make use of regmap_update_bits Marco Felsch
2018-06-28 16:20 ` [PATCH 05/22] [media] v4l2-rect.h: add position and equal helpers Marco Felsch
2018-06-29 14:12 ` Sakari Ailus
2018-06-28 16:20 ` [PATCH 06/22] [media] tvp5150: add FORMAT_TRY support for get/set selection handlers Marco Felsch
2018-07-31 0:01 ` Mauro Carvalho Chehab
2018-08-09 13:52 ` Marco Felsch [this message]
2018-06-28 16:20 ` [PATCH 07/22] [media] tvp5150: add default format helper Marco Felsch
2018-06-28 16:20 ` [PATCH 08/22] [media] tvp5150: trigger autodetection on subdev open to reset cropping Marco Felsch
2018-06-28 16:20 ` [PATCH 09/22] [media] tvp5150: fix standard autodetection Marco Felsch
2018-06-28 16:20 ` [PATCH 10/22] [media] tvp5150: split reset/enable routine Marco Felsch
2018-06-28 16:20 ` [PATCH 11/22] [media] tvp5150: remove pin configuration from initialization tables Marco Felsch
2018-06-28 16:20 ` [PATCH 12/22] [media] tvp5150: Add sync lock interrupt handling Marco Felsch
2018-06-28 16:20 ` [PATCH 13/22] [media] tvp5150: disable output while signal not locked Marco Felsch
2018-07-30 18:00 ` Mauro Carvalho Chehab
2018-07-30 18:06 ` Mauro Carvalho Chehab
2018-07-31 6:02 ` Marco Felsch
2018-06-28 16:20 ` [PATCH 14/22] [media] tvp5150: issue source change events Marco Felsch
2018-06-28 16:20 ` [PATCH 15/22] [media] tvp5150: add sync lock/loss signal debug messages Marco Felsch
2018-06-28 16:20 ` [PATCH 16/22] [media] tvp5150: add querystd Marco Felsch
2018-07-30 18:09 ` Mauro Carvalho Chehab
2018-08-01 13:21 ` Marco Felsch
2018-08-01 14:22 ` Mauro Carvalho Chehab
2018-08-01 14:49 ` Marco Felsch
2018-08-01 15:50 ` Mauro Carvalho Chehab
2018-08-02 8:01 ` Marco Felsch
2018-08-02 9:49 ` Mauro Carvalho Chehab
2018-08-02 10:16 ` Marco Felsch
2018-08-02 14:38 ` Mauro Carvalho Chehab
2018-08-02 10:54 ` Ian Arkver
2018-08-02 11:58 ` Marco Felsch
2018-06-28 16:20 ` [PATCH 17/22] [media] tvp5150: add g_std callback Marco Felsch
2018-06-28 16:20 ` [PATCH 18/22] partial revert of "[media] tvp5150: add HW input connectors support" Marco Felsch
2018-07-03 23:19 ` Rob Herring
2018-07-30 18:18 ` Mauro Carvalho Chehab
2018-07-31 7:01 ` Marco Felsch
2018-07-31 8:52 ` Javier Martinez Canillas
2018-07-31 10:06 ` Mauro Carvalho Chehab
2018-07-31 11:26 ` Javier Martinez Canillas
2018-07-31 12:36 ` Marco Felsch
2018-07-31 12:52 ` Javier Martinez Canillas
2018-07-31 13:30 ` Marco Felsch
2018-07-31 19:56 ` Mauro Carvalho Chehab
2018-08-01 12:10 ` Marco Felsch
2018-08-01 13:32 ` Mauro Carvalho Chehab
2018-08-01 15:49 ` Marco Felsch
2018-08-01 16:23 ` Javier Martinez Canillas
2018-07-31 13:01 ` Mauro Carvalho Chehab
2018-07-31 13:22 ` Mauro Carvalho Chehab
2018-06-28 16:20 ` [PATCH 19/22] [media] tvp5150: add input source selection of_graph support Marco Felsch
2018-07-30 18:29 ` Mauro Carvalho Chehab
2018-08-08 15:29 ` Marco Felsch
2018-08-08 18:52 ` Mauro Carvalho Chehab
2018-08-09 12:55 ` Marco Felsch
2018-08-09 13:36 ` Mauro Carvalho Chehab
2018-08-09 14:35 ` Marco Felsch
2018-08-09 16:04 ` Mauro Carvalho Chehab
2018-08-09 16:34 ` Marco Felsch
2018-06-28 16:20 ` [PATCH 20/22] [media] tvp5150: Add input port connectors DT bindings Marco Felsch
2018-07-03 23:23 ` Rob Herring
2018-07-11 8:50 ` Marco Felsch
2018-08-03 7:29 ` Marco Felsch
2018-08-03 17:30 ` Mauro Carvalho Chehab
2018-08-04 9:04 ` Marco Felsch
2018-06-28 16:20 ` [PATCH 21/22] [media] tvp5150: initialize subdev before parsing device tree Marco Felsch
2018-06-28 16:20 ` [PATCH 22/22] [media] tvp5150: Change default input source selection behaviour Marco Felsch
2018-06-28 20:57 ` [PATCH 00/21] TVP5150 fixes and new features Javier Martinez Canillas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180809135205.drqolr752nbv7bug@pengutronix.de \
--to=m.felsch@pengutronix.de \
--cc=afshin.nasser@gmail.com \
--cc=javierm@redhat.com \
--cc=kernel@pengutronix.de \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=mchehab+samsung@kernel.org \
--cc=mchehab@kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=sakari.ailus@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).