iio: Add INT_TIME (integration time) channel info attribute
authorPeter Meerwald <pmeerw@pmeerw.net>
Sun, 8 Sep 2013 15:20:00 +0000 (16:20 +0100)
committerJonathan Cameron <jic23@kernel.org>
Sat, 14 Sep 2013 20:16:44 +0000 (21:16 +0100)
Integration time is in seconds; it controls the measurement
time and influences the gain of a sensor.

There are two typical ways that scaling is implemented in a device:
1) input amplifier,
2) reference to the ADC is changed.
These both result in the accuracy of the ADC varying (by applying its
sampling over a more relevant range).

Integration time is a way of dealing with noise inherent in the analog
sensor itself.  In the case of a light sensor, a mixture of photon noise
and device specific noise.  Photon noise is dealt with by either improving
the efficiency of the sensor, (more photons actually captured) which is not
easily varied dynamically, or by integrating the measurement over a longer
time period.  Note that this can also be thought of as an averaging of a
number of individual samples and is infact sometimes implemented this way.
Altering integration time implies that the duration of a measurement changes,
a fact the device's user may be interested in.

Hence it makes sense to distinguish between integration time and simple
scale. In some devices both types of control are present and whilst they
will have similar effects on the amplitude of the reading, their effect
on the noise of the measurements will differ considerably.

Used by adjd_s311, tsl4531, tcs3472
The following drivers have similar controls (and could be adapted):
* tsl2563 (integration time is controlled via CALIBSCALE among other things)
* tsl2583 (has integration_time device_attr, but driver doesn't use channels yet)
* tsl2x7x (has integration_time attr)

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
Cc: Jon Brenner <jon.brenner@ams.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Documentation/ABI/testing/sysfs-bus-iio
drivers/iio/industrialio-core.c
include/linux/iio/iio.h
include/linux/iio/sysfs.h

index 39c8de0e53d00924630c789e27c9e6c10af5e960..ab1047c20495efb9c9e3b934950d69a9fba06071 100644 (file)
@@ -811,3 +811,14 @@ Description:
                Writing '1' stores the current device configuration into
                on-chip EEPROM. After power-up or chip reset the device will
                automatically load the saved configuration.
+
+What:          /sys/.../iio:deviceX/in_intensity_red_integration_time
+What:          /sys/.../iio:deviceX/in_intensity_green_integration_time
+What:          /sys/.../iio:deviceX/in_intensity_blue_integration_time
+What:          /sys/.../iio:deviceX/in_intensity_clear_integration_time
+What:          /sys/.../iio:deviceX/in_illuminance_integration_time
+KernelVersion: 3.12
+Contact:       linux-iio@vger.kernel.org
+Description:
+               This attribute is used to get/set the integration time in
+               seconds.
index 97f0297b120f41e7f73d9b5a5cf27887da146a92..2cb4841d5357c2c88cb731884bc8e3f4ba75d239 100644 (file)
@@ -101,6 +101,7 @@ static const char * const iio_chan_info_postfix[] = {
        [IIO_CHAN_INFO_PHASE] = "phase",
        [IIO_CHAN_INFO_HARDWAREGAIN] = "hardwaregain",
        [IIO_CHAN_INFO_HYSTERESIS] = "hysteresis",
+       [IIO_CHAN_INFO_INT_TIME] = "integration_time",
 };
 
 const struct iio_chan_spec
index 8e7a8132b109a861bdee758eca6381097f830ef4..01edd67955504c08bb7c7db382731398bc879507 100644 (file)
@@ -36,6 +36,7 @@ enum iio_chan_info_enum {
        IIO_CHAN_INFO_PHASE,
        IIO_CHAN_INFO_HARDWAREGAIN,
        IIO_CHAN_INFO_HYSTERESIS,
+       IIO_CHAN_INFO_INT_TIME,
 };
 
 enum iio_endian {
index 2958c960003a7ed3bcb22baf8ca02266f3736c7d..8a1d18640ab94dd7d29ddec3473f3c5c0e9ef112 100644 (file)
@@ -100,6 +100,21 @@ struct iio_const_attr {
 #define IIO_CONST_ATTR_SAMP_FREQ_AVAIL(_string)                        \
        IIO_CONST_ATTR(sampling_frequency_available, _string)
 
+/**
+ * IIO_DEV_ATTR_INT_TIME_AVAIL - list available integration times
+ * @_show: output method for the attribute
+ **/
+#define IIO_DEV_ATTR_INT_TIME_AVAIL(_show)             \
+       IIO_DEVICE_ATTR(integration_time_available, S_IRUGO, _show, NULL, 0)
+/**
+ * IIO_CONST_ATTR_INT_TIME_AVAIL - list available integration times
+ * @_string: frequency string for the attribute
+ *
+ * Constant version
+ **/
+#define IIO_CONST_ATTR_INT_TIME_AVAIL(_string)         \
+       IIO_CONST_ATTR(integration_time_available, _string)
+
 #define IIO_DEV_ATTR_TEMP_RAW(_show)                   \
        IIO_DEVICE_ATTR(in_temp_raw, S_IRUGO, _show, NULL, 0)