parent
63d5b5b08a
commit
4033f710b7
@ -0,0 +1,80 @@
|
||||
From 51f81a659c7abff2e17ba7b6a30f729c8f16d32f Mon Sep 17 00:00:00 2001
|
||||
From: tigro <arkadiy.sheyn@softline.com>
|
||||
Date: Tue, 5 Dec 2023 00:15:42 +0300
|
||||
Subject: [PATCH] Fix csync detailed mode parsing
|
||||
|
||||
---
|
||||
drivers/gpu/drm/drm_edid.c | 26 +++++++++++++++++++-------
|
||||
include/drm/drm_edid.h | 12 +++++++++---
|
||||
2 files changed, 28 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
|
||||
index 5ed77e336..a26c6c57a 100644
|
||||
--- a/drivers/gpu/drm/drm_edid.c
|
||||
+++ b/drivers/gpu/drm/drm_edid.c
|
||||
@@ -3307,9 +3307,6 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
|
||||
DRM_DEBUG_KMS("stereo mode not supported\n");
|
||||
return NULL;
|
||||
}
|
||||
- if (!(pt->misc & DRM_EDID_PT_SEPARATE_SYNC)) {
|
||||
- DRM_DEBUG_KMS("composite sync not supported\n");
|
||||
- }
|
||||
|
||||
/* it is incorrect if hsync/vsync width is zero */
|
||||
if (!hsync_pulse_width || !vsync_pulse_width) {
|
||||
@@ -3356,10 +3353,25 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
|
||||
if (quirks & EDID_QUIRK_DETAILED_SYNC_PP) {
|
||||
mode->flags |= DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC;
|
||||
} else {
|
||||
- mode->flags |= (pt->misc & DRM_EDID_PT_HSYNC_POSITIVE) ?
|
||||
- DRM_MODE_FLAG_PHSYNC : DRM_MODE_FLAG_NHSYNC;
|
||||
- mode->flags |= (pt->misc & DRM_EDID_PT_VSYNC_POSITIVE) ?
|
||||
- DRM_MODE_FLAG_PVSYNC : DRM_MODE_FLAG_NVSYNC;
|
||||
+ switch (pt->misc & DRM_EDID_PT_SYNC_MASK) {
|
||||
+ case DRM_EDID_PT_ANALOG_CSYNC:
|
||||
+ case DRM_EDID_PT_BIPOLAR_ANALOG_CSYNC:
|
||||
+ drm_dbg_kms(dev, "Analog composite sync!\n");
|
||||
+ mode->flags |= DRM_MODE_FLAG_CSYNC | DRM_MODE_FLAG_NCSYNC;
|
||||
+ break;
|
||||
+ case DRM_EDID_PT_DIGITAL_CSYNC:
|
||||
+ drm_dbg_kms(dev, "Digital composite sync!\n");
|
||||
+ mode->flags |= DRM_MODE_FLAG_CSYNC;
|
||||
+ mode->flags |= (pt->misc & DRM_EDID_PT_HSYNC_POSITIVE) ?
|
||||
+ DRM_MODE_FLAG_PCSYNC : DRM_MODE_FLAG_NCSYNC;
|
||||
+ break;
|
||||
+ case DRM_EDID_PT_DIGITAL_SEPARATE_SYNC:
|
||||
+ mode->flags |= (pt->misc & DRM_EDID_PT_HSYNC_POSITIVE) ?
|
||||
+ DRM_MODE_FLAG_PHSYNC : DRM_MODE_FLAG_NHSYNC;
|
||||
+ mode->flags |= (pt->misc & DRM_EDID_PT_VSYNC_POSITIVE) ?
|
||||
+ DRM_MODE_FLAG_PVSYNC : DRM_MODE_FLAG_NVSYNC;
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
set_size:
|
||||
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
|
||||
index 1ed61e2b3..008d2ed39 100644
|
||||
--- a/include/drm/drm_edid.h
|
||||
+++ b/include/drm/drm_edid.h
|
||||
@@ -61,9 +61,15 @@ struct std_timing {
|
||||
u8 vfreq_aspect;
|
||||
} __attribute__((packed));
|
||||
|
||||
-#define DRM_EDID_PT_HSYNC_POSITIVE (1 << 1)
|
||||
-#define DRM_EDID_PT_VSYNC_POSITIVE (1 << 2)
|
||||
-#define DRM_EDID_PT_SEPARATE_SYNC (3 << 3)
|
||||
+#define DRM_EDID_PT_SYNC_MASK (3 << 3)
|
||||
+# define DRM_EDID_PT_ANALOG_CSYNC (0 << 3)
|
||||
+# define DRM_EDID_PT_BIPOLAR_ANALOG_CSYNC (1 << 3)
|
||||
+# define DRM_EDID_PT_DIGITAL_CSYNC (2 << 3)
|
||||
+# define DRM_EDID_PT_CSYNC_ON_RGB (1 << 1) /* analog csync only */
|
||||
+# define DRM_EDID_PT_CSYNC_SERRATE (1 << 2)
|
||||
+# define DRM_EDID_PT_DIGITAL_SEPARATE_SYNC (3 << 3)
|
||||
+# define DRM_EDID_PT_HSYNC_POSITIVE (1 << 1) /* also digital csync */
|
||||
+# define DRM_EDID_PT_VSYNC_POSITIVE (1 << 2)
|
||||
#define DRM_EDID_PT_STEREO (1 << 5)
|
||||
#define DRM_EDID_PT_INTERLACED (1 << 7)
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
Loading…
Reference in new issue