]> err.no Git - linux-2.6/blobdiff - drivers/ide/pci/cs5530.c
ide: move ide_rate_filter() calls to the upper layer (take 2)
[linux-2.6] / drivers / ide / pci / cs5530.c
index acaf71fd4c09b0feaacd53e6af3caaee03b3634c..518f430c1529c17a1d62fcfb997ed6849832f133 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * linux/drivers/ide/pci/cs5530.c              Version 0.73    Mar 10 2007
+ * linux/drivers/ide/pci/cs5530.c              Version 0.74    Jul 28 2007
  *
  * Copyright (C) 2000                  Andre Hedrick <andre@linux-ide.org>
  * Copyright (C) 2000                  Mark Lord <mlord@pobox.com>
@@ -143,13 +143,11 @@ static int cs5530_config_dma(ide_drive_t *drive)
        return 1;
 }
 
-static int cs5530_tune_chipset(ide_drive_t *drive, u8 mode)
+static int cs5530_tune_chipset(ide_drive_t *drive, const u8 mode)
 {
        unsigned long basereg;
        unsigned int reg, timings = 0;
 
-       mode = ide_rate_filter(drive, mode);
-
        /*
         * Tell the drive to switch to the new mode; abort on failure.
         */
@@ -207,6 +205,9 @@ static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const ch
        struct pci_dev *master_0 = NULL, *cs5530_0 = NULL;
        unsigned long flags;
 
+       if (pci_resource_start(dev, 4) == 0)
+               return -EFAULT;
+
        dev = NULL;
        while ((dev = pci_get_device(PCI_VENDOR_ID_CYRIX, PCI_ANY_ID, dev)) != NULL) {
                switch (dev->device) {
@@ -325,6 +326,9 @@ static void __devinit init_hwif_cs5530 (ide_hwif_t *hwif)
                        /* needs autotuning later */
        }
 
+       if (hwif->dma_base == 0)
+               return;
+
        hwif->atapi_dma = 1;
        hwif->ultra_mask = 0x07;
        hwif->mwdma_mask = 0x07;