iio: add IIO_MASSCONCENTRATION channel type
authorTomasz Duszynski <tduszyns@gmail.com>
Fri, 14 Dec 2018 18:28:01 +0000 (19:28 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 16 Dec 2018 14:05:57 +0000 (14:05 +0000)
Measuring particulate matter in ug / m3 (micro-grams per cubic meter)
is de facto standard. Existing air quality sensors usually follow
this convention and are capable of returning measurements using
this unit.

IIO currently does not offer suitable channel type for this
type of measurements hence this patch adds this.

In addition, extra modifiers are introduced used for distinguishing
between fine pm1, pm2p5 and coarse pm4, pm10 particle measurements, i.e
IIO_MOD_PM1, IIO_MOD_PM25 and IIO_MOD_PM4, IIO_MOD_PM10.

pmX consists of particles with aerodynamic diameter less or equal to
X micrometers.

Signed-off-by: Tomasz Duszynski <tduszyns@gmail.com>
Acked-by: Matt Ranostay <matt.ranostay@konsulko.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Documentation/ABI/testing/sysfs-bus-iio
drivers/iio/industrialio-core.c
include/uapi/linux/iio/types.h
tools/iio/iio_event_monitor.c

index 8127a08e366d8f96b05f0dacf71cd55634f68a1d..67fd88bf791035e45bde54fcb8104dc6597a6d04 100644 (file)
@@ -1684,4 +1684,19 @@ KernelVersion:   4.18
 Contact:       linux-iio@vger.kernel.org
 Description:
                Raw (unscaled) phase difference reading from channel Y
-               that can be processed to radians.
\ No newline at end of file
+               that can be processed to radians.
+
+What:          /sys/bus/iio/devices/iio:deviceX/in_massconcentration_pm1_input
+What:          /sys/bus/iio/devices/iio:deviceX/in_massconcentrationY_pm1_input
+What:          /sys/bus/iio/devices/iio:deviceX/in_massconcentration_pm2p5_input
+What:          /sys/bus/iio/devices/iio:deviceX/in_massconcentrationY_pm2p5_input
+What:          /sys/bus/iio/devices/iio:deviceX/in_massconcentration_pm4_input
+What:          /sys/bus/iio/devices/iio:deviceX/in_massconcentrationY_pm4_input
+What:          /sys/bus/iio/devices/iio:deviceX/in_massconcentration_pm10_input
+What:          /sys/bus/iio/devices/iio:deviceX/in_massconcentrationY_pm10_input
+KernelVersion: 4.22
+Contact:       linux-iio@vger.kernel.org
+Description:
+               Mass concentration reading of particulate matter in ug / m3.
+               pmX consists of particles with aerodynamic diameter less or
+               equal to X micrometers.
index 4f5cd9f60870720819d347db697242c8d3282742..4700fd5d8c90a6ebaee08659b4bb17ca9db105a4 100644 (file)
@@ -87,6 +87,7 @@ static const char * const iio_chan_type_name_spec[] = {
        [IIO_GRAVITY]  = "gravity",
        [IIO_POSITIONRELATIVE]  = "positionrelative",
        [IIO_PHASE] = "phase",
+       [IIO_MASSCONCENTRATION] = "massconcentration",
 };
 
 static const char * const iio_modifier_names[] = {
@@ -127,6 +128,10 @@ static const char * const iio_modifier_names[] = {
        [IIO_MOD_Q] = "q",
        [IIO_MOD_CO2] = "co2",
        [IIO_MOD_VOC] = "voc",
+       [IIO_MOD_PM1] = "pm1",
+       [IIO_MOD_PM2P5] = "pm2p5",
+       [IIO_MOD_PM4] = "pm4",
+       [IIO_MOD_PM10] = "pm10",
 };
 
 /* relies on pairs of these shared then separate */
index 92baabc103acbd22f7ca1487687401bf8ee7d5bd..c59adac24b1c966603fe0f04fda408d2dc8dafa6 100644 (file)
@@ -46,6 +46,7 @@ enum iio_chan_type {
        IIO_GRAVITY,
        IIO_POSITIONRELATIVE,
        IIO_PHASE,
+       IIO_MASSCONCENTRATION,
 };
 
 enum iio_modifier {
@@ -87,6 +88,10 @@ enum iio_modifier {
        IIO_MOD_VOC,
        IIO_MOD_LIGHT_UV,
        IIO_MOD_LIGHT_DUV,
+       IIO_MOD_PM1,
+       IIO_MOD_PM2P5,
+       IIO_MOD_PM4,
+       IIO_MOD_PM10,
 };
 
 enum iio_event_type {
index ac2de6b7e89f5e07801e8c8198c9228404a56bfc..f6b8003fbe3c3f76df9384e1d8c0c0343b018b12 100644 (file)
@@ -60,6 +60,7 @@ static const char * const iio_chan_type_name_spec[] = {
        [IIO_GRAVITY] = "gravity",
        [IIO_POSITIONRELATIVE] = "positionrelative",
        [IIO_PHASE] = "phase",
+       [IIO_MASSCONCENTRATION] = "massconcentration",
 };
 
 static const char * const iio_ev_type_text[] = {
@@ -115,6 +116,10 @@ static const char * const iio_modifier_names[] = {
        [IIO_MOD_Q] = "q",
        [IIO_MOD_CO2] = "co2",
        [IIO_MOD_VOC] = "voc",
+       [IIO_MOD_PM1] = "pm1",
+       [IIO_MOD_PM2P5] = "pm2p5",
+       [IIO_MOD_PM4] = "pm4",
+       [IIO_MOD_PM10] = "pm10",
 };
 
 static bool event_is_known(struct iio_event_data *event)
@@ -156,6 +161,7 @@ static bool event_is_known(struct iio_event_data *event)
        case IIO_GRAVITY:
        case IIO_POSITIONRELATIVE:
        case IIO_PHASE:
+       case IIO_MASSCONCENTRATION:
                break;
        default:
                return false;
@@ -200,6 +206,10 @@ static bool event_is_known(struct iio_event_data *event)
        case IIO_MOD_Q:
        case IIO_MOD_CO2:
        case IIO_MOD_VOC:
+       case IIO_MOD_PM1:
+       case IIO_MOD_PM2P5:
+       case IIO_MOD_PM4:
+       case IIO_MOD_PM10:
                break;
        default:
                return false;