summaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-iops.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-11-27 14:29:03 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-11-27 14:29:03 -0800
commit7749c902592f610dc448830210174ab922f54be9 (patch)
treeaad9430a5d5ff71b68b4f798859a5ac98143d005 /drivers/ide/ide-iops.c
parent2ea0718884c520f85c869c3bfef57477316ea91f (diff)
parent6413f08666830afec21e41e50c28a2c5105ede69 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: ide-scsi: use print_hex_dump from <linux/kernel.h> ide: More TSST drives with broken cable detection ali14xx: constify __initdata ide: remove bogus ide_fix_driveid() comment trm290: remove bogus init_hwif_trm290() comment piix: add HP compaq laptop to short cable list alim15x3: add Mitac 8317 and derivatives to ali_cable_override() ide: add TORiSAN model: CD-ROM CDR_U200 fw: 1.09 to DMA blacklist amd74xx: arm hack drivers/ide: Add missing "space" ide-cris: don't override ide_register_hw() result ide: move CONFIG_IDE_ETRAX to drivers/ide/Kconfig ide: add CONFIG_IDE_H8300 config option ide/Kconfig: fix mpc8xx host driver dependencies macide/q40ide: add missing __init tag to {macide,q40ide}_init() aec62xx: Fix kernel oops in driver's probe function ide: skip ide_wait_not_busy() on noprobe-disks siimage: remove resetproc() method ide: don't set PIO mode on pre-EIDE drives sis5513.c: Add Packard Bell EasyNote K5305 to laptops
Diffstat (limited to 'drivers/ide/ide-iops.c')
-rw-r--r--drivers/ide/ide-iops.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
index e17a9ee120e..5c3256180ae 100644
--- a/drivers/ide/ide-iops.c
+++ b/drivers/ide/ide-iops.c
@@ -303,9 +303,6 @@ void default_hwif_transport(ide_hwif_t *hwif)
hwif->atapi_output_bytes = atapi_output_bytes;
}
-/*
- * Beginning of Taskfile OPCODE Library and feature sets.
- */
void ide_fix_driveid (struct hd_driveid *id)
{
#ifndef __LITTLE_ENDIAN
@@ -592,6 +589,9 @@ EXPORT_SYMBOL_GPL(ide_in_drive_list);
static const struct drive_list_entry ivb_list[] = {
{ "QUANTUM FIREBALLlct10 05" , "A03.0900" },
{ "TSSTcorp CDDVDW SH-S202J" , "SB00" },
+ { "TSSTcorp CDDVDW SH-S202J" , "SB01" },
+ { "TSSTcorp CDDVDW SH-S202N" , "SB00" },
+ { "TSSTcorp CDDVDW SH-S202N" , "SB01" },
{ NULL , NULL }
};
@@ -756,7 +756,7 @@ int ide_driveid_update(ide_drive_t *drive)
int ide_config_drive_speed(ide_drive_t *drive, u8 speed)
{
ide_hwif_t *hwif = drive->hwif;
- int error;
+ int error = 0;
u8 stat;
// while (HWGROUP(drive)->busy)
@@ -767,6 +767,10 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed)
hwif->dma_host_off(drive);
#endif
+ /* Skip setting PIO flow-control modes on pre-EIDE drives */
+ if ((speed & 0xf8) == XFER_PIO_0 && !(drive->id->capability & 0x08))
+ goto skip;
+
/*
* Don't use ide_wait_cmd here - it will
* attempt to set_geometry and recalibrate,
@@ -814,6 +818,7 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed)
drive->id->dma_mword &= ~0x0F00;
drive->id->dma_1word &= ~0x0F00;
+ skip:
#ifdef CONFIG_BLK_DEV_IDEDMA
if (speed >= XFER_SW_DMA_0)
hwif->dma_host_on(drive);