]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/input/serio/i8042-sparcio.h
Merge commit 'v2.6.27-rc7' into x86/debug
[linux-2.6-omap-h63xx.git] / drivers / input / serio / i8042-sparcio.h
index 7d9fafea9615b76d8adcad8e1e7ddd84a10380ac..692a79ec2a22327e98c94ef4946fe2f69b6747da 100644 (file)
@@ -1,10 +1,11 @@
 #ifndef _I8042_SPARCIO_H
 #define _I8042_SPARCIO_H
 
+#include <linux/of_device.h>
+
 #include <asm/io.h>
 #include <asm/oplib.h>
 #include <asm/prom.h>
-#include <asm/of_device.h>
 
 static int i8042_kbd_irq = -1;
 static int i8042_aux_irq = -1;
@@ -16,6 +17,7 @@ static int i8042_aux_irq = -1;
 #define I8042_MUX_PHYS_DESC "sparcps2/serio%d"
 
 static void __iomem *kbd_iobase;
+static struct resource *kbd_res;
 
 #define I8042_COMMAND_REG      (kbd_iobase + 0x64UL)
 #define I8042_DATA_REG         (kbd_iobase + 0x60UL)
@@ -40,6 +42,8 @@ static inline void i8042_write_command(int val)
        writeb(val, kbd_iobase + 0x64UL);
 }
 
+#ifdef CONFIG_PCI
+
 #define OBP_PS2KBD_NAME1       "kb_ps2"
 #define OBP_PS2KBD_NAME2       "keyboard"
 #define OBP_PS2MS_NAME1                "kdmouse"
@@ -60,6 +64,7 @@ static int __devinit sparc_i8042_probe(struct of_device *op, const struct of_dev
                        i8042_kbd_irq = irq;
                        kbd_iobase = of_ioremap(&kbd->resource[0],
                                                0, 8, "kbd");
+                       kbd_res = &kbd->resource[0];
                } else if (!strcmp(dp->name, OBP_PS2MS_NAME1) ||
                           !strcmp(dp->name, OBP_PS2MS_NAME2)) {
                        struct of_device *ms = of_find_device_by_node(dp);
@@ -77,7 +82,7 @@ static int __devinit sparc_i8042_probe(struct of_device *op, const struct of_dev
 
 static int __devexit sparc_i8042_remove(struct of_device *op)
 {
-       of_iounmap(kbd_iobase, 8);
+       of_iounmap(kbd_res, kbd_iobase, 8);
 
        return 0;
 }
@@ -88,7 +93,7 @@ static struct of_device_id sparc_i8042_match[] = {
        },
        {},
 };
-MODULE_DEVICE_TABLE(of, i8042_match);
+MODULE_DEVICE_TABLE(of, sparc_i8042_match);
 
 static struct of_platform_driver sparc_i8042_driver = {
        .name           = "i8042",
@@ -99,9 +104,6 @@ static struct of_platform_driver sparc_i8042_driver = {
 
 static int __init i8042_platform_init(void)
 {
-#ifndef CONFIG_PCI
-       return -ENODEV;
-#else
        struct device_node *root = of_find_node_by_path("/");
 
        if (!strcmp(root->name, "SUNW,JavaStation-1")) {
@@ -119,7 +121,7 @@ static int __init i8042_platform_init(void)
                if (i8042_kbd_irq == -1 ||
                    i8042_aux_irq == -1) {
                        if (kbd_iobase) {
-                               of_iounmap(kbd_iobase, 8);
+                               of_iounmap(kbd_res, kbd_iobase, 8);
                                kbd_iobase = (void __iomem *) NULL;
                        }
                        return -ENODEV;
@@ -129,17 +131,25 @@ static int __init i8042_platform_init(void)
        i8042_reset = 1;
 
        return 0;
-#endif /* CONFIG_PCI */
 }
 
 static inline void i8042_platform_exit(void)
 {
-#ifdef CONFIG_PCI
        struct device_node *root = of_find_node_by_path("/");
 
        if (strcmp(root->name, "SUNW,JavaStation-1"))
                of_unregister_driver(&sparc_i8042_driver);
-#endif
 }
 
+#else /* !CONFIG_PCI */
+static int __init i8042_platform_init(void)
+{
+       return -ENODEV;
+}
+
+static inline void i8042_platform_exit(void)
+{
+}
+#endif /* !CONFIG_PCI */
+
 #endif /* _I8042_SPARCIO_H */