diff options
author | Sergei Shtylyov <sshtylyov@ru.mvista.com> | 2012-03-11 15:27:01 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2012-03-13 16:43:04 -0400 |
commit | 419fd2461354f7675ef298fa26ffceff4d0b2168 (patch) | |
tree | 18cc0a2fae97229702e4f167bb2a86ad157ce062 /drivers/ata | |
parent | 8a686bc984454c1eba6788d0d97dec72ad87f052 (diff) |
pata_cmd64x: implement sff_irq_clear() method
Convert the driver's two bmdma_stop() methods into sff_irq_clear() methods --
they shouldn't have been bothering with clearing interrupts from the very start;
the driver will now use the standard bmdma_stop() method implementation (where
appropriate).
Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/pata_cmd64x.c | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/drivers/ata/pata_cmd64x.c b/drivers/ata/pata_cmd64x.c index f0dcb7056b19..d4f26a515ef8 100644 --- a/drivers/ata/pata_cmd64x.c +++ b/drivers/ata/pata_cmd64x.c | |||
@@ -33,7 +33,7 @@ | |||
33 | #include <linux/libata.h> | 33 | #include <linux/libata.h> |
34 | 34 | ||
35 | #define DRV_NAME "pata_cmd64x" | 35 | #define DRV_NAME "pata_cmd64x" |
36 | #define DRV_VERSION "0.2.16" | 36 | #define DRV_VERSION "0.2.17" |
37 | 37 | ||
38 | /* | 38 | /* |
39 | * CMD64x specific registers definition. | 39 | * CMD64x specific registers definition. |
@@ -230,41 +230,39 @@ static void cmd64x_set_dmamode(struct ata_port *ap, struct ata_device *adev) | |||
230 | } | 230 | } |
231 | 231 | ||
232 | /** | 232 | /** |
233 | * cmd64x_bmdma_stop - DMA stop callback | 233 | * cmd64x_sff_irq_clear - clear IDE interrupt |
234 | * @qc: Command in progress | 234 | * @ap: ATA interface |
235 | * | 235 | * |
236 | * DMA has completed. | 236 | * Clear IDE interrupt in CFR/ARTTIM23 and DMA status registers. |
237 | */ | 237 | */ |
238 | 238 | ||
239 | static void cmd64x_bmdma_stop(struct ata_queued_cmd *qc) | 239 | static void cmd64x_sff_irq_clear(struct ata_port *ap) |
240 | { | 240 | { |
241 | struct ata_port *ap = qc->ap; | ||
242 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | 241 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
243 | int irq_reg = ap->port_no ? ARTTIM23 : CFR; | 242 | int irq_reg = ap->port_no ? ARTTIM23 : CFR; |
244 | u8 irq_stat; | 243 | u8 irq_stat; |
245 | 244 | ||
246 | ata_bmdma_stop(qc); | 245 | ata_bmdma_irq_clear(ap); |
247 | 246 | ||
248 | /* Reading the register should be enough to clear the interrupt */ | 247 | /* Reading the register should be enough to clear the interrupt */ |
249 | pci_read_config_byte(pdev, irq_reg, &irq_stat); | 248 | pci_read_config_byte(pdev, irq_reg, &irq_stat); |
250 | } | 249 | } |
251 | 250 | ||
252 | /** | 251 | /** |
253 | * cmd648_bmdma_stop - DMA stop callback | 252 | * cmd648_sff_irq_clear - clear IDE interrupt |
254 | * @qc: Command in progress | 253 | * @ap: ATA interface |
255 | * | 254 | * |
256 | * DMA has completed. | 255 | * Clear IDE interrupt in MRDMODE and DMA status registers. |
257 | */ | 256 | */ |
258 | 257 | ||
259 | static void cmd648_bmdma_stop(struct ata_queued_cmd *qc) | 258 | static void cmd648_sff_irq_clear(struct ata_port *ap) |
260 | { | 259 | { |
261 | struct ata_port *ap = qc->ap; | ||
262 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | 260 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
263 | unsigned long base = pci_resource_start(pdev, 4); | 261 | unsigned long base = pci_resource_start(pdev, 4); |
264 | int irq_mask = ap->port_no ? MRDMODE_INTR_CH1 : MRDMODE_INTR_CH0; | 262 | int irq_mask = ap->port_no ? MRDMODE_INTR_CH1 : MRDMODE_INTR_CH0; |
265 | u8 mrdmode; | 263 | u8 mrdmode; |
266 | 264 | ||
267 | ata_bmdma_stop(qc); | 265 | ata_bmdma_irq_clear(ap); |
268 | 266 | ||
269 | /* Clear this port's interrupt bit (leaving the other port alone) */ | 267 | /* Clear this port's interrupt bit (leaving the other port alone) */ |
270 | mrdmode = inb(base + 1); | 268 | mrdmode = inb(base + 1); |
@@ -296,25 +294,26 @@ static const struct ata_port_operations cmd64x_base_ops = { | |||
296 | 294 | ||
297 | static struct ata_port_operations cmd64x_port_ops = { | 295 | static struct ata_port_operations cmd64x_port_ops = { |
298 | .inherits = &cmd64x_base_ops, | 296 | .inherits = &cmd64x_base_ops, |
299 | .bmdma_stop = cmd64x_bmdma_stop, | 297 | .sff_irq_clear = cmd64x_sff_irq_clear, |
300 | .cable_detect = ata_cable_40wire, | 298 | .cable_detect = ata_cable_40wire, |
301 | }; | 299 | }; |
302 | 300 | ||
303 | static struct ata_port_operations cmd646r1_port_ops = { | 301 | static struct ata_port_operations cmd646r1_port_ops = { |
304 | .inherits = &cmd64x_base_ops, | 302 | .inherits = &cmd64x_base_ops, |
303 | .sff_irq_clear = cmd64x_sff_irq_clear, | ||
305 | .bmdma_stop = cmd646r1_bmdma_stop, | 304 | .bmdma_stop = cmd646r1_bmdma_stop, |
306 | .cable_detect = ata_cable_40wire, | 305 | .cable_detect = ata_cable_40wire, |
307 | }; | 306 | }; |
308 | 307 | ||
309 | static struct ata_port_operations cmd646r3_port_ops = { | 308 | static struct ata_port_operations cmd646r3_port_ops = { |
310 | .inherits = &cmd64x_base_ops, | 309 | .inherits = &cmd64x_base_ops, |
311 | .bmdma_stop = cmd648_bmdma_stop, | 310 | .sff_irq_clear = cmd648_sff_irq_clear, |
312 | .cable_detect = ata_cable_40wire, | 311 | .cable_detect = ata_cable_40wire, |
313 | }; | 312 | }; |
314 | 313 | ||
315 | static struct ata_port_operations cmd648_port_ops = { | 314 | static struct ata_port_operations cmd648_port_ops = { |
316 | .inherits = &cmd64x_base_ops, | 315 | .inherits = &cmd64x_base_ops, |
317 | .bmdma_stop = cmd648_bmdma_stop, | 316 | .sff_irq_clear = cmd648_sff_irq_clear, |
318 | .cable_detect = cmd648_cable_detect, | 317 | .cable_detect = cmd648_cable_detect, |
319 | }; | 318 | }; |
320 | 319 | ||