summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorloos <loos@FreeBSD.org>2015-03-05 01:49:58 +0000
committerloos <loos@FreeBSD.org>2015-03-05 01:49:58 +0000
commitaa6f296074ee25ce0a33226d91cd625ecb67acf2 (patch)
tree4611d3d59a9aca01ba96022cde6ee7ca12cb9b51
parent61b9798759e6259da29dfc972a57c083b6b5d376 (diff)
downloadFreeBSD-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.c16
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),
OpenPOWER on IntegriCloud