diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-13 10:13:27 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-13 10:13:27 -0700 |
commit | bcd11eaa222fce31d0b59cdbfdf9b8c47067f15a (patch) | |
tree | aac97cbc4508829740b4b5a186f3f9ed5a24c081 /drivers/ide/ide-io.c | |
parent | c8c55bcb43d790d97790cfa319d80045a71fde39 (diff) | |
parent | 99149a485958ada512eafc34fe36a80cb63fa56c (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (27 commits)
alim15x3: remove redundant m5229_revision check
sc1200: fix ->dma_base equal zero handling
cs5520: fix ->dma_base equal zero handling
sgiioc4: add missing ->dma_base check
cs5535: add missing ->dma_base check
ide: remove CONFIG_IDEDMA_IVB config option
ide: change master/slave IDENTIFY order
ide: move ide_config_drive_speed() calls to upper layers (take 2)
pdc202xx_new: check ide_config_drive_speed() return value
cs5535: check ide_config_drive_speed() return value
amd74xx/via82cxxx: check ide_config_drive_speed() return value
au1xxx: fix au1xxx_set_pio_mode()
icside: use ide_tune_dma()
ide-pmac: fix PIO setup and enable autotune
ide-pmac: use ide_tune_dma() (take 2)
ide-pmac: remove pmac_ide_do_setfeature() (take 2)
ide-pmac: remove nIEN clearing from pmac_ide_do_setfeature()
ide-pmac: use __ide_wait_stat()
ide-pmac: remove extra good status wait from pmac_ide_do_setfeature()
ide: add __ide_wait_stat() helper
...
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) if (set_pio_mode_abuse(drive->hwif, req_pio)) { if (hwif->set_pio_mode) hwif->set_pio_mode(drive, req_pio); - } else + } else { + int keep_dma = drive->using_dma; + ide_set_pio(drive, req_pio); + if (hwif->host_flags & IDE_HFLAG_SET_PIO_MODE_KEEP_DMA) { + if (keep_dma) + hwif->ide_dma_on(drive); + } + } + return ide_stopped; } else { if (drive->media == ide_disk) |