Source-Changes-HG archive

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

[src/trunk]: src/sys/arch/evbarm Imported pwrbtn and lidsw drivers for NetWal...



details:   https://anonhg.NetBSD.org/src/rev/712662215044
branches:  trunk
changeset: 329096:712662215044
user:      hkenken <hkenken%NetBSD.org@localhost>
date:      Tue May 06 11:08:51 2014 +0000

description:
Imported pwrbtn and lidsw drivers for NetWalker. Those attached to GPIO bus.
+ power button
+ lid close switch

diffstat:

 sys/arch/evbarm/conf/NETWALKER            |   21 ++-
 sys/arch/evbarm/conf/files.netwalker      |   16 ++-
 sys/arch/evbarm/netwalker/netwalker.h     |    7 +-
 sys/arch/evbarm/netwalker/netwalker_btn.c |    8 +-
 sys/arch/evbarm/netwalker/netwalker_lid.c |  181 +++++++++++++++++++++++++++++
 sys/arch/evbarm/netwalker/netwalker_pwr.c |  183 ++++++++++++++++++++++++++++++
 6 files changed, 405 insertions(+), 11 deletions(-)

diffs (truncated from 500 to 300 lines):

diff -r 9f2d8d77e291 -r 712662215044 sys/arch/evbarm/conf/NETWALKER
--- a/sys/arch/evbarm/conf/NETWALKER    Tue May 06 10:16:52 2014 +0000
+++ b/sys/arch/evbarm/conf/NETWALKER    Tue May 06 11:08:51 2014 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: NETWALKER,v 1.25 2014/03/29 12:00:27 hkenken Exp $
+#      $NetBSD: NETWALKER,v 1.26 2014/05/06 11:08:51 hkenken Exp $
 #
 #      NETWALKER -- http://www.sharp.co.jp/netwalker/
 #
@@ -149,6 +149,17 @@
 #options       SCSIPI_DEBUG_TARGET=0
 #options       SCSIPI_DEBUG_LUN=0
 
+# Valid options for BOOT_ARGS:
+#  single              Boot to single user only
+#  kdb                 Give control to kernel debugger
+#  ask                 Ask for file name to reboot from
+#  pmapdebug=<n>       If PMAP_DEBUG, set pmap_debug_level to <n>
+#  memorydisk=<n>      Set memorydisk size to <n> KB
+#  quiet               Show aprint_naive output
+#  verbose             Show aprint_normal and aprint_verbose output
+#options               BOOT_ARGS="\"verbose\""
+#options               BOOT_ARGS="\"pmapdebug=1\""
+
 # Kernel root file system and dump configuration.
 config         netbsd          root on ? type ?
 config         netbsd-ld0      root on ld0 type ffs
@@ -214,14 +225,18 @@
 #options       IMXSPI_DEBUG=10
 
 # Optical Joystick
-mousebtn0      at gpio1 offset 22 mask 0x03 # intr 182, 183
-#options       MOUSEBTN_POLLING
 oj6sh0         at spi0 slave 2
 #options       OJ6SH_DEBUG=4
 options                OJ6SH_UP_X_LEFT_Y
 wsmouse*       at oj6sh? mux 0
+
+mousebtn0      at gpio1 offset 22 mask 0x03 # intr 182, 183
+#options       MOUSEBTN_POLLING
 wsmouse*       at mousebtn? mux 0
 
+pwrbtn0                at gpio1 offset 21 mask 0x01 # intr 181
+lidsw0         at gpio3 offset 12 mask 0x01 # intr 236
+
 # SPI NOR-Flash
 #spiflash0     at spiflashbus?
 #m25p0         at spi0 slave 1
diff -r 9f2d8d77e291 -r 712662215044 sys/arch/evbarm/conf/files.netwalker
--- a/sys/arch/evbarm/conf/files.netwalker      Tue May 06 10:16:52 2014 +0000
+++ b/sys/arch/evbarm/conf/files.netwalker      Tue May 06 11:08:51 2014 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: files.netwalker,v 1.5 2014/03/29 12:00:27 hkenken Exp $
+#      $NetBSD: files.netwalker,v 1.6 2014/05/06 11:08:51 hkenken Exp $
 #
 # Sharp Netwalker configuration info
 #
@@ -30,10 +30,20 @@
 
 # Mouse button
 device mousebtn: wsmousedev
-attach mousebtn at gpio with btn_netwalker
-file   arch/evbarm/netwalker/netwalker_btn.c   btn_netwalker
+attach mousebtn at gpio with netwalker_btn
+file   arch/evbarm/netwalker/netwalker_btn.c   netwalker_btn
 defflag        opt_mousebtn.h                          MOUSEBTN_POLLING
 
+# Power button
+device pwrbtn: sysmon_envsys
+attach pwrbtn at gpio with netwalker_pwr
+file   arch/evbarm/netwalker/netwalker_pwr.c   netwalker_pwr
+
+# Lid close switch
+device lidsw: sysmon_envsys
+attach lidsw at gpio with netwalker_lid
+file   arch/evbarm/netwalker/netwalker_lid.c   netwalker_lid
+
 # OJ6SH-T25 Optical Joystick
 device  oj6sh: wsmousedev
 attach  oj6sh at spi
diff -r 9f2d8d77e291 -r 712662215044 sys/arch/evbarm/netwalker/netwalker.h
--- a/sys/arch/evbarm/netwalker/netwalker.h     Tue May 06 10:16:52 2014 +0000
+++ b/sys/arch/evbarm/netwalker/netwalker.h     Tue May 06 11:08:51 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: netwalker.h,v 1.1 2014/04/09 04:00:50 hkenken Exp $    */
+/*     $NetBSD: netwalker.h,v 1.2 2014/05/06 11:08:51 hkenken Exp $    */
 
 /*
  * Copyright (c) 2014  Genetec Corporation.  All rights reserved.
@@ -35,4 +35,9 @@
 #define KERNEL_VM_BASE         0xc0000000
 #define KERNEL_VM_SIZE         0x20000000
 
+#define GPIO0_IRQBASE          128
+#define GPIO1_IRQBASE          160
+#define GPIO2_IRQBASE          192
+#define GPIO3_IRQBASE          224
+
 #endif /* _EVBARM_NETWALKER_NETWALKER_H */
diff -r 9f2d8d77e291 -r 712662215044 sys/arch/evbarm/netwalker/netwalker_btn.c
--- a/sys/arch/evbarm/netwalker/netwalker_btn.c Tue May 06 10:16:52 2014 +0000
+++ b/sys/arch/evbarm/netwalker/netwalker_btn.c Tue May 06 11:08:51 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: netwalker_btn.c,v 1.1 2014/03/29 12:00:27 hkenken Exp $        */
+/*     $NetBSD: netwalker_btn.c,v 1.2 2014/05/06 11:08:51 hkenken Exp $        */
 
 /*
  * Copyright (c) 2014  Genetec Corporation.  All rights reserved.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netwalker_btn.c,v 1.1 2014/03/29 12:00:27 hkenken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netwalker_btn.c,v 1.2 2014/05/06 11:08:51 hkenken Exp $");
 
 #include "opt_imxspi.h"
 #include "opt_mousebtn.h"
@@ -77,8 +77,8 @@
 static void mousebtn_attach(device_t, device_t, void *);
 static int mousebtn_detach(device_t, int);
 
-CFATTACH_DECL_NEW(btn_netwalker, sizeof(struct mousebtn_softc),
-       mousebtn_match, mousebtn_attach, mousebtn_detach, NULL);
+CFATTACH_DECL_NEW(netwalker_btn, sizeof(struct mousebtn_softc),
+    mousebtn_match, mousebtn_attach, mousebtn_detach, NULL);
 
 static void mousebtn_poll(void *);
 static int mousebtn_intr(void *);
diff -r 9f2d8d77e291 -r 712662215044 sys/arch/evbarm/netwalker/netwalker_lid.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/evbarm/netwalker/netwalker_lid.c Tue May 06 11:08:51 2014 +0000
@@ -0,0 +1,181 @@
+/*     $NetBSD: netwalker_lid.c,v 1.1 2014/05/06 11:08:51 hkenken Exp $        */
+
+/*
+ * Copyright (c) 2014  Genetec Corporation.  All rights reserved.
+ * Written by Hashimoto Kenichi for Genetec Corporation.
+ *
+ * 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 GENETEC CORPORATION ``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 GENETEC CORPORATION
+ * 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: netwalker_lid.c,v 1.1 2014/05/06 11:08:51 hkenken Exp $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/device.h>
+#include <sys/gpio.h>
+
+#include <dev/gpio/gpiovar.h>
+#include <dev/sysmon/sysmonvar.h>
+#include <dev/sysmon/sysmon_taskq.h>
+
+#include <dev/gpio/gpiovar.h>
+
+#include <evbarm/netwalker/netwalker.h>
+
+#define LID_PIN_INPUT  0
+#define LID_NPINS      1
+
+struct netwalker_lid_softc {
+       device_t sc_dev;
+       void *sc_gpio;
+       void *sc_intr;
+
+       struct gpio_pinmap sc_map;
+       int sc_map_pins[LID_NPINS];
+
+       struct sysmon_pswitch sc_smpsw;
+       int sc_state;
+};
+
+static int netwalker_lid_match(device_t, cfdata_t, void *);
+static void netwalker_lid_attach(device_t, device_t, void *);
+static int netwalker_lid_detach(device_t, int);
+
+CFATTACH_DECL_NEW(netwalker_lid, sizeof(struct netwalker_lid_softc),
+    netwalker_lid_match, netwalker_lid_attach, netwalker_lid_detach, NULL);
+
+static void netwalker_lid_refresh(void *);
+static int netwalker_lid_intr(void *);
+
+
+static int
+netwalker_lid_match(device_t parent, cfdata_t cf, void * aux)
+{
+       struct gpio_attach_args *ga = aux;
+
+       if (strcmp(ga->ga_dvname, cf->cf_name))
+               return 0;
+       if (ga->ga_offset == -1)
+               return 0;
+       /* check that we have enough pins */
+       if (gpio_npins(ga->ga_mask) != LID_NPINS) {
+               aprint_debug("%s: invalid pin mask 0x%02x\n", cf->cf_name,
+                   ga->ga_mask);
+               return 0;
+       }
+
+       return 1;
+}
+
+static void
+netwalker_lid_attach(device_t parent, device_t self, void *aux)
+{
+       struct netwalker_lid_softc *sc = device_private(self);
+       struct gpio_attach_args *ga = aux;
+       int caps;
+
+       sc->sc_dev = self;
+       sc->sc_gpio = ga->ga_gpio;
+
+       /* map pins */
+       sc->sc_map.pm_map = sc->sc_map_pins;
+       if (gpio_pin_map(sc->sc_gpio, ga->ga_offset, ga->ga_mask, &sc->sc_map)) {
+               aprint_error(": couldn't map the pins\n");
+               return;
+       }
+
+       /* configure the input pin */
+       caps = gpio_pin_caps(sc->sc_gpio, &sc->sc_map, LID_PIN_INPUT);
+       if (!(caps & GPIO_PIN_INPUT)) {
+               aprint_error(": pin is unable to read input\n");
+               gpio_pin_unmap(sc->sc_gpio, &sc->sc_map);
+               return;
+       }
+       gpio_pin_ctl(sc->sc_gpio, &sc->sc_map, LID_PIN_INPUT,
+           GPIO_PIN_INPUT);
+
+       sc->sc_intr = intr_establish(GPIO3_IRQBASE + ga->ga_offset,
+           IPL_VM, IST_EDGE_BOTH, netwalker_lid_intr, sc);
+       if (sc->sc_intr == NULL) {
+               aprint_error(": couldn't establish interrupt\n");
+               gpio_pin_unmap(sc->sc_gpio, &sc->sc_map);
+               return;
+       }
+
+       aprint_normal(": NETWALKER lid switch\n");
+       aprint_naive(": NETWALKER lid switch\n");
+
+       if (!pmf_device_register(sc->sc_dev, NULL, NULL)) {
+               aprint_error_dev(sc->sc_dev,
+                   "couldn't establish lid handler\n");
+       }
+
+       sysmon_task_queue_init();
+       sc->sc_smpsw.smpsw_name = device_xname(self);
+       sc->sc_smpsw.smpsw_type = PSWITCH_TYPE_LID;
+       sc->sc_state = PSWITCH_EVENT_RELEASED;
+       sysmon_pswitch_register(&sc->sc_smpsw);
+}
+
+static int
+netwalker_lid_detach(device_t self, int flags)
+{
+       struct netwalker_lid_softc *sc = device_private(self);
+
+       if (sc->sc_intr != NULL)
+               intr_disestablish(sc->sc_intr);
+
+       gpio_pin_unmap(sc->sc_gpio, &sc->sc_map);
+       pmf_device_deregister(self);
+       sysmon_task_queue_fini();
+       return 0;
+}
+
+static int
+netwalker_lid_intr(void *v)
+{
+       struct netwalker_lid_softc *sc = v;
+
+       sysmon_task_queue_sched(0, netwalker_lid_refresh, sc);
+       return 1;
+}
+
+static void
+netwalker_lid_refresh(void *v)
+{
+       struct netwalker_lid_softc *sc = v;
+       int lid;
+       int event;



Home | Main Index | Thread Index | Old Index