diff options
Diffstat (limited to 'drivers/ide/pci/cs5530.c')
-rw-r--r-- | drivers/ide/pci/cs5530.c | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/drivers/ide/pci/cs5530.c b/drivers/ide/pci/cs5530.c index e5949b1d3fb0..741507b4cd93 100644 --- a/drivers/ide/pci/cs5530.c +++ b/drivers/ide/pci/cs5530.c | |||
@@ -71,19 +71,18 @@ static void cs5530_tunepio(ide_drive_t *drive, u8 pio) | |||
71 | } | 71 | } |
72 | 72 | ||
73 | /** | 73 | /** |
74 | * cs5530_tuneproc - select/set PIO modes | 74 | * cs5530_set_pio_mode - set PIO mode |
75 | * @drive: drive | ||
76 | * @pio: PIO mode number | ||
75 | * | 77 | * |
76 | * cs5530_tuneproc() handles selection/setting of PIO modes | 78 | * Handles setting of PIO mode for both the chipset and drive. |
77 | * for both the chipset and drive. | ||
78 | * | 79 | * |
79 | * The ide_init_cs5530() routine guarantees that all drives | 80 | * The init_hwif_cs5530() routine guarantees that all drives |
80 | * will have valid default PIO timings set up before we get here. | 81 | * will have valid default PIO timings set up before we get here. |
81 | */ | 82 | */ |
82 | 83 | ||
83 | static void cs5530_tuneproc (ide_drive_t *drive, u8 pio) /* pio=255 means "autotune" */ | 84 | static void cs5530_set_pio_mode(ide_drive_t *drive, const u8 pio) |
84 | { | 85 | { |
85 | pio = ide_get_best_pio_mode(drive, pio, 4); | ||
86 | |||
87 | if (cs5530_set_xfer_mode(drive, XFER_PIO_0 + pio) == 0) | 86 | if (cs5530_set_xfer_mode(drive, XFER_PIO_0 + pio) == 0) |
88 | cs5530_tunepio(drive, pio); | 87 | cs5530_tunepio(drive, pio); |
89 | } | 88 | } |
@@ -143,13 +142,11 @@ static int cs5530_config_dma(ide_drive_t *drive) | |||
143 | return 1; | 142 | return 1; |
144 | } | 143 | } |
145 | 144 | ||
146 | static int cs5530_tune_chipset(ide_drive_t *drive, u8 mode) | 145 | static int cs5530_tune_chipset(ide_drive_t *drive, const u8 mode) |
147 | { | 146 | { |
148 | unsigned long basereg; | 147 | unsigned long basereg; |
149 | unsigned int reg, timings = 0; | 148 | unsigned int reg, timings = 0; |
150 | 149 | ||
151 | mode = ide_rate_filter(drive, mode); | ||
152 | |||
153 | /* | 150 | /* |
154 | * Tell the drive to switch to the new mode; abort on failure. | 151 | * Tell the drive to switch to the new mode; abort on failure. |
155 | */ | 152 | */ |
@@ -166,13 +163,6 @@ static int cs5530_tune_chipset(ide_drive_t *drive, u8 mode) | |||
166 | case XFER_MW_DMA_0: timings = 0x00077771; break; | 163 | case XFER_MW_DMA_0: timings = 0x00077771; break; |
167 | case XFER_MW_DMA_1: timings = 0x00012121; break; | 164 | case XFER_MW_DMA_1: timings = 0x00012121; break; |
168 | case XFER_MW_DMA_2: timings = 0x00002020; break; | 165 | case XFER_MW_DMA_2: timings = 0x00002020; break; |
169 | case XFER_PIO_4: | ||
170 | case XFER_PIO_3: | ||
171 | case XFER_PIO_2: | ||
172 | case XFER_PIO_1: | ||
173 | case XFER_PIO_0: | ||
174 | cs5530_tunepio(drive, mode - XFER_PIO_0); | ||
175 | return 0; | ||
176 | default: | 166 | default: |
177 | BUG(); | 167 | BUG(); |
178 | break; | 168 | break; |
@@ -308,7 +298,7 @@ static void __devinit init_hwif_cs5530 (ide_hwif_t *hwif) | |||
308 | if (hwif->mate) | 298 | if (hwif->mate) |
309 | hwif->serialized = hwif->mate->serialized = 1; | 299 | hwif->serialized = hwif->mate->serialized = 1; |
310 | 300 | ||
311 | hwif->tuneproc = &cs5530_tuneproc; | 301 | hwif->set_pio_mode = &cs5530_set_pio_mode; |
312 | hwif->speedproc = &cs5530_tune_chipset; | 302 | hwif->speedproc = &cs5530_tune_chipset; |
313 | 303 | ||
314 | basereg = CS5530_BASEREG(hwif); | 304 | basereg = CS5530_BASEREG(hwif); |