summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0043-st7735fb-Working-WIP-changes-to-make-DMA-safe-and-ad.patch143
-rw-r--r--recipes-kernel/linux/linux-ti33x-psp_3.2.bb3
2 files changed, 145 insertions, 1 deletions
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0043-st7735fb-Working-WIP-changes-to-make-DMA-safe-and-ad.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0043-st7735fb-Working-WIP-changes-to-make-DMA-safe-and-ad.patch
new file mode 100644
index 00000000..5e4b6b35
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0043-st7735fb-Working-WIP-changes-to-make-DMA-safe-and-ad.patch
@@ -0,0 +1,143 @@
1From 783a66842e956b2eb9d7dc379848fbf79a370bc8 Mon Sep 17 00:00:00 2001
2From: Matt Porter <mporter@ti.com>
3Date: Wed, 28 Mar 2012 23:35:44 -0400
4Subject: [PATCH] st7735fb: Working WIP changes to make DMA safe and add
5 endian fix
6
7This removes the "from the stack" allocation of 1 byte buffers
8that was a temporary thing and isn't dma safe. Now vmallocs the
9user buffer to be deferred I/O safe and kmallocs a swapped
10shadow buffer to support the byte swabbing hack to fix userspace
11limitations.
12
13The buffer allocation and endian hack code needs some serious
14cleanup as on big endian systems if would fail miserably atm.
15However, the LE path works for the moment so people can do something
16with the driver.
17
18Signed-off-by: Matt Porter <mporter@ti.com>
19---
20 drivers/video/st7735fb.c | 49 ++++++++++++++++++++++++++++++----------------
21 include/video/st7735fb.h | 2 +
22 2 files changed, 34 insertions(+), 17 deletions(-)
23
24diff --git a/drivers/video/st7735fb.c b/drivers/video/st7735fb.c
25index 500cc88..0931ca2 100644
26--- a/drivers/video/st7735fb.c
27+++ b/drivers/video/st7735fb.c
28@@ -145,11 +145,9 @@ static struct fb_var_screeninfo st7735fb_var __devinitdata = {
29
30 static int st7735_write(struct st7735fb_par *par, u8 data)
31 {
32- u8 txbuf[2]; /* allocation from stack must go */
33+ par->buf[0] = data;
34
35- txbuf[0] = data;
36-
37- return spi_write(par->spi, &txbuf[0], 1);
38+ return spi_write(par->spi, par->buf, 1);
39 }
40
41 static void st7735_write_data(struct st7735fb_par *par, u8 data)
42@@ -243,16 +241,17 @@ static void st7735_reset(struct st7735fb_par *par)
43 static void st7735fb_update_display(struct st7735fb_par *par)
44 {
45 int ret = 0;
46- u8 *vmem = par->info->screen_base;
47-
48- /*
49- TODO:
50- Allow a subset of pages to be passed in
51- (for deferred I/O). Check pages against
52- pan display settings to see if they
53- should be updated.
54- */
55- /* For now, just write the full 40KiB on each update */
56+ u16 *vmem;
57+#ifdef __LITTLE_ENDIAN
58+ int i;
59+ u16 *vmem16 = (u16 *)par->info->screen_base;
60+ vmem = par->ssbuf;
61+
62+ for (i=0; i<WIDTH*HEIGHT*BPP/8/2; i++)
63+ vmem[i] = swab16(vmem16[i]);
64+#else
65+ vmem = (u16 *)par->info->screen_base;
66+#endif
67
68 /* Set row/column data window */
69 st7735_set_addr_win(par, 0, 0, WIDTH-1, HEIGHT-1);
70@@ -261,7 +260,7 @@ static void st7735fb_update_display(struct st7735fb_par *par)
71 st7735_write_cmd(par, ST7735_RAMWR);
72
73 /* Blast framebuffer to ST7735 internal display RAM */
74- ret = st7735_write_data_buf(par, vmem, WIDTH*HEIGHT*BPP/8);
75+ ret = st7735_write_data_buf(par, (u8 *)vmem, WIDTH*HEIGHT*BPP/8);
76 if (ret < 0)
77 pr_err("%s: spi_write failed to update display buffer\n",
78 par->info->fix.id);
79@@ -369,7 +368,7 @@ static struct fb_ops st7735fb_ops = {
80 };
81
82 static struct fb_deferred_io st7735fb_defio = {
83- .delay = HZ,
84+ .delay = HZ/20,
85 .deferred_io = st7735fb_deferred_io,
86 };
87
88@@ -395,7 +394,11 @@ static int __devinit st7735fb_probe (struct spi_device *spi)
89 return -EINVAL;
90 }
91
92- vmem = vzalloc(vmem_size);
93+#ifdef __LITTLE_ENDIAN
94+ vmem = (u8 *)vmalloc(vmem_size);
95+#else
96+ vmem = (u8 *)kmalloc(vmem_size, GFP_KERNEL);
97+#endif
98 if (!vmem)
99 return retval;
100
101@@ -431,6 +434,14 @@ static int __devinit st7735fb_probe (struct spi_device *spi)
102 par->spi = spi;
103 par->rst = pdata->rst_gpio;
104 par->dc = pdata->dc_gpio;
105+ par->buf = kmalloc(1, GFP_KERNEL);
106+
107+#ifdef __LITTLE_ENDIAN
108+ /* Allocated swapped shadow buffer */
109+ par->ssbuf = kmalloc(vmem_size, GFP_KERNEL);
110+ if (!par->ssbuf)
111+ return retval;
112+#endif
113
114 retval = register_framebuffer(info);
115 if (retval < 0)
116@@ -457,7 +468,11 @@ fbreg_fail:
117 framebuffer_release(info);
118
119 fballoc_fail:
120+#ifdef __LITTLE_ENDIAN
121 vfree(vmem);
122+#else
123+ kfree(vmem);
124+#endif
125
126 return retval;
127 }
128diff --git a/include/video/st7735fb.h b/include/video/st7735fb.h
129index 250f036..e99cd05 100644
130--- a/include/video/st7735fb.h
131+++ b/include/video/st7735fb.h
132@@ -36,6 +36,8 @@ struct st7735fb_par {
133 struct fb_info *info;
134 int rst;
135 int dc;
136+ u16 *ssbuf;
137+ u8 *buf;
138 };
139
140 struct st7735fb_platform_data {
141--
1421.7.7.6
143
diff --git a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
index 05772b4a..bb26c70f 100644
--- a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
+++ b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
@@ -12,7 +12,7 @@ MULTI_CONFIG_BASE_SUFFIX = ""
12 12
13BRANCH = "v3.2-staging" 13BRANCH = "v3.2-staging"
14SRCREV = "720e07b4c1f687b61b147b31c698cb6816d72f01" 14SRCREV = "720e07b4c1f687b61b147b31c698cb6816d72f01"
15MACHINE_KERNEL_PR_append = "i+gitr${SRCREV}" 15MACHINE_KERNEL_PR_append = "j+gitr${SRCREV}"
16 16
17COMPATIBLE_MACHINE = "(ti33x)" 17COMPATIBLE_MACHINE = "(ti33x)"
18 18
@@ -967,5 +967,6 @@ PATCHES_OVER_PSP = " \
967 file://beaglebone/0038-board-am335xevm.c-Beaglebone-expose-all-pwms-through.patch \ 967 file://beaglebone/0038-board-am335xevm.c-Beaglebone-expose-all-pwms-through.patch \
968 file://beaglebone/0039-ARM-OMAP-Mux-Fixed-debugfs-mux-output-always-reporti.patch \ 968 file://beaglebone/0039-ARM-OMAP-Mux-Fixed-debugfs-mux-output-always-reporti.patch \
969 file://beaglebone/0040-beaglebone-export-SPI2-as-spidev-when-no-capes-are-u.patch \ 969 file://beaglebone/0040-beaglebone-export-SPI2-as-spidev-when-no-capes-are-u.patch \
970 file://beaglebone/0043-st7735fb-Working-WIP-changes-to-make-DMA-safe-and-ad.patch \
970 file://beaglebone/0001-arm-boot-compressed-default-asm-arch-to-armv7-a.patch \ 971 file://beaglebone/0001-arm-boot-compressed-default-asm-arch-to-armv7-a.patch \
971" 972"