aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/legacy/ali14xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/legacy/ali14xx.c')
-rw-r--r--drivers/ide/legacy/ali14xx.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/drivers/ide/legacy/ali14xx.c b/drivers/ide/legacy/ali14xx.c
index bc8b1f8de614..33bb7b87be5d 100644
--- a/drivers/ide/legacy/ali14xx.c
+++ b/drivers/ide/legacy/ali14xx.c
@@ -86,7 +86,7 @@ static u8 regOff; /* output to base port to close registers */
86/* 86/*
87 * Read a controller register. 87 * Read a controller register.
88 */ 88 */
89static inline u8 inReg (u8 reg) 89static inline u8 inReg(u8 reg)
90{ 90{
91 outb_p(reg, regPort); 91 outb_p(reg, regPort);
92 return inb(dataPort); 92 return inb(dataPort);
@@ -95,7 +95,7 @@ static inline u8 inReg (u8 reg)
95/* 95/*
96 * Write a controller register. 96 * Write a controller register.
97 */ 97 */
98static void outReg (u8 data, u8 reg) 98static void outReg(u8 data, u8 reg)
99{ 99{
100 outb_p(reg, regPort); 100 outb_p(reg, regPort);
101 outb_p(data, dataPort); 101 outb_p(data, dataPort);
@@ -143,7 +143,7 @@ static void ali14xx_set_pio_mode(ide_drive_t *drive, const u8 pio)
143/* 143/*
144 * Auto-detect the IDE controller port. 144 * Auto-detect the IDE controller port.
145 */ 145 */
146static int __init findPort (void) 146static int __init findPort(void)
147{ 147{
148 int i; 148 int i;
149 u8 t; 149 u8 t;
@@ -175,7 +175,8 @@ static int __init findPort (void)
175/* 175/*
176 * Initialize controller registers with default values. 176 * Initialize controller registers with default values.
177 */ 177 */
178static int __init initRegisters (void) { 178static int __init initRegisters(void)
179{
179 const RegInitializer *p; 180 const RegInitializer *p;
180 u8 t; 181 u8 t;
181 unsigned long flags; 182 unsigned long flags;
@@ -199,7 +200,8 @@ static const struct ide_port_info ali14xx_port_info = {
199 200
200static int __init ali14xx_probe(void) 201static int __init ali14xx_probe(void)
201{ 202{
202 static u8 idx[4] = { 0, 1, 0xff, 0xff }; 203 ide_hwif_t *hwif, *mate;
204 static u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
203 hw_regs_t hw[2]; 205 hw_regs_t hw[2];
204 206
205 printk(KERN_DEBUG "ali14xx: base=0x%03x, regOn=0x%02x.\n", 207 printk(KERN_DEBUG "ali14xx: base=0x%03x, regOn=0x%02x.\n",
@@ -219,18 +221,26 @@ static int __init ali14xx_probe(void)
219 ide_std_init_ports(&hw[1], 0x170, 0x376); 221 ide_std_init_ports(&hw[1], 0x170, 0x376);
220 hw[1].irq = 15; 222 hw[1].irq = 15;
221 223
222 ide_init_port_hw(&ide_hwifs[0], &hw[0]); 224 hwif = ide_find_port();
223 ide_init_port_hw(&ide_hwifs[1], &hw[1]); 225 if (hwif) {
226 ide_init_port_hw(hwif, &hw[0]);
227 hwif->set_pio_mode = &ali14xx_set_pio_mode;
228 idx[0] = hwif->index;
229 }
224 230
225 ide_hwifs[0].set_pio_mode = &ali14xx_set_pio_mode; 231 mate = ide_find_port();
226 ide_hwifs[1].set_pio_mode = &ali14xx_set_pio_mode; 232 if (mate) {
233 ide_init_port_hw(mate, &hw[1]);
234 mate->set_pio_mode = &ali14xx_set_pio_mode;
235 idx[1] = mate->index;
236 }
227 237
228 ide_device_add(idx, &ali14xx_port_info); 238 ide_device_add(idx, &ali14xx_port_info);
229 239
230 return 0; 240 return 0;
231} 241}
232 242
233int probe_ali14xx = 0; 243int probe_ali14xx;
234 244
235module_param_named(probe, probe_ali14xx, bool, 0); 245module_param_named(probe, probe_ali14xx, bool, 0);
236MODULE_PARM_DESC(probe, "probe for ALI M14xx chipsets"); 246MODULE_PARM_DESC(probe, "probe for ALI M14xx chipsets");