Linux Audio

Check our new training course

Loading...
v3.5.6
 
  1/*
  2 * Hardware definitions for PalmTX
  3 *
  4 * Author:     Marek Vasut <marek.vasut@gmail.com>
  5 *
  6 * Based on work of:
  7 *		Alex Osborne <ato@meshy.org>
  8 *		Cristiano P. <cristianop@users.sourceforge.net>
  9 *		Jan Herman <2hp@seznam.cz>
 10 *		Michal Hrusecky
 11 *
 12 * This program is free software; you can redistribute it and/or modify
 13 * it under the terms of the GNU General Public License version 2 as
 14 * published by the Free Software Foundation.
 15 *
 16 * (find more info at www.hackndev.com)
 17 *
 18 */
 19
 20#include <linux/platform_device.h>
 21#include <linux/delay.h>
 22#include <linux/irq.h>
 23#include <linux/gpio_keys.h>
 24#include <linux/input.h>
 25#include <linux/pda_power.h>
 26#include <linux/pwm_backlight.h>
 27#include <linux/gpio.h>
 28#include <linux/wm97xx.h>
 29#include <linux/power_supply.h>
 30#include <linux/usb/gpio_vbus.h>
 31#include <linux/mtd/nand.h>
 32#include <linux/mtd/partitions.h>
 33#include <linux/mtd/mtd.h>
 34#include <linux/mtd/physmap.h>
 35
 36#include <asm/mach-types.h>
 37#include <asm/mach/arch.h>
 38#include <asm/mach/map.h>
 39
 40#include <mach/pxa27x.h>
 41#include <mach/audio.h>
 42#include <mach/palmtx.h>
 43#include <mach/mmc.h>
 44#include <mach/pxafb.h>
 45#include <mach/irda.h>
 46#include <plat/pxa27x_keypad.h>
 47#include <mach/udc.h>
 48#include <mach/palmasoc.h>
 49#include <mach/palm27x.h>
 50
 51#include "generic.h"
 52#include "devices.h"
 53
 54/******************************************************************************
 55 * Pin configuration
 56 ******************************************************************************/
 57static unsigned long palmtx_pin_config[] __initdata = {
 58	/* MMC */
 59	GPIO32_MMC_CLK,
 60	GPIO92_MMC_DAT_0,
 61	GPIO109_MMC_DAT_1,
 62	GPIO110_MMC_DAT_2,
 63	GPIO111_MMC_DAT_3,
 64	GPIO112_MMC_CMD,
 65	GPIO14_GPIO,	/* SD detect */
 66	GPIO114_GPIO,	/* SD power */
 67	GPIO115_GPIO,	/* SD r/o switch */
 68
 69	/* AC97 */
 70	GPIO28_AC97_BITCLK,
 71	GPIO29_AC97_SDATA_IN_0,
 72	GPIO30_AC97_SDATA_OUT,
 73	GPIO31_AC97_SYNC,
 74	GPIO89_AC97_SYSCLK,
 75	GPIO95_AC97_nRESET,
 76
 77	/* IrDA */
 78	GPIO40_GPIO,	/* ir disable */
 79	GPIO46_FICP_RXD,
 80	GPIO47_FICP_TXD,
 81
 82	/* PWM */
 83	GPIO16_PWM0_OUT,
 84
 85	/* USB */
 86	GPIO13_GPIO,	/* usb detect */
 87	GPIO93_GPIO,	/* usb power */
 88
 89	/* PCMCIA */
 90	GPIO48_nPOE,
 91	GPIO49_nPWE,
 92	GPIO50_nPIOR,
 93	GPIO51_nPIOW,
 94	GPIO85_nPCE_1,
 95	GPIO54_nPCE_2,
 96	GPIO79_PSKTSEL,
 97	GPIO55_nPREG,
 98	GPIO56_nPWAIT,
 99	GPIO57_nIOIS16,
100	GPIO94_GPIO,	/* wifi power 1 */
101	GPIO108_GPIO,	/* wifi power 2 */
102	GPIO116_GPIO,	/* wifi ready */
103
104	/* MATRIX KEYPAD */
105	GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
106	GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
107	GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
108	GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
109	GPIO103_KP_MKOUT_0,
110	GPIO104_KP_MKOUT_1,
111	GPIO105_KP_MKOUT_2,
112
113	/* LCD */
114	GPIOxx_LCD_TFT_16BPP,
115
116	/* FFUART */
117	GPIO34_FFUART_RXD,
118	GPIO39_FFUART_TXD,
119
120	/* NAND */
121	GPIO15_nCS_1,
122	GPIO18_RDY,
123
124	/* MISC. */
125	GPIO10_GPIO,	/* hotsync button */
126	GPIO12_GPIO,	/* power detect */
127	GPIO107_GPIO,	/* earphone detect */
128};
129
130/******************************************************************************
131 * NOR Flash
132 ******************************************************************************/
133#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
134static struct mtd_partition palmtx_partitions[] = {
135	{
136		.name		= "Flash",
137		.offset		= 0x00000000,
138		.size		= MTDPART_SIZ_FULL,
139		.mask_flags	= 0
140	}
141};
142
143static struct physmap_flash_data palmtx_flash_data[] = {
144	{
145		.width		= 2,			/* bankwidth in bytes */
146		.parts		= palmtx_partitions,
147		.nr_parts	= ARRAY_SIZE(palmtx_partitions)
148	}
149};
150
151static struct resource palmtx_flash_resource = {
152	.start	= PXA_CS0_PHYS,
153	.end	= PXA_CS0_PHYS + SZ_8M - 1,
154	.flags	= IORESOURCE_MEM,
155};
156
157static struct platform_device palmtx_flash = {
158	.name		= "physmap-flash",
159	.id		= 0,
160	.resource	= &palmtx_flash_resource,
161	.num_resources	= 1,
162	.dev 		= {
163		.platform_data = palmtx_flash_data,
164	},
165};
166
167static void __init palmtx_nor_init(void)
168{
169	platform_device_register(&palmtx_flash);
170}
171#else
172static inline void palmtx_nor_init(void) {}
173#endif
174
175/******************************************************************************
176 * GPIO keyboard
177 ******************************************************************************/
178#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
179static unsigned int palmtx_matrix_keys[] = {
180	KEY(0, 0, KEY_POWER),
181	KEY(0, 1, KEY_F1),
182	KEY(0, 2, KEY_ENTER),
183
184	KEY(1, 0, KEY_F2),
185	KEY(1, 1, KEY_F3),
186	KEY(1, 2, KEY_F4),
187
188	KEY(2, 0, KEY_UP),
189	KEY(2, 2, KEY_DOWN),
190
191	KEY(3, 0, KEY_RIGHT),
192	KEY(3, 2, KEY_LEFT),
193};
194
 
 
 
 
 
195static struct pxa27x_keypad_platform_data palmtx_keypad_platform_data = {
196	.matrix_key_rows	= 4,
197	.matrix_key_cols	= 3,
198	.matrix_key_map		= palmtx_matrix_keys,
199	.matrix_key_map_size	= ARRAY_SIZE(palmtx_matrix_keys),
200
201	.debounce_interval	= 30,
202};
203
204static void __init palmtx_kpc_init(void)
205{
206	pxa_set_keypad_info(&palmtx_keypad_platform_data);
207}
208#else
209static inline void palmtx_kpc_init(void) {}
210#endif
211
212/******************************************************************************
213 * GPIO keys
214 ******************************************************************************/
215#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
216static struct gpio_keys_button palmtx_pxa_buttons[] = {
217	{KEY_F8, GPIO_NR_PALMTX_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
218};
219
220static struct gpio_keys_platform_data palmtx_pxa_keys_data = {
221	.buttons	= palmtx_pxa_buttons,
222	.nbuttons	= ARRAY_SIZE(palmtx_pxa_buttons),
223};
224
225static struct platform_device palmtx_pxa_keys = {
226	.name	= "gpio-keys",
227	.id	= -1,
228	.dev	= {
229		.platform_data = &palmtx_pxa_keys_data,
230	},
231};
232
233static void __init palmtx_keys_init(void)
234{
235	platform_device_register(&palmtx_pxa_keys);
236}
237#else
238static inline void palmtx_keys_init(void) {}
239#endif
240
241/******************************************************************************
242 * NAND Flash
243 ******************************************************************************/
244#if defined(CONFIG_MTD_NAND_PLATFORM) || \
245	defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
246static void palmtx_nand_cmd_ctl(struct mtd_info *mtd, int cmd,
247				 unsigned int ctrl)
248{
249	struct nand_chip *this = mtd->priv;
250	char __iomem *nandaddr = this->IO_ADDR_W;
251
252	if (cmd == NAND_CMD_NONE)
253		return;
254
255	if (ctrl & NAND_CLE)
256		writeb(cmd, PALMTX_NAND_CLE_VIRT);
257	else if (ctrl & NAND_ALE)
258		writeb(cmd, PALMTX_NAND_ALE_VIRT);
259	else
260		writeb(cmd, nandaddr);
261}
262
263static struct mtd_partition palmtx_partition_info[] = {
264	[0] = {
265		.name	= "palmtx-0",
266		.offset	= 0,
267		.size	= MTDPART_SIZ_FULL
268	},
269};
270
271struct platform_nand_data palmtx_nand_platdata = {
272	.chip	= {
273		.nr_chips		= 1,
274		.chip_offset		= 0,
275		.nr_partitions		= ARRAY_SIZE(palmtx_partition_info),
276		.partitions		= palmtx_partition_info,
277		.chip_delay		= 20,
278	},
279	.ctrl	= {
280		.cmd_ctrl	= palmtx_nand_cmd_ctl,
281	},
282};
283
284static struct resource palmtx_nand_resource[] = {
285	[0]	= {
286		.start	= PXA_CS1_PHYS,
287		.end	= PXA_CS1_PHYS + SZ_1M - 1,
288		.flags	= IORESOURCE_MEM,
289	},
290};
291
292static struct platform_device palmtx_nand = {
293	.name		= "gen_nand",
294	.num_resources	= ARRAY_SIZE(palmtx_nand_resource),
295	.resource	= palmtx_nand_resource,
296	.id		= -1,
297	.dev		= {
298		.platform_data	= &palmtx_nand_platdata,
299	}
300};
301
302static void __init palmtx_nand_init(void)
303{
304	platform_device_register(&palmtx_nand);
305}
306#else
307static inline void palmtx_nand_init(void) {}
308#endif
309
310/******************************************************************************
311 * Machine init
312 ******************************************************************************/
313static struct map_desc palmtx_io_desc[] __initdata = {
314{
315	.virtual	= (unsigned long)PALMTX_PCMCIA_VIRT,
316	.pfn		= __phys_to_pfn(PALMTX_PCMCIA_PHYS),
317	.length		= PALMTX_PCMCIA_SIZE,
318	.type		= MT_DEVICE,
319}, {
320	.virtual	= (unsigned long)PALMTX_NAND_ALE_VIRT,
321	.pfn		= __phys_to_pfn(PALMTX_NAND_ALE_PHYS),
322	.length		= SZ_1M,
323	.type		= MT_DEVICE,
324}, {
325	.virtual	= (unsigned long)PALMTX_NAND_CLE_VIRT,
326	.pfn		= __phys_to_pfn(PALMTX_NAND_CLE_PHYS),
327	.length		= SZ_1M,
328	.type		= MT_DEVICE,
329}
330};
331
332static void __init palmtx_map_io(void)
333{
334	pxa27x_map_io();
335	iotable_init(palmtx_io_desc, ARRAY_SIZE(palmtx_io_desc));
336}
337
 
 
 
 
 
 
 
 
 
 
 
 
 
338static void __init palmtx_init(void)
339{
340	pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config));
341	pxa_set_ffuart_info(NULL);
342	pxa_set_btuart_info(NULL);
343	pxa_set_stuart_info(NULL);
344
345	palm27x_mmc_init(GPIO_NR_PALMTX_SD_DETECT_N, GPIO_NR_PALMTX_SD_READONLY,
346			GPIO_NR_PALMTX_SD_POWER, 0);
347	palm27x_pm_init(PALMTX_STR_BASE);
348	palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
349	palm27x_udc_init(GPIO_NR_PALMTX_USB_DETECT_N,
350			GPIO_NR_PALMTX_USB_PULLUP, 1);
351	palm27x_irda_init(GPIO_NR_PALMTX_IR_DISABLE);
352	palm27x_ac97_init(PALMTX_BAT_MIN_VOLTAGE, PALMTX_BAT_MAX_VOLTAGE,
353			GPIO_NR_PALMTX_EARPHONE_DETECT, 95);
354	palm27x_pwm_init(GPIO_NR_PALMTX_BL_POWER, GPIO_NR_PALMTX_LCD_POWER);
355	palm27x_power_init(GPIO_NR_PALMTX_POWER_DETECT, -1);
356	palm27x_pmic_init();
357	palmtx_kpc_init();
358	palmtx_keys_init();
359	palmtx_nor_init();
360	palmtx_nand_init();
361}
362
363MACHINE_START(PALMTX, "Palm T|X")
364	.atag_offset	= 0x100,
365	.map_io		= palmtx_map_io,
366	.nr_irqs	= PXA_NR_IRQS,
367	.init_irq	= pxa27x_init_irq,
368	.handle_irq	= pxa27x_handle_irq,
369	.timer		= &pxa_timer,
370	.init_machine	= palmtx_init,
371	.restart	= pxa_restart,
372MACHINE_END
v5.4
  1// SPDX-License-Identifier: GPL-2.0-only
  2/*
  3 * Hardware definitions for PalmTX
  4 *
  5 * Author:     Marek Vasut <marek.vasut@gmail.com>
  6 *
  7 * Based on work of:
  8 *		Alex Osborne <ato@meshy.org>
  9 *		Cristiano P. <cristianop@users.sourceforge.net>
 10 *		Jan Herman <2hp@seznam.cz>
 11 *		Michal Hrusecky
 12 *
 
 
 
 
 13 * (find more info at www.hackndev.com)
 
 14 */
 15
 16#include <linux/platform_device.h>
 17#include <linux/delay.h>
 18#include <linux/irq.h>
 19#include <linux/gpio_keys.h>
 20#include <linux/input.h>
 21#include <linux/pda_power.h>
 22#include <linux/pwm_backlight.h>
 23#include <linux/gpio.h>
 24#include <linux/wm97xx.h>
 25#include <linux/power_supply.h>
 26#include <linux/usb/gpio_vbus.h>
 27#include <linux/mtd/platnand.h>
 
 28#include <linux/mtd/mtd.h>
 29#include <linux/mtd/physmap.h>
 30
 31#include <asm/mach-types.h>
 32#include <asm/mach/arch.h>
 33#include <asm/mach/map.h>
 34
 35#include "pxa27x.h"
 36#include <mach/audio.h>
 37#include <mach/palmtx.h>
 38#include <linux/platform_data/mmc-pxamci.h>
 39#include <linux/platform_data/video-pxafb.h>
 40#include <linux/platform_data/irda-pxaficp.h>
 41#include <linux/platform_data/keypad-pxa27x.h>
 42#include "udc.h"
 43#include <linux/platform_data/asoc-palm27x.h>
 44#include "palm27x.h"
 45
 46#include "generic.h"
 47#include "devices.h"
 48
 49/******************************************************************************
 50 * Pin configuration
 51 ******************************************************************************/
 52static unsigned long palmtx_pin_config[] __initdata = {
 53	/* MMC */
 54	GPIO32_MMC_CLK,
 55	GPIO92_MMC_DAT_0,
 56	GPIO109_MMC_DAT_1,
 57	GPIO110_MMC_DAT_2,
 58	GPIO111_MMC_DAT_3,
 59	GPIO112_MMC_CMD,
 60	GPIO14_GPIO,	/* SD detect */
 61	GPIO114_GPIO,	/* SD power */
 62	GPIO115_GPIO,	/* SD r/o switch */
 63
 64	/* AC97 */
 65	GPIO28_AC97_BITCLK,
 66	GPIO29_AC97_SDATA_IN_0,
 67	GPIO30_AC97_SDATA_OUT,
 68	GPIO31_AC97_SYNC,
 69	GPIO89_AC97_SYSCLK,
 70	GPIO95_AC97_nRESET,
 71
 72	/* IrDA */
 73	GPIO40_GPIO,	/* ir disable */
 74	GPIO46_FICP_RXD,
 75	GPIO47_FICP_TXD,
 76
 77	/* PWM */
 78	GPIO16_PWM0_OUT,
 79
 80	/* USB */
 81	GPIO13_GPIO,	/* usb detect */
 82	GPIO93_GPIO,	/* usb power */
 83
 84	/* PCMCIA */
 85	GPIO48_nPOE,
 86	GPIO49_nPWE,
 87	GPIO50_nPIOR,
 88	GPIO51_nPIOW,
 89	GPIO85_nPCE_1,
 90	GPIO54_nPCE_2,
 91	GPIO79_PSKTSEL,
 92	GPIO55_nPREG,
 93	GPIO56_nPWAIT,
 94	GPIO57_nIOIS16,
 95	GPIO94_GPIO,	/* wifi power 1 */
 96	GPIO108_GPIO,	/* wifi power 2 */
 97	GPIO116_GPIO,	/* wifi ready */
 98
 99	/* MATRIX KEYPAD */
100	GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
101	GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
102	GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
103	GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
104	GPIO103_KP_MKOUT_0,
105	GPIO104_KP_MKOUT_1,
106	GPIO105_KP_MKOUT_2,
107
108	/* LCD */
109	GPIOxx_LCD_TFT_16BPP,
110
111	/* FFUART */
112	GPIO34_FFUART_RXD,
113	GPIO39_FFUART_TXD,
114
115	/* NAND */
116	GPIO15_nCS_1,
117	GPIO18_RDY,
118
119	/* MISC. */
120	GPIO10_GPIO,	/* hotsync button */
121	GPIO12_GPIO,	/* power detect */
122	GPIO107_GPIO,	/* earphone detect */
123};
124
125/******************************************************************************
126 * NOR Flash
127 ******************************************************************************/
128#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
129static struct mtd_partition palmtx_partitions[] = {
130	{
131		.name		= "Flash",
132		.offset		= 0x00000000,
133		.size		= MTDPART_SIZ_FULL,
134		.mask_flags	= 0
135	}
136};
137
138static struct physmap_flash_data palmtx_flash_data[] = {
139	{
140		.width		= 2,			/* bankwidth in bytes */
141		.parts		= palmtx_partitions,
142		.nr_parts	= ARRAY_SIZE(palmtx_partitions)
143	}
144};
145
146static struct resource palmtx_flash_resource = {
147	.start	= PXA_CS0_PHYS,
148	.end	= PXA_CS0_PHYS + SZ_8M - 1,
149	.flags	= IORESOURCE_MEM,
150};
151
152static struct platform_device palmtx_flash = {
153	.name		= "physmap-flash",
154	.id		= 0,
155	.resource	= &palmtx_flash_resource,
156	.num_resources	= 1,
157	.dev 		= {
158		.platform_data = palmtx_flash_data,
159	},
160};
161
162static void __init palmtx_nor_init(void)
163{
164	platform_device_register(&palmtx_flash);
165}
166#else
167static inline void palmtx_nor_init(void) {}
168#endif
169
170/******************************************************************************
171 * GPIO keyboard
172 ******************************************************************************/
173#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
174static const unsigned int palmtx_matrix_keys[] = {
175	KEY(0, 0, KEY_POWER),
176	KEY(0, 1, KEY_F1),
177	KEY(0, 2, KEY_ENTER),
178
179	KEY(1, 0, KEY_F2),
180	KEY(1, 1, KEY_F3),
181	KEY(1, 2, KEY_F4),
182
183	KEY(2, 0, KEY_UP),
184	KEY(2, 2, KEY_DOWN),
185
186	KEY(3, 0, KEY_RIGHT),
187	KEY(3, 2, KEY_LEFT),
188};
189
190static struct matrix_keymap_data palmtx_matrix_keymap_data = {
191	.keymap			= palmtx_matrix_keys,
192	.keymap_size		= ARRAY_SIZE(palmtx_matrix_keys),
193};
194
195static struct pxa27x_keypad_platform_data palmtx_keypad_platform_data = {
196	.matrix_key_rows	= 4,
197	.matrix_key_cols	= 3,
198	.matrix_keymap_data	= &palmtx_matrix_keymap_data,
 
199
200	.debounce_interval	= 30,
201};
202
203static void __init palmtx_kpc_init(void)
204{
205	pxa_set_keypad_info(&palmtx_keypad_platform_data);
206}
207#else
208static inline void palmtx_kpc_init(void) {}
209#endif
210
211/******************************************************************************
212 * GPIO keys
213 ******************************************************************************/
214#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
215static struct gpio_keys_button palmtx_pxa_buttons[] = {
216	{KEY_F8, GPIO_NR_PALMTX_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
217};
218
219static struct gpio_keys_platform_data palmtx_pxa_keys_data = {
220	.buttons	= palmtx_pxa_buttons,
221	.nbuttons	= ARRAY_SIZE(palmtx_pxa_buttons),
222};
223
224static struct platform_device palmtx_pxa_keys = {
225	.name	= "gpio-keys",
226	.id	= -1,
227	.dev	= {
228		.platform_data = &palmtx_pxa_keys_data,
229	},
230};
231
232static void __init palmtx_keys_init(void)
233{
234	platform_device_register(&palmtx_pxa_keys);
235}
236#else
237static inline void palmtx_keys_init(void) {}
238#endif
239
240/******************************************************************************
241 * NAND Flash
242 ******************************************************************************/
243#if defined(CONFIG_MTD_NAND_PLATFORM) || \
244	defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
245static void palmtx_nand_cmd_ctl(struct nand_chip *this, int cmd,
246				unsigned int ctrl)
247{
248	char __iomem *nandaddr = this->legacy.IO_ADDR_W;
 
249
250	if (cmd == NAND_CMD_NONE)
251		return;
252
253	if (ctrl & NAND_CLE)
254		writeb(cmd, PALMTX_NAND_CLE_VIRT);
255	else if (ctrl & NAND_ALE)
256		writeb(cmd, PALMTX_NAND_ALE_VIRT);
257	else
258		writeb(cmd, nandaddr);
259}
260
261static struct mtd_partition palmtx_partition_info[] = {
262	[0] = {
263		.name	= "palmtx-0",
264		.offset	= 0,
265		.size	= MTDPART_SIZ_FULL
266	},
267};
268
269struct platform_nand_data palmtx_nand_platdata = {
270	.chip	= {
271		.nr_chips		= 1,
272		.chip_offset		= 0,
273		.nr_partitions		= ARRAY_SIZE(palmtx_partition_info),
274		.partitions		= palmtx_partition_info,
275		.chip_delay		= 20,
276	},
277	.ctrl	= {
278		.cmd_ctrl	= palmtx_nand_cmd_ctl,
279	},
280};
281
282static struct resource palmtx_nand_resource[] = {
283	[0]	= {
284		.start	= PXA_CS1_PHYS,
285		.end	= PXA_CS1_PHYS + SZ_1M - 1,
286		.flags	= IORESOURCE_MEM,
287	},
288};
289
290static struct platform_device palmtx_nand = {
291	.name		= "gen_nand",
292	.num_resources	= ARRAY_SIZE(palmtx_nand_resource),
293	.resource	= palmtx_nand_resource,
294	.id		= -1,
295	.dev		= {
296		.platform_data	= &palmtx_nand_platdata,
297	}
298};
299
300static void __init palmtx_nand_init(void)
301{
302	platform_device_register(&palmtx_nand);
303}
304#else
305static inline void palmtx_nand_init(void) {}
306#endif
307
308/******************************************************************************
309 * Machine init
310 ******************************************************************************/
311static struct map_desc palmtx_io_desc[] __initdata = {
312{
313	.virtual	= (unsigned long)PALMTX_PCMCIA_VIRT,
314	.pfn		= __phys_to_pfn(PALMTX_PCMCIA_PHYS),
315	.length		= PALMTX_PCMCIA_SIZE,
316	.type		= MT_DEVICE,
317}, {
318	.virtual	= (unsigned long)PALMTX_NAND_ALE_VIRT,
319	.pfn		= __phys_to_pfn(PALMTX_NAND_ALE_PHYS),
320	.length		= SZ_1M,
321	.type		= MT_DEVICE,
322}, {
323	.virtual	= (unsigned long)PALMTX_NAND_CLE_VIRT,
324	.pfn		= __phys_to_pfn(PALMTX_NAND_CLE_PHYS),
325	.length		= SZ_1M,
326	.type		= MT_DEVICE,
327}
328};
329
330static void __init palmtx_map_io(void)
331{
332	pxa27x_map_io();
333	iotable_init(palmtx_io_desc, ARRAY_SIZE(palmtx_io_desc));
334}
335
336static struct gpiod_lookup_table palmtx_mci_gpio_table = {
337	.dev_id = "pxa2xx-mci.0",
338	.table = {
339		GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTX_SD_DETECT_N,
340			    "cd", GPIO_ACTIVE_LOW),
341		GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTX_SD_READONLY,
342			    "wp", GPIO_ACTIVE_LOW),
343		GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTX_SD_POWER,
344			    "power", GPIO_ACTIVE_HIGH),
345		{ },
346	},
347};
348
349static void __init palmtx_init(void)
350{
351	pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config));
352	pxa_set_ffuart_info(NULL);
353	pxa_set_btuart_info(NULL);
354	pxa_set_stuart_info(NULL);
355
356	palm27x_mmc_init(&palmtx_mci_gpio_table);
 
357	palm27x_pm_init(PALMTX_STR_BASE);
358	palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
359	palm27x_udc_init(GPIO_NR_PALMTX_USB_DETECT_N,
360			GPIO_NR_PALMTX_USB_PULLUP, 1);
361	palm27x_irda_init(GPIO_NR_PALMTX_IR_DISABLE);
362	palm27x_ac97_init(PALMTX_BAT_MIN_VOLTAGE, PALMTX_BAT_MAX_VOLTAGE,
363			GPIO_NR_PALMTX_EARPHONE_DETECT, 95);
364	palm27x_pwm_init(GPIO_NR_PALMTX_BL_POWER, GPIO_NR_PALMTX_LCD_POWER);
365	palm27x_power_init(GPIO_NR_PALMTX_POWER_DETECT, -1);
366	palm27x_pmic_init();
367	palmtx_kpc_init();
368	palmtx_keys_init();
369	palmtx_nor_init();
370	palmtx_nand_init();
371}
372
373MACHINE_START(PALMTX, "Palm T|X")
374	.atag_offset	= 0x100,
375	.map_io		= palmtx_map_io,
376	.nr_irqs	= PXA_NR_IRQS,
377	.init_irq	= pxa27x_init_irq,
378	.handle_irq	= pxa27x_handle_irq,
379	.init_time	= pxa_timer_init,
380	.init_machine	= palmtx_init,
381	.restart	= pxa_restart,
382MACHINE_END