Blame view

arch/arm/mach-omap1/board-palmtt.c 7.02 KB
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  /*
   * linux/arch/arm/mach-omap1/board-palmtt.c
   *
   * Modified from board-palmtt2.c
   *
   * Modified and amended for Palm Tungsten|T
   * by Marek Vasut <marek.vasut@gmail.com>
   *
   * 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.
   */
  
  #include <linux/delay.h>
2f8163baa   Russell King   ARM: gpio: conver...
15
  #include <linux/gpio.h>
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
16
17
18
19
20
21
22
23
24
  #include <linux/kernel.h>
  #include <linux/init.h>
  #include <linux/platform_device.h>
  #include <linux/notifier.h>
  #include <linux/clk.h>
  #include <linux/input.h>
  #include <linux/interrupt.h>
  #include <linux/mtd/mtd.h>
  #include <linux/mtd/partitions.h>
561b036ad   Ladislav Michl   omap: convert boa...
25
  #include <linux/mtd/physmap.h>
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
26
  #include <linux/leds.h>
a09e64fbc   Russell King   [ARM] Move includ...
27
  #include <mach/hardware.h>
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
28
29
30
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
31

ce491cf85   Tony Lindgren   omap: headers: Mo...
32
  #include <plat/led.h>
561b036ad   Ladislav Michl   omap: convert boa...
33
  #include <plat/flash.h>
ce491cf85   Tony Lindgren   omap: headers: Mo...
34
35
36
37
38
39
40
  #include <plat/mux.h>
  #include <plat/usb.h>
  #include <plat/dma.h>
  #include <plat/tc.h>
  #include <plat/board.h>
  #include <plat/irda.h>
  #include <plat/keypad.h>
4e65331c6   Tony Lindgren   ARM: 7159/1: OMAP...
41
  #include "common.h"
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
42

dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
43
44
  #include <linux/spi/spi.h>
  #include <linux/spi/ads7846.h>
b2830810f   Tony Lindgren   ARM: OMAP: No nee...
45
46
47
48
49
50
  #define PALMTT_USBDETECT_GPIO	0
  #define PALMTT_CABLE_GPIO	1
  #define PALMTT_LED_GPIO		3
  #define PALMTT_PENIRQ_GPIO	6
  #define PALMTT_MMC_WP_GPIO	8
  #define PALMTT_HDQ_GPIO		11
da1f026b5   Janusz Krzysztofik   Keyboard: omap-ke...
51
  static const unsigned int palmtt_keymap[] = {
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
52
  	KEY(0, 0, KEY_ESC),
da1f026b5   Janusz Krzysztofik   Keyboard: omap-ke...
53
54
55
56
57
  	KEY(1, 0, KEY_SPACE),
  	KEY(2, 0, KEY_LEFTCTRL),
  	KEY(3, 0, KEY_TAB),
  	KEY(4, 0, KEY_ENTER),
  	KEY(0, 1, KEY_LEFT),
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
58
  	KEY(1, 1, KEY_DOWN),
da1f026b5   Janusz Krzysztofik   Keyboard: omap-ke...
59
60
61
62
  	KEY(2, 1, KEY_UP),
  	KEY(3, 1, KEY_RIGHT),
  	KEY(0, 2, KEY_SLEEP),
  	KEY(4, 2, KEY_Y),
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
  };
  
  static struct mtd_partition palmtt_partitions[] = {
  	{
  		.name		= "write8k",
  		.offset		= 0,
  		.size		= SZ_8K,
  		.mask_flags	= 0,
  	},
  	{
  		.name		= "PalmOS-BootLoader(ro)",
  		.offset		= SZ_8K,
  		.size		= 7 * SZ_8K,
  		.mask_flags	= MTD_WRITEABLE,
  	},
  	{
  		.name		= "u-boot",
  		.offset		= MTDPART_OFS_APPEND,
  		.size		= 8 * SZ_8K,
  		.mask_flags	= 0,
  	},
  	{
  		.name		= "PalmOS-FS(ro)",
  		.offset		= MTDPART_OFS_APPEND,
  		.size		= 7 * SZ_1M + 4 * SZ_64K - 16 * SZ_8K,
  		.mask_flags	= MTD_WRITEABLE,
  	},
  	{
  		.name		= "u-boot(rez)",
  		.offset		= MTDPART_OFS_APPEND,
  		.size		= SZ_128K,
  		.mask_flags	= 0
  	},
  	{
  		.name		= "empty",
  		.offset		= MTDPART_OFS_APPEND,
  		.size		= MTDPART_SIZ_FULL,
  		.mask_flags	= 0
  	}
  };
561b036ad   Ladislav Michl   omap: convert boa...
103
  static struct physmap_flash_data palmtt_flash_data = {
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
104
  	.width		= 2,
561b036ad   Ladislav Michl   omap: convert boa...
105
  	.set_vpp	= omap1_set_vpp,
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
106
107
108
109
110
111
112
113
114
115
116
  	.parts		= palmtt_partitions,
  	.nr_parts	= ARRAY_SIZE(palmtt_partitions),
  };
  
  static struct resource palmtt_flash_resource = {
  	.start		= OMAP_CS0_PHYS,
  	.end		= OMAP_CS0_PHYS + SZ_8M - 1,
  	.flags		= IORESOURCE_MEM,
  };
  
  static struct platform_device palmtt_flash_device = {
561b036ad   Ladislav Michl   omap: convert boa...
117
  	.name		= "physmap-flash",
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
118
119
120
121
122
123
124
  	.id		= 0,
  	.dev		= {
  		.platform_data	= &palmtt_flash_data,
  	},
  	.num_resources	= 1,
  	.resource	= &palmtt_flash_resource,
  };
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
125
126
127
128
129
130
131
  static struct resource palmtt_kp_resources[] = {
  	[0] = {
  		.start	= INT_KEYBOARD,
  		.end	= INT_KEYBOARD,
  		.flags	= IORESOURCE_IRQ,
  	},
  };
da1f026b5   Janusz Krzysztofik   Keyboard: omap-ke...
132
133
134
135
  static const struct matrix_keymap_data palmtt_keymap_data = {
  	.keymap		= palmtt_keymap,
  	.keymap_size	= ARRAY_SIZE(palmtt_keymap),
  };
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
136
137
138
  static struct omap_kp_platform_data palmtt_kp_data = {
  	.rows	= 6,
  	.cols	= 3,
da1f026b5   Janusz Krzysztofik   Keyboard: omap-ke...
139
  	.keymap_data = &palmtt_keymap_data,
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
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
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
  };
  
  static struct platform_device palmtt_kp_device = {
  	.name		= "omap-keypad",
  	.id		= -1,
  	.dev		= {
  		.platform_data = &palmtt_kp_data,
  	},
  	.num_resources	= ARRAY_SIZE(palmtt_kp_resources),
  	.resource	= palmtt_kp_resources,
  };
  
  static struct platform_device palmtt_lcd_device = {
  	.name		= "lcd_palmtt",
  	.id		= -1,
  };
  static struct omap_irda_config palmtt_irda_config = {
  	.transceiver_cap	= IR_SIRMODE,
  	.rx_channel		= OMAP_DMA_UART3_RX,
  	.tx_channel		= OMAP_DMA_UART3_TX,
  	.dest_start		= UART3_THR,
  	.src_start		= UART3_RHR,
  	.tx_trigger		= 0,
  	.rx_trigger		= 0,
  };
  
  static struct resource palmtt_irda_resources[] = {
  	[0]	= {
  		.start	= INT_UART3,
  		.end	= INT_UART3,
  		.flags	= IORESOURCE_IRQ,
  	},
  };
  
  static struct platform_device palmtt_irda_device = {
  	.name		= "omapirda",
  	.id		= -1,
  	.dev		= {
  		.platform_data	= &palmtt_irda_config,
  	},
  	.num_resources	= ARRAY_SIZE(palmtt_irda_resources),
  	.resource	= palmtt_irda_resources,
  };
  
  static struct platform_device palmtt_spi_device = {
  	.name		= "spi_palmtt",
  	.id		= -1,
  };
  
  static struct omap_backlight_config palmtt_backlight_config = {
  	.default_intensity	= 0xa0,
  };
  
  static struct platform_device palmtt_backlight_device = {
  	.name		= "omap-bl",
  	.id		= -1,
  	.dev		= {
  		.platform_data= &palmtt_backlight_config,
  	},
  };
  
  static struct omap_led_config palmtt_led_config[] = {
  	{
  		.cdev	= {
  			.name	= "palmtt:led0",
  		},
  		.gpio	= PALMTT_LED_GPIO,
  	},
  };
  
  static struct omap_led_platform_data palmtt_led_data = {
  	.nr_leds	= ARRAY_SIZE(palmtt_led_config),
  	.leds		= palmtt_led_config,
  };
  
  static struct platform_device palmtt_led_device = {
  	.name	= "omap-led",
  	.id	= -1,
  	.dev	= {
  		.platform_data	= &palmtt_led_data,
  	},
  };
  
  static struct platform_device *palmtt_devices[] __initdata = {
  	&palmtt_flash_device,
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
225
226
227
228
229
230
231
232
233
234
  	&palmtt_kp_device,
  	&palmtt_lcd_device,
  	&palmtt_irda_device,
  	&palmtt_spi_device,
  	&palmtt_backlight_device,
  	&palmtt_led_device,
  };
  
  static int palmtt_get_pendown_state(void)
  {
0b84b5ca4   David Brownell   ARM: OMAP: switch...
235
  	return !gpio_get_value(6);
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
  }
  
  static const struct ads7846_platform_data palmtt_ts_info = {
  	.model			= 7846,
  	.vref_delay_usecs	= 100,	/* internal, no capacitor */
  	.x_plate_ohms		= 419,
  	.y_plate_ohms		= 486,
  	.get_pendown_state	= palmtt_get_pendown_state,
  };
  
  static struct spi_board_info __initdata palmtt_boardinfo[] = {
  	{
  		/* MicroWire (bus 2) CS0 has an ads7846e */
  		.modalias	= "ads7846",
  		.platform_data	= &palmtt_ts_info,
  		.irq		= OMAP_GPIO_IRQ(6),
  		.max_speed_hz	= 120000	/* max sample rate at 3V */
  					* 26	/* command + data + overhead */,
  		.bus_num	= 2,
  		.chip_select	= 0,
  	}
  };
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
258
259
260
261
262
263
264
265
266
  static struct omap_usb_config palmtt_usb_config __initdata = {
  	.register_dev	= 1,
  	.hmc_mode	= 0,
  	.pins[0]	= 2,
  };
  
  static struct omap_lcd_config palmtt_lcd_config __initdata = {
  	.ctrl_name	= "internal",
  };
e27a93a94   Tony Lindgren   ARM: OMAP1: Misc ...
267
  static struct omap_board_config_kernel palmtt_config[] __initdata = {
a524626b1   Tony Lindgren   ARM: OMAP: Sync b...
268
  	{ OMAP_TAG_LCD,		&palmtt_lcd_config	},
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
269
270
271
272
273
274
275
276
277
278
279
280
281
  };
  
  static void __init omap_mpu_wdt_mode(int mode) {
  	if (mode)
  		omap_writew(0x8000, OMAP_WDT_TIMER_MODE);
  	else {
  		omap_writew(0x00f5, OMAP_WDT_TIMER_MODE);
  		omap_writew(0x00a0, OMAP_WDT_TIMER_MODE);
  	}
  }
  
  static void __init omap_palmtt_init(void)
  {
c33da3a80   Janusz Krzysztofik   omap1: Fix redund...
282
283
284
285
286
287
288
  	/* mux pins for uarts */
  	omap_cfg_reg(UART1_TX);
  	omap_cfg_reg(UART1_RTS);
  	omap_cfg_reg(UART2_TX);
  	omap_cfg_reg(UART2_RTS);
  	omap_cfg_reg(UART3_TX);
  	omap_cfg_reg(UART3_RX);
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
289
290
291
292
293
294
295
296
297
  	omap_mpu_wdt_mode(0);
  
  	omap_board_config = palmtt_config;
  	omap_board_config_size = ARRAY_SIZE(palmtt_config);
  
  	platform_add_devices(palmtt_devices, ARRAY_SIZE(palmtt_devices));
  
  	spi_register_board_info(palmtt_boardinfo,ARRAY_SIZE(palmtt_boardinfo));
  	omap_serial_init();
dd0cdd888   Tony Lindgren   omap: Move omap1 ...
298
  	omap1_usb_init(&palmtt_usb_config);
1ed16a86b   Jarkko Nikula   ARM: OMAP1: Use I...
299
  	omap_register_i2c_bus(1, 100, NULL, 0);
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
300
  }
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
301
  MACHINE_START(OMAP_PALMTT, "OMAP1510 based Palm Tungsten|T")
246e389d2   Nicolas Pitre   ARM: mach-omap1: ...
302
  	.atag_offset	= 0x100,
7b88e62f5   Tony Lindgren   ARM: OMAP1: Use g...
303
304
  	.map_io		= omap15xx_map_io,
  	.init_early     = omap1_init_early,
71ee7dad9   Russell King   ARM: OMAP: Conver...
305
  	.reserve	= omap_reserve,
7b88e62f5   Tony Lindgren   ARM: OMAP1: Use g...
306
  	.init_irq	= omap1_init_irq,
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
307
  	.init_machine	= omap_palmtt_init,
e74984e46   Tony Lindgren   omap: Set separat...
308
  	.timer		= &omap1_timer,
baa958834   Russell King   ARM: restart: oma...
309
  	.restart	= omap1_restart,
dc563b4f2   Marek Vasut   ARM: OMAP: Palm T...
310
  MACHINE_END