mbox series

[00/16] Switch subdev dv timing callbacks to pad ops

Message ID 20240405141411.1807189-1-panikiel@google.com
Headers show
Series Switch subdev dv timing callbacks to pad ops | expand

Message

Paweł Anikiel April 5, 2024, 2:13 p.m. UTC
Currently, subdev dv timing calls (i.e. g/s/query_dv_timings) are video
ops without a pad argument. This is a problem if the subdevice can have
different dv timings for each pad (e.g. a DisplayPort receiver with
multiple virtual channels).

This patchset changes subdev dv timing callbacks to include a pad
argument, and moves them from video to pad ops. All the affected
drivers are updated to use the new pad ops version.

The affected drivers were updated in a way that mathes how they deal
with the pad argument in other callbacks (mainly enum_dv_timings,
dv_timings_cap, get/set_edid).

This was originally a part of a larger patchset:
https://lore.kernel.org/lkml/20240221160215.484151-2-panikiel@google.com/

Paweł Anikiel (16):
  media: v4l2-subdev: Add pad versions of dv timing subdev calls
  media: i2c: adv748x: Switch dv timing callbacks to pad ops
  media: i2c: adv7511: Switch dv timing callbacks to pad ops
  media: i2c: adv7604: Switch dv timing callbacks to pad ops
  media: i2c: adv7842: Switch dv timing callbacks to pad ops
  media: i2c: tc358743: Switch dv timing callbacks to pad ops
  media: i2c: tda1997x: Switch dv timing callbacks to pad ops
  media: i2c: ths7303: Switch dv timing callbacks to pad ops
  media: i2c: ths8200: Switch dv timing callbacks to pad ops
  media: i2c: tvp7002: Switch dv timing callbacks to pad ops
  media: spi: gs1662: Switch dv timing callbacks to pad ops
  media: cobalt: Use pad variant of dv timing subdev calls
  media: rcar-vin: Use pad variant of dv timing subdev calls
  media: vpif_capture: Use pad variant of dv timing subdev calls
  media: tegra-video: Use pad variant of dv timing subdev calls
  media: v4l2-subdev: Remove non-pad dv timing callbacks

 drivers/media/i2c/adv748x/adv748x-hdmi.c      | 16 ++++----
 drivers/media/i2c/adv7511-v4l2.c              | 14 +++++--
 drivers/media/i2c/adv7604.c                   | 14 +++----
 drivers/media/i2c/adv7842.c                   | 25 ++++++++----
 drivers/media/i2c/tc358743.c                  | 23 +++++++----
 drivers/media/i2c/tda1997x.c                  | 12 +++---
 drivers/media/i2c/ths7303.c                   |  8 +++-
 drivers/media/i2c/ths8200.c                   | 14 +++++--
 drivers/media/i2c/tvp7002.c                   | 26 +++++++++----
 drivers/media/pci/cobalt/cobalt-v4l2.c        | 12 +++---
 .../platform/renesas/rcar-vin/rcar-v4l2.c     |  9 +++--
 .../media/platform/ti/davinci/vpif_capture.c  |  4 +-
 drivers/media/spi/gs1662.c                    | 21 +++++++---
 drivers/media/v4l2-core/v4l2-subdev.c         | 39 +++++++++++++++++--
 drivers/staging/media/tegra-video/vi.c        | 12 +++---
 include/media/v4l2-subdev.h                   | 28 ++++++-------
 16 files changed, 183 insertions(+), 94 deletions(-)

Comments

Hans Verkuil April 8, 2024, 2:15 p.m. UTC | #1
On 05/04/2024 16:13, Paweł Anikiel wrote:
> Currently, subdev dv timing calls (i.e. g/s/query_dv_timings) are video
> ops without a pad argument. This is a problem if the subdevice can have
> different dv timings for each pad (e.g. a DisplayPort receiver with
> multiple virtual channels).
> 
> This patchset changes subdev dv timing callbacks to include a pad
> argument, and moves them from video to pad ops. All the affected
> drivers are updated to use the new pad ops version.
> 
> The affected drivers were updated in a way that mathes how they deal
> with the pad argument in other callbacks (mainly enum_dv_timings,
> dv_timings_cap, get/set_edid).
> 
> This was originally a part of a larger patchset:
> https://lore.kernel.org/lkml/20240221160215.484151-2-panikiel@google.com/
> 
> Paweł Anikiel (16):
>   media: v4l2-subdev: Add pad versions of dv timing subdev calls
>   media: i2c: adv748x: Switch dv timing callbacks to pad ops
>   media: i2c: adv7511: Switch dv timing callbacks to pad ops
>   media: i2c: adv7604: Switch dv timing callbacks to pad ops
>   media: i2c: adv7842: Switch dv timing callbacks to pad ops
>   media: i2c: tc358743: Switch dv timing callbacks to pad ops
>   media: i2c: tda1997x: Switch dv timing callbacks to pad ops
>   media: i2c: ths7303: Switch dv timing callbacks to pad ops
>   media: i2c: ths8200: Switch dv timing callbacks to pad ops
>   media: i2c: tvp7002: Switch dv timing callbacks to pad ops
>   media: spi: gs1662: Switch dv timing callbacks to pad ops
>   media: cobalt: Use pad variant of dv timing subdev calls
>   media: rcar-vin: Use pad variant of dv timing subdev calls
>   media: vpif_capture: Use pad variant of dv timing subdev calls
>   media: tegra-video: Use pad variant of dv timing subdev calls
>   media: v4l2-subdev: Remove non-pad dv timing callbacks

You missed one:

In file included from include/media/v4l2-device.h:13,
                 from drivers/media/platform/ti/davinci/vpif_display.h:13,
                 from drivers/media/platform/ti/davinci/vpif_display.c:26:
drivers/media/platform/ti/davinci/vpif_display.c: In function 'vpif_s_dv_timings':
include/media/v4l2-subdev.h:1816:56: error: 'const struct v4l2_subdev_video_ops' has no member named 's_dv_timings'
 1816 |                 else if (!(__sd->ops->o && __sd->ops->o->f))            \
      |                                                        ^~
drivers/media/platform/ti/davinci/vpif_display.c:937:15: note: in expansion of macro 'v4l2_subdev_call'
  937 |         ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings);
      |               ^~~~~~~~~~~~~~~~
include/media/v4l2-subdev.h:1819:53: error: 'const struct v4l2_subdev_video_ops' has no member named 's_dv_timings'
 1819 |                          v4l2_subdev_call_wrappers.o->f)                \
      |                                                     ^~
drivers/media/platform/ti/davinci/vpif_display.c:937:15: note: in expansion of macro 'v4l2_subdev_call'
  937 |         ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings);
      |               ^~~~~~~~~~~~~~~~
include/media/v4l2-subdev.h:1820:63: error: 'const struct v4l2_subdev_video_ops' has no member named 's_dv_timings'
 1820 |                         __result = v4l2_subdev_call_wrappers.o->f(      \
      |                                                               ^~
drivers/media/platform/ti/davinci/vpif_display.c:937:15: note: in expansion of macro 'v4l2_subdev_call'
  937 |         ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings);
      |               ^~~~~~~~~~~~~~~~
include/media/v4l2-subdev.h:1823:48: error: 'const struct v4l2_subdev_video_ops' has no member named 's_dv_timings'
 1823 |                         __result = __sd->ops->o->f(__sd, ##args);       \
      |                                                ^~
drivers/media/platform/ti/davinci/vpif_display.c:937:15: note: in expansion of macro 'v4l2_subdev_call'
  937 |         ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings);
      |               ^~~~~~~~~~~~~~~~
drivers/media/platform/ti/davinci/vpif_display.c:937:15: error: no member 's_dv_timings' in struct v4l2_subdev_video_ops
drivers/media/platform/ti/davinci/vpif_display.c:937:15: error: no member 's_dv_timings' in struct v4l2_subdev_video_ops
drivers/media/platform/ti/davinci/vpif_display.c:937:15: error: no member 's_dv_timings' in struct v4l2_subdev_video_ops
drivers/media/platform/ti/davinci/vpif_display.c:937:15: error: no member 's_dv_timings' in struct v4l2_subdev_video_ops

Regards,

	Hans

> 
>  drivers/media/i2c/adv748x/adv748x-hdmi.c      | 16 ++++----
>  drivers/media/i2c/adv7511-v4l2.c              | 14 +++++--
>  drivers/media/i2c/adv7604.c                   | 14 +++----
>  drivers/media/i2c/adv7842.c                   | 25 ++++++++----
>  drivers/media/i2c/tc358743.c                  | 23 +++++++----
>  drivers/media/i2c/tda1997x.c                  | 12 +++---
>  drivers/media/i2c/ths7303.c                   |  8 +++-
>  drivers/media/i2c/ths8200.c                   | 14 +++++--
>  drivers/media/i2c/tvp7002.c                   | 26 +++++++++----
>  drivers/media/pci/cobalt/cobalt-v4l2.c        | 12 +++---
>  .../platform/renesas/rcar-vin/rcar-v4l2.c     |  9 +++--
>  .../media/platform/ti/davinci/vpif_capture.c  |  4 +-
>  drivers/media/spi/gs1662.c                    | 21 +++++++---
>  drivers/media/v4l2-core/v4l2-subdev.c         | 39 +++++++++++++++++--
>  drivers/staging/media/tegra-video/vi.c        | 12 +++---
>  include/media/v4l2-subdev.h                   | 28 ++++++-------
>  16 files changed, 183 insertions(+), 94 deletions(-)
>
Hans Verkuil April 8, 2024, 2:17 p.m. UTC | #2
On 08/04/2024 16:15, Hans Verkuil wrote:
> On 05/04/2024 16:13, Paweł Anikiel wrote:
>> Currently, subdev dv timing calls (i.e. g/s/query_dv_timings) are video
>> ops without a pad argument. This is a problem if the subdevice can have
>> different dv timings for each pad (e.g. a DisplayPort receiver with
>> multiple virtual channels).
>>
>> This patchset changes subdev dv timing callbacks to include a pad
>> argument, and moves them from video to pad ops. All the affected
>> drivers are updated to use the new pad ops version.
>>
>> The affected drivers were updated in a way that mathes how they deal
>> with the pad argument in other callbacks (mainly enum_dv_timings,
>> dv_timings_cap, get/set_edid).
>>
>> This was originally a part of a larger patchset:
>> https://lore.kernel.org/lkml/20240221160215.484151-2-panikiel@google.com/
>>
>> Paweł Anikiel (16):
>>   media: v4l2-subdev: Add pad versions of dv timing subdev calls
>>   media: i2c: adv748x: Switch dv timing callbacks to pad ops
>>   media: i2c: adv7511: Switch dv timing callbacks to pad ops
>>   media: i2c: adv7604: Switch dv timing callbacks to pad ops
>>   media: i2c: adv7842: Switch dv timing callbacks to pad ops
>>   media: i2c: tc358743: Switch dv timing callbacks to pad ops
>>   media: i2c: tda1997x: Switch dv timing callbacks to pad ops
>>   media: i2c: ths7303: Switch dv timing callbacks to pad ops
>>   media: i2c: ths8200: Switch dv timing callbacks to pad ops
>>   media: i2c: tvp7002: Switch dv timing callbacks to pad ops
>>   media: spi: gs1662: Switch dv timing callbacks to pad ops
>>   media: cobalt: Use pad variant of dv timing subdev calls
>>   media: rcar-vin: Use pad variant of dv timing subdev calls
>>   media: vpif_capture: Use pad variant of dv timing subdev calls
>>   media: tegra-video: Use pad variant of dv timing subdev calls
>>   media: v4l2-subdev: Remove non-pad dv timing callbacks
> 
> You missed one:
> 
> In file included from include/media/v4l2-device.h:13,
>                  from drivers/media/platform/ti/davinci/vpif_display.h:13,
>                  from drivers/media/platform/ti/davinci/vpif_display.c:26:
> drivers/media/platform/ti/davinci/vpif_display.c: In function 'vpif_s_dv_timings':
> include/media/v4l2-subdev.h:1816:56: error: 'const struct v4l2_subdev_video_ops' has no member named 's_dv_timings'
>  1816 |                 else if (!(__sd->ops->o && __sd->ops->o->f))            \
>       |                                                        ^~
> drivers/media/platform/ti/davinci/vpif_display.c:937:15: note: in expansion of macro 'v4l2_subdev_call'
>   937 |         ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings);
>       |               ^~~~~~~~~~~~~~~~
> include/media/v4l2-subdev.h:1819:53: error: 'const struct v4l2_subdev_video_ops' has no member named 's_dv_timings'
>  1819 |                          v4l2_subdev_call_wrappers.o->f)                \
>       |                                                     ^~
> drivers/media/platform/ti/davinci/vpif_display.c:937:15: note: in expansion of macro 'v4l2_subdev_call'
>   937 |         ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings);
>       |               ^~~~~~~~~~~~~~~~
> include/media/v4l2-subdev.h:1820:63: error: 'const struct v4l2_subdev_video_ops' has no member named 's_dv_timings'
>  1820 |                         __result = v4l2_subdev_call_wrappers.o->f(      \
>       |                                                               ^~
> drivers/media/platform/ti/davinci/vpif_display.c:937:15: note: in expansion of macro 'v4l2_subdev_call'
>   937 |         ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings);
>       |               ^~~~~~~~~~~~~~~~
> include/media/v4l2-subdev.h:1823:48: error: 'const struct v4l2_subdev_video_ops' has no member named 's_dv_timings'
>  1823 |                         __result = __sd->ops->o->f(__sd, ##args);       \
>       |                                                ^~
> drivers/media/platform/ti/davinci/vpif_display.c:937:15: note: in expansion of macro 'v4l2_subdev_call'
>   937 |         ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings);
>       |               ^~~~~~~~~~~~~~~~
> drivers/media/platform/ti/davinci/vpif_display.c:937:15: error: no member 's_dv_timings' in struct v4l2_subdev_video_ops
> drivers/media/platform/ti/davinci/vpif_display.c:937:15: error: no member 's_dv_timings' in struct v4l2_subdev_video_ops
> drivers/media/platform/ti/davinci/vpif_display.c:937:15: error: no member 's_dv_timings' in struct v4l2_subdev_video_ops
> drivers/media/platform/ti/davinci/vpif_display.c:937:15: error: no member 's_dv_timings' in struct v4l2_subdev_video_ops

No need to post a v2. Just post a single patch '14.5/16' to convert vpif_display that
will be added after patch [14/16], then I'll take care of it.

Regards,

	Hans

> 
> Regards,
> 
> 	Hans
> 
>>
>>  drivers/media/i2c/adv748x/adv748x-hdmi.c      | 16 ++++----
>>  drivers/media/i2c/adv7511-v4l2.c              | 14 +++++--
>>  drivers/media/i2c/adv7604.c                   | 14 +++----
>>  drivers/media/i2c/adv7842.c                   | 25 ++++++++----
>>  drivers/media/i2c/tc358743.c                  | 23 +++++++----
>>  drivers/media/i2c/tda1997x.c                  | 12 +++---
>>  drivers/media/i2c/ths7303.c                   |  8 +++-
>>  drivers/media/i2c/ths8200.c                   | 14 +++++--
>>  drivers/media/i2c/tvp7002.c                   | 26 +++++++++----
>>  drivers/media/pci/cobalt/cobalt-v4l2.c        | 12 +++---
>>  .../platform/renesas/rcar-vin/rcar-v4l2.c     |  9 +++--
>>  .../media/platform/ti/davinci/vpif_capture.c  |  4 +-
>>  drivers/media/spi/gs1662.c                    | 21 +++++++---
>>  drivers/media/v4l2-core/v4l2-subdev.c         | 39 +++++++++++++++++--
>>  drivers/staging/media/tegra-video/vi.c        | 12 +++---
>>  include/media/v4l2-subdev.h                   | 28 ++++++-------
>>  16 files changed, 183 insertions(+), 94 deletions(-)
>>
> 
>
Paweł Anikiel April 8, 2024, 3:25 p.m. UTC | #3
On Mon, Apr 8, 2024 at 4:18 PM Hans Verkuil <hverkuil-cisco@xs4all.nl> wrote:
>
> On 08/04/2024 16:15, Hans Verkuil wrote:
> > On 05/04/2024 16:13, Paweł Anikiel wrote:
> >> Currently, subdev dv timing calls (i.e. g/s/query_dv_timings) are video
> >> ops without a pad argument. This is a problem if the subdevice can have
> >> different dv timings for each pad (e.g. a DisplayPort receiver with
> >> multiple virtual channels).
> >>
> >> This patchset changes subdev dv timing callbacks to include a pad
> >> argument, and moves them from video to pad ops. All the affected
> >> drivers are updated to use the new pad ops version.
> >>
> >> The affected drivers were updated in a way that mathes how they deal
> >> with the pad argument in other callbacks (mainly enum_dv_timings,
> >> dv_timings_cap, get/set_edid).
> >>
> >> This was originally a part of a larger patchset:
> >> https://lore.kernel.org/lkml/20240221160215.484151-2-panikiel@google.com/
> >>
> >> Paweł Anikiel (16):
> >>   media: v4l2-subdev: Add pad versions of dv timing subdev calls
> >>   media: i2c: adv748x: Switch dv timing callbacks to pad ops
> >>   media: i2c: adv7511: Switch dv timing callbacks to pad ops
> >>   media: i2c: adv7604: Switch dv timing callbacks to pad ops
> >>   media: i2c: adv7842: Switch dv timing callbacks to pad ops
> >>   media: i2c: tc358743: Switch dv timing callbacks to pad ops
> >>   media: i2c: tda1997x: Switch dv timing callbacks to pad ops
> >>   media: i2c: ths7303: Switch dv timing callbacks to pad ops
> >>   media: i2c: ths8200: Switch dv timing callbacks to pad ops
> >>   media: i2c: tvp7002: Switch dv timing callbacks to pad ops
> >>   media: spi: gs1662: Switch dv timing callbacks to pad ops
> >>   media: cobalt: Use pad variant of dv timing subdev calls
> >>   media: rcar-vin: Use pad variant of dv timing subdev calls
> >>   media: vpif_capture: Use pad variant of dv timing subdev calls
> >>   media: tegra-video: Use pad variant of dv timing subdev calls
> >>   media: v4l2-subdev: Remove non-pad dv timing callbacks
> >
> > You missed one:
> >
> > In file included from include/media/v4l2-device.h:13,
> >                  from drivers/media/platform/ti/davinci/vpif_display.h:13,
> >                  from drivers/media/platform/ti/davinci/vpif_display.c:26:
> > drivers/media/platform/ti/davinci/vpif_display.c: In function 'vpif_s_dv_timings':
> > include/media/v4l2-subdev.h:1816:56: error: 'const struct v4l2_subdev_video_ops' has no member named 's_dv_timings'
> >  1816 |                 else if (!(__sd->ops->o && __sd->ops->o->f))            \
> >       |                                                        ^~
> > drivers/media/platform/ti/davinci/vpif_display.c:937:15: note: in expansion of macro 'v4l2_subdev_call'
> >   937 |         ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings);
> >       |               ^~~~~~~~~~~~~~~~
> > include/media/v4l2-subdev.h:1819:53: error: 'const struct v4l2_subdev_video_ops' has no member named 's_dv_timings'
> >  1819 |                          v4l2_subdev_call_wrappers.o->f)                \
> >       |                                                     ^~
> > drivers/media/platform/ti/davinci/vpif_display.c:937:15: note: in expansion of macro 'v4l2_subdev_call'
> >   937 |         ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings);
> >       |               ^~~~~~~~~~~~~~~~
> > include/media/v4l2-subdev.h:1820:63: error: 'const struct v4l2_subdev_video_ops' has no member named 's_dv_timings'
> >  1820 |                         __result = v4l2_subdev_call_wrappers.o->f(      \
> >       |                                                               ^~
> > drivers/media/platform/ti/davinci/vpif_display.c:937:15: note: in expansion of macro 'v4l2_subdev_call'
> >   937 |         ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings);
> >       |               ^~~~~~~~~~~~~~~~
> > include/media/v4l2-subdev.h:1823:48: error: 'const struct v4l2_subdev_video_ops' has no member named 's_dv_timings'
> >  1823 |                         __result = __sd->ops->o->f(__sd, ##args);       \
> >       |                                                ^~
> > drivers/media/platform/ti/davinci/vpif_display.c:937:15: note: in expansion of macro 'v4l2_subdev_call'
> >   937 |         ret = v4l2_subdev_call(ch->sd, video, s_dv_timings, timings);
> >       |               ^~~~~~~~~~~~~~~~
> > drivers/media/platform/ti/davinci/vpif_display.c:937:15: error: no member 's_dv_timings' in struct v4l2_subdev_video_ops
> > drivers/media/platform/ti/davinci/vpif_display.c:937:15: error: no member 's_dv_timings' in struct v4l2_subdev_video_ops
> > drivers/media/platform/ti/davinci/vpif_display.c:937:15: error: no member 's_dv_timings' in struct v4l2_subdev_video_ops
> > drivers/media/platform/ti/davinci/vpif_display.c:937:15: error: no member 's_dv_timings' in struct v4l2_subdev_video_ops
>
> No need to post a v2. Just post a single patch '14.5/16' to convert vpif_display that
> will be added after patch [14/16], then I'll take care of it.

I probably thought vpif-capture.c and vpif-display.c were the same
file. I sent the 14.5 patch as you requested.

As an aside, how did you run the compile test? It would be nice to
know for the future. For this, I did a few greps and manually enabled
all the drivers in menuconfig. Is there a better way?

Regards,
Paweł

>
> Regards,
>
>         Hans
>
> >
> > Regards,
> >
> >       Hans
> >
> >>
> >>  drivers/media/i2c/adv748x/adv748x-hdmi.c      | 16 ++++----
> >>  drivers/media/i2c/adv7511-v4l2.c              | 14 +++++--
> >>  drivers/media/i2c/adv7604.c                   | 14 +++----
> >>  drivers/media/i2c/adv7842.c                   | 25 ++++++++----
> >>  drivers/media/i2c/tc358743.c                  | 23 +++++++----
> >>  drivers/media/i2c/tda1997x.c                  | 12 +++---
> >>  drivers/media/i2c/ths7303.c                   |  8 +++-
> >>  drivers/media/i2c/ths8200.c                   | 14 +++++--
> >>  drivers/media/i2c/tvp7002.c                   | 26 +++++++++----
> >>  drivers/media/pci/cobalt/cobalt-v4l2.c        | 12 +++---
> >>  .../platform/renesas/rcar-vin/rcar-v4l2.c     |  9 +++--
> >>  .../media/platform/ti/davinci/vpif_capture.c  |  4 +-
> >>  drivers/media/spi/gs1662.c                    | 21 +++++++---
> >>  drivers/media/v4l2-core/v4l2-subdev.c         | 39 +++++++++++++++++--
> >>  drivers/staging/media/tegra-video/vi.c        | 12 +++---
> >>  include/media/v4l2-subdev.h                   | 28 ++++++-------
> >>  16 files changed, 183 insertions(+), 94 deletions(-)
> >>
> >
> >
>