diff options
Diffstat (limited to 'drivers/ata/pata_cmd64x.c')
-rw-r--r-- | drivers/ata/pata_cmd64x.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/drivers/ata/pata_cmd64x.c b/drivers/ata/pata_cmd64x.c index 0efb1f58f255..4c81a71b8877 100644 --- a/drivers/ata/pata_cmd64x.c +++ b/drivers/ata/pata_cmd64x.c | |||
@@ -2,6 +2,7 @@ | |||
2 | * pata_cmd64x.c - CMD64x PATA for new ATA layer | 2 | * pata_cmd64x.c - CMD64x PATA for new ATA layer |
3 | * (C) 2005 Red Hat Inc | 3 | * (C) 2005 Red Hat Inc |
4 | * Alan Cox <alan@lxorguk.ukuu.org.uk> | 4 | * Alan Cox <alan@lxorguk.ukuu.org.uk> |
5 | * (C) 2009-2010 Bartlomiej Zolnierkiewicz | ||
5 | * | 6 | * |
6 | * Based upon | 7 | * Based upon |
7 | * linux/drivers/ide/pci/cmd64x.c Version 1.30 Sept 10, 2002 | 8 | * linux/drivers/ide/pci/cmd64x.c Version 1.30 Sept 10, 2002 |
@@ -39,11 +40,7 @@ | |||
39 | 40 | ||
40 | enum { | 41 | enum { |
41 | CFR = 0x50, | 42 | CFR = 0x50, |
42 | CFR_INTR_CH0 = 0x02, | 43 | CFR_INTR_CH0 = 0x04, |
43 | CNTRL = 0x51, | ||
44 | CNTRL_DIS_RA0 = 0x40, | ||
45 | CNTRL_DIS_RA1 = 0x80, | ||
46 | CNTRL_ENA_2ND = 0x08, | ||
47 | CMDTIM = 0x52, | 44 | CMDTIM = 0x52, |
48 | ARTTIM0 = 0x53, | 45 | ARTTIM0 = 0x53, |
49 | DRWTIM0 = 0x54, | 46 | DRWTIM0 = 0x54, |
@@ -53,9 +50,6 @@ enum { | |||
53 | ARTTIM23_DIS_RA2 = 0x04, | 50 | ARTTIM23_DIS_RA2 = 0x04, |
54 | ARTTIM23_DIS_RA3 = 0x08, | 51 | ARTTIM23_DIS_RA3 = 0x08, |
55 | ARTTIM23_INTR_CH1 = 0x10, | 52 | ARTTIM23_INTR_CH1 = 0x10, |
56 | ARTTIM2 = 0x57, | ||
57 | ARTTIM3 = 0x57, | ||
58 | DRWTIM23 = 0x58, | ||
59 | DRWTIM2 = 0x58, | 53 | DRWTIM2 = 0x58, |
60 | BRST = 0x59, | 54 | BRST = 0x59, |
61 | DRWTIM3 = 0x5b, | 55 | DRWTIM3 = 0x5b, |
@@ -63,14 +57,11 @@ enum { | |||
63 | MRDMODE = 0x71, | 57 | MRDMODE = 0x71, |
64 | MRDMODE_INTR_CH0 = 0x04, | 58 | MRDMODE_INTR_CH0 = 0x04, |
65 | MRDMODE_INTR_CH1 = 0x08, | 59 | MRDMODE_INTR_CH1 = 0x08, |
66 | MRDMODE_BLK_CH0 = 0x10, | ||
67 | MRDMODE_BLK_CH1 = 0x20, | ||
68 | BMIDESR0 = 0x72, | 60 | BMIDESR0 = 0x72, |
69 | UDIDETCR0 = 0x73, | 61 | UDIDETCR0 = 0x73, |
70 | DTPR0 = 0x74, | 62 | DTPR0 = 0x74, |
71 | BMIDECR1 = 0x78, | 63 | BMIDECR1 = 0x78, |
72 | BMIDECSR = 0x79, | 64 | BMIDECSR = 0x79, |
73 | BMIDESR1 = 0x7A, | ||
74 | UDIDETCR1 = 0x7B, | 65 | UDIDETCR1 = 0x7B, |
75 | DTPR1 = 0x7C | 66 | DTPR1 = 0x7C |
76 | }; | 67 | }; |
@@ -130,8 +121,14 @@ static void cmd64x_set_timing(struct ata_port *ap, struct ata_device *adev, u8 m | |||
130 | 121 | ||
131 | if (pair) { | 122 | if (pair) { |
132 | struct ata_timing tp; | 123 | struct ata_timing tp; |
124 | |||
133 | ata_timing_compute(pair, pair->pio_mode, &tp, T, 0); | 125 | ata_timing_compute(pair, pair->pio_mode, &tp, T, 0); |
134 | ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP); | 126 | ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP); |
127 | if (pair->dma_mode) { | ||
128 | ata_timing_compute(pair, pair->dma_mode, | ||
129 | &tp, T, 0); | ||
130 | ata_timing_merge(&tp, &t, &t, ATA_TIMING_SETUP); | ||
131 | } | ||
135 | } | 132 | } |
136 | } | 133 | } |
137 | 134 | ||
@@ -147,7 +144,9 @@ static void cmd64x_set_timing(struct ata_port *ap, struct ata_device *adev, u8 m | |||
147 | /* Now convert the clocks into values we can actually stuff into | 144 | /* Now convert the clocks into values we can actually stuff into |
148 | the chip */ | 145 | the chip */ |
149 | 146 | ||
150 | if (t.recover > 1) | 147 | if (t.recover == 16) |
148 | t.recover = 0; | ||
149 | else if (t.recover > 1) | ||
151 | t.recover--; | 150 | t.recover--; |
152 | else | 151 | else |
153 | t.recover = 15; | 152 | t.recover = 15; |
@@ -245,7 +244,7 @@ static void cmd648_bmdma_stop(struct ata_queued_cmd *qc) | |||
245 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | 244 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
246 | u8 dma_intr; | 245 | u8 dma_intr; |
247 | int dma_mask = ap->port_no ? ARTTIM23_INTR_CH1 : CFR_INTR_CH0; | 246 | int dma_mask = ap->port_no ? ARTTIM23_INTR_CH1 : CFR_INTR_CH0; |
248 | int dma_reg = ap->port_no ? ARTTIM2 : CFR; | 247 | int dma_reg = ap->port_no ? ARTTIM23 : CFR; |
249 | 248 | ||
250 | ata_bmdma_stop(qc); | 249 | ata_bmdma_stop(qc); |
251 | 250 | ||
@@ -368,7 +367,7 @@ static int cmd64x_init_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
368 | pci_write_config_byte(pdev, UDIDETCR0, 0xF0); | 367 | pci_write_config_byte(pdev, UDIDETCR0, 0xF0); |
369 | #endif | 368 | #endif |
370 | 369 | ||
371 | return ata_pci_sff_init_one(pdev, ppi, &cmd64x_sht, NULL); | 370 | return ata_pci_sff_init_one(pdev, ppi, &cmd64x_sht, NULL, 0); |
372 | } | 371 | } |
373 | 372 | ||
374 | #ifdef CONFIG_PM | 373 | #ifdef CONFIG_PM |