diff options
Diffstat (limited to 'drivers/ide/legacy/gayle.c')
-rw-r--r-- | drivers/ide/legacy/gayle.c | 43 |
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 | ||
113 | void __init gayle_init(void) | 113 | static 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 | ||
130 | found: | 131 | found: |
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 | |||
194 | module_init(gayle_init); | ||