From: "Martin Bugge (marbugge)" <marbugge@cisco.com>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: linux-media@vger.kernel.org
Subject: Re: [PATCH 2/3] [media] adv7842: Source Product Description (SPD) InfoFrame
Date: Wed, 19 Mar 2014 12:24:15 +0100 [thread overview]
Message-ID: <53297E5F.1000005@cisco.com> (raw)
In-Reply-To: <53296DDC.502@xs4all.nl>
Thank you Hans
On 19/03/14 11:13, Hans Verkuil wrote:
> Hi Martin,
>
> On 03/19/14 10:43, Martin Bugge wrote:
>> Decode and display any received SPD InfoFrame in log-status.
> This is really quite standardized data. I looked around in the kernel
> and I found this very nice header: include/linux/hdmi.h and source
> drivers/video/hdmi.c.
>
> I would suggest that the adv7842 driver fills the hdmi_spd_infoframe
> struct and calls a function in v4l2_dv_timings.c to log the contents.
>
> That way it can also be used by e.g. adv7604. We really should be using
> this header for other frame types as well.
>
> Actually, I think you should ask on the dri-devel mailinglist (with a
> CC to the active maintainers of the hdmi.c source, see 'git log') whether
> creating an hdmi_spd_infoframe_log function would be useful to add to
> hdmi.c. If they don't like it, then we stick it in v4l2_dv_timings.c. If
> they do like it, we can just add it to hdmi.c. It's something that is
> primarily useful for receivers, and not so much for transmitters, so they
> might not want it in the hdmi.c source.
Yes you are right, it could be nice to have decoding of these Packets in
a common place.
I have added the same code to adv7604 as well so its already duplicated.
I will look into it.
I think the two other patches should apply ok. They are bug fixes.
Regards,
Martin
>
>> Signed-off-by: Martin Bugge <marbugge@cisco.com>
>> ---
>> drivers/media/i2c/adv7842.c | 76 +++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 76 insertions(+)
>>
>> diff --git a/drivers/media/i2c/adv7842.c b/drivers/media/i2c/adv7842.c
>> index 5d79c57..805a117 100644
>> --- a/drivers/media/i2c/adv7842.c
>> +++ b/drivers/media/i2c/adv7842.c
>> @@ -2243,6 +2243,81 @@ static void print_avi_infoframe(struct v4l2_subdev *sd)
>> v4l2_info(sd, "\t%s %s\n", y10_txt[avi.y10], q10_txt[avi.q10]);
>> }
>>
>> +static const char *sdi_txt(u8 code)
>> +{
>> + switch (code) {
>> + case 0x00: return "unknown";
> "unknown" -> "Unknown"
>
> to be consistent with the others.
>
> Regards,
>
> Hans
>
>> + case 0x01: return "Digital STB";
>> + case 0x02: return "DVD player";
>> + case 0x03: return "D-VHS";
>> + case 0x04: return "HDD Videorecorder";
>> + case 0x05: return "DVC";
>> + case 0x06: return "DSC";
>> + case 0x07: return "Video CD";
>> + case 0x08: return "Game";
>> + case 0x09: return "PC general";
>> + case 0x0a: return "Blu-Ray Disc (BD)";
>> + case 0x0b: return "Super Audio CD";
>> + }
>> + return "Reserved";
>> +}
>> +
>> +static void print_spd_info_frame(struct v4l2_subdev *sd)
>> +{
>> + int i;
>> + u8 spd_type;
>> + u8 spd_ver;
>> + u8 spd_len;
>> + u8 spd_crc;
>> + u8 buf[32];
>> + u8 vn[8];
>> + u8 pd[16];
>> + u8 sdi;
>> +
>> + if (!(hdmi_read(sd, 0x05) & 0x80)) {
>> + v4l2_info(sd, "receive DVI-D signal (SDP infoframe not supported)\n");
>> + return;
>> + }
>> + if (!(io_read(sd, 0x60) & 0x04)) {
>> + v4l2_info(sd, "SDP infoframe not received\n");
>> + return;
>> + }
>> +
>> + if (io_read(sd, 0x88) & 0x40) {
>> + v4l2_info(sd, "SPD infoframe checksum error has occurred earlier\n");
>> + io_write(sd, 0x8a, 0x40); /* clear SPD_INF_CKS_ERR_RAW */
>> + if (io_read(sd, 0x88) & 0x40) {
>> + v4l2_info(sd, "SPD infoframe checksum error still present\n");
>> + io_write(sd, 0x8a, 0x40); /* clear SPD_INF_CKS_ERR_RAW */
>> + }
>> + }
>> +
>> + spd_type = infoframe_read(sd, 0xe6) & 0x7f;
>> + spd_ver = infoframe_read(sd, 0xe7);
>> + spd_len = infoframe_read(sd, 0xe8);
>> + spd_crc = infoframe_read(sd, 0x2a);
>> +
>> + v4l2_info(sd, "SPD infoframe type %d, version %d, crc 0x%x, len %d\n",
>> + spd_type, spd_ver, spd_crc, spd_len);
>> +
>> + if (spd_type != 0x03)
>> + return;
>> + if (spd_ver != 0x01)
>> + return;
>> +
>> + memset(buf, 0, sizeof(buf));
>> + for (i = 0; i < 25 && i < spd_len; i++)
>> + buf[i] = infoframe_read(sd, i + 0x2b);
>> +
>> + snprintf(vn, 8, buf);
>> + snprintf(pd, 16, buf + 8);
>> + sdi = buf[24];
>> +
>> + v4l2_info(sd, "\tVendor Name: %s\n", vn);
>> + v4l2_info(sd, "\tProduct Description: %s\n", pd);
>> + v4l2_info(sd, "\tSource Device Information: %s (%d)\n", sdi_txt(sdi), sdi);
>> +}
>> +
>> static const char * const prim_mode_txt[] = {
>> "SDP",
>> "Component",
>> @@ -2455,6 +2530,7 @@ static int adv7842_cp_log_status(struct v4l2_subdev *sd)
>> deep_color_mode_txt[hdmi_read(sd, 0x0b) >> 6]);
>>
>> print_avi_infoframe(sd);
>> + print_spd_info_frame(sd);
>> return 0;
>> }
>>
>>
next prev parent reply other threads:[~2014-03-19 11:24 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-19 9:43 [PATCH 0/3] [media] adv7842 fixes Martin Bugge
2014-03-19 9:43 ` [PATCH 1/3] [media] adv7842: update RGB quantization range on HDMI/DVI-D mode irq Martin Bugge
2014-03-19 9:43 ` [PATCH 2/3] [media] adv7842: Source Product Description (SPD) InfoFrame Martin Bugge
2014-03-19 10:13 ` Hans Verkuil
2014-03-19 11:24 ` Martin Bugge (marbugge) [this message]
2014-03-19 9:43 ` [PATCH 3/3] [media] adv7842: Disable access to EDID DDC lines before chip power up Martin Bugge
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=53297E5F.1000005@cisco.com \
--to=marbugge@cisco.com \
--cc=hverkuil@xs4all.nl \
--cc=linux-media@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.