acpi_gpiobus: implement bus_child_deleted
Implement bus_child_deleted and attach the gpio_aei dev to it's ACPI handle. Reviewed by: wulf Differential Revision: https://reviews.freebsd.org/D51585
This commit is contained in:
@@ -304,6 +304,12 @@ acpi_gpiobus_attach_aei(struct acpi_gpiobus_softc *sc, ACPI_HANDLE handle)
|
||||
devi->gpiobus.pins[i] = pins[i + 1];
|
||||
free(pins, M_DEVBUF);
|
||||
|
||||
status = AcpiAttachData(aei_handle, acpi_fake_objhandler, child);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
printf("WARNING: Unable to attach object data to %s - %s\n",
|
||||
acpi_name(aei_handle), AcpiFormatException(status));
|
||||
}
|
||||
|
||||
bus_attach_children(sc->super_sc.sc_busdev);
|
||||
}
|
||||
|
||||
@@ -427,6 +433,16 @@ acpi_gpiobus_child_location(device_t bus, device_t child, struct sbuf *sb)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void
|
||||
acpi_gpiobus_child_deleted(device_t bus, device_t child)
|
||||
{
|
||||
struct acpi_gpiobus_ivar *devi = device_get_ivars(child);
|
||||
|
||||
if (acpi_get_device(devi->handle) == child)
|
||||
AcpiDetachData(devi->handle, acpi_fake_objhandler);
|
||||
gpiobus_child_deleted(bus, child);
|
||||
}
|
||||
|
||||
static device_method_t acpi_gpiobus_methods[] = {
|
||||
/* Device interface */
|
||||
DEVMETHOD(device_probe, acpi_gpiobus_probe),
|
||||
@@ -437,6 +453,7 @@ static device_method_t acpi_gpiobus_methods[] = {
|
||||
DEVMETHOD(bus_read_ivar, acpi_gpiobus_read_ivar),
|
||||
DEVMETHOD(bus_add_child, acpi_gpiobus_add_child),
|
||||
DEVMETHOD(bus_child_location, acpi_gpiobus_child_location),
|
||||
DEVMETHOD(bus_child_deleted, acpi_gpiobus_child_deleted),
|
||||
|
||||
DEVMETHOD_END
|
||||
};
|
||||
|
||||
@@ -734,7 +734,7 @@ gpiobus_add_child(device_t dev, u_int order, const char *name, int unit)
|
||||
sizeof(struct gpiobus_ivar)));
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
gpiobus_child_deleted(device_t dev, device_t child)
|
||||
{
|
||||
struct gpiobus_ivar *devi;
|
||||
|
||||
@@ -43,6 +43,7 @@ int gpiobus_read_ivar(device_t, device_t, int, uintptr_t *);
|
||||
int gpiobus_acquire_pin(device_t, uint32_t);
|
||||
void gpiobus_release_pin(device_t, uint32_t);
|
||||
int gpiobus_child_location(device_t, device_t, struct sbuf *);
|
||||
void gpiobus_child_deleted(device_t, device_t);
|
||||
device_t gpiobus_add_child_common(device_t, u_int, const char *, int, size_t);
|
||||
int gpiobus_add_gpioc(device_t);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user