From patchwork Sat Nov 23 16:45:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: joevt X-Patchwork-Id: 11258879 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8089B6C1 for ; Sat, 23 Nov 2019 16:46:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5708B2072E for ; Sat, 23 Nov 2019 16:46:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="lCpHegJd"; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="lCpHegJd" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726931AbfKWQqS (ORCPT ); Sat, 23 Nov 2019 11:46:18 -0500 Received: from smtp-out-so.shaw.ca ([64.59.136.139]:37146 "EHLO smtp-out-so.shaw.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726736AbfKWQqR (ORCPT ); Sat, 23 Nov 2019 11:46:17 -0500 Received: from shaw.ca ([70.71.78.228]) by shaw.ca with ESMTPA id YYXziRYDERnrKYYY3iYY16; Sat, 23 Nov 2019 09:46:15 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527575; bh=vdpvk+aLchhzUvKmpaL3UtpTziTZZvkqiz6jGALooa8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=lCpHegJdJ492Cv0S/gt76V6V15Z5kb2BTja8z8yHOwshIwJs/IGGxN6YKNFlW1J6g dRIoXnoNp9SXhd4xsv8mEtkCcR0M76UzMSlE+CG0HiqXUQQuYvj+X3KIvQmAabhHSW +MG3b86hD2cWtrEY8BmyjpLO6w5uxptnCI9jscSaba+VOWYvNi0Toc42dKlxK3aDKH f8eN7t6E9oXo6VSlRnXcM2iVTPh9AYZxRcVw8vegrri2wFDLmkoZ9bKjFjar+VIGth aXpogvrys+ODOzxFHT5PrXuVhkOs+Ntu9TnpV8gMdIeIGrWa1JiGgfT1WCpEJzpuZC SXmuahv5q82cA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527575; bh=vdpvk+aLchhzUvKmpaL3UtpTziTZZvkqiz6jGALooa8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=lCpHegJdJ492Cv0S/gt76V6V15Z5kb2BTja8z8yHOwshIwJs/IGGxN6YKNFlW1J6g dRIoXnoNp9SXhd4xsv8mEtkCcR0M76UzMSlE+CG0HiqXUQQuYvj+X3KIvQmAabhHSW +MG3b86hD2cWtrEY8BmyjpLO6w5uxptnCI9jscSaba+VOWYvNi0Toc42dKlxK3aDKH f8eN7t6E9oXo6VSlRnXcM2iVTPh9AYZxRcVw8vegrri2wFDLmkoZ9bKjFjar+VIGth aXpogvrys+ODOzxFHT5PrXuVhkOs+Ntu9TnpV8gMdIeIGrWa1JiGgfT1WCpEJzpuZC SXmuahv5q82cA== X-Authority-Analysis: v=2.3 cv=L7FjvNb8 c=1 sm=1 tr=0 a=qDatE6m/3wxSEG8Wq7h0zQ==:117 a=qDatE6m/3wxSEG8Wq7h0zQ==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=_Dj-zB-qAAAA:8 a=oSUsc3AOH2OMAiy4OTkA:9 a=c-cOe7UV8MviEfHuAVEQ:22 From: joevt To: Hans Verkuil Cc: linux-media@vger.kernel.org, joevt Subject: [PATCH 01/10] edid-decode: change horizontal refresh rates to kHz Date: Sat, 23 Nov 2019 08:45:55 -0800 Message-Id: <20191123164604.268-2-joevt@shaw.ca> X-Mailer: git-send-email 2.21.0 (Apple Git-122.2) In-Reply-To: <20191123164604.268-1-joevt@shaw.ca> References: <20191123164604.268-1-joevt@shaw.ca> MIME-Version: 1.0 X-CMAE-Envelope: MS4wfOY6nnjBSesckqm77OB5dyWnLm6UQqNHBC7vZ047/8VRMvM6rNflFdVjf6nubFnhlRqoWuSaML5TpDL7gY6UtKQ9Pk5mYHLY/Ck9TSN39sE3kukH3vL+ 3vxf2yAYlkIAJKUDOtsw1JO9FDvEwO4CMcloVDH5RyAXMv0G7K9p+3yC/+wlJXV5bal3MLmvPjTsW9WVRaM91d6qU+HCWJvN14g= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org - Timings that show horizontal refresh rate should use kHz to distinguish them from vertical refresh rate (Hz) and pixel clock rate (MHz). Matches representation in Monitor ranges descriptor. - Make vertical refresh rate floating point instead of integer in detailed timings descriptors. For example, NTSC modes use 59.94 Hz and should not be rounded to 60 Hz. - Remove double space when "(native)" is not output for CTA VIC timings. Signed-off-by: Joe van Tunen --- edid-decode.c | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/edid-decode.c b/edid-decode.c index 932dd20..4ba0808 100644 --- a/edid-decode.c +++ b/edid-decode.c @@ -489,7 +489,7 @@ static int detailed_cvt_descriptor(const unsigned char *x, int first) edid_cvt_mode(width, height, 60, 1, &min_hfreq, &max_hfreq, &max_clock); - printf(" %ux%u @ ( %s%s%s%s%s) Hz %s (%s%s preferred) HorFreq: %u-%u Hz MaxClock: %.3f MHz\n", + printf(" %ux%u @ ( %s%s%s%s%s) Hz %s (%s%s preferred) HorFreq: %.3f-%.3f kHz MaxClock: %.3f MHz\n", width, height, fifty ? "50 " : "", sixty ? "60 " : "", @@ -499,7 +499,7 @@ static int detailed_cvt_descriptor(const unsigned char *x, int first) ratio, names[(x[2] & 0x60) >> 5], (((x[2] & 0x60) == 0x20) && reduced) ? "RB" : "", - min_hfreq, max_hfreq, max_clock / 1000000.0); + min_hfreq / 1000.0, max_hfreq / 1000.0, max_clock / 1000000.0); } return valid; @@ -709,9 +709,9 @@ static void print_standard_timing(uint8_t b1, uint8_t b2) min_hor_freq_hz = min(min_hor_freq_hz, hor_freq_hz); max_hor_freq_hz = max(max_hor_freq_hz, hor_freq_hz); max_pixclk_khz = max(max_pixclk_khz, pixclk_khz); - printf(" %ux%u@%uHz %u:%u HorFreq: %u Hz Clock: %.3f MHz\n", + printf(" %ux%u@%uHz %u:%u HorFreq: %.3f kHz Clock: %.3f MHz\n", x, y, refresh, ratio_w, ratio_h, - hor_freq_hz, pixclk_khz / 1000.0); + hor_freq_hz / 1000.0, pixclk_khz / 1000.0); } else { printf(" %ux%u@%uHz %u:%u\n", x, y, refresh, ratio_w, ratio_h); @@ -723,7 +723,8 @@ static int detailed_block(const unsigned char *x, int in_extension) { unsigned ha, hbl, hso, hspw, hborder, va, vbl, vso, vspw, vborder; unsigned hor_mm, vert_mm; - unsigned refresh, pixclk_khz; + unsigned pixclk_khz; + float refresh; unsigned i; char phsync, pvsync, *syncmethod, *stereo; @@ -769,12 +770,12 @@ static int detailed_block(const unsigned char *x, int in_extension) printf("Established timings III:\n"); for (i = 0; i < 44; i++) { if (x[6 + i / 8] & (1 << (7 - i % 8))) { - printf(" %dx%d@%dHz %s%u:%u HorFreq: %d Hz Clock: %.3f MHz\n", + printf(" %dx%d@%dHz %s%u:%u HorFreq: %.3f kHz Clock: %.3f MHz\n", established_timings3[i].x, established_timings3[i].y, established_timings3[i].refresh, established_timings3[i].rb ? "RB " : "", established_timings3[i].ratio_w, established_timings3[i].ratio_h, - established_timings3[i].hor_freq_hz, + established_timings3[i].hor_freq_hz / 1000.0, established_timings3[i].pixclk_khz / 1000.0); min_vert_freq_hz = min(min_vert_freq_hz, established_timings3[i].refresh); max_vert_freq_hz = max(max_vert_freq_hz, established_timings3[i].refresh); @@ -1078,20 +1079,20 @@ static int detailed_block(const unsigned char *x, int in_extension) } pixclk_khz = (x[0] + (x[1] << 8)) * 10; - refresh = (pixclk_khz * 1000) / ((ha + hbl) * (va + vbl)); + refresh = (pixclk_khz * 1000.0) / ((ha + hbl) * (va + vbl)); hor_mm = x[12] + ((x[14] & 0xf0) << 4); vert_mm = x[13] + ((x[14] & 0x0f) << 8); printf("Detailed mode: Clock %.3f MHz, %u mm x %u mm\n" " %4u %4u %4u %4u hborder %u\n" " %4u %4u %4u %4u vborder %u\n" " %chsync %cvsync%s%s %s\n" - " VertFreq: %u Hz, HorFreq: %u Hz\n", + " VertFreq: %.3f Hz, HorFreq: %.3f kHz\n", pixclk_khz / 1000.0, hor_mm, vert_mm, ha, ha + hso, ha + hso + hspw, ha + hbl, hborder, va, va + vso, va + vso + vspw, va + vbl, vborder, - phsync, pvsync, syncmethod, x[17] & 0x80 ? " interlaced" : "", - stereo, refresh, (pixclk_khz * 1000) / (ha + hbl) + phsync, pvsync, syncmethod, x[17] & 0x80 ? " interlaced" : "", stereo, + refresh, (float)pixclk_khz / (ha + hbl) ); if ((!max_display_width_mm && hor_mm) || (!max_display_height_mm && vert_mm)) { @@ -1505,8 +1506,8 @@ static void cta_svd(const unsigned char *x, unsigned n, int for_ycbcr420) mode = "Unknown mode"; } - printf(" VIC %3u %s %s HorFreq: %u Hz Clock: %.3f MHz\n", - vic, mode, native ? "(native)" : "", hfreq, clock_khz / 1000.0); + printf("VIC %3u %s%sHorFreq: %.3f kHz Clock: %.3f MHz", + vic, mode, native ? " (native) " : " ", hfreq / 1000.0, clock_khz / 1000.0); if (vic == 1) has_cta861_vic_1 = 1; } @@ -1690,8 +1691,8 @@ static void cta_hdmi_block(const unsigned char *x, unsigned length) mode = "Unknown mode"; } - printf(" HDMI VIC %u %s HorFreq: %u Hz Clock: %.3f MHz\n", - vic, mode, hfreq, clock_khz / 1000.0); + printf(" HDMI VIC %u %s HorFreq: %.3f kHz Clock: %.3f MHz\n", + vic, mode, hfreq / 1000.0, clock_khz / 1000.0); } b += len_vic; @@ -2706,14 +2707,14 @@ static int parse_displayid(const unsigned char *x) printf("Type 1 VESA DMT Timings Block\n"); for (i = 0; i < min(len, 10) * 8; i++) { if (x[offset + 3 + i / 8] & (1 << (i % 8))) { - printf(" %ux%u%s@%uHz %s%u:%u HorFreq: %u Hz Clock: %.3f MHz\n", + printf(" %ux%u%s@%uHz %s%u:%u HorFreq: %.3f kHz Clock: %.3f MHz\n", displayid_vesa_dmt[i].x, displayid_vesa_dmt[i].y, displayid_vesa_dmt[i].interlaced ? "i" : "", displayid_vesa_dmt[i].refresh, displayid_vesa_dmt[i].rb ? "RB " : "", displayid_vesa_dmt[i].ratio_w, displayid_vesa_dmt[i].ratio_h, - displayid_vesa_dmt[i].hor_freq_hz, + displayid_vesa_dmt[i].hor_freq_hz / 1000.0, displayid_vesa_dmt[i].pixclk_khz / 1000.0); min_vert_freq_hz = min(min_vert_freq_hz, displayid_vesa_dmt[i].refresh); max_vert_freq_hz = max(max_vert_freq_hz, displayid_vesa_dmt[i].refresh); @@ -3455,12 +3456,12 @@ static int edid_from_file(const char *from_file, const char *to_file, min_hor_freq_hz = min(min_hor_freq_hz, established_timings[i].hor_freq_hz); max_hor_freq_hz = max(max_hor_freq_hz, established_timings[i].hor_freq_hz); max_pixclk_khz = max(max_pixclk_khz, established_timings[i].pixclk_khz); - printf(" %ux%u%s@%uHz %u:%u HorFreq: %d Hz Clock: %.3f MHz\n", + printf(" %ux%u%s@%uHz %u:%u HorFreq: %.3f kHz Clock: %.3f MHz\n", established_timings[i].x, established_timings[i].y, established_timings[i].interlaced ? "i" : "", established_timings[i].refresh, established_timings[i].ratio_w, established_timings[i].ratio_h, - established_timings[i].hor_freq_hz, + established_timings[i].hor_freq_hz / 1000.0, established_timings[i].pixclk_khz / 1000.0); } } From patchwork Sat Nov 23 16:45:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: joevt X-Patchwork-Id: 11258873 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A11371871 for ; Sat, 23 Nov 2019 16:46:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8175C2070E for ; Sat, 23 Nov 2019 16:46:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="G0KjjcVp"; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="G0KjjcVp" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726880AbfKWQqR (ORCPT ); Sat, 23 Nov 2019 11:46:17 -0500 Received: from smtp-out-so.shaw.ca ([64.59.136.138]:37152 "EHLO smtp-out-so.shaw.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726830AbfKWQqQ (ORCPT ); Sat, 23 Nov 2019 11:46:16 -0500 Received: from shaw.ca ([70.71.78.228]) by shaw.ca with ESMTPA id YYXziRYDERnrKYYY3iYY1F; Sat, 23 Nov 2019 09:46:15 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527575; bh=wtC6XX3sKWCeRGLsI8xkJDFX/3yt6H8wpQGBSPJXp4w=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=G0KjjcVp9YFFOO97MjNL/CH3RYi6hFtXW8l+e1xwlP8kVJEfj4JObaCe7qN6cnoXc XM95JnL0IfgY0V5+EaA5+d8ehpjMfoex/a7Clv6Tpcssw18bwhc5HyB7NUlOcc7bMD 97FuugtX1woQMUyLJwVlMbGrxT/KL2EmebqTAZVqGSb9gC33yJ2myx8hwZX2BNbXyU DhhviWFRe+QiIm+46AZBl0Wh9t00iG3JaJ/bD7k/w9BUI2o0oJuDCcJGLr1pT+LRa9 j1Is+IV72R9ke204JoRv0ZFhOMHXz+6jpJtyKhwstE1CAq20LpGROC3jntsl4BQm+X Y3AUgZTTg9ILg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527575; bh=wtC6XX3sKWCeRGLsI8xkJDFX/3yt6H8wpQGBSPJXp4w=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=G0KjjcVp9YFFOO97MjNL/CH3RYi6hFtXW8l+e1xwlP8kVJEfj4JObaCe7qN6cnoXc XM95JnL0IfgY0V5+EaA5+d8ehpjMfoex/a7Clv6Tpcssw18bwhc5HyB7NUlOcc7bMD 97FuugtX1woQMUyLJwVlMbGrxT/KL2EmebqTAZVqGSb9gC33yJ2myx8hwZX2BNbXyU DhhviWFRe+QiIm+46AZBl0Wh9t00iG3JaJ/bD7k/w9BUI2o0oJuDCcJGLr1pT+LRa9 j1Is+IV72R9ke204JoRv0ZFhOMHXz+6jpJtyKhwstE1CAq20LpGROC3jntsl4BQm+X Y3AUgZTTg9ILg== X-Authority-Analysis: v=2.3 cv=L7FjvNb8 c=1 sm=1 tr=0 a=qDatE6m/3wxSEG8Wq7h0zQ==:117 a=qDatE6m/3wxSEG8Wq7h0zQ==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=_Dj-zB-qAAAA:8 a=_r8jtnByQG3AnPmwQugA:9 a=c-cOe7UV8MviEfHuAVEQ:22 From: joevt To: Hans Verkuil Cc: linux-media@vger.kernel.org, joevt Subject: [PATCH 03/10] edid-decode: correct calculation of DisplayID type 1 timings Date: Sat, 23 Nov 2019 08:45:57 -0800 Message-Id: <20191123164604.268-4-joevt@shaw.ca> X-Mailer: git-send-email 2.21.0 (Apple Git-122.2) In-Reply-To: <20191123164604.268-1-joevt@shaw.ca> References: <20191123164604.268-1-joevt@shaw.ca> MIME-Version: 1.0 X-CMAE-Envelope: MS4wfOY6nnjBSesckqm77OB5dyWnLm6UQqNHBC7vZ047/8VRMvM6rNflFdVjf6nubFnhlRqoWuSaML5TpDL7gY6UtKQ9Pk5mYHLY/Ck9TSN39sE3kukH3vL+ 3vxf2yAYlkIAJKUDOtsw1JO9FDvEwO4CMcloVDH5RyAXMv0G7K9p+3yC/+wlJXV5bal3MLmvPjTsW9WVRaM91d6qU+HCWJvN14g= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Fix DisplayID type 1 timing calculations which is missing the +1 increment for pix_clock,ha,hbl,hso,hspw,va,vbl,vso,vspw. Signed-off-by: Joe van Tunen --- edid-decode.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/edid-decode.c b/edid-decode.c index b2e57a3..e1386ce 100644 --- a/edid-decode.c +++ b/edid-decode.c @@ -2550,6 +2550,18 @@ static void parse_displayid_detailed_timing(const unsigned char *x) vspw = x[18] | (x[19] << 8); pvsync = ((x[17] >> 7) & 0x1 ) ? '+' : '-'; + pix_clock++; + + ha++; + hbl++; + hso++; + hspw++; + + va++; + vbl++; + vso++; + vspw++; + printf(" Detailed mode: Clock %.3f MHz, %u mm x %u mm\n" " %4u %4u %4u %4u\n" " %4u %4u %4u %4u\n" From patchwork Sat Nov 23 16:45:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: joevt X-Patchwork-Id: 11258875 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CDCB76C1 for ; Sat, 23 Nov 2019 16:46:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AA9DF2072D for ; Sat, 23 Nov 2019 16:46:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="slJlpizL"; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="slJlpizL" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726912AbfKWQqS (ORCPT ); Sat, 23 Nov 2019 11:46:18 -0500 Received: from smtp-out-so.shaw.ca ([64.59.136.137]:37162 "EHLO smtp-out-so.shaw.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726833AbfKWQqR (ORCPT ); Sat, 23 Nov 2019 11:46:17 -0500 Received: from shaw.ca ([70.71.78.228]) by shaw.ca with ESMTPA id YYXziRYDERnrKYYY3iYY1J; Sat, 23 Nov 2019 09:46:16 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527576; bh=45pz/308vOm0ht33y3DGrmVZ6xsAostU8WmNOxgwIg0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=slJlpizL+02sfUW3oYFuSvreumhlsan4W9NiGCL4MJqnQonmm0rDm390TqYF6gX13 fcpdz2rWBlN6C+76hn6M9XLDdlqsUc5nHJZBkzi3TGAXAAyOLnx789JmyWi2FLtzof adzXFLzpdZc4Flw1I9OcebfQR1KIcBvnvlE5efeKcCI2rbDWWVx+SO/hqTLUfIdEHY yfgKymrDPhlBHnKoT57gw3VqFNyX4lWJPNaZ6uIrBrvhddc56SFBQc7OCLoGvZ3WdJ MDJoFWuo9IHqyi6LcBiT9/4+Fn1AUfVeYqVxU3OUyF05W9vss8PYbHB3EVFYhCPp25 nZsrn4LjCc2Ew== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527576; bh=45pz/308vOm0ht33y3DGrmVZ6xsAostU8WmNOxgwIg0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=slJlpizL+02sfUW3oYFuSvreumhlsan4W9NiGCL4MJqnQonmm0rDm390TqYF6gX13 fcpdz2rWBlN6C+76hn6M9XLDdlqsUc5nHJZBkzi3TGAXAAyOLnx789JmyWi2FLtzof adzXFLzpdZc4Flw1I9OcebfQR1KIcBvnvlE5efeKcCI2rbDWWVx+SO/hqTLUfIdEHY yfgKymrDPhlBHnKoT57gw3VqFNyX4lWJPNaZ6uIrBrvhddc56SFBQc7OCLoGvZ3WdJ MDJoFWuo9IHqyi6LcBiT9/4+Fn1AUfVeYqVxU3OUyF05W9vss8PYbHB3EVFYhCPp25 nZsrn4LjCc2Ew== X-Authority-Analysis: v=2.3 cv=L7FjvNb8 c=1 sm=1 tr=0 a=qDatE6m/3wxSEG8Wq7h0zQ==:117 a=qDatE6m/3wxSEG8Wq7h0zQ==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=_Dj-zB-qAAAA:8 a=LX1Smp8SeW7qzEvS9iwA:9 a=c-cOe7UV8MviEfHuAVEQ:22 From: joevt To: Hans Verkuil Cc: linux-media@vger.kernel.org, joevt Subject: [PATCH 04/10] edid-decode: add front porch, pulse width, and back porch Date: Sat, 23 Nov 2019 08:45:58 -0800 Message-Id: <20191123164604.268-5-joevt@shaw.ca> X-Mailer: git-send-email 2.21.0 (Apple Git-122.2) In-Reply-To: <20191123164604.268-1-joevt@shaw.ca> References: <20191123164604.268-1-joevt@shaw.ca> MIME-Version: 1.0 X-CMAE-Envelope: MS4wfNqLdg9ZMaVKC21oywaFt3H2bmA4YWhViyWonWA1WjvSCAEe3Hxa+KbFs9/SNd4ZO7JkIwMXwq2UloVIL/JtoYTG6UZAghSoIQ1tAq28T9I+4o2kIusj 94N4R7mU4NjgkzMPk420nSsXDfywUqT72ReQMGimik884sXR9gG/i2L30LqzQ1p0adqWTZp/wT2Jyvr0RrPkEFILxSRUOtiZU4g= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org For detailed timings, add front porch, pulse width, and back porch numbers in parenthesis (smaller integers are easier to comprehend, useful when comparing or editing timings in SwitchResX or other custom timing editors, negative values will be more apparent - this can happen for back porch when offset and width exceed total blanking). Also, add missing VertFreq and HorFreq values to DisplayID type 1 timings. Signed-off-by: Joe van Tunen --- edid-decode.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/edid-decode.c b/edid-decode.c index e1386ce..b833178 100644 --- a/edid-decode.c +++ b/edid-decode.c @@ -1083,14 +1083,14 @@ static int detailed_block(const unsigned char *x, int in_extension) hor_mm = x[12] + ((x[14] & 0xf0) << 4); vert_mm = x[13] + ((x[14] & 0x0f) << 8); printf("Detailed mode: Clock %.3f MHz, %u mm x %u mm\n" - " %4u %4u %4u %4u hborder %u\n" - " %4u %4u %4u %4u vborder %u\n" + " %4u %4u %4u %4u (%3u %3u %3d) hborder %u\n" + " %4u %4u %4u %4u (%3u %3u %3d) vborder %u\n" " %chsync %cvsync%s%s %s\n" " VertFreq: %.3f Hz, HorFreq: %.3f kHz\n", pixclk_khz / 1000.0, hor_mm, vert_mm, - ha, ha + hso, ha + hso + hspw, ha + hbl, hborder, - va, va + vso, va + vso + vspw, va + vbl, vborder, + ha, ha + hso, ha + hso + hspw, ha + hbl, hso, hspw, hbl - hso - hspw, hborder, + va, va + vso, va + vso + vspw, va + vbl, vso, vspw, vbl - vso - vspw, vborder, phsync, pvsync, syncmethod, x[17] & 0x80 ? " interlaced" : "", stereo, refresh, (float)pixclk_khz / (ha + hbl) ); @@ -2563,13 +2563,15 @@ static void parse_displayid_detailed_timing(const unsigned char *x) vspw++; printf(" Detailed mode: Clock %.3f MHz, %u mm x %u mm\n" - " %4u %4u %4u %4u\n" - " %4u %4u %4u %4u\n" - " %chsync %cvsync\n", + " %4u %4u %4u %4u (%3u %3u %3d)\n" + " %4u %4u %4u %4u (%3u %3u %3d)\n" + " %chsync %cvsync\n" + " VertFreq: %.3f Hz, HorFreq: %.3f kHz\n", (float)pix_clock/100.0, 0, 0, - ha, ha + hso, ha + hso + hspw, ha + hbl, - va, va + vso, va + vso + vspw, va + vbl, - phsync, pvsync + ha, ha + hso, ha + hso + hspw, ha + hbl, hso, hspw, hbl - hso - hspw, + va, va + vso, va + vso + vspw, va + vbl, vso, vspw, vbl - vso - vspw, + phsync, pvsync, + ((float)pix_clock * 10000.0) / ((ha + hbl) * (va + vbl)), ((float)pix_clock * 10.0) / (ha + hbl) ); } From patchwork Sat Nov 23 16:45:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: joevt X-Patchwork-Id: 11258877 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2A5861593 for ; Sat, 23 Nov 2019 16:46:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0616F2072E for ; Sat, 23 Nov 2019 16:46:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="QCwQhfoV"; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="QCwQhfoV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726921AbfKWQqS (ORCPT ); Sat, 23 Nov 2019 11:46:18 -0500 Received: from smtp-out-so.shaw.ca ([64.59.136.137]:37168 "EHLO smtp-out-so.shaw.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726846AbfKWQqR (ORCPT ); Sat, 23 Nov 2019 11:46:17 -0500 Received: from shaw.ca ([70.71.78.228]) by shaw.ca with ESMTPA id YYXziRYDERnrKYYY4iYY1T; Sat, 23 Nov 2019 09:46:16 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527576; bh=yHM15E0mgPxHjr4gDvSPEl+X3DtcLDljv/nphZkr49I=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=QCwQhfoVkrBXkEfxzMYEqEkQTrQUXyXYDSWflB6E6Dqzi+qQcrHQx1it6IsOvNQIs xZUuPP2MesetnaRE+98QXEgUbn1YzWCYOBxAedHdL+c6iDcp85zhDUDm0+Q9CzloHB I4jZZ7wIXdJUXyBhxgIY9QlEz2iHTtqLIBa+Opj+3jInAAKho8EISSLkuzT4/2OW8s a/vKzfinPSQEEIH1M1pbV5QR4kztAw2YIE5oRVkksZZ+APABqM7wa1pfp7zETrFl7L LRGGoBLaCioYW4H1E8vt/v5fOyO+8VKTn2UOkDJ2mwhwEDoiQgq+fqi883n/WWqIUk yuOoRSSVbjBCw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527576; bh=yHM15E0mgPxHjr4gDvSPEl+X3DtcLDljv/nphZkr49I=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=QCwQhfoVkrBXkEfxzMYEqEkQTrQUXyXYDSWflB6E6Dqzi+qQcrHQx1it6IsOvNQIs xZUuPP2MesetnaRE+98QXEgUbn1YzWCYOBxAedHdL+c6iDcp85zhDUDm0+Q9CzloHB I4jZZ7wIXdJUXyBhxgIY9QlEz2iHTtqLIBa+Opj+3jInAAKho8EISSLkuzT4/2OW8s a/vKzfinPSQEEIH1M1pbV5QR4kztAw2YIE5oRVkksZZ+APABqM7wa1pfp7zETrFl7L LRGGoBLaCioYW4H1E8vt/v5fOyO+8VKTn2UOkDJ2mwhwEDoiQgq+fqi883n/WWqIUk yuOoRSSVbjBCw== X-Authority-Analysis: v=2.3 cv=L7FjvNb8 c=1 sm=1 tr=0 a=qDatE6m/3wxSEG8Wq7h0zQ==:117 a=qDatE6m/3wxSEG8Wq7h0zQ==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=_Dj-zB-qAAAA:8 a=Y0AxvjjkuhBQz6IG164A:9 a=-zfNXOI2J4Al7ZIw:21 a=8FACJTD6ELLG4Xgd:21 a=c-cOe7UV8MviEfHuAVEQ:22 From: joevt To: Hans Verkuil Cc: linux-media@vger.kernel.org, joevt Subject: [PATCH 05/10] edid-decode: output timings for YCbCr 4:2:0 cmdb Date: Sat, 23 Nov 2019 08:45:59 -0800 Message-Id: <20191123164604.268-6-joevt@shaw.ca> X-Mailer: git-send-email 2.21.0 (Apple Git-122.2) In-Reply-To: <20191123164604.268-1-joevt@shaw.ca> References: <20191123164604.268-1-joevt@shaw.ca> MIME-Version: 1.0 X-CMAE-Envelope: MS4wfNqLdg9ZMaVKC21oywaFt3H2bmA4YWhViyWonWA1WjvSCAEe3Hxa+KbFs9/SNd4ZO7JkIwMXwq2UloVIL/JtoYTG6UZAghSoIQ1tAq28T9I+4o2kIusj 94N4R7mU4NjgkzMPk420nSsXDfywUqT72ReQMGimik884sXR9gG/i2L30LqzQ1p0adqWTZp/wT2Jyvr0RrPkEFILxSRUOtiZU4g= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org - "YCbCr 4:2:0 capability map data block" now outputs the modes that support YCbCr 4:2:0 instead of just indexes of the modes. Indexes refer to timings in "Video Data Block". - Warnings are included in the output if "Video Data Block" doesn't appear before "YCbCr 4:2:0 Capability Map Data Block" or if the index is outside the range defined in the "Video Data Block". - Moved inner loop of cta_svd into a new function cta_svd_one so that it can be reused by cta_y420cmdb. Signed-off-by: Joe van Tunen --- edid-decode.c | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/edid-decode.c b/edid-decode.c index b833178..4d6fe29 100644 --- a/edid-decode.c +++ b/edid-decode.c @@ -1454,13 +1454,10 @@ static const struct edid_cta_mode *vic_to_mode(unsigned char vic) return NULL; } -static void cta_svd(const unsigned char *x, unsigned n, int for_ycbcr420) +static void cta_svd_one(const unsigned char *x, int for_ycbcr420) { - unsigned i; - - for (i = 0; i < n; i++) { const struct edid_cta_mode *vicmode = NULL; - unsigned char svd = x[i]; + unsigned char svd = x[0]; unsigned char native; unsigned char vic; const char *mode; @@ -1468,7 +1465,7 @@ static void cta_svd(const unsigned char *x, unsigned n, int for_ycbcr420) unsigned clock_khz = 0; if ((svd & 0x7f) == 0) - continue; + return; if ((svd - 1) & 0x40) { vic = svd; @@ -1511,10 +1508,23 @@ static void cta_svd(const unsigned char *x, unsigned n, int for_ycbcr420) if (vic == 1) has_cta861_vic_1 = 1; } + +static void cta_svd(const unsigned char *x, int n, int for_ycbcr420) +{ + for (unsigned i = 0; i < n; i++) { + printf(" "); + cta_svd_one(x+i, for_ycbcr420); + printf("\n"); + } } +unsigned const char *last_cta_video_block_start = NULL; +unsigned last_cta_video_block_length = 0; + static void cta_video_block(const unsigned char *x, unsigned length) { + last_cta_video_block_start = x; + last_cta_video_block_length = length; cta_svd(x, length, 0); } @@ -1531,9 +1541,25 @@ static void cta_y420cmdb(const unsigned char *x, unsigned length) uint8_t v = x[0 + i]; unsigned j; - for (j = 0; j < 8; j++) - if (v & (1 << j)) - printf(" VSD Index %u\n", i * 8 + j); + for (j = 0; j < 8; j++) { + if (v & (1 << j)) { + unsigned k = i * 8 + j; + printf(" VSD Index %u", k + 1); + if (k >= last_cta_video_block_length) { + if (last_cta_video_block_start) { + printf(" (out of range)"); + } else { + printf(" (missing CTA video block)"); + } + } + else + { + printf(" "); + cta_svd_one(last_cta_video_block_start+k, 0); + } + printf("\n"); + } + } } } From patchwork Sat Nov 23 16:46:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: joevt X-Patchwork-Id: 11258887 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A84AE1593 for ; Sat, 23 Nov 2019 16:46:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8888A2071C for ; Sat, 23 Nov 2019 16:46:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="qJ+YZIBB"; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="qJ+YZIBB" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726907AbfKWQqR (ORCPT ); Sat, 23 Nov 2019 11:46:17 -0500 Received: from smtp-out-so.shaw.ca ([64.59.136.138]:37172 "EHLO smtp-out-so.shaw.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726861AbfKWQqR (ORCPT ); Sat, 23 Nov 2019 11:46:17 -0500 Received: from shaw.ca ([70.71.78.228]) by shaw.ca with ESMTPA id YYXziRYDERnrKYYY4iYY1W; Sat, 23 Nov 2019 09:46:16 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527576; bh=ZbZjeMg4bRMV1Ftgtz/8dBzcw3I1FF14MWwDJ/6Nyms=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=qJ+YZIBBG+seLo3EEBwiTNhNVyTSYL2iNNZA6I/KeV0qjuAlWP6Si5x3M1gTOZG0l tN6ZKzDcEN8RDlPH0FSKBnnTE0gpd9TlS6f/xzIlWKhcWqVoTFIJoYn1+jCbok+Kon DPlKU/XGUVECHoXPiPSlHoRahzMO4JndlUVAfufUd7nx33VJLskdET2b+A/5yxHoKP 4YHtO2p4izUCDMuRu8EFngt7Fu2GXCNZqvT9VznZVhhtFjeXX7Goahz1FvSdqDzPdY vrc0jiS2E/M91j/iCPHc+5IEfc6Nb7VvOGbqtCLxF8Ke6NrQWpmM8/fwDDF75dJYDL DANpZECJ5Zgjw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527576; bh=ZbZjeMg4bRMV1Ftgtz/8dBzcw3I1FF14MWwDJ/6Nyms=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=qJ+YZIBBG+seLo3EEBwiTNhNVyTSYL2iNNZA6I/KeV0qjuAlWP6Si5x3M1gTOZG0l tN6ZKzDcEN8RDlPH0FSKBnnTE0gpd9TlS6f/xzIlWKhcWqVoTFIJoYn1+jCbok+Kon DPlKU/XGUVECHoXPiPSlHoRahzMO4JndlUVAfufUd7nx33VJLskdET2b+A/5yxHoKP 4YHtO2p4izUCDMuRu8EFngt7Fu2GXCNZqvT9VznZVhhtFjeXX7Goahz1FvSdqDzPdY vrc0jiS2E/M91j/iCPHc+5IEfc6Nb7VvOGbqtCLxF8Ke6NrQWpmM8/fwDDF75dJYDL DANpZECJ5Zgjw== X-Authority-Analysis: v=2.3 cv=L7FjvNb8 c=1 sm=1 tr=0 a=qDatE6m/3wxSEG8Wq7h0zQ==:117 a=qDatE6m/3wxSEG8Wq7h0zQ==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=_Dj-zB-qAAAA:8 a=bAolQom50hykzV7YMrMA:9 a=3YPUzw7YLU6Ixx1t:21 a=L6LgHPg5I2kkYD5o:21 a=c-cOe7UV8MviEfHuAVEQ:22 From: joevt To: Hans Verkuil Cc: linux-media@vger.kernel.org, joevt Subject: [PATCH 06/10] edid-decode: Dump hex of unknown CTA Vendor-Specific blocks Date: Sat, 23 Nov 2019 08:46:00 -0800 Message-Id: <20191123164604.268-7-joevt@shaw.ca> X-Mailer: git-send-email 2.21.0 (Apple Git-122.2) In-Reply-To: <20191123164604.268-1-joevt@shaw.ca> References: <20191123164604.268-1-joevt@shaw.ca> MIME-Version: 1.0 X-CMAE-Envelope: MS4wfNqLdg9ZMaVKC21oywaFt3H2bmA4YWhViyWonWA1WjvSCAEe3Hxa+KbFs9/SNd4ZO7JkIwMXwq2UloVIL/JtoYTG6UZAghSoIQ1tAq28T9I+4o2kIusj 94N4R7mU4NjgkzMPk420nSsXDfywUqT72ReQMGimik884sXR9gG/i2L30LqzQ1p0adqWTZp/wT2Jyvr0RrPkEFILxSRUOtiZU4g= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org - Unknown CTA Vendor-Specific blocks will output as hex. With this, two EDIDs with different data will not be considered equal. - Added hex_block to output hex for blocks of data that are not decoded. Signed-off-by: Joe van Tunen --- edid-decode.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/edid-decode.c b/edid-decode.c index 4d6fe29..ce404cd 100644 --- a/edid-decode.c +++ b/edid-decode.c @@ -1934,6 +1934,18 @@ static void cta_hdr10plus(const unsigned char *x, unsigned length) printf(" Application Version: %u\n", x[0]); } +static void hex_block(const unsigned char *x, unsigned int length) +{ + if (length) { + for (int i = 0; i < length; i++) + printf("%02x", x[i]); + printf(" "); + for (int i = 0; i < length; i++) + printf("%c", x[i] >= ' ' && x[i] <= '~' ? x[i] : '.'); + printf("\n"); + } +} + DEFINE_FIELD("YCbCr quantization", YCbCr_quantization, 7, 7, { 0, "No Data" }, { 1, "Selectable (via AVI YQ)" }); @@ -2321,7 +2333,9 @@ static void cta_block(const unsigned char *x) cta_hf_scdb(x + 4, length - 3); have_hf_vsdb = 1; } else { - printf("\n"); + printf(" (unknown)\n"); + printf(" "); + hex_block(x + 4, length - 3); } break; case 0x04: @@ -2348,7 +2362,9 @@ static void cta_block(const unsigned char *x) printf(" (HDR10+)\n"); cta_hdr10plus(x + 5, length - 4); } else { - printf("\n"); + printf(" (unknown)\n"); + printf(" "); + hex_block(x + 5, length - 4); } break; case 0x02: From patchwork Sat Nov 23 16:46:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: joevt X-Patchwork-Id: 11258883 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6C1136C1 for ; Sat, 23 Nov 2019 16:46:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4CA932071C for ; Sat, 23 Nov 2019 16:46:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="wXIBedy3"; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="wXIBedy3" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726920AbfKWQqS (ORCPT ); Sat, 23 Nov 2019 11:46:18 -0500 Received: from smtp-out-so.shaw.ca ([64.59.136.139]:37148 "EHLO smtp-out-so.shaw.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726820AbfKWQqR (ORCPT ); Sat, 23 Nov 2019 11:46:17 -0500 Received: from shaw.ca ([70.71.78.228]) by shaw.ca with ESMTPA id YYXziRYDERnrKYYY4iYY1e; Sat, 23 Nov 2019 09:46:16 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527577; bh=+DvTZw0HCG61wE7UVXahKaZLea8jmyMj2TeQ9lVUMEw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=wXIBedy3bcMEKlOBqn/yFz+E86YoR68+CUn1xPIl5E7mHY7ITekRBlu5Je8143tPC ht5TFnpm8i9tmnNriWf8X4/9HIHrvIv+dmu/POQDbEs892F21CqbCuOrWwgKb1r0zp PWajdhHSvroFi3oYXa8128LnxqG9LGsGHsOCFQOkrYytDYl2uyDpQdSUejIhgxd5rh I6tsPhHNHVCRpWGe1ElwVa/UVW9XBVyze+t3lqvNMlrDLXnFd1Otgb11SBsONbojcX HgFVIeNCo6pGLnAybtKfQ7UoZV1KnstsGgZwLjMBLJfZZu5icrh7MNIHBF2pvgk+kJ n8g8clYPD7vPw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527577; bh=+DvTZw0HCG61wE7UVXahKaZLea8jmyMj2TeQ9lVUMEw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=wXIBedy3bcMEKlOBqn/yFz+E86YoR68+CUn1xPIl5E7mHY7ITekRBlu5Je8143tPC ht5TFnpm8i9tmnNriWf8X4/9HIHrvIv+dmu/POQDbEs892F21CqbCuOrWwgKb1r0zp PWajdhHSvroFi3oYXa8128LnxqG9LGsGHsOCFQOkrYytDYl2uyDpQdSUejIhgxd5rh I6tsPhHNHVCRpWGe1ElwVa/UVW9XBVyze+t3lqvNMlrDLXnFd1Otgb11SBsONbojcX HgFVIeNCo6pGLnAybtKfQ7UoZV1KnstsGgZwLjMBLJfZZu5icrh7MNIHBF2pvgk+kJ n8g8clYPD7vPw== X-Authority-Analysis: v=2.3 cv=L7FjvNb8 c=1 sm=1 tr=0 a=qDatE6m/3wxSEG8Wq7h0zQ==:117 a=qDatE6m/3wxSEG8Wq7h0zQ==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=_Dj-zB-qAAAA:8 a=gBTKqA94KM4qIfOADQQA:9 a=U9RPtI0sKH2XMvbP:21 a=mG_VuKtMimwJnITi:21 a=c-cOe7UV8MviEfHuAVEQ:22 From: joevt To: Hans Verkuil Cc: linux-media@vger.kernel.org, joevt Subject: [PATCH 07/10] edid-decode: cleanup printf format string compiler warnings Date: Sat, 23 Nov 2019 08:46:01 -0800 Message-Id: <20191123164604.268-8-joevt@shaw.ca> X-Mailer: git-send-email 2.21.0 (Apple Git-122.2) In-Reply-To: <20191123164604.268-1-joevt@shaw.ca> References: <20191123164604.268-1-joevt@shaw.ca> MIME-Version: 1.0 X-CMAE-Envelope: MS4wfHTxCG5BBpoqkDnryCe3eCAVNgzieEoKks7Hy73AmgTyK49aGkASM0AptWx4zV0Y8/jCwTFs5TrkkPIvdUsEt8sAo2NJLu50eliXViL5HtWazze6AqWL Ivc6cXFbpMN03Fh9mDgFJ+K5GGdyM6+/x80ISUtFMbStwXc+2qSB8FbbObvaYMRraG+3FdMCaFn7dspV4UaztgaiH0wPQVZ6HWw= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org In current versions of macOS, $(CC) in Makefile is gcc but gcc points to clang. clang complains when h is used for char or int (h is usually for short). Signed-off-by: Joe van Tunen --- edid-decode.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/edid-decode.c b/edid-decode.c index ce404cd..a40ee96 100644 --- a/edid-decode.c +++ b/edid-decode.c @@ -1127,13 +1127,13 @@ static int do_checksum(const unsigned char *x, size_t len) unsigned char sum = 0; unsigned i; - printf("Checksum: 0x%hx", check); + printf("Checksum: 0x%hhx", check); for (i = 0; i < len-1; i++) sum += x[i]; if ((unsigned char)(check + sum) != 0) { - printf(" (should be 0x%hx)\n", -sum & 0xff); + printf(" (should be 0x%x)\n", -sum & 0xff); return 0; } @@ -3286,7 +3286,7 @@ static int edid_from_file(const char *from_file, const char *to_file, } cur_block = "EDID Structure Version & Revision"; - printf("EDID version: %hd.%hd\n", edid[0x12], edid[0x13]); + printf("EDID version: %hhu.%hhu\n", edid[0x12], edid[0x13]); if (edid[0x12] == 1) { if (edid[0x13] > 4) { printf("Claims > 1.4, assuming 1.4 conformance\n"); @@ -3321,12 +3321,12 @@ static int edid_from_file(const char *from_file, const char *to_file, if (edid[0x11] <= 0x0f) { fail("bad year of manufacture\n"); } else if (edid[0x10] == 0xff) { - printf("Model year %hu\n", edid[0x11] + 1990); + printf("Model year %u\n", edid[0x11] + 1990); } else if (edid[0x11] + 90 <= ptm->tm_year + 1) { if (edid[0x10]) - printf("Made in week %hu of %hu\n", edid[0x10], edid[0x11] + 1990); + printf("Made in week %hhu of %u\n", edid[0x10], edid[0x11] + 1990); else - printf("Made in year %hu\n", edid[0x11] + 1990); + printf("Made in year %u\n", edid[0x11] + 1990); } else { fail("bad year of manufacture\n"); } From patchwork Sat Nov 23 16:46:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: joevt X-Patchwork-Id: 11258889 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 15A6A6C1 for ; Sat, 23 Nov 2019 16:46:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E99C02070E for ; Sat, 23 Nov 2019 16:46:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="WkKvnKlE"; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="WkKvnKlE" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726940AbfKWQqW (ORCPT ); Sat, 23 Nov 2019 11:46:22 -0500 Received: from smtp-out-so.shaw.ca ([64.59.136.139]:37140 "EHLO smtp-out-so.shaw.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726762AbfKWQqS (ORCPT ); Sat, 23 Nov 2019 11:46:18 -0500 Received: from shaw.ca ([70.71.78.228]) by shaw.ca with ESMTPA id YYXziRYDERnrKYYY5iYY1i; Sat, 23 Nov 2019 09:46:17 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527577; bh=W2p2Hmg89fX4bVuRhORHOb/8pV7N+eSayByFMdSiwcc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=WkKvnKlE2ab20Shoy3uq8kVVeX/AzxVD6P6Z+Y1Z0PWDKfyjKkVJS6rA6wJuOgBqf nitf/VsuVTWMeKVxHWIWEsTHQJywQxb+gKd7ibPPseN6vK/7yhOOS4J+HdH3kVO1ve O/MrBYEjiLpk3mupmWMWCijLV/ghxKSiJNes40ppzmZwyqrqzKSRnSe3VkhzSbGoUb 3VsfAK6V+JdaH/+zMSDYRjHVwPNHQVaNqmOotxDAcnxGJWPW+GC7qUzfCZlXjNuUGS FyEYhHQ5AtBfahfLAYKiiOfRjZLsrifYK3R7LN3caZleNTlzu3/KzJMpTOoEkuSexs Lia7cr0UzAV6A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527577; bh=W2p2Hmg89fX4bVuRhORHOb/8pV7N+eSayByFMdSiwcc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=WkKvnKlE2ab20Shoy3uq8kVVeX/AzxVD6P6Z+Y1Z0PWDKfyjKkVJS6rA6wJuOgBqf nitf/VsuVTWMeKVxHWIWEsTHQJywQxb+gKd7ibPPseN6vK/7yhOOS4J+HdH3kVO1ve O/MrBYEjiLpk3mupmWMWCijLV/ghxKSiJNes40ppzmZwyqrqzKSRnSe3VkhzSbGoUb 3VsfAK6V+JdaH/+zMSDYRjHVwPNHQVaNqmOotxDAcnxGJWPW+GC7qUzfCZlXjNuUGS FyEYhHQ5AtBfahfLAYKiiOfRjZLsrifYK3R7LN3caZleNTlzu3/KzJMpTOoEkuSexs Lia7cr0UzAV6A== X-Authority-Analysis: v=2.3 cv=L7FjvNb8 c=1 sm=1 tr=0 a=qDatE6m/3wxSEG8Wq7h0zQ==:117 a=qDatE6m/3wxSEG8Wq7h0zQ==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=_Dj-zB-qAAAA:8 a=MUTA2ij1fCMc5pG9_j0A:9 a=c-cOe7UV8MviEfHuAVEQ:22 From: joevt To: Hans Verkuil Cc: linux-media@vger.kernel.org, joevt Subject: [PATCH 08/10] edid-decode: Dump hex of non-decoded extension blocks Date: Sat, 23 Nov 2019 08:46:02 -0800 Message-Id: <20191123164604.268-9-joevt@shaw.ca> X-Mailer: git-send-email 2.21.0 (Apple Git-122.2) In-Reply-To: <20191123164604.268-1-joevt@shaw.ca> References: <20191123164604.268-1-joevt@shaw.ca> MIME-Version: 1.0 X-CMAE-Envelope: MS4wfHTxCG5BBpoqkDnryCe3eCAVNgzieEoKks7Hy73AmgTyK49aGkASM0AptWx4zV0Y8/jCwTFs5TrkkPIvdUsEt8sAo2NJLu50eliXViL5HtWazze6AqWL Ivc6cXFbpMN03Fh9mDgFJ+K5GGdyM6+/x80ISUtFMbStwXc+2qSB8FbbObvaYMRraG+3FdMCaFn7dspV4UaztgaiH0wPQVZ6HWw= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org - Extension blocks that are not decoded will at least have their contents output as hex. With this, two EDIDs with different data in an undecoded extension block will not be considered equal. - For unknown extension blocks, include the Extension Block tag number. - Renamed conformant_extension to nonconformant_extension in parse_extension because boolean value of 1 = nonconformant according to return result of parse_cta and parse_displayid; matches interpretation in edid_from_file. Signed-off-by: Joe van Tunen --- edid-decode.c | 80 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 62 insertions(+), 18 deletions(-) diff --git a/edid-decode.c b/edid-decode.c index a40ee96..2f2f1c5 100644 --- a/edid-decode.c +++ b/edid-decode.c @@ -2474,7 +2474,7 @@ static void cta_block(const unsigned char *x) static int parse_cta(const unsigned char *x) { - int ret = 0; + int ret = 0; // 0 = conformant unsigned version = x[1]; unsigned offset = x[2]; const unsigned char *detailed; @@ -2483,7 +2483,7 @@ static int parse_cta(const unsigned char *x) if (version >= 1) do { if (version == 1 && x[3] != 0) - ret = 1; + ret = 1; // 1 = nonconformant if (offset < 4) break; @@ -2866,28 +2866,72 @@ static void extension_version(const unsigned char *x) static int parse_extension(const unsigned char *x) { - int conformant_extension = 0; + int nonconformant_extension = 0; printf("\n"); switch (x[0]) { - case 0x02: printf("CTA Extension Block\n"); - extension_version(x); - conformant_extension = parse_cta(x); - break; - case 0x10: printf("VTB Extension Block\n"); break; - case 0x40: printf("DI Extension Block\n"); break; - case 0x50: printf("LS Extension Block\n"); break; - case 0x60: printf("DPVL Extension Block\n"); break; - case 0x70: printf("DisplayID Extension Block\n"); - conformant_extension = parse_displayid(x); - break; - case 0xf0: printf("Block map\n"); break; - case 0xff: printf("Manufacturer-specific Extension Block\n"); break; - default: printf("Unknown Extension Block\n"); break; + case 0x02: + printf("CTA Extension Block\n"); + extension_version(x); + nonconformant_extension = parse_cta(x); + break; + case 0x10: + printf("VTB Extension Block\n"); + extension_version(x); + printf(" "); + hex_block(x + 2, 125); + do_checksum(x, EDID_PAGE_SIZE); + break; + case 0x40: + printf("DI Extension Block\n"); + extension_version(x); + printf(" "); + hex_block(x + 2, 125); + do_checksum(x, EDID_PAGE_SIZE); + break; + case 0x50: + printf("LS Extension Block\n"); + extension_version(x); + printf(" "); + hex_block(x + 2, 125); + do_checksum(x, EDID_PAGE_SIZE); + break; + case 0x60: + printf("DPVL Extension Block\n"); + extension_version(x); + printf(" "); + hex_block(x + 2, 125); + do_checksum(x, EDID_PAGE_SIZE); + break; + case 0x70: + printf("DisplayID Extension Block\n"); + nonconformant_extension = parse_displayid(x); + do_checksum(x, EDID_PAGE_SIZE); + break; + case 0xf0: + printf("Block map\n"); + printf(" "); + hex_block(x + 1, 126); + do_checksum(x, EDID_PAGE_SIZE); + break; + case 0xff: + printf("Manufacturer-specific Extension Block\n"); + extension_version(x); + printf(" "); + hex_block(x + 2, 125); + do_checksum(x, EDID_PAGE_SIZE); + break; + default: + printf("Unknown Extension Block (%02Xh)\n", x[0]); + extension_version(x); + printf(" "); + hex_block(x + 2, 125); + do_checksum(x, EDID_PAGE_SIZE); + break; } - return conformant_extension; + return nonconformant_extension; } static int edid_lines = 0; From patchwork Sat Nov 23 16:46:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: joevt X-Patchwork-Id: 11258881 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 08E191593 for ; Sat, 23 Nov 2019 16:46:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C148B2072E for ; Sat, 23 Nov 2019 16:46:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="j/GINSPc"; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="j/GINSPc" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726937AbfKWQqT (ORCPT ); Sat, 23 Nov 2019 11:46:19 -0500 Received: from smtp-out-so.shaw.ca ([64.59.136.138]:37152 "EHLO smtp-out-so.shaw.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726775AbfKWQqS (ORCPT ); Sat, 23 Nov 2019 11:46:18 -0500 Received: from shaw.ca ([70.71.78.228]) by shaw.ca with ESMTPA id YYXziRYDERnrKYYY5iYY1m; Sat, 23 Nov 2019 09:46:17 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527577; bh=vR8xl+35qqfm9wSFyRqicIP094fP9W9Ae+8DqTZl4P8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=j/GINSPcyR2x58iaC1uK7UHR3mz4Y7Vamg3oDpDwNSYqCkoDRKlQDK1Pj1ceZdGud uB7oh1uPF4wtdPy2F+SpFaIXe1qzGXTRqo+ttgUMiWq61ZCnIg2JgQgkB9sk/ECJ44 uRVIhLq8iJG80KqfZ6n79SPa/aoybrZNBd2Tjq2Rf/+Pig8H8I9hSZcbHIoUGmoeNs Qws6Itwho6LHK2C+hcVeoUomSxNaVAWzh/TtUk8zVwBXzb/RpVfl1cttC7cDH7/t1v dYXwlFMpoBDB5LCaeS4SLYWo9E/erJGBY30/mQZy+s2uFVKy1aR4jKCsu0BQtmt+Ww SieCEakqRy8MQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527577; bh=vR8xl+35qqfm9wSFyRqicIP094fP9W9Ae+8DqTZl4P8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=j/GINSPcyR2x58iaC1uK7UHR3mz4Y7Vamg3oDpDwNSYqCkoDRKlQDK1Pj1ceZdGud uB7oh1uPF4wtdPy2F+SpFaIXe1qzGXTRqo+ttgUMiWq61ZCnIg2JgQgkB9sk/ECJ44 uRVIhLq8iJG80KqfZ6n79SPa/aoybrZNBd2Tjq2Rf/+Pig8H8I9hSZcbHIoUGmoeNs Qws6Itwho6LHK2C+hcVeoUomSxNaVAWzh/TtUk8zVwBXzb/RpVfl1cttC7cDH7/t1v dYXwlFMpoBDB5LCaeS4SLYWo9E/erJGBY30/mQZy+s2uFVKy1aR4jKCsu0BQtmt+Ww SieCEakqRy8MQ== X-Authority-Analysis: v=2.3 cv=L7FjvNb8 c=1 sm=1 tr=0 a=qDatE6m/3wxSEG8Wq7h0zQ==:117 a=qDatE6m/3wxSEG8Wq7h0zQ==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=_Dj-zB-qAAAA:8 a=rUpqthfRE0Zl7tKzqDgA:9 a=STt-xMVVqvY8af10:21 a=4URAi6oq7qNq91T-:21 a=c-cOe7UV8MviEfHuAVEQ:22 From: joevt To: Hans Verkuil Cc: linux-media@vger.kernel.org, joevt Subject: [PATCH 09/10] edid-decode: DisplayID additions Date: Sat, 23 Nov 2019 08:46:03 -0800 Message-Id: <20191123164604.268-10-joevt@shaw.ca> X-Mailer: git-send-email 2.21.0 (Apple Git-122.2) In-Reply-To: <20191123164604.268-1-joevt@shaw.ca> References: <20191123164604.268-1-joevt@shaw.ca> MIME-Version: 1.0 X-CMAE-Envelope: MS4wfHTxCG5BBpoqkDnryCe3eCAVNgzieEoKks7Hy73AmgTyK49aGkASM0AptWx4zV0Y8/jCwTFs5TrkkPIvdUsEt8sAo2NJLu50eliXViL5HtWazze6AqWL Ivc6cXFbpMN03Fh9mDgFJ+K5GGdyM6+/x80ISUtFMbStwXc+2qSB8FbbObvaYMRraG+3FdMCaFn7dspV4UaztgaiH0wPQVZ6HWw= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org - Decode "Display Parameters Block". Example in lg-ultrafine-5k* - Decode "CTA Timings Block". Similar to "Type 1 VESA DMT Timings Block". - Decode "GP ASCII String Block". Example in dell-up2715k-mdp-switchresx - Added DisplayID 2.0 tags: - Decode "Display Interface Features Data Block". Example in acer-xv273k* but it appears to be missing the "additional combinations count" byte. - Decode "ContainerID Data Block". Example in lg-ultrafine-5k* - Unknown DisplayID blocks are dumped as hex. - Show DisplayID tag hex byte to make it possible to distinguish between DisplayID 1.3 and 2.0 spec blocks of the same name. - Show DisplayID product type. Signed-off-by: Joe van Tunen --- edid-decode.c | 525 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 504 insertions(+), 21 deletions(-) diff --git a/edid-decode.c b/edid-decode.c index 2f2f1c5..29f8f88 100644 --- a/edid-decode.c +++ b/edid-decode.c @@ -55,6 +55,7 @@ static int did_detailed_timing = 0; static int has_name_descriptor = 0; static int has_serial_string = 0; static int has_ascii_string = 0; +static int has_GP_ascii_string = 0; static int has_range_descriptor = 0; static int has_preferred_timing = 0; static int has_valid_checksum = 1; @@ -64,6 +65,7 @@ static int has_valid_cvt = 1; static int has_valid_serial_number = 0; static int has_valid_serial_string = 0; static int has_valid_ascii_string = 0; +static int has_valid_GP_ascii_string = 0; static int has_valid_name_descriptor = 0; static int has_valid_detailed_blocks = 0; static int has_valid_descriptor_ordering = 1; @@ -2528,6 +2530,53 @@ static int parse_cta(const unsigned char *x) return ret; } + +static const char *feature_support_flags[] = { + "De-interlacing", + "Support ACP, ISRC1, or ISRC2packets", + "Fixed pixel format", + "Fixed timing", + "Power management (DPM)", + "Audio input override", + "Separate audio inputs provided", + "Audio support on video interface" +}; + +static void print_flag_lines(const char *indent, const char *label, unsigned char flag_byte, const char **flags) { + if (flag_byte) { + printf("%s\n", label); + for (int i = 0; i < 8; i++) { + if (flag_byte & (1<> 4) & 0xf) + 1); + } // else +} + static void parse_displayid_detailed_timing(const unsigned char *x) { unsigned ha, hbl, hso, hspw; @@ -2713,18 +2762,343 @@ static const struct { {2560, 1600, 120, 16, 10, 203217, 552750, 1}, }; +const char *displayid_vesa_dmt_timings[] = { + "640x350@85Hz", + "640x400@85Hz", + "720x400@85Hz", + "640x480@60Hz", + "640x480@72Hz", + "640x480@75Hz", + "640x480@85Hz", + "800x600@56Hz", + "800x600@60Hz", + "800x600@72Hz", + "800x600@75Hz", + "800x600@85Hz", + "800x600@120Hz (RB)", + "848x480@60Hz", + "1024x768@43Hz (INT)", + "1024x768@60Hz", + "1024x768@70Hz", + "1024x768@75Hz", + "1024x768@85Hz", + "1024x768@120Hz (RB)", + "1152x864@75Hz", + "1280x768@60Hz (RB)", + "1280x768@60Hz", + "1280x768@75Hz", + "1280x768@85Hz", + "1280x768@120Hz (RB)", + "1280x800@60Hz (RB)", + "1280x800@60Hz", + "1280x800@75Hz", + "1280x800@85Hz", + "1280x800@120Hz (RB)", + "1280x960@60Hz", + "1280x960@85Hz", + "1280x960@120Hz (RB)", + "1280x1024@60Hz", + "1280x1024@75Hz", + "1280x1024@85Hz", + "1280x1024@120Hz (RB)", + "1360x768@60Hz", + "1360x768@120Hz (RB)", + "1400x1050@60Hz (RB)", + "1400x1050@60Hz", + "1400x1050@75Hz", + "1400x1050@85Hz", + "1400x1050@120Hz (RB)", + "1440x900@60Hz (RB)", + "1440x900@60Hz", + "1440x900@75Hz", + "1440x900@85Hz", + "1440x900@120Hz (RB)", + "1600x1200@60Hz", + "1600x1200@65Hz", + "1600x1200@70Hz", + "1600x1200@75Hz", + "1600x1200@85Hz", + "1600x1200@120Hz (RB)", + "1680x1050@60Hz (RB)", + "1680x1050@60Hz", + "1680x1050@75Hz", + "1680x1050@85Hz", + "1680x1050@120Hz (RB)", + "1792x1344@60Hz", + "1792x1344@75Hz", + "1792x1344@120Hz (RB)", + "1856x1392@60Hz", + "1856x1392@75Hz", + "1856x1392@120Hz (RB)", + "1920x1200@60Hz (RB)", + "1920x1200@60Hz", + "1920x1200@75Hz", + "1920x1200@85Hz", + "1920x1200@120Hz (RB)", + "1920x1440@60Hz", + "1920x1440@75Hz", + "1920x1440@120Hz (RB)", + "2560x1600@60Hz (RB)", + "2560x1600@60Hz", + "2560x1600@75Hz", + "2560x1600@85Hz", + "2560x1600@120Hz (RB)", +}; + +const char *displayid_cta_timings[] = { + "640x480p@59.94/60Hz 4:3", + "720x480p@59.94/60Hz 4:3", + "720x480p@59.94/60Hz 16:9", + "1280x720p@59.94/60Hz 16:9", + "1920x1080i@59.94/60Hz 16:9", + "720(1440)x480i@59.94/60Hz 4:3", + "720(1440)x480i@59.94/60Hz 16:9", + "720(1440)x240p@59.94/60Hz 4:3", + "720(1440)x240p@59.94/60Hz 16:9", + "2880x480i@59.94/60Hz 4:3", + "2880x480i@59.94/60Hz 16:9", + "2880x240p@59.94/60Hz 4:3", + "2880x240p@59.94/60Hz 16:9", + "1440x480p@59.94/60Hz 4:3", + "1440x480p@59.94/60Hz 16:9", + "1920x1080p@59.94/60Hz 16:9", + "720x576p@50Hz 4:3", + "720x576p@50Hz 16:9", + "1280x720p@50Hz 16:9", + "1920x1080i@50Hz 16:9", + "720(1440)x576i@50Hz 4:3", + "720(1440)x576i@50Hz 16:9", + "720(1440)x288p@50Hz 4:3", + "720(1440)x288p@50Hz 16:9", + "2880x576i@50Hz 4:3", + "2880x576i@50Hz 16:9", + "2880x288p@50Hz 4:3", + "2880x288p@50Hz 16:9", + "1440x576p@50Hz 4:3", + "1440x576p@50Hz 16:9", + "1920x1080p@50Hz 16:9", + "1920x1080p@23.97/24Hz 16:9", + "1920x1080p@25Hz 16:9", + "1920x1080p@29.97/30Hz 16:9", + "2880x480p@59.94/60Hz 4:3", + "2880x480p@59.94/60Hz 16:9", + "2880x576p@50Hz 4:3", + "2880x576p@50Hz 16:9", + "1920x1080i@50Hz 16:9", + "1920x1080i@100Hz 16:9", + "1280x720p@100Hz 16:9", + "720x576p@100Hz 4:3", + "720x576p@100Hz 16:9", + "720(1440)x576i@100Hz 4:3", + "720(1440)x576i@100Hz 16:9", + "1920x1080i@119.88/120Hz 16:9", + "1280x720p@119.88/120Hz 16:9", + "720x480p@119.88/120Hz 4:3", + "720x480p@119.88/120Hz 16:9", + "720(1440)x480i@119.88/120Hz 4:3", + "720(1440)x480i@119.88/120Hz 16:9", + "720x576p@200Hz 4:3", + "720x576p@200Hz 16:9", + "720(1440)x576i@200Hz 4:3", + "720(1440)x576i@200Hz 16:9", + "720x480p@239.76/240Hz 4:3", + "720x480p@239.76/240Hz 16:9", + "720(1440)x480i@239.76/240Hz 4:3", + "720(1440)x480i@239.76/240Hz 16:9", + "1280x720p@23.97/24Hz 16:9", + "1280x720p@25Hz 16:9", + "1280x720p@29.97/30Hz 16:9", + "1920x1080p@120Hz 16:9", + "1920x1080p@100Hz 16:9", +}; + +static void parse_displayid_timing(const unsigned char *x, int expectedlen, const char** list) +{ + int revisionflags=x[1]; + int len=x[2]; + if (revisionflags) { + printf(" Unexpected revision and flags (0x%02x != 0)\n", revisionflags); + } + if (len > expectedlen) { + printf(" Length is greater than expected (%d > %d)\n", len, expectedlen); + } else if (len < expectedlen) { + printf(" Length is less than expected (%d < %d)\n", len, expectedlen); + } + x += 3; + for (int i = 0; i < len * 8; i++) { + if (x[i>>3] & (1<<(i&7))) { + if ((i>>3) < expectedlen) { + printf(" %s\n", list[i]); + } else { + printf(" #%d\n", i+1); + } + } + } +} + +static void parse_displayid_gp_string(const unsigned char *x) +{ + int revisionflags=x[1]; + if (revisionflags) { + printf(" Unexpected revision and flags (0x%02x != 0)\n", revisionflags); + } +} + +static const char *bpc444[] = {"6", "8", "10", "12", "14", "16", NULL, NULL}; +static const char *bpc4xx[] = {"8", "10", "12", "14", "16", NULL, NULL, NULL}; +static const char *audiorates[] = {"32", "44.1", "48", NULL, NULL, NULL, NULL, NULL}; + +static const char *colorspace_eotf_combinations[] = { + "sRGB", + "BT.601", + "BT.709/BT.1886", + "Adobe RGB", + "DCI-P3", + "BT.2020", + "BT.2020/SMPTE ST 2084" +}; + +static const char *colorspace_eotf_reserved[] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; + +static const char *colorspaces[] = { + "Undefined", + "sRGB", + "BT.601", + "BT.709", + "Adobe RGB", + "DCI-P3", + "BT.2020", + "Custom" +}; + +static const char *eotfs[] = { + "Undefined", + "sRGB", + "BT.601", + "BT.1886", + "Adobe RGB", + "DCI-P3", + "BT.2020", + "Gamma function", + "SMPTE ST 2084", + "Hybrid Log", + "Custom" +}; + +static void print_flags(const char *label, unsigned char flag_byte, const char **flags, int reverse) +{ + if (flag_byte) { + printf("%s: ", label); + int countflags = 0; + for (int i = 0; i < 8; i++) { + if (flag_byte & (1<<(reverse?7-i:i))) { + if (countflags) + printf(", "); + if (flags[i]) + printf("%s", flags[i]); + else + printf("Undefined(%d)", i); + countflags++; + } + } + printf("\n"); + } +} + +static void parse_displayid_interface_features(const unsigned char *x) +{ + int revisionflags=x[1]; + int len=x[2]; + if (revisionflags) { + printf(" Unexpected revision and flags (0x%02x != 0)\n", revisionflags); + } + if (len < 9) { + printf(" Length is less than expected (%d < 9)\n", len); + printf(" "); + hex_block(x + 3, len); + } else { + print_flags(" Supported bpc for RGB encoding", x[3], bpc444, 0); + print_flags(" Supported bpc for YCbCr 4:4:4 encoding", x[4], bpc444, 0); + print_flags(" Supported bpc for YCbCr 4:2:2 encoding", x[5], bpc4xx, 0); + print_flags(" Supported bpc for YCbCr 4:2:0 encoding", x[6], bpc4xx, 0); + if (x[7]) + printf(" Minimum pixel rate at which YCbCr 4:2:0 encoding is supported: %.3f MHz\n", 74.25 * x[7]); + print_flags(" Supported audio capability and features (kHz)", x[8], audiorates, 1); + print_flags(" Supported color space and EOTF standard combination 1", x[9], colorspace_eotf_combinations, 0); + print_flags(" Supported color space and EOTF standard combination 2", x[10], colorspace_eotf_reserved, 0); + int i = 0; + if (len >= 9 && x[11] > 0) { + printf(" Supported color space and EOTF additional combinations:"); + for (i = 1; i <= x[11]; i++) { + if (i > 7) { + printf("\n Number of additional color space and EOTF combinations (%d) is greater than allowed (7).", x[11]); + break; + } else if (9 + i > len) { + printf("\n Number of additional color space and EOTF combinations (%d) is too many to fit in block (%d).", x[11], len - 9); + break; + } + + const char *colorspace = "Out of range"; + const char *eotf = "Out of range"; + int colorspace_index = (x[11 + i] >> 4) & 0xf; + int eotf_index = x[11 + i] & 0xf; + if (colorspace_index < sizeof(colorspaces) / sizeof(colorspaces[0])) { + colorspace = colorspaces[colorspace_index]; + } + if (eotf_index < sizeof(eotfs) / sizeof(eotfs[0])) { + eotf = eotfs[eotf_index]; + } + + if (i > 1) + printf(", "); + if (!strcmp(colorspace, eotf)) { + printf("%s", colorspace); + } else { + printf("%s/%s", colorspace, eotf); + } + } // for + printf("\n"); + } // x[11] + if (len > 9 + i) { + printf(" Length is greater than expected (%d > %d)\n", len, 9 + i); + printf(" "); + hex_block(x + 11 + i, len - 9 - i); + } else if (len != 9 + i) { + printf(" Length is unexpected (%d != %d)\n", len, 9 + i); + } + } +} + +static void parse_displayid_ContainerID(const unsigned char *x) +{ + int revisionflags=x[1]; + int len=x[2]; + if (revisionflags) { + printf(" Unexpected revision and flags (0x%02x != 0)\n", revisionflags); + } + x += 3; + if (len != 16) { + printf(" Length is unexpected (%d != 16)\n", len); + printf(" "); + hex_block(x, len); + } else { + printf(" %02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\n",x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],x[10],x[11],x[12],x[13],x[14],x[15]); + } +} + static int parse_displayid(const unsigned char *x) { const unsigned char *orig = x; unsigned version = x[1]; unsigned length = x[2]; + unsigned producttype = x[3]; unsigned ext_count = x[4]; unsigned i; cur_block = "DisplayID"; - printf("Length %u, version %u.%u, extension count %u\n", - length, version >> 4, version & 0xf, ext_count); + printf("Length %u, version %u.%u, type %u, extension count %u\n", + length, version >> 4, version & 0xf, producttype, ext_count); unsigned offset = 5; while (length > 0) { @@ -2734,33 +3108,49 @@ static int parse_displayid(const unsigned char *x) if (len == 0) break; switch (tag) { + + // DisplayID 1.3: case 0: - printf("Product ID Block\n"); + printf("Product ID Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; case 1: - printf("Display Parameters Block\n"); + printf("Display Parameters Block (%02Xh):\n", tag); + parse_displayid_parameters(x + offset); break; case 2: - printf("Color Characteristics Block\n"); + printf("Color Characteristics Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; case 3: { - printf("Type 1 Detailed Timings Block\n"); + printf("Type 1 Detailed Timings Block (%02Xh)\n", tag); for (i = 0; i < len / 20; i++) { parse_displayid_detailed_timing(&x[offset + 3 + (i * 20)]); } break; } case 4: - printf("Type 2 Detailed Timings Block\n"); + printf("Type 2 Detailed Timings Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; case 5: - printf("Type 3 Short Timings Block\n"); + printf("Type 3 Short Timings Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; case 6: - printf("Type 4 DMT Timings Block\n"); + printf("Type 4 DMT Timings Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; case 7: - printf("Type 1 VESA DMT Timings Block\n"); + printf("Type 1 VESA DMT Timings Block (%02Xh)\n", tag); + #if 0 + parse_displayid_timing(x + offset, 10, displayid_vesa_dmt_timings); + #else for (i = 0; i < min(len, 10) * 8; i++) { if (x[offset + 3 + i / 8] & (1 << (i % 8))) { printf(" %ux%u%s@%uHz %s%u:%u HorFreq: %.3f kHz Clock: %.3f MHz\n", @@ -2779,33 +3169,51 @@ static int parse_displayid(const unsigned char *x) max_pixclk_khz = max(max_pixclk_khz, displayid_vesa_dmt[i].pixclk_khz); } } + #endif break; case 8: - printf("CTA Timings Block\n"); + printf("CTA Timings Block (%02Xh):\n", tag); + parse_displayid_timing(x + offset, 8, displayid_cta_timings); break; case 9: - printf("Video Timing Range Block\n"); + printf("Video Timing Range Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; case 0xa: - printf("Product Serial Number Block\n"); + printf("Product Serial Number Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; case 0xb: - printf("GP ASCII String Block\n"); + printf("GP ASCII String Block (%02Xh): %s\n", tag, extract_string("GP ASCII String", x + offset + 3, &has_valid_GP_ascii_string, len)); + has_GP_ascii_string = 1; + parse_displayid_gp_string(x + offset); break; case 0xc: - printf("Display Device Data Block\n"); + printf("Display Device Data Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; case 0xd: - printf("Interface Power Sequencing Block\n"); + printf("Interface Power Sequencing Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; case 0xe: - printf("Transfer Characteristics Block\n"); + printf("Transfer Characteristics Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; case 0xf: - printf("Display Interface Block\n"); + printf("Display Interface Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; case 0x10: - printf("Stereo Display Interface Block\n"); + printf("Stereo Display Interface Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; case 0x12: { unsigned capabilities = x[offset + 3]; @@ -2817,7 +3225,7 @@ static int parse_displayid(const unsigned char *x) unsigned tile_height = x[offset + 9] | (x[offset + 10] << 8); unsigned pix_mult = x[offset + 11]; - printf("Tiled Display Topology Block\n"); + printf("Tiled Display Topology Block (%02Xh)\n", tag); printf(" Capabilities: 0x%08x\n", capabilities); printf(" Num horizontal tiles: %u Num vertical tiles: %u\n", num_h_tile + 1, num_v_tile + 1); printf(" Tile location: %u, %u\n", tile_h_location, tile_v_location); @@ -2841,8 +3249,80 @@ static int parse_displayid(const unsigned char *x) } break; } + + // DisplayID 2.0 + case 0x20: + printf("Product ID Data Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); + break; + case 0x21: + printf("Display Parameters Data Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); + break; + case 0x22: + printf("Type 7 Timing - Detailed Timing Data Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); + break; + case 0x23: + printf("Type 8 Timing - Enumerated Timing Code Data Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); + break; + case 0x24: + printf("Type 9 Timing - Formula-based Timing Data Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); + break; + case 0x25: + printf("Dynamic Video Timing Range Limits Data Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); + break; + case 0x26: + printf("Display Interface Features Data Block (%02Xh):\n", tag); + parse_displayid_interface_features(x + offset); + break; + case 0x27: + printf("Stereo Display Interface Data Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); + break; + case 0x28: + printf("Tiled Display Topology Data Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); + break; + case 0x29: + printf("ContainerID Data Block (%02Xh):\n", tag); + parse_displayid_ContainerID(x + offset); + break; + + // 2Ah .. 7Dh RESERVED for Additional VESA-defined Data Blocks + + case 0x7e: // DisplayID 2.0 + case 0x7f: // DisplayID 1.3 + printf("Vendor-specific Data Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); + break; + + // 7Fh .. 80h RESERVED + + case 0x81: + printf("CTA DisplayID Data Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); + break; + + // 82h .. FFh RESERVED + default: - printf("Unknown DisplayID Data Block 0x%x\n", tag); + printf("Unknown DisplayID Data Block (%02Xh)\n", tag); + printf(" "); + hex_block(x + offset + 3, len); break; } length -= len + 3; @@ -3687,6 +4167,7 @@ static int edid_from_file(const char *from_file, const char *to_file, !has_valid_range_descriptor || (has_name_descriptor && !has_valid_name_descriptor) || (has_serial_string && !has_valid_serial_string) || + (has_GP_ascii_string && !has_valid_GP_ascii_string) || (has_ascii_string && !has_valid_ascii_string)) { conformant = 0; printf("EDID block does not conform:\n"); @@ -3709,6 +4190,8 @@ static int edid_from_file(const char *from_file, const char *to_file, printf("\tInvalid Monitor Name descriptor\n"); if (has_ascii_string && !has_valid_ascii_string) printf("\tInvalid ASCII string\n"); + if (has_GP_ascii_string && !has_valid_GP_ascii_string) + printf("\tInvalid GP ASCII string\n"); if (has_serial_string && !has_valid_serial_string) printf("\tInvalid serial string\n"); } From patchwork Sat Nov 23 16:46:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: joevt X-Patchwork-Id: 11258885 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5559F6C1 for ; Sat, 23 Nov 2019 16:46:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2C67220720 for ; Sat, 23 Nov 2019 16:46:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="DbyooGFX"; dkim=pass (2048-bit key) header.d=shaw.ca header.i=@shaw.ca header.b="DbyooGFX" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726939AbfKWQqV (ORCPT ); Sat, 23 Nov 2019 11:46:21 -0500 Received: from smtp-out-so.shaw.ca ([64.59.136.139]:37146 "EHLO smtp-out-so.shaw.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726861AbfKWQqU (ORCPT ); Sat, 23 Nov 2019 11:46:20 -0500 Received: from shaw.ca ([70.71.78.228]) by shaw.ca with ESMTPA id YYXziRYDERnrKYYY5iYY1s; Sat, 23 Nov 2019 09:46:17 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527577; bh=eMfH0jUyyVvljNUPJSi+h1AA6r7PFSbU94ecyI1drBA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=DbyooGFXXFXPZbMjrzwIEY4jFMAHbM4jrcHOZjN5HEe6AiySDJBSobv0H2lM+t1HU 0EoarCsEwm77wgYdnzpdBwPAekQwaqkOPp4rRuTPYdCXBdbmUX47Z2r8/RT+CHbGZJ 6TC+V0OTtzBHrbNfNHYq+3jjNndiwvR1QdfxkHRL4bS+Ekzo+T0ylxkP8nMmlb0MKb 3ezrjj9LbVWGbkh4Umosvls86Thb+j1uzbLXw6VLMCzRT3fC4tjxF6Q8ePyXQWmUm9 FPQdSZPX/Q9pRBJ/41Umf0WFg0Nk7M1no93tI47apXDlcp3bjg5cZvK/0npVCral6M PK1UJIe8U2VIg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shaw.ca; s=s20180605; t=1574527577; bh=eMfH0jUyyVvljNUPJSi+h1AA6r7PFSbU94ecyI1drBA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=DbyooGFXXFXPZbMjrzwIEY4jFMAHbM4jrcHOZjN5HEe6AiySDJBSobv0H2lM+t1HU 0EoarCsEwm77wgYdnzpdBwPAekQwaqkOPp4rRuTPYdCXBdbmUX47Z2r8/RT+CHbGZJ 6TC+V0OTtzBHrbNfNHYq+3jjNndiwvR1QdfxkHRL4bS+Ekzo+T0ylxkP8nMmlb0MKb 3ezrjj9LbVWGbkh4Umosvls86Thb+j1uzbLXw6VLMCzRT3fC4tjxF6Q8ePyXQWmUm9 FPQdSZPX/Q9pRBJ/41Umf0WFg0Nk7M1no93tI47apXDlcp3bjg5cZvK/0npVCral6M PK1UJIe8U2VIg== X-Authority-Analysis: v=2.3 cv=L7FjvNb8 c=1 sm=1 tr=0 a=qDatE6m/3wxSEG8Wq7h0zQ==:117 a=qDatE6m/3wxSEG8Wq7h0zQ==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=_Dj-zB-qAAAA:8 a=Mm3cTRHjB386Wo1w-00A:9 a=c-cOe7UV8MviEfHuAVEQ:22 From: joevt To: Hans Verkuil Cc: linux-media@vger.kernel.org, joevt Subject: [PATCH 10/10] edid-decode: add example EDIDs Date: Sat, 23 Nov 2019 08:46:04 -0800 Message-Id: <20191123164604.268-11-joevt@shaw.ca> X-Mailer: git-send-email 2.21.0 (Apple Git-122.2) In-Reply-To: <20191123164604.268-1-joevt@shaw.ca> References: <20191123164604.268-1-joevt@shaw.ca> MIME-Version: 1.0 X-CMAE-Envelope: MS4wfHTxCG5BBpoqkDnryCe3eCAVNgzieEoKks7Hy73AmgTyK49aGkASM0AptWx4zV0Y8/jCwTFs5TrkkPIvdUsEt8sAo2NJLu50eliXViL5HtWazze6AqWL Ivc6cXFbpMN03Fh9mDgFJ+K5GGdyM6+/x80ISUtFMbStwXc+2qSB8FbbObvaYMRraG+3FdMCaFn7dspV4UaztgaiH0wPQVZ6HWw= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org acer-xv273k* - contains a broken example of "Display Interface Features Data Block" (appears to be missing the "additional combinations count" byte) - contains an unknown "Vendor-Specific Data Block" dell-p2415q-hdmi2.0 - contains an example of "YCbCr 4:2:0 Capability Map Data Block". They have specified that the last two "Video Data Block" resolutions 4K50Hz and 4K60Hz support "YCbCr 4:2:0", while lower refresh rates do not support "YCbCr 4:2:0". For example, HDMI 2.0 has bandwidth for 4K60 8bpc RGB and 4:4:4, but there is not enough bandwidth for 10bpc at 60Hz so 4:2:0 is allowed for that refresh rate. dell-up2715k-dp1-tile1 - contains an example of "Type 1 VESA DMT Timings Block" lg-ultrafine-5k* - contains an example of "Display Parameters Block" - contains an example of "ContainerID Data Block" kogan-kaled24144f-hdmi - contains a type 1 timing with a negative horizontal back porch. Signed-off-by: Joe van Tunen --- data/acer-xv273k-dp1 | Bin 0 -> 384 bytes data/acer-xv273k-dp1-tile0 | Bin 0 -> 384 bytes data/acer-xv273k-dp2 | Bin 0 -> 384 bytes data/acer-xv273k-dp2-tile1 | Bin 0 -> 384 bytes data/dell-p2415q-dp-mdp | Bin 0 -> 256 bytes data/dell-p2415q-hdmi1.4 | Bin 0 -> 256 bytes data/dell-p2415q-hdmi2.0 | Bin 0 -> 256 bytes data/dell-up2715k-dp1-tile1 | Bin 0 -> 384 bytes data/dell-up2715k-dp2-tile0 | Bin 0 -> 256 bytes data/dell-up2715k-mdp | Bin 0 -> 256 bytes data/dell-up2715k-mdp-switchresx | Bin 0 -> 384 bytes data/kogan-kaled24144f-dp | Bin 0 -> 256 bytes data/kogan-kaled24144f-hdmi | Bin 0 -> 256 bytes data/lg-ultrafine-5k-v2-thunderbolt-dp1-tile0 | Bin 0 -> 384 bytes data/lg-ultrafine-5k-v2-thunderbolt-dp2-tile1 | Bin 0 -> 256 bytes 15 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/acer-xv273k-dp1 create mode 100644 data/acer-xv273k-dp1-tile0 create mode 100644 data/acer-xv273k-dp2 create mode 100644 data/acer-xv273k-dp2-tile1 create mode 100644 data/dell-p2415q-dp-mdp create mode 100644 data/dell-p2415q-hdmi1.4 create mode 100644 data/dell-p2415q-hdmi2.0 create mode 100644 data/dell-up2715k-dp1-tile1 create mode 100644 data/dell-up2715k-dp2-tile0 create mode 100644 data/dell-up2715k-mdp create mode 100644 data/dell-up2715k-mdp-switchresx create mode 100644 data/kogan-kaled24144f-dp create mode 100644 data/kogan-kaled24144f-hdmi create mode 100644 data/lg-ultrafine-5k-v2-thunderbolt-dp1-tile0 create mode 100644 data/lg-ultrafine-5k-v2-thunderbolt-dp2-tile1 GIT binary patch literal 256 zcmZSh4+ac!xh2tutyvk^WEoku+9*{t@K0P9j&d}zG`HjeD*waaOkzp#sW`>Ig z7#V#pFf8~`VAo)vV9F30pvb@=wIvNCBHzHFAi)9=VPIhR%VRL%|Nm@8E(I_Eiu_@S z2s1J__J)cuDKas8d<UQ=7$(Es)DTi&;p@Pm@Pj7|>>`Kf3|R{n zWCd_2%z(Nm{}9811q(t0;I5WqI8Y!|$-uzOs4;5+W6OWO1q}KPiVXQ2b_~o6tPBsn jF|gFLM*_vOkzp#sW`>Ig z7#V#pFf8~`VAo)vV9F30pvb@=wIvNCBHzHFAi)9=VPIhR%VSXS|9>_kmjW07MgA~E zgc+F|dqYK-ESZ=+J_a%}vj_>ZipWo3XNrxBPe`;^=45AYW@KP^#Bd;&nTJ7u!JHaK|KS55QA8k00Tokdp-xyXABIE&Osa5z$~H(j|l*} CM^ga+ literal 0 HcmV?d00001 diff --git a/data/acer-xv273k-dp2 b/data/acer-xv273k-dp2 new file mode 100644 index 0000000000000000000000000000000000000000..08ac45b3a3a5013c3adef432c6eacfe3b3c65f51 GIT binary patch literal 384 zcmZSh4+ab@MH|_I`x#n|WEfet+9*|6s|&6PG~KGk7Z9TC!O-Z?*wA>Okzp#sW`>Ig z7#V#pFf8~`VAo)vV9F30pvb@=wIvNCBHzHFAi)9=VPIhR%VRL%|Nm@8E(I_Eiu_@S z2s1J__J)cuDKas8d<UQ=7$(Es)DTi&;p@Pm@Pj7|>>`Kf3|R{n zWCd_2%z(Nm{}9811q(t0;I5Wq*iax;$-uzOs4;5+W6OWO1q}KPiVXQ2b_~o6tPBsn jF|gFLM*_vOkzp#sW`>Ig z7#V#pFf8~`VAo)vV9F30pvb@=wIvNCBHzHFAi)9=VPIhR%VSXS|9>_kmjW07MgA~E zgc+F|dqYK-ESZ=+J_a%}vj_>ZipWo3XNrxBPe`;^=45AYW@KP^#Bd;&nTJ7v!JHaK|KS55QA8kfB-{1dp-xyXABIE&Osa5z$~H(iwOY5 C$5R0S literal 0 HcmV?d00001 diff --git a/data/dell-p2415q-dp-mdp b/data/dell-p2415q-dp-mdp new file mode 100644 index 0000000000000000000000000000000000000000..ffc77f0cbc914500564f7df3b08bddf27e315416 GIT binary patch literal 256 zcmZSh4+abZYxXU0^6@cHmSSXCYARP@^~iNasPAGm?tqY`-VBBQjSVXgtaP||;330B z21Z8T3k(ZB6xcP`8JIHgYbY`>NHH)l{AX}Cb}@G|v+y_Y@p0k;iu_@4arN<02rx1+ zG!5iZ0E+x&koA%4F=OCT00YLSOw6($0|ew1SVdTbg#?+I#6;QI7?nBY*_#;|7{cNh z7A#nx8DO9Qvxdp4L88z?*C9ej6=Ja*qbx&F-~~B_JdIGO$l^4Rrtk%^&c zAeRDArtk%^&c zAeRDA_ z%*eoy%gn<7)Lo&#kig8un0_Pn2xG+o_9y%d3z$5MjkHo34k Vh6M{2Xa*Q4m?B&YbPNzQ0RUN@K>+{& literal 0 HcmV?d00001 diff --git a/data/dell-up2715k-dp1-tile1 b/data/dell-up2715k-dp1-tile1 new file mode 100644 index 0000000000000000000000000000000000000000..424394df2b31b89aae15440c7f11be1d1e3ef86b GIT binary patch literal 384 zcmZSh4+abZYqmKATUrQ8A1aT85pD(7#RLDxEXpm`d7=#$angj$G{&U)MgG~my8WI}J3^qO&7+U`G&1cYWkY~u}uw`IkU||r5WnlTw l2@$jB)&PoeG91~1EEWhBV`t#vXk_4EVPIhr!0P0a69Bq!MF9W+ literal 0 HcmV?d00001 diff --git a/data/dell-up2715k-dp2-tile0 b/data/dell-up2715k-dp2-tile0 new file mode 100644 index 0000000000000000000000000000000000000000..c95095fecc3962145d89efe0ae7caf7c6c1cb6cd GIT binary patch literal 256 zcmZSh4+abZYqmKATUrr^1LTG@IxuK~yNaQbrthf9YGe#~2 zFkqZeAXLe~AjBZnAOJLg)1Dish5@7t;u>ZK4S`q&mj9gd8T1?E8SJ?=7?>D18IJ5h P77GN6fi;p!)K35az+)`| literal 0 HcmV?d00001 diff --git a/data/dell-up2715k-mdp b/data/dell-up2715k-mdp new file mode 100644 index 0000000000000000000000000000000000000000..835aaa5e87fd431a73579319724a97f4c136db27 GIT binary patch literal 256 zcmZSh4+abZYj!vUTUrmJ5qx tSg>G$W&pxAMp=fUzzcE;c^aWmH9cGxx)dJh3JBOugNR4~Z6geh0swE*IRO9w literal 0 HcmV?d00001 diff --git a/data/dell-up2715k-mdp-switchresx b/data/dell-up2715k-mdp-switchresx new file mode 100644 index 0000000000000000000000000000000000000000..d0d425a8d4db26170d21a92ee9e469eb7f9fc318 GIT binary patch literal 384 zcmZSh4+abZYj!vUTUrmJ5qx zSg>G$W&pxAMp=fUzzcE;c^aWmH9cGxx)dJh3JBOugNR4~Z6geh76_^^GcYrVG~_Wd p{1=|jpx+?RV9y=Mz{J49z|FuFT%K8yoDq~-95IuyVPvS7007E9LjeE) literal 0 HcmV?d00001 diff --git a/data/kogan-kaled24144f-dp b/data/kogan-kaled24144f-dp new file mode 100644 index 0000000000000000000000000000000000000000..ce340a6c2fd85e6b459b33d966ad896a2bed6c60 GIT binary patch literal 256 zcmZSh4+ac6?-*1VfIvoyk!7igLWObr(r z1b`R`Fdk)M<~gX$$ESAN5S0t*KR0|iqC2Ny-4 K2$E)MFj)XpaxDP> literal 0 HcmV?d00001 diff --git a/data/kogan-kaled24144f-hdmi b/data/kogan-kaled24144f-hdmi new file mode 100644 index 0000000000000000000000000000000000000000..f3d4a0f0700493d72de0e2cc8fb91214f2fbf1d6 GIT binary patch literal 256 zcmZSh4+ac6?-*1VfIvoyk!6vILWN#pz_PG_1!}wjA?r^wY-X6s(Ady;pwNHif$js0 z3`|xH5``AJ4iP%840m}185kshTK_P3JNme~7?~KFn7DB%07d>XXiQkJK#_q<0Stg5 z0zixe7@L@wwLb<-U}a%uViXh-7GYx-6_Zy`=45AYW@KPUzY%+cvEl$jDl-p*0>iBO zhKd3U1+b-I0g6CNyYd?r6j(So7$}%BIJf{s0xpOufYdbH0NM|7 IDjbLd0L{=k0RR91 literal 0 HcmV?d00001 diff --git a/data/lg-ultrafine-5k-v2-thunderbolt-dp1-tile0 b/data/lg-ultrafine-5k-v2-thunderbolt-dp1-tile0 new file mode 100644 index 0000000000000000000000000000000000000000..13ab607a1763bf26fc8219904f7548963e9fd851 GIT binary patch literal 384 zcmZSh4+ac!xh2tutyvk^WEoku+9*{t@K0P9%YIiIbm0bRqnr6Ojns1G*r$owEXAu zXJBuTXUONU1scZA5ZA}RQqKbsV`n!8ivbCuLB#~H{Xz_4O#(pYa@uo)wYmrUmPCWR e%*-HiVGjexf6n<}YwfuMf%5D`8&6Q7&;$T`UqAr> literal 0 HcmV?d00001 diff --git a/data/lg-ultrafine-5k-v2-thunderbolt-dp2-tile1 b/data/lg-ultrafine-5k-v2-thunderbolt-dp2-tile1 new file mode 100644 index 0000000000000000000000000000000000000000..abc93a47301db232ea159a68f1e5df5d64db4c27