Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a14dc574 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

ide: move hwif_register() call out of ide_probe_port()



* Add BUG_ON(hwif->present) at the start of ide_probe_port().

* Move hwif_register() call (along with setting hwif->present) from
  ide_probe_port() to ide_device_add_all().

  As a result the port will be registered with the device tree _after_:
  - probing both devices (if both are present)
  - port reset (if hwif->reset is set)
  - restoring local IRQs state and re-enabling port IRQ

While at it:

* Rename hwif_register() to ide_register_port().

Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent e84e7ea7
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -613,7 +613,7 @@ static void hwif_release_dev (struct device *dev)
	complete(&hwif->gendev_rel_comp);
}

static void hwif_register (ide_hwif_t *hwif)
static void ide_register_port(ide_hwif_t *hwif)
{
	int ret;

@@ -742,7 +742,9 @@ static int ide_probe_port(ide_hwif_t *hwif)
{
	unsigned long flags;
	unsigned int irqd;
	int unit;
	int unit, rc = -ENODEV;

	BUG_ON(hwif->present);

	if (hwif->noprobe)
		return -EACCES;
@@ -767,14 +769,8 @@ static int ide_probe_port(ide_hwif_t *hwif)
		ide_drive_t *drive = &hwif->drives[unit];
		drive->dn = (hwif->channel ? 2 : 0) + unit;
		(void) probe_for_drive(drive);
		if (drive->present && !hwif->present) {
			hwif->present = 1;
			if (hwif->chipset != ide_4drives ||
			    !hwif->mate || 
			    !hwif->mate->present) {
				hwif_register(hwif);
			}
		}
		if (drive->present)
			rc = 0;
	}
	if (hwif->io_ports[IDE_CONTROL_OFFSET] && hwif->reset) {
		printk(KERN_WARNING "%s: reset\n", hwif->name);
@@ -791,10 +787,7 @@ static int ide_probe_port(ide_hwif_t *hwif)
	if (irqd)
		enable_irq(irqd);

	if (!hwif->present)
		return -ENODEV;

	return 0;
	return rc;
}

static void ide_port_tune_devices(ide_hwif_t *hwif)
@@ -1319,6 +1312,12 @@ int ide_device_add_all(u8 *idx)
			continue;
		}

		hwif->present = 1;

		if (hwif->chipset != ide_4drives || !hwif->mate ||
		    !hwif->mate->present)
			ide_register_port(hwif);

		ide_port_tune_devices(hwif);
	}