[PATCH] ide: restore support for AEC6280M cards in aec62xx.c
authorThibaut VARENE <[email protected]>
Fri, 3 Feb 2006 11:03:48 +0000 (03:03 -0800)
committerLinus Torvalds <[email protected]>
Fri, 3 Feb 2006 16:32:01 +0000 (08:32 -0800)
This patch adds missing initialization sequence, necessary to get the
"Macintosh" version of AEC6280 cards to work in Linux.  Without this patch,
the driver hangs for several minutes trying to initialize the card and the
kernel is left in an unstable state.  This patch has been tested fine on
ppc and i386.

Signed-off-by: Thibaut VARENE <[email protected]>
Acked-by: Bartlomiej Zolnierkiewicz <[email protected]>
Cc: Alan Cox <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
drivers/ide/pci/aec62xx.c

index a21b1e11eef4e5fe0ca849847695b049106fd943..c743e68c33aadca3894017ed2ba1c82cde5cff52 100644 (file)
@@ -262,6 +262,21 @@ static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev, const ch
        else
                pci_set_drvdata(dev, (void *) aec6xxx_34_base);
 
+       /* These are necessary to get AEC6280 Macintosh cards to work */
+       if ((dev->device == PCI_DEVICE_ID_ARTOP_ATP865) ||
+           (dev->device == PCI_DEVICE_ID_ARTOP_ATP865R)) {
+               u8 reg49h = 0, reg4ah = 0;
+               /* Clear reset and test bits.  */
+               pci_read_config_byte(dev, 0x49, &reg49h);
+               pci_write_config_byte(dev, 0x49, reg49h & ~0x30);
+               /* Enable chip interrupt output.  */
+               pci_read_config_byte(dev, 0x4a, &reg4ah);
+               pci_write_config_byte(dev, 0x4a, reg4ah & ~0x01);
+               /* Enable burst mode. */
+               pci_read_config_byte(dev, 0x4a, &reg4ah);
+               pci_write_config_byte(dev, 0x4a, reg4ah | 0x80);
+       }
+
        return dev->irq;
 }