diff options
Diffstat (limited to 'arch/arm/mach-omap2/board-overo.c')
| -rw-r--r-- | arch/arm/mach-omap2/board-overo.c | 74 | 
1 files changed, 42 insertions, 32 deletions
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index 87acb2f198e..4c484361835 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c @@ -58,8 +58,6 @@  #define OVERO_GPIO_USBH_NRESET	183  #define NAND_BLOCK_SIZE SZ_128K -#define GPMC_CS0_BASE  0x60 -#define GPMC_CS_SIZE   0x30  #define OVERO_SMSC911X_CS      5  #define OVERO_SMSC911X_GPIO    176 @@ -166,9 +164,26 @@ static struct platform_device overo_smsc911x_device = {  	},  }; +static struct platform_device overo_smsc911x2_device = { +	.name		= "smsc911x", +	.id		= 1, +	.num_resources	= ARRAY_SIZE(overo_smsc911x2_resources), +	.resource	= overo_smsc911x2_resources, +	.dev		= { +		.platform_data = &overo_smsc911x_config, +	}, +}; + +static struct platform_device *smsc911x_devices[] = { +	&overo_smsc911x_device, +	&overo_smsc911x2_device, +}; +  static inline void __init overo_init_smsc911x(void)  { -	unsigned long cs_mem_base; +	unsigned long cs_mem_base, cs_mem_base2; + +	/* set up first smsc911x chip */  	if (gpmc_cs_request(OVERO_SMSC911X_CS, SZ_16M, &cs_mem_base) < 0) {  		printk(KERN_ERR "Failed request for GPMC mem for smsc911x\n"); @@ -189,7 +204,28 @@ static inline void __init overo_init_smsc911x(void)  	overo_smsc911x_resources[1].start = OMAP_GPIO_IRQ(OVERO_SMSC911X_GPIO);  	overo_smsc911x_resources[1].end	  = 0; -	platform_device_register(&overo_smsc911x_device); +	/* set up second smsc911x chip */ + +	if (gpmc_cs_request(OVERO_SMSC911X2_CS, SZ_16M, &cs_mem_base2) < 0) { +		printk(KERN_ERR "Failed request for GPMC mem for smsc911x2\n"); +		return; +	} + +	overo_smsc911x2_resources[0].start = cs_mem_base2 + 0x0; +	overo_smsc911x2_resources[0].end   = cs_mem_base2 + 0xff; + +	if ((gpio_request(OVERO_SMSC911X2_GPIO, "SMSC911X2 IRQ") == 0) && +	    (gpio_direction_input(OVERO_SMSC911X2_GPIO) == 0)) { +		gpio_export(OVERO_SMSC911X2_GPIO, 0); +	} else { +		printk(KERN_ERR "could not obtain gpio for SMSC911X2 IRQ\n"); +		return; +	} + +	overo_smsc911x2_resources[1].start = OMAP_GPIO_IRQ(OVERO_SMSC911X2_GPIO); +	overo_smsc911x2_resources[1].end   = 0; + +	platform_add_devices(smsc911x_devices, ARRAY_SIZE(smsc911x_devices));  }  #else @@ -231,28 +267,11 @@ static struct omap_nand_platform_data overo_nand_data = {  	.dma_channel = -1,	/* disable DMA in OMAP NAND driver */  }; -static struct resource overo_nand_resource = { -	.flags		= IORESOURCE_MEM, -}; - -static struct platform_device overo_nand_device = { -	.name		= "omap2-nand", -	.id		= -1, -	.dev		= { -		.platform_data	= &overo_nand_data, -	}, -	.num_resources	= 1, -	.resource	= &overo_nand_resource, -}; - -  static void __init overo_flash_init(void)  {  	u8 cs = 0;  	u8 nandcs = GPMC_CS_NUM + 1; -	u32 gpmc_base_add = OMAP34XX_GPMC_VIRT; -  	/* find out the chip-select on which NAND exists */  	while (cs < GPMC_CS_NUM) {  		u32 ret = 0; @@ -274,12 +293,9 @@ static void __init overo_flash_init(void)  	if (nandcs < GPMC_CS_NUM) {  		overo_nand_data.cs = nandcs; -		overo_nand_data.gpmc_cs_baseaddr = (void *) -			(gpmc_base_add + GPMC_CS0_BASE + nandcs * GPMC_CS_SIZE); -		overo_nand_data.gpmc_baseaddr = (void *) (gpmc_base_add);  		printk(KERN_INFO "Registering NAND on CS%d\n", nandcs); -		if (platform_device_register(&overo_nand_device) < 0) +		if (gpmc_nand_init(&overo_nand_data) < 0)  			printk(KERN_ERR "Unable to register NAND device\n");  	}  } @@ -484,17 +500,11 @@ static void __init overo_init(void)  					"OVERO_GPIO_USBH_CPEN\n");  } -static void __init overo_map_io(void) -{ -	omap2_set_globals_343x(); -	omap34xx_map_common_io(); -} -  MACHINE_START(OVERO, "Gumstix Overo")  	.phys_io	= 0x48000000,  	.io_pg_offst	= ((0xfa000000) >> 18) & 0xfffc,  	.boot_params	= 0x80000100, -	.map_io		= overo_map_io, +	.map_io		= omap3_map_io,  	.reserve	= omap_reserve,  	.init_irq	= overo_init_irq,  	.init_machine	= overo_init,  |