Merge branch 'linux-next' of git://git.infradead.org/ubifs-2.6 and git://git.infradea...
[pandora-kernel.git] / drivers / ata / pata_via.c
index ac8d7d9..8e9f504 100644 (file)
@@ -124,6 +124,17 @@ static const struct via_isa_bridge {
        { NULL }
 };
 
+static const struct dmi_system_id no_atapi_dma_dmi_table[] = {
+       {
+               .ident = "AVERATEC 3200",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "AVERATEC"),
+                       DMI_MATCH(DMI_BOARD_NAME, "3200"),
+               },
+       },
+       { }
+};
+
 struct via_port {
        u8 cached_device;
 };
@@ -350,11 +361,18 @@ static unsigned long via_mode_filter(struct ata_device *dev, unsigned long mask)
        if (config->id == PCI_DEVICE_ID_VIA_82C586_0) {
                ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num));
                if (strcmp(model_num, "TS64GSSD25-M") == 0) {
-                       ata_dev_printk(dev, KERN_WARNING,
-       "disabling UDMA mode due to reported lockups with this device.\n");
+                       ata_dev_warn(dev,
+       "disabling UDMA mode due to reported lockups with this device\n");
                        mask &= ~ ATA_MASK_UDMA;
                }
        }
+
+       if (dev->class == ATA_DEV_ATAPI &&
+           dmi_check_system(no_atapi_dma_dmi_table)) {
+               ata_dev_warn(dev, "controller locks up on ATAPI DMA, forcing PIO\n");
+               mask &= ATA_MASK_PIO;
+       }
+
        return mask;
 }
 
@@ -551,14 +569,12 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
        const struct ata_port_info *ppi[] = { NULL, NULL };
        struct pci_dev *isa;
        const struct via_isa_bridge *config;
-       static int printed_version;
        u8 enable;
        u32 timing;
        unsigned long flags = id->driver_data;
        int rc;
 
-       if (!printed_version++)
-               dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
+       ata_print_version_once(&pdev->dev, DRV_VERSION);
 
        rc = pcim_enable_device(pdev);
        if (rc)