diff options
author | Sergei Shtylyov <sshtylyov@ru.mvista.com> | 2007-11-27 15:35:52 -0500 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-11-27 15:35:52 -0500 |
commit | 89613e667f7539defb053795f18653003179cf7e (patch) | |
tree | 3efcfc63e7b7e999db536955464c361f1e53cb4d /drivers | |
parent | a1d85864d30181a71243193ed01d322dc0618dc6 (diff) |
ide: don't set PIO mode on pre-EIDE drives
Fix handling of the PIO modes for the pre-EIDE drives that did not support
the PIO Flow Control Transfer Mode value (00001 nnn) of the Set Transfer Mode
feature by skipping the actual mode programming.
Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ide/ide-iops.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index e17a9ee120ea..1cdf688a5422 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
@@ -756,7 +756,7 @@ int ide_driveid_update(ide_drive_t *drive) | |||
756 | int ide_config_drive_speed(ide_drive_t *drive, u8 speed) | 756 | int ide_config_drive_speed(ide_drive_t *drive, u8 speed) |
757 | { | 757 | { |
758 | ide_hwif_t *hwif = drive->hwif; | 758 | ide_hwif_t *hwif = drive->hwif; |
759 | int error; | 759 | int error = 0; |
760 | u8 stat; | 760 | u8 stat; |
761 | 761 | ||
762 | // while (HWGROUP(drive)->busy) | 762 | // while (HWGROUP(drive)->busy) |
@@ -767,6 +767,10 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed) | |||
767 | hwif->dma_host_off(drive); | 767 | hwif->dma_host_off(drive); |
768 | #endif | 768 | #endif |
769 | 769 | ||
770 | /* Skip setting PIO flow-control modes on pre-EIDE drives */ | ||
771 | if ((speed & 0xf8) == XFER_PIO_0 && !(drive->id->capability & 0x08)) | ||
772 | goto skip; | ||
773 | |||
770 | /* | 774 | /* |
771 | * Don't use ide_wait_cmd here - it will | 775 | * Don't use ide_wait_cmd here - it will |
772 | * attempt to set_geometry and recalibrate, | 776 | * attempt to set_geometry and recalibrate, |
@@ -814,6 +818,7 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed) | |||
814 | drive->id->dma_mword &= ~0x0F00; | 818 | drive->id->dma_mword &= ~0x0F00; |
815 | drive->id->dma_1word &= ~0x0F00; | 819 | drive->id->dma_1word &= ~0x0F00; |
816 | 820 | ||
821 | skip: | ||
817 | #ifdef CONFIG_BLK_DEV_IDEDMA | 822 | #ifdef CONFIG_BLK_DEV_IDEDMA |
818 | if (speed >= XFER_SW_DMA_0) | 823 | if (speed >= XFER_SW_DMA_0) |
819 | hwif->dma_host_on(drive); | 824 | hwif->dma_host_on(drive); |