diff options
Diffstat (limited to 'drivers/ide/legacy/ali14xx.c')
-rw-r--r-- | drivers/ide/legacy/ali14xx.c | 30 |
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 | */ |
89 | static inline u8 inReg (u8 reg) | 89 | static 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 | */ |
98 | static void outReg (u8 data, u8 reg) | 98 | static 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 | */ |
146 | static int __init findPort (void) | 146 | static 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 | */ |
178 | static int __init initRegisters (void) { | 178 | static 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 | ||
200 | static int __init ali14xx_probe(void) | 201 | static 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 | ||
233 | int probe_ali14xx = 0; | 243 | int probe_ali14xx; |
234 | 244 | ||
235 | module_param_named(probe, probe_ali14xx, bool, 0); | 245 | module_param_named(probe, probe_ali14xx, bool, 0); |
236 | MODULE_PARM_DESC(probe, "probe for ALI M14xx chipsets"); | 246 | MODULE_PARM_DESC(probe, "probe for ALI M14xx chipsets"); |