diff options
Diffstat (limited to 'drivers/ide/ide-iops.c')
-rw-r--r-- | drivers/ide/ide-iops.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index bd513f5a2323..3caa176b3155 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
@@ -583,8 +583,12 @@ u8 eighty_ninty_three (ide_drive_t *drive) | |||
583 | if(!(drive->id->hw_config & 0x4000)) | 583 | if(!(drive->id->hw_config & 0x4000)) |
584 | return 0; | 584 | return 0; |
585 | #endif /* CONFIG_IDEDMA_IVB */ | 585 | #endif /* CONFIG_IDEDMA_IVB */ |
586 | if (!(drive->id->hw_config & 0x2000)) | 586 | /* |
587 | return 0; | 587 | * FIXME: |
588 | * - change master/slave IDENTIFY order | ||
589 | * - force bit13 (80c cable present) check | ||
590 | * (unless the slave device is pre-ATA3) | ||
591 | */ | ||
588 | return 1; | 592 | return 1; |
589 | } | 593 | } |
590 | 594 | ||
@@ -885,6 +889,7 @@ static void __ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, | |||
885 | hwgroup->handler = handler; | 889 | hwgroup->handler = handler; |
886 | hwgroup->expiry = expiry; | 890 | hwgroup->expiry = expiry; |
887 | hwgroup->timer.expires = jiffies + timeout; | 891 | hwgroup->timer.expires = jiffies + timeout; |
892 | hwgroup->req_gen_timer = hwgroup->req_gen; | ||
888 | add_timer(&hwgroup->timer); | 893 | add_timer(&hwgroup->timer); |
889 | } | 894 | } |
890 | 895 | ||
@@ -925,6 +930,7 @@ void ide_execute_command(ide_drive_t *drive, task_ioreg_t cmd, ide_handler_t *ha | |||
925 | hwgroup->handler = handler; | 930 | hwgroup->handler = handler; |
926 | hwgroup->expiry = expiry; | 931 | hwgroup->expiry = expiry; |
927 | hwgroup->timer.expires = jiffies + timeout; | 932 | hwgroup->timer.expires = jiffies + timeout; |
933 | hwgroup->req_gen_timer = hwgroup->req_gen; | ||
928 | add_timer(&hwgroup->timer); | 934 | add_timer(&hwgroup->timer); |
929 | hwif->OUTBSYNC(drive, cmd, IDE_COMMAND_REG); | 935 | hwif->OUTBSYNC(drive, cmd, IDE_COMMAND_REG); |
930 | /* Drive takes 400nS to respond, we must avoid the IRQ being | 936 | /* Drive takes 400nS to respond, we must avoid the IRQ being |
@@ -1090,6 +1096,9 @@ static void pre_reset(ide_drive_t *drive) | |||
1090 | if (HWIF(drive)->pre_reset != NULL) | 1096 | if (HWIF(drive)->pre_reset != NULL) |
1091 | HWIF(drive)->pre_reset(drive); | 1097 | HWIF(drive)->pre_reset(drive); |
1092 | 1098 | ||
1099 | if (drive->current_speed != 0xff) | ||
1100 | drive->desired_speed = drive->current_speed; | ||
1101 | drive->current_speed = 0xff; | ||
1093 | } | 1102 | } |
1094 | 1103 | ||
1095 | /* | 1104 | /* |