]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/ide/arm/icside.c
icside: use ec->dma directly
[linux-2.6-omap-h63xx.git] / drivers / ide / arm / icside.c
index bd1f5b6703784463df33404a74cd4fe12dc6ebdf..22fc46d6344825dcfa173b93a5bffe4c046bbd21 100644 (file)
@@ -309,14 +309,6 @@ static int icside_dma_on(ide_drive_t *drive)
        return 0;
 }
 
-static int icside_dma_check(ide_drive_t *drive)
-{
-       if (ide_tune_dma(drive))
-               return 0;
-
-       return -1;
-}
-
 static int icside_dma_end(ide_drive_t *drive)
 {
        ide_hwif_t *hwif = HWIF(drive);
@@ -324,27 +316,29 @@ static int icside_dma_end(ide_drive_t *drive)
 
        drive->waiting_for_dma = 0;
 
-       disable_dma(hwif->hw.dma);
+       disable_dma(state->dev->dma);
 
        /* Teardown mappings after DMA has completed. */
        dma_unmap_sg(state->dev, hwif->sg_table, hwif->sg_nents,
                     hwif->sg_dma_direction);
 
-       return get_dma_residue(hwif->hw.dma) != 0;
+       return get_dma_residue(state->dev->dma) != 0;
 }
 
 static void icside_dma_start(ide_drive_t *drive)
 {
        ide_hwif_t *hwif = HWIF(drive);
+       struct icside_state *state = hwif->hwif_data;
 
        /* We can not enable DMA on both channels simultaneously. */
-       BUG_ON(dma_channel_active(hwif->hw.dma));
-       enable_dma(hwif->hw.dma);
+       BUG_ON(dma_channel_active(state->dev->dma));
+       enable_dma(state->dev->dma);
 }
 
 static int icside_dma_setup(ide_drive_t *drive)
 {
        ide_hwif_t *hwif = HWIF(drive);
+       struct icside_state *state = hwif->hwif_data;
        struct request *rq = hwif->hwgroup->rq;
        unsigned int dma_mode;
 
@@ -356,7 +350,7 @@ static int icside_dma_setup(ide_drive_t *drive)
        /*
         * We can not enable DMA on both channels.
         */
-       BUG_ON(dma_channel_active(hwif->hw.dma));
+       BUG_ON(dma_channel_active(state->dev->dma));
 
        icside_build_sglist(drive, rq);
 
@@ -373,14 +367,14 @@ static int icside_dma_setup(ide_drive_t *drive)
        /*
         * Select the correct timing for this drive.
         */
-       set_dma_speed(hwif->hw.dma, drive->drive_data);
+       set_dma_speed(state->dev->dma, drive->drive_data);
 
        /*
         * Tell the DMA engine about the SG table and
         * data direction.
         */
-       set_dma_sg(hwif->hw.dma, hwif->sg_table, hwif->sg_nents);
-       set_dma_mode(hwif->hw.dma, dma_mode);
+       set_dma_sg(state->dev->dma, hwif->sg_table, hwif->sg_nents);
+       set_dma_mode(state->dev->dma, dma_mode);
 
        drive->waiting_for_dma = 1;
 
@@ -423,18 +417,13 @@ static void icside_dma_lost_irq(ide_drive_t *drive)
 
 static void icside_dma_init(ide_hwif_t *hwif)
 {
-       printk("    %s: SG-DMA", hwif->name);
-
-       hwif->atapi_dma         = 1;
        hwif->mwdma_mask        = 7; /* MW0..2 */
        hwif->swdma_mask        = 7; /* SW0..2 */
 
        hwif->dmatable_cpu      = NULL;
        hwif->dmatable_dma      = 0;
        hwif->set_dma_mode      = icside_set_dma_mode;
-       hwif->autodma           = 1;
 
-       hwif->ide_dma_check     = icside_dma_check;
        hwif->dma_host_off      = icside_dma_host_off;
        hwif->dma_off_quietly   = icside_dma_off_quietly;
        hwif->dma_host_on       = icside_dma_host_on;
@@ -446,45 +435,18 @@ static void icside_dma_init(ide_hwif_t *hwif)
        hwif->ide_dma_test_irq  = icside_dma_test_irq;
        hwif->dma_timeout       = icside_dma_timeout;
        hwif->dma_lost_irq      = icside_dma_lost_irq;
-
-       hwif->drives[0].autodma = hwif->autodma;
-       hwif->drives[1].autodma = hwif->autodma;
-
-       printk(" capable%s\n", hwif->autodma ? ", auto-enable" : "");
 }
 #else
 #define icside_dma_init(hwif)  (0)
 #endif
 
-static ide_hwif_t *icside_find_hwif(unsigned long dataport)
-{
-       ide_hwif_t *hwif;
-       int index;
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = &ide_hwifs[index];
-               if (hwif->io_ports[IDE_DATA_OFFSET] == dataport)
-                       goto found;
-       }
-
-       for (index = 0; index < MAX_HWIFS; ++index) {
-               hwif = &ide_hwifs[index];
-               if (!hwif->io_ports[IDE_DATA_OFFSET])
-                       goto found;
-       }
-
-       hwif = NULL;
-found:
-       return hwif;
-}
-
 static ide_hwif_t *
 icside_setup(void __iomem *base, struct cardinfo *info, struct expansion_card *ec)
 {
        unsigned long port = (unsigned long)base + info->dataoffset;
        ide_hwif_t *hwif;
 
-       hwif = icside_find_hwif(port);
+       hwif = ide_find_port(port);
        if (hwif) {
                int i;
 
@@ -518,6 +480,7 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec)
 {
        ide_hwif_t *hwif;
        void __iomem *base;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
        base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
        if (!base)
@@ -541,9 +504,9 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec)
 
        state->hwif[0] = hwif;
 
-       probe_hwif_init(hwif);
+       idx[0] = hwif->index;
 
-       ide_proc_register_port(hwif);
+       ide_device_add(idx);
 
        return 0;
 }
@@ -555,6 +518,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
        void __iomem *ioc_base, *easi_base;
        unsigned int sel = 0;
        int ret;
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
        ioc_base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
        if (!ioc_base) {
@@ -610,7 +574,6 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
        hwif->serialized  = 1;
        hwif->config_data = (unsigned long)ioc_base;
        hwif->select_data = sel;
-       hwif->hw.dma      = ec->dma;
 
        mate->maskproc    = icside_maskproc;
        mate->channel     = 1;
@@ -619,18 +582,16 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
        mate->serialized  = 1;
        mate->config_data = (unsigned long)ioc_base;
        mate->select_data = sel | 1;
-       mate->hw.dma      = ec->dma;
 
        if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) {
                icside_dma_init(hwif);
                icside_dma_init(mate);
        }
 
-       probe_hwif_init(hwif);
-       probe_hwif_init(mate);
+       idx[0] = hwif->index;
+       idx[1] = mate->index;
 
-       ide_proc_register_port(hwif);
-       ide_proc_register_port(mate);
+       ide_device_add(idx);
 
        return 0;