Module Name: src Committed By: mbalmer Date: Wed Aug 31 12:23:32 UTC 2011
Modified Files: src/sys/dev/gpio: gpioow.c Log Message: Add glue code to build as module. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/dev/gpio/gpioow.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/gpio/gpioow.c diff -u src/sys/dev/gpio/gpioow.c:1.12 src/sys/dev/gpio/gpioow.c:1.13 --- src/sys/dev/gpio/gpioow.c:1.12 Thu Nov 12 19:22:08 2009 +++ src/sys/dev/gpio/gpioow.c Wed Aug 31 12:23:32 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: gpioow.c,v 1.12 2009/11/12 19:22:08 dyoung Exp $ */ +/* $NetBSD: gpioow.c,v 1.13 2011/08/31 12:23:32 mbalmer Exp $ */ /* $OpenBSD: gpioow.c,v 1.1 2006/03/04 16:27:03 grange Exp $ */ /* @@ -18,7 +18,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: gpioow.c,v 1.12 2009/11/12 19:22:08 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: gpioow.c,v 1.13 2011/08/31 12:23:32 mbalmer Exp $"); /* * 1-Wire bus bit-banging through GPIO pin. @@ -28,6 +28,7 @@ #include <sys/systm.h> #include <sys/device.h> #include <sys/gpio.h> +#include <sys/module.h> #include <dev/gpio/gpiovar.h> @@ -107,18 +108,20 @@ if (gpio_pin_map(sc->sc_gpio, ga->ga_offset, ga->ga_mask, &sc->sc_map)) { aprint_error(": can't map pins\n"); - return; + goto finish; } /* Configure data pin */ caps = gpio_pin_caps(sc->sc_gpio, &sc->sc_map, GPIOOW_PIN_DATA); if (!(caps & GPIO_PIN_OUTPUT)) { aprint_error(": data pin is unable to drive output\n"); - goto fail; + gpio_pin_unmap(sc->sc_gpio, &sc->sc_map); + goto finish; } if (!(caps & GPIO_PIN_INPUT)) { aprint_error(": data pin is unable to read input\n"); - goto fail; + gpio_pin_unmap(sc->sc_gpio, &sc->sc_map); + goto finish; } aprint_normal(": DATA[%d]", sc->sc_map.pm_map[GPIOOW_PIN_DATA]); sc->sc_data = GPIO_PIN_OUTPUT; @@ -149,10 +152,8 @@ if (!pmf_device_register(self, NULL, NULL)) aprint_error("%s: could not establish power handler\n", device_xname(self)); +finish: return; - -fail: - gpio_pin_unmap(sc->sc_gpio, &sc->sc_map); } int @@ -246,3 +247,37 @@ gpio_pin_write(sc->sc_gpio, &sc->sc_map, GPIOOW_PIN_DATA, value ? GPIO_PIN_HIGH : GPIO_PIN_LOW); } + +MODULE(MODULE_CLASS_DRIVER, gpioow, "gpio,onewire"); + +#ifdef _MODULE +#include "ioconf.c" +#endif + +static int +gpioow_modcmd(modcmd_t cmd, void *opaque) +{ + int error; + + error = 0; + switch (cmd) { + case MODULE_CMD_INIT: +#ifdef _MODULE + error = config_init_component(cfdriver_ioconf_gpioow, + cfattach_ioconf_gpioow, cfdata_ioconf_gpioow); + if (error) + aprint_error("%s: unable to init component\n", + gpioow_cd.cd_name); +#endif + break; + case MODULE_CMD_FINI: +#ifdef _MODULE + config_fini_component(cfdriver_ioconf_gpioow, + cfattach_ioconf_gpioow, cfdata_ioconf_gpioow); +#endif + break; + default: + error = ENOTTY; + } + return error; +}