diff options
author | loos <loos@FreeBSD.org> | 2015-03-05 01:49:58 +0000 |
---|---|---|
committer | loos <loos@FreeBSD.org> | 2015-03-05 01:49:58 +0000 |
commit | aa6f296074ee25ce0a33226d91cd625ecb67acf2 (patch) | |
tree | 4611d3d59a9aca01ba96022cde6ee7ca12cb9b51 | |
parent | 61b9798759e6259da29dfc972a57c083b6b5d376 (diff) | |
download | FreeBSD-src-aa6f296074ee25ce0a33226d91cd625ecb67acf2.zip FreeBSD-src-aa6f296074ee25ce0a33226d91cd625ecb67acf2.tar.gz |
Add a bus_probe_nomatch() method for gpiobus/ofw_gpiobus.
This prints a warning when your system have a hinted child or a FDT child
node for which you don't have a matching driver:
gpiobus0: <unknown device> at pin(s) 24 irq 24
-rw-r--r-- | sys/dev/gpio/gpiobus.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/dev/gpio/gpiobus.c b/sys/dev/gpio/gpiobus.c index f3ad49c..89740d1 100644 --- a/sys/dev/gpio/gpiobus.c +++ b/sys/dev/gpio/gpiobus.c @@ -53,6 +53,7 @@ static int gpiobus_attach(device_t); static int gpiobus_detach(device_t); static int gpiobus_suspend(device_t); static int gpiobus_resume(device_t); +static void gpiobus_probe_nomatch(device_t, device_t); static int gpiobus_print_child(device_t, device_t); static int gpiobus_child_location_str(device_t, device_t, char *, size_t); static int gpiobus_child_pnpinfo_str(device_t, device_t, char *, size_t); @@ -363,6 +364,20 @@ gpiobus_resume(device_t dev) return (bus_generic_resume(dev)); } +static void +gpiobus_probe_nomatch(device_t dev, device_t child) +{ + char pins[128]; + struct gpiobus_ivar *devi; + + devi = GPIOBUS_IVAR(child); + memset(pins, 0, sizeof(pins)); + gpiobus_print_pins(devi, pins, sizeof(pins)); + device_printf(dev, "<unknown device> at pin(s) %s", pins); + resource_list_print_type(&devi->rl, "irq", SYS_RES_IRQ, "%ld"); + printf("\n"); +} + static int gpiobus_print_child(device_t dev, device_t child) { @@ -670,6 +685,7 @@ static device_method_t gpiobus_methods[] = { DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource), DEVMETHOD(bus_get_resource_list, gpiobus_get_resource_list), DEVMETHOD(bus_add_child, gpiobus_add_child), + DEVMETHOD(bus_probe_nomatch, gpiobus_probe_nomatch), DEVMETHOD(bus_print_child, gpiobus_print_child), DEVMETHOD(bus_child_pnpinfo_str, gpiobus_child_pnpinfo_str), DEVMETHOD(bus_child_location_str, gpiobus_child_location_str), |