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