Merge branch 'clk' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux...
[pandora-kernel.git] / drivers / ata / pata_via.c
index 8e9f504..255f336 100644 (file)
@@ -509,6 +509,27 @@ static void via_config_fifo(struct pci_dev *pdev, unsigned int flags)
        }
 }
 
+static void via_fixup(struct pci_dev *pdev, const struct via_isa_bridge *config)
+{
+       u32 timing;
+
+       /* Initialise the FIFO for the enabled channels. */
+       via_config_fifo(pdev, config->flags);
+
+       if (config->udma_mask == ATA_UDMA4) {
+               /* The 66 MHz devices require we enable the clock */
+               pci_read_config_dword(pdev, 0x50, &timing);
+               timing |= 0x80008;
+               pci_write_config_dword(pdev, 0x50, timing);
+       }
+       if (config->flags & VIA_BAD_CLK66) {
+               /* Disable the 66MHz clock on problem devices */
+               pci_read_config_dword(pdev, 0x50, &timing);
+               timing &= ~0x80008;
+               pci_write_config_dword(pdev, 0x50, timing);
+       }
+}
+
 /**
  *     via_init_one            -       discovery callback
  *     @pdev: PCI device
@@ -570,7 +591,6 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
        struct pci_dev *isa;
        const struct via_isa_bridge *config;
        u8 enable;
-       u32 timing;
        unsigned long flags = id->driver_data;
        int rc;
 
@@ -609,9 +629,6 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
                        return -ENODEV;
        }
 
-       /* Initialise the FIFO for the enabled channels. */
-       via_config_fifo(pdev, config->flags);
-
        /* Clock set up */
        switch (config->udma_mask) {
        case 0x00:
@@ -637,12 +654,7 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
                return -ENODEV;
        }
 
-       if (config->flags & VIA_BAD_CLK66) {
-               /* Disable the 66MHz clock on problem devices */
-               pci_read_config_dword(pdev, 0x50, &timing);
-               timing &= ~0x80008;
-               pci_write_config_dword(pdev, 0x50, timing);
-       }
+       via_fixup(pdev, config);
 
        /* We have established the device type, now fire it up */
        return ata_pci_bmdma_init_one(pdev, ppi, &via_sht, (void *)config, 0);
@@ -661,29 +673,14 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
 
 static int via_reinit_one(struct pci_dev *pdev)
 {
-       u32 timing;
        struct ata_host *host = dev_get_drvdata(&pdev->dev);
-       const struct via_isa_bridge *config = host->private_data;
        int rc;
 
        rc = ata_pci_device_do_resume(pdev);
        if (rc)
                return rc;
 
-       via_config_fifo(pdev, config->flags);
-
-       if (config->udma_mask == ATA_UDMA4) {
-               /* The 66 MHz devices require we enable the clock */
-               pci_read_config_dword(pdev, 0x50, &timing);
-               timing |= 0x80008;
-               pci_write_config_dword(pdev, 0x50, timing);
-       }
-       if (config->flags & VIA_BAD_CLK66) {
-               /* Disable the 66MHz clock on problem devices */
-               pci_read_config_dword(pdev, 0x50, &timing);
-               timing &= ~0x80008;
-               pci_write_config_dword(pdev, 0x50, timing);
-       }
+       via_fixup(pdev, host->private_data);
 
        ata_host_resume(host);
        return 0;