Blame view

arch/arm/mach-pxa/lpd270.c 11.7 KB
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  /*
   * linux/arch/arm/mach-pxa/lpd270.c
   *
   * Support for the LogicPD PXA270 Card Engine.
   * Derived from the mainstone code, which carries these notices:
   *
   * Author:	Nicolas Pitre
   * Created:	Nov 05, 2002
   * Copyright:	MontaVista Software Inc.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
2f8163baa   Russell King   ARM: gpio: conver...
15
  #include <linux/gpio.h>
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
16
17
  #include <linux/init.h>
  #include <linux/platform_device.h>
2eaa03b5b   Rafael J. Wysocki   ARM / PXA: Use st...
18
  #include <linux/syscore_ops.h>
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
19
20
21
22
23
24
25
  #include <linux/interrupt.h>
  #include <linux/sched.h>
  #include <linux/bitops.h>
  #include <linux/fb.h>
  #include <linux/ioport.h>
  #include <linux/mtd/mtd.h>
  #include <linux/mtd/partitions.h>
4a7307194   Russell King   [ARM] pxa: make L...
26
  #include <linux/pwm_backlight.h>
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
27
28
29
30
31
  
  #include <asm/types.h>
  #include <asm/setup.h>
  #include <asm/memory.h>
  #include <asm/mach-types.h>
a09e64fbc   Russell King   [ARM] Move includ...
32
  #include <mach/hardware.h>
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
33
34
35
36
37
38
39
  #include <asm/irq.h>
  #include <asm/sizes.h>
  
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/mach/irq.h>
  #include <asm/mach/flash.h>
51c62982a   Eric Miao   [ARM] pxa: introd...
40
  #include <mach/pxa27x.h>
a09e64fbc   Russell King   [ARM] Move includ...
41
42
43
44
45
46
  #include <mach/lpd270.h>
  #include <mach/audio.h>
  #include <mach/pxafb.h>
  #include <mach/mmc.h>
  #include <mach/irda.h>
  #include <mach/ohci.h>
ad68bb9f7   Marek Vasut   ARM: pxa: Access ...
47
  #include <mach/smemc.h>
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
48
49
  
  #include "generic.h"
46c41e62a   Russell King   [ARM] pxa: move p...
50
  #include "devices.h"
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
51

fd90ff200   Eric Miao   [ARM] pxa/lpd270:...
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  static unsigned long lpd270_pin_config[] __initdata = {
  	/* Chip Selects */
  	GPIO15_nCS_1,	/* Mainboard Flash */
  	GPIO78_nCS_2,	/* CPLD + Ethernet */
  
  	/* LCD - 16bpp Active TFT */
  	GPIO58_LCD_LDD_0,
  	GPIO59_LCD_LDD_1,
  	GPIO60_LCD_LDD_2,
  	GPIO61_LCD_LDD_3,
  	GPIO62_LCD_LDD_4,
  	GPIO63_LCD_LDD_5,
  	GPIO64_LCD_LDD_6,
  	GPIO65_LCD_LDD_7,
  	GPIO66_LCD_LDD_8,
  	GPIO67_LCD_LDD_9,
  	GPIO68_LCD_LDD_10,
  	GPIO69_LCD_LDD_11,
  	GPIO70_LCD_LDD_12,
  	GPIO71_LCD_LDD_13,
  	GPIO72_LCD_LDD_14,
  	GPIO73_LCD_LDD_15,
  	GPIO74_LCD_FCLK,
  	GPIO75_LCD_LCLK,
  	GPIO76_LCD_PCLK,
  	GPIO77_LCD_BIAS,
  	GPIO16_PWM0_OUT,	/* Backlight */
  
  	/* USB Host */
  	GPIO88_USBH1_PWR,
  	GPIO89_USBH1_PEN,
  
  	/* AC97 */
c11b6a420   Eric Miao   [ARM] pxa: add th...
85
86
87
88
  	GPIO28_AC97_BITCLK,
  	GPIO29_AC97_SDATA_IN_0,
  	GPIO30_AC97_SDATA_OUT,
  	GPIO31_AC97_SYNC,
fd90ff200   Eric Miao   [ARM] pxa/lpd270:...
89
90
91
92
  	GPIO45_AC97_SYSCLK,
  
  	GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH,
  };
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
93
94
  
  static unsigned int lpd270_irq_enabled;
a3f4c927d   Lennert Buytenhek   ARM: PXA SoCs: ir...
95
  static void lpd270_mask_irq(struct irq_data *d)
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
96
  {
a3f4c927d   Lennert Buytenhek   ARM: PXA SoCs: ir...
97
  	int lpd270_irq = d->irq - LPD270_IRQ(0);
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
98
99
100
101
102
103
  
  	__raw_writew(~(1 << lpd270_irq), LPD270_INT_STATUS);
  
  	lpd270_irq_enabled &= ~(1 << lpd270_irq);
  	__raw_writew(lpd270_irq_enabled, LPD270_INT_MASK);
  }
a3f4c927d   Lennert Buytenhek   ARM: PXA SoCs: ir...
104
  static void lpd270_unmask_irq(struct irq_data *d)
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
105
  {
a3f4c927d   Lennert Buytenhek   ARM: PXA SoCs: ir...
106
  	int lpd270_irq = d->irq - LPD270_IRQ(0);
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
107
108
109
110
  
  	lpd270_irq_enabled |= 1 << lpd270_irq;
  	__raw_writew(lpd270_irq_enabled, LPD270_INT_MASK);
  }
38c677cb9   David Brownell   [ARM] 3739/1: gen...
111
112
  static struct irq_chip lpd270_irq_chip = {
  	.name		= "CPLD",
a3f4c927d   Lennert Buytenhek   ARM: PXA SoCs: ir...
113
114
115
  	.irq_ack	= lpd270_mask_irq,
  	.irq_mask	= lpd270_mask_irq,
  	.irq_unmask	= lpd270_unmask_irq,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
116
  };
10dd5ce28   Russell King   [ARM] Remove comp...
117
  static void lpd270_irq_handler(unsigned int irq, struct irq_desc *desc)
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
118
119
120
121
122
  {
  	unsigned long pending;
  
  	pending = __raw_readw(LPD270_INT_STATUS) & lpd270_irq_enabled;
  	do {
a3f4c927d   Lennert Buytenhek   ARM: PXA SoCs: ir...
123
124
  		/* clear useless edge notification */
  		desc->irq_data.chip->irq_ack(&desc->irq_data);
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
125
126
  		if (likely(pending)) {
  			irq = LPD270_IRQ(0) + __ffs(pending);
d8aa0251f   Dmitry Eremin-Solenikov   [ARM] 5298/1: Dro...
127
  			generic_handle_irq(irq);
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
128
129
130
131
132
133
134
135
136
137
  
  			pending = __raw_readw(LPD270_INT_STATUS) &
  						lpd270_irq_enabled;
  		}
  	} while (pending);
  }
  
  static void __init lpd270_init_irq(void)
  {
  	int irq;
cd49104d9   Eric Miao   [ARM] 4450/1: pxa...
138
  	pxa27x_init_irq();
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
139
140
141
142
143
144
  
  	__raw_writew(0, LPD270_INT_MASK);
  	__raw_writew(0, LPD270_INT_STATUS);
  
  	/* setup extra LogicPD PXA270 irqs */
  	for (irq = LPD270_IRQ(2); irq <= LPD270_IRQ(4); irq++) {
f38c02f3b   Thomas Gleixner   arm: Fold irq_set...
145
146
  		irq_set_chip_and_handler(irq, &lpd270_irq_chip,
  					 handle_level_irq);
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
147
148
  		set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
  	}
6384fdadb   Haojian Zhuang   ARM: pxa: rename ...
149
150
  	irq_set_chained_handler(PXA_GPIO_TO_IRQ(0), lpd270_irq_handler);
  	irq_set_irq_type(PXA_GPIO_TO_IRQ(0), IRQ_TYPE_EDGE_FALLING);
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
151
152
153
154
  }
  
  
  #ifdef CONFIG_PM
2eaa03b5b   Rafael J. Wysocki   ARM / PXA: Use st...
155
  static void lpd270_irq_resume(void)
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
156
157
  {
  	__raw_writew(lpd270_irq_enabled, LPD270_INT_MASK);
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
158
  }
2eaa03b5b   Rafael J. Wysocki   ARM / PXA: Use st...
159
  static struct syscore_ops lpd270_irq_syscore_ops = {
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
160
161
  	.resume = lpd270_irq_resume,
  };
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
162
163
  static int __init lpd270_irq_device_init(void)
  {
720046de2   Russell King   [ARM] pxa: don't ...
164
  	if (machine_is_logicpd_pxa270()) {
2eaa03b5b   Rafael J. Wysocki   ARM / PXA: Use st...
165
166
  		register_syscore_ops(&lpd270_irq_syscore_ops);
  		return 0;
720046de2   Russell King   [ARM] pxa: don't ...
167
  	}
2eaa03b5b   Rafael J. Wysocki   ARM / PXA: Use st...
168
  	return -ENODEV;
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
  }
  
  device_initcall(lpd270_irq_device_init);
  #endif
  
  
  static struct resource smc91x_resources[] = {
  	[0] = {
  		.start	= LPD270_ETH_PHYS,
  		.end	= (LPD270_ETH_PHYS + 0xfffff),
  		.flags	= IORESOURCE_MEM,
  	},
  	[1] = {
  		.start	= LPD270_ETHERNET_IRQ,
  		.end	= LPD270_ETHERNET_IRQ,
  		.flags	= IORESOURCE_IRQ,
  	},
  };
  
  static struct platform_device smc91x_device = {
  	.name		= "smc91x",
  	.id		= 0,
  	.num_resources	= ARRAY_SIZE(smc91x_resources),
  	.resource	= smc91x_resources,
  };
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
  static struct resource lpd270_flash_resources[] = {
  	[0] = {
  		.start	= PXA_CS0_PHYS,
  		.end	= PXA_CS0_PHYS + SZ_64M - 1,
  		.flags	= IORESOURCE_MEM,
  	},
  	[1] = {
  		.start	= PXA_CS1_PHYS,
  		.end	= PXA_CS1_PHYS + SZ_64M - 1,
  		.flags	= IORESOURCE_MEM,
  	},
  };
  
  static struct mtd_partition lpd270_flash0_partitions[] = {
  	{
  		.name =		"Bootloader",
  		.size =		0x00040000,
  		.offset =	0,
  		.mask_flags =	MTD_WRITEABLE  /* force read-only */
  	}, {
  		.name =		"Kernel",
  		.size =		0x00400000,
  		.offset =	0x00040000,
  	}, {
  		.name =		"Filesystem",
  		.size =		MTDPART_SIZ_FULL,
  		.offset =	0x00440000
  	},
  };
  
  static struct flash_platform_data lpd270_flash_data[2] = {
  	{
  		.name		= "processor-flash",
  		.map_name	= "cfi_probe",
  		.parts		= lpd270_flash0_partitions,
  		.nr_parts	= ARRAY_SIZE(lpd270_flash0_partitions),
  	}, {
  		.name		= "mainboard-flash",
  		.map_name	= "cfi_probe",
  		.parts		= NULL,
  		.nr_parts	= 0,
  	}
  };
  
  static struct platform_device lpd270_flash_device[2] = {
  	{
  		.name		= "pxa2xx-flash",
  		.id		= 0,
  		.dev = {
  			.platform_data	= &lpd270_flash_data[0],
  		},
  		.resource	= &lpd270_flash_resources[0],
  		.num_resources	= 1,
  	}, {
  		.name		= "pxa2xx-flash",
  		.id		= 1,
  		.dev = {
  			.platform_data	= &lpd270_flash_data[1],
  		},
  		.resource	= &lpd270_flash_resources[1],
  		.num_resources	= 1,
  	},
  };
4a7307194   Russell King   [ARM] pxa: make L...
257
258
259
260
261
262
263
264
265
266
267
268
269
270
  static struct platform_pwm_backlight_data lpd270_backlight_data = {
  	.pwm_id		= 0,
  	.max_brightness	= 1,
  	.dft_brightness	= 1,
  	.pwm_period_ns	= 78770,
  };
  
  static struct platform_device lpd270_backlight_device = {
  	.name		= "pwm-backlight",
  	.dev		= {
  		.parent	= &pxa27x_device_pwm0.dev,
  		.platform_data = &lpd270_backlight_data,
  	},
  };
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
271
272
  
  /* 5.7" TFT QVGA (LoLo display number 1) */
d14b272bc   Richard Purdie   [ARM] 3848/1: pxa...
273
  static struct pxafb_mode_info sharp_lq057q3dc02_mode = {
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
274
275
276
  	.pixclock		= 150000,
  	.xres			= 320,
  	.yres			= 240,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
277
  	.bpp			= 16,
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
278
279
280
281
  	.hsync_len		= 0x14,
  	.left_margin		= 0x28,
  	.right_margin		= 0x0a,
  	.vsync_len		= 0x02,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
282
283
  	.upper_margin		= 0x08,
  	.lower_margin		= 0x14,
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
284
  	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
d14b272bc   Richard Purdie   [ARM] 3848/1: pxa...
285
286
287
288
289
  };
  
  static struct pxafb_mach_info sharp_lq057q3dc02 = {
  	.modes			= &sharp_lq057q3dc02_mode,
  	.num_modes		= 1,
0219e8358   Eric Miao   [ARM] pxa/lpd270:...
290
291
  	.lcd_conn		= LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL |
  				  LCD_ALTERNATE_MAPPING,
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
292
293
294
  };
  
  /* 12.1" TFT SVGA (LoLo display number 2) */
d14b272bc   Richard Purdie   [ARM] 3848/1: pxa...
295
  static struct pxafb_mode_info sharp_lq121s1dg31_mode = {
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
296
297
298
299
300
301
302
303
304
305
306
  	.pixclock		= 50000,
  	.xres			= 800,
  	.yres			= 600,
  	.bpp			= 16,
  	.hsync_len		= 0x05,
  	.left_margin		= 0x52,
  	.right_margin		= 0x05,
  	.vsync_len		= 0x04,
  	.upper_margin		= 0x14,
  	.lower_margin		= 0x0a,
  	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
d14b272bc   Richard Purdie   [ARM] 3848/1: pxa...
307
308
309
310
311
  };
  
  static struct pxafb_mach_info sharp_lq121s1dg31 = {
  	.modes			= &sharp_lq121s1dg31_mode,
  	.num_modes		= 1,
0219e8358   Eric Miao   [ARM] pxa/lpd270:...
312
313
  	.lcd_conn		= LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL |
  				  LCD_ALTERNATE_MAPPING,
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
314
315
316
  };
  
  /* 3.6" TFT QVGA (LoLo display number 3) */
d14b272bc   Richard Purdie   [ARM] 3848/1: pxa...
317
  static struct pxafb_mode_info sharp_lq036q1da01_mode = {
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
318
319
320
321
322
323
324
325
326
327
328
  	.pixclock		= 150000,
  	.xres			= 320,
  	.yres			= 240,
  	.bpp			= 16,
  	.hsync_len		= 0x0e,
  	.left_margin		= 0x04,
  	.right_margin		= 0x0a,
  	.vsync_len		= 0x03,
  	.upper_margin		= 0x03,
  	.lower_margin		= 0x03,
  	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
d14b272bc   Richard Purdie   [ARM] 3848/1: pxa...
329
330
331
332
333
  };
  
  static struct pxafb_mach_info sharp_lq036q1da01 = {
  	.modes			= &sharp_lq036q1da01_mode,
  	.num_modes		= 1,
0219e8358   Eric Miao   [ARM] pxa/lpd270:...
334
335
  	.lcd_conn		= LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL |
  				  LCD_ALTERNATE_MAPPING,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
336
337
338
  };
  
  /* 6.4" TFT VGA (LoLo display number 5) */
d14b272bc   Richard Purdie   [ARM] 3848/1: pxa...
339
  static struct pxafb_mode_info sharp_lq64d343_mode = {
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
340
  	.pixclock		= 25000,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
341
342
343
  	.xres			= 640,
  	.yres			= 480,
  	.bpp			= 16,
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
344
  	.hsync_len		= 0x31,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
345
346
  	.left_margin		= 0x89,
  	.right_margin		= 0x19,
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
347
  	.vsync_len		= 0x12,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
348
  	.upper_margin		= 0x22,
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
349
  	.lower_margin		= 0x00,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
350
  	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
d14b272bc   Richard Purdie   [ARM] 3848/1: pxa...
351
352
353
354
355
  };
  
  static struct pxafb_mach_info sharp_lq64d343 = {
  	.modes			= &sharp_lq64d343_mode,
  	.num_modes		= 1,
0219e8358   Eric Miao   [ARM] pxa/lpd270:...
356
357
  	.lcd_conn		= LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL |
  				  LCD_ALTERNATE_MAPPING,
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
358
359
360
  };
  
  /* 10.4" TFT VGA (LoLo display number 7) */
d14b272bc   Richard Purdie   [ARM] 3848/1: pxa...
361
  static struct pxafb_mode_info sharp_lq10d368_mode = {
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
362
363
364
365
366
367
368
369
370
371
372
  	.pixclock		= 25000,
  	.xres			= 640,
  	.yres			= 480,
  	.bpp			= 16,
  	.hsync_len		= 0x31,
  	.left_margin		= 0x89,
  	.right_margin		= 0x19,
  	.vsync_len		= 0x12,
  	.upper_margin		= 0x22,
  	.lower_margin		= 0x00,
  	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
d14b272bc   Richard Purdie   [ARM] 3848/1: pxa...
373
374
375
376
377
  };
  
  static struct pxafb_mach_info sharp_lq10d368 = {
  	.modes			= &sharp_lq10d368_mode,
  	.num_modes		= 1,
0219e8358   Eric Miao   [ARM] pxa/lpd270:...
378
379
  	.lcd_conn		= LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL |
  				  LCD_ALTERNATE_MAPPING,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
380
381
382
  };
  
  /* 3.5" TFT QVGA (LoLo display number 8) */
d14b272bc   Richard Purdie   [ARM] 3848/1: pxa...
383
  static struct pxafb_mode_info sharp_lq035q7db02_20_mode = {
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
384
  	.pixclock		= 150000,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
385
386
387
  	.xres			= 240,
  	.yres			= 320,
  	.bpp			= 16,
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
388
389
390
391
  	.hsync_len		= 0x0e,
  	.left_margin		= 0x0a,
  	.right_margin		= 0x0a,
  	.vsync_len		= 0x03,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
392
393
  	.upper_margin		= 0x05,
  	.lower_margin		= 0x14,
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
394
  	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
d14b272bc   Richard Purdie   [ARM] 3848/1: pxa...
395
396
397
398
399
  };
  
  static struct pxafb_mach_info sharp_lq035q7db02_20 = {
  	.modes			= &sharp_lq035q7db02_20_mode,
  	.num_modes		= 1,
0219e8358   Eric Miao   [ARM] pxa/lpd270:...
400
401
  	.lcd_conn		= LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL |
  				  LCD_ALTERNATE_MAPPING,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
402
  };
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
  static struct pxafb_mach_info *lpd270_lcd_to_use;
  
  static int __init lpd270_set_lcd(char *str)
  {
  	if (!strnicmp(str, "lq057q3dc02", 11)) {
  		lpd270_lcd_to_use = &sharp_lq057q3dc02;
  	} else if (!strnicmp(str, "lq121s1dg31", 11)) {
  		lpd270_lcd_to_use = &sharp_lq121s1dg31;
  	} else if (!strnicmp(str, "lq036q1da01", 11)) {
  		lpd270_lcd_to_use = &sharp_lq036q1da01;
  	} else if (!strnicmp(str, "lq64d343", 8)) {
  		lpd270_lcd_to_use = &sharp_lq64d343;
  	} else if (!strnicmp(str, "lq10d368", 8)) {
  		lpd270_lcd_to_use = &sharp_lq10d368;
  	} else if (!strnicmp(str, "lq035q7db02-20", 14)) {
  		lpd270_lcd_to_use = &sharp_lq035q7db02_20;
  	} else {
  		printk(KERN_INFO "lpd270: unknown lcd panel [%s]
  ", str);
  	}
  
  	return 1;
  }
  
  __setup("lcd=", lpd270_set_lcd);
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
428
429
  static struct platform_device *platform_devices[] __initdata = {
  	&smc91x_device,
4a7307194   Russell King   [ARM] pxa: make L...
430
  	&lpd270_backlight_device,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
431
432
433
  	&lpd270_flash_device[0],
  	&lpd270_flash_device[1],
  };
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
434
435
  static struct pxaohci_platform_data lpd270_ohci_platform_data = {
  	.port_mode	= PMM_PERPORT_MODE,
097b53348   Eric Miao   [ARM] ohci-pxa27x...
436
  	.flags		= ENABLE_PORT_ALL | POWER_CONTROL_LOW | POWER_SENSE_LOW,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
437
438
439
440
  };
  
  static void __init lpd270_init(void)
  {
fd90ff200   Eric Miao   [ARM] pxa/lpd270:...
441
  	pxa2xx_mfp_config(ARRAY_AND_SIZE(lpd270_pin_config));
cc155c6f2   Russell King   [ARM] pxa: allow ...
442
443
444
  	pxa_set_ffuart_info(NULL);
  	pxa_set_btuart_info(NULL);
  	pxa_set_stuart_info(NULL);
ad68bb9f7   Marek Vasut   ARM: pxa: Access ...
445
  	lpd270_flash_data[0].width = (__raw_readl(BOOT_DEF) & 1) ? 2 : 4;
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
446
447
448
449
450
451
452
453
  	lpd270_flash_data[1].width = 4;
  
  	/*
  	 * System bus arbiter setting:
  	 * - Core_Park
  	 * - LCD_wt:DMA_wt:CORE_Wt = 2:3:4
  	 */
  	ARB_CNTRL = ARB_CORE_PARK | 0x234;
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
454
  	platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
9f19d6382   Mark Brown   [ARM] 5085/2: PXA...
455
  	pxa_set_ac97_info(NULL);
656602978   Lennert Buytenhek   [ARM] 3673/1: lpd...
456
  	if (lpd270_lcd_to_use != NULL)
4321e1a12   Russell King - ARM Linux   ARM: pxa: clean u...
457
  		pxa_set_fb_info(NULL, lpd270_lcd_to_use);
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
458
459
460
461
462
463
464
  
  	pxa_set_ohci_info(&lpd270_ohci_platform_data);
  }
  
  
  static struct map_desc lpd270_io_desc[] __initdata = {
  	{
97b09da4e   Arnd Bergmann   ARM: pxa: use cor...
465
  		.virtual	= (unsigned long)LPD270_CPLD_VIRT,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
466
467
468
469
470
471
472
473
  		.pfn		= __phys_to_pfn(LPD270_CPLD_PHYS),
  		.length		= LPD270_CPLD_SIZE,
  		.type		= MT_DEVICE,
  	},
  };
  
  static void __init lpd270_map_io(void)
  {
851982c1b   Marek Vasut   ARM: pxa: Introdu...
474
  	pxa27x_map_io();
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
475
  	iotable_init(lpd270_io_desc, ARRAY_SIZE(lpd270_io_desc));
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
476
477
478
479
480
481
482
  	/* for use I SRAM as framebuffer.  */
  	PSLR |= 0x00000F04;
  	PCFR  = 0x00000066;
  }
  
  MACHINE_START(LOGICPD_PXA270, "LogicPD PXA270 Card Engine")
  	/* Maintainer: Peter Barada */
7375aba67   Nicolas Pitre   ARM: mach-pxa: co...
483
  	.atag_offset	= 0x100,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
484
  	.map_io		= lpd270_map_io,
6ac6b817f   Haojian Zhuang   ARM: pxa: encode ...
485
  	.nr_irqs	= LPD270_NR_IRQS,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
486
  	.init_irq	= lpd270_init_irq,
8a97ae2f5   Eric Miao   ARM: pxa: enable ...
487
  	.handle_irq	= pxa27x_handle_irq,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
488
489
  	.timer		= &pxa_timer,
  	.init_machine	= lpd270_init,
271a74fc8   Russell King   ARM: restart: pxa...
490
  	.restart	= pxa_restart,
e9937d4b0   Lennert Buytenhek   [ARM] 3417/1: add...
491
  MACHINE_END