mk48txx.c (167950) | mk48txx.c (201003) |
---|---|
1/*- 2 * Copyright (c) 2000 The NetBSD Foundation, Inc. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to The NetBSD Foundation 6 * by Paul Kranenburg. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 23 unchanged lines hidden (view full) --- 32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 34 * POSSIBILITY OF SUCH DAMAGE. 35 * 36 * from: NetBSD: mk48txx.c,v 1.15 2004/07/05 09:24:31 pk Exp 37 */ 38 39#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2000 The NetBSD Foundation, Inc. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to The NetBSD Foundation 6 * by Paul Kranenburg. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 23 unchanged lines hidden (view full) --- 32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 34 * POSSIBILITY OF SUCH DAMAGE. 35 * 36 * from: NetBSD: mk48txx.c,v 1.15 2004/07/05 09:24:31 pk Exp 37 */ 38 39#include <sys/cdefs.h> |
40__FBSDID("$FreeBSD: head/sys/dev/mk48txx/mk48txx.c 167950 2007-03-27 21:03:37Z n_hibma $"); | 40__FBSDID("$FreeBSD: head/sys/dev/mk48txx/mk48txx.c 201003 2009-12-25 21:32:26Z marius $"); |
41 42/* | 41 42/* |
43 * Mostek MK48T02, MK48T08, MK48T18, MK48T59 time-of-day chip subroutines. | 43 * Mostek MK48T02, MK48T08, MK48T18, MK48T59 time-of-day chip subroutines |
44 */ 45 46#include <sys/param.h> 47#include <sys/systm.h> 48#include <sys/bus.h> 49#include <sys/clock.h> 50#include <sys/eventhandler.h> 51#include <sys/lock.h> 52#include <sys/mutex.h> 53#include <sys/watchdog.h> 54 55#include <machine/bus.h> 56 57#include <dev/mk48txx/mk48txxreg.h> 58#include <dev/mk48txx/mk48txxvar.h> 59 60#include "clock_if.h" 61 | 44 */ 45 46#include <sys/param.h> 47#include <sys/systm.h> 48#include <sys/bus.h> 49#include <sys/clock.h> 50#include <sys/eventhandler.h> 51#include <sys/lock.h> 52#include <sys/mutex.h> 53#include <sys/watchdog.h> 54 55#include <machine/bus.h> 56 57#include <dev/mk48txx/mk48txxreg.h> 58#include <dev/mk48txx/mk48txxvar.h> 59 60#include "clock_if.h" 61 |
62static uint8_t mk48txx_def_nvrd(device_t, int); 63static void mk48txx_def_nvwr(device_t, int, uint8_t); 64static void mk48txx_watchdog(void *, u_int, int *); | 62static uint8_t mk48txx_def_nvrd(device_t dev, int off); 63static void mk48txx_def_nvwr(device_t dev, int off, uint8_t v); 64static void mk48txx_watchdog(void *arg, u_int cmd, int *error); |
65 | 65 |
66struct { | 66static const struct { |
67 const char *name; 68 bus_size_t nvramsz; 69 bus_size_t clkoff; | 67 const char *name; 68 bus_size_t nvramsz; 69 bus_size_t clkoff; |
70 int flags; 71#define MK48TXX_EXT_REGISTERS 1 /* Has extended register set */ 72} mk48txx_models[] = { | 70 u_int flags; 71#define MK48TXX_EXT_REGISTERS 1 /* Has extended register set. */ 72} const mk48txx_models[] = { |
73 { "mk48t02", MK48T02_CLKSZ, MK48T02_CLKOFF, 0 }, 74 { "mk48t08", MK48T08_CLKSZ, MK48T08_CLKOFF, 0 }, 75 { "mk48t18", MK48T18_CLKSZ, MK48T18_CLKOFF, 0 }, 76 { "mk48t59", MK48T59_CLKSZ, MK48T59_CLKOFF, MK48TXX_EXT_REGISTERS }, 77}; 78 79int 80mk48txx_attach(device_t dev) --- 26 unchanged lines hidden (view full) --- 107 108 if (sc->sc_nvrd == NULL) 109 sc->sc_nvrd = mk48txx_def_nvrd; 110 if (sc->sc_nvwr == NULL) 111 sc->sc_nvwr = mk48txx_def_nvwr; 112 113 if (mk48txx_models[i].flags & MK48TXX_EXT_REGISTERS) { 114 mtx_lock(&sc->sc_mtx); | 73 { "mk48t02", MK48T02_CLKSZ, MK48T02_CLKOFF, 0 }, 74 { "mk48t08", MK48T08_CLKSZ, MK48T08_CLKOFF, 0 }, 75 { "mk48t18", MK48T18_CLKSZ, MK48T18_CLKOFF, 0 }, 76 { "mk48t59", MK48T59_CLKSZ, MK48T59_CLKOFF, MK48TXX_EXT_REGISTERS }, 77}; 78 79int 80mk48txx_attach(device_t dev) --- 26 unchanged lines hidden (view full) --- 107 108 if (sc->sc_nvrd == NULL) 109 sc->sc_nvrd = mk48txx_def_nvrd; 110 if (sc->sc_nvwr == NULL) 111 sc->sc_nvwr = mk48txx_def_nvwr; 112 113 if (mk48txx_models[i].flags & MK48TXX_EXT_REGISTERS) { 114 mtx_lock(&sc->sc_mtx); |
115 if ((*sc->sc_nvrd)(dev, sc->sc_clkoffset + MK48TXX_FLAGS) & | 115 if ((*sc->sc_nvrd)(dev, sc->sc_clkoffset + MK48TXX_FLAGS) & |
116 MK48TXX_FLAGS_BL) { 117 mtx_unlock(&sc->sc_mtx); 118 device_printf(dev, "%s: battery low\n", __func__); 119 return (ENXIO); 120 } 121 mtx_unlock(&sc->sc_mtx); 122 } 123 --- 11 unchanged lines hidden (view full) --- 135 (dev, sc->sc_clkoffset + MK48TXX_IWDAY); 136 wday |= MK48TXX_WDAY_CEB; 137 (*sc->sc_nvwr) 138 (dev, sc->sc_clkoffset + MK48TXX_IWDAY, wday); 139 mtx_unlock(&sc->sc_mtx); 140 } 141 } 142 | 116 MK48TXX_FLAGS_BL) { 117 mtx_unlock(&sc->sc_mtx); 118 device_printf(dev, "%s: battery low\n", __func__); 119 return (ENXIO); 120 } 121 mtx_unlock(&sc->sc_mtx); 122 } 123 --- 11 unchanged lines hidden (view full) --- 135 (dev, sc->sc_clkoffset + MK48TXX_IWDAY); 136 wday |= MK48TXX_WDAY_CEB; 137 (*sc->sc_nvwr) 138 (dev, sc->sc_clkoffset + MK48TXX_IWDAY, wday); 139 mtx_unlock(&sc->sc_mtx); 140 } 141 } 142 |
143 clock_register(dev, 1000000); /* 1 second resolution. */ | 143 clock_register(dev, 1000000); /* 1 second resolution */ |
144 145 if ((sc->sc_flag & MK48TXX_WDOG_REGISTER) && 146 (mk48txx_models[i].flags & MK48TXX_EXT_REGISTERS)) { 147 sc->sc_wet = EVENTHANDLER_REGISTER(watchdog_list, 148 mk48txx_watchdog, dev, 0); 149 device_printf(dev, 150 "watchdog registered, timeout interval max. 128 sec\n"); 151 } --- 175 unchanged lines hidden --- | 144 145 if ((sc->sc_flag & MK48TXX_WDOG_REGISTER) && 146 (mk48txx_models[i].flags & MK48TXX_EXT_REGISTERS)) { 147 sc->sc_wet = EVENTHANDLER_REGISTER(watchdog_list, 148 mk48txx_watchdog, dev, 0); 149 device_printf(dev, 150 "watchdog registered, timeout interval max. 128 sec\n"); 151 } --- 175 unchanged lines hidden --- |