xref: /openbmc/linux/arch/arm/mach-pxa/gumstix.c (revision 90b8fc34968d3f6c70e309d97597682f119220b9)
1*90b8fc34SJaya Kumar /*
2*90b8fc34SJaya Kumar  *  linux/arch/arm/mach-pxa/gumstix.c
3*90b8fc34SJaya Kumar  *
4*90b8fc34SJaya Kumar  *  Support for the Gumstix motherboards.
5*90b8fc34SJaya Kumar  *
6*90b8fc34SJaya Kumar  *  Original Author:	Craig Hughes
7*90b8fc34SJaya Kumar  *  Created:	Feb 14, 2008
8*90b8fc34SJaya Kumar  *  Copyright:	Craig Hughes
9*90b8fc34SJaya Kumar  *
10*90b8fc34SJaya Kumar  *  This program is free software; you can redistribute it and/or modify
11*90b8fc34SJaya Kumar  *  it under the terms of the GNU General Public License version 2 as
12*90b8fc34SJaya Kumar  *  published by the Free Software Foundation.
13*90b8fc34SJaya Kumar  *
14*90b8fc34SJaya Kumar  *  Implemented based on lubbock.c by Nicolas Pitre and code from Craig
15*90b8fc34SJaya Kumar  *  Hughes
16*90b8fc34SJaya Kumar  */
17*90b8fc34SJaya Kumar 
18*90b8fc34SJaya Kumar #include <linux/module.h>
19*90b8fc34SJaya Kumar #include <linux/kernel.h>
20*90b8fc34SJaya Kumar #include <linux/init.h>
21*90b8fc34SJaya Kumar #include <linux/platform_device.h>
22*90b8fc34SJaya Kumar #include <linux/interrupt.h>
23*90b8fc34SJaya Kumar #include <linux/mtd/mtd.h>
24*90b8fc34SJaya Kumar #include <linux/mtd/partitions.h>
25*90b8fc34SJaya Kumar 
26*90b8fc34SJaya Kumar #include <asm/setup.h>
27*90b8fc34SJaya Kumar #include <asm/memory.h>
28*90b8fc34SJaya Kumar #include <asm/mach-types.h>
29*90b8fc34SJaya Kumar #include <asm/hardware.h>
30*90b8fc34SJaya Kumar #include <asm/irq.h>
31*90b8fc34SJaya Kumar #include <asm/sizes.h>
32*90b8fc34SJaya Kumar 
33*90b8fc34SJaya Kumar #include <asm/mach/arch.h>
34*90b8fc34SJaya Kumar #include <asm/mach/map.h>
35*90b8fc34SJaya Kumar #include <asm/mach/irq.h>
36*90b8fc34SJaya Kumar #include <asm/mach/flash.h>
37*90b8fc34SJaya Kumar #include <asm/arch/mmc.h>
38*90b8fc34SJaya Kumar #include <asm/arch/udc.h>
39*90b8fc34SJaya Kumar #include <asm/arch/gumstix.h>
40*90b8fc34SJaya Kumar 
41*90b8fc34SJaya Kumar #include <asm/arch/pxa-regs.h>
42*90b8fc34SJaya Kumar #include <asm/arch/pxa2xx-regs.h>
43*90b8fc34SJaya Kumar 
44*90b8fc34SJaya Kumar #include "generic.h"
45*90b8fc34SJaya Kumar 
46*90b8fc34SJaya Kumar static struct resource flash_resource = {
47*90b8fc34SJaya Kumar 	.start	= 0x00000000,
48*90b8fc34SJaya Kumar 	.end	= SZ_64M - 1,
49*90b8fc34SJaya Kumar 	.flags	= IORESOURCE_MEM,
50*90b8fc34SJaya Kumar };
51*90b8fc34SJaya Kumar 
52*90b8fc34SJaya Kumar static struct mtd_partition gumstix_partitions[] = {
53*90b8fc34SJaya Kumar 	{
54*90b8fc34SJaya Kumar 		.name =		"Bootloader",
55*90b8fc34SJaya Kumar 		.size =		0x00040000,
56*90b8fc34SJaya Kumar 		.offset =	0,
57*90b8fc34SJaya Kumar 		.mask_flags =	MTD_WRITEABLE  /* force read-only */
58*90b8fc34SJaya Kumar 	} , {
59*90b8fc34SJaya Kumar 		.name =		"rootfs",
60*90b8fc34SJaya Kumar 		.size =		MTDPART_SIZ_FULL,
61*90b8fc34SJaya Kumar 		.offset =	MTDPART_OFS_APPEND
62*90b8fc34SJaya Kumar 	}
63*90b8fc34SJaya Kumar };
64*90b8fc34SJaya Kumar 
65*90b8fc34SJaya Kumar static struct flash_platform_data gumstix_flash_data = {
66*90b8fc34SJaya Kumar 	.map_name	= "cfi_probe",
67*90b8fc34SJaya Kumar 	.parts		= gumstix_partitions,
68*90b8fc34SJaya Kumar 	.nr_parts	= ARRAY_SIZE(gumstix_partitions),
69*90b8fc34SJaya Kumar 	.width		= 2,
70*90b8fc34SJaya Kumar };
71*90b8fc34SJaya Kumar 
72*90b8fc34SJaya Kumar static struct platform_device gumstix_flash_device = {
73*90b8fc34SJaya Kumar 	.name		= "pxa2xx-flash",
74*90b8fc34SJaya Kumar 	.id		= 0,
75*90b8fc34SJaya Kumar 	.dev = {
76*90b8fc34SJaya Kumar 		.platform_data = &gumstix_flash_data,
77*90b8fc34SJaya Kumar 	},
78*90b8fc34SJaya Kumar 	.resource = &flash_resource,
79*90b8fc34SJaya Kumar 	.num_resources = 1,
80*90b8fc34SJaya Kumar };
81*90b8fc34SJaya Kumar 
82*90b8fc34SJaya Kumar static struct platform_device *devices[] __initdata = {
83*90b8fc34SJaya Kumar 	&gumstix_flash_device,
84*90b8fc34SJaya Kumar };
85*90b8fc34SJaya Kumar 
86*90b8fc34SJaya Kumar #ifdef CONFIG_MMC_PXA
87*90b8fc34SJaya Kumar static struct pxamci_platform_data gumstix_mci_platform_data;
88*90b8fc34SJaya Kumar 
89*90b8fc34SJaya Kumar static int gumstix_mci_init(struct device *dev, irq_handler_t detect_int,
90*90b8fc34SJaya Kumar 				void *data)
91*90b8fc34SJaya Kumar {
92*90b8fc34SJaya Kumar 	pxa_gpio_mode(GPIO6_MMCCLK_MD);
93*90b8fc34SJaya Kumar 	pxa_gpio_mode(GPIO53_MMCCLK_MD);
94*90b8fc34SJaya Kumar 	pxa_gpio_mode(GPIO8_MMCCS0_MD);
95*90b8fc34SJaya Kumar 
96*90b8fc34SJaya Kumar 	return 0;
97*90b8fc34SJaya Kumar }
98*90b8fc34SJaya Kumar 
99*90b8fc34SJaya Kumar static struct pxamci_platform_data gumstix_mci_platform_data = {
100*90b8fc34SJaya Kumar 	.ocr_mask	= MMC_VDD_32_33|MMC_VDD_33_34,
101*90b8fc34SJaya Kumar 	.init		= gumstix_mci_init,
102*90b8fc34SJaya Kumar };
103*90b8fc34SJaya Kumar 
104*90b8fc34SJaya Kumar static void __init gumstix_mmc_init(void)
105*90b8fc34SJaya Kumar {
106*90b8fc34SJaya Kumar 	pxa_set_mci_info(&gumstix_mci_platform_data);
107*90b8fc34SJaya Kumar }
108*90b8fc34SJaya Kumar #else
109*90b8fc34SJaya Kumar static void __init gumstix_mmc_init(void)
110*90b8fc34SJaya Kumar {
111*90b8fc34SJaya Kumar 	printk(KERN_INFO "Gumstix mmc disabled\n");
112*90b8fc34SJaya Kumar }
113*90b8fc34SJaya Kumar #endif
114*90b8fc34SJaya Kumar 
115*90b8fc34SJaya Kumar #ifdef CONFIG_USB_GADGET_PXA2XX
116*90b8fc34SJaya Kumar static struct pxa2xx_udc_mach_info gumstix_udc_info __initdata = {
117*90b8fc34SJaya Kumar 	.gpio_vbus		= GPIO_GUMSTIX_USB_GPIOn,
118*90b8fc34SJaya Kumar 	.gpio_pullup		= GPIO_GUMSTIX_USB_GPIOx,
119*90b8fc34SJaya Kumar };
120*90b8fc34SJaya Kumar 
121*90b8fc34SJaya Kumar static void __init gumstix_udc_init(void)
122*90b8fc34SJaya Kumar {
123*90b8fc34SJaya Kumar 	pxa_set_udc_info(&gumstix_udc_info);
124*90b8fc34SJaya Kumar }
125*90b8fc34SJaya Kumar #else
126*90b8fc34SJaya Kumar static void gumstix_udc_init(void)
127*90b8fc34SJaya Kumar {
128*90b8fc34SJaya Kumar 	printk(KERN_INFO "Gumstix udc is disabled\n");
129*90b8fc34SJaya Kumar }
130*90b8fc34SJaya Kumar #endif
131*90b8fc34SJaya Kumar 
132*90b8fc34SJaya Kumar static void __init gumstix_init(void)
133*90b8fc34SJaya Kumar {
134*90b8fc34SJaya Kumar 	gumstix_udc_init();
135*90b8fc34SJaya Kumar 	gumstix_mmc_init();
136*90b8fc34SJaya Kumar 	(void) platform_add_devices(devices, ARRAY_SIZE(devices));
137*90b8fc34SJaya Kumar }
138*90b8fc34SJaya Kumar 
139*90b8fc34SJaya Kumar MACHINE_START(GUMSTIX, "Gumstix")
140*90b8fc34SJaya Kumar 	.phys_io	= 0x40000000,
141*90b8fc34SJaya Kumar 	.boot_params	= 0xa0000100, /* match u-boot bi_boot_params */
142*90b8fc34SJaya Kumar 	.io_pg_offst	= (io_p2v(0x40000000) >> 18) & 0xfffc,
143*90b8fc34SJaya Kumar 	.map_io		= pxa_map_io,
144*90b8fc34SJaya Kumar 	.init_irq	= pxa25x_init_irq,
145*90b8fc34SJaya Kumar 	.timer		= &pxa_timer,
146*90b8fc34SJaya Kumar 	.init_machine	= gumstix_init,
147*90b8fc34SJaya Kumar MACHINE_END
148