diff options
| author | Steffen Trumtrar <s.trumtrar@pengutronix.de> | 2012-10-28 13:28:06 -0400 |
|---|---|---|
| committer | Steffen Trumtrar <s.trumtrar@pengutronix.de> | 2013-01-24 03:04:14 -0500 |
| commit | edb37a95c58147f89713e6c5cd220fa8fdfb4833 (patch) | |
| tree | f4f344a417e57d115e80f2bffc05d2b81c08986c | |
| parent | ebc64e453857e93b230881f48126257be9aa8830 (diff) | |
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>
Tested-by: Afzal Mohammed <Afzal@ti.com>
Tested-by: Rob Clark <robclark@gmail.com>
Tested-by: Leela Krishna Amudala <leelakrishna.a@gmail.com>
| -rw-r--r-- | drivers/gpu/drm/drm_modes.c | 33 | ||||
| -rw-r--r-- | include/drm/drmP.h | 4 |
2 files changed, 37 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index 9f3f20bde399..04fa6f1808d1 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c | |||
| @@ -35,6 +35,7 @@ | |||
| 35 | #include <linux/export.h> | 35 | #include <linux/export.h> |
| 36 | #include <drm/drmP.h> | 36 | #include <drm/drmP.h> |
| 37 | #include <drm/drm_crtc.h> | 37 | #include <drm/drm_crtc.h> |
| 38 | #include <video/of_videomode.h> | ||
| 38 | #include <video/videomode.h> | 39 | #include <video/videomode.h> |
| 39 | 40 | ||
| 40 | /** | 41 | /** |
| @@ -541,6 +542,38 @@ int drm_display_mode_from_videomode(const struct videomode *vm, | |||
| 541 | EXPORT_SYMBOL_GPL(drm_display_mode_from_videomode); | 542 | EXPORT_SYMBOL_GPL(drm_display_mode_from_videomode); |
| 542 | #endif | 543 | #endif |
| 543 | 544 | ||
| 545 | #if IS_ENABLED(CONFIG_OF_VIDEOMODE) | ||
| 546 | /** | ||
| 547 | * of_get_drm_display_mode - get a drm_display_mode from devicetree | ||
| 548 | * @np: device_node with the timing specification | ||
| 549 | * @dmode: will be set to the return value | ||
| 550 | * @index: index into the list of display timings in devicetree | ||
| 551 | * | ||
| 552 | * This function is expensive and should only be used, if only one mode is to be | ||
| 553 | * read from DT. To get multiple modes start with of_get_display_timings and | ||
| 554 | * work with that instead. | ||
| 555 | */ | ||
| 556 | int of_get_drm_display_mode(struct device_node *np, | ||
| 557 | struct drm_display_mode *dmode, int index) | ||
| 558 | { | ||
| 559 | struct videomode vm; | ||
| 560 | int ret; | ||
| 561 | |||
| 562 | ret = of_get_videomode(np, &vm, index); | ||
| 563 | if (ret) | ||
| 564 | return ret; | ||
| 565 | |||
| 566 | drm_display_mode_from_videomode(&vm, dmode); | ||
| 567 | |||
| 568 | pr_debug("%s: got %dx%d display mode from %s\n", | ||
| 569 | of_node_full_name(np), vm.hactive, vm.vactive, np->name); | ||
| 570 | drm_mode_debug_printmodeline(dmode); | ||
| 571 | |||
| 572 | return 0; | ||
| 573 | } | ||
| 574 | EXPORT_SYMBOL_GPL(of_get_drm_display_mode); | ||
| 575 | #endif | ||
| 576 | |||
| 544 | /** | 577 | /** |
| 545 | * drm_mode_set_name - set the name on a mode | 578 | * drm_mode_set_name - set the name on a mode |
| 546 | * @mode: name will be set in this mode | 579 | * @mode: name will be set in this mode |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index d5c06ffb7a31..fcc9d2382590 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
| @@ -85,6 +85,7 @@ struct module; | |||
| 85 | struct drm_file; | 85 | struct drm_file; |
| 86 | struct drm_device; | 86 | struct drm_device; |
| 87 | 87 | ||
| 88 | struct device_node; | ||
| 88 | struct videomode; | 89 | struct videomode; |
| 89 | 90 | ||
| 90 | #include <drm/drm_os_linux.h> | 91 | #include <drm/drm_os_linux.h> |
| @@ -1460,6 +1461,9 @@ drm_mode_create_from_cmdline_mode(struct drm_device *dev, | |||
| 1460 | 1461 | ||
| 1461 | extern int drm_display_mode_from_videomode(const struct videomode *vm, | 1462 | extern int drm_display_mode_from_videomode(const struct videomode *vm, |
| 1462 | struct drm_display_mode *dmode); | 1463 | struct drm_display_mode *dmode); |
| 1464 | extern int of_get_drm_display_mode(struct device_node *np, | ||
| 1465 | struct drm_display_mode *dmode, | ||
| 1466 | int index); | ||
| 1463 | 1467 | ||
| 1464 | /* Modesetting support */ | 1468 | /* Modesetting support */ |
| 1465 | extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc); | 1469 | extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc); |
