ide: generic IDE PCI driver, add another device exception
generic IDE PCI driver, add another device exception This device is char device and is grabbed by generic ide driver: 00:0b.0 Class ffff: National Semiconductor Corporation 87410 IDE (rev ff) (prog-if ff) Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- Disallow generic IDE PCI driver to grab it by adding next condition. Also consolidate exceptions to one bigger 'switch (dev->vendor)'. Signed-off-by: Jiri Slaby <jirislaby@gmail.com> Cc: Ingo Korb <ml@akana.de> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
0d2157f78d
commit
ea30759643
1 changed files with 23 additions and 14 deletions
|
@ -198,32 +198,41 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
|
|||
static int __devinit generic_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
{
|
||||
ide_pci_device_t *d = &generic_chipsets[id->driver_data];
|
||||
u16 command;
|
||||
int ret = -ENODEV;
|
||||
|
||||
/* Don't use the generic entry unless instructed to do so */
|
||||
if (id->driver_data == 0 && ide_generic_all == 0)
|
||||
goto out;
|
||||
|
||||
if (dev->vendor == PCI_VENDOR_ID_UMC &&
|
||||
dev->device == PCI_DEVICE_ID_UMC_UM8886A &&
|
||||
(!(PCI_FUNC(dev->devfn) & 1)))
|
||||
goto out; /* UM8886A/BF pair */
|
||||
|
||||
if (dev->vendor == PCI_VENDOR_ID_OPTI &&
|
||||
dev->device == PCI_DEVICE_ID_OPTI_82C558 &&
|
||||
(!(PCI_FUNC(dev->devfn) & 1)))
|
||||
goto out;
|
||||
|
||||
if (dev->vendor == PCI_VENDOR_ID_JMICRON) {
|
||||
if (dev->device != PCI_DEVICE_ID_JMICRON_JMB368 && PCI_FUNC(dev->devfn) != 1)
|
||||
switch (dev->vendor) {
|
||||
case PCI_VENDOR_ID_UMC:
|
||||
if (dev->device == PCI_DEVICE_ID_UMC_UM8886A &&
|
||||
!(PCI_FUNC(dev->devfn) & 1))
|
||||
goto out; /* UM8886A/BF pair */
|
||||
break;
|
||||
case PCI_VENDOR_ID_OPTI:
|
||||
if (dev->device == PCI_DEVICE_ID_OPTI_82C558 &&
|
||||
!(PCI_FUNC(dev->devfn) & 1))
|
||||
goto out;
|
||||
break;
|
||||
case PCI_VENDOR_ID_JMICRON:
|
||||
if (dev->device != PCI_DEVICE_ID_JMICRON_JMB368 &&
|
||||
PCI_FUNC(dev->devfn) != 1)
|
||||
goto out;
|
||||
break;
|
||||
case PCI_VENDOR_ID_NS:
|
||||
if (dev->device == PCI_DEVICE_ID_NS_87410 &&
|
||||
(dev->class >> 8) != PCI_CLASS_STORAGE_IDE)
|
||||
goto out;
|
||||
break;
|
||||
}
|
||||
|
||||
if (dev->vendor != PCI_VENDOR_ID_JMICRON) {
|
||||
u16 command;
|
||||
pci_read_config_word(dev, PCI_COMMAND, &command);
|
||||
if (!(command & PCI_COMMAND_IO)) {
|
||||
printk(KERN_INFO "Skipping disabled %s IDE controller.\n", d->name);
|
||||
printk(KERN_INFO "Skipping disabled %s IDE "
|
||||
"controller.\n", d->name);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue