c214495f03f42233dfc562f588fa4a15a4b84339
[openwrt/staging/rmilecki.git] / target / linux / generic / backport-4.19 / 499-v4.22-iio-add-IIO_MASSCONCENTRATION-channel-type.patch
1 From 17abc9ec68b73ddeb262a507a62421016b9c54d5 Mon Sep 17 00:00:00 2001
2 From: Tomasz Duszynski <tduszyns@gmail.com>
3 Date: Fri, 14 Dec 2018 19:28:01 +0100
4 Subject: [PATCH] iio: add IIO_MASSCONCENTRATION channel type
5
6 Measuring particulate matter in ug / m3 (micro-grams per cubic meter)
7 is de facto standard. Existing air quality sensors usually follow
8 this convention and are capable of returning measurements using
9 this unit.
10
11 IIO currently does not offer suitable channel type for this
12 type of measurements hence this patch adds this.
13
14 In addition, extra modifiers are introduced used for distinguishing
15 between fine pm1, pm2p5 and coarse pm4, pm10 particle measurements, i.e
16 IIO_MOD_PM1, IIO_MOD_PM25 and IIO_MOD_PM4, IIO_MOD_PM10.
17
18 pmX consists of particles with aerodynamic diameter less or equal to
19 X micrometers.
20
21 Signed-off-by: Tomasz Duszynski <tduszyns@gmail.com>
22 Acked-by: Matt Ranostay <matt.ranostay@konsulko.com>
23 Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
24 ---
25 Documentation/ABI/testing/sysfs-bus-iio | 17 ++++++++++++++++-
26 drivers/iio/industrialio-core.c | 5 +++++
27 include/uapi/linux/iio/types.h | 5 +++++
28 tools/iio/iio_event_monitor.c | 10 ++++++++++
29 4 files changed, 36 insertions(+), 1 deletion(-)
30
31 diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio
32 index 8127a08e366d..67fd88bf7910 100644
33 --- a/Documentation/ABI/testing/sysfs-bus-iio
34 +++ b/Documentation/ABI/testing/sysfs-bus-iio
35 @@ -1684,4 +1684,19 @@ KernelVersion: 4.18
36 Contact: linux-iio@vger.kernel.org
37 Description:
38 Raw (unscaled) phase difference reading from channel Y
39 - that can be processed to radians.
40 \ No newline at end of file
41 + that can be processed to radians.
42 +
43 +What: /sys/bus/iio/devices/iio:deviceX/in_massconcentration_pm1_input
44 +What: /sys/bus/iio/devices/iio:deviceX/in_massconcentrationY_pm1_input
45 +What: /sys/bus/iio/devices/iio:deviceX/in_massconcentration_pm2p5_input
46 +What: /sys/bus/iio/devices/iio:deviceX/in_massconcentrationY_pm2p5_input
47 +What: /sys/bus/iio/devices/iio:deviceX/in_massconcentration_pm4_input
48 +What: /sys/bus/iio/devices/iio:deviceX/in_massconcentrationY_pm4_input
49 +What: /sys/bus/iio/devices/iio:deviceX/in_massconcentration_pm10_input
50 +What: /sys/bus/iio/devices/iio:deviceX/in_massconcentrationY_pm10_input
51 +KernelVersion: 4.22
52 +Contact: linux-iio@vger.kernel.org
53 +Description:
54 + Mass concentration reading of particulate matter in ug / m3.
55 + pmX consists of particles with aerodynamic diameter less or
56 + equal to X micrometers.
57 diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
58 index 4f5cd9f60870..4700fd5d8c90 100644
59 --- a/drivers/iio/industrialio-core.c
60 +++ b/drivers/iio/industrialio-core.c
61 @@ -87,6 +87,7 @@ static const char * const iio_chan_type_name_spec[] = {
62 [IIO_GRAVITY] = "gravity",
63 [IIO_POSITIONRELATIVE] = "positionrelative",
64 [IIO_PHASE] = "phase",
65 + [IIO_MASSCONCENTRATION] = "massconcentration",
66 };
67
68 static const char * const iio_modifier_names[] = {
69 @@ -127,6 +128,10 @@ static const char * const iio_modifier_names[] = {
70 [IIO_MOD_Q] = "q",
71 [IIO_MOD_CO2] = "co2",
72 [IIO_MOD_VOC] = "voc",
73 + [IIO_MOD_PM1] = "pm1",
74 + [IIO_MOD_PM2P5] = "pm2p5",
75 + [IIO_MOD_PM4] = "pm4",
76 + [IIO_MOD_PM10] = "pm10",
77 };
78
79 /* relies on pairs of these shared then separate */
80 diff --git a/include/uapi/linux/iio/types.h b/include/uapi/linux/iio/types.h
81 index 92baabc103ac..c59adac24b1c 100644
82 --- a/include/uapi/linux/iio/types.h
83 +++ b/include/uapi/linux/iio/types.h
84 @@ -46,6 +46,7 @@ enum iio_chan_type {
85 IIO_GRAVITY,
86 IIO_POSITIONRELATIVE,
87 IIO_PHASE,
88 + IIO_MASSCONCENTRATION,
89 };
90
91 enum iio_modifier {
92 @@ -87,6 +88,10 @@ enum iio_modifier {
93 IIO_MOD_VOC,
94 IIO_MOD_LIGHT_UV,
95 IIO_MOD_LIGHT_DUV,
96 + IIO_MOD_PM1,
97 + IIO_MOD_PM2P5,
98 + IIO_MOD_PM4,
99 + IIO_MOD_PM10,
100 };
101
102 enum iio_event_type {
103 diff --git a/tools/iio/iio_event_monitor.c b/tools/iio/iio_event_monitor.c
104 index ac2de6b7e89f..f6b8003fbe3c 100644
105 --- a/tools/iio/iio_event_monitor.c
106 +++ b/tools/iio/iio_event_monitor.c
107 @@ -60,6 +60,7 @@ static const char * const iio_chan_type_name_spec[] = {
108 [IIO_GRAVITY] = "gravity",
109 [IIO_POSITIONRELATIVE] = "positionrelative",
110 [IIO_PHASE] = "phase",
111 + [IIO_MASSCONCENTRATION] = "massconcentration",
112 };
113
114 static const char * const iio_ev_type_text[] = {
115 @@ -115,6 +116,10 @@ static const char * const iio_modifier_names[] = {
116 [IIO_MOD_Q] = "q",
117 [IIO_MOD_CO2] = "co2",
118 [IIO_MOD_VOC] = "voc",
119 + [IIO_MOD_PM1] = "pm1",
120 + [IIO_MOD_PM2P5] = "pm2p5",
121 + [IIO_MOD_PM4] = "pm4",
122 + [IIO_MOD_PM10] = "pm10",
123 };
124
125 static bool event_is_known(struct iio_event_data *event)
126 @@ -156,6 +161,7 @@ static bool event_is_known(struct iio_event_data *event)
127 case IIO_GRAVITY:
128 case IIO_POSITIONRELATIVE:
129 case IIO_PHASE:
130 + case IIO_MASSCONCENTRATION:
131 break;
132 default:
133 return false;
134 @@ -200,6 +206,10 @@ static bool event_is_known(struct iio_event_data *event)
135 case IIO_MOD_Q:
136 case IIO_MOD_CO2:
137 case IIO_MOD_VOC:
138 + case IIO_MOD_PM1:
139 + case IIO_MOD_PM2P5:
140 + case IIO_MOD_PM4:
141 + case IIO_MOD_PM10:
142 break;
143 default:
144 return false;