diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2009-06-11 01:58:01 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2009-06-11 01:58:01 -0700 | 
| commit | 4894e4aca82aca927d0404ce61f021f790de4b1e (patch) | |
| tree | bbe0d083829f5858295298f188d885367cf4b1f6 /drivers/ide/ide-iops.c | |
| parent | 05e882f890038c702a4f15d385135d03cf74ad48 (diff) | |
| parent | 07a2039b8eb0af4ff464efd3dfd95de5c02648c6 (diff) | |
| download | olio-linux-3.10-4894e4aca82aca927d0404ce61f021f790de4b1e.tar.xz olio-linux-3.10-4894e4aca82aca927d0404ce61f021f790de4b1e.zip  | |
Merge commit 'v2.6.30' into next
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 c19a221b1e1..06fe002116e 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c @@ -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;  |