You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.4 KiB
Diff
137 lines
4.4 KiB
Diff
From 17abc9ec68b73ddeb262a507a62421016b9c54d5 Mon Sep 17 00:00:00 2001
|
|
From: Tomasz Duszynski <tduszyns@gmail.com>
|
|
Date: Fri, 14 Dec 2018 19:28:01 +0100
|
|
Subject: [PATCH] iio: add IIO_MASSCONCENTRATION channel type
|
|
|
|
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 | 17 ++++++++++++++++-
|
|
drivers/iio/industrialio-core.c | 5 +++++
|
|
include/uapi/linux/iio/types.h | 5 +++++
|
|
tools/iio/iio_event_monitor.c | 10 ++++++++++
|
|
4 files changed, 36 insertions(+), 1 deletion(-)
|
|
|
|
--- a/Documentation/ABI/testing/sysfs-bus-iio
|
|
+++ b/Documentation/ABI/testing/sysfs-bus-iio
|
|
@@ -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.
|
|
--- a/drivers/iio/industrialio-core.c
|
|
+++ b/drivers/iio/industrialio-core.c
|
|
@@ -87,6 +87,7 @@ static const char * const iio_chan_type_
|
|
[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_n
|
|
[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 */
|
|
--- a/include/uapi/linux/iio/types.h
|
|
+++ b/include/uapi/linux/iio/types.h
|
|
@@ -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 {
|
|
--- a/tools/iio/iio_event_monitor.c
|
|
+++ b/tools/iio/iio_event_monitor.c
|
|
@@ -60,6 +60,7 @@ static const char * const iio_chan_type_
|
|
[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_n
|
|
[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_ev
|
|
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_ev
|
|
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;
|