# -rw-r--r-- 1.7 KiB View raw
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
From ce7ff69aac90363c098f00cb6f37e46cab8c26c8 Mon Sep 17 00:00:00 2001
From: Andri Yngvason <andri@yngvason.is>
Date: Fri, 24 Sep 2021 14:29:53 +0000
Subject: [PATCH 03/18] drivers: drm: edid: Configure fallback hdmi audio

---
 drivers/gpu/drm/drm_edid.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index bd2051de4a9c..bae29dfd2388 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -6617,6 +6617,9 @@ int drm_add_modes_noedid(struct drm_connector *connector,
 	int i, count, num_modes = 0;
 	struct drm_display_mode *mode;
 	struct drm_device *dev = connector->dev;
+	uint8_t *eld = connector->eld;
+	const static char monitor_name[] = "fallback";
+	int mnl = sizeof(monitor_name) - 1;
 
 	count = ARRAY_SIZE(drm_dmt_modes);
 	if (hdisplay < 0)
@@ -6645,6 +6648,26 @@ int drm_add_modes_noedid(struct drm_connector *connector,
 			num_modes++;
 		}
 	}
+
+	clear_eld(connector);
+
+	memcpy(&eld[DRM_ELD_MONITOR_NAME_STRING], monitor_name, mnl);
+
+	eld[DRM_ELD_VER] = DRM_ELD_VER_CEA861D;
+	eld[DRM_ELD_CEA_EDID_VER_MNL] = 3 << DRM_ELD_CEA_EDID_VER_SHIFT;
+	eld[DRM_ELD_CEA_EDID_VER_MNL] |= mnl;
+
+	eld[DRM_ELD_CEA_SAD(mnl, 0) + 0] = 9; /* lpcm, 2 channels */
+	eld[DRM_ELD_CEA_SAD(mnl, 0) + 1] = 6; /* 48k & 44.1k */
+	eld[DRM_ELD_CEA_SAD(mnl, 0) + 2] = 1; /* 16 bits */
+
+	eld[DRM_ELD_SPEAKER] = 1; /* front left & front right */
+
+	eld[DRM_ELD_SAD_COUNT_CONN_TYPE] |= 1 << DRM_ELD_SAD_COUNT_SHIFT;
+	eld[DRM_ELD_SAD_COUNT_CONN_TYPE] |= DRM_ELD_CONN_TYPE_HDMI;
+	eld[DRM_ELD_BASELINE_ELD_LEN] =
+		DIV_ROUND_UP(drm_eld_calc_baseline_block_size(eld), 4);
+
 	return num_modes;
 }
 EXPORT_SYMBOL(drm_add_modes_noedid);
-- 
2.39.2