[Patch v2][ 11/37] staging: imx-drm: use of_get_display_timings.

2013-10-18 Thread Sascha Hauer
On Thu, Oct 17, 2013 at 05:02:09PM +0200, Denis Carikli wrote:
> The comment on top of of_get_drm_display_mode says:
>  * 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.

This patch seems to add support for multiple displays at the parallel
display port. How does this work? You can only connect one display at a
time.

Sascha

-- 
Pengutronix e.K.   | |
Industrial Linux Solutions | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0|
Amtsgericht Hildesheim, HRA 2686   | Fax:   +49-5121-206917- |


[Patch v2][ 11/37] staging: imx-drm: use of_get_display_timings.

2013-10-17 Thread Denis Carikli
The comment on top of of_get_drm_display_mode says:
 * 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.

Cc: Greg Kroah-Hartman 
Cc: driverdev-devel at linuxdriverproject.org
Cc: David Airlie 
Cc: dri-devel at lists.freedesktop.org
Cc: linux-arm-kernel at lists.infradead.org
Cc: Fabio Estevam 
Cc: Sascha Hauer 
Cc: linux-arm-kernel at lists.infradead.org
Cc: Eric B?nard 
Signed-off-by: Denis Carikli 
---
 drivers/staging/imx-drm/parallel-display.c |   26 +-
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/imx-drm/parallel-display.c 
b/drivers/staging/imx-drm/parallel-display.c
index 24aa9be..c04b017 100644
--- a/drivers/staging/imx-drm/parallel-display.c
+++ b/drivers/staging/imx-drm/parallel-display.c
@@ -23,6 +23,8 @@
 #include 
 #include 
 #include 
+#include 
+#include 

 #include "imx-drm.h"

@@ -74,11 +76,25 @@ static int imx_pd_connector_get_modes(struct drm_connector 
*connector)

if (np) {
struct drm_display_mode *mode = drm_mode_create(connector->dev);
-   of_get_drm_display_mode(np, >mode, 0);
-   drm_mode_copy(mode, >mode);
-   mode->type |= DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
-   drm_mode_probed_add(connector, mode);
-   num_modes++;
+   struct display_timings *timings;
+   struct videomode vm;
+   int np_num_mode;
+
+   timings = of_get_display_timings(np);
+   if (!timings)
+   return num_modes;
+   for (np_num_mode = 0; np_num_mode < timings->num_timings;
+   np_num_mode++, num_modes++) {
+   if (videomode_from_timings(timings, , np_num_mode))
+   break;
+   drm_display_mode_from_videomode(, mode);
+   mode->type = DRM_MODE_TYPE_DRIVER;
+   if (timings->native_mode == np_num_mode)
+   mode->type |= DRM_MODE_TYPE_PREFERRED;
+
+   drm_mode_set_name(mode);
+   drm_mode_probed_add(connector, mode);
+   }
}

return num_modes;
-- 
1.7.9.5