--- v8
+++ v9
@@ -2,47 +2,41 @@
Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de>
---
- drivers/gpu/drm/drm_modes.c | 41 +++++++++++++++++++++++++++++++++++++++++
- include/drm/drmP.h | 5 +++++
- 2 files changed, 46 insertions(+)
+ drivers/gpu/drm/drm_modes.c | 35 ++++++++++++++++++++++++++++++++++-
+ include/drm/drmP.h | 6 ++++++
+ 2 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
-index 049624d..c77da59 100644
+index 42ea099..c3ae5d2 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
-@@ -35,6 +35,7 @@
+@@ -35,7 +35,8 @@
#include <linux/export.h>
#include <drm/drmP.h>
#include <drm/drm_crtc.h>
+-#include <linux/videomode.h>
+#include <linux/of.h>
- #include <linux/videomode.h>
++#include <linux/of_videomode.h>
/**
-@@ -540,6 +541,46 @@ int videomode_to_display_mode(struct videomode *vm, struct drm_display_mode *dmo
- EXPORT_SYMBOL_GPL(videomode_to_display_mode);
+ * drm_mode_debug_printmodeline - debug print a mode
+@@ -540,6 +541,38 @@ int display_mode_from_videomode(struct videomode *vm, struct drm_display_mode *d
+ EXPORT_SYMBOL_GPL(display_mode_from_videomode);
#endif
+#if IS_ENABLED(CONFIG_OF_VIDEOMODE)
-+static void dump_drm_displaymode(struct drm_display_mode *m)
-+{
-+ pr_debug("drm_displaymode = %d %d %d %d %d %d %d %d %d\n",
-+ m->hdisplay, m->hsync_start, m->hsync_end, m->htotal,
-+ m->vdisplay, m->vsync_start, m->vsync_end, m->vtotal,
-+ m->clock);
-+}
-+
+/**
+ * of_get_drm_display_mode - get a drm_display_mode from devicetree
+ * @np: device_node with the timing specification
+ * @dmode: will be set to the return value
+ * @index: index into the list of display timings in devicetree
-+ *
++ *
+ * This function is expensive and should only be used, if only one mode is to be
+ * read from DT. To get multiple modes start with of_get_display_timings and
+ * work with that instead.
+ */
+int of_get_drm_display_mode(struct device_node *np, struct drm_display_mode *dmode,
-+ int index)
++ unsigned int index)
+{
+ struct videomode vm;
+ int ret;
@@ -51,11 +45,11 @@
+ if (ret)
+ return ret;
+
-+ videomode_to_display_mode(&vm, dmode);
++ display_mode_from_videomode(&vm, dmode);
+
+ pr_info("%s: got %dx%d display mode from %s\n", __func__, vm.hactive,
+ vm.vactive, np->name);
-+ dump_drm_displaymode(dmode);
++ drm_mode_debug_printmodeline(dmode);
+
+ return 0;
+
@@ -66,7 +60,7 @@
* drm_mode_set_name - set the name on a mode
* @mode: name will be set in this mode
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
-index e9fa1e3..4f9c44e 100644
+index 1e0d846..e8f46a1 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -56,6 +56,7 @@
@@ -77,17 +71,18 @@
#include <linux/videomode.h>
#if defined(__alpha__) || defined(__powerpc__)
#include <asm/pgtable.h> /* For pte_wrprotect */
-@@ -1457,6 +1458,10 @@ drm_mode_create_from_cmdline_mode(struct drm_device *dev,
-
- extern int videomode_to_display_mode(struct videomode *vm,
- struct drm_display_mode *dmode);
+@@ -1459,6 +1460,11 @@ drm_mode_create_from_cmdline_mode(struct drm_device *dev,
+ extern int display_mode_from_videomode(struct videomode *vm,
+ struct drm_display_mode *dmode);
+ #endif
++#if IS_ENABLED(CONFIG_OF_VIDEOMODE)
+extern int of_get_drm_display_mode(struct device_node *np,
+ struct drm_display_mode *dmode,
-+ int index);
-+
++ unsigned int index);
++#endif
+
/* Modesetting support */
extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc);
- extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc);
--
1.7.10.4