diff options
Diffstat (limited to 'drivers/ide/ide-probe.c')
-rw-r--r-- | drivers/ide/ide-probe.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index b812b98744e8..00b2b07f63be 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
@@ -1245,28 +1245,21 @@ static int hwif_init(ide_hwif_t *hwif) | |||
1245 | { | 1245 | { |
1246 | int old_irq; | 1246 | int old_irq; |
1247 | 1247 | ||
1248 | /* Return success if no device is connected */ | ||
1249 | if (!hwif->present) | ||
1250 | return 1; | ||
1251 | |||
1252 | if (!hwif->irq) { | 1248 | if (!hwif->irq) { |
1253 | if (!(hwif->irq = ide_default_irq(hwif->io_ports[IDE_DATA_OFFSET]))) | 1249 | if (!(hwif->irq = ide_default_irq(hwif->io_ports[IDE_DATA_OFFSET]))) |
1254 | { | 1250 | { |
1255 | printk("%s: DISABLED, NO IRQ\n", hwif->name); | 1251 | printk("%s: DISABLED, NO IRQ\n", hwif->name); |
1256 | return (hwif->present = 0); | 1252 | return 0; |
1257 | } | 1253 | } |
1258 | } | 1254 | } |
1259 | #ifdef CONFIG_BLK_DEV_HD | 1255 | #ifdef CONFIG_BLK_DEV_HD |
1260 | if (hwif->irq == HD_IRQ && hwif->io_ports[IDE_DATA_OFFSET] != HD_DATA) { | 1256 | if (hwif->irq == HD_IRQ && hwif->io_ports[IDE_DATA_OFFSET] != HD_DATA) { |
1261 | printk("%s: CANNOT SHARE IRQ WITH OLD " | 1257 | printk("%s: CANNOT SHARE IRQ WITH OLD " |
1262 | "HARDDISK DRIVER (hd.c)\n", hwif->name); | 1258 | "HARDDISK DRIVER (hd.c)\n", hwif->name); |
1263 | return (hwif->present = 0); | 1259 | return 0; |
1264 | } | 1260 | } |
1265 | #endif /* CONFIG_BLK_DEV_HD */ | 1261 | #endif /* CONFIG_BLK_DEV_HD */ |
1266 | 1262 | ||
1267 | /* we set it back to 1 if all is ok below */ | ||
1268 | hwif->present = 0; | ||
1269 | |||
1270 | if (register_blkdev(hwif->major, hwif->name)) | 1263 | if (register_blkdev(hwif->major, hwif->name)) |
1271 | return 0; | 1264 | return 0; |
1272 | 1265 | ||
@@ -1305,10 +1298,7 @@ static int hwif_init(ide_hwif_t *hwif) | |||
1305 | 1298 | ||
1306 | done: | 1299 | done: |
1307 | init_gendisk(hwif); | 1300 | init_gendisk(hwif); |
1308 | |||
1309 | ide_acpi_init(hwif); | 1301 | ide_acpi_init(hwif); |
1310 | |||
1311 | hwif->present = 1; /* success */ | ||
1312 | return 1; | 1302 | return 1; |
1313 | 1303 | ||
1314 | out: | 1304 | out: |
@@ -1352,9 +1342,13 @@ int ide_device_add_all(u8 *idx) | |||
1352 | 1342 | ||
1353 | hwif = &ide_hwifs[idx[i]]; | 1343 | hwif = &ide_hwifs[idx[i]]; |
1354 | 1344 | ||
1345 | if (!hwif->present) | ||
1346 | continue; | ||
1347 | |||
1355 | if (hwif_init(hwif) == 0) { | 1348 | if (hwif_init(hwif) == 0) { |
1356 | printk(KERN_INFO "%s: failed to initialize IDE " | 1349 | printk(KERN_INFO "%s: failed to initialize IDE " |
1357 | "interface\n", hwif->name); | 1350 | "interface\n", hwif->name); |
1351 | hwif->present = 0; | ||
1358 | rc = -1; | 1352 | rc = -1; |
1359 | continue; | 1353 | continue; |
1360 | } | 1354 | } |