Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Louis Chauvet <louis.chauvet@bootlin.com>
To: igt-dev@lists.freedesktop.org, ihf@google.com,
	markyacoub@google.com,  thomas.petazzoni@bootlin.com,
	jeremie.dautheribes@bootlin.com
Cc: Louis Chauvet <louis.chauvet@bootlin.com>
Subject: [PATCH i-g-t v2 06/39] lib/monitor_edids: Add helper functions for using monitor_edid objects
Date: Tue, 09 Jul 2024 17:34:22 +0200	[thread overview]
Message-ID: <20240709-dev-remove-static-ports-v2-6-5adfc6985778@bootlin.com> (raw)
In-Reply-To: <20240709-dev-remove-static-ports-v2-0-5adfc6985778@bootlin.com>

Introduce the functions edid_from_monitor_edid() and
get_edids_for_connector_type(). The former converts a monitor_edid object
to a struct edid, which can then be utilized by igt_kms helpers. The
latter returns a list of monitor_edid objects for a specific connector
with certain characteristics

Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
---
 lib/monitor_edids/monitor_edids_helper.c | 61 +++++++++++++++++++++++++++++++-
 lib/monitor_edids/monitor_edids_helper.h |  5 +++
 2 files changed, 65 insertions(+), 1 deletion(-)

diff --git a/lib/monitor_edids/monitor_edids_helper.c b/lib/monitor_edids/monitor_edids_helper.c
index 1cbf1c22f0bb..0e0c2a9badcf 100644
--- a/lib/monitor_edids/monitor_edids_helper.c
+++ b/lib/monitor_edids/monitor_edids_helper.c
@@ -14,7 +14,10 @@
 #include <string.h>
 #include <assert.h>
 
-#include "igt_core.h"
+#include "igt.h"
+#include "igt_edid.h"
+#include "dp_edids.h"
+#include "hdmi_edids.h"
 
 static uint8_t convert_hex_char_to_byte(char c)
 {
@@ -90,3 +93,59 @@ void free_chamelium_edid_from_monitor_edid(struct chamelium_edid *edid)
 	free(edid);
 	edid = NULL;
 }
+
+struct edid *edid_from_monitor_edid(const monitor_edid *mon_edid)
+{
+	uint8_t *raw_edid;
+	size_t edid_size;
+	int i;
+
+	edid_size = strlen(mon_edid->edid) / 2; /* each ascii is a nibble. */
+	raw_edid = malloc(edid_size);
+	igt_assert(raw_edid);
+
+	for (i = 0; i < edid_size; i++) {
+		raw_edid[i] = convert_hex_char_to_byte(mon_edid->edid[i * 2]) << 4 |
+			      convert_hex_char_to_byte(mon_edid->edid[i * 2 + 1]);
+	}
+
+	if (edid_get_size((struct edid *)raw_edid) > edid_size) {
+		uint8_t *new_edid;
+
+		igt_warn("The edid size stored in the raw edid is shorter than the edid stored in the table.");
+		new_edid = realloc(raw_edid, edid_get_size((struct edid *)raw_edid));
+		igt_assert(new_edid);
+		raw_edid = new_edid;
+	}
+
+	return (struct edid *)raw_edid;
+}
+
+struct monitor_edid *get_edids_for_connector_type(uint32_t type, size_t *count, bool four_k)
+{
+	if (four_k) {
+		switch (type) {
+		case DRM_MODE_CONNECTOR_DisplayPort:
+			*count = ARRAY_SIZE(DP_EDIDS_4K);
+			return DP_EDIDS_4K;
+		case DRM_MODE_CONNECTOR_HDMIA:
+			*count = ARRAY_SIZE(HDMI_EDIDS_4K);
+			return HDMI_EDIDS_4K;
+		default:
+			igt_assert_f(0, "No 4k EDID for the connector %s\n",
+				     kmstest_connector_type_str(type));
+		}
+	} else {
+		switch (type) {
+		case DRM_MODE_CONNECTOR_DisplayPort:
+			*count = ARRAY_SIZE(DP_EDIDS_NON_4K);
+			return DP_EDIDS_NON_4K;
+		case DRM_MODE_CONNECTOR_HDMIA:
+			*count = ARRAY_SIZE(HDMI_EDIDS_NON_4K);
+			return HDMI_EDIDS_NON_4K;
+		default:
+			igt_assert_f(0, "No EDID for the connector %s\n",
+				     kmstest_connector_type_str(type));
+		}
+	}
+}
diff --git a/lib/monitor_edids/monitor_edids_helper.h b/lib/monitor_edids/monitor_edids_helper.h
index 05679f0897f3..2ec7aee5f13f 100644
--- a/lib/monitor_edids/monitor_edids_helper.h
+++ b/lib/monitor_edids/monitor_edids_helper.h
@@ -12,6 +12,8 @@
 #define TESTS_CHAMELIUM_MONITOR_EDIDS_MONITOR_EDIDS_HELPER_H_
 
 #include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
 
 #include "igt_chamelium.h"
 
@@ -30,4 +32,7 @@ get_chameleon_edid_from_monitor_edid(struct chamelium *chamelium,
 				     const monitor_edid *edid);
 void free_chamelium_edid_from_monitor_edid(struct chamelium_edid *edid);
 
+struct edid *edid_from_monitor_edid(const monitor_edid *monitor_edid);
+struct monitor_edid *get_edids_for_connector_type(uint32_t type, size_t *count, bool four_k);
+
 #endif /* TESTS_CHAMELIUM_MONITOR_EDIDS_MONITOR_EDIDS_HELPER_H_ */
\ No newline at end of file

-- 
2.44.2


  parent reply	other threads:[~2024-07-09 15:34 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-09 15:34 [PATCH i-g-t v2 00/39] tests/chamelium: Integrate the chamelium v3 Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 01/39] lib/igt_kms: Add a detect timeout value Louis Chauvet
2024-08-27  7:51   ` Kamil Konieczny
2024-08-28 14:31     ` Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 02/39] lib/igt_kms: Add helper to wait for a specific status on a connector Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 03/39] lib/igt_kms: Add function to list connected connectors Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 04/39] lib/igt_kms: Add helper to obtain a connector by its name or MST path Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 05/39] lib/igt_kms: Add function to get valid pipe for specific output Louis Chauvet
2024-07-09 15:34 ` Louis Chauvet [this message]
2024-07-09 15:34 ` [PATCH i-g-t v2 07/39] lib/monitor_edids: Add helper to get an EDID by its name Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 08/39] lib/monitor_edids: Add helper to print all available EDID names Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 09/39] lib/monitor_edids: Fix missing names in some monitor EDID Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 10/39] lib/monitor_edids: Add new EDID for HDMI 4k Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 11/39] tests/chamelium: Extract Chamelium v2 tests into a separate directory Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 12/39] lib/chamelium/v2: Extract chamelium v2 wrapper into its own directory Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 13/39] lib/chamelium/v2: Modify build options to separate Chamelium v2 and v3 Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 14/39] lib/chamelium/v3: Introduce the foundation for the Chamelium v3 wrapper Louis Chauvet
2024-08-26  9:22   ` Vignesh Raman
2024-08-28 17:26     ` Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 15/39] lib/chamelium/v3: Introduce initialization and cleanup of Chamelium-related structures Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 16/39] lib/chamelium/v3: Add method to discover Chamelium ports Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 17/39] lib/chamelium/v3: Implement method to retrieve Chamelium port names Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 18/39] tests/chamelium/v3: Implement a basic Chamelium v3 accessibility test Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 19/39] lib/chamelium/v3: Implement Chamelium reinitialization via Reset RPC call Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 20/39] lib/chamelium/v3: Implement methods for plugging Chamelium ports Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 21/39] lib/chamelium/v3: Implement methods for managing Chamelium EDID Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 22/39] lib/chamelium/v3: Implement Chamelium configuration parsing Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 23/39] lib/chamelium/v3: Log port mapping for debugging purposes Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 24/39] lib/chamelium/v3: Introduce new configuration format for MST support Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 25/39] lib/chamelium/v3: Provide access to port_mapping via method call Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 26/39] lib/chamelium/v3: Implement helper function to get port mapping from Chameleon port id Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 27/39] lib/chamelium/v3: Implement helper function to retrieve connector from port mapping Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 28/39] lib/chamelium/v3: Plug specific ports for all tests Louis Chauvet
2024-08-26  9:26   ` Vignesh Raman
2024-08-28 17:26     ` Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 29/39] lib/chamelium/v3: Implement Chamelium port autodetection algorithm Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 30/39] lib/chamelium/v3: Add save option to avoid doing autodetection every time Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 31/39] tests/chamelium/v3: Implement basic EDID handling test Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 32/39] tests/chamelium/v3: Implement 4K EDID stress test Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 33/39] tests/chamelium/v3: Implement non-4K " Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 34/39] lib/chamelium/v3: Implement method to discover video signal status Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 35/39] tests/chamelium/v3: Implement test for DRM device resolution Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 36/39] lib/chamelium/v3: Implement hot plug toggle scheduling method Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 37/39] tests/chamelium/v3: Add test for display change detection during sleep Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 38/39] tests/chamelium/v3: Add MST EDID reading test Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 39/39] docs: Add Chamelium v3 Louis Chauvet
2024-07-09 15:47 ` [PATCH i-g-t v2 00/39] tests/chamelium: Integrate the chamelium v3 Louis Chauvet
2024-07-09 16:16 ` ✗ Fi.CI.BUILD: failure for " Patchwork
2024-07-10  9:48   ` Louis Chauvet
2024-08-26  9:30     ` Vignesh Raman
2024-07-09 16:21 ` ✗ GitLab.Pipeline: warning " Patchwork

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=20240709-dev-remove-static-ports-v2-6-5adfc6985778@bootlin.com \
    --to=louis.chauvet@bootlin.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=ihf@google.com \
    --cc=jeremie.dautheribes@bootlin.com \
    --cc=markyacoub@google.com \
    --cc=thomas.petazzoni@bootlin.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox