From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 31DA910F650 for ; Thu, 24 Feb 2022 08:33:38 +0000 (UTC) From: Bhanuprakash Modem To: igt-dev@lists.freedesktop.org, manasi.d.navare@intel.com Date: Thu, 24 Feb 2022 14:02:41 +0530 Message-Id: <20220224083241.96381-1-bhanuprakash.modem@intel.com> In-Reply-To: <20220224051648.91470-3-bhanuprakash.modem@intel.com> References: <20220224051648.91470-3-bhanuprakash.modem@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [igt-dev] [v2 i-g-t 2/5] lib/igt_edid: Helper to read monitor range from EDID List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: Add a helper function to read Monitor's range capability from EDID. V2: * Check for flag range limits only. Cc: Manasi Navare Signed-off-by: Bhanuprakash Modem --- lib/igt_edid.c | 29 +++++++++++++++++++++++++++++ lib/igt_edid.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/lib/igt_edid.c b/lib/igt_edid.c index df346c4c8c..9ed029a394 100644 --- a/lib/igt_edid.c +++ b/lib/igt_edid.c @@ -160,6 +160,35 @@ void detailed_timing_set_monitor_range_mode(struct detailed_timing *dt, sizeof(monitor_range_padding)); } +struct detailed_data_monitor_range +detailed_timing_get_monitor_range(const struct edid *edid) +{ + uint8_t i; + struct detailed_data_monitor_range mr = {0, 0}; + + for (i = 0; i < DETAILED_TIMINGS_LEN; i++) { + struct detailed_non_pixel *other_data; + struct detailed_timing timings = edid->detailed_timings[i]; + + if (timings.pixel_clock[0] != 0x00 && + timings.pixel_clock[1] != 0x00 && + timings.pixel_clock[2] != 0x00) + continue; + + other_data = &timings.data.other_data; + if (other_data->type != EDID_DETAIL_MONITOR_RANGE) + continue; + + /* Check for flag range limits only. */ + if (other_data->data.range.flags != 1) + continue; + + return other_data->data.range; + } + + return mr; +} + /** * detailed_timing_set_string: set a detailed timing to be a string */ diff --git a/lib/igt_edid.h b/lib/igt_edid.h index aac2f4a208..e412479d84 100644 --- a/lib/igt_edid.h +++ b/lib/igt_edid.h @@ -381,6 +381,8 @@ void detailed_timing_set_mode(struct detailed_timing *dt, drmModeModeInfo *mode, int width_mm, int height_mm); void detailed_timing_set_monitor_range_mode(struct detailed_timing *dt, drmModeModeInfo *mode); +struct detailed_data_monitor_range detailed_timing_get_monitor_range( + const struct edid *edid); void detailed_timing_set_string(struct detailed_timing *dt, enum detailed_non_pixel_type type, const char *str); -- 2.35.0