svn commit: r239397 - head/sys/dev/iicbus
Andreas Tobler
andreast at FreeBSD.org
Sun Aug 19 19:31:37 UTC 2012
Author: andreast
Date: Sun Aug 19 19:31:36 2012
New Revision: 239397
URL: http://svn.freebsd.org/changeset/base/239397
Log:
Do the ADC init only at startup and not during every sensor read call.
This reduces the number of interrupts.
Modified:
head/sys/dev/iicbus/ad7417.c
Modified: head/sys/dev/iicbus/ad7417.c
==============================================================================
--- head/sys/dev/iicbus/ad7417.c Sun Aug 19 19:17:54 2012 (r239396)
+++ head/sys/dev/iicbus/ad7417.c Sun Aug 19 19:31:36 2012 (r239397)
@@ -104,6 +104,7 @@ struct ad7417_softc {
uint32_t sc_addr;
struct ad7417_sensor *sc_sensors;
int sc_nsensors;
+ int init_done;
};
static device_method_t ad7417_methods[] = {
/* Device interface */
@@ -247,6 +248,9 @@ ad7417_init_adc(device_t dev, uint32_t a
{
uint8_t buf;
int err;
+ struct ad7417_softc *sc;
+
+ sc = device_get_softc(dev);
adc741x_config = 0;
/* Clear Config2 */
@@ -267,6 +271,8 @@ ad7417_init_adc(device_t dev, uint32_t a
if (err < 0)
return (-1);
+ sc->init_done = 1;
+
return (0);
}
@@ -430,10 +436,10 @@ ad7417_attach(device_t dev)
if (sc->sc_sensors[i].type == ADC7417_TEMP_SENSOR) {
unit = "temp";
- desc = "Sensor temp in C";
+ desc = "sensor unit (C)";
} else {
unit = "volt";
- desc = "Sensor Volt in V";
+ desc = "sensor unit (mV)";
}
/* I use i to pass the sensor id. */
SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
@@ -584,9 +590,10 @@ ad7417_sensor_read(struct ad7417_sensor
sc = device_get_softc(sens->dev);
- /* Init the ADC. */
- if (ad7417_init_adc(sc->sc_dev, sc->sc_addr) < 0)
- return (-1);
+ /* Init the ADC if not already done.*/
+ if (!sc->init_done)
+ if (ad7417_init_adc(sc->sc_dev, sc->sc_addr) < 0)
+ return (-1);
if (sens->type == ADC7417_TEMP_SENSOR) {
if (ad7417_get_temp(sc->sc_dev, sc->sc_addr, &temp) < 0)
More information about the svn-src-head
mailing list