Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73d1dd93 authored by Sergei Shtylyov's avatar Sergei Shtylyov Committed by Linus Torvalds
Browse files

[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: default avatarSergei 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: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 33b18a60
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -72,6 +72,8 @@
 *   table in which the mode lookup is done
 * - fix the hotswap code:  it caused RESET- to glitch when tristating the bus,
 *   and for HPT36x the obsolete HDIO_TRISTATE_HWIF handler was called instead
 * - pass to init_chipset() handlers a copy of the IDE PCI device structure as
 *   they tamper with its fields
 *		<source@mvista.com>
 *
 */
@@ -1564,13 +1566,16 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
 *
 *	Called when the PCI registration layer (or the IDE initialization)
 *	finds a device matching our IDE device tables.
 *
 *	NOTE: since we'll have to modify some fields of the ide_pci_device_t
 *	structure depending on the chip's revision, we'd better pass a local
 *	copy down the call chain...
 */
 
static int __devinit hpt366_init_one(struct pci_dev *dev, const struct pci_device_id *id)
{
	ide_pci_device_t *d = &hpt366_chipsets[id->driver_data];
	ide_pci_device_t d = hpt366_chipsets[id->driver_data];

	return d->init_setup(dev, d);
	return d.init_setup(dev, &d);
}

static struct pci_device_id hpt366_pci_tbl[] = {