ide: remove hwif->present manipulations from hwif_init()
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Fri, 1 Feb 2008 22:09:34 +0000 (23:09 +0100)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Fri, 1 Feb 2008 22:09:34 +0000 (23:09 +0100)
* Call hwif_init() only if hwif->present is set.

* If hwif_init() fails clear hwif->present.

* Remove hwif->present manipulations from hwif_init().

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/ide/ide-probe.c

index b812b98..00b2b07 100644 (file)
@@ -1245,28 +1245,21 @@ static int hwif_init(ide_hwif_t *hwif)
 {
        int old_irq;
 
-       /* Return success if no device is connected */
-       if (!hwif->present)
-               return 1;
-
        if (!hwif->irq) {
                if (!(hwif->irq = ide_default_irq(hwif->io_ports[IDE_DATA_OFFSET])))
                {
                        printk("%s: DISABLED, NO IRQ\n", hwif->name);
-                       return (hwif->present = 0);
+                       return 0;
                }
        }
 #ifdef CONFIG_BLK_DEV_HD
        if (hwif->irq == HD_IRQ && hwif->io_ports[IDE_DATA_OFFSET] != HD_DATA) {
                printk("%s: CANNOT SHARE IRQ WITH OLD "
                        "HARDDISK DRIVER (hd.c)\n", hwif->name);
-               return (hwif->present = 0);
+               return 0;
        }
 #endif /* CONFIG_BLK_DEV_HD */
 
-       /* we set it back to 1 if all is ok below */    
-       hwif->present = 0;
-
        if (register_blkdev(hwif->major, hwif->name))
                return 0;
 
@@ -1305,10 +1298,7 @@ static int hwif_init(ide_hwif_t *hwif)
 
 done:
        init_gendisk(hwif);
-
        ide_acpi_init(hwif);
-
-       hwif->present = 1;      /* success */
        return 1;
 
 out:
@@ -1352,9 +1342,13 @@ int ide_device_add_all(u8 *idx)
 
                hwif = &ide_hwifs[idx[i]];
 
+               if (!hwif->present)
+                       continue;
+
                if (hwif_init(hwif) == 0) {
                        printk(KERN_INFO "%s: failed to initialize IDE "
                                         "interface\n", hwif->name);
+                       hwif->present = 0;
                        rc = -1;
                        continue;
                }