aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoralf Trønnes <notro@tronnes.org>2015-01-20 17:40:26 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-01-20 20:17:49 -0500
commite60088575bcbaf8d71a0e9f1d44fbf136f95e2cd (patch)
tree841cd0edbd64b5550d56f70523f36f9533869b1d
parent484c60e206b03fe19129dc6ec4582142293cd876 (diff)
staging: fbtft: remove ARCH_BCM2708 optimization
ARCH_BCM2708 is not present in mainline so remove optimization. Signed-off-by: Noralf Trønnes <notro@tronnes.org> Reported-by: Paul Bolle <pebolle@tiscali.nl> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/staging/fbtft/fbtft-io.c170
1 files changed, 0 insertions, 170 deletions
diff --git a/drivers/staging/fbtft/fbtft-io.c b/drivers/staging/fbtft/fbtft-io.c
index dfa2c468454a..32155a7b2a62 100644
--- a/drivers/staging/fbtft/fbtft-io.c
+++ b/drivers/staging/fbtft/fbtft-io.c
@@ -2,9 +2,6 @@
2#include <linux/errno.h> 2#include <linux/errno.h>
3#include <linux/gpio.h> 3#include <linux/gpio.h>
4#include <linux/spi/spi.h> 4#include <linux/spi/spi.h>
5#ifdef CONFIG_ARCH_BCM2708
6#include <mach/platform.h>
7#endif
8#include "fbtft.h" 5#include "fbtft.h"
9 6
10int fbtft_write_spi(struct fbtft_par *par, void *buf, size_t len) 7int fbtft_write_spi(struct fbtft_par *par, void *buf, size_t len)
@@ -129,171 +126,6 @@ int fbtft_read_spi(struct fbtft_par *par, void *buf, size_t len)
129} 126}
130EXPORT_SYMBOL(fbtft_read_spi); 127EXPORT_SYMBOL(fbtft_read_spi);
131 128
132
133#ifdef CONFIG_ARCH_BCM2708
134
135/*
136 * Raspberry Pi
137 * - writing directly to the registers is 40-50% faster than
138 * optimized use of gpiolib
139 */
140
141#define GPIOSET(no, ishigh) \
142do { \
143 if (ishigh) \
144 set |= (1 << (no)); \
145 else \
146 reset |= (1 << (no)); \
147} while (0)
148
149int fbtft_write_gpio8_wr(struct fbtft_par *par, void *buf, size_t len)
150{
151 unsigned int set = 0;
152 unsigned int reset = 0;
153 u8 data;
154
155 fbtft_par_dbg_hex(DEBUG_WRITE, par, par->info->device, u8, buf, len,
156 "%s(len=%d): ", __func__, len);
157
158 while (len--) {
159 data = *(u8 *) buf;
160 buf++;
161
162 /* Set data */
163 GPIOSET(par->gpio.db[0], (data&0x01));
164 GPIOSET(par->gpio.db[1], (data&0x02));
165 GPIOSET(par->gpio.db[2], (data&0x04));
166 GPIOSET(par->gpio.db[3], (data&0x08));
167 GPIOSET(par->gpio.db[4], (data&0x10));
168 GPIOSET(par->gpio.db[5], (data&0x20));
169 GPIOSET(par->gpio.db[6], (data&0x40));
170 GPIOSET(par->gpio.db[7], (data&0x80));
171 writel(set, __io_address(GPIO_BASE+0x1C));
172 writel(reset, __io_address(GPIO_BASE+0x28));
173
174 /* Pulse /WR low */
175 writel((1<<par->gpio.wr), __io_address(GPIO_BASE+0x28));
176 writel(0, __io_address(GPIO_BASE+0x28)); /* used as a delay */
177 writel((1<<par->gpio.wr), __io_address(GPIO_BASE+0x1C));
178
179 set = 0;
180 reset = 0;
181 }
182
183 return 0;
184}
185EXPORT_SYMBOL(fbtft_write_gpio8_wr);
186
187int fbtft_write_gpio16_wr(struct fbtft_par *par, void *buf, size_t len)
188{
189 unsigned int set = 0;
190 unsigned int reset = 0;
191 u16 data;
192
193 fbtft_par_dbg_hex(DEBUG_WRITE, par, par->info->device, u8, buf, len,
194 "%s(len=%d): ", __func__, len);
195
196 while (len) {
197 len -= 2;
198 data = *(u16 *) buf;
199 buf += 2;
200
201 /* Start writing by pulling down /WR */
202 gpio_set_value(par->gpio.wr, 0);
203
204 /* Set data */
205 GPIOSET(par->gpio.db[0], (data&0x0001));
206 GPIOSET(par->gpio.db[1], (data&0x0002));
207 GPIOSET(par->gpio.db[2], (data&0x0004));
208 GPIOSET(par->gpio.db[3], (data&0x0008));
209 GPIOSET(par->gpio.db[4], (data&0x0010));
210 GPIOSET(par->gpio.db[5], (data&0x0020));
211 GPIOSET(par->gpio.db[6], (data&0x0040));
212 GPIOSET(par->gpio.db[7], (data&0x0080));
213
214 GPIOSET(par->gpio.db[8], (data&0x0100));
215 GPIOSET(par->gpio.db[9], (data&0x0200));
216 GPIOSET(par->gpio.db[10], (data&0x0400));
217 GPIOSET(par->gpio.db[11], (data&0x0800));
218 GPIOSET(par->gpio.db[12], (data&0x1000));
219 GPIOSET(par->gpio.db[13], (data&0x2000));
220 GPIOSET(par->gpio.db[14], (data&0x4000));
221 GPIOSET(par->gpio.db[15], (data&0x8000));
222
223 writel(set, __io_address(GPIO_BASE+0x1C));
224 writel(reset, __io_address(GPIO_BASE+0x28));
225
226 /* Pullup /WR */
227 gpio_set_value(par->gpio.wr, 1);
228
229 set = 0;
230 reset = 0;
231 }
232
233 return 0;
234}
235EXPORT_SYMBOL(fbtft_write_gpio16_wr);
236
237int fbtft_write_gpio16_wr_latched(struct fbtft_par *par, void *buf, size_t len)
238{
239 unsigned int set = 0;
240 unsigned int reset = 0;
241 u16 data;
242
243 fbtft_par_dbg_hex(DEBUG_WRITE, par, par->info->device, u8, buf, len,
244 "%s(len=%d): ", __func__, len);
245
246 while (len) {
247 len -= 2;
248 data = *(u16 *) buf;
249 buf += 2;
250
251 /* Start writing by pulling down /WR */
252 gpio_set_value(par->gpio.wr, 0);
253
254 /* Low byte */
255 GPIOSET(par->gpio.db[0], (data&0x0001));
256 GPIOSET(par->gpio.db[1], (data&0x0002));
257 GPIOSET(par->gpio.db[2], (data&0x0004));
258 GPIOSET(par->gpio.db[3], (data&0x0008));
259 GPIOSET(par->gpio.db[4], (data&0x0010));
260 GPIOSET(par->gpio.db[5], (data&0x0020));
261 GPIOSET(par->gpio.db[6], (data&0x0040));
262 GPIOSET(par->gpio.db[7], (data&0x0080));
263 writel(set, __io_address(GPIO_BASE+0x1C));
264 writel(reset, __io_address(GPIO_BASE+0x28));
265
266 /* Pulse 'latch' high */
267 gpio_set_value(par->gpio.latch, 1);
268 gpio_set_value(par->gpio.latch, 0);
269
270 /* High byte */
271 GPIOSET(par->gpio.db[0], (data&0x0100));
272 GPIOSET(par->gpio.db[1], (data&0x0200));
273 GPIOSET(par->gpio.db[2], (data&0x0400));
274 GPIOSET(par->gpio.db[3], (data&0x0800));
275 GPIOSET(par->gpio.db[4], (data&0x1000));
276 GPIOSET(par->gpio.db[5], (data&0x2000));
277 GPIOSET(par->gpio.db[6], (data&0x4000));
278 GPIOSET(par->gpio.db[7], (data&0x8000));
279 writel(set, __io_address(GPIO_BASE+0x1C));
280 writel(reset, __io_address(GPIO_BASE+0x28));
281
282 /* Pullup /WR */
283 gpio_set_value(par->gpio.wr, 1);
284
285 set = 0;
286 reset = 0;
287 }
288
289 return 0;
290}
291EXPORT_SYMBOL(fbtft_write_gpio16_wr_latched);
292
293#undef GPIOSET
294
295#else
296
297/* 129/*
298 * Optimized use of gpiolib is twice as fast as no optimization 130 * Optimized use of gpiolib is twice as fast as no optimization
299 * only one driver can use the optimized version at a time 131 * only one driver can use the optimized version at a time
@@ -405,5 +237,3 @@ int fbtft_write_gpio16_wr_latched(struct fbtft_par *par, void *buf, size_t len)
405 return -1; 237 return -1;
406} 238}
407EXPORT_SYMBOL(fbtft_write_gpio16_wr_latched); 239EXPORT_SYMBOL(fbtft_write_gpio16_wr_latched);
408
409#endif /* CONFIG_ARCH_BCM2708 */