diff options
author | Jeff Garzik <jeff@garzik.org> | 2007-03-09 07:24:15 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-04-28 14:15:56 -0400 |
commit | a0fcdc0259e98d1c16d96baea9ba8a8603e41791 (patch) | |
tree | 568c6a99b5e38486c84b5145ac2e3719b8c62720 | |
parent | 6a3d586d8e8a50e4cfd7f8c36d82a53c5614e05b (diff) |
[libata] Update several PATA drivers for new ->cable_detect hook
All patches authored and signed-off-by Alan Cox, sent on Mar 7, 2007.
I merely combined them all into a single patch.
Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r-- | drivers/ata/pata_hpt3x2n.c | 29 | ||||
-rw-r--r-- | drivers/ata/pata_it821x.c | 33 | ||||
-rw-r--r-- | drivers/ata/pata_mpc52xx.c | 3 | ||||
-rw-r--r-- | drivers/ata/pata_mpiix.c | 4 | ||||
-rw-r--r-- | drivers/ata/pata_ns87410.c | 6 | ||||
-rw-r--r-- | drivers/ata/pata_oldpiix.c | 6 | ||||
-rw-r--r-- | drivers/ata/pata_opti.c | 5 | ||||
-rw-r--r-- | drivers/ata/pata_pcmcia.c | 3 | ||||
-rw-r--r-- | drivers/ata/pata_pdc202xx_old.c | 42 | ||||
-rw-r--r-- | drivers/ata/pata_serverworks.c | 20 | ||||
-rw-r--r-- | drivers/ata/pata_sil680.c | 11 | ||||
-rw-r--r-- | drivers/ata/pata_triflex.c | 4 | ||||
-rw-r--r-- | drivers/ata/sata_via.c | 35 |
13 files changed, 68 insertions, 133 deletions
diff --git a/drivers/ata/pata_hpt3x2n.c b/drivers/ata/pata_hpt3x2n.c index 65f2e180e7fa..78323923143a 100644 --- a/drivers/ata/pata_hpt3x2n.c +++ b/drivers/ata/pata_hpt3x2n.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <linux/libata.h> | 25 | #include <linux/libata.h> |
26 | 26 | ||
27 | #define DRV_NAME "pata_hpt3x2n" | 27 | #define DRV_NAME "pata_hpt3x2n" |
28 | #define DRV_VERSION "0.3.2" | 28 | #define DRV_VERSION "0.3.3" |
29 | 29 | ||
30 | enum { | 30 | enum { |
31 | HPT_PCI_FAST = (1 << 31), | 31 | HPT_PCI_FAST = (1 << 31), |
@@ -115,14 +115,13 @@ static u32 hpt3x2n_find_mode(struct ata_port *ap, int speed) | |||
115 | } | 115 | } |
116 | 116 | ||
117 | /** | 117 | /** |
118 | * hpt3x2n_pre_reset - reset the hpt3x2n bus | 118 | * hpt3x2n_cable_detect - Detect the cable type |
119 | * @ap: ATA port to reset | 119 | * @ap: ATA port to detect on |
120 | * | 120 | * |
121 | * Perform the initial reset handling for the 3x2n series controllers. | 121 | * Return the cable type attached to this port |
122 | * Reset the hardware and state machine, obtain the cable type. | ||
123 | */ | 122 | */ |
124 | 123 | ||
125 | static int hpt3xn_pre_reset(struct ata_port *ap) | 124 | static int hpt3x2n_cable_detect(struct ata_port *ap) |
126 | { | 125 | { |
127 | u8 scr2, ata66; | 126 | u8 scr2, ata66; |
128 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | 127 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
@@ -135,15 +134,26 @@ static int hpt3xn_pre_reset(struct ata_port *ap) | |||
135 | pci_write_config_byte(pdev, 0x5B, scr2); | 134 | pci_write_config_byte(pdev, 0x5B, scr2); |
136 | 135 | ||
137 | if (ata66 & (1 << ap->port_no)) | 136 | if (ata66 & (1 << ap->port_no)) |
138 | ap->cbl = ATA_CBL_PATA40; | 137 | return ATA_CBL_PATA40; |
139 | else | 138 | else |
140 | ap->cbl = ATA_CBL_PATA80; | 139 | return ATA_CBL_PATA80; |
140 | } | ||
141 | |||
142 | /** | ||
143 | * hpt3x2n_pre_reset - reset the hpt3x2n bus | ||
144 | * @ap: ATA port to reset | ||
145 | * | ||
146 | * Perform the initial reset handling for the 3x2n series controllers. | ||
147 | * Reset the hardware and state machine, | ||
148 | */ | ||
141 | 149 | ||
150 | static int hpt3xn_pre_reset(struct ata_port *ap) | ||
151 | { | ||
152 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | ||
142 | /* Reset the state machine */ | 153 | /* Reset the state machine */ |
143 | pci_write_config_byte(pdev, 0x50, 0x37); | 154 | pci_write_config_byte(pdev, 0x50, 0x37); |
144 | pci_write_config_byte(pdev, 0x54, 0x37); | 155 | pci_write_config_byte(pdev, 0x54, 0x37); |
145 | udelay(100); | 156 | udelay(100); |
146 | |||
147 | return ata_std_prereset(ap); | 157 | return ata_std_prereset(ap); |
148 | } | 158 | } |
149 | 159 | ||
@@ -364,6 +374,7 @@ static struct ata_port_operations hpt3x2n_port_ops = { | |||
364 | .thaw = ata_bmdma_thaw, | 374 | .thaw = ata_bmdma_thaw, |
365 | .error_handler = hpt3x2n_error_handler, | 375 | .error_handler = hpt3x2n_error_handler, |
366 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 376 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
377 | .cable_detect = hpt3x2n_cable_detect, | ||
367 | 378 | ||
368 | .bmdma_setup = ata_bmdma_setup, | 379 | .bmdma_setup = ata_bmdma_setup, |
369 | .bmdma_start = ata_bmdma_start, | 380 | .bmdma_start = ata_bmdma_start, |
diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c index be8c9ef8d0d4..f1f8cec8c224 100644 --- a/drivers/ata/pata_it821x.c +++ b/drivers/ata/pata_it821x.c | |||
@@ -80,7 +80,7 @@ | |||
80 | 80 | ||
81 | 81 | ||
82 | #define DRV_NAME "pata_it821x" | 82 | #define DRV_NAME "pata_it821x" |
83 | #define DRV_VERSION "0.3.4" | 83 | #define DRV_VERSION "0.3.6" |
84 | 84 | ||
85 | struct it821x_dev | 85 | struct it821x_dev |
86 | { | 86 | { |
@@ -113,31 +113,6 @@ struct it821x_dev | |||
113 | static int it8212_noraid; | 113 | static int it8212_noraid; |
114 | 114 | ||
115 | /** | 115 | /** |
116 | * it821x_pre_reset - probe | ||
117 | * @ap: ATA port | ||
118 | * | ||
119 | * Set the cable type | ||
120 | */ | ||
121 | |||
122 | static int it821x_pre_reset(struct ata_port *ap) | ||
123 | { | ||
124 | ap->cbl = ATA_CBL_PATA80; | ||
125 | return ata_std_prereset(ap); | ||
126 | } | ||
127 | |||
128 | /** | ||
129 | * it821x_error_handler - probe/reset | ||
130 | * @ap: ATA port | ||
131 | * | ||
132 | * Set the cable type and trigger a probe | ||
133 | */ | ||
134 | |||
135 | static void it821x_error_handler(struct ata_port *ap) | ||
136 | { | ||
137 | return ata_bmdma_drive_eh(ap, it821x_pre_reset, ata_std_softreset, NULL, ata_std_postreset); | ||
138 | } | ||
139 | |||
140 | /** | ||
141 | * it821x_program - program the PIO/MWDMA registers | 116 | * it821x_program - program the PIO/MWDMA registers |
142 | * @ap: ATA port | 117 | * @ap: ATA port |
143 | * @adev: Device to program | 118 | * @adev: Device to program |
@@ -666,8 +641,9 @@ static struct ata_port_operations it821x_smart_port_ops = { | |||
666 | 641 | ||
667 | .freeze = ata_bmdma_freeze, | 642 | .freeze = ata_bmdma_freeze, |
668 | .thaw = ata_bmdma_thaw, | 643 | .thaw = ata_bmdma_thaw, |
669 | .error_handler = it821x_error_handler, | 644 | .error_handler = ata_bmdma_error_handler, |
670 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 645 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
646 | .cable_detect = ata_cable_unknown, | ||
671 | 647 | ||
672 | .bmdma_setup = ata_bmdma_setup, | 648 | .bmdma_setup = ata_bmdma_setup, |
673 | .bmdma_start = ata_bmdma_start, | 649 | .bmdma_start = ata_bmdma_start, |
@@ -702,8 +678,9 @@ static struct ata_port_operations it821x_passthru_port_ops = { | |||
702 | 678 | ||
703 | .freeze = ata_bmdma_freeze, | 679 | .freeze = ata_bmdma_freeze, |
704 | .thaw = ata_bmdma_thaw, | 680 | .thaw = ata_bmdma_thaw, |
705 | .error_handler = it821x_error_handler, | 681 | .error_handler = ata_bmdma_error_handler, |
706 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 682 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
683 | .cable_detect = ata_cable_unknown, | ||
707 | 684 | ||
708 | .bmdma_setup = ata_bmdma_setup, | 685 | .bmdma_setup = ata_bmdma_setup, |
709 | .bmdma_start = it821x_passthru_bmdma_start, | 686 | .bmdma_start = it821x_passthru_bmdma_start, |
diff --git a/drivers/ata/pata_mpc52xx.c b/drivers/ata/pata_mpc52xx.c index 882c36eaf293..77b57321ff52 100644 --- a/drivers/ata/pata_mpc52xx.c +++ b/drivers/ata/pata_mpc52xx.c | |||
@@ -24,7 +24,7 @@ | |||
24 | 24 | ||
25 | 25 | ||
26 | #define DRV_NAME "mpc52xx_ata" | 26 | #define DRV_NAME "mpc52xx_ata" |
27 | #define DRV_VERSION "0.1.0" | 27 | #define DRV_VERSION "0.1.0ac2" |
28 | 28 | ||
29 | 29 | ||
30 | /* Private structures used by the driver */ | 30 | /* Private structures used by the driver */ |
@@ -297,6 +297,7 @@ static struct ata_port_operations mpc52xx_ata_port_ops = { | |||
297 | .freeze = ata_bmdma_freeze, | 297 | .freeze = ata_bmdma_freeze, |
298 | .thaw = ata_bmdma_thaw, | 298 | .thaw = ata_bmdma_thaw, |
299 | .error_handler = mpc52xx_ata_error_handler, | 299 | .error_handler = mpc52xx_ata_error_handler, |
300 | .cable_detect = ata_cable_40wire, | ||
300 | .qc_prep = ata_qc_prep, | 301 | .qc_prep = ata_qc_prep, |
301 | .qc_issue = ata_qc_issue_prot, | 302 | .qc_issue = ata_qc_issue_prot, |
302 | .data_xfer = ata_data_xfer, | 303 | .data_xfer = ata_data_xfer, |
diff --git a/drivers/ata/pata_mpiix.c b/drivers/ata/pata_mpiix.c index 4abe45ac19a2..1718eaca731f 100644 --- a/drivers/ata/pata_mpiix.c +++ b/drivers/ata/pata_mpiix.c | |||
@@ -35,7 +35,7 @@ | |||
35 | #include <linux/libata.h> | 35 | #include <linux/libata.h> |
36 | 36 | ||
37 | #define DRV_NAME "pata_mpiix" | 37 | #define DRV_NAME "pata_mpiix" |
38 | #define DRV_VERSION "0.7.5" | 38 | #define DRV_VERSION "0.7.6" |
39 | 39 | ||
40 | enum { | 40 | enum { |
41 | IDETIM = 0x6C, /* IDE control register */ | 41 | IDETIM = 0x6C, /* IDE control register */ |
@@ -53,7 +53,6 @@ static int mpiix_pre_reset(struct ata_port *ap) | |||
53 | 53 | ||
54 | if (!pci_test_config_bits(pdev, &mpiix_enable_bits)) | 54 | if (!pci_test_config_bits(pdev, &mpiix_enable_bits)) |
55 | return -ENOENT; | 55 | return -ENOENT; |
56 | ap->cbl = ATA_CBL_PATA40; | ||
57 | return ata_std_prereset(ap); | 56 | return ata_std_prereset(ap); |
58 | } | 57 | } |
59 | 58 | ||
@@ -185,6 +184,7 @@ static struct ata_port_operations mpiix_port_ops = { | |||
185 | .thaw = ata_bmdma_thaw, | 184 | .thaw = ata_bmdma_thaw, |
186 | .error_handler = mpiix_error_handler, | 185 | .error_handler = mpiix_error_handler, |
187 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 186 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
187 | .cable_detect = ata_cable_40wire, | ||
188 | 188 | ||
189 | .qc_prep = ata_qc_prep, | 189 | .qc_prep = ata_qc_prep, |
190 | .qc_issue = mpiix_qc_issue_prot, | 190 | .qc_issue = mpiix_qc_issue_prot, |
diff --git a/drivers/ata/pata_ns87410.c b/drivers/ata/pata_ns87410.c index 9944a28daa9c..078aeda9cf8d 100644 --- a/drivers/ata/pata_ns87410.c +++ b/drivers/ata/pata_ns87410.c | |||
@@ -28,13 +28,13 @@ | |||
28 | #include <linux/libata.h> | 28 | #include <linux/libata.h> |
29 | 29 | ||
30 | #define DRV_NAME "pata_ns87410" | 30 | #define DRV_NAME "pata_ns87410" |
31 | #define DRV_VERSION "0.4.3" | 31 | #define DRV_VERSION "0.4.6" |
32 | 32 | ||
33 | /** | 33 | /** |
34 | * ns87410_pre_reset - probe begin | 34 | * ns87410_pre_reset - probe begin |
35 | * @ap: ATA port | 35 | * @ap: ATA port |
36 | * | 36 | * |
37 | * Set up cable type and use generic probe init | 37 | * Check enabled ports |
38 | */ | 38 | */ |
39 | 39 | ||
40 | static int ns87410_pre_reset(struct ata_port *ap) | 40 | static int ns87410_pre_reset(struct ata_port *ap) |
@@ -47,7 +47,6 @@ static int ns87410_pre_reset(struct ata_port *ap) | |||
47 | 47 | ||
48 | if (!pci_test_config_bits(pdev, &ns87410_enable_bits[ap->port_no])) | 48 | if (!pci_test_config_bits(pdev, &ns87410_enable_bits[ap->port_no])) |
49 | return -ENOENT; | 49 | return -ENOENT; |
50 | ap->cbl = ATA_CBL_PATA40; | ||
51 | return ata_std_prereset(ap); | 50 | return ata_std_prereset(ap); |
52 | } | 51 | } |
53 | 52 | ||
@@ -177,6 +176,7 @@ static struct ata_port_operations ns87410_port_ops = { | |||
177 | .thaw = ata_bmdma_thaw, | 176 | .thaw = ata_bmdma_thaw, |
178 | .error_handler = ns87410_error_handler, | 177 | .error_handler = ns87410_error_handler, |
179 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 178 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
179 | .cable_detect = ata_cable_40wire, | ||
180 | 180 | ||
181 | .qc_prep = ata_qc_prep, | 181 | .qc_prep = ata_qc_prep, |
182 | .qc_issue = ns87410_qc_issue_prot, | 182 | .qc_issue = ns87410_qc_issue_prot, |
diff --git a/drivers/ata/pata_oldpiix.c b/drivers/ata/pata_oldpiix.c index da68cd19efd6..dea4690340d1 100644 --- a/drivers/ata/pata_oldpiix.c +++ b/drivers/ata/pata_oldpiix.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <linux/ata.h> | 25 | #include <linux/ata.h> |
26 | 26 | ||
27 | #define DRV_NAME "pata_oldpiix" | 27 | #define DRV_NAME "pata_oldpiix" |
28 | #define DRV_VERSION "0.5.4" | 28 | #define DRV_VERSION "0.5.5" |
29 | 29 | ||
30 | /** | 30 | /** |
31 | * oldpiix_pre_reset - probe begin | 31 | * oldpiix_pre_reset - probe begin |
@@ -44,7 +44,6 @@ static int oldpiix_pre_reset(struct ata_port *ap) | |||
44 | 44 | ||
45 | if (!pci_test_config_bits(pdev, &oldpiix_enable_bits[ap->port_no])) | 45 | if (!pci_test_config_bits(pdev, &oldpiix_enable_bits[ap->port_no])) |
46 | return -ENOENT; | 46 | return -ENOENT; |
47 | ap->cbl = ATA_CBL_PATA40; | ||
48 | return ata_std_prereset(ap); | 47 | return ata_std_prereset(ap); |
49 | } | 48 | } |
50 | 49 | ||
@@ -65,7 +64,7 @@ static void oldpiix_pata_error_handler(struct ata_port *ap) | |||
65 | /** | 64 | /** |
66 | * oldpiix_set_piomode - Initialize host controller PATA PIO timings | 65 | * oldpiix_set_piomode - Initialize host controller PATA PIO timings |
67 | * @ap: Port whose timings we are configuring | 66 | * @ap: Port whose timings we are configuring |
68 | * @adev: um | 67 | * @adev: Device whose timings we are configuring |
69 | * | 68 | * |
70 | * Set PIO mode for device, in host controller PCI config space. | 69 | * Set PIO mode for device, in host controller PCI config space. |
71 | * | 70 | * |
@@ -255,6 +254,7 @@ static const struct ata_port_operations oldpiix_pata_ops = { | |||
255 | .thaw = ata_bmdma_thaw, | 254 | .thaw = ata_bmdma_thaw, |
256 | .error_handler = oldpiix_pata_error_handler, | 255 | .error_handler = oldpiix_pata_error_handler, |
257 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 256 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
257 | .cable_detect = ata_cable_40wire, | ||
258 | 258 | ||
259 | .bmdma_setup = ata_bmdma_setup, | 259 | .bmdma_setup = ata_bmdma_setup, |
260 | .bmdma_start = ata_bmdma_start, | 260 | .bmdma_start = ata_bmdma_start, |
diff --git a/drivers/ata/pata_opti.c b/drivers/ata/pata_opti.c index 3fd3a35c2241..13b63e21838d 100644 --- a/drivers/ata/pata_opti.c +++ b/drivers/ata/pata_opti.c | |||
@@ -34,7 +34,7 @@ | |||
34 | #include <linux/libata.h> | 34 | #include <linux/libata.h> |
35 | 35 | ||
36 | #define DRV_NAME "pata_opti" | 36 | #define DRV_NAME "pata_opti" |
37 | #define DRV_VERSION "0.2.8" | 37 | #define DRV_VERSION "0.2.9" |
38 | 38 | ||
39 | enum { | 39 | enum { |
40 | READ_REG = 0, /* index of Read cycle timing register */ | 40 | READ_REG = 0, /* index of Read cycle timing register */ |
@@ -61,8 +61,6 @@ static int opti_pre_reset(struct ata_port *ap) | |||
61 | 61 | ||
62 | if (!pci_test_config_bits(pdev, &opti_enable_bits[ap->port_no])) | 62 | if (!pci_test_config_bits(pdev, &opti_enable_bits[ap->port_no])) |
63 | return -ENOENT; | 63 | return -ENOENT; |
64 | |||
65 | ap->cbl = ATA_CBL_PATA40; | ||
66 | return ata_std_prereset(ap); | 64 | return ata_std_prereset(ap); |
67 | } | 65 | } |
68 | 66 | ||
@@ -198,6 +196,7 @@ static struct ata_port_operations opti_port_ops = { | |||
198 | .thaw = ata_bmdma_thaw, | 196 | .thaw = ata_bmdma_thaw, |
199 | .error_handler = opti_error_handler, | 197 | .error_handler = opti_error_handler, |
200 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 198 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
199 | .cable_detect = ata_cable_40wire, | ||
201 | 200 | ||
202 | .bmdma_setup = ata_bmdma_setup, | 201 | .bmdma_setup = ata_bmdma_setup, |
203 | .bmdma_start = ata_bmdma_start, | 202 | .bmdma_start = ata_bmdma_start, |
diff --git a/drivers/ata/pata_pcmcia.c b/drivers/ata/pata_pcmcia.c index 103720f873c8..820332a7ec7b 100644 --- a/drivers/ata/pata_pcmcia.c +++ b/drivers/ata/pata_pcmcia.c | |||
@@ -42,7 +42,7 @@ | |||
42 | 42 | ||
43 | 43 | ||
44 | #define DRV_NAME "pata_pcmcia" | 44 | #define DRV_NAME "pata_pcmcia" |
45 | #define DRV_VERSION "0.3.0" | 45 | #define DRV_VERSION "0.3.1" |
46 | 46 | ||
47 | /* | 47 | /* |
48 | * Private data structure to glue stuff together | 48 | * Private data structure to glue stuff together |
@@ -84,6 +84,7 @@ static struct ata_port_operations pcmcia_port_ops = { | |||
84 | .thaw = ata_bmdma_thaw, | 84 | .thaw = ata_bmdma_thaw, |
85 | .error_handler = ata_bmdma_error_handler, | 85 | .error_handler = ata_bmdma_error_handler, |
86 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 86 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
87 | .cable_detect = ata_cable_40wire, | ||
87 | 88 | ||
88 | .qc_prep = ata_qc_prep, | 89 | .qc_prep = ata_qc_prep, |
89 | .qc_issue = ata_qc_issue_prot, | 90 | .qc_issue = ata_qc_issue_prot, |
diff --git a/drivers/ata/pata_pdc202xx_old.c b/drivers/ata/pata_pdc202xx_old.c index a764ce8252aa..ee636beb05e1 100644 --- a/drivers/ata/pata_pdc202xx_old.c +++ b/drivers/ata/pata_pdc202xx_old.c | |||
@@ -22,45 +22,17 @@ | |||
22 | #include <linux/libata.h> | 22 | #include <linux/libata.h> |
23 | 23 | ||
24 | #define DRV_NAME "pata_pdc202xx_old" | 24 | #define DRV_NAME "pata_pdc202xx_old" |
25 | #define DRV_VERSION "0.4.0" | 25 | #define DRV_VERSION "0.4.2" |
26 | 26 | ||
27 | /** | 27 | static int pdc2026x_cable_detect(struct ata_port *ap) |
28 | * pdc2024x_pre_reset - probe begin | ||
29 | * @ap: ATA port | ||
30 | * | ||
31 | * Set up cable type and use generic probe init | ||
32 | */ | ||
33 | |||
34 | static int pdc2024x_pre_reset(struct ata_port *ap) | ||
35 | { | ||
36 | ap->cbl = ATA_CBL_PATA40; | ||
37 | return ata_std_prereset(ap); | ||
38 | } | ||
39 | |||
40 | |||
41 | static void pdc2024x_error_handler(struct ata_port *ap) | ||
42 | { | ||
43 | ata_bmdma_drive_eh(ap, pdc2024x_pre_reset, ata_std_softreset, NULL, ata_std_postreset); | ||
44 | } | ||
45 | |||
46 | |||
47 | static int pdc2026x_pre_reset(struct ata_port *ap) | ||
48 | { | 28 | { |
49 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | 29 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
50 | u16 cis; | 30 | u16 cis; |
51 | 31 | ||
52 | pci_read_config_word(pdev, 0x50, &cis); | 32 | pci_read_config_word(pdev, 0x50, &cis); |
53 | if (cis & (1 << (10 + ap->port_no))) | 33 | if (cis & (1 << (10 + ap->port_no))) |
54 | ap->cbl = ATA_CBL_PATA80; | 34 | return ATA_CBL_PATA80; |
55 | else | 35 | return ATA_CBL_PATA40; |
56 | ap->cbl = ATA_CBL_PATA40; | ||
57 | |||
58 | return ata_std_prereset(ap); | ||
59 | } | ||
60 | |||
61 | static void pdc2026x_error_handler(struct ata_port *ap) | ||
62 | { | ||
63 | ata_bmdma_drive_eh(ap, pdc2026x_pre_reset, ata_std_softreset, NULL, ata_std_postreset); | ||
64 | } | 36 | } |
65 | 37 | ||
66 | /** | 38 | /** |
@@ -291,8 +263,9 @@ static struct ata_port_operations pdc2024x_port_ops = { | |||
291 | 263 | ||
292 | .freeze = ata_bmdma_freeze, | 264 | .freeze = ata_bmdma_freeze, |
293 | .thaw = ata_bmdma_thaw, | 265 | .thaw = ata_bmdma_thaw, |
294 | .error_handler = pdc2024x_error_handler, | 266 | .error_handler = ata_bmdma_error_handler, |
295 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 267 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
268 | .cable_detect = ata_cable_40wire, | ||
296 | 269 | ||
297 | .bmdma_setup = ata_bmdma_setup, | 270 | .bmdma_setup = ata_bmdma_setup, |
298 | .bmdma_start = ata_bmdma_start, | 271 | .bmdma_start = ata_bmdma_start, |
@@ -325,8 +298,9 @@ static struct ata_port_operations pdc2026x_port_ops = { | |||
325 | 298 | ||
326 | .freeze = ata_bmdma_freeze, | 299 | .freeze = ata_bmdma_freeze, |
327 | .thaw = ata_bmdma_thaw, | 300 | .thaw = ata_bmdma_thaw, |
328 | .error_handler = pdc2026x_error_handler, | 301 | .error_handler = ata_bmdma_error_handler, |
329 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 302 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
303 | .cable_detect = pdc2026x_cable_detect, | ||
330 | 304 | ||
331 | .bmdma_setup = ata_bmdma_setup, | 305 | .bmdma_setup = ata_bmdma_setup, |
332 | .bmdma_start = pdc2026x_bmdma_start, | 306 | .bmdma_start = pdc2026x_bmdma_start, |
diff --git a/drivers/ata/pata_serverworks.c b/drivers/ata/pata_serverworks.c index 598eef810a74..283e9afade01 100644 --- a/drivers/ata/pata_serverworks.c +++ b/drivers/ata/pata_serverworks.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * ata-serverworks.c - Serverworks PATA for new ATA layer | 2 | * pata_serverworks.c - Serverworks PATA for new ATA layer |
3 | * (C) 2005 Red Hat Inc | 3 | * (C) 2005 Red Hat Inc |
4 | * Alan Cox <alan@redhat.com> | 4 | * Alan Cox <alan@redhat.com> |
5 | * | 5 | * |
@@ -137,14 +137,14 @@ static struct sv_cable_table cable_detect[] = { | |||
137 | }; | 137 | }; |
138 | 138 | ||
139 | /** | 139 | /** |
140 | * serverworks_pre_reset - cable detection | 140 | * serverworks_cable_detect - cable detection |
141 | * @ap: ATA port | 141 | * @ap: ATA port |
142 | * | 142 | * |
143 | * Perform cable detection according to the device and subvendor | 143 | * Perform cable detection according to the device and subvendor |
144 | * identifications | 144 | * identifications |
145 | */ | 145 | */ |
146 | 146 | ||
147 | static int serverworks_pre_reset(struct ata_port *ap) { | 147 | static int serverworks_cable_detect(struct ata_port *ap) { |
148 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | 148 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
149 | struct sv_cable_table *cb = cable_detect; | 149 | struct sv_cable_table *cb = cable_detect; |
150 | 150 | ||
@@ -152,8 +152,7 @@ static int serverworks_pre_reset(struct ata_port *ap) { | |||
152 | if (cb->device == pdev->device && | 152 | if (cb->device == pdev->device && |
153 | (cb->subvendor == pdev->subsystem_vendor || | 153 | (cb->subvendor == pdev->subsystem_vendor || |
154 | cb->subvendor == PCI_ANY_ID)) { | 154 | cb->subvendor == PCI_ANY_ID)) { |
155 | ap->cbl = cb->cable_detect(ap); | 155 | return cb->cable_detect(ap); |
156 | return ata_std_prereset(ap); | ||
157 | } | 156 | } |
158 | cb++; | 157 | cb++; |
159 | } | 158 | } |
@@ -162,11 +161,6 @@ static int serverworks_pre_reset(struct ata_port *ap) { | |||
162 | return -1; /* kill compiler warning */ | 161 | return -1; /* kill compiler warning */ |
163 | } | 162 | } |
164 | 163 | ||
165 | static void serverworks_error_handler(struct ata_port *ap) | ||
166 | { | ||
167 | return ata_bmdma_drive_eh(ap, serverworks_pre_reset, ata_std_softreset, NULL, ata_std_postreset); | ||
168 | } | ||
169 | |||
170 | /** | 164 | /** |
171 | * serverworks_is_csb - Check for CSB or OSB | 165 | * serverworks_is_csb - Check for CSB or OSB |
172 | * @pdev: PCI device to check | 166 | * @pdev: PCI device to check |
@@ -339,8 +333,9 @@ static struct ata_port_operations serverworks_osb4_port_ops = { | |||
339 | 333 | ||
340 | .freeze = ata_bmdma_freeze, | 334 | .freeze = ata_bmdma_freeze, |
341 | .thaw = ata_bmdma_thaw, | 335 | .thaw = ata_bmdma_thaw, |
342 | .error_handler = serverworks_error_handler, | 336 | .error_handler = ata_bmdma_error_handler, |
343 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 337 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
338 | .cable_detect = serverworks_cable_detect, | ||
344 | 339 | ||
345 | .bmdma_setup = ata_bmdma_setup, | 340 | .bmdma_setup = ata_bmdma_setup, |
346 | .bmdma_start = ata_bmdma_start, | 341 | .bmdma_start = ata_bmdma_start, |
@@ -374,8 +369,9 @@ static struct ata_port_operations serverworks_csb_port_ops = { | |||
374 | 369 | ||
375 | .freeze = ata_bmdma_freeze, | 370 | .freeze = ata_bmdma_freeze, |
376 | .thaw = ata_bmdma_thaw, | 371 | .thaw = ata_bmdma_thaw, |
377 | .error_handler = serverworks_error_handler, | 372 | .error_handler = ata_bmdma_error_handler, |
378 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 373 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
374 | .cable_detect = serverworks_cable_detect, | ||
379 | 375 | ||
380 | .bmdma_setup = ata_bmdma_setup, | 376 | .bmdma_setup = ata_bmdma_setup, |
381 | .bmdma_start = ata_bmdma_start, | 377 | .bmdma_start = ata_bmdma_start, |
diff --git a/drivers/ata/pata_sil680.c b/drivers/ata/pata_sil680.c index dab2889a556f..6770820cfca9 100644 --- a/drivers/ata/pata_sil680.c +++ b/drivers/ata/pata_sil680.c | |||
@@ -33,7 +33,7 @@ | |||
33 | #include <linux/libata.h> | 33 | #include <linux/libata.h> |
34 | 34 | ||
35 | #define DRV_NAME "pata_sil680" | 35 | #define DRV_NAME "pata_sil680" |
36 | #define DRV_VERSION "0.4.5" | 36 | #define DRV_VERSION "0.4.6" |
37 | 37 | ||
38 | /** | 38 | /** |
39 | * sil680_selreg - return register base | 39 | * sil680_selreg - return register base |
@@ -91,12 +91,6 @@ static int sil680_cable_detect(struct ata_port *ap) { | |||
91 | return ATA_CBL_PATA40; | 91 | return ATA_CBL_PATA40; |
92 | } | 92 | } |
93 | 93 | ||
94 | static int sil680_pre_reset(struct ata_port *ap) | ||
95 | { | ||
96 | ap->cbl = sil680_cable_detect(ap); | ||
97 | return ata_std_prereset(ap); | ||
98 | } | ||
99 | |||
100 | /** | 94 | /** |
101 | * sil680_bus_reset - reset the SIL680 bus | 95 | * sil680_bus_reset - reset the SIL680 bus |
102 | * @ap: ATA port to reset | 96 | * @ap: ATA port to reset |
@@ -119,7 +113,7 @@ static int sil680_bus_reset(struct ata_port *ap,unsigned int *classes) | |||
119 | 113 | ||
120 | static void sil680_error_handler(struct ata_port *ap) | 114 | static void sil680_error_handler(struct ata_port *ap) |
121 | { | 115 | { |
122 | ata_bmdma_drive_eh(ap, sil680_pre_reset, sil680_bus_reset, NULL, ata_std_postreset); | 116 | ata_bmdma_drive_eh(ap, ata_std_prereset, sil680_bus_reset, NULL, ata_std_postreset); |
123 | } | 117 | } |
124 | 118 | ||
125 | /** | 119 | /** |
@@ -257,6 +251,7 @@ static struct ata_port_operations sil680_port_ops = { | |||
257 | .thaw = ata_bmdma_thaw, | 251 | .thaw = ata_bmdma_thaw, |
258 | .error_handler = sil680_error_handler, | 252 | .error_handler = sil680_error_handler, |
259 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 253 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
254 | .cable_detect = sil680_cable_detect, | ||
260 | 255 | ||
261 | .bmdma_setup = ata_bmdma_setup, | 256 | .bmdma_setup = ata_bmdma_setup, |
262 | .bmdma_start = ata_bmdma_start, | 257 | .bmdma_start = ata_bmdma_start, |
diff --git a/drivers/ata/pata_triflex.c b/drivers/ata/pata_triflex.c index 71418f2a0cdb..e618ffd6e944 100644 --- a/drivers/ata/pata_triflex.c +++ b/drivers/ata/pata_triflex.c | |||
@@ -43,7 +43,7 @@ | |||
43 | #include <linux/libata.h> | 43 | #include <linux/libata.h> |
44 | 44 | ||
45 | #define DRV_NAME "pata_triflex" | 45 | #define DRV_NAME "pata_triflex" |
46 | #define DRV_VERSION "0.2.7" | 46 | #define DRV_VERSION "0.2.8" |
47 | 47 | ||
48 | /** | 48 | /** |
49 | * triflex_prereset - probe begin | 49 | * triflex_prereset - probe begin |
@@ -63,7 +63,6 @@ static int triflex_prereset(struct ata_port *ap) | |||
63 | 63 | ||
64 | if (!pci_test_config_bits(pdev, &triflex_enable_bits[ap->port_no])) | 64 | if (!pci_test_config_bits(pdev, &triflex_enable_bits[ap->port_no])) |
65 | return -ENOENT; | 65 | return -ENOENT; |
66 | ap->cbl = ATA_CBL_PATA40; | ||
67 | return ata_std_prereset(ap); | 66 | return ata_std_prereset(ap); |
68 | } | 67 | } |
69 | 68 | ||
@@ -214,6 +213,7 @@ static struct ata_port_operations triflex_port_ops = { | |||
214 | .thaw = ata_bmdma_thaw, | 213 | .thaw = ata_bmdma_thaw, |
215 | .error_handler = triflex_error_handler, | 214 | .error_handler = triflex_error_handler, |
216 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 215 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
216 | .cable_detect = ata_cable_40wire, | ||
217 | 217 | ||
218 | .bmdma_setup = ata_bmdma_setup, | 218 | .bmdma_setup = ata_bmdma_setup, |
219 | .bmdma_start = triflex_bmdma_start, | 219 | .bmdma_start = triflex_bmdma_start, |
diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c index 598e6a26a481..842ccf601224 100644 --- a/drivers/ata/sata_via.c +++ b/drivers/ata/sata_via.c | |||
@@ -78,8 +78,7 @@ static u32 svia_scr_read (struct ata_port *ap, unsigned int sc_reg); | |||
78 | static void svia_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val); | 78 | static void svia_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val); |
79 | static void svia_noop_freeze(struct ata_port *ap); | 79 | static void svia_noop_freeze(struct ata_port *ap); |
80 | static void vt6420_error_handler(struct ata_port *ap); | 80 | static void vt6420_error_handler(struct ata_port *ap); |
81 | static void vt6421_sata_error_handler(struct ata_port *ap); | 81 | static int vt6421_pata_cable_detect(struct ata_port *ap); |
82 | static void vt6421_pata_error_handler(struct ata_port *ap); | ||
83 | static void vt6421_set_pio_mode(struct ata_port *ap, struct ata_device *adev); | 82 | static void vt6421_set_pio_mode(struct ata_port *ap, struct ata_device *adev); |
84 | static void vt6421_set_dma_mode(struct ata_port *ap, struct ata_device *adev); | 83 | static void vt6421_set_dma_mode(struct ata_port *ap, struct ata_device *adev); |
85 | static int vt6421_port_start(struct ata_port *ap); | 84 | static int vt6421_port_start(struct ata_port *ap); |
@@ -172,8 +171,9 @@ static const struct ata_port_operations vt6421_pata_ops = { | |||
172 | 171 | ||
173 | .freeze = ata_bmdma_freeze, | 172 | .freeze = ata_bmdma_freeze, |
174 | .thaw = ata_bmdma_thaw, | 173 | .thaw = ata_bmdma_thaw, |
175 | .error_handler = vt6421_pata_error_handler, | 174 | .error_handler = ata_bmdma_error_handler, |
176 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 175 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
176 | .cable_detect = vt6421_pata_cable_detect, | ||
177 | 177 | ||
178 | .irq_handler = ata_interrupt, | 178 | .irq_handler = ata_interrupt, |
179 | .irq_clear = ata_bmdma_irq_clear, | 179 | .irq_clear = ata_bmdma_irq_clear, |
@@ -203,8 +203,9 @@ static const struct ata_port_operations vt6421_sata_ops = { | |||
203 | 203 | ||
204 | .freeze = ata_bmdma_freeze, | 204 | .freeze = ata_bmdma_freeze, |
205 | .thaw = ata_bmdma_thaw, | 205 | .thaw = ata_bmdma_thaw, |
206 | .error_handler = vt6421_sata_error_handler, | 206 | .error_handler = ata_bmdma_error_handler, |
207 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 207 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
208 | .cable_detect = ata_cable_sata, | ||
208 | 209 | ||
209 | .irq_handler = ata_interrupt, | 210 | .irq_handler = ata_interrupt, |
210 | .irq_clear = ata_bmdma_irq_clear, | 211 | .irq_clear = ata_bmdma_irq_clear, |
@@ -330,35 +331,15 @@ static void vt6420_error_handler(struct ata_port *ap) | |||
330 | NULL, ata_std_postreset); | 331 | NULL, ata_std_postreset); |
331 | } | 332 | } |
332 | 333 | ||
333 | static int vt6421_pata_prereset(struct ata_port *ap) | 334 | static int vt6421_pata_cable_detect(struct ata_port *ap) |
334 | { | 335 | { |
335 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | 336 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
336 | u8 tmp; | 337 | u8 tmp; |
337 | 338 | ||
338 | pci_read_config_byte(pdev, PATA_UDMA_TIMING, &tmp); | 339 | pci_read_config_byte(pdev, PATA_UDMA_TIMING, &tmp); |
339 | if (tmp & 0x10) | 340 | if (tmp & 0x10) |
340 | ap->cbl = ATA_CBL_PATA40; | 341 | return ATA_CBL_PATA40; |
341 | else | 342 | return ATA_CBL_PATA80; |
342 | ap->cbl = ATA_CBL_PATA80; | ||
343 | return 0; | ||
344 | } | ||
345 | |||
346 | static void vt6421_pata_error_handler(struct ata_port *ap) | ||
347 | { | ||
348 | return ata_bmdma_drive_eh(ap, vt6421_pata_prereset, ata_std_softreset, | ||
349 | NULL, ata_std_postreset); | ||
350 | } | ||
351 | |||
352 | static int vt6421_sata_prereset(struct ata_port *ap) | ||
353 | { | ||
354 | ap->cbl = ATA_CBL_SATA; | ||
355 | return 0; | ||
356 | } | ||
357 | |||
358 | static void vt6421_sata_error_handler(struct ata_port *ap) | ||
359 | { | ||
360 | return ata_bmdma_drive_eh(ap, vt6421_sata_prereset, ata_std_softreset, | ||
361 | NULL, ata_std_postreset); | ||
362 | } | 343 | } |
363 | 344 | ||
364 | static void vt6421_set_pio_mode(struct ata_port *ap, struct ata_device *adev) | 345 | static void vt6421_set_pio_mode(struct ata_port *ap, struct ata_device *adev) |