Lines Matching +full:adc +full:- +full:dev
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
40 #include <dev/iicbus/iiconf.h>
56 #define AD7418_VOLT 4 /* ADC aka Voltage (r/o) */
69 static int ad7418_read_1(device_t dev, int reg);
70 static int ad7418_write_1(device_t dev, int reg, int v);
73 ad7418_probe(device_t dev) in ad7418_probe() argument
76 device_set_desc(dev, "Analog Devices AD7418 ADC"); in ad7418_probe()
86 sx_xlock(&sc->sc_lock); in ad7418_sysctl_temp()
88 temp = (sc->sc_curtemp / 64) * 25; in ad7418_sysctl_temp()
89 sx_xunlock(&sc->sc_lock); in ad7418_sysctl_temp()
99 sx_xlock(&sc->sc_lock); in ad7418_sysctl_voltage()
101 volt = (sc->sc_curvolt >> 6) * 564 / 10; in ad7418_sysctl_voltage()
102 sx_xunlock(&sc->sc_lock); in ad7418_sysctl_voltage()
107 ad7418_attach(device_t dev) in ad7418_attach() argument
109 struct ad7418_softc *sc = device_get_softc(dev); in ad7418_attach()
110 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(dev); in ad7418_attach()
111 struct sysctl_oid *tree = device_get_sysctl_tree(dev); in ad7418_attach()
114 sc->sc_dev = dev; in ad7418_attach()
115 sc->sc_lastupdate = ticks - hz; in ad7418_attach()
117 sx_init(&sc->sc_lock, "ad7418"); in ad7418_attach()
127 conf = ad7418_read_1(dev, AD7418_CONF); in ad7418_attach()
129 ad7418_write_1(dev, AD7418_CONF, conf &~ AD7418_CONF_SHUTDOWN); in ad7418_attach()
135 ad7418_read_1(device_t dev, int reg) in ad7418_read_1() argument
143 return iicbus_transfer(dev, msgs, 2) != 0 ? -1 : data[0]; in ad7418_read_1()
147 ad7418_write_1(device_t dev, int reg, int v) in ad7418_write_1() argument
156 return iicbus_transfer(dev, msgs, 1); in ad7418_write_1()
162 if (sc->sc_curchan == chan) in ad7418_set_channel()
164 ad7418_write_1(sc->sc_dev, AD7418_CONF, in ad7418_set_channel()
165 (ad7418_read_1(sc->sc_dev, AD7418_CONF) &~ AD7418_CONF_CHAN)|chan); in ad7418_set_channel()
166 sc->sc_curchan = chan; in ad7418_set_channel()
179 ad7418_read_2(device_t dev, int reg) in ad7418_read_2() argument
188 return iicbus_transfer(dev, msgs, 2) != 0 ? in ad7418_read_2()
189 -1 : ((data[0] << 8) | data[1]); in ad7418_read_2()
197 sx_assert(&sc->sc_lock, SA_XLOCKED); in ad7418_update()
199 if (ticks - sc->sc_lastupdate > hz) { in ad7418_update()
201 v = ad7418_read_2(sc->sc_dev, AD7418_TEMP); in ad7418_update()
203 sc->sc_curtemp = v; in ad7418_update()
205 v = ad7418_read_2(sc->sc_dev, AD7418_VOLT); in ad7418_update()
207 sc->sc_curvolt = v; in ad7418_update()
208 sc->sc_lastupdate = ticks; in ad7418_update()