Module Name: src Committed By: jmcneill Date: Sun May 6 10:32:33 UTC 2018
Modified Files: src/sys/conf: files Added Files: src/sys/dev/pwm: files.pwm pwm.c pwmvar.h Log Message: Add kernel API for pwm channels. To generate a diff of this commit: cvs rdiff -u -r1.1198 -r1.1199 src/sys/conf/files cvs rdiff -u -r0 -r1.1 src/sys/dev/pwm/files.pwm src/sys/dev/pwm/pwm.c \ src/sys/dev/pwm/pwmvar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/conf/files diff -u src/sys/conf/files:1.1198 src/sys/conf/files:1.1199 --- src/sys/conf/files:1.1198 Sun Apr 8 13:38:31 2018 +++ src/sys/conf/files Sun May 6 10:32:33 2018 @@ -1,4 +1,4 @@ -# $NetBSD: files,v 1.1198 2018/04/08 13:38:31 jmcneill Exp $ +# $NetBSD: files,v 1.1199 2018/05/06 10:32:33 jmcneill Exp $ # @(#)files.newconf 7.5 (Berkeley) 5/10/93 version 20171118 @@ -387,6 +387,9 @@ include "dev/hid/files.hid" # I2C device support include "dev/i2c/files.i2c" +# PWM device support +include "dev/pwm/files.pwm" + # SPI device support include "dev/spi/files.spi" Added files: Index: src/sys/dev/pwm/files.pwm diff -u /dev/null src/sys/dev/pwm/files.pwm:1.1 --- /dev/null Sun May 6 10:32:33 2018 +++ src/sys/dev/pwm/files.pwm Sun May 6 10:32:33 2018 @@ -0,0 +1,5 @@ +# $NetBSD: files.pwm,v 1.1 2018/05/06 10:32:33 jmcneill Exp $ + +define pwm + +file dev/pwm/pwm.c pwm Index: src/sys/dev/pwm/pwm.c diff -u /dev/null src/sys/dev/pwm/pwm.c:1.1 --- /dev/null Sun May 6 10:32:33 2018 +++ src/sys/dev/pwm/pwm.c Sun May 6 10:32:33 2018 @@ -0,0 +1,63 @@ +/* $NetBSD: pwm.c,v 1.1 2018/05/06 10:32:33 jmcneill Exp $ */ + +/*- + * Copyright (c) 2018 Jared McNeill <jmcne...@invisible.ca> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__KERNEL_RCSID(0, "$NetBSD: pwm.c,v 1.1 2018/05/06 10:32:33 jmcneill Exp $"); + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/device.h> + +#include <dev/pwm/pwmvar.h> + +int +pwm_enable(pwm_tag_t pwm) +{ + return pwm->pwm_enable(pwm, true); +} + +int +pwm_disable(pwm_tag_t pwm) +{ + return pwm->pwm_enable(pwm, false); +} + +int +pwm_get_config(pwm_tag_t pwm, struct pwm_config *conf) +{ + return pwm->pwm_get_config(pwm, conf); +} + +int +pwm_set_config(pwm_tag_t pwm, const struct pwm_config *conf) +{ + if (conf->period < conf->duty_cycle) + return EINVAL; + + return pwm->pwm_set_config(pwm, conf); +} Index: src/sys/dev/pwm/pwmvar.h diff -u /dev/null src/sys/dev/pwm/pwmvar.h:1.1 --- /dev/null Sun May 6 10:32:33 2018 +++ src/sys/dev/pwm/pwmvar.h Sun May 6 10:32:33 2018 @@ -0,0 +1,59 @@ +/* $NetBSD: pwmvar.h,v 1.1 2018/05/06 10:32:33 jmcneill Exp $ */ + +/*- + * Copyright (c) 2018 Jared McNeill <jmcne...@invisible.ca> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef _DEV_PWM_PWMVAR_H +#define _DEV_PWM_PWMVAR_H + +enum pwm_polarity { + PWM_ACTIVE_HIGH, + PWM_ACTIVE_LOW +}; + +struct pwm_config { + u_int period; /* nanoseconds */ + u_int duty_cycle; /* nanoseconds */ + enum pwm_polarity polarity; /* PWM_ACTIVE_{HIGH,LOW} */ +}; + +typedef struct pwm_controller { + int (*pwm_enable)(struct pwm_controller *, bool); + int (*pwm_get_config)(struct pwm_controller *, + struct pwm_config *); + int (*pwm_set_config)(struct pwm_controller *, + const struct pwm_config *); + + device_t pwm_dev; /* device */ + void *pwm_priv; /* driver private data */ +} *pwm_tag_t; + +int pwm_enable(pwm_tag_t); +int pwm_disable(pwm_tag_t); +int pwm_get_config(pwm_tag_t, struct pwm_config *); +int pwm_set_config(pwm_tag_t, const struct pwm_config *); + +#endif /* _DEV_PWM_PWMVAR_H */