iio: core: Introduce STEPS channel, ENABLE mask and INSTANCE event
authorIrina Tirdea <irina.tirdea@intel.com>
Mon, 10 Nov 2014 12:45:32 +0000 (14:45 +0200)
committerJonathan Cameron <jic23@kernel.org>
Sat, 22 Nov 2014 11:05:51 +0000 (11:05 +0000)
These changes are needed to support the functionality of a pedometer.
A pedometer has two basic functionalities: step counter and step detector.

The step counter needs to be enabled and then it will count the steps
in its hardware register. Whenever the application needs to check
the step count, it will read the step counter register. To support the
step counter a new channel type STEPS is added. Since the pedometer needs
to be enabled first so that the hardware can count and store the steps,
we need a specific ENABLE channel info mask.

The step detector will generate an interrupt each time a step is detected.
To support this functionality we add a new event type INSTANCE.

For more information on the Android requirements for step counter and step
detector see:
http://source.android.com/devices/sensors/composite_sensors.html#counter
and http://source.android.com/devices/sensors/composite_sensors.html#detector.

A device that has the pedometer functionality this interface needs to
support is Freescale's MMA9553L:
http://www.freescale.com/files/sensors/doc/ref_manual/MMA9553LSWRM.pdf

Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
Signed-off-by: Daniel Baluta <daniel.baluta@intel.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Documentation/ABI/testing/sysfs-bus-iio
drivers/iio/industrialio-core.c
drivers/iio/industrialio-event.c
include/linux/iio/iio.h
include/linux/iio/types.h

index 7bf49ad8fd821faa9c0258992505b13a58341e48..c60b0a1af83974671ef5b05c12545b546b1602e1 100644 (file)
@@ -856,6 +856,13 @@ Description:
                number or direction is not specified, applies to all channels of
                this type.
 
+What:          /sys/.../events/in_steps_instance_en
+KernelVersion: 3.19
+Contact:       linux-iio@vger.kernel.org
+Description:
+               Enables or disables step detection. Each time the user takes a step an
+               event of this type will be generated.
+
 What:          /sys/bus/iio/devices/iio:deviceX/trigger/current_trigger
 KernelVersion: 2.6.35
 Contact:       linux-iio@vger.kernel.org
@@ -1095,3 +1102,18 @@ Description:
                after application of scale and offset. If no offset or scale is
                present, output should be considered as processed with the
                unit in milliamps.
+
+What:          /sys/.../iio:deviceX/in_steps_en
+KernelVersion: 3.19
+Contact:       linux-iio@vger.kernel.org
+Description:
+               Activates the step counter. After activation, the number of steps
+               taken by the user will be counted in hardware and exported through
+               in_steps_input.
+
+What:          /sys/.../iio:deviceX/in_steps_input
+KernelVersion: 3.19
+Contact:       linux-iio@vger.kernel.org
+Description:
+               This attribute is used to read the number of steps taken by the user
+               since the last reboot while activated.
index e453ef9e0c3627ebc40b9a8ff3ec394d5454408d..1e060f390b084f20a3b8e3ed1d0fbc9dd1705cff 100644 (file)
@@ -71,6 +71,7 @@ static const char * const iio_chan_type_name_spec[] = {
        [IIO_PRESSURE] = "pressure",
        [IIO_HUMIDITYRELATIVE] = "humidityrelative",
        [IIO_ACTIVITY] = "activity",
+       [IIO_STEPS] = "steps",
 };
 
 static const char * const iio_modifier_names[] = {
@@ -118,6 +119,7 @@ static const char * const iio_chan_info_postfix[] = {
        [IIO_CHAN_INFO_HARDWAREGAIN] = "hardwaregain",
        [IIO_CHAN_INFO_HYSTERESIS] = "hysteresis",
        [IIO_CHAN_INFO_INT_TIME] = "integration_time",
+       [IIO_CHAN_INFO_ENABLE] = "en",
 };
 
 /**
index 1290290adcb583eff5949f37753e5211df8bb883..3f5cee0295c5c0248d4ad9693633bbfcb09294f0 100644 (file)
@@ -197,6 +197,7 @@ static const char * const iio_ev_type_text[] = {
        [IIO_EV_TYPE_ROC] = "roc",
        [IIO_EV_TYPE_THRESH_ADAPTIVE] = "thresh_adaptive",
        [IIO_EV_TYPE_MAG_ADAPTIVE] = "mag_adaptive",
+       [IIO_EV_TYPE_INSTANCE] = "instance",
 };
 
 static const char * const iio_ev_dir_text[] = {
index 3642ce7ef512cba9ec681da16f4727f08e58b674..f45a400a5e3ea1950787703a8f2289cf59a4f405 100644 (file)
@@ -38,6 +38,7 @@ enum iio_chan_info_enum {
        IIO_CHAN_INFO_HARDWAREGAIN,
        IIO_CHAN_INFO_HYSTERESIS,
        IIO_CHAN_INFO_INT_TIME,
+       IIO_CHAN_INFO_ENABLE,
 };
 
 enum iio_shared_by {
index 52cb5329407b9870abd2d41a9a97f1b9f084496f..904dcbbf0e6fedf2dc7120abb27f5e9c118dff63 100644 (file)
@@ -31,6 +31,7 @@ enum iio_chan_type {
        IIO_PRESSURE,
        IIO_HUMIDITYRELATIVE,
        IIO_ACTIVITY,
+       IIO_STEPS,
 };
 
 enum iio_modifier {
@@ -73,6 +74,7 @@ enum iio_event_type {
        IIO_EV_TYPE_ROC,
        IIO_EV_TYPE_THRESH_ADAPTIVE,
        IIO_EV_TYPE_MAG_ADAPTIVE,
+       IIO_EV_TYPE_INSTANCE,
 };
 
 enum iio_event_info {