aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/legacy/gayle.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/legacy/gayle.c')
-rw-r--r--drivers/ide/legacy/gayle.c43
1 files changed, 26 insertions, 17 deletions
diff --git a/drivers/ide/legacy/gayle.c b/drivers/ide/legacy/gayle.c
index 53331ee1e957..492fa047efc0 100644
--- a/drivers/ide/legacy/gayle.c
+++ b/drivers/ide/legacy/gayle.c
@@ -110,12 +110,13 @@ static int gayle_ack_intr_a1200(ide_hwif_t *hwif)
110 * Probe for a Gayle IDE interface (and optionally for an IDE doubler) 110 * Probe for a Gayle IDE interface (and optionally for an IDE doubler)
111 */ 111 */
112 112
113void __init gayle_init(void) 113static int __init gayle_init(void)
114{ 114{
115 int a4000, i; 115 int a4000, i;
116 u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
116 117
117 if (!MACH_IS_AMIGA) 118 if (!MACH_IS_AMIGA)
118 return; 119 return -ENODEV;
119 120
120 if ((a4000 = AMIGAHW_PRESENT(A4000_IDE)) || AMIGAHW_PRESENT(A1200_IDE)) 121 if ((a4000 = AMIGAHW_PRESENT(A4000_IDE)) || AMIGAHW_PRESENT(A1200_IDE))
121 goto found; 122 goto found;
@@ -125,15 +126,21 @@ void __init gayle_init(void)
125 NULL)) 126 NULL))
126 goto found; 127 goto found;
127#endif 128#endif
128 return; 129 return -ENODEV;
129 130
130found: 131found:
132 printk(KERN_INFO "ide: Gayle IDE controller (A%d style%s)\n",
133 a4000 ? 4000 : 1200,
134#ifdef CONFIG_BLK_DEV_IDEDOUBLER
135 ide_doubler ? ", IDE doubler" :
136#endif
137 "");
138
131 for (i = 0; i < GAYLE_NUM_PROBE_HWIFS; i++) { 139 for (i = 0; i < GAYLE_NUM_PROBE_HWIFS; i++) {
132 unsigned long base, ctrlport, irqport; 140 unsigned long base, ctrlport, irqport;
133 ide_ack_intr_t *ack_intr; 141 ide_ack_intr_t *ack_intr;
134 hw_regs_t hw; 142 hw_regs_t hw;
135 ide_hwif_t *hwif; 143 ide_hwif_t *hwif;
136 int index;
137 unsigned long phys_base, res_start, res_n; 144 unsigned long phys_base, res_start, res_n;
138 145
139 if (a4000) { 146 if (a4000) {
@@ -165,21 +172,23 @@ found:
165// &gayle_iops, 172// &gayle_iops,
166 IRQ_AMIGA_PORTS); 173 IRQ_AMIGA_PORTS);
167 174
168 index = ide_register_hw(&hw, NULL, 1, &hwif); 175 hwif = ide_find_port(base);
169 if (index != -1) { 176 if (hwif) {
177 u8 index = hwif->index;
178
179 ide_init_port_data(hwif, index);
180 ide_init_port_hw(hwif, &hw);
181
170 hwif->mmio = 1; 182 hwif->mmio = 1;
171 switch (i) { 183
172 case 0: 184 idx[i] = index;
173 printk("ide%d: Gayle IDE interface (A%d style)\n", index,
174 a4000 ? 4000 : 1200);
175 break;
176#ifdef CONFIG_BLK_DEV_IDEDOUBLER
177 case 1:
178 printk("ide%d: IDE doubler\n", index);
179 break;
180#endif /* CONFIG_BLK_DEV_IDEDOUBLER */
181 }
182 } else 185 } else
183 release_mem_region(res_start, res_n); 186 release_mem_region(res_start, res_n);
184 } 187 }
188
189 ide_device_add(idx);
190
191 return 0;
185} 192}
193
194module_init(gayle_init);