|
@@ -206,8 +206,6 @@ EXPORT_SYMBOL_GPL(ide_in_drive_list);
|
|
|
|
|
|
/*
|
|
|
* Early UDMA66 devices don't set bit14 to 1, only bit13 is valid.
|
|
|
- * We list them here and depend on the device side cable detection for them.
|
|
|
- *
|
|
|
* Some optical devices with the buggy firmwares have the same problem.
|
|
|
*/
|
|
|
static const struct drive_list_entry ivb_list[] = {
|
|
@@ -251,10 +249,25 @@ u8 eighty_ninty_three(ide_drive_t *drive)
|
|
|
* - force bit13 (80c cable present) check also for !ivb devices
|
|
|
* (unless the slave device is pre-ATA3)
|
|
|
*/
|
|
|
- if ((id[ATA_ID_HW_CONFIG] & 0x4000) ||
|
|
|
- (ivb && (id[ATA_ID_HW_CONFIG] & 0x2000)))
|
|
|
+ if (id[ATA_ID_HW_CONFIG] & 0x4000)
|
|
|
return 1;
|
|
|
|
|
|
+ if (ivb) {
|
|
|
+ const char *model = (char *)&id[ATA_ID_PROD];
|
|
|
+
|
|
|
+ if (strstr(model, "TSSTcorp CDDVDW SH-S202")) {
|
|
|
+ /*
|
|
|
+ * These ATAPI devices always report 80c cable
|
|
|
+ * so we have to depend on the host in this case.
|
|
|
+ */
|
|
|
+ if (hwif->cbl == ATA_CBL_PATA80)
|
|
|
+ return 1;
|
|
|
+ } else {
|
|
|
+ /* Depend on the device side cable detection. */
|
|
|
+ if (id[ATA_ID_HW_CONFIG] & 0x2000)
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
no_80w:
|
|
|
if (drive->dev_flags & IDE_DFLAG_UDMA33_WARNED)
|
|
|
return 0;
|