diff mbox

[1/1] media: entity: Add a nop variant of media_entity_cleanupr

Message ID CAK8P3a0otMJjeJi3RGyyCq73FdSfEUZvGybytGYJWOJfRd8qnQ@mail.gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Arnd Bergmann Jan. 9, 2018, 2:26 p.m. UTC
On Tue, Jan 9, 2018 at 2:58 PM, Sakari Ailus
<sakari.ailus@linux.intel.com> wrote:
> Add nop variant of media_entity_cleanup. This allows calling
> media_entity_cleanup whether or not Media controller is enabled,
> simplifying driver code.
>
> Also drop #ifdefs on a few drivers around media_entity_cleanup() and drop
> the extra semicolon from media_entity_cleanup prototype.
>
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> ---
> Hi Arnd,
>
> I thought about doing something similar with media_entity_pads_init which is
> equally commonly used in drivers that support MC/non-MC cases. The trouble
> with that is that the drivers set up the struct first before calling
> media_entity_pads_init, requiring the #ifdefs in any case. So the benefit
> would be questionable at least. So just media_entity_cleanup this time.

Looks good overall, just two thoughts:

> diff --git a/include/media/media-entity.h b/include/media/media-entity.h
> index d7a669058b5e..a732af1dbba0 100644
> --- a/include/media/media-entity.h
> +++ b/include/media/media-entity.h
> @@ -634,7 +634,11 @@ int media_entity_pads_init(struct media_entity *entity, u16 num_pads,
>   * This function must be called during the cleanup phase after unregistering
>   * the entity (currently, it does nothing).
>   */
> -static inline void media_entity_cleanup(struct media_entity *entity) {};
> +#if IS_ENABLED(CONFIG_MEDIA_CONTROLLER)
> +static inline void media_entity_cleanup(struct media_entity *entity) {}
> +#else
> +#define media_entity_cleanup(entity) do { } while (false)
> +#endif

This might cause a harmless warning about an unused variable in case
we have a driver that does:

 void f(struct i2c_client *client)
{
        struct v4l2_subdev *sd = to_subdev(client);
        media_entity_cleanup(sd);
}

None of the drivers you changed would have an unused variable after
your change (otherwise they would already have it before your change),
so it's probably fine.

and second, I'm trying the patch below on top of yours now, will
see how far that gets us ;-)



       Arnd

Comments

Sakari Ailus Jan. 9, 2018, 10:31 p.m. UTC | #1
Hi Arnd,

On Tue, Jan 09, 2018 at 03:26:38PM +0100, Arnd Bergmann wrote:
> On Tue, Jan 9, 2018 at 2:58 PM, Sakari Ailus
> <sakari.ailus@linux.intel.com> wrote:
> > Add nop variant of media_entity_cleanup. This allows calling
> > media_entity_cleanup whether or not Media controller is enabled,
> > simplifying driver code.
> >
> > Also drop #ifdefs on a few drivers around media_entity_cleanup() and drop
> > the extra semicolon from media_entity_cleanup prototype.
> >
> > Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> > ---
> > Hi Arnd,
> >
> > I thought about doing something similar with media_entity_pads_init which is
> > equally commonly used in drivers that support MC/non-MC cases. The trouble
> > with that is that the drivers set up the struct first before calling
> > media_entity_pads_init, requiring the #ifdefs in any case. So the benefit
> > would be questionable at least. So just media_entity_cleanup this time.
> 
> Looks good overall, just two thoughts:
> 
> > diff --git a/include/media/media-entity.h b/include/media/media-entity.h
> > index d7a669058b5e..a732af1dbba0 100644
> > --- a/include/media/media-entity.h
> > +++ b/include/media/media-entity.h
> > @@ -634,7 +634,11 @@ int media_entity_pads_init(struct media_entity *entity, u16 num_pads,
> >   * This function must be called during the cleanup phase after unregistering
> >   * the entity (currently, it does nothing).
> >   */
> > -static inline void media_entity_cleanup(struct media_entity *entity) {};
> > +#if IS_ENABLED(CONFIG_MEDIA_CONTROLLER)
> > +static inline void media_entity_cleanup(struct media_entity *entity) {}
> > +#else
> > +#define media_entity_cleanup(entity) do { } while (false)
> > +#endif
> 
> This might cause a harmless warning about an unused variable in case
> we have a driver that does:
> 
>  void f(struct i2c_client *client)
> {
>         struct v4l2_subdev *sd = to_subdev(client);
>         media_entity_cleanup(sd);

That'd be:

	media_entity_cleanup(&sd->entity);

> }
> 
> None of the drivers you changed would have an unused variable after
> your change (otherwise they would already have it before your change),
> so it's probably fine.

I thought of that, too. There are drivers that define the entity (as in
struct v4l2_subdev) only if CONFIG_MEDIA_CONTROLLER is enabled. As the
entity field isn't there, this won't compile; that's actually why I turned
it into a macro. This should be actually mentioned in the commit message.

I guess that could be changed, too, but the purpose, I believe, is to avoid
wasting memory on things that aren't there. I didn't see compiler warnings
from those drivers by disabling MC either, so presume that should be a
change for better...

> 
> and second, I'm trying the patch below on top of yours now, will
> see how far that gets us ;-)
> 
> diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
> index 03cf3a1a1e06..6421da7cb58a 100644
> --- a/drivers/media/i2c/Kconfig
> +++ b/drivers/media/i2c/Kconfig
> @@ -310,14 +310,14 @@ config VIDEO_ML86V7667
> 
>  config VIDEO_AD5820
>         tristate "AD5820 lens voice coil support"
> -       depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
> +       depends on I2C && VIDEO_V4L2
>         ---help---
>           This is a driver for the AD5820 camera lens voice coil.
>           It is used for example in Nokia N900 (RX-51).
> 
>  config VIDEO_DW9714
>         tristate "DW9714 lens voice coil support"
> -       depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
> +       depends on I2C && VIDEO_V4L2

Both drivers call media_entity_pads_init() unconditionally.

>         depends on VIDEO_V4L2_SUBDEV_API
>         ---help---
>           This is a driver for the DW9714 camera lens voice coil.
> @@ -636,7 +636,6 @@ config VIDEO_OV5670
>         tristate "OmniVision OV5670 sensor support"
>         depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
>         depends on MEDIA_CAMERA_SUPPORT
> -       depends on MEDIA_CONTROLLER

ov5670 does depend on MC at least right now. I guess it might not take much
to make it optional. But it's more than this patch. :-)

>         select V4L2_FWNODE
>         ---help---
>           This is a Video4Linux2 sensor-level driver for the OmniVision
> @@ -667,7 +666,7 @@ config VIDEO_OV7670
> 
>  config VIDEO_OV7740
>         tristate "OmniVision OV7740 sensor support"
> -       depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
> +       depends on I2C && VIDEO_V4L2

Hmm. In here the ov7740 driver doesn't seem to depend on MC.

>         depends on MEDIA_CAMERA_SUPPORT
>         ---help---
>           This is a Video4Linux2 sensor-level driver for the OmniVision
> @@ -815,7 +814,7 @@ comment "Flash devices"
> 
>  config VIDEO_ADP1653
>         tristate "ADP1653 flash support"
> -       depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
> +       depends on I2C && VIDEO_V4L2
>         depends on MEDIA_CAMERA_SUPPORT
>         ---help---
>           This is a driver for the ADP1653 flash controller. It is used for
> @@ -823,7 +822,7 @@ config VIDEO_ADP1653
> 
>  config VIDEO_LM3560
>         tristate "LM3560 dual flash driver support"
> -       depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
> +       depends on I2C && VIDEO_V4L2
>         depends on MEDIA_CAMERA_SUPPORT
>         select REGMAP_I2C
>         ---help---
> @@ -832,7 +831,7 @@ config VIDEO_LM3560
> 
>  config VIDEO_LM3646
>         tristate "LM3646 dual flash driver support"
> -       depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
> +       depends on I2C && VIDEO_V4L2
>         depends on MEDIA_CAMERA_SUPPORT
>         select REGMAP_I2C
>         ---help---

These also call media_entity_pads_init() unconditionally.

How was this tested? :-)
diff mbox

Patch

diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
index 03cf3a1a1e06..6421da7cb58a 100644
--- a/drivers/media/i2c/Kconfig
+++ b/drivers/media/i2c/Kconfig
@@ -310,14 +310,14 @@  config VIDEO_ML86V7667

 config VIDEO_AD5820
        tristate "AD5820 lens voice coil support"
-       depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
+       depends on I2C && VIDEO_V4L2
        ---help---
          This is a driver for the AD5820 camera lens voice coil.
          It is used for example in Nokia N900 (RX-51).

 config VIDEO_DW9714
        tristate "DW9714 lens voice coil support"
-       depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
+       depends on I2C && VIDEO_V4L2
        depends on VIDEO_V4L2_SUBDEV_API
        ---help---
          This is a driver for the DW9714 camera lens voice coil.
@@ -636,7 +636,6 @@  config VIDEO_OV5670
        tristate "OmniVision OV5670 sensor support"
        depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
        depends on MEDIA_CAMERA_SUPPORT
-       depends on MEDIA_CONTROLLER
        select V4L2_FWNODE
        ---help---
          This is a Video4Linux2 sensor-level driver for the OmniVision
@@ -667,7 +666,7 @@  config VIDEO_OV7670

 config VIDEO_OV7740
        tristate "OmniVision OV7740 sensor support"
-       depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
+       depends on I2C && VIDEO_V4L2
        depends on MEDIA_CAMERA_SUPPORT
        ---help---
          This is a Video4Linux2 sensor-level driver for the OmniVision
@@ -815,7 +814,7 @@  comment "Flash devices"

 config VIDEO_ADP1653
        tristate "ADP1653 flash support"
-       depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
+       depends on I2C && VIDEO_V4L2
        depends on MEDIA_CAMERA_SUPPORT
        ---help---
          This is a driver for the ADP1653 flash controller. It is used for
@@ -823,7 +822,7 @@  config VIDEO_ADP1653

 config VIDEO_LM3560
        tristate "LM3560 dual flash driver support"
-       depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
+       depends on I2C && VIDEO_V4L2
        depends on MEDIA_CAMERA_SUPPORT
        select REGMAP_I2C
        ---help---
@@ -832,7 +831,7 @@  config VIDEO_LM3560

 config VIDEO_LM3646
        tristate "LM3646 dual flash driver support"
-       depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
+       depends on I2C && VIDEO_V4L2
        depends on MEDIA_CAMERA_SUPPORT
        select REGMAP_I2C
        ---help---