[ARM] Only call set_type method in setup_irq if it's defined
[powerpc.git] / arch / arm / common / sa1111.c
index 1a47fbf..d0d6e6d 100644 (file)
@@ -22,7 +22,7 @@
 #include <linux/ptrace.h>
 #include <linux/errno.h>
 #include <linux/ioport.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
 #include <linux/dma-mapping.h>
@@ -32,6 +32,7 @@
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/mach/irq.h>
+#include <asm/sizes.h>
 
 #include <asm/hardware/sa1111.h>
 
@@ -132,6 +133,17 @@ static struct sa1111_dev_info sa1111_devices[] = {
        },
 };
 
+void __init sa1111_adjust_zones(int node, unsigned long *size, unsigned long *holes)
+{
+       unsigned int sz = SZ_1M >> PAGE_SHIFT;
+
+       if (node != 0)
+               sz = 0;
+
+       size[1] = size[0] - sz;
+       size[0] = sz;
+}
+
 /*
  * SA1111 interrupt support.  Since clearing an IRQ while there are
  * active IRQs causes the interrupt output to pulse, the upper levels
@@ -801,21 +813,18 @@ struct sa1111_save_data {
 
 #ifdef CONFIG_PM
 
-static int sa1111_suspend(struct device *dev, pm_message_t state, u32 level)
+static int sa1111_suspend(struct platform_device *dev, pm_message_t state)
 {
-       struct sa1111 *sachip = dev_get_drvdata(dev);
+       struct sa1111 *sachip = platform_get_drvdata(dev);
        struct sa1111_save_data *save;
        unsigned long flags;
        unsigned int val;
        void __iomem *base;
 
-       if (level != SUSPEND_DISABLE)
-               return 0;
-
        save = kmalloc(sizeof(struct sa1111_save_data), GFP_KERNEL);
        if (!save)
                return -ENOMEM;
-       dev->power.saved_state = save;
+       dev->dev.power.saved_state = save;
 
        spin_lock_irqsave(&sachip->lock, flags);
 
@@ -856,24 +865,20 @@ static int sa1111_suspend(struct device *dev, pm_message_t state, u32 level)
 /*
  *     sa1111_resume - Restore the SA1111 device state.
  *     @dev: device to restore
- *     @level: resume level
  *
  *     Restore the general state of the SA1111; clock control and
  *     interrupt controller.  Other parts of the SA1111 must be
  *     restored by their respective drivers, and must be called
  *     via LDM after this function.
  */
-static int sa1111_resume(struct device *dev, u32 level)
+static int sa1111_resume(struct platform_device *dev)
 {
-       struct sa1111 *sachip = dev_get_drvdata(dev);
+       struct sa1111 *sachip = platform_get_drvdata(dev);
        struct sa1111_save_data *save;
        unsigned long flags, id;
        void __iomem *base;
 
-       if (level != RESUME_ENABLE)
-               return 0;
-
-       save = (struct sa1111_save_data *)dev->power.saved_state;
+       save = (struct sa1111_save_data *)dev->dev.power.saved_state;
        if (!save)
                return 0;
 
@@ -886,7 +891,7 @@ static int sa1111_resume(struct device *dev, u32 level)
        id = sa1111_readl(sachip->base + SA1111_SKID);
        if ((id & SKID_ID_MASK) != SKID_SA1111_ID) {
                __sa1111_remove(sachip);
-               dev_set_drvdata(dev, NULL);
+               platform_set_drvdata(dev, NULL);
                kfree(save);
                return 0;
        }
@@ -918,7 +923,7 @@ static int sa1111_resume(struct device *dev, u32 level)
 
        spin_unlock_irqrestore(&sachip->lock, flags);
 
-       dev->power.saved_state = NULL;
+       dev->dev.power.saved_state = NULL;
        kfree(save);
 
        return 0;
@@ -929,9 +934,8 @@ static int sa1111_resume(struct device *dev, u32 level)
 #define sa1111_resume  NULL
 #endif
 
-static int sa1111_probe(struct device *dev)
+static int sa1111_probe(struct platform_device *pdev)
 {
-       struct platform_device *pdev = to_platform_device(dev);
        struct resource *mem;
        int irq;
 
@@ -940,20 +944,20 @@ static int sa1111_probe(struct device *dev)
                return -EINVAL;
        irq = platform_get_irq(pdev, 0);
 
-       return __sa1111_probe(dev, mem, irq);
+       return __sa1111_probe(&pdev->dev, mem, irq);
 }
 
-static int sa1111_remove(struct device *dev)
+static int sa1111_remove(struct platform_device *pdev)
 {
-       struct sa1111 *sachip = dev_get_drvdata(dev);
+       struct sa1111 *sachip = platform_get_drvdata(pdev);
 
        if (sachip) {
                __sa1111_remove(sachip);
-               dev_set_drvdata(dev, NULL);
+               platform_set_drvdata(pdev, NULL);
 
 #ifdef CONFIG_PM
-               kfree(dev->power.saved_state);
-               dev->power.saved_state = NULL;
+               kfree(pdev->dev.power.saved_state);
+               pdev->dev.power.saved_state = NULL;
 #endif
        }
 
@@ -969,13 +973,14 @@ static int sa1111_remove(struct device *dev)
  *     We also need to handle the SDRAM configuration for
  *     PXA250/SA1110 machine classes.
  */
-static struct device_driver sa1111_device_driver = {
-       .name           = "sa1111",
-       .bus            = &platform_bus_type,
+static struct platform_driver sa1111_device_driver = {
        .probe          = sa1111_probe,
        .remove         = sa1111_remove,
        .suspend        = sa1111_suspend,
        .resume         = sa1111_resume,
+       .driver         = {
+               .name   = "sa1111",
+       },
 };
 
 /*
@@ -1263,17 +1268,17 @@ static int __init sa1111_init(void)
 {
        int ret = bus_register(&sa1111_bus_type);
        if (ret == 0)
-               driver_register(&sa1111_device_driver);
+               platform_driver_register(&sa1111_device_driver);
        return ret;
 }
 
 static void __exit sa1111_exit(void)
 {
-       driver_unregister(&sa1111_device_driver);
+       platform_driver_unregister(&sa1111_device_driver);
        bus_unregister(&sa1111_bus_type);
 }
 
-module_init(sa1111_init);
+subsys_initcall(sa1111_init);
 module_exit(sa1111_exit);
 
 MODULE_DESCRIPTION("Intel Corporation SA1111 core driver");