diff options
Diffstat (limited to 'drivers/ide/ide-lib.c')
-rw-r--r-- | drivers/ide/ide-lib.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/ide/ide-lib.c b/drivers/ide/ide-lib.c index df29868209f3..92a6c7bcf527 100644 --- a/drivers/ide/ide-lib.c +++ b/drivers/ide/ide-lib.c | |||
@@ -291,11 +291,11 @@ u8 ide_get_best_pio_mode (ide_drive_t *drive, u8 mode_wanted, u8 max_mode) | |||
291 | struct hd_driveid* id = drive->id; | 291 | struct hd_driveid* id = drive->id; |
292 | int overridden = 0; | 292 | int overridden = 0; |
293 | 293 | ||
294 | if (mode_wanted != 255) { | 294 | if (mode_wanted != 255) |
295 | pio_mode = mode_wanted; | 295 | return min_t(u8, mode_wanted, max_mode); |
296 | } else if (!drive->id) { | 296 | |
297 | pio_mode = 0; | 297 | if ((drive->hwif->host_flags & IDE_HFLAG_PIO_NO_BLACKLIST) == 0 && |
298 | } else if ((pio_mode = ide_scan_pio_blacklist(id->model)) != -1) { | 298 | (pio_mode = ide_scan_pio_blacklist(id->model)) != -1) { |
299 | printk(KERN_INFO "%s: is on PIO blacklist\n", drive->name); | 299 | printk(KERN_INFO "%s: is on PIO blacklist\n", drive->name); |
300 | } else { | 300 | } else { |
301 | pio_mode = id->tPIO; | 301 | pio_mode = id->tPIO; |
@@ -324,7 +324,8 @@ u8 ide_get_best_pio_mode (ide_drive_t *drive, u8 mode_wanted, u8 max_mode) | |||
324 | /* | 324 | /* |
325 | * Conservative "downgrade" for all pre-ATA2 drives | 325 | * Conservative "downgrade" for all pre-ATA2 drives |
326 | */ | 326 | */ |
327 | if (pio_mode && pio_mode < 4) { | 327 | if ((drive->hwif->host_flags & IDE_HFLAG_PIO_NO_DOWNGRADE) == 0 && |
328 | pio_mode && pio_mode < 4) { | ||
328 | pio_mode--; | 329 | pio_mode--; |
329 | printk(KERN_INFO "%s: applying conservative " | 330 | printk(KERN_INFO "%s: applying conservative " |
330 | "PIO \"downgrade\"\n", drive->name); | 331 | "PIO \"downgrade\"\n", drive->name); |