unsigned int enabled;
        void __iomem *irq_port;
        void __iomem *ioc_base;
+       unsigned int sel;
        unsigned int type;
        ide_hwif_t *hwif[2];
 };
 static void icside_maskproc(ide_drive_t *drive, int mask)
 {
        ide_hwif_t *hwif = HWIF(drive);
-       struct icside_state *state = hwif->hwif_data;
+       struct expansion_card *ec = ECARD_DEV(hwif->dev);
+       struct icside_state *state = ecard_get_drvdata(ec);
        unsigned long flags;
 
        local_irq_save(flags);
 {
        ide_hwif_t *hwif = HWIF(drive);
        struct expansion_card *ec = ECARD_DEV(hwif->dev);
+       struct icside_state *state = ecard_get_drvdata(ec);
        struct request *rq = hwif->hwgroup->rq;
        unsigned int dma_mode;
 
        /*
         * Route the DMA signals to the correct interface.
         */
-       writeb(hwif->select_data, hwif->config_data);
+       writeb(state->sel | hwif->channel, state->ioc_base);
 
        /*
         * Select the correct timing for this drive.
 static int icside_dma_test_irq(ide_drive_t *drive)
 {
        ide_hwif_t *hwif = HWIF(drive);
-       struct icside_state *state = hwif->hwif_data;
+       struct expansion_card *ec = ECARD_DEV(hwif->dev);
+       struct icside_state *state = ecard_get_drvdata(ec);
 
        return readb(state->irq_port +
                     (hwif->channel ?
 
        state->hwif[0] = hwif;
 
+       ecard_set_drvdata(ec, state);
+
        idx[0] = hwif->index;
 
        ide_device_add(idx, NULL);
 
        state->irq_port   = easi_base;
        state->ioc_base   = ioc_base;
+       state->sel        = sel;
 
        /*
         * Be on the safe side - disable interrupts
        state->hwif[0]    = hwif;
        state->hwif[1]    = mate;
 
-       hwif->hwif_data   = state;
-       hwif->config_data = (unsigned long)ioc_base;
-       hwif->select_data = sel;
-
-       mate->hwif_data   = state;
-       mate->config_data = (unsigned long)ioc_base;
-       mate->select_data = sel | 1;
+       ecard_set_drvdata(ec, state);
 
        if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) {
                d.init_dma = icside_dma_init;
                break;
        }
 
-       if (ret == 0) {
-               ecard_set_drvdata(ec, state);
+       if (ret == 0)
                goto out;
-       }
 
        kfree(state);
  release: