devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Hans Verkuil <hverkuil@xs4all.nl>
To: Tim Harvey <tharvey@gateworks.com>
Cc: devicetree@vger.kernel.org, alsa-devel@alsa-project.org,
	linux-kernel@vger.kernel.org, Hans Verkuil <hansverk@cisco.com>,
	Mauro Carvalho Chehab <mchehab@s-opensource.com>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Steve Longerbeam <slongerbeam@gmail.com>,
	Shawn Guo <shawnguo@kernel.org>,
	linux-media <linux-media@vger.kernel.org>
Subject: Re: [PATCH v6 4/6] media: i2c: Add TDA1997x HDMI receiver driver
Date: Wed, 31 Jan 2018 08:38:18 +0100	[thread overview]
Message-ID: <fa8cc2d1-b7ea-343e-5b5a-ba5f60b9c5d9@xs4all.nl> (raw)
In-Reply-To: <CAJ+vNU1xnnmNZW5zmT8+0HfT3Xfg6zfdrbC8vFNH4wuah5AVTA@mail.gmail.com>

On 01/31/2018 05:51 AM, Tim Harvey wrote:
> On Mon, Jan 29, 2018 at 4:00 AM, Hans Verkuil <hverkuil@xs4all.nl> wrote:
>> On 01/25/2018 05:15 PM, Tim Harvey wrote:
> <snip>
>>>>
>>>> Hmm. This receiver supports multiple output formats, but you advertise only one.
>>>> That looks wrong. If nothing else, you should be able to switch between RGB and
>>>> YUV 4:4:4 since they use the same port config.
>>>>
>>>> It's a common use-case that you want to switch between RGB and YUV depending on
>>>> the source material (i.e. if you receive a desktop/graphics then RGB is best, if
>>>> you receive video then YUV 4:2:2 or 4:2:0 is best).
>>>>
>>>> Hardcoding just one format won't do.
>>>>
>>>
>>> I've been thinking about this a bit. I had hard-coded a single format
>>> for now because I haven't had any good ideas on how to deal with the
>>> fact that the port mappings would need to differ if you change from
>>> the RGB888/YUV444 (I think these are referred to as 'planar' formats?)
>>> to YUV422 (semi-planar) and BT656 formats. It is true though that the
>>> 36bit (TDA19973) RGB888/YUV444 and 24bit (TDA19971/2) formats can both
>>> be supported with the same port mappings / pinout.
>>
>> Regarding terminology:
>>
>> RGB and YUV are typically interleaved, i.e. the color components are
>> (for two pixels) either RGBRGB for RGB888, YUVYUV for YUV444 or YUYV
>> for YUV422.
>>
>> Planar formats are in practice only seen for YUV and will first output
>> all Y samples, and then the UV samples. This requires that the hardware
>> buffers the frame and that's not normally done by HDMI receivers.
>>
>> The DMA engine, however, is often able to split up the interleaved YUV
>> samples that it receives and DMA them to separate buffers, thus turning
>> an interleaved media bus format to a planar memory format.
>>
>> BT656 doesn't refer to how the samples are transferred, instead it
>> refers to how the hsync and vsync are reported. The enum v4l2_mbus_type
>> has various options, one of them being BT656.
>>
>> Which mbus type is used is board specific (and should come from the
>> device tree). Whether to transmit RGB888, YUV444 or YUV422 (or possibly
>> even YUV420) is dynamic and is up to userspace since it is use-case
>> dependent.
>>
>> So you'll never switch between BT656 and CSI, but you can switch between
>> BT656+RGB and BT656+YUV, or between CSI+RGB and CSI+YUV.
>>
>>>
>>> For example the GW5400 has a TDA19971 mapped to IMX6 CSI_DATA[19:4]
>>> (16bit) for YUV422. However if you want to use BT656 you have to shift
>>> the TDA19971 port mappings to get the YCbCr pins mapped to
>>> CSI_DATA[19:x] and those pin groups are at the bottom of the bus for
>>> the RGB888/YUV444 format.
>>
>> As mentioned above, you wouldn't switch between mbus types.
>>
>>>
>>> I suppose however that perhaps for the example above if I have a 16bit
>>> width required to support YUV422 there would never be a useful case
>>> for supporting 8-bit/10-bit/12-bit BT656 on the same board?
>>
>> You wouldn't switch between mbus types, but if the device tree configures
>> BT.656 with a bus width of 24 bits, then the application might very well
>> want to dynamically switch between 8, 10 and 12 bits per color component.
>>
> 
> Hans,
> 
> I just submitted a v7 with multiple format support. Your point about
> bus_type being specified by dt is exactly what I needed to help make
> sense of the formats.

Ah, good. It took me some time as well before I realized that the confusion
was in mixing up bus types and formats.

> That said, I'm unsure how to properly test the enum_mbus_code() pad op
> function. How do you obtain a list of valid formats on a subdev?
> 
> I tried the following:
> root@ventana:~# media-ctl -e 'tda19971 2-0048'
> /dev/v4l-subdev1
> root@ventana:~# media-ctl --get-v4l2 '"tda19971 2-0048":0'
>                 [fmt:UYVY8_2X8/1280x720 field:none colorspace:srgb]
> ^^^^ calls get_format and returns the 1 and only format available for
> my tda19971 with 16bit parallel bus
> root@ventana:~# v4l2-ctl -d /dev/v4l-subdev1 --get-fmt-video-out
> VIDIOC_G_FMT: failed: Inappropriate ioctl for device
> root@ventana:~# v4l2-ctl -d /dev/v4l-subdev1 --list-formats-out
> ioctl: VIDIOC_ENUM_FMT
> 
> I'm thinking perhaps enumerating the list of possible formats is a
> missing feature in media-ctl?

Yeah, it is. Surprising, really. Ditto for the SUBDEV_ENUM_FRAME_SIZE/INTERVAL
ioctls.

I wonder whether this should be added to v4l2-ctl, media-ctl or both. I always
felt that media-ctl is more about setting up the whole pipeline, whereas v4l2-ctl
is specific to a V4L2 device.

Regards,

	Hans

  reply	other threads:[~2018-01-31  7:38 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-28 20:09 [PATCH v6 0/6] TDA1997x HDMI video receiver Tim Harvey
2017-12-28 20:09 ` [PATCH v6 1/6] v4l2-dv-timings: add v4l2_hdmi_colorimetry() Tim Harvey
2017-12-28 20:09 ` [PATCH v6 2/6] MAINTAINERS: add entry for NXP TDA1997x driver Tim Harvey
2017-12-28 20:09 ` [PATCH v6 3/6] media: dt-bindings: Add bindings for TDA1997X Tim Harvey
2017-12-28 20:09 ` [PATCH v6 4/6] media: i2c: Add TDA1997x HDMI receiver driver Tim Harvey
2018-01-15 12:56   ` Hans Verkuil
2018-01-25 16:15     ` Tim Harvey
2018-01-29 12:00       ` Hans Verkuil
     [not found]         ` <517f8b12-e10e-1e8d-6d98-26f5fefe62b8-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
2018-01-31  4:51           ` Tim Harvey
2018-01-31  7:38             ` Hans Verkuil [this message]
2018-01-31 13:22               ` Hans Verkuil
     [not found]                 ` <83695d60-5052-14ba-4f7b-23f153a05a85-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
2018-02-01  4:47                   ` Tim Harvey
2018-02-01  7:19                     ` Hans Verkuil
     [not found] ` <1514491789-8697-1-git-send-email-tharvey-UMMOYl/HMS+akBO8gow8eQ@public.gmane.org>
2017-12-28 20:09   ` [PATCH v6 5/6] ARM: dts: imx: Add TDA19971 HDMI Receiver to GW54xx Tim Harvey
2017-12-28 20:09 ` [PATCH v6 6/6] ARM: dts: imx: Add TDA19971 HDMI Receiver to GW551x Tim Harvey

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=fa8cc2d1-b7ea-343e-5b5a-ba5f60b9c5d9@xs4all.nl \
    --to=hverkuil@xs4all.nl \
    --cc=alsa-devel@alsa-project.org \
    --cc=devicetree@vger.kernel.org \
    --cc=hansverk@cisco.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@s-opensource.com \
    --cc=p.zabel@pengutronix.de \
    --cc=shawnguo@kernel.org \
    --cc=slongerbeam@gmail.com \
    --cc=tharvey@gateworks.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).