Pull sbs into release branch
[pandora-kernel.git] / arch / arm / mach-pxa / pxa25x.c
index 573a575..f36ca44 100644 (file)
  * initialization stuff for PXA machines which can be overridden later if
  * need be.
  */
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/platform_device.h>
 #include <linux/pm.h>
 
 #include <asm/hardware.h>
+#include <asm/arch/irqs.h>
 #include <asm/arch/pxa-regs.h>
+#include <asm/arch/pm.h>
+#include <asm/arch/dma.h>
 
 #include "generic.h"
+#include "devices.h"
 
 /*
  * Various clock factors driven by the CCCR register.
@@ -106,18 +110,6 @@ EXPORT_SYMBOL(get_lcdclk_frequency_10khz);
 
 #ifdef CONFIG_PM
 
-int pxa_cpu_pm_prepare(suspend_state_t state)
-{
-       switch (state) {
-       case PM_SUSPEND_MEM:
-               break;
-       default:
-               return -EINVAL;
-       }
-
-       return 0;
-}
-
 void pxa_cpu_pm_enter(suspend_state_t state)
 {
        extern void pxa_cpu_suspend(unsigned int);
@@ -134,4 +126,49 @@ void pxa_cpu_pm_enter(suspend_state_t state)
        }
 }
 
+static struct pm_ops pxa25x_pm_ops = {
+       .enter          = pxa_pm_enter,
+       .valid          = pm_valid_only_mem,
+};
+#endif
+
+void __init pxa25x_init_irq(void)
+{
+       pxa_init_irq_low();
+       pxa_init_irq_gpio(85);
+}
+
+static struct platform_device *pxa25x_devices[] __initdata = {
+       &pxamci_device,
+       &pxaudc_device,
+       &pxafb_device,
+       &ffuart_device,
+       &btuart_device,
+       &stuart_device,
+       &pxai2c_device,
+       &pxai2s_device,
+       &pxaficp_device,
+       &pxartc_device,
+};
+
+static int __init pxa25x_init(void)
+{
+       int ret = 0;
+
+       if (cpu_is_pxa21x() || cpu_is_pxa25x()) {
+               if ((ret = pxa_init_dma(16)))
+                       return ret;
+#ifdef CONFIG_PM
+               pm_set_ops(&pxa25x_pm_ops);
 #endif
+               ret = platform_add_devices(pxa25x_devices,
+                                          ARRAY_SIZE(pxa25x_devices));
+       }
+       /* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */
+       if (cpu_is_pxa25x())
+               ret = platform_device_register(&hwuart_device);
+
+       return ret;
+}
+
+subsys_initcall(pxa25x_init);