From ce7ff69aac90363c098f00cb6f37e46cab8c26c8 Mon Sep 17 00:00:00 2001 From: Andri Yngvason 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