All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode
@ 2013-03-25 21:58 Dylan Semler
  2013-03-25 21:58 ` [PATCH v4 1/2] drm: Enhance EDID quirks to explicitly set " Dylan Semler
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Dylan Semler @ 2013-03-25 21:58 UTC (permalink / raw)
  To: dri-devel

Changes in this version
 * rename do_force_quirk_modes() -> do_force_quirk_mode()
 * use list_for_each_entry() instead of list_for_each_entry_safe() in
   do_force_quirk_mode()
 * remove num_modes from do_force_quirk_mode(), just return 1 or 0 as
   appropriate
 * remove unused quirks argument from add_force_quirk_modes()
 * fixes to allow cases of forcing multiple modes
 * adjusted comments to adhere closer to style guides

Changes in version 3
 * Uses drm_cvt_mode() instead of drm_gtf_mode() to build modeline
 * Adds bool to specify reduced blanking to edid_quirk_force_mode
 * Removes preferred bit from all other modes

Changes in version 2
 * none

There is at least one monitor that doesn't report its native resolution
in its EDID block.  This enhancement extends the EDID quirk logic to
make monitors like this "just work".

The first patch in this series sets up a new quirk list where monitors'
correct width, height, refresh rate, and reduced blanking parameters are
specified.  When a matching monitor is attached the full mode is
calculated with drm_cvt_mode() and added to the connector.  The
DRM_MODE_TYPE_PREFERRED bit is set on the new mode and unset from all
other modes.

The first patch also defines a new quirk bit: EDID_QUIRK_FORCE_MODE.
This bit needs to be set for the new quirk list described above to be
checked.

The second patch adds the offending monitor to the quirk lists.

Dylan Semler (2):
  drm: Enhance EDID quirks to explicitly set a mode
  drm: Add EDID force quirk for MMT Monitor2Go HD+

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

-- 
1.7.11.7

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v4 1/2] drm: Enhance EDID quirks to explicitly set a mode
  2013-03-25 21:58 [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode Dylan Semler
@ 2013-03-25 21:58 ` Dylan Semler
  2013-03-25 21:58 ` [PATCH v4 2/2] drm: Add EDID force quirk for MMT Monitor2Go HD+ Dylan Semler
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Dylan Semler @ 2013-03-25 21:58 UTC (permalink / raw)
  To: dri-devel

There is at least one monitor that doesn't report its native resolution
in its EDID block.  This enhancement extends the EDID quirk logic to
make monitors like this "just work".

This patch sets up a new quirk list where monitors' correct width,
height, refresh rate, and reduced blanking parameters are specified.
When a matching monitor is attached the full mode is calculated with
drm_cvt_mode() and added to the connector.  The DRM_MODE_TYPE_PREFERRED
bit is set on the new mode and unset from all other modes.

The patch also defines a new quirk bit: EDID_QUIRK_FORCE_MODE.  This
bit needs to be set for the new quirk list discribed above to be
checked.

Signed-off-by: Dylan Semler <dylan.semler@gmail.com>
---
 drivers/gpu/drm/drm_edid.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index c194f4e..f8f3a4a 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -68,6 +68,8 @@
 #define EDID_QUIRK_DETAILED_SYNC_PP		(1 << 6)
 /* Force reduced-blanking timings for detailed modes */
 #define EDID_QUIRK_FORCE_REDUCED_BLANKING	(1 << 7)
+/* Force specific mode for monitors that don't report correct EDIDs */
+#define EDID_QUIRK_FORCE_MODE			(1 << 8)
 
 struct detailed_mode_closure {
 	struct drm_connector *connector;
@@ -128,6 +130,22 @@ static struct edid_quirk {
 };
 
 /*
+ * Displays that don't report a desired mode in their EDID block that cannot be
+ * resolved with a quirk from above are specified here.  If multiple modes need
+ * to be forced for the same display, the most preferred should be last; that
+ * is what the display will be initialized with.
+ */
+static struct edid_quirk_force_mode {
+	char vendor[4];			/* vendor ID */
+	int product_id;			/* product ID */
+	int hdisplay;			/* horizontal resolution */
+	int vdisplay;			/* vertical resolution */
+	int vrefresh;			/* refresh rate */
+	bool reduced;			/* reduce blanking */
+} edid_quirk_force_mode_list[] = {
+};
+
+/*
  * Autogenerated from the DMT spec.
  * This table is copied from xfree86/modes/xf86EdidModes.c.
  */
@@ -2219,6 +2237,63 @@ add_detailed_modes(struct drm_connector *connector, struct edid *edid,
 	return closure.modes;
 }
 
+/*
+ * Add forced mode according to the matching quirk, set it as preferred,
+ * and remove the preferred bit from all other modes.
+ */
+static int
+do_force_quirk_mode(struct drm_connector *connector, int hdisplay,
+		    int vdisplay, int vrefresh, bool reduced)
+{
+	struct drm_display_mode *mode, *cur_mode;
+	struct drm_device *dev = connector->dev;
+
+	if (hdisplay < 0)
+		return 0;
+	if (vdisplay < 0)
+		return 0;
+	if (vrefresh < 0)
+		return 0;
+
+	list_for_each_entry(cur_mode, &connector->probed_modes, head)
+		cur_mode->type &= ~DRM_MODE_TYPE_PREFERRED;
+
+	mode = drm_cvt_mode(dev, hdisplay, vdisplay, vrefresh, reduced, 0, 0);
+
+	if (!mode)
+		return 0;
+
+	mode->type |= DRM_MODE_TYPE_PREFERRED;
+	drm_mode_probed_add(connector, mode);
+	return 1;
+}
+
+/*
+ * add_force_quirk_modes - Add modes based on monitor's EDID force mode quirks
+ * @connector: attached connector
+ * @edid: EDID block to scan
+ */
+static int
+add_force_quirk_modes(struct drm_connector *connector, struct edid *edid)
+{
+	struct edid_quirk_force_mode *quirk_mode;
+	int i, num_modes = 0;
+
+	for (i = 0; i < ARRAY_SIZE(edid_quirk_force_mode_list); i++) {
+		quirk_mode = &edid_quirk_force_mode_list[i];
+
+		if (edid_vendor(edid, quirk_mode->vendor) &&
+		    (EDID_PRODUCT_ID(edid) == quirk_mode->product_id))
+			num_modes += do_force_quirk_mode(connector,
+					quirk_mode->hdisplay,
+					quirk_mode->vdisplay,
+					quirk_mode->vrefresh,
+					quirk_mode->reduced);
+	}
+	return num_modes;
+
+}
+
 #define HDMI_IDENTIFIER 0x000C03
 #define AUDIO_BLOCK	0x01
 #define VIDEO_BLOCK     0x02
@@ -2803,6 +2878,8 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
 
 	if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
 		edid_fixup_preferred(connector, quirks);
+	if (EDID_QUIRK_FORCE_MODE)
+		num_modes += add_force_quirk_modes(connector, edid);
 
 	drm_add_display_info(edid, &connector->display_info);
 
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v4 2/2] drm: Add EDID force quirk for MMT Monitor2Go HD+
  2013-03-25 21:58 [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode Dylan Semler
  2013-03-25 21:58 ` [PATCH v4 1/2] drm: Enhance EDID quirks to explicitly set " Dylan Semler
@ 2013-03-25 21:58 ` Dylan Semler
  2013-04-03 13:36 ` [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode Dylan Semler
  2013-06-18 16:56 ` Dylan Semler
  3 siblings, 0 replies; 6+ messages in thread
From: Dylan Semler @ 2013-03-25 21:58 UTC (permalink / raw)
  To: dri-devel

Set the new EDID_QUIRK_FORCE_MODE bit for the MMT Monitor2Go HD+ monitor
and add it to the edid_quirk_force_mode_list.

Signed-off-by: Dylan Semler <dylan.semler@gmail.com>
---
 drivers/gpu/drm/drm_edid.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index f8f3a4a..c747e08 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -109,6 +109,9 @@ static struct edid_quirk {
 	{ "FCM", 13600, EDID_QUIRK_PREFER_LARGE_75 |
 	  EDID_QUIRK_DETAILED_IN_CM },
 
+	/* Mobile Monitor Technologies LLC, Monitor2Go HD+ */
+	{ "LLP", 0x4c54, EDID_QUIRK_FORCE_MODE},
+
 	/* LG Philips LCD LP154W01-A5 */
 	{ "LPL", 0, EDID_QUIRK_DETAILED_USE_MAXIMUM_SIZE },
 	{ "LPL", 0x2a00, EDID_QUIRK_DETAILED_USE_MAXIMUM_SIZE },
@@ -143,6 +146,8 @@ static struct edid_quirk_force_mode {
 	int vrefresh;			/* refresh rate */
 	bool reduced;			/* reduce blanking */
 } edid_quirk_force_mode_list[] = {
+	/* Mobile Monitor Technologies LLC, Monitor2Go HD+ */
+	{ "LLP", 0x4c54, 1600, 900, 60, 1 },
 };
 
 /*
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode
  2013-03-25 21:58 [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode Dylan Semler
  2013-03-25 21:58 ` [PATCH v4 1/2] drm: Enhance EDID quirks to explicitly set " Dylan Semler
  2013-03-25 21:58 ` [PATCH v4 2/2] drm: Add EDID force quirk for MMT Monitor2Go HD+ Dylan Semler
@ 2013-04-03 13:36 ` Dylan Semler
  2013-04-03 16:45   ` Jani Nikula
  2013-06-18 16:56 ` Dylan Semler
  3 siblings, 1 reply; 6+ messages in thread
From: Dylan Semler @ 2013-04-03 13:36 UTC (permalink / raw)
  To: dri-devel, ajax


[-- Attachment #1.1: Type: text/plain, Size: 1979 bytes --]

On Mon, Mar 25, 2013 at 5:58 PM, Dylan Semler <dylan.semler@gmail.com>
wrote:
>
> Changes in this version
>  * rename do_force_quirk_modes() -> do_force_quirk_mode()
>  * use list_for_each_entry() instead of list_for_each_entry_safe() in
>    do_force_quirk_mode()
>  * remove num_modes from do_force_quirk_mode(), just return 1 or 0 as
>    appropriate
>  * remove unused quirks argument from add_force_quirk_modes()
>  * fixes to allow cases of forcing multiple modes
>  * adjusted comments to adhere closer to style guides
>
> Changes in version 3
>  * Uses drm_cvt_mode() instead of drm_gtf_mode() to build modeline
>  * Adds bool to specify reduced blanking to edid_quirk_force_mode
>  * Removes preferred bit from all other modes
>
> Changes in version 2
>  * none
>
> There is at least one monitor that doesn't report its native resolution
> in its EDID block.  This enhancement extends the EDID quirk logic to
> make monitors like this "just work".
>
> The first patch in this series sets up a new quirk list where monitors'
> correct width, height, refresh rate, and reduced blanking parameters are
> specified.  When a matching monitor is attached the full mode is
> calculated with drm_cvt_mode() and added to the connector.  The
> DRM_MODE_TYPE_PREFERRED bit is set on the new mode and unset from all
> other modes.
>
> The first patch also defines a new quirk bit: EDID_QUIRK_FORCE_MODE.
> This bit needs to be set for the new quirk list described above to be
> checked.
>
> The second patch adds the offending monitor to the quirk lists.
>
> Dylan Semler (2):
>   drm: Enhance EDID quirks to explicitly set a mode
>   drm: Add EDID force quirk for MMT Monitor2Go HD+
>
>  drivers/gpu/drm/drm_edid.c | 89
++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 89 insertions(+)
>
> --
> 1.7.11.7
>

Version 3 was Acked by Daniel Vetter[1].  Any chance ajax can give his
comments?

[1] http://lists.freedesktop.org/archives/dri-devel/2013-March/036457.html

[-- Attachment #1.2: Type: text/html, Size: 2577 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode
  2013-04-03 13:36 ` [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode Dylan Semler
@ 2013-04-03 16:45   ` Jani Nikula
  0 siblings, 0 replies; 6+ messages in thread
From: Jani Nikula @ 2013-04-03 16:45 UTC (permalink / raw)
  To: Dylan Semler, dri-devel, ajax

On Wed, 03 Apr 2013, Dylan Semler <dylan.semler@gmail.com> wrote:
> Version 3 was Acked by Daniel Vetter[1].  Any chance ajax can give his
> comments?
>
> [1] http://lists.freedesktop.org/archives/dri-devel/2013-March/036457.html

FWIW,

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode
  2013-03-25 21:58 [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode Dylan Semler
                   ` (2 preceding siblings ...)
  2013-04-03 13:36 ` [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode Dylan Semler
@ 2013-06-18 16:56 ` Dylan Semler
  3 siblings, 0 replies; 6+ messages in thread
From: Dylan Semler @ 2013-06-18 16:56 UTC (permalink / raw)
  To: dri-devel, ajax


[-- Attachment #1.1: Type: text/plain, Size: 2202 bytes --]

Checking up on this patch from a few months back that I'd like to get
included..  Acked by Daniel Vetter[1] and Reviewed by Jani Nikula[2].
 However ajax has not yet provided comments.  Is this SOL without feedback
from ajax?

[1] http://lists.freedesktop.org/archives/dri-devel/2013-March/036457.html
[2] http://lists.freedesktop.org/archives/dri-devel/2013-April/036829.html


On Mon, Mar 25, 2013 at 5:58 PM, Dylan Semler <dylan.semler@gmail.com>wrote:

> Changes in this version
>  * rename do_force_quirk_modes() -> do_force_quirk_mode()
>  * use list_for_each_entry() instead of list_for_each_entry_safe() in
>    do_force_quirk_mode()
>  * remove num_modes from do_force_quirk_mode(), just return 1 or 0 as
>    appropriate
>  * remove unused quirks argument from add_force_quirk_modes()
>  * fixes to allow cases of forcing multiple modes
>  * adjusted comments to adhere closer to style guides
>
> Changes in version 3
>  * Uses drm_cvt_mode() instead of drm_gtf_mode() to build modeline
>  * Adds bool to specify reduced blanking to edid_quirk_force_mode
>  * Removes preferred bit from all other modes
>
> Changes in version 2
>  * none
>
> There is at least one monitor that doesn't report its native resolution
> in its EDID block.  This enhancement extends the EDID quirk logic to
> make monitors like this "just work".
>
> The first patch in this series sets up a new quirk list where monitors'
> correct width, height, refresh rate, and reduced blanking parameters are
> specified.  When a matching monitor is attached the full mode is
> calculated with drm_cvt_mode() and added to the connector.  The
> DRM_MODE_TYPE_PREFERRED bit is set on the new mode and unset from all
> other modes.
>
> The first patch also defines a new quirk bit: EDID_QUIRK_FORCE_MODE.
> This bit needs to be set for the new quirk list described above to be
> checked.
>
> The second patch adds the offending monitor to the quirk lists.
>
> Dylan Semler (2):
>   drm: Enhance EDID quirks to explicitly set a mode
>   drm: Add EDID force quirk for MMT Monitor2Go HD+
>
>  drivers/gpu/drm/drm_edid.c | 89
> ++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 89 insertions(+)
>
> --
> 1.7.11.7
>
>

[-- Attachment #1.2: Type: text/html, Size: 3043 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-06-18 16:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-25 21:58 [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode Dylan Semler
2013-03-25 21:58 ` [PATCH v4 1/2] drm: Enhance EDID quirks to explicitly set " Dylan Semler
2013-03-25 21:58 ` [PATCH v4 2/2] drm: Add EDID force quirk for MMT Monitor2Go HD+ Dylan Semler
2013-04-03 13:36 ` [PATCH v4 0/2] Enhance EDID quirks to allow forcing a mode Dylan Semler
2013-04-03 16:45   ` Jani Nikula
2013-06-18 16:56 ` Dylan Semler

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.