diff options
Diffstat (limited to 'arch/arm/mach-sa1100/generic.c')
| -rw-r--r-- | arch/arm/mach-sa1100/generic.c | 151 | 
1 files changed, 64 insertions, 87 deletions
diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c index 7c1ebf4a792..1d0f71b17a2 100644 --- a/arch/arm/mach-sa1100/generic.c +++ b/arch/arm/mach-sa1100/generic.c @@ -14,18 +14,23 @@  #include <linux/kernel.h>  #include <linux/init.h>  #include <linux/delay.h> +#include <linux/dma-mapping.h>  #include <linux/pm.h>  #include <linux/cpufreq.h>  #include <linux/ioport.h>  #include <linux/platform_device.h> +#include <video/sa1100fb.h> +  #include <asm/div64.h> -#include <mach/hardware.h>  #include <asm/system.h>  #include <asm/mach/map.h>  #include <asm/mach/flash.h>  #include <asm/irq.h> +#include <mach/hardware.h> +#include <mach/irqs.h> +  #include "generic.h"  unsigned int reset_status; @@ -149,16 +154,8 @@ static void sa11x0_register_device(struct platform_device *dev, void *data)  static struct resource sa11x0udc_resources[] = { -	[0] = { -		.start	= __PREG(Ser0UDCCR), -		.end	= __PREG(Ser0UDCCR) + 0xffff, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= IRQ_Ser0UDC, -		.end	= IRQ_Ser0UDC, -		.flags	= IORESOURCE_IRQ, -	}, +	[0] = DEFINE_RES_MEM(__PREG(Ser0UDCCR), SZ_64K), +	[1] = DEFINE_RES_IRQ(IRQ_Ser0UDC),  };  static u64 sa11x0udc_dma_mask = 0xffffffffUL; @@ -175,16 +172,8 @@ static struct platform_device sa11x0udc_device = {  };  static struct resource sa11x0uart1_resources[] = { -	[0] = { -		.start	= __PREG(Ser1UTCR0), -		.end	= __PREG(Ser1UTCR0) + 0xffff, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= IRQ_Ser1UART, -		.end	= IRQ_Ser1UART, -		.flags	= IORESOURCE_IRQ, -	}, +	[0] = DEFINE_RES_MEM(__PREG(Ser1UTCR0), SZ_64K), +	[1] = DEFINE_RES_IRQ(IRQ_Ser1UART),  };  static struct platform_device sa11x0uart1_device = { @@ -195,16 +184,8 @@ static struct platform_device sa11x0uart1_device = {  };  static struct resource sa11x0uart3_resources[] = { -	[0] = { -		.start	= __PREG(Ser3UTCR0), -		.end	= __PREG(Ser3UTCR0) + 0xffff, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= IRQ_Ser3UART, -		.end	= IRQ_Ser3UART, -		.flags	= IORESOURCE_IRQ, -	}, +	[0] = DEFINE_RES_MEM(__PREG(Ser3UTCR0), SZ_64K), +	[1] = DEFINE_RES_IRQ(IRQ_Ser3UART),  };  static struct platform_device sa11x0uart3_device = { @@ -215,16 +196,9 @@ static struct platform_device sa11x0uart3_device = {  };  static struct resource sa11x0mcp_resources[] = { -	[0] = { -		.start	= __PREG(Ser4MCCR0), -		.end	= __PREG(Ser4MCCR0) + 0xffff, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= IRQ_Ser4MCP, -		.end	= IRQ_Ser4MCP, -		.flags	= IORESOURCE_IRQ, -	}, +	[0] = DEFINE_RES_MEM(__PREG(Ser4MCCR0), SZ_64K), +	[1] = DEFINE_RES_MEM(__PREG(Ser4MCCR1), 4), +	[2] = DEFINE_RES_IRQ(IRQ_Ser4MCP),  };  static u64 sa11x0mcp_dma_mask = 0xffffffffUL; @@ -240,22 +214,24 @@ static struct platform_device sa11x0mcp_device = {  	.resource	= sa11x0mcp_resources,  }; +void __init sa11x0_ppc_configure_mcp(void) +{ +	/* Setup the PPC unit for the MCP */ +	PPDR &= ~PPC_RXD4; +	PPDR |= PPC_TXD4 | PPC_SCLK | PPC_SFRM; +	PSDR |= PPC_RXD4; +	PSDR &= ~(PPC_TXD4 | PPC_SCLK | PPC_SFRM); +	PPSR &= ~(PPC_TXD4 | PPC_SCLK | PPC_SFRM); +} +  void sa11x0_register_mcp(struct mcp_plat_data *data)  {  	sa11x0_register_device(&sa11x0mcp_device, data);  }  static struct resource sa11x0ssp_resources[] = { -	[0] = { -		.start	= 0x80070000, -		.end	= 0x8007ffff, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= IRQ_Ser4SSP, -		.end	= IRQ_Ser4SSP, -		.flags	= IORESOURCE_IRQ, -	}, +	[0] = DEFINE_RES_MEM(0x80070000, SZ_64K), +	[1] = DEFINE_RES_IRQ(IRQ_Ser4SSP),  };  static u64 sa11x0ssp_dma_mask = 0xffffffffUL; @@ -272,16 +248,8 @@ static struct platform_device sa11x0ssp_device = {  };  static struct resource sa11x0fb_resources[] = { -	[0] = { -		.start	= 0xb0100000, -		.end	= 0xb010ffff, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= IRQ_LCD, -		.end	= IRQ_LCD, -		.flags	= IORESOURCE_IRQ, -	}, +	[0] = DEFINE_RES_MEM(0xb0100000, SZ_64K), +	[1] = DEFINE_RES_IRQ(IRQ_LCD),  };  static struct platform_device sa11x0fb_device = { @@ -294,6 +262,11 @@ static struct platform_device sa11x0fb_device = {  	.resource	= sa11x0fb_resources,  }; +void sa11x0_register_lcd(struct sa1100fb_mach_info *inf) +{ +	sa11x0_register_device(&sa11x0fb_device, inf); +} +  static struct platform_device sa11x0pcmcia_device = {  	.name		= "sa11x0-pcmcia",  	.id		= -1, @@ -314,23 +287,10 @@ void sa11x0_register_mtd(struct flash_platform_data *flash,  }  static struct resource sa11x0ir_resources[] = { -	{ -		.start	= __PREG(Ser2UTCR0), -		.end	= __PREG(Ser2UTCR0) + 0x24 - 1, -		.flags	= IORESOURCE_MEM, -	}, { -		.start	= __PREG(Ser2HSCR0), -		.end	= __PREG(Ser2HSCR0) + 0x1c - 1, -		.flags	= IORESOURCE_MEM, -	}, { -		.start	= __PREG(Ser2HSCR2), -		.end	= __PREG(Ser2HSCR2) + 0x04 - 1, -		.flags	= IORESOURCE_MEM, -	}, { -		.start	= IRQ_Ser2ICP, -		.end	= IRQ_Ser2ICP, -		.flags	= IORESOURCE_IRQ, -	} +	DEFINE_RES_MEM(__PREG(Ser2UTCR0), 0x24), +	DEFINE_RES_MEM(__PREG(Ser2HSCR0), 0x1c), +	DEFINE_RES_MEM(__PREG(Ser2HSCR2), 0x04), +	DEFINE_RES_IRQ(IRQ_Ser2ICP),  };  static struct platform_device sa11x0ir_device = { @@ -358,14 +318,37 @@ static struct platform_device sa11x0rtc_device = {  	.resource	= sa1100_rtc_resources,  }; +static struct resource sa11x0dma_resources[] = { +	DEFINE_RES_MEM(DMA_PHYS, DMA_SIZE), +	DEFINE_RES_IRQ(IRQ_DMA0), +	DEFINE_RES_IRQ(IRQ_DMA1), +	DEFINE_RES_IRQ(IRQ_DMA2), +	DEFINE_RES_IRQ(IRQ_DMA3), +	DEFINE_RES_IRQ(IRQ_DMA4), +	DEFINE_RES_IRQ(IRQ_DMA5), +}; + +static u64 sa11x0dma_dma_mask = DMA_BIT_MASK(32); + +static struct platform_device sa11x0dma_device = { +	.name		= "sa11x0-dma", +	.id		= -1, +	.dev = { +		.dma_mask = &sa11x0dma_dma_mask, +		.coherent_dma_mask = 0xffffffff, +	}, +	.num_resources	= ARRAY_SIZE(sa11x0dma_resources), +	.resource	= sa11x0dma_resources, +}; +  static struct platform_device *sa11x0_devices[] __initdata = {  	&sa11x0udc_device,  	&sa11x0uart1_device,  	&sa11x0uart3_device,  	&sa11x0ssp_device,  	&sa11x0pcmcia_device, -	&sa11x0fb_device,  	&sa11x0rtc_device, +	&sa11x0dma_device,  };  static int __init sa1100_init(void) @@ -376,12 +359,6 @@ static int __init sa1100_init(void)  arch_initcall(sa1100_init); -void (*sa1100fb_backlight_power)(int on); -void (*sa1100fb_lcd_power)(int on); - -EXPORT_SYMBOL(sa1100fb_backlight_power); -EXPORT_SYMBOL(sa1100fb_lcd_power); -  /*   * Common I/O mapping: @@ -436,7 +413,7 @@ void __init sa1100_map_io(void)   * the MBGNT signal false to ensure the SA1111 doesn't own the   * SDRAM bus.   */ -void __init sa1110_mb_disable(void) +void sa1110_mb_disable(void)  {  	unsigned long flags; @@ -455,7 +432,7 @@ void __init sa1110_mb_disable(void)   * If the system is going to use the SA-1111 DMA engines, set up   * the memory bus request/grant pins.   */ -void __devinit sa1110_mb_enable(void) +void sa1110_mb_enable(void)  {  	unsigned long flags;  |