Merge branch 'for-linus' of git://git.o-hand.com/linux-rpurdie-leds
[sfrench/cifs-2.6.git] / drivers / ide / cris / ide-cris.c
index 5797e0b5a1327f4e87a41e772bdd568d6180abce..6b2d152351b301f4243cb52843ed4b8e0fe7ffdb 100644 (file)
@@ -682,9 +682,12 @@ static void cris_ide_input_data (ide_drive_t *drive, void *, unsigned int);
 static void cris_ide_output_data (ide_drive_t *drive, void *, unsigned int);
 static void cris_atapi_input_bytes(ide_drive_t *drive, void *, unsigned int);
 static void cris_atapi_output_bytes(ide_drive_t *drive, void *, unsigned int);
-static int cris_dma_off (ide_drive_t *drive);
 static int cris_dma_on (ide_drive_t *drive);
 
+static void cris_dma_off(ide_drive_t *drive)
+{
+}
+
 static void tune_cris_ide(ide_drive_t *drive, u8 pio)
 {
        int setup, strobe, hold;
@@ -795,7 +798,7 @@ init_e100_ide (void)
                                0, 0, cris_ide_ack_intr,
                                ide_default_irq(0));
                ide_register_hw(&hw, &hwif);
-               hwif->mmio = 2;
+               hwif->mmio = 1;
                hwif->chipset = ide_etrax100;
                hwif->tuneproc = &tune_cris_ide;
                hwif->speedproc = &speed_cris_ide;
@@ -814,13 +817,16 @@ init_e100_ide (void)
                hwif->OUTBSYNC = &cris_ide_outbsync;
                hwif->INB = &cris_ide_inb;
                hwif->INW = &cris_ide_inw;
-               hwif->ide_dma_host_off = &cris_dma_off;
-               hwif->ide_dma_host_on = &cris_dma_on;
-               hwif->ide_dma_off_quietly = &cris_dma_off;
+               hwif->dma_host_off = &cris_dma_off;
+               hwif->dma_host_on = &cris_dma_on;
+               hwif->dma_off_quietly = &cris_dma_off;
                hwif->udma_four = 0;
                hwif->ultra_mask = cris_ultra_mask;
                hwif->mwdma_mask = 0x07; /* Multiword DMA 0-2 */
                hwif->swdma_mask = 0x07; /* Singleword DMA 0-2 */
+               hwif->autodma = 1;
+               hwif->drives[0].autodma = 1;
+               hwif->drives[1].autodma = 1;
        }
 
        /* Reset pulse */
@@ -835,11 +841,6 @@ init_e100_ide (void)
        cris_ide_set_speed(TYPE_UDMA, ATA_UDMA2_CYC, ATA_UDMA2_DVS, 0);
 }
 
-static int cris_dma_off (ide_drive_t *drive)
-{
-       return 0;
-}
-
 static int cris_dma_on (ide_drive_t *drive)
 {
        return 0;
@@ -1045,17 +1046,10 @@ static ide_startstop_t cris_dma_intr (ide_drive_t *drive)
 
 static int cris_dma_check(ide_drive_t *drive)
 {
-       ide_hwif_t *hwif = drive->hwif;
-       struct hd_driveid* id = drive->id;
-
-       if (id && (id->capability & 1)) {
-               if (ide_use_dma(drive)) {
-                       if (cris_config_drive_for_dma(drive))
-                               return hwif->ide_dma_on(drive);
-               }
-       }
+       if (ide_use_dma(drive) && cris_config_drive_for_dma(drive))
+               return 0;
 
-       return hwif->ide_dma_off_quietly(drive);
+       return -1;
 }
 
 static int cris_dma_end(ide_drive_t *drive)