ide: fixed section mismatch warning in cmd640.c
[safe/jmp/linux-2.6] / drivers / ide / cs5536.c
index 353a35b..9623b85 100644 (file)
@@ -146,14 +146,16 @@ static void cs5536_set_pio_mode(ide_drive_t *drive, const u8 pio)
        struct pci_dev *pdev = to_pci_dev(drive->hwif->dev);
        ide_drive_t *pair = ide_get_pair_dev(drive);
        int cshift = (drive->dn & 1) ? IDE_CAST_D1_SHIFT : IDE_CAST_D0_SHIFT;
+       unsigned long timings = (unsigned long)ide_get_drivedata(drive);
        u32 cast;
        u8 cmd_pio = pio;
 
        if (pair)
                cmd_pio = min(pio, ide_get_best_pio_mode(pair, 255, 4));
 
-       drive->drive_data &= (IDE_DRV_MASK << 8);
-       drive->drive_data |= drv_timings[pio];
+       timings &= (IDE_DRV_MASK << 8);
+       timings |= drv_timings[pio];
+       ide_set_drivedata(drive, (void *)timings);
 
        cs5536_program_dtc(drive, drv_timings[pio]);
 
@@ -186,6 +188,7 @@ static void cs5536_set_dma_mode(ide_drive_t *drive, const u8 mode)
 
        struct pci_dev *pdev = to_pci_dev(drive->hwif->dev);
        int dshift = (drive->dn & 1) ? IDE_D1_SHIFT : IDE_D0_SHIFT;
+       unsigned long timings = (unsigned long)ide_get_drivedata(drive);
        u32 etc;
 
        cs5536_read(pdev, ETC, &etc);
@@ -195,8 +198,9 @@ static void cs5536_set_dma_mode(ide_drive_t *drive, const u8 mode)
                etc |= udma_timings[mode - XFER_UDMA_0] << dshift;
        } else { /* MWDMA */
                etc &= ~(IDE_ETC_UDMA_MASK << dshift);
-               drive->drive_data &= IDE_DRV_MASK;
-               drive->drive_data |= mwdma_timings[mode - XFER_MW_DMA_0] << 8;
+               timings &= IDE_DRV_MASK;
+               timings |= mwdma_timings[mode - XFER_MW_DMA_0] << 8;
+               ide_set_drivedata(drive, (void *)timings);
        }
 
        cs5536_write(pdev, ETC, etc);
@@ -204,9 +208,11 @@ static void cs5536_set_dma_mode(ide_drive_t *drive, const u8 mode)
 
 static void cs5536_dma_start(ide_drive_t *drive)
 {
+       unsigned long timings = (unsigned long)ide_get_drivedata(drive);
+
        if (drive->current_speed < XFER_UDMA_0 &&
-           (drive->drive_data >> 8) != (drive->drive_data & IDE_DRV_MASK))
-               cs5536_program_dtc(drive, drive->drive_data >> 8);
+           (timings >> 8) != (timings & IDE_DRV_MASK))
+               cs5536_program_dtc(drive, timings >> 8);
 
        ide_dma_start(drive);
 }
@@ -214,10 +220,11 @@ static void cs5536_dma_start(ide_drive_t *drive)
 static int cs5536_dma_end(ide_drive_t *drive)
 {
        int ret = ide_dma_end(drive);
+       unsigned long timings = (unsigned long)ide_get_drivedata(drive);
 
        if (drive->current_speed < XFER_UDMA_0 &&
-           (drive->drive_data >> 8) != (drive->drive_data & IDE_DRV_MASK))
-               cs5536_program_dtc(drive, drive->drive_data & IDE_DRV_MASK);
+           (timings >> 8) != (timings & IDE_DRV_MASK))
+               cs5536_program_dtc(drive, timings & IDE_DRV_MASK);
 
        return ret;
 }
@@ -236,6 +243,7 @@ static const struct ide_dma_ops cs5536_dma_ops = {
        .dma_test_irq           = ide_dma_test_irq,
        .dma_lost_irq           = ide_dma_lost_irq,
        .dma_timer_expiry       = ide_dma_sff_timer_expiry,
+       .dma_sff_read_status    = ide_dma_sff_read_status,
 };
 
 static const struct ide_port_info cs5536_info = {