]> err.no Git - linux-2.6/blobdiff - drivers/ide/legacy/buddha.c
ide: ->cable_detect method cannot be marked __devinit
[linux-2.6] / drivers / ide / legacy / buddha.c
index fdd3791e465f0f5f028f58f907548b8cf7140cfe..7c2afa97f41775e410835d539a174d14452f75ed 100644 (file)
@@ -37,6 +37,8 @@
 #define CATWEASEL_NUM_HWIFS    3
 #define XSURF_NUM_HWIFS         2
 
+#define MAX_NUM_HWIFS          3
+
     /*
      *  Bases of the IDE interfaces (relative to the board address)
      */
@@ -102,7 +104,7 @@ static int buddha_ack_intr(ide_hwif_t *hwif)
 {
     unsigned char ch;
 
-    ch = z_readb(hwif->io_ports[IDE_IRQ_OFFSET]);
+    ch = z_readb(hwif->io_ports.irq_addr);
     if (!(ch & 0x80))
            return 0;
     return 1;
@@ -112,9 +114,9 @@ static int xsurf_ack_intr(ide_hwif_t *hwif)
 {
     unsigned char ch;
 
-    ch = z_readb(hwif->io_ports[IDE_IRQ_OFFSET]);
+    ch = z_readb(hwif->io_ports.irq_addr);
     /* X-Surf needs a 0 written to IRQ register to ensure ISA bit A11 stays at 0 */
-    z_writeb(0, hwif->io_ports[IDE_IRQ_OFFSET]); 
+    z_writeb(0, hwif->io_ports.irq_addr);
     if (!(ch & 0x80))
            return 0;
     return 1;
@@ -128,16 +130,18 @@ static void __init buddha_setup_ports(hw_regs_t *hw, unsigned long base,
 
        memset(hw, 0, sizeof(*hw));
 
-       hw->io_ports[IDE_DATA_OFFSET] = base;
+       hw->io_ports.data_addr = base;
 
        for (i = 1; i < 8; i++)
-               hw->io_ports[i] = base + 2 + i * 4;
+               hw->io_ports_array[i] = base + 2 + i * 4;
 
-       hw->io_ports[IDE_CONTROL_OFFSET] = ctl;
-       hw->io_ports[IDE_IRQ_OFFSET] = irq_port;
+       hw->io_ports.ctl_addr = ctl;
+       hw->io_ports.irq_addr = irq_port;
 
        hw->irq = IRQ_AMIGA_PORTS;
        hw->ack_intr = ack_intr;
+
+       hw->chipset = ide_generic;
 }
 
     /*
@@ -146,18 +150,14 @@ static void __init buddha_setup_ports(hw_regs_t *hw, unsigned long base,
 
 static int __init buddha_init(void)
 {
-       hw_regs_t hw;
-       ide_hwif_t *hwif;
-       int i;
-
        struct zorro_dev *z = NULL;
        u_long buddha_board = 0;
        BuddhaType type;
-       int buddha_num_hwifs;
+       int buddha_num_hwifs, i;
 
        while ((z = zorro_find_device(ZORRO_WILDCARD, z))) {
                unsigned long board;
-               u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
+               hw_regs_t hw[MAX_NUM_HWIFS], *hws[] = { NULL, NULL, NULL, NULL };
 
                if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA) {
                        buddha_num_hwifs = BUDDHA_NUM_HWIFS;
@@ -219,22 +219,13 @@ fail_base2:
                                ack_intr = xsurf_ack_intr;
                        }
 
-                       buddha_setup_ports(&hw, base, ctl, irq_port, ack_intr);
+                       buddha_setup_ports(&hw[i], base, ctl, irq_port,
+                                          ack_intr);
 
-                       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;
-
-                               idx[i] = index;
-                       }
+                       hws[i] = &hw[i];
                }
 
-               ide_device_add(idx, NULL);
+               ide_host_add(NULL, hws, NULL);
        }
 
        return 0;