Thread (43 messages) 43 messages, 8 authors, 2010-04-28

Re: [PATCH 2/3] fbdev: fsl-diu-fb.c: allow setting panel video mode from DT

From: Grant Likely <hidden>
Date: 2010-02-28 06:53:18
Also in: linux-fbdev

On Sat, Feb 27, 2010 at 2:58 PM, Anatolij Gustschin [off-list ref] wrote:
Add support for specifying display panel data in the device
tree. If no panel data is provided in the device tree, default
video mode will be used as usual.

Signed-off-by: Anatolij Gustschin <agust@denx.de>
This one seems okay, but the binding in the first patch first needs to
get resolved.

g.
---
=A0drivers/video/Kconfig =A0 =A0 =A0| =A0 =A01 +
=A0drivers/video/fsl-diu-fb.c | =A0 63 +++++++++++++++++++++++++---------=
----------
quoted hunk ↗ jump to hunk
=A02 files changed, 37 insertions(+), 27 deletions(-)
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index dc1beb0..c805ecd 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -1850,6 +1850,7 @@ config FB_FSL_DIU
=A0 =A0 =A0 =A0select FB_CFB_COPYAREA
=A0 =A0 =A0 =A0select FB_CFB_IMAGEBLIT
=A0 =A0 =A0 =A0select PPC_LIB_RHEAP
+ =A0 =A0 =A0 select FB_OF_MODE
=A0 =A0 =A0 =A0---help---
=A0 =A0 =A0 =A0 =A0Framebuffer driver for the Freescale SoC DIU
diff --git a/drivers/video/fsl-diu-fb.c b/drivers/video/fsl-diu-fb.c
index 4637bcb..19ca1da 100644
--- a/drivers/video/fsl-diu-fb.c
+++ b/drivers/video/fsl-diu-fb.c
@@ -36,6 +36,8 @@
=A0#include <sysdev/fsl_soc.h>
=A0#include "fsl-diu-fb.h"

+#include "ofmode.h"
+
=A0/*
=A0* These parameters give default parameters
=A0* for video output 1024x768,
@@ -1168,7 +1170,7 @@ static int init_fbinfo(struct fb_info *info)
=A0 =A0 =A0 =A0return 0;
=A0}

-static int __devinit install_fb(struct fb_info *info)
+static int __devinit install_fb(struct device_node *np, struct fb_info *=
info)
quoted hunk ↗ jump to hunk
=A0{
=A0 =A0 =A0 =A0int rc;
=A0 =A0 =A0 =A0struct mfb_info *mfbi =3D info->par;
@@ -1177,33 +1179,40 @@ static int __devinit install_fb(struct fb_info *i=
nfo)
=A0 =A0 =A0 =A0if (init_fbinfo(info))
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -EINVAL;

- =A0 =A0 =A0 if (mfbi->index =3D=3D 0) =A0 /* plane 0 */
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 aoi_mode =3D fb_mode;
- =A0 =A0 =A0 else
+ =A0 =A0 =A0 if (mfbi->index =3D=3D 0) { /* plane 0 */
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* use default mode for plane0 if there is =
no mode in DTB */
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (of_get_video_mode(np, info) < 0)
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 aoi_mode =3D fb_mode;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 else
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 aoi_mode =3D NULL;
+ =A0 =A0 =A0 } else
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0aoi_mode =3D init_aoi_mode;
- =A0 =A0 =A0 pr_debug("mode used =3D %s\n", aoi_mode);
- =A0 =A0 =A0 rc =3D fb_find_mode(&info->var, info, aoi_mode, fsl_diu_mod=
e_db,
- =A0 =A0 =A0 =A0 =A0 =A0ARRAY_SIZE(fsl_diu_mode_db), &fsl_diu_default_mo=
de, default_bpp);
- =A0 =A0 =A0 switch (rc) {
- =A0 =A0 =A0 case 1:
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("using mode specified in @mode\n")=
;
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 break;
- =A0 =A0 =A0 case 2:
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("using mode specified in @mode "
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "with ignored refresh rate\=
n");
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 break;
- =A0 =A0 =A0 case 3:
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("using mode default mode\n");
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 break;
- =A0 =A0 =A0 case 4:
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("using mode from list\n");
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 break;
- =A0 =A0 =A0 default:
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("rc =3D %d\n", rc);
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("failed to find mode\n");
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -EINVAL;
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 break;
+ =A0 =A0 =A0 if (aoi_mode) {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("mode used =3D %s\n", aoi_mode);
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 rc =3D fb_find_mode(&info->var, info, aoi_m=
ode, fsl_diu_mode_db,
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ARRAY_S=
IZE(fsl_diu_mode_db),
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 &fsl_di=
u_default_mode, default_bpp);
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 switch (rc) {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 case 1:
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("using mode specif=
ied in @mode\n");
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 break;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 case 2:
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("using mode specif=
ied in @mode "
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "with ignor=
ed refresh rate\n");
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 break;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 case 3:
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("using mode defaul=
t mode\n");
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 break;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 case 4:
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("using mode from l=
ist\n");
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 break;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 default:
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("rc =3D %d\n", rc)=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 pr_debug("failed to find mo=
de\n");
quoted hunk ↗ jump to hunk
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return -EINVAL;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 break;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 }
=A0 =A0 =A0 =A0}

=A0 =A0 =A0 =A0pr_debug("xres_virtual %d\n", info->var.xres_virtual);
@@ -1521,7 +1530,7 @@ static int __devinit fsl_diu_probe(struct of_device=
 *ofdev,
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0mfbi->ad =3D (struct diu_ad *)((u32)pool.a=
d.vaddr
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0+ pool.ad.offset) + i;
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0mfbi->ad->paddr =3D pool.ad.paddr + i * si=
zeof(struct diu_ad);
- =A0 =A0 =A0 =A0 =A0 =A0 =A0 ret =3D install_fb(machine_data->fsl_diu_in=
fo[i]);
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 ret =3D install_fb(np, machine_data->fsl_di=
u_info[i]);
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (ret) {
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0dev_err(&ofdev->dev,
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"Failed to=
 register framebuffer %d\n",
--
1.6.3.3


--=20
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help