diff options
Diffstat (limited to 'drivers/ide/pci/slc90e66.c')
-rw-r--r-- | drivers/ide/pci/slc90e66.c | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c index 628b0664f576..ae8e91324577 100644 --- a/drivers/ide/pci/slc90e66.c +++ b/drivers/ide/pci/slc90e66.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/slc90e66.c Version 0.15 Jul 6, 2007 | 2 | * linux/drivers/ide/pci/slc90e66.c Version 0.16 Jul 14, 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org> |
5 | * Copyright (C) 2006-2007 MontaVista Software, Inc. <source@mvista.com> | 5 | * Copyright (C) 2006-2007 MontaVista Software, Inc. <source@mvista.com> |
@@ -95,19 +95,17 @@ static void slc90e66_tune_pio (ide_drive_t *drive, u8 pio) | |||
95 | spin_unlock_irqrestore(&ide_lock, flags); | 95 | spin_unlock_irqrestore(&ide_lock, flags); |
96 | } | 96 | } |
97 | 97 | ||
98 | static void slc90e66_tune_drive (ide_drive_t *drive, u8 pio) | 98 | static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) |
99 | { | 99 | { |
100 | pio = ide_get_best_pio_mode(drive, pio, 4); | ||
101 | slc90e66_tune_pio(drive, pio); | 100 | slc90e66_tune_pio(drive, pio); |
102 | (void) ide_config_drive_speed(drive, XFER_PIO_0 + pio); | 101 | (void) ide_config_drive_speed(drive, XFER_PIO_0 + pio); |
103 | } | 102 | } |
104 | 103 | ||
105 | static int slc90e66_tune_chipset (ide_drive_t *drive, u8 xferspeed) | 104 | static int slc90e66_tune_chipset(ide_drive_t *drive, const u8 speed) |
106 | { | 105 | { |
107 | ide_hwif_t *hwif = HWIF(drive); | 106 | ide_hwif_t *hwif = HWIF(drive); |
108 | struct pci_dev *dev = hwif->pci_dev; | 107 | struct pci_dev *dev = hwif->pci_dev; |
109 | u8 maslave = hwif->channel ? 0x42 : 0x40; | 108 | u8 maslave = hwif->channel ? 0x42 : 0x40; |
110 | u8 speed = ide_rate_filter(drive, xferspeed); | ||
111 | int sitre = 0, a_speed = 7 << (drive->dn * 4); | 109 | int sitre = 0, a_speed = 7 << (drive->dn * 4); |
112 | int u_speed = 0, u_flag = 1 << drive->dn; | 110 | int u_speed = 0, u_flag = 1 << drive->dn; |
113 | u16 reg4042, reg44, reg48, reg4a; | 111 | u16 reg4042, reg44, reg48, reg4a; |
@@ -127,11 +125,6 @@ static int slc90e66_tune_chipset (ide_drive_t *drive, u8 xferspeed) | |||
127 | case XFER_MW_DMA_2: | 125 | case XFER_MW_DMA_2: |
128 | case XFER_MW_DMA_1: | 126 | case XFER_MW_DMA_1: |
129 | case XFER_SW_DMA_2: break; | 127 | case XFER_SW_DMA_2: break; |
130 | case XFER_PIO_4: | ||
131 | case XFER_PIO_3: | ||
132 | case XFER_PIO_2: | ||
133 | case XFER_PIO_1: | ||
134 | case XFER_PIO_0: break; | ||
135 | default: return -1; | 128 | default: return -1; |
136 | } | 129 | } |
137 | 130 | ||
@@ -151,10 +144,7 @@ static int slc90e66_tune_chipset (ide_drive_t *drive, u8 xferspeed) | |||
151 | pci_write_config_word(dev, 0x4a, reg4a & ~a_speed); | 144 | pci_write_config_word(dev, 0x4a, reg4a & ~a_speed); |
152 | } | 145 | } |
153 | 146 | ||
154 | if (speed > XFER_PIO_4) | 147 | slc90e66_tune_pio(drive, slc90e66_dma_2_pio(speed)); |
155 | slc90e66_tune_pio(drive, slc90e66_dma_2_pio(speed)); | ||
156 | else | ||
157 | slc90e66_tune_pio(drive, speed - XFER_PIO_0); | ||
158 | 148 | ||
159 | return ide_config_drive_speed(drive, speed); | 149 | return ide_config_drive_speed(drive, speed); |
160 | } | 150 | } |
@@ -167,7 +157,7 @@ static int slc90e66_config_drive_xfer_rate (ide_drive_t *drive) | |||
167 | return 0; | 157 | return 0; |
168 | 158 | ||
169 | if (ide_use_fast_pio(drive)) | 159 | if (ide_use_fast_pio(drive)) |
170 | slc90e66_tune_drive(drive, 255); | 160 | ide_set_max_pio(drive); |
171 | 161 | ||
172 | return -1; | 162 | return -1; |
173 | } | 163 | } |
@@ -183,7 +173,7 @@ static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif) | |||
183 | hwif->irq = hwif->channel ? 15 : 14; | 173 | hwif->irq = hwif->channel ? 15 : 14; |
184 | 174 | ||
185 | hwif->speedproc = &slc90e66_tune_chipset; | 175 | hwif->speedproc = &slc90e66_tune_chipset; |
186 | hwif->tuneproc = &slc90e66_tune_drive; | 176 | hwif->set_pio_mode = &slc90e66_set_pio_mode; |
187 | 177 | ||
188 | pci_read_config_byte(hwif->pci_dev, 0x47, ®47); | 178 | pci_read_config_byte(hwif->pci_dev, 0x47, ®47); |
189 | 179 | ||