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