}
 }
 
+static void ide_port_init_devices(ide_hwif_t *hwif)
+{
+       int i;
+
+       for (i = 0; i < MAX_DRIVES; i++) {
+               ide_drive_t *drive = &hwif->drives[i];
+
+               if (hwif->host_flags & IDE_HFLAG_IO_32BIT)
+                       drive->io_32bit = 1;
+               if (hwif->host_flags & IDE_HFLAG_UNMASK_IRQS)
+                       drive->unmask = 1;
+               if ((hwif->host_flags & IDE_HFLAG_NO_AUTOTUNE) == 0)
+                       drive->autotune = 1;
+       }
+}
+
 static void ide_init_port(ide_hwif_t *hwif, unsigned int port,
                          const struct ide_port_info *d)
 {
        if ((d->host_flags & IDE_HFLAG_SERIALIZE) && hwif->mate)
                hwif->mate->serialized = hwif->serialized = 1;
 
-       if (d->host_flags & IDE_HFLAG_IO_32BIT) {
-               hwif->drives[0].io_32bit = 1;
-               hwif->drives[1].io_32bit = 1;
-       }
-
-       if (d->host_flags & IDE_HFLAG_UNMASK_IRQS) {
-               hwif->drives[0].unmask = 1;
-               hwif->drives[1].unmask = 1;
-       }
-
        hwif->swdma_mask = d->swdma_mask;
        hwif->mwdma_mask = d->mwdma_mask;
        hwif->ultra_mask = d->udma_mask;
        if ((d->host_flags && IDE_HFLAG_NO_DMA) == 0 && hwif->dma_base == 0)
                hwif->swdma_mask = hwif->mwdma_mask = hwif->ultra_mask = 0;
 
-       if ((d->host_flags & IDE_HFLAG_NO_AUTOTUNE) == 0) {
-               hwif->drives[0].autotune = 1;
-               hwif->drives[1].autotune = 1;
-       }
-
        if (d->host_flags & IDE_HFLAG_RQSIZE_256)
                hwif->rqsize = 256;
 
                mate = (i & 1) ? NULL : hwif;
 
                ide_init_port(hwif, i & 1, d);
+               ide_port_init_devices(hwif);
        }
 
        for (i = 0; i < MAX_HWIFS; i++) {