diff options
Diffstat (limited to 'drivers/ide/pci/sc1200.c')
-rw-r--r-- | drivers/ide/pci/sc1200.c | 32 |
1 files changed, 5 insertions, 27 deletions
diff --git a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c index 79ecab689489..76f0868054a1 100644 --- a/drivers/ide/pci/sc1200.c +++ b/drivers/ide/pci/sc1200.c | |||
@@ -68,17 +68,6 @@ static unsigned short sc1200_get_pci_clock (void) | |||
68 | return pci_clock; | 68 | return pci_clock; |
69 | } | 69 | } |
70 | 70 | ||
71 | extern char *ide_xfer_verbose (byte xfer_rate); | ||
72 | |||
73 | /* | ||
74 | * Set a new transfer mode at the drive | ||
75 | */ | ||
76 | static int sc1200_set_xfer_mode (ide_drive_t *drive, byte mode) | ||
77 | { | ||
78 | printk("%s: sc1200_set_xfer_mode(%s)\n", drive->name, ide_xfer_verbose(mode)); | ||
79 | return ide_config_drive_speed(drive, mode); | ||
80 | } | ||
81 | |||
82 | /* | 71 | /* |
83 | * Here are the standard PIO mode 0-4 timings for each "format". | 72 | * Here are the standard PIO mode 0-4 timings for each "format". |
84 | * Format-0 uses fast data reg timings, with slower command reg timings. | 73 | * Format-0 uses fast data reg timings, with slower command reg timings. |
@@ -138,7 +127,7 @@ out: | |||
138 | return mask; | 127 | return mask; |
139 | } | 128 | } |
140 | 129 | ||
141 | static int sc1200_tune_chipset(ide_drive_t *drive, const u8 mode) | 130 | static void sc1200_set_dma_mode(ide_drive_t *drive, const u8 mode) |
142 | { | 131 | { |
143 | ide_hwif_t *hwif = HWIF(drive); | 132 | ide_hwif_t *hwif = HWIF(drive); |
144 | int unit = drive->select.b.unit; | 133 | int unit = drive->select.b.unit; |
@@ -146,17 +135,9 @@ static int sc1200_tune_chipset(ide_drive_t *drive, const u8 mode) | |||
146 | unsigned short pci_clock; | 135 | unsigned short pci_clock; |
147 | unsigned int basereg = hwif->channel ? 0x50 : 0x40; | 136 | unsigned int basereg = hwif->channel ? 0x50 : 0x40; |
148 | 137 | ||
149 | /* | ||
150 | * Tell the drive to switch to the new mode; abort on failure. | ||
151 | */ | ||
152 | if (sc1200_set_xfer_mode(drive, mode)) | ||
153 | return 1; /* failure */ | ||
154 | |||
155 | pci_clock = sc1200_get_pci_clock(); | 138 | pci_clock = sc1200_get_pci_clock(); |
156 | 139 | ||
157 | /* | 140 | /* |
158 | * Now tune the chipset to match the drive: | ||
159 | * | ||
160 | * Note that each DMA mode has several timings associated with it. | 141 | * Note that each DMA mode has several timings associated with it. |
161 | * The correct timing depends on the fast PCI clock freq. | 142 | * The correct timing depends on the fast PCI clock freq. |
162 | */ | 143 | */ |
@@ -216,8 +197,6 @@ static int sc1200_tune_chipset(ide_drive_t *drive, const u8 mode) | |||
216 | } else { | 197 | } else { |
217 | pci_write_config_dword(hwif->pci_dev, basereg+12, timings); | 198 | pci_write_config_dword(hwif->pci_dev, basereg+12, timings); |
218 | } | 199 | } |
219 | |||
220 | return 0; /* success */ | ||
221 | } | 200 | } |
222 | 201 | ||
223 | /* | 202 | /* |
@@ -286,13 +265,12 @@ static void sc1200_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
286 | if (mode != -1) { | 265 | if (mode != -1) { |
287 | printk("SC1200: %s: changing (U)DMA mode\n", drive->name); | 266 | printk("SC1200: %s: changing (U)DMA mode\n", drive->name); |
288 | hwif->dma_off_quietly(drive); | 267 | hwif->dma_off_quietly(drive); |
289 | if (sc1200_tune_chipset(drive, mode) == 0) | 268 | if (ide_set_dma_mode(drive, mode) == 0) |
290 | hwif->dma_host_on(drive); | 269 | hwif->dma_host_on(drive); |
291 | return; | 270 | return; |
292 | } | 271 | } |
293 | 272 | ||
294 | if (sc1200_set_xfer_mode(drive, XFER_PIO_0 + pio) == 0) | 273 | sc1200_tunepio(drive, pio); |
295 | sc1200_tunepio(drive, pio); | ||
296 | } | 274 | } |
297 | 275 | ||
298 | #ifdef CONFIG_PM | 276 | #ifdef CONFIG_PM |
@@ -408,7 +386,7 @@ static void __devinit init_hwif_sc1200 (ide_hwif_t *hwif) | |||
408 | hwif->autodma = 1; | 386 | hwif->autodma = 1; |
409 | 387 | ||
410 | hwif->set_pio_mode = &sc1200_set_pio_mode; | 388 | hwif->set_pio_mode = &sc1200_set_pio_mode; |
411 | hwif->speedproc = &sc1200_tune_chipset; | 389 | hwif->set_dma_mode = &sc1200_set_dma_mode; |
412 | } | 390 | } |
413 | hwif->atapi_dma = 1; | 391 | hwif->atapi_dma = 1; |
414 | hwif->ultra_mask = 0x07; | 392 | hwif->ultra_mask = 0x07; |
@@ -423,7 +401,7 @@ static ide_pci_device_t sc1200_chipset __devinitdata = { | |||
423 | .init_hwif = init_hwif_sc1200, | 401 | .init_hwif = init_hwif_sc1200, |
424 | .autodma = AUTODMA, | 402 | .autodma = AUTODMA, |
425 | .bootable = ON_BOARD, | 403 | .bootable = ON_BOARD, |
426 | .host_flags = IDE_HFLAG_ABUSE_DMA_MODES, | 404 | .host_flags = IDE_HFLAG_ABUSE_DMA_MODES | IDE_HFLAG_POST_SET_MODE, |
427 | .pio_mask = ATA_PIO4, | 405 | .pio_mask = ATA_PIO4, |
428 | }; | 406 | }; |
429 | 407 | ||