aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/pci/cs5530.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/pci/cs5530.c')
-rw-r--r--drivers/ide/pci/cs5530.c26
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
83static void cs5530_tuneproc (ide_drive_t *drive, u8 pio) /* pio=255 means "autotune" */ 84static 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
146static int cs5530_tune_chipset(ide_drive_t *drive, u8 mode) 145static 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);