From patchwork Wed Sep 26 17:17:53 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Lespiau X-Patchwork-Id: 1510251 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork1.kernel.org (Postfix) with ESMTP id C32193FDAE for ; Wed, 26 Sep 2012 17:18:29 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 987E89E7E6 for ; Wed, 26 Sep 2012 10:18:29 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wi0-f171.google.com (mail-wi0-f171.google.com [209.85.212.171]) by gabe.freedesktop.org (Postfix) with ESMTP id DF3EA9E796 for ; Wed, 26 Sep 2012 10:18:03 -0700 (PDT) Received: by wibhj13 with SMTP id hj13so1975556wib.12 for ; Wed, 26 Sep 2012 10:18:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:x-mailer; bh=2zAaM1U0Pvldt9U5vScElbppNkk8QUb+sMdA90I1ewo=; b=UOajKhWFbKEVdrE7N4HKmR1zVFLkR8+3x+EsBYk/oRssnkn9b5hFkGWmxhhjWtmy3I U33WNvA/h9KQbkAiVEp/rZkGRunsW1becWEe6qSf7BSFcwibFGix5922h2d8Bm9316+W SoBCO8zPYQr0ij2locQsV1JKLx1FZrDIMnQp11iVkq0+AWmoYYwJVFsHxeyLxGpKTlZe KGasGEVNK3E6WU/te09sdzzACQpyEn6KIRDB5DIDiMFHnCVn803epjFkjRYRKLMmdIU2 QKrtzn+Kks84gJDC40eaGgVhtGSNan5D7cSybV+4rJYUREir/wJanvVU8ibLE2oU6la0 ZW5g== Received: by 10.180.14.8 with SMTP id l8mr2849809wic.6.1348679882841; Wed, 26 Sep 2012 10:18:02 -0700 (PDT) Received: from localhost.localdomain ([83.217.123.106]) by mx.google.com with ESMTPS id bn7sm8008262wib.8.2012.09.26.10.18.01 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 26 Sep 2012 10:18:01 -0700 (PDT) From: Damien Lespiau To: intel-gfx@lists.freedesktop.org Date: Wed, 26 Sep 2012 18:17:53 +0100 Message-Id: <1348679873-4351-1-git-send-email-damien.lespiau@gmail.com> X-Mailer: git-send-email 1.7.7.5 Subject: [Intel-gfx] [PATCH] intel_infoframes: Dump HDMI vendor infoframes X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org From: Damien Lespiau Those infoframes are programmed when using stereo 3D modes. Signed-off-by: Damien Lespiau Reviewed-by: Rodrigo Vivi --- 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"); }