aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/pata_cmd64x.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/drivers/ata/pata_cmd64x.c b/drivers/ata/pata_cmd64x.c
index e1fb39a74ce1..028638c7c1d9 100644
--- a/drivers/ata/pata_cmd64x.c
+++ b/drivers/ata/pata_cmd64x.c
@@ -32,7 +32,7 @@
32#include <linux/libata.h> 32#include <linux/libata.h>
33 33
34#define DRV_NAME "pata_cmd64x" 34#define DRV_NAME "pata_cmd64x"
35#define DRV_VERSION "0.2.5" 35#define DRV_VERSION "0.2.15"
36 36
37/* 37/*
38 * CMD64x specific registers definition. 38 * CMD64x specific registers definition.
@@ -368,21 +368,27 @@ static int cmd64x_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
368 if (id->driver_data == 0) /* 643 */ 368 if (id->driver_data == 0) /* 643 */
369 ata_pci_bmdma_clear_simplex(pdev); 369 ata_pci_bmdma_clear_simplex(pdev);
370 370
371 if (pdev->device == PCI_DEVICE_ID_CMD_646) { 371 if (pdev->device == PCI_DEVICE_ID_CMD_646)
372 /* Does UDMA work ? */ 372 switch (pdev->revision) {
373 if (pdev->revision > 4) { 373 /* UDMA works since rev 5 */
374 default:
374 ppi[0] = &cmd_info[2]; 375 ppi[0] = &cmd_info[2];
375 ppi[1] = &cmd_info[2]; 376 ppi[1] = &cmd_info[2];
376 } 377 break;
377 /* Early rev with other problems ? */ 378 case 3:
378 else if (pdev->revision == 1) { 379 case 4:
380 break;
381 /* Rev 1 with other problems? */
382 case 1:
379 ppi[0] = &cmd_info[3]; 383 ppi[0] = &cmd_info[3];
380 ppi[1] = &cmd_info[3]; 384 ppi[1] = &cmd_info[3];
381 } 385 /* FALL THRU */
382 /* revs 1,2 have no CNTRL_CH0 */ 386 /* Early revs have no CNTRL_CH0 */
383 if (pdev->revision < 3) 387 case 2:
388 case 0:
384 cntrl_ch0_ok = 0; 389 cntrl_ch0_ok = 0;
385 } 390 break;
391 }
386 392
387 cmd64x_fixup(pdev); 393 cmd64x_fixup(pdev);
388 394