]> err.no Git - linux-2.6/blobdiff - drivers/ide/legacy/buddha.c
ide: make remaining built-in only IDE host drivers modular (take 2)
[linux-2.6] / drivers / ide / legacy / buddha.c
index 1ed224a01f79ddd24e371740cccc55a4065e26fc..e97766aef37417b4bb56b2d9f97b369d6b943b15 100644 (file)
@@ -143,11 +143,11 @@ static int xsurf_ack_intr(ide_hwif_t *hwif)
      *  Probe for a Buddha or Catweasel IDE interface
      */
 
-void __init buddha_init(void)
+static int __init buddha_init(void)
 {
        hw_regs_t hw;
        ide_hwif_t *hwif;
-       int i, index;
+       int i;
 
        struct zorro_dev *z = NULL;
        u_long buddha_board = 0;
@@ -156,6 +156,8 @@ void __init buddha_init(void)
 
        while ((z = zorro_find_device(ZORRO_WILDCARD, z))) {
                unsigned long board;
+               u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
+
                if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA) {
                        buddha_num_hwifs = BUDDHA_NUM_HWIFS;
                        type=BOARD_BUDDHA;
@@ -212,9 +214,14 @@ fail_base2:
 //                                             xsurf_iops,
                                                IRQ_AMIGA_PORTS);
                        }       
-                       
-                       index = ide_register_hw(&hw, &hwif);
-                       if (index != -1) {
+
+                       hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
+                       if (hwif) {
+                               u8 index = hwif->index;
+
+                               ide_init_port_data(hwif, index);
+                               ide_init_port_hw(hwif, &hw);
+
                                hwif->mmio = 1;
                                printk("ide%d: ", index);
                                switch(type) {
@@ -228,8 +235,16 @@ fail_base2:
                                        printk("X-Surf");
                                        break;
                                }
-                               printk(" IDE interface\n");         
-                       }                     
+                               printk(" IDE interface\n");
+
+                               idx[i] = index;
+                       }
                }
+
+               ide_device_add(idx);
        }
+
+       return 0;
 }
+
+module_init(buddha_init);