diff options
Diffstat (limited to 'drivers/ide/ide-iops.c')
| -rw-r--r-- | drivers/ide/ide-iops.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index c19a221b1e18..06fe002116ec 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
| @@ -206,8 +206,6 @@ EXPORT_SYMBOL_GPL(ide_in_drive_list); | |||
| 206 | 206 | ||
| 207 | /* | 207 | /* |
| 208 | * Early UDMA66 devices don't set bit14 to 1, only bit13 is valid. | 208 | * Early UDMA66 devices don't set bit14 to 1, only bit13 is valid. |
| 209 | * We list them here and depend on the device side cable detection for them. | ||
| 210 | * | ||
| 211 | * Some optical devices with the buggy firmwares have the same problem. | 209 | * Some optical devices with the buggy firmwares have the same problem. |
| 212 | */ | 210 | */ |
| 213 | static const struct drive_list_entry ivb_list[] = { | 211 | static const struct drive_list_entry ivb_list[] = { |
| @@ -251,10 +249,25 @@ u8 eighty_ninty_three(ide_drive_t *drive) | |||
| 251 | * - force bit13 (80c cable present) check also for !ivb devices | 249 | * - force bit13 (80c cable present) check also for !ivb devices |
| 252 | * (unless the slave device is pre-ATA3) | 250 | * (unless the slave device is pre-ATA3) |
| 253 | */ | 251 | */ |
| 254 | if ((id[ATA_ID_HW_CONFIG] & 0x4000) || | 252 | if (id[ATA_ID_HW_CONFIG] & 0x4000) |
| 255 | (ivb && (id[ATA_ID_HW_CONFIG] & 0x2000))) | ||
| 256 | return 1; | 253 | return 1; |
| 257 | 254 | ||
| 255 | if (ivb) { | ||
| 256 | const char *model = (char *)&id[ATA_ID_PROD]; | ||
| 257 | |||
| 258 | if (strstr(model, "TSSTcorp CDDVDW SH-S202")) { | ||
| 259 | /* | ||
| 260 | * These ATAPI devices always report 80c cable | ||
| 261 | * so we have to depend on the host in this case. | ||
| 262 | */ | ||
| 263 | if (hwif->cbl == ATA_CBL_PATA80) | ||
| 264 | return 1; | ||
| 265 | } else { | ||
| 266 | /* Depend on the device side cable detection. */ | ||
| 267 | if (id[ATA_ID_HW_CONFIG] & 0x2000) | ||
| 268 | return 1; | ||
| 269 | } | ||
| 270 | } | ||
| 258 | no_80w: | 271 | no_80w: |
| 259 | if (drive->dev_flags & IDE_DFLAG_UDMA33_WARNED) | 272 | if (drive->dev_flags & IDE_DFLAG_UDMA33_WARNED) |
| 260 | return 0; | 273 | return 0; |
