From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: Re: [PATCH] intel_infoframes: Dump HDMI vendor infoframes Date: Wed, 26 Sep 2012 20:01:09 -0300 Message-ID: References: <1348679873-4351-1-git-send-email-damien.lespiau@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail-wg0-f43.google.com (mail-wg0-f43.google.com [74.125.82.43]) by gabe.freedesktop.org (Postfix) with ESMTP id 908859ED69 for ; Wed, 26 Sep 2012 16:01:10 -0700 (PDT) Received: by wgbdq11 with SMTP id dq11so781286wgb.12 for ; Wed, 26 Sep 2012 16:01:09 -0700 (PDT) In-Reply-To: <1348679873-4351-1-git-send-email-damien.lespiau@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: Damien Lespiau Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Reviewed-by: Rodrigo Vivi On Wed, Sep 26, 2012 at 2:17 PM, Damien Lespiau wrote: > From: Damien Lespiau > > Those infoframes are programmed when using stereo 3D modes. > > Signed-off-by: Damien Lespiau > --- > tools/intel_infoframes.c | 63 +++++++++++++++++++++++++++++++++++++++++++++- > 1 files changed, 62 insertions(+), 1 deletions(-) > > diff --git a/tools/intel_infoframes.c b/tools/intel_infoframes.c > index d74df64..66351ac 100644 > --- a/tools/intel_infoframes.c > +++ b/tools/intel_infoframes.c > @@ -125,6 +125,8 @@ typedef enum { > #define SPD_INFOFRAME_VERSION 0x01 > #define SPD_INFOFRAME_LENGTH 0x19 > > +#define VENDOR_ID_HDMI 0x000c03 > + > typedef struct { > uint8_t type; > uint8_t version; > @@ -175,6 +177,21 @@ typedef union { > } __attribute__((packed)) spd; > struct { > DipInfoFrameHeader header; > + uint8_t checksum; > + > + uint8_t id[3]; > + > + uint8_t Rsvd0 :5; > + uint8_t video_format :3; > + > + uint8_t Rsvd1 :4; > + uint8_t s3d_structure :4; > + > + uint8_t Rsvd2 :4; > + uint8_t s3d_ext_data :4; > + } __attribute__((packed)) vendor; > + struct { > + DipInfoFrameHeader header; > uint8_t body[27]; > } generic; > uint8_t data8[128]; > @@ -424,10 +441,45 @@ static void dump_avi_info(Transcoder transcoder) > printf("Invalid InfoFrame checksum!\n"); > } > > +static const char *vendor_id_to_string(uint32_t id) > +{ > + switch (id) { > + case VENDOR_ID_HDMI: > + return "HDMI"; > + default: > + return "Unknown"; > + } > +} > + > +static const char *s3d_structure_to_string(int format) > +{ > + switch (format) { > + case 0: > + return "Frame Packing"; > + case 6: > + return "Top Bottom"; > + case 8: > + return "Side By Side (half)"; > + default: > + return "Reserved"; > + } > +} > + > +static void dump_vendor_hdmi(DipInfoFrame *frame) > +{ > + int s3d_present = frame->vendor.video_format & 0x2; > + > + printf("- video format: 0x%03x %s\n", frame->vendor.video_format, > + s3d_present ? "(3D)" : ""); > + if (s3d_present) > + printf("- 3D Format: %s\n", > + s3d_structure_to_string(frame->vendor.s3d_structure)); > +} > + > static void dump_vendor_info(Transcoder transcoder) > { > Register reg = get_dip_ctl_reg(transcoder); > - uint32_t val; > + uint32_t val, vendor_id; > DipFrequency freq; > DipInfoFrame frame; > > @@ -446,6 +498,15 @@ static void dump_vendor_info(Transcoder transcoder) > > dump_raw_infoframe(&frame); > > + vendor_id = frame.vendor.id[2] << 16 | frame.vendor.id[1] << 8 | > + frame.vendor.id[0]; > + > + printf("- vendor Id: 0x%06x (%s)\n", vendor_id, > + vendor_id_to_string(vendor_id)); > + > + if (vendor_id == VENDOR_ID_HDMI) > + dump_vendor_hdmi(&frame); > + > if (!infoframe_valid_checksum(&frame)) > printf("Invalid InfoFrame checksum!\n"); > } > -- > 1.7.7.5 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Rodrigo Vivi Blog: http://blog.vivi.eng.br