Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/evbarm GC toastersensors driver



details:   https://anonhg.NetBSD.org/src/rev/c555391a6f81
branches:  trunk
changeset: 933261:c555391a6f81
user:      jmcneill <jmcneill%NetBSD.org@localhost>
date:      Sat May 23 13:46:36 2020 +0000

description:
GC toastersensors driver

diffstat:

 sys/arch/evbarm/conf/files.tsarm       |    6 +-
 sys/arch/evbarm/tsarm/toastersensors.c |  280 ---------------------------------
 2 files changed, 1 insertions(+), 285 deletions(-)

diffs (truncated from 304 to 300 lines):

diff -r 98de41917f60 -r c555391a6f81 sys/arch/evbarm/conf/files.tsarm
--- a/sys/arch/evbarm/conf/files.tsarm  Sat May 23 13:43:34 2020 +0000
+++ b/sys/arch/evbarm/conf/files.tsarm  Sat May 23 13:46:36 2020 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: files.tsarm,v 1.11 2008/03/17 09:30:02 kiyohara Exp $
+#      $NetBSD: files.tsarm,v 1.12 2020/05/23 13:46:36 jmcneill Exp $
 #
 # First try for arm-specific configuration info
 #
@@ -37,10 +37,6 @@
 attach tskp at tspldbus
 file   arch/evbarm/tsarm/tskp.c                tskp
 
-device  toastersensors: matrixkp, wskbddev
-attach toastersensors at tspldbus
-file   arch/evbarm/tsarm/toastersensors.c              toastersensors
-
 # XXXX pcic here because it needs to be late.  The catch: pcic needs
 # to be late, so devices which attach to it are attached late.  But it
 # needs to be before its isa and pci attachments.  This answer is
diff -r 98de41917f60 -r c555391a6f81 sys/arch/evbarm/tsarm/toastersensors.c
--- a/sys/arch/evbarm/tsarm/toastersensors.c    Sat May 23 13:43:34 2020 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,280 +0,0 @@
-/* $NetBSD: toastersensors.c,v 1.12 2014/02/25 18:30:08 pooka Exp $ */
-
-/*-
- * Copyright (c) 2005 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is from software contributed to The NetBSD Foundation
- * by Jesse Off.
- *
- * 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 NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``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 FOUNDATION OR CONTRIBUTORS
- * 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: toastersensors.c,v 1.12 2014/02/25 18:30:08 pooka Exp $");
-
-#include <sys/param.h>
-#include <sys/sysctl.h>
-#include <sys/systm.h>
-#include <sys/proc.h>
-#include <sys/poll.h>
-#include <sys/conf.h>
-#include <sys/uio.h>
-#include <sys/types.h>
-#include <sys/kernel.h>
-#include <sys/device.h>
-#include <sys/callout.h>
-#include <sys/select.h>
-
-#include <sys/bus.h>
-#include <machine/autoconf.h>
-
-#include <dev/wscons/wsconsio.h>
-#include <dev/wscons/wskbdvar.h>
-#include <dev/wscons/wsksymdef.h>
-#include <dev/wscons/wsksymvar.h>
-
-#include <arm/ep93xx/ep93xxreg.h>
-#include <arm/ep93xx/epgpioreg.h>
-#include <dev/ic/matrixkpvar.h>
-#include <evbarm/tsarm/tspldvar.h>
-#include <evbarm/tsarm/tsarmreg.h>
-
-struct toastersensors_softc {
-       struct matrixkp_softc sc_mxkp;
-       bus_space_tag_t sc_iot;
-       bus_space_handle_t sc_gpioh;
-       bus_space_handle_t sc_adch;
-       uint32_t toast_down;
-       uint32_t burnlevel_knob;
-       uint32_t cancel_key;
-       uint32_t toast_key;
-       uint32_t frozen_key;
-       uint32_t warm_key;
-       uint32_t bagel_key;
-       uint32_t toast_down_ticks;
-       uint32_t cancel_key_ticks;
-       uint32_t toast_key_ticks;
-       uint32_t frozen_key_ticks;
-       uint32_t warm_key_ticks;
-       uint32_t bagel_key_ticks;
-       struct callout poll;
-};
-
-#define KC(n) KS_KEYCODE(n)
-static const keysym_t mxkp_keydesc_default[] = {
-/*  pos                                normal                  shifted         */
-       KC(0),                  KS_f,
-       KC(1),                  KS_b,
-       KC(2),                  KS_w,
-       KC(3),                  KS_t,
-       KC(4),                  KS_c,
-};
-#undef KC
-#define KBD_MAP(name, base, map) \
-                       { name, base, sizeof(map)/sizeof(keysym_t), map }
-const struct wscons_keydesc mxkp_keydesctab[] = {
-       KBD_MAP(KB_US,          0,      mxkp_keydesc_default),
-       {0, 0, 0, 0}
-};
-#undef KBD_MAP
-
-struct wskbd_mapdata mxkp_keymapdata = {
-       mxkp_keydesctab,
-       KB_US,
-};
-
-static int     toastersensors_match(device_t, cfdata_t, void *);
-static void    toastersensors_attach(device_t, device_t, void *);
-static void    toastersensors_scankeys(struct matrixkp_softc *, uint32_t *);
-static void    toastersensors_poll(void *);
-
-CFATTACH_DECL_NEW(toastersensors, sizeof(struct toastersensors_softc),
-    toastersensors_match, toastersensors_attach, NULL, NULL);
-
-static int
-toastersensors_match(device_t parent, cfdata_t match, void *aux)
-{
-       return 1;
-}
-
-#define GPIO_GET(x)    bus_space_read_1(sc->sc_iot, sc->sc_gpioh, \
-       (EP93XX_GPIO_ ## x))
-
-#define GPIO_SET(x, y) bus_space_write_1(sc->sc_iot, sc->sc_gpioh, \
-       (EP93XX_GPIO_ ## x), (y))
-
-#define GPIO_SETBITS(x, y)     bus_space_write_1(sc->sc_iot, sc->sc_gpioh, \
-       (EP93XX_GPIO_ ## x), GPIO_GET(x) | (y))
-
-#define GPIO_CLEARBITS(x, y)   bus_space_write_1(sc->sc_iot, sc->sc_gpioh, \
-       (EP93XX_GPIO_ ## x), GPIO_GET(x) & (~(y)))
-
-static void
-toastersensors_poll(void *arg)
-{
-       struct toastersensors_softc *sc = arg;
-
-       if (sc->cancel_key) sc->cancel_key_ticks++;
-       if (sc->toast_key) sc->toast_key_ticks++;
-       if (sc->warm_key) sc->warm_key_ticks++;
-       if (sc->frozen_key) sc->frozen_key_ticks++;
-       if (sc->bagel_key) sc->bagel_key_ticks++;
-       if (sc->toast_down) sc->toast_down_ticks++;
-
-       sc->burnlevel_knob = bus_space_read_1(sc->sc_iot, sc->sc_adch, 0) |
-               (bus_space_read_1(sc->sc_iot, sc->sc_adch, 1) << 8);
-       /* Initiate another conversion */
-       bus_space_write_1(sc->sc_iot, sc->sc_adch, 0, 0x40);
-       callout_schedule(&sc->poll, 1);
-}
-
-static void
-toastersensors_attach(device_t parent, device_t self, void *aux)
-{
-       struct toastersensors_softc *sc = device_private(self);
-       struct tspld_attach_args *taa = aux;
-       struct wskbddev_attach_args wa;
-        const struct sysctlnode *node, *datnode;
-       uint32_t i;
-
-       sc->sc_iot = taa->ta_iot;
-       if (bus_space_map(sc->sc_iot, EP93XX_APB_HWBASE + EP93XX_APB_GPIO,
-               EP93XX_APB_GPIO_SIZE, 0, &sc->sc_gpioh))
-               panic("toastersensors_attach: couldn't map GPIO registers");
-
-       if (bus_space_map(sc->sc_iot, TS7XXX_IO8_HWBASE + TS7XXX_MAX197ADC,
-               2, 0, &sc->sc_adch))
-               panic("toastersensors_attach: couldn't map MAX197-ADC registers");
-
-       sc->sc_mxkp.mxkp_scankeys = toastersensors_scankeys;
-       sc->sc_mxkp.mxkp_event = mxkp_wskbd_event;
-       sc->sc_mxkp.mxkp_nkeys = 5;
-       sc->sc_mxkp.debounce_stable_ms = 3;
-       sc->sc_mxkp.sc_dev = self;
-       sc->sc_mxkp.poll_freq = hz;
-
-       GPIO_CLEARBITS(PBDDR, 0x3f);            /* tristate all lines */
-
-       aprint_normal(": internal toaster sensor inputs\n");
-       aprint_normal_dev(self, "using signal DIO_0 for toast down sensor\n");
-       aprint_normal_dev(self, "using signals DIO_1-DIO_5 for panel buttons\n");
-       aprint_normal_dev(self, "using 12-bit MAX197-ADC channel 0 for burnlevel knob\n");
-
-       if (sysctl_createv(NULL, 0, NULL, &node,
-                               0, CTLTYPE_NODE, device_xname(self),
-                               NULL,
-                               NULL, 0, NULL, 0,
-                               CTL_HW, CTL_CREATE, CTL_EOL) != 0) {
-                printf("%s: could not create sysctl\n",
-                       device_xname(self));
-               return;
-       }
-
-
-       if ((i = sysctl_createv(NULL, 0, NULL, &datnode,
-                               0, CTLTYPE_INT,
-                               "burnlevel_knob",
-                               SYSCTL_DESCR(
-                               "12-bit analog reading of front-panel potentiometer"),
-                               NULL, 0, &sc->burnlevel_knob, 0,
-                               CTL_HW, node->sysctl_num,
-                               CTL_CREATE, CTL_EOL))
-                               != 0) {
-                printf("%s: could not create sysctl\n",
-                       device_xname(self));
-               return;
-       }
-
-#define KEYSYSCTL_SETUP(x) if ((i = sysctl_createv(NULL, 0, NULL, &datnode,    \
-                               0, CTLTYPE_INT,                                 \
-                               #x,                                             \
-                               SYSCTL_DESCR(                                   \
-                               "toaster user input sensor"),                   \
-                               NULL, 0, &sc->x, 0,                             \
-                               CTL_HW, node->sysctl_num,                       \
-                               CTL_CREATE, CTL_EOL))                           \
-                               != 0) {                                         \
-                printf("%s: could not create sysctl\n",                                \
-                       device_xname(self));                                    \
-               return;                                                         \
-       }                                                                       \
-                                                                               \
-       if ((i = sysctl_createv(NULL, 0, NULL, &datnode,                        \
-                               CTLFLAG_READWRITE, CTLTYPE_INT,                 \
-                               #x "_ticks",                                    \
-                               SYSCTL_DESCR(                                   \
-                               "running total of on-time in ticks"),           \
-                               NULL, 0, &sc->x ## _ticks, 0,                   \
-                               CTL_HW, node->sysctl_num,                       \
-                               CTL_CREATE, CTL_EOL))                           \
-                               != 0) {                                         \
-                printf("%s: could not create sysctl\n",                                \
-                       device_xname(self));                                    \
-               return;                                                         \
-       }                                                                       \
-
-       KEYSYSCTL_SETUP(cancel_key);
-       KEYSYSCTL_SETUP(toast_key);
-       KEYSYSCTL_SETUP(bagel_key);
-       KEYSYSCTL_SETUP(warm_key);
-       KEYSYSCTL_SETUP(frozen_key);
-       KEYSYSCTL_SETUP(toast_down);
-
-       sc->cancel_key_ticks = 0;
-       sc->toast_key_ticks = 0;
-       sc->frozen_key_ticks = 0;
-       sc->warm_key_ticks = 0;
-       sc->bagel_key_ticks = 0;
-       sc->toast_down_ticks = 0;
-
-       mxkp_attach(&sc->sc_mxkp);
-       wa.console = 0;
-       wa.keymap = &mxkp_keymapdata;
-       wa.accessops = &mxkp_accessops;
-       wa.accesscookie = &sc->sc_mxkp;
-       sc->sc_mxkp.sc_wskbddev = config_found(self, &wa, wskbddevprint);
-
-       callout_init(&sc->poll, 0);
-       callout_setfunc(&sc->poll, toastersensors_poll, sc);
-       callout_schedule(&sc->poll, 1);
-}
-
-static void
-toastersensors_scankeys(struct matrixkp_softc *mxkp_sc, uint32_t *keys)
-{
-       struct toastersensors_softc *sc = device_private(mxkp_sc->sc_dev);
-       uint32_t val = GPIO_GET(PBDR) & 0x3f;
-
-       /*
-        * toast_down isn't a key, but we update its state here since its 
-         * read in the same reg.
-         */
-       sc->toast_down = (val & 0x1) ? 0 : 1;
-
-       *keys = ~(val >> 1);
-
-       sc->cancel_key = (*keys & 0x10) ? 1 : 0;
-       sc->toast_key = (*keys & 0x8) ? 1 : 0;



Home | Main Index | Thread Index | Old Index