diff options
Diffstat (limited to 'arch/arm/mach-pxa/cm-x2xx.c')
| -rw-r--r-- | arch/arm/mach-pxa/cm-x2xx.c | 75 | 
1 files changed, 42 insertions, 33 deletions
diff --git a/arch/arm/mach-pxa/cm-x2xx.c b/arch/arm/mach-pxa/cm-x2xx.c index d34b99febeb..bb99f59a36d 100644 --- a/arch/arm/mach-pxa/cm-x2xx.c +++ b/arch/arm/mach-pxa/cm-x2xx.c @@ -10,7 +10,7 @@   */  #include <linux/platform_device.h> -#include <linux/sysdev.h> +#include <linux/syscore_ops.h>  #include <linux/irq.h>  #include <linux/gpio.h> @@ -21,9 +21,12 @@  #include <asm/mach-types.h>  #include <asm/mach/map.h> -#include <mach/pxa2xx-regs.h> +#include <mach/pxa25x.h> +#undef GPIO24_SSP1_SFRM +#include <mach/pxa27x.h>  #include <mach/audio.h> -#include <mach/pxafb.h> +#include <linux/platform_data/video-pxafb.h> +#include <mach/smemc.h>  #include <asm/hardware/it8152.h> @@ -37,7 +40,7 @@ extern void cmx270_init(void);  #define CMX2XX_NR_IRQS		(IRQ_BOARD_START + 40)  /* virtual addresses for statically mapped regions */ -#define CMX2XX_VIRT_BASE	(0xe8000000) +#define CMX2XX_VIRT_BASE	(void __iomem *)(0xe8000000)  #define CMX2XX_IT8152_VIRT	(CMX2XX_VIRT_BASE)  /* physical address if local-bus attached devices */ @@ -56,8 +59,8 @@ extern void cmx270_init(void);  #define CMX255_GPIO_IT8152_IRQ	(0)  #define CMX270_GPIO_IT8152_IRQ	(22) -#define CMX255_ETHIRQ		IRQ_GPIO(GPIO22_ETHIRQ) -#define CMX270_ETHIRQ		IRQ_GPIO(GPIO10_ETHIRQ) +#define CMX255_ETHIRQ		PXA_GPIO_TO_IRQ(GPIO22_ETHIRQ) +#define CMX270_ETHIRQ		PXA_GPIO_TO_IRQ(GPIO10_ETHIRQ)  #if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)  static struct resource cmx255_dm9000_resource[] = { @@ -378,7 +381,7 @@ __setup("monitor=", cmx2xx_set_display);  static void __init cmx2xx_init_display(void)  { -	set_pxa_fb_info(cmx2xx_display); +	pxa_set_fb_info(NULL, cmx2xx_display);  }  #else  static inline void cmx2xx_init_display(void) {} @@ -387,14 +390,14 @@ static inline void cmx2xx_init_display(void) {}  #ifdef CONFIG_PM  static unsigned long sleep_save_msc[10]; -static int cmx2xx_suspend(struct sys_device *dev, pm_message_t state) +static int cmx2xx_suspend(void)  {  	cmx2xx_pci_suspend();  	/* save MSC registers */ -	sleep_save_msc[0] = MSC0; -	sleep_save_msc[1] = MSC1; -	sleep_save_msc[2] = MSC2; +	sleep_save_msc[0] = __raw_readl(MSC0); +	sleep_save_msc[1] = __raw_readl(MSC1); +	sleep_save_msc[2] = __raw_readl(MSC2);  	/* setup power saving mode registers */  	PCFR = 0x0; @@ -411,35 +414,26 @@ static int cmx2xx_suspend(struct sys_device *dev, pm_message_t state)  	return 0;  } -static int cmx2xx_resume(struct sys_device *dev) +static void cmx2xx_resume(void)  {  	cmx2xx_pci_resume();  	/* restore MSC registers */ -	MSC0 = sleep_save_msc[0]; -	MSC1 = sleep_save_msc[1]; -	MSC2 = sleep_save_msc[2]; - -	return 0; +	__raw_writel(sleep_save_msc[0], MSC0); +	__raw_writel(sleep_save_msc[1], MSC1); +	__raw_writel(sleep_save_msc[2], MSC2);  } -static struct sysdev_class cmx2xx_pm_sysclass = { -	.name = "pm", +static struct syscore_ops cmx2xx_pm_syscore_ops = {  	.resume = cmx2xx_resume,  	.suspend = cmx2xx_suspend,  }; -static struct sys_device cmx2xx_pm_device = { -	.cls = &cmx2xx_pm_sysclass, -}; -  static int __init cmx2xx_pm_init(void)  { -	int error; -	error = sysdev_class_register(&cmx2xx_pm_sysclass); -	if (error == 0) -		error = sysdev_register(&cmx2xx_pm_device); -	return error; +	register_syscore_ops(&cmx2xx_pm_syscore_ops); + +	return 0;  }  #else  static int __init cmx2xx_pm_init(void) { return 0; } @@ -489,7 +483,7 @@ static void __init cmx2xx_init_irq(void)  /* Map PCI companion statically */  static struct map_desc cmx2xx_io_desc[] __initdata = {  	[0] = { /* PCI bridge */ -		.virtual	= CMX2XX_IT8152_VIRT, +		.virtual	= (unsigned long)CMX2XX_IT8152_VIRT,  		.pfn		= __phys_to_pfn(PXA_CS4_PHYS),  		.length		= SZ_64M,  		.type		= MT_DEVICE @@ -498,7 +492,12 @@ static struct map_desc cmx2xx_io_desc[] __initdata = {  static void __init cmx2xx_map_io(void)  { -	pxa_map_io(); +	if (cpu_is_pxa25x()) +		pxa25x_map_io(); + +	if (cpu_is_pxa27x()) +		pxa27x_map_io(); +  	iotable_init(cmx2xx_io_desc, ARRAY_SIZE(cmx2xx_io_desc));  	it8152_base_address = CMX2XX_IT8152_VIRT; @@ -506,15 +505,25 @@ static void __init cmx2xx_map_io(void)  #else  static void __init cmx2xx_map_io(void)  { -	pxa_map_io(); +	if (cpu_is_pxa25x()) +		pxa25x_map_io(); + +	if (cpu_is_pxa27x()) +		pxa27x_map_io();  }  #endif  MACHINE_START(ARMCORE, "Compulab CM-X2XX") -	.boot_params	= 0xa0000100, +	.atag_offset	= 0x100,  	.map_io		= cmx2xx_map_io,  	.nr_irqs	= CMX2XX_NR_IRQS,  	.init_irq	= cmx2xx_init_irq, -	.timer		= &pxa_timer, +	/* NOTE: pxa25x_handle_irq() works on PXA27x w/o camera support */ +	.handle_irq	= pxa25x_handle_irq, +	.init_time	= pxa_timer_init,  	.init_machine	= cmx2xx_init, +#ifdef CONFIG_PCI +	.dma_zone_size	= SZ_64M, +#endif +	.restart	= pxa_restart,  MACHINE_END  | 
