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