From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: William Towle <william.towle@codethink.co.uk>,
linux-media@vger.kernel.org, g.liakhovetski@gmx.de,
sergei.shtylyov@cogentembedded.com, rob.taylor@codethink.co.uk
Subject: Re: [PATCH 08/20] media: soc_camera pad-aware driver initialisation
Date: Mon, 25 May 2015 14:37:13 +0300 [thread overview]
Message-ID: <3699610.JSQ4auhktq@avalon> (raw)
In-Reply-To: <5562540D.5090106@xs4all.nl>
Hi Hans,
On Monday 25 May 2015 00:43:25 Hans Verkuil wrote:
> On 05/24/2015 11:50 PM, Laurent Pinchart wrote:
> > On Sunday 24 May 2015 10:08:15 Hans Verkuil wrote:
> >> On 05/23/2015 08:32 PM, Laurent Pinchart wrote:
> >>> On Thursday 21 May 2015 07:55:10 Hans Verkuil wrote:
> >>>> On 05/20/2015 06:39 PM, William Towle wrote:
> >>>>> Add detection of source pad number for drivers aware of the media
> >>>>> controller API, so that soc_camera/rcar_vin can create device nodes
> >>>>> to support a driver such as adv7604.c (for HDMI on Lager) underneath.
> >>>>>
> >>>>> Signed-off-by: William Towle <william.towle@codethink.co.uk>
> >>>>> Reviewed-by: Rob Taylor <rob.taylor@codethink.co.uk>
> >>>>> ---
> >>>>>
> >>>>> drivers/media/platform/soc_camera/rcar_vin.c | 4 ++++
> >>>>> drivers/media/platform/soc_camera/soc_camera.c | 27 ++++++++++++++-
> >>>>> include/media/soc_camera.h | 1 +
> >>>>> 3 files changed, 31 insertions(+), 1 deletion(-)
> >>>>>
> >>>>> diff --git a/drivers/media/platform/soc_camera/rcar_vin.c
> >>>>> b/drivers/media/platform/soc_camera/rcar_vin.c index 0f67646..b4e9b43
> >>>>> 100644
> >>>>> --- a/drivers/media/platform/soc_camera/rcar_vin.c
> >>>>> +++ b/drivers/media/platform/soc_camera/rcar_vin.c
> >>>>> @@ -1364,8 +1364,12 @@ static int rcar_vin_get_formats(struct
> >>>>> soc_camera_device *icd, unsigned int idx,
> >>>>> struct v4l2_mbus_framefmt *mf = &fmt.format;
> >>>>> struct v4l2_rect rect;
> >>>>> struct device *dev = icd->parent;
> >>>>> + struct media_pad *remote_pad;
> >>>>> int shift;
> >>>>>
> >>>>> + remote_pad = media_entity_remote_pad(
> >>>>> + &icd->vdev->entity.pads[0]);
> >>>>> + fmt.pad = remote_pad->index;
> >>>>
> >>>> This won't work if CONFIG_MEDIA_CONTROLLER isn't defined. All these
> >>>> media calls would all have to be under #ifdef CONFIG_MEDIA_CONTROLLER.
> >>>>
> >>>> Unfortunately, if it is not defined, then you still have no way of
> >>>> finding the source pad.
> >>>>
> >>>> Laurent, do you think if it would make sense to add a new subdev core
> >>>> op that will return the default source pad (I'm saying 'default' in
> >>>> case there are more) of a subdev? That way it can be used in non-MC
> >>>> drivers. We never needed the source pad before, but now we do, and this
> >>>> op only needs to be implemented if the default source pad != 0.
> >>>
> >>> I'm not too fond of that. Is there something wrong with the method
> >>> implemented in this patch ? Is the dependency on CONFIG_MEDIA_CONTROLLER
> >>> an issue ?
> >>
> >> 1) it's a heck of a lot of code just to get a simple source pad that the
> >> subdev knows anyway,
> >
> > I don't think the subdev knows. If a subdev has multiple source pads
> > there's no concept of a default source. It all depends on how the subdevs
> > are connected, and media_entity_remote_pad() is the right way to find
> > out.
>
> Note that with 'source pad' I am referring to the output pad of a subdev
> (ADV7604_PAD_SOURCE in the case of the adv7604). There may be some confusion
> here.
That's what I had understood :-)
> In my experience subdevs in a capture path have usually multiple input
> (sink) pads, but only one output (source) pad. Subdevs in a video output
> path tend to have one input (sink) pad and multiple output (source) pads.
>
> The multiple inputs/outputs are things like composite, S-Video, HDMI, VGA,
> etc. and the single input/output pad is where the device is hooked up to
> the mediabus which in turn connects to a DMA engine.
There's still no concept of a "default source" in the general case, but I
assume you want to target the most common case where the subdev will have a
single source pad ? A new operation (or field) could possibly work in some
cases, but I feel it's a hack that lacks genericity. The above change is
pretty simple from a bridge driver point of view, it's a single function call
that will return the index of the connected pad. Sure, there's a little bit
more core behind it compared to reading a fixed value, but it doesn't seem
much to me, especially given that, in most of the cases, there will be a
single link to check.
> >> 2) soc-camera doesn't use the media controller today, so this would add a
> >> dependency on the mc just for this,
> >
> > I agree that we shouldn't pull the whole MC userspace API in just for
> > this, but the kernel side of the API should be available as pad-level
> > operations depend on MC. We could split the CONFIG_MEDIA_CONTROLLER option
> > in two.
>
> The way it is now is pretty OK. We just miss the information about the pad
> that feeds the dma capture path and for output we miss the the pad that is
> fed by the dma output path.
>
> Bridge drivers currently just assume pad 0 in all cases, but that's
> obviously not always right as the adv7604 illustrates.
It's indeed a bad assumption. Drivers that are MC-aware use the correct pad
numbers. For drivers that are getting ported to the pad-level API without
being MC-aware it's tempting to just hardcode the pad number to 0 as that's a
common case when dealing with sensors, but that's plain wrong.
> The alternative would be to just hardcode it in platform data or card
> information. What this patch does is just enumerating pads until it finds
> the first one that fits the criteria, which fails as well if there are
> multiple pads that would match and is a lot more code than just have the
> subdev provide the information.
media_entity_remote_source() doesn't enumerate pads, it loops over links, so
as long as links are set up properly there should be no issue, even if the
remote subdev has multiple source pads. That's why I believe
media_entity_remote_source() is the way to go.
> >> 3) it doesn't actually make a media device, it is just fakes enough to
> >> make the subdev think it there is an MC.
> >>
> >> It doesn't actually have to be a new op, it could be a new field in
> >> v4l2_subdev as well. For those bridge drivers that do not use the MC but
> >> do need to know the source pad this is important information.
> >>
> >> It might even simplify the device tree if the default source pad is
> >> implied unless stated otherwise (but that might be a step too far).
> >>
> >> I wonder if a default input pad might also be useful to expose. I suspect
> >> this might become important if we want to add MC support to all existing
> >> v4l2 drivers.
> >
> > The concept of a default sink pad makes more sense, but I'm not sure I
> > like it too much either. I'd have to think about it.
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2015-05-25 11:36 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-20 16:39 HDMI and Composite capture on Lager, for kernel 4.1 William Towle
2015-05-20 16:39 ` [PATCH 01/20] ARM: shmobile: lager dts: Add entries for VIN HDMI input support William Towle
2015-05-20 16:39 ` [PATCH 02/20] media: adv7180: add of match table William Towle
2015-05-20 16:39 ` [PATCH 03/20] media: adv7604: chip info and formats for ADV7612 William Towle
2015-05-25 13:38 ` Guennadi Liakhovetski
2015-05-20 16:39 ` [PATCH 04/20] media: adv7604: document support for ADV7612 dual HDMI input decoder William Towle
2015-05-20 16:39 ` [PATCH 05/20] media: adv7604: ability to read default input port from DT William Towle
2015-05-20 16:39 ` [PATCH 06/20] ARM: shmobile: lager dts: specify default-input for ADV7612 William Towle
2015-05-20 16:39 ` [PATCH 07/20] media: soc_camera: rcar_vin: Add BT.709 24-bit RGB888 input support William Towle
2015-05-25 14:18 ` Guennadi Liakhovetski
2015-05-26 11:17 ` William Towle
2015-05-20 16:39 ` [PATCH 08/20] media: soc_camera pad-aware driver initialisation William Towle
2015-05-20 20:22 ` Sergei Shtylyov
2015-05-21 5:55 ` Hans Verkuil
2015-05-23 18:32 ` Laurent Pinchart
2015-05-24 8:08 ` Hans Verkuil
2015-05-24 21:50 ` Laurent Pinchart
2015-05-24 22:43 ` Hans Verkuil
2015-05-25 11:37 ` Laurent Pinchart [this message]
2015-05-20 16:39 ` [PATCH 09/20] media: rcar_vin: Use correct pad number in try_fmt William Towle
2015-05-21 5:58 ` Hans Verkuil
2015-05-23 18:24 ` Laurent Pinchart
2015-05-20 16:39 ` [PATCH 10/20] media: soc_camera: soc_scale_crop: Use correct pad when calling subdev try_fmt William Towle
2015-05-20 16:39 ` [PATCH 11/20] media: soc_camera: Fill std field in enum_input William Towle
2015-05-20 16:39 ` [PATCH 12/20] media: soc_camera: Fix error reporting in expbuf William Towle
2015-05-20 16:39 ` [PATCH 13/20] media: soc_camera: v4l2-compliance fixes for querycap William Towle
2015-05-21 5:58 ` Hans Verkuil
2015-05-21 12:46 ` Rob Taylor
2015-05-29 1:08 ` [Linux-kernel] " Ben Hutchings
2015-05-29 10:10 ` Hans Verkuil
2015-05-29 11:13 ` Rob Taylor
2015-05-25 15:02 ` Guennadi Liakhovetski
2015-05-20 16:39 ` [PATCH 14/20] media: rcar_vin: Reject videobufs that are too small for current format William Towle
2015-05-25 15:03 ` Guennadi Liakhovetski
2015-05-20 16:39 ` [PATCH 15/20] media: rcar_vin: Don't advertise support for USERPTR William Towle
2015-05-21 6:03 ` Hans Verkuil
2015-05-21 12:50 ` Rob Taylor
2015-05-20 16:39 ` [PATCH 16/20] media: adv7180: Fix set_pad_format() passing wrong format William Towle
2015-05-25 15:12 ` Guennadi Liakhovetski
2015-05-20 16:39 ` [PATCH 17/20] media: adv7604: Support V4L_FIELD_INTERLACED William Towle
2015-05-21 6:10 ` Hans Verkuil
2015-05-21 10:40 ` Rob Taylor
2015-05-25 15:15 ` Guennadi Liakhovetski
2015-05-20 16:39 ` [PATCH 18/20] media: adv7604: Always query_dv_timings in adv76xx_fill_format William Towle
2015-05-21 6:13 ` Hans Verkuil
2015-05-20 16:39 ` [PATCH 19/20] media: rcar_vin: Clean up format debugging statements William Towle
2015-05-25 17:20 ` Guennadi Liakhovetski
2015-05-20 16:39 ` [PATCH 20/20] media: soc_camera: Add debugging for get_formats William Towle
2015-05-25 15:32 ` Guennadi Liakhovetski
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=3699610.JSQ4auhktq@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=g.liakhovetski@gmx.de \
--cc=hverkuil@xs4all.nl \
--cc=linux-media@vger.kernel.org \
--cc=rob.taylor@codethink.co.uk \
--cc=sergei.shtylyov@cogentembedded.com \
--cc=william.towle@codethink.co.uk \
/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).