summaryrefslogtreecommitdiff
path: root/target/linux/coldfire/patches/101-kernel-2.6.38-Fix-LCD-framebuffer-driver-data-swap-bug-for-MCF5441.patch
blob: b948d1f833436f8e3f97047542df4f736e12b57c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
From 633531cdbaa3ed70a364db78fd7f8ae11da3e394 Mon Sep 17 00:00:00 2001
From: Wang Huan <wanghuan@zch06.freescale.net>
Date: Wed, 14 Sep 2011 17:40:41 +0800
Subject: [PATCH] Fix LCD framebuffer driver data swap bug for MCF54418

This patch fixed LCD framebuffer driver data swap bug
for MCF54418.

Signed-off-by: Alison Wang <b18965@freescale.com>
---
 drivers/video/fsl-ssd1289-fb.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

--- a/drivers/video/fsl-ssd1289-fb.c
+++ b/drivers/video/fsl-ssd1289-fb.c
@@ -54,8 +54,10 @@ static int ssd1289_spi_writeblock(struct
 	for (i = 0; i < SPI_LCD_BLOCK_SIZE; i++) {
 		if (i % 2 == 0)
 			spi_block_buffer[i] = 0x01;
-		else if (flag == 1)
-			spi_block_buffer[i] = *(daddr + (i >> 1));
+		else if ((flag == 1) && (i % 4 == 1))
+			spi_block_buffer[i] = *(daddr + (i >> 1) + 1);
+		else if ((flag == 1) && (i % 4 == 3))
+			spi_block_buffer[i] = *(daddr + (i >> 1) - 1);
 		else if (flag == 0)
 			spi_block_buffer[i] = 0;
 	}
@@ -331,6 +333,9 @@ static int ssd1289fbd(void *arg)
 	int i;
 	unsigned short *buf_p;
 	struct fsl_ssd1289_fb_info *fbinfo = info->par;
+#if defined(CONFIG_SSD1289_FLEXBUS_MODE)
+	unsigned short tmp;
+#endif
 #if defined(CONFIG_SSD1289_SPI_MODE)
 	unsigned char *bufspi_p;
 	int count;
@@ -344,7 +349,9 @@ static int ssd1289fbd(void *arg)
 
 #if defined(CONFIG_SSD1289_FLEXBUS_MODE)
 			for (i = 0; i < info->screen_size; i += 2) {
-				ssd1289_write(info, *buf_p, 1);
+				tmp = ((((*buf_p) & 0x00ff) << 8) |
+						(((*buf_p) & 0xff00) >> 8));
+				ssd1289_write(info, tmp, 1);
 				buf_p++;
 			}
 #elif defined(CONFIG_SSD1289_SPI_MODE)