mirror of https://gitee.com/openkylin/linux.git
ide: fix 40-wire cable detection for TSST SH-S202* ATAPI devices (v2)
Since 2.6.26 we support UDMA66 on ATAPI devices requiring IVB quirk: commit8588a2b732
("ide: add SH-S202J to ivb_list[]") We also later added support for more such devices in: commite97564f362
("ide: More TSST drives with broken cable detection") and in: commit3ced5c49bd
("ide: add TSSTcorp CDDVDW SH-S202H to ivb_list[]") It turns out that such devices lack cable detection altogether (which in turn results in incorrect detection of 40-wire cables by our current cable detection strategy) so always handle them by trusting host-side cable detection only. v2: Model detection fixup from Martin. Reported-and-tested-by: Martin Lottermoser <Martin.Lottermoser@t-online.de> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
d8788298d4
commit
8369d5fa63
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue