aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergei Shtylyov <sshtylyov@ru.mvista.com>2006-12-13 03:35:51 -0500
committerLinus Torvalds <torvalds@woody.osdl.org>2006-12-13 12:05:55 -0500
commit73d1dd93c462b52512685fe118159eafc7eb9f7e (patch)
tree79fc116a127e7f47ad93e5e6816206e11614a753
parent33b18a602525198ab8892789dab6839f325407f8 (diff)
[PATCH] ide: fix the case of multiple HPT3xx chips present
init_chipset_hpt366() modifies some fields of the ide_pci_device_t structure depending on the chip's revision, so pass it a copy of the structure to avoid issues when multiple different chips are present. Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Cc: Bartlomiej Zolnierkiewicz <B.Zolnierkiewicz@elka.pw.edu.pl> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--drivers/ide/pci/hpt366.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c
index 29a377044323..4968b16fa307 100644
--- a/drivers/ide/pci/hpt366.c
+++ b/drivers/ide/pci/hpt366.c
@@ -72,6 +72,8 @@
72 * table in which the mode lookup is done 72 * table in which the mode lookup is done
73 * - fix the hotswap code: it caused RESET- to glitch when tristating the bus, 73 * - fix the hotswap code: it caused RESET- to glitch when tristating the bus,
74 * and for HPT36x the obsolete HDIO_TRISTATE_HWIF handler was called instead 74 * and for HPT36x the obsolete HDIO_TRISTATE_HWIF handler was called instead
75 * - pass to init_chipset() handlers a copy of the IDE PCI device structure as
76 * they tamper with its fields
75 * <source@mvista.com> 77 * <source@mvista.com>
76 * 78 *
77 */ 79 */
@@ -1564,13 +1566,16 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
1564 * 1566 *
1565 * Called when the PCI registration layer (or the IDE initialization) 1567 * Called when the PCI registration layer (or the IDE initialization)
1566 * finds a device matching our IDE device tables. 1568 * finds a device matching our IDE device tables.
1569 *
1570 * NOTE: since we'll have to modify some fields of the ide_pci_device_t
1571 * structure depending on the chip's revision, we'd better pass a local
1572 * copy down the call chain...
1567 */ 1573 */
1568
1569static int __devinit hpt366_init_one(struct pci_dev *dev, const struct pci_device_id *id) 1574static int __devinit hpt366_init_one(struct pci_dev *dev, const struct pci_device_id *id)
1570{ 1575{
1571 ide_pci_device_t *d = &hpt366_chipsets[id->driver_data]; 1576 ide_pci_device_t d = hpt366_chipsets[id->driver_data];
1572 1577
1573 return d->init_setup(dev, d); 1578 return d.init_setup(dev, &d);
1574} 1579}
1575 1580
1576static struct pci_device_id hpt366_pci_tbl[] = { 1581static struct pci_device_id hpt366_pci_tbl[] = {