diff options
Diffstat (limited to 'drivers/ide/ide-io.c')
-rw-r--r-- | drivers/ide/ide-io.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index 9560a8f4a86c..4cece930114c 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
@@ -836,9 +836,17 @@ static ide_startstop_t do_special (ide_drive_t *drive) | |||
836 | if (set_pio_mode_abuse(drive->hwif, req_pio)) { | 836 | if (set_pio_mode_abuse(drive->hwif, req_pio)) { |
837 | if (hwif->set_pio_mode) | 837 | if (hwif->set_pio_mode) |
838 | hwif->set_pio_mode(drive, req_pio); | 838 | hwif->set_pio_mode(drive, req_pio); |
839 | } else | 839 | } else { |
840 | int keep_dma = drive->using_dma; | ||
841 | |||
840 | ide_set_pio(drive, req_pio); | 842 | ide_set_pio(drive, req_pio); |
841 | 843 | ||
844 | if (hwif->host_flags & IDE_HFLAG_SET_PIO_MODE_KEEP_DMA) { | ||
845 | if (keep_dma) | ||
846 | hwif->ide_dma_on(drive); | ||
847 | } | ||
848 | } | ||
849 | |||
842 | return ide_stopped; | 850 | return ide_stopped; |
843 | } else { | 851 | } else { |
844 | if (drive->media == ide_disk) | 852 | if (drive->media == ide_disk) |