diff options
Diffstat (limited to 'patches/linux-3.8.13/0077-drm_modes-add-of_videomode-helpers.patch')
-rw-r--r-- | patches/linux-3.8.13/0077-drm_modes-add-of_videomode-helpers.patch | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/patches/linux-3.8.13/0077-drm_modes-add-of_videomode-helpers.patch b/patches/linux-3.8.13/0077-drm_modes-add-of_videomode-helpers.patch new file mode 100644 index 0000000..b1091d8 --- /dev/null +++ b/patches/linux-3.8.13/0077-drm_modes-add-of_videomode-helpers.patch @@ -0,0 +1,91 @@ +From: Steffen Trumtrar <s.trumtrar@pengutronix.de> +Date: Wed, 19 Dec 2012 16:37:06 +0530 +Subject: [PATCH] drm_modes: add of_videomode helpers + +Add helper to get drm_display_mode from devicetree. + +Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de> +Reviewed-by: Thierry Reding <thierry.reding@avionic-design.de> +Acked-by: Thierry Reding <thierry.reding@avionic-design.de> +Tested-by: Thierry Reding <thierry.reding@avionic-design.de> +Tested-by: Philipp Zabel <p.zabel@pengutronix.de> +Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> +Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> +--- + drivers/gpu/drm/drm_modes.c | 33 +++++++++++++++++++++++++++++++++ + include/drm/drmP.h | 4 ++++ + 2 files changed, 37 insertions(+) + +diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c +index 9f3f20b..04fa6f1 100644 +--- a/drivers/gpu/drm/drm_modes.c ++++ b/drivers/gpu/drm/drm_modes.c +@@ -35,6 +35,7 @@ + #include <linux/export.h> + #include <drm/drmP.h> + #include <drm/drm_crtc.h> ++#include <video/of_videomode.h> + #include <video/videomode.h> + + /** +@@ -541,6 +542,38 @@ int drm_display_mode_from_videomode(const struct videomode *vm, + EXPORT_SYMBOL_GPL(drm_display_mode_from_videomode); + #endif + ++#if IS_ENABLED(CONFIG_OF_VIDEOMODE) ++/** ++ * 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) ++{ ++ struct videomode vm; ++ int ret; ++ ++ ret = of_get_videomode(np, &vm, index); ++ if (ret) ++ return ret; ++ ++ drm_display_mode_from_videomode(&vm, dmode); ++ ++ pr_debug("%s: got %dx%d display mode from %s\n", ++ of_node_full_name(np), vm.hactive, vm.vactive, np->name); ++ drm_mode_debug_printmodeline(dmode); ++ ++ return 0; ++} ++EXPORT_SYMBOL_GPL(of_get_drm_display_mode); ++#endif ++ + /** + * 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 24ef0cf..98efdde 100644 +--- a/include/drm/drmP.h ++++ b/include/drm/drmP.h +@@ -85,6 +85,7 @@ struct module; + struct drm_file; + struct drm_device; + ++struct device_node; + struct videomode; + + #include <drm/drm_os_linux.h> +@@ -1460,6 +1461,9 @@ drm_mode_create_from_cmdline_mode(struct drm_device *dev, + + extern int drm_display_mode_from_videomode(const struct videomode *vm, + struct drm_display_mode *dmode); ++extern int of_get_drm_display_mode(struct device_node *np, ++ struct drm_display_mode *dmode, ++ int index); + + /* Modesetting support */ + extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc); |