Thread (4 messages) flat view 4 messages, 3 authors, 2009-06-30

Re: [PATCH v3] Frame Buffer driver for TI DA8xx/OMAP-L1xx

From: Rajashekhara, Sudhakar <hidden>
Date: 2009-06-29 14:25:03

Krzysztof,
-----Original Message-----
From: Krzysztof Helt [mailto:krzysztof.h1@poczta.fm]
Sent: Friday, June 26, 2009 10:49 AM
To: Rajashekhara, Sudhakar
Cc: linux-fbdev-devel@lists.sourceforge.net; davinci-linux-open-
source@linux.davincidsp.com; Steve Chen; Pavel Kiryukhin
Subject: Re: [Linux-fbdev-devel] [PATCH v3] Frame Buffer driver for TI
DA8xx/OMAP-L1xx

On Wed, 24 Jun 2009 06:58:21 -0400
"Rajashekhara, Sudhakar" [off-list ref] wrote:
quoted
Adds LCD controller (LCDC) driver for TI's DA8xx/OMAP-L1xx architecture.
LCDC specifications can be found at http://www.ti.com/litv/pdf/sprufm0a.

LCDC on DA8xx consists of two independent controllers, the Raster Controller
and the LCD Interface Display Driver (LIDD) controller. LIDD further supports
character and graphic displays.

This patch adds support for the graphic display (Sharp LQ035Q3DG01) found on
the DA830 based EVM. The EVM details can be found at:
http://support.spectrumdigital.com/boards/dskda830/revc/.

Signed-off-by: Sudhakar Rajashekhara <redacted>
Signed-off-by: Pavel Kiryukhin <redacted>
Signed-off-by: Steve Chen <redacted>
---
 Since the previous version, error paths in probing function has been
 corected, removed set_par() function and added code in fb_setcolreg()
 function for TRUECOLOR mode.

 drivers/video/Kconfig    |   11 +
 drivers/video/Makefile   |    1 +
 drivers/video/da8xx-fb.c |  887 ++++++++++++++++++++++++++++++++++++++++++++++
 include/video/da8xx-fb.h |  106 ++++++
 4 files changed, 1005 insertions(+), 0 deletions(-)
 create mode 100644 drivers/video/da8xx-fb.c
 create mode 100644 include/video/da8xx-fb.h
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
new file mode 100644
index 0000000..a41ae62
--- /dev/null
+++ b/drivers/video/da8xx-fb.c
@@ -0,0 +1,887 @@
(fast forward)
quoted
+
+static int fb_setcolreg(unsigned regno, unsigned red, unsigned green,
+			      unsigned blue, unsigned transp,
+			      struct fb_info *info)
+{
+	struct da8xx_fb_par *par = info->par;
+	unsigned short *palette = (unsigned short *)par->v_palette_base;
+	u_short pal;
+
+	if (regno > 255)
+		return 1;
+
+	if (info->fix.visual == FB_VISUAL_DIRECTCOLOR)
+		return 1;
+
+	if (info->var.bits_per_pixel == 8) {
+		red >>= 8;
+		green >>= 8;
+		blue >>= 8;
This function is still incorrect. Each color component value passed to the
function is 16 bit.

I assume you have 16-bit word for each palette entry and you want
to pack 4-bit colors like this 0RGB. The shift should be

red >>= 12;

so you reduced the component length to 4 bits then

red <<= 8;

so it is put on correct position in the palette entry.
You fold these two shifts so it is

red >>= 4;

The same logic should be used for all color components.
quoted
+
+		pal = (red & 0x0f00);
+		pal |= (green & 0x00f0);
+		pal |= (blue & 0x000f);
+
+		palette[regno] = pal;
+
+	} else if ((info->var.bits_per_pixel == 16) && regno < 16) {
+		memset(palette, 0, 16);
I do not understand what is achieved by zeroing the palette area.

This is what you should use:

red >>= (16 - info->var.red.len)
red <<= info->var.red.offset;

The same logic should be used for all color components.
Then pack them into palette register:

par->pseudo_palette[ regno ] = red | green | blue;

The true color modes do not use the palette entry. I assume
that the value below forces controller to use true color mode.
quoted
+		palette[0] = 0x4000;
+	}
+
+	return 0;
+}
+
Regards,
Krzysztof
I'll test the driver with the modifications suggested by you
and will submit the updated version of the patch tomorrow.

Thanks, Sudhakar



------------------------------------------------------------------------------
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help