VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / drivers / pcmcia / i82365.c
index e98adb1..b753c31 100644 (file)
@@ -65,7 +65,6 @@
 #include "cirrus.h"
 #include "vg468.h"
 #include "ricoh.h"
-#include "o2micro.h"
 
 #ifdef DEBUG
 static const char version[] =
@@ -1308,10 +1307,10 @@ static int pcic_set_mem_map(struct pcmcia_socket *s, struct pccard_mem_map *mem)
 static int pcic_init(struct pcmcia_socket *s)
 {
        int i;
+       struct resource res = { .start = 0, .end = 0x1000 };
        pccard_io_map io = { 0, 0, 0, 0, 1 };
-       pccard_mem_map mem = { 0, 0, 0, 0, 0, 0 };
+       pccard_mem_map mem = { .res = &res, .sys_stop = 0x1000, };
 
-       mem.sys_stop = 0x1000;
        for (i = 0; i < 2; i++) {
                io.map = i;
                pcic_set_io_map(s, &io);
@@ -1372,8 +1371,15 @@ static int __init init_i82365(void)
 {
     int i, ret;
 
-    if (driver_register(&i82365_driver))
-       return -1;
+    ret = driver_register(&i82365_driver);
+    if (ret)
+       return ret;
+
+    ret = platform_device_register(&i82365_device);
+    if (ret) {
+       driver_unregister(&i82365_driver);
+       return ret;
+    }
 
     printk(KERN_INFO "Intel ISA PCIC probe: ");
     sockets = 0;
@@ -1382,12 +1388,11 @@ static int __init init_i82365(void)
 
     if (sockets == 0) {
        printk("not found.\n");
+       platform_device_unregister(&i82365_device);
        driver_unregister(&i82365_driver);
        return -ENODEV;
     }
 
-    platform_device_register(&i82365_device);
-
     /* Set up interrupt handler(s) */
     if (grab_irq != 0)
        request_irq(cs_irq, pcic_interrupt, 0, "i82365", pcic_interrupt);