summaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2009-11-19 20:31:31 +0100
committerJeff Garzik <jgarzik@redhat.com>2009-12-03 08:46:35 +0100
commit10a9c969222de5302cff0bb41dd7f114f9aa8e5d (patch)
tree27f9feaf8ab5b255d384c5bf1734c0458a68f25d /drivers/ata
parentpata_hpt3x2n: fix cable detection (diff)
downloadlinux-10a9c969222de5302cff0bb41dd7f114f9aa8e5d.tar.xz
linux-10a9c969222de5302cff0bb41dd7f114f9aa8e5d.zip
pata_hpt{37x,3x2n}: add debounce delay to cable detection methods
Alan Cox reported that cable detection sometimes works unreliably for HPT3xxN and that the issue is fixed by adding debounce delay as used by the vendor driver. Sergei Shtylyov also noticed that debounce delay is needed for all HPT37x and HPT3xxN chipsets according to vendor drivers. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/pata_hpt37x.c3
-rw-r--r--drivers/ata/pata_hpt3x2n.c3
2 files changed, 6 insertions, 0 deletions
diff --git a/drivers/ata/pata_hpt37x.c b/drivers/ata/pata_hpt37x.c
index 0921e8b30a08..9f5189c700bb 100644
--- a/drivers/ata/pata_hpt37x.c
+++ b/drivers/ata/pata_hpt37x.c
@@ -316,6 +316,9 @@ static int hpt37x_cable_detect(struct ata_port *ap)
pci_read_config_byte(pdev, 0x5B, &scr2);
pci_write_config_byte(pdev, 0x5B, scr2 & ~0x01);
+
+ udelay(10); /* debounce */
+
/* Cable register now active */
pci_read_config_byte(pdev, 0x5A, &ata66);
/* Restore state */
diff --git a/drivers/ata/pata_hpt3x2n.c b/drivers/ata/pata_hpt3x2n.c
index 2ab9fd6c597f..8d63eba782ff 100644
--- a/drivers/ata/pata_hpt3x2n.c
+++ b/drivers/ata/pata_hpt3x2n.c
@@ -128,6 +128,9 @@ static int hpt3x2n_cable_detect(struct ata_port *ap)
pci_read_config_byte(pdev, 0x5B, &scr2);
pci_write_config_byte(pdev, 0x5B, scr2 & ~0x01);
+
+ udelay(10); /* debounce */
+
/* Cable register now active */
pci_read_config_byte(pdev, 0x5A, &ata66);
/* Restore state */