diff options
-rw-r--r-- | drivers/ata/pata_cmd64x.c | 28 |
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 | ||