diff options
Diffstat (limited to 'drivers/ata/pata_hpt37x.c')
-rw-r--r-- | drivers/ata/pata_hpt37x.c | 112 |
1 files changed, 54 insertions, 58 deletions
diff --git a/drivers/ata/pata_hpt37x.c b/drivers/ata/pata_hpt37x.c index efdd18bc8663..4c5b5183225e 100644 --- a/drivers/ata/pata_hpt37x.c +++ b/drivers/ata/pata_hpt37x.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <linux/libata.h> | 24 | #include <linux/libata.h> |
25 | 25 | ||
26 | #define DRV_NAME "pata_hpt37x" | 26 | #define DRV_NAME "pata_hpt37x" |
27 | #define DRV_VERSION "0.6.18" | 27 | #define DRV_VERSION "0.6.22" |
28 | 28 | ||
29 | struct hpt_clock { | 29 | struct hpt_clock { |
30 | u8 xfer_speed; | 30 | u8 xfer_speed; |
@@ -229,8 +229,8 @@ static int hpt_dma_blacklisted(const struct ata_device *dev, char *modestr, | |||
229 | 229 | ||
230 | while (list[i] != NULL) { | 230 | while (list[i] != NULL) { |
231 | if (!strcmp(list[i], model_num)) { | 231 | if (!strcmp(list[i], model_num)) { |
232 | printk(KERN_WARNING DRV_NAME ": %s is not supported for %s.\n", | 232 | pr_warning(DRV_NAME ": %s is not supported for %s.\n", |
233 | modestr, list[i]); | 233 | modestr, list[i]); |
234 | return 1; | 234 | return 1; |
235 | } | 235 | } |
236 | i++; | 236 | i++; |
@@ -642,7 +642,6 @@ static struct ata_port_operations hpt372_port_ops = { | |||
642 | static struct ata_port_operations hpt374_fn1_port_ops = { | 642 | static struct ata_port_operations hpt374_fn1_port_ops = { |
643 | .inherits = &hpt372_port_ops, | 643 | .inherits = &hpt372_port_ops, |
644 | .cable_detect = hpt374_fn1_cable_detect, | 644 | .cable_detect = hpt374_fn1_cable_detect, |
645 | .prereset = hpt37x_pre_reset, | ||
646 | }; | 645 | }; |
647 | 646 | ||
648 | /** | 647 | /** |
@@ -803,7 +802,7 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
803 | .udma_mask = ATA_UDMA6, | 802 | .udma_mask = ATA_UDMA6, |
804 | .port_ops = &hpt302_port_ops | 803 | .port_ops = &hpt302_port_ops |
805 | }; | 804 | }; |
806 | /* HPT374 - UDMA100, function 1 uses different prereset method */ | 805 | /* HPT374 - UDMA100, function 1 uses different cable_detect method */ |
807 | static const struct ata_port_info info_hpt374_fn0 = { | 806 | static const struct ata_port_info info_hpt374_fn0 = { |
808 | .flags = ATA_FLAG_SLAVE_POSS, | 807 | .flags = ATA_FLAG_SLAVE_POSS, |
809 | .pio_mask = ATA_PIO4, | 808 | .pio_mask = ATA_PIO4, |
@@ -838,7 +837,8 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
838 | if (rc) | 837 | if (rc) |
839 | return rc; | 838 | return rc; |
840 | 839 | ||
841 | if (dev->device == PCI_DEVICE_ID_TTI_HPT366) { | 840 | switch (dev->device) { |
841 | case PCI_DEVICE_ID_TTI_HPT366: | ||
842 | /* May be a later chip in disguise. Check */ | 842 | /* May be a later chip in disguise. Check */ |
843 | /* Older chips are in the HPT366 driver. Ignore them */ | 843 | /* Older chips are in the HPT366 driver. Ignore them */ |
844 | if (rev < 3) | 844 | if (rev < 3) |
@@ -863,54 +863,50 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
863 | chip_table = &hpt372; | 863 | chip_table = &hpt372; |
864 | break; | 864 | break; |
865 | default: | 865 | default: |
866 | printk(KERN_ERR "pata_hpt37x: Unknown HPT366 subtype, " | 866 | pr_err(DRV_NAME ": Unknown HPT366 subtype, " |
867 | "please report (%d).\n", rev); | 867 | "please report (%d).\n", rev); |
868 | return -ENODEV; | 868 | return -ENODEV; |
869 | } | 869 | } |
870 | } else { | 870 | break; |
871 | switch (dev->device) { | 871 | case PCI_DEVICE_ID_TTI_HPT372: |
872 | case PCI_DEVICE_ID_TTI_HPT372: | 872 | /* 372N if rev >= 2 */ |
873 | /* 372N if rev >= 2 */ | 873 | if (rev >= 2) |
874 | if (rev >= 2) | 874 | return -ENODEV; |
875 | return -ENODEV; | 875 | ppi[0] = &info_hpt372; |
876 | ppi[0] = &info_hpt372; | 876 | chip_table = &hpt372a; |
877 | chip_table = &hpt372a; | 877 | break; |
878 | break; | 878 | case PCI_DEVICE_ID_TTI_HPT302: |
879 | case PCI_DEVICE_ID_TTI_HPT302: | 879 | /* 302N if rev > 1 */ |
880 | /* 302N if rev > 1 */ | 880 | if (rev > 1) |
881 | if (rev > 1) | 881 | return -ENODEV; |
882 | return -ENODEV; | 882 | ppi[0] = &info_hpt302; |
883 | ppi[0] = &info_hpt302; | 883 | /* Check this */ |
884 | /* Check this */ | 884 | chip_table = &hpt302; |
885 | chip_table = &hpt302; | 885 | break; |
886 | break; | 886 | case PCI_DEVICE_ID_TTI_HPT371: |
887 | case PCI_DEVICE_ID_TTI_HPT371: | 887 | if (rev > 1) |
888 | if (rev > 1) | 888 | return -ENODEV; |
889 | return -ENODEV; | 889 | ppi[0] = &info_hpt302; |
890 | ppi[0] = &info_hpt302; | 890 | chip_table = &hpt371; |
891 | chip_table = &hpt371; | 891 | /* |
892 | /* | 892 | * Single channel device, master is not present but the BIOS |
893 | * Single channel device, master is not present | 893 | * (or us for non x86) must mark it absent |
894 | * but the BIOS (or us for non x86) must mark it | 894 | */ |
895 | * absent | 895 | pci_read_config_byte(dev, 0x50, &mcr1); |
896 | */ | 896 | mcr1 &= ~0x04; |
897 | pci_read_config_byte(dev, 0x50, &mcr1); | 897 | pci_write_config_byte(dev, 0x50, mcr1); |
898 | mcr1 &= ~0x04; | 898 | break; |
899 | pci_write_config_byte(dev, 0x50, mcr1); | 899 | case PCI_DEVICE_ID_TTI_HPT374: |
900 | break; | 900 | chip_table = &hpt374; |
901 | case PCI_DEVICE_ID_TTI_HPT374: | 901 | if (!(PCI_FUNC(dev->devfn) & 1)) |
902 | chip_table = &hpt374; | 902 | *ppi = &info_hpt374_fn0; |
903 | if (!(PCI_FUNC(dev->devfn) & 1)) | 903 | else |
904 | *ppi = &info_hpt374_fn0; | 904 | *ppi = &info_hpt374_fn1; |
905 | else | 905 | break; |
906 | *ppi = &info_hpt374_fn1; | 906 | default: |
907 | break; | 907 | pr_err(DRV_NAME ": PCI table is bogus, please report (%d).\n", |
908 | default: | 908 | dev->device); |
909 | printk(KERN_ERR | 909 | return -ENODEV; |
910 | "pata_hpt37x: PCI table is bogus, please report (%d).\n", | ||
911 | dev->device); | ||
912 | return -ENODEV; | ||
913 | } | ||
914 | } | 910 | } |
915 | /* Ok so this is a chip we support */ | 911 | /* Ok so this is a chip we support */ |
916 | 912 | ||
@@ -957,8 +953,7 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
957 | u8 sr; | 953 | u8 sr; |
958 | u32 total = 0; | 954 | u32 total = 0; |
959 | 955 | ||
960 | printk(KERN_WARNING | 956 | pr_warning(DRV_NAME ": BIOS has not set timing clocks.\n"); |
961 | "pata_hpt37x: BIOS has not set timing clocks.\n"); | ||
962 | 957 | ||
963 | /* This is the process the HPT371 BIOS is reported to use */ | 958 | /* This is the process the HPT371 BIOS is reported to use */ |
964 | for (i = 0; i < 128; i++) { | 959 | for (i = 0; i < 128; i++) { |
@@ -1014,7 +1009,7 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
1014 | (f_high << 16) | f_low | 0x100); | 1009 | (f_high << 16) | f_low | 0x100); |
1015 | } | 1010 | } |
1016 | if (adjust == 8) { | 1011 | if (adjust == 8) { |
1017 | printk(KERN_ERR "pata_hpt37x: DPLL did not stabilize!\n"); | 1012 | pr_err(DRV_NAME ": DPLL did not stabilize!\n"); |
1018 | return -ENODEV; | 1013 | return -ENODEV; |
1019 | } | 1014 | } |
1020 | if (dpll == 3) | 1015 | if (dpll == 3) |
@@ -1022,8 +1017,8 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
1022 | else | 1017 | else |
1023 | private_data = (void *)hpt37x_timings_50; | 1018 | private_data = (void *)hpt37x_timings_50; |
1024 | 1019 | ||
1025 | printk(KERN_INFO "pata_hpt37x: bus clock %dMHz, using %dMHz DPLL.\n", | 1020 | pr_info(DRV_NAME ": bus clock %dMHz, using %dMHz DPLL.\n", |
1026 | MHz[clock_slot], MHz[dpll]); | 1021 | MHz[clock_slot], MHz[dpll]); |
1027 | } else { | 1022 | } else { |
1028 | private_data = (void *)chip_table->clocks[clock_slot]; | 1023 | private_data = (void *)chip_table->clocks[clock_slot]; |
1029 | /* | 1024 | /* |
@@ -1036,8 +1031,9 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
1036 | ppi[0] = &info_hpt370_33; | 1031 | ppi[0] = &info_hpt370_33; |
1037 | if (clock_slot < 2 && ppi[0] == &info_hpt370a) | 1032 | if (clock_slot < 2 && ppi[0] == &info_hpt370a) |
1038 | ppi[0] = &info_hpt370a_33; | 1033 | ppi[0] = &info_hpt370a_33; |
1039 | printk(KERN_INFO "pata_hpt37x: %s using %dMHz bus clock.\n", | 1034 | |
1040 | chip_table->name, MHz[clock_slot]); | 1035 | pr_info(DRV_NAME ": %s using %dMHz bus clock.\n", |
1036 | chip_table->name, MHz[clock_slot]); | ||
1041 | } | 1037 | } |
1042 | 1038 | ||
1043 | /* Now kick off ATA set up */ | 1039 | /* Now kick off ATA set up */ |