aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/devicetree/bindings/arm/samsung/exynos-adc.txt52
-rw-r--r--Documentation/devicetree/bindings/iio/iio-bindings.txt97
-rw-r--r--drivers/hwmon/Kconfig9
-rw-r--r--drivers/hwmon/Makefile1
-rw-r--r--drivers/hwmon/iio_hwmon.c (renamed from drivers/staging/iio/iio_hwmon.c)8
-rw-r--r--drivers/iio/accel/hid-sensor-accel-3d.c24
-rw-r--r--drivers/iio/accel/kxsd9.c6
-rw-r--r--drivers/iio/adc/Kconfig20
-rw-r--r--drivers/iio/adc/Makefile2
-rw-r--r--drivers/iio/adc/ad7266.c12
-rw-r--r--drivers/iio/adc/ad7298.c10
-rw-r--r--drivers/iio/adc/ad7476.c10
-rw-r--r--drivers/iio/adc/ad7887.c8
-rw-r--r--drivers/iio/adc/ad7923.c383
-rw-r--r--drivers/iio/adc/at91_adc.c4
-rw-r--r--drivers/iio/adc/exynos_adc.c452
-rw-r--r--drivers/iio/adc/lp8788_adc.c4
-rw-r--r--drivers/iio/adc/max1363.c9
-rw-r--r--drivers/iio/adc/ti-adc081c.c4
-rw-r--r--drivers/iio/adc/ti_am335x_adc.c2
-rw-r--r--drivers/iio/adc/viperboard_adc.c2
-rw-r--r--drivers/iio/amplifiers/ad8366.c2
-rw-r--r--drivers/iio/common/st_sensors/st_sensors_spi.c11
-rw-r--r--drivers/iio/dac/ad5064.c4
-rw-r--r--drivers/iio/dac/ad5360.c10
-rw-r--r--drivers/iio/dac/ad5380.c8
-rw-r--r--drivers/iio/dac/ad5421.c10
-rw-r--r--drivers/iio/dac/ad5446.c4
-rw-r--r--drivers/iio/dac/ad5449.c4
-rw-r--r--drivers/iio/dac/ad5504.c4
-rw-r--r--drivers/iio/dac/ad5624r_spi.c4
-rw-r--r--drivers/iio/dac/ad5686.c6
-rw-r--r--drivers/iio/dac/ad5755.c10
-rw-r--r--drivers/iio/dac/ad5764.c10
-rw-r--r--drivers/iio/dac/ad5791.c6
-rw-r--r--drivers/iio/dac/max517.c4
-rw-r--r--drivers/iio/dac/mcp4725.c4
-rw-r--r--drivers/iio/frequency/ad9523.c8
-rw-r--r--drivers/iio/gyro/adis16080.c22
-rw-r--r--drivers/iio/gyro/adis16136.c13
-rw-r--r--drivers/iio/gyro/adxrs450.c22
-rw-r--r--drivers/iio/gyro/hid-sensor-gyro-3d.c24
-rw-r--r--drivers/iio/gyro/itg3200_core.c13
-rw-r--r--drivers/iio/iio_core.h1
-rw-r--r--drivers/iio/imu/adis16400_core.c49
-rw-r--r--drivers/iio/imu/adis16480.c32
-rw-r--r--drivers/iio/imu/inv_mpu6050/inv_mpu_core.c10
-rw-r--r--drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c5
-rw-r--r--drivers/iio/industrialio-core.c35
-rw-r--r--drivers/iio/industrialio-event.c29
-rw-r--r--drivers/iio/inkern.c171
-rw-r--r--drivers/iio/light/adjd_s311.c4
-rw-r--r--drivers/iio/light/hid-sensor-als.c8
-rw-r--r--drivers/iio/light/lm3533-als.c6
-rw-r--r--drivers/iio/light/tsl2563.c10
-rw-r--r--drivers/iio/light/vcnl4000.c6
-rw-r--r--drivers/iio/magnetometer/hid-sensor-magn-3d.c24
-rw-r--r--drivers/staging/iio/Kconfig8
-rw-r--r--drivers/staging/iio/Makefile2
-rw-r--r--drivers/staging/iio/accel/adis16201_core.c8
-rw-r--r--drivers/staging/iio/accel/adis16203_core.c2
-rw-r--r--drivers/staging/iio/accel/adis16204_core.c8
-rw-r--r--drivers/staging/iio/accel/adis16209_core.c4
-rw-r--r--drivers/staging/iio/accel/adis16220_core.c26
-rw-r--r--drivers/staging/iio/accel/adis16240_core.c9
-rw-r--r--drivers/staging/iio/accel/lis3l02dq_core.c11
-rw-r--r--drivers/staging/iio/accel/sca3000_core.c5
-rw-r--r--drivers/staging/iio/adc/Kconfig7
-rw-r--r--drivers/staging/iio/adc/Makefile1
-rw-r--r--drivers/staging/iio/adc/ad7280a.c12
-rw-r--r--drivers/staging/iio/adc/ad7291.c10
-rw-r--r--drivers/staging/iio/adc/ad7606_core.c4
-rw-r--r--drivers/staging/iio/adc/ad799x_core.c76
-rw-r--r--drivers/staging/iio/adc/adt7410.c1102
-rw-r--r--drivers/staging/iio/adc/lpc32xx_adc.c2
-rw-r--r--drivers/staging/iio/adc/mxs-lradc.c2
-rw-r--r--drivers/staging/iio/adc/spear_adc.c4
-rw-r--r--drivers/staging/iio/cdc/ad7150.c8
-rw-r--r--drivers/staging/iio/cdc/ad7152.c32
-rw-r--r--drivers/staging/iio/cdc/ad7746.c48
-rw-r--r--drivers/staging/iio/gyro/adis16060_core.c11
-rw-r--r--drivers/staging/iio/gyro/adis16130_core.c4
-rw-r--r--drivers/staging/iio/gyro/adis16260_core.c4
-rw-r--r--drivers/staging/iio/iio_simple_dummy.c33
-rw-r--r--drivers/staging/iio/impedance-analyzer/ad5933.c10
-rw-r--r--drivers/staging/iio/light/isl29018.c8
-rw-r--r--drivers/staging/iio/light/isl29028.c10
-rw-r--r--drivers/staging/iio/light/tsl2x7x_core.c40
-rw-r--r--drivers/staging/iio/magnetometer/ak8975.c4
-rw-r--r--drivers/staging/iio/magnetometer/hmc5843.c4
-rw-r--r--drivers/staging/iio/meter/ade7758_core.c60
-rw-r--r--drivers/staging/iio/resolver/ad2s1200.c4
-rw-r--r--drivers/staging/iio/resolver/ad2s1210.c4
-rw-r--r--drivers/staging/iio/resolver/ad2s90.c2
-rw-r--r--include/linux/iio/adc/ad_sigma_delta.h6
-rw-r--r--include/linux/iio/common/st_sensors.h5
-rw-r--r--include/linux/iio/iio.h79
-rw-r--r--include/linux/iio/imu/adis.h34
98 files changed, 1715 insertions, 1710 deletions
diff --git a/Documentation/devicetree/bindings/arm/samsung/exynos-adc.txt b/Documentation/devicetree/bindings/arm/samsung/exynos-adc.txt
new file mode 100644
index 000000000000..05e9d95ede5c
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/samsung/exynos-adc.txt
@@ -0,0 +1,52 @@
1Samsung Exynos Analog to Digital Converter bindings
2
3This devicetree binding are for the new adc driver written fori
4Exynos4 and upward SoCs from Samsung.
5
6New driver handles the following
71. Supports ADC IF found on EXYNOS4412/EXYNOS5250
8 and future SoCs from Samsung
92. Add ADC driver under iio/adc framework
103. Also adds the Documentation for device tree bindings
11
12Required properties:
13- compatible: Must be "samsung,exynos-adc-v1"
14 for exynos4412/5250 controllers.
15 Must be "samsung,exynos-adc-v2" for
16 future controllers.
17- reg: Contains ADC register address range (base address and
18 length) and the address of the phy enable register.
19- interrupts: Contains the interrupt information for the timer. The
20 format is being dependent on which interrupt controller
21 the Samsung device uses.
22- #io-channel-cells = <1>; As ADC has multiple outputs
23
24Note: child nodes can be added for auto probing from device tree.
25
26Example: adding device info in dtsi file
27
28adc: adc@12D10000 {
29 compatible = "samsung,exynos-adc-v1";
30 reg = <0x12D10000 0x100>, <0x10040718 0x4>;
31 interrupts = <0 106 0>;
32 #io-channel-cells = <1>;
33 io-channel-ranges;
34};
35
36
37Example: Adding child nodes in dts file
38
39adc@12D10000 {
40
41 /* NTC thermistor is a hwmon device */
42 ncp15wb473@0 {
43 compatible = "ntc,ncp15wb473";
44 pullup-uV = <1800000>;
45 pullup-ohm = <47000>;
46 pulldown-ohm = <0>;
47 io-channels = <&adc 4>;
48 };
49};
50
51Note: Does not apply to ADC driver under arch/arm/plat-samsung/
52Note: The child node can be added under the adc node or seperately.
diff --git a/Documentation/devicetree/bindings/iio/iio-bindings.txt b/Documentation/devicetree/bindings/iio/iio-bindings.txt
new file mode 100644
index 000000000000..0b447d9ad196
--- /dev/null
+++ b/Documentation/devicetree/bindings/iio/iio-bindings.txt
@@ -0,0 +1,97 @@
1This binding is derived from clock bindings, and based on suggestions
2from Lars-Peter Clausen [1].
3
4Sources of IIO channels can be represented by any node in the device
5tree. Those nodes are designated as IIO providers. IIO consumer
6nodes use a phandle and IIO specifier pair to connect IIO provider
7outputs to IIO inputs. Similar to the gpio specifiers, an IIO
8specifier is an array of one or more cells identifying the IIO
9output on a device. The length of an IIO specifier is defined by the
10value of a #io-channel-cells property in the IIO provider node.
11
12[1] http://marc.info/?l=linux-iio&m=135902119507483&w=2
13
14==IIO providers==
15
16Required properties:
17#io-channel-cells: Number of cells in an IIO specifier; Typically 0 for nodes
18 with a single IIO output and 1 for nodes with multiple
19 IIO outputs.
20
21Example for a simple configuration with no trigger:
22
23 adc: voltage-sensor@35 {
24 compatible = "maxim,max1139";
25 reg = <0x35>;
26 #io-channel-cells = <1>;
27 };
28
29Example for a configuration with trigger:
30
31 adc@35 {
32 compatible = "some-vendor,some-adc";
33 reg = <0x35>;
34
35 adc1: iio-device@0 {
36 #io-channel-cells = <1>;
37 /* other properties */
38 };
39 adc2: iio-device@1 {
40 #io-channel-cells = <1>;
41 /* other properties */
42 };
43 };
44
45==IIO consumers==
46
47Required properties:
48io-channels: List of phandle and IIO specifier pairs, one pair
49 for each IIO input to the device. Note: if the
50 IIO provider specifies '0' for #io-channel-cells,
51 then only the phandle portion of the pair will appear.
52
53Optional properties:
54io-channel-names:
55 List of IIO input name strings sorted in the same
56 order as the io-channels property. Consumers drivers
57 will use io-channel-names to match IIO input names
58 with IIO specifiers.
59io-channel-ranges:
60 Empty property indicating that child nodes can inherit named
61 IIO channels from this node. Useful for bus nodes to provide
62 and IIO channel to their children.
63
64For example:
65
66 device {
67 io-channels = <&adc 1>, <&ref 0>;
68 io-channel-names = "vcc", "vdd";
69 };
70
71This represents a device with two IIO inputs, named "vcc" and "vdd".
72The vcc channel is connected to output 1 of the &adc device, and the
73vdd channel is connected to output 0 of the &ref device.
74
75==Example==
76
77 adc: max1139@35 {
78 compatible = "maxim,max1139";
79 reg = <0x35>;
80 #io-channel-cells = <1>;
81 };
82
83 ...
84
85 iio_hwmon {
86 compatible = "iio-hwmon";
87 io-channels = <&adc 0>, <&adc 1>, <&adc 2>,
88 <&adc 3>, <&adc 4>, <&adc 5>,
89 <&adc 6>, <&adc 7>, <&adc 8>,
90 <&adc 9>;
91 };
92
93 some_consumer {
94 compatible = "some-consumer";
95 io-channels = <&adc 10>, <&adc 11>;
96 io-channel-names = "adc1", "adc2";
97 };
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 89ac1cb26f24..effbd11ff5ec 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -499,6 +499,15 @@ config SENSORS_IBMPEX
499 This driver can also be built as a module. If so, the module 499 This driver can also be built as a module. If so, the module
500 will be called ibmpex. 500 will be called ibmpex.
501 501
502config SENSORS_IIO_HWMON
503 tristate "Hwmon driver that uses channels specified via iio maps"
504 depends on IIO
505 help
506 This is a platform driver that in combination with a suitable
507 map allows IIO devices to provide basic hwmon functionality
508 for those channels specified in the map. This map can be provided
509 either via platform data or the device tree bindings.
510
502config SENSORS_IT87 511config SENSORS_IT87
503 tristate "ITE IT87xx and compatibles" 512 tristate "ITE IT87xx and compatibles"
504 depends on !PPC 513 depends on !PPC
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
index 8d6d97ea7c1e..a87fdabddfff 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
@@ -65,6 +65,7 @@ obj-$(CONFIG_SENSORS_ULTRA45) += ultra45_env.o
65obj-$(CONFIG_SENSORS_I5K_AMB) += i5k_amb.o 65obj-$(CONFIG_SENSORS_I5K_AMB) += i5k_amb.o
66obj-$(CONFIG_SENSORS_IBMAEM) += ibmaem.o 66obj-$(CONFIG_SENSORS_IBMAEM) += ibmaem.o
67obj-$(CONFIG_SENSORS_IBMPEX) += ibmpex.o 67obj-$(CONFIG_SENSORS_IBMPEX) += ibmpex.o
68obj-$(CONFIG_SENSORS_IIO_HWMON) += iio_hwmon.o
68obj-$(CONFIG_SENSORS_INA209) += ina209.o 69obj-$(CONFIG_SENSORS_INA209) += ina209.o
69obj-$(CONFIG_SENSORS_INA2XX) += ina2xx.o 70obj-$(CONFIG_SENSORS_INA2XX) += ina2xx.o
70obj-$(CONFIG_SENSORS_IT87) += it87.o 71obj-$(CONFIG_SENSORS_IT87) += it87.o
diff --git a/drivers/staging/iio/iio_hwmon.c b/drivers/hwmon/iio_hwmon.c
index 93af756ba48c..aafa4531b961 100644
--- a/drivers/staging/iio/iio_hwmon.c
+++ b/drivers/hwmon/iio_hwmon.c
@@ -13,6 +13,7 @@
13#include <linux/err.h> 13#include <linux/err.h>
14#include <linux/platform_device.h> 14#include <linux/platform_device.h>
15#include <linux/hwmon.h> 15#include <linux/hwmon.h>
16#include <linux/of.h>
16#include <linux/hwmon-sysfs.h> 17#include <linux/hwmon-sysfs.h>
17#include <linux/iio/consumer.h> 18#include <linux/iio/consumer.h>
18#include <linux/iio/types.h> 19#include <linux/iio/types.h>
@@ -58,7 +59,12 @@ static ssize_t iio_hwmon_read_val(struct device *dev,
58static ssize_t show_name(struct device *dev, struct device_attribute *attr, 59static ssize_t show_name(struct device *dev, struct device_attribute *attr,
59 char *buf) 60 char *buf)
60{ 61{
61 return sprintf(buf, "iio_hwmon\n"); 62 const char *name = "iio_hwmon";
63
64 if (dev->of_node && dev->of_node->name)
65 name = dev->of_node->name;
66
67 return sprintf(buf, "%s\n", name);
62} 68}
63 69
64static DEVICE_ATTR(name, S_IRUGO, show_name, NULL); 70static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
diff --git a/drivers/iio/accel/hid-sensor-accel-3d.c b/drivers/iio/accel/hid-sensor-accel-3d.c
index dd8ea4284934..bbcbd7101f33 100644
--- a/drivers/iio/accel/hid-sensor-accel-3d.c
+++ b/drivers/iio/accel/hid-sensor-accel-3d.c
@@ -60,28 +60,28 @@ static const struct iio_chan_spec accel_3d_channels[] = {
60 .type = IIO_ACCEL, 60 .type = IIO_ACCEL,
61 .modified = 1, 61 .modified = 1,
62 .channel2 = IIO_MOD_X, 62 .channel2 = IIO_MOD_X,
63 .info_mask = IIO_CHAN_INFO_OFFSET_SHARED_BIT | 63 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
64 IIO_CHAN_INFO_SCALE_SHARED_BIT | 64 BIT(IIO_CHAN_INFO_SCALE) |
65 IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT | 65 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
66 IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT, 66 BIT(IIO_CHAN_INFO_HYSTERESIS),
67 .scan_index = CHANNEL_SCAN_INDEX_X, 67 .scan_index = CHANNEL_SCAN_INDEX_X,
68 }, { 68 }, {
69 .type = IIO_ACCEL, 69 .type = IIO_ACCEL,
70 .modified = 1, 70 .modified = 1,
71 .channel2 = IIO_MOD_Y, 71 .channel2 = IIO_MOD_Y,
72 .info_mask = IIO_CHAN_INFO_OFFSET_SHARED_BIT | 72 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
73 IIO_CHAN_INFO_SCALE_SHARED_BIT | 73 BIT(IIO_CHAN_INFO_SCALE) |
74 IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT | 74 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
75 IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT, 75 BIT(IIO_CHAN_INFO_HYSTERESIS),
76 .scan_index = CHANNEL_SCAN_INDEX_Y, 76 .scan_index = CHANNEL_SCAN_INDEX_Y,
77 }, { 77 }, {
78 .type = IIO_ACCEL, 78 .type = IIO_ACCEL,
79 .modified = 1, 79 .modified = 1,
80 .channel2 = IIO_MOD_Z, 80 .channel2 = IIO_MOD_Z,
81 .info_mask = IIO_CHAN_INFO_OFFSET_SHARED_BIT | 81 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
82 IIO_CHAN_INFO_SCALE_SHARED_BIT | 82 BIT(IIO_CHAN_INFO_SCALE) |
83 IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT | 83 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
84 IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT, 84 BIT(IIO_CHAN_INFO_HYSTERESIS),
85 .scan_index = CHANNEL_SCAN_INDEX_Z, 85 .scan_index = CHANNEL_SCAN_INDEX_Z,
86 } 86 }
87}; 87};
diff --git a/drivers/iio/accel/kxsd9.c b/drivers/iio/accel/kxsd9.c
index c2229a521ab9..7229645bf1d7 100644
--- a/drivers/iio/accel/kxsd9.c
+++ b/drivers/iio/accel/kxsd9.c
@@ -177,8 +177,8 @@ error_ret:
177 .type = IIO_ACCEL, \ 177 .type = IIO_ACCEL, \
178 .modified = 1, \ 178 .modified = 1, \
179 .channel2 = IIO_MOD_##axis, \ 179 .channel2 = IIO_MOD_##axis, \
180 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 180 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
181 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 181 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
182 .address = KXSD9_REG_##axis, \ 182 .address = KXSD9_REG_##axis, \
183 } 183 }
184 184
@@ -186,7 +186,7 @@ static const struct iio_chan_spec kxsd9_channels[] = {
186 KXSD9_ACCEL_CHAN(X), KXSD9_ACCEL_CHAN(Y), KXSD9_ACCEL_CHAN(Z), 186 KXSD9_ACCEL_CHAN(X), KXSD9_ACCEL_CHAN(Y), KXSD9_ACCEL_CHAN(Z),
187 { 187 {
188 .type = IIO_VOLTAGE, 188 .type = IIO_VOLTAGE,
189 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 189 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
190 .indexed = 1, 190 .indexed = 1,
191 .address = KXSD9_REG_AUX, 191 .address = KXSD9_REG_AUX,
192 } 192 }
diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig
index e372257a8494..ab0767e6727e 100644
--- a/drivers/iio/adc/Kconfig
+++ b/drivers/iio/adc/Kconfig
@@ -30,6 +30,18 @@ config AD7298
30 To compile this driver as a module, choose M here: the 30 To compile this driver as a module, choose M here: the
31 module will be called ad7298. 31 module will be called ad7298.
32 32
33config AD7923
34 tristate "Analog Devices AD7923 and similar ADCs driver"
35 depends on SPI
36 select IIO_BUFFER
37 select IIO_TRIGGERED_BUFFER
38 help
39 Say yes here to build support for Analog Devices
40 AD7904, AD7914, AD7923, AD7924 4 Channel ADCs.
41
42 To compile this driver as a module, choose M here: the
43 module will be called ad7923.
44
33config AD7791 45config AD7791
34 tristate "Analog Devices AD7791 ADC driver" 46 tristate "Analog Devices AD7791 ADC driver"
35 depends on SPI 47 depends on SPI
@@ -91,6 +103,14 @@ config AT91_ADC
91 help 103 help
92 Say yes here to build support for Atmel AT91 ADC. 104 Say yes here to build support for Atmel AT91 ADC.
93 105
106config EXYNOS_ADC
107 bool "Exynos ADC driver support"
108 depends on OF
109 help
110 Core support for the ADC block found in the Samsung EXYNOS series
111 of SoCs for drivers such as the touchscreen and hwmon to use to share
112 this resource.
113
94config LP8788_ADC 114config LP8788_ADC
95 bool "LP8788 ADC driver" 115 bool "LP8788 ADC driver"
96 depends on MFD_LP8788 116 depends on MFD_LP8788
diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile
index 2d5f10080d8d..0a825bed43f6 100644
--- a/drivers/iio/adc/Makefile
+++ b/drivers/iio/adc/Makefile
@@ -5,11 +5,13 @@
5obj-$(CONFIG_AD_SIGMA_DELTA) += ad_sigma_delta.o 5obj-$(CONFIG_AD_SIGMA_DELTA) += ad_sigma_delta.o
6obj-$(CONFIG_AD7266) += ad7266.o 6obj-$(CONFIG_AD7266) += ad7266.o
7obj-$(CONFIG_AD7298) += ad7298.o 7obj-$(CONFIG_AD7298) += ad7298.o
8obj-$(CONFIG_AD7923) += ad7923.o
8obj-$(CONFIG_AD7476) += ad7476.o 9obj-$(CONFIG_AD7476) += ad7476.o
9obj-$(CONFIG_AD7791) += ad7791.o 10obj-$(CONFIG_AD7791) += ad7791.o
10obj-$(CONFIG_AD7793) += ad7793.o 11obj-$(CONFIG_AD7793) += ad7793.o
11obj-$(CONFIG_AD7887) += ad7887.o 12obj-$(CONFIG_AD7887) += ad7887.o
12obj-$(CONFIG_AT91_ADC) += at91_adc.o 13obj-$(CONFIG_AT91_ADC) += at91_adc.o
14obj-$(CONFIG_EXYNOS_ADC) += exynos_adc.o
13obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o 15obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o
14obj-$(CONFIG_MAX1363) += max1363.o 16obj-$(CONFIG_MAX1363) += max1363.o
15obj-$(CONFIG_TI_ADC081C) += ti-adc081c.o 17obj-$(CONFIG_TI_ADC081C) += ti-adc081c.o
diff --git a/drivers/iio/adc/ad7266.c b/drivers/iio/adc/ad7266.c
index bbad9b94cd75..c2744a75c3b0 100644
--- a/drivers/iio/adc/ad7266.c
+++ b/drivers/iio/adc/ad7266.c
@@ -201,9 +201,9 @@ static int ad7266_read_raw(struct iio_dev *indio_dev,
201 .indexed = 1, \ 201 .indexed = 1, \
202 .channel = (_chan), \ 202 .channel = (_chan), \
203 .address = (_chan), \ 203 .address = (_chan), \
204 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT \ 204 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
205 | IIO_CHAN_INFO_SCALE_SHARED_BIT \ 205 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) \
206 | IIO_CHAN_INFO_OFFSET_SHARED_BIT, \ 206 | BIT(IIO_CHAN_INFO_OFFSET), \
207 .scan_index = (_chan), \ 207 .scan_index = (_chan), \
208 .scan_type = { \ 208 .scan_type = { \
209 .sign = (_sign), \ 209 .sign = (_sign), \
@@ -249,9 +249,9 @@ static AD7266_DECLARE_SINGLE_ENDED_CHANNELS_FIXED(s, 's');
249 .channel = (_chan) * 2, \ 249 .channel = (_chan) * 2, \
250 .channel2 = (_chan) * 2 + 1, \ 250 .channel2 = (_chan) * 2 + 1, \
251 .address = (_chan), \ 251 .address = (_chan), \
252 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT \ 252 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
253 | IIO_CHAN_INFO_SCALE_SHARED_BIT \ 253 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) \
254 | IIO_CHAN_INFO_OFFSET_SHARED_BIT, \ 254 | BIT(IIO_CHAN_INFO_OFFSET), \
255 .scan_index = (_chan), \ 255 .scan_index = (_chan), \
256 .scan_type = { \ 256 .scan_type = { \
257 .sign = _sign, \ 257 .sign = _sign, \
diff --git a/drivers/iio/adc/ad7298.c b/drivers/iio/adc/ad7298.c
index b34d754994d5..03b77189dbfe 100644
--- a/drivers/iio/adc/ad7298.c
+++ b/drivers/iio/adc/ad7298.c
@@ -63,8 +63,8 @@ struct ad7298_state {
63 .type = IIO_VOLTAGE, \ 63 .type = IIO_VOLTAGE, \
64 .indexed = 1, \ 64 .indexed = 1, \
65 .channel = index, \ 65 .channel = index, \
66 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 66 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
67 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 67 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
68 .address = index, \ 68 .address = index, \
69 .scan_index = index, \ 69 .scan_index = index, \
70 .scan_type = { \ 70 .scan_type = { \
@@ -80,9 +80,9 @@ static const struct iio_chan_spec ad7298_channels[] = {
80 .type = IIO_TEMP, 80 .type = IIO_TEMP,
81 .indexed = 1, 81 .indexed = 1,
82 .channel = 0, 82 .channel = 0,
83 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 83 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
84 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | 84 BIT(IIO_CHAN_INFO_SCALE) |
85 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT, 85 BIT(IIO_CHAN_INFO_OFFSET),
86 .address = AD7298_CH_TEMP, 86 .address = AD7298_CH_TEMP,
87 .scan_index = -1, 87 .scan_index = -1,
88 .scan_type = { 88 .scan_type = {
diff --git a/drivers/iio/adc/ad7476.c b/drivers/iio/adc/ad7476.c
index 1491fa6debb2..2e98bef4af67 100644
--- a/drivers/iio/adc/ad7476.c
+++ b/drivers/iio/adc/ad7476.c
@@ -140,12 +140,12 @@ static int ad7476_read_raw(struct iio_dev *indio_dev,
140 return -EINVAL; 140 return -EINVAL;
141} 141}
142 142
143#define _AD7476_CHAN(bits, _shift, _info_mask) \ 143#define _AD7476_CHAN(bits, _shift, _info_mask_sep) \
144 { \ 144 { \
145 .type = IIO_VOLTAGE, \ 145 .type = IIO_VOLTAGE, \
146 .indexed = 1, \ 146 .indexed = 1, \
147 .info_mask = _info_mask | \ 147 .info_mask_separate = _info_mask_sep, \
148 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 148 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
149 .scan_type = { \ 149 .scan_type = { \
150 .sign = 'u', \ 150 .sign = 'u', \
151 .realbits = (bits), \ 151 .realbits = (bits), \
@@ -156,9 +156,9 @@ static int ad7476_read_raw(struct iio_dev *indio_dev,
156} 156}
157 157
158#define AD7476_CHAN(bits) _AD7476_CHAN((bits), 13 - (bits), \ 158#define AD7476_CHAN(bits) _AD7476_CHAN((bits), 13 - (bits), \
159 IIO_CHAN_INFO_RAW_SEPARATE_BIT) 159 BIT(IIO_CHAN_INFO_RAW))
160#define AD7940_CHAN(bits) _AD7476_CHAN((bits), 15 - (bits), \ 160#define AD7940_CHAN(bits) _AD7476_CHAN((bits), 15 - (bits), \
161 IIO_CHAN_INFO_RAW_SEPARATE_BIT) 161 BIT(IIO_CHAN_INFO_RAW))
162#define AD7091R_CHAN(bits) _AD7476_CHAN((bits), 16 - (bits), 0) 162#define AD7091R_CHAN(bits) _AD7476_CHAN((bits), 16 - (bits), 0)
163 163
164static const struct ad7476_chip_info ad7476_chip_info_tbl[] = { 164static const struct ad7476_chip_info ad7476_chip_info_tbl[] = {
diff --git a/drivers/iio/adc/ad7887.c b/drivers/iio/adc/ad7887.c
index a33d5cd1a536..dd15a5b0f701 100644
--- a/drivers/iio/adc/ad7887.c
+++ b/drivers/iio/adc/ad7887.c
@@ -207,8 +207,8 @@ static const struct ad7887_chip_info ad7887_chip_info_tbl[] = {
207 .type = IIO_VOLTAGE, 207 .type = IIO_VOLTAGE,
208 .indexed = 1, 208 .indexed = 1,
209 .channel = 1, 209 .channel = 1,
210 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 210 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
211 IIO_CHAN_INFO_SCALE_SHARED_BIT, 211 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
212 .address = 1, 212 .address = 1,
213 .scan_index = 1, 213 .scan_index = 1,
214 .scan_type = IIO_ST('u', 12, 16, 0), 214 .scan_type = IIO_ST('u', 12, 16, 0),
@@ -217,8 +217,8 @@ static const struct ad7887_chip_info ad7887_chip_info_tbl[] = {
217 .type = IIO_VOLTAGE, 217 .type = IIO_VOLTAGE,
218 .indexed = 1, 218 .indexed = 1,
219 .channel = 0, 219 .channel = 0,
220 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 220 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
221 IIO_CHAN_INFO_SCALE_SHARED_BIT, 221 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
222 .address = 0, 222 .address = 0,
223 .scan_index = 0, 223 .scan_index = 0,
224 .scan_type = IIO_ST('u', 12, 16, 0), 224 .scan_type = IIO_ST('u', 12, 16, 0),
diff --git a/drivers/iio/adc/ad7923.c b/drivers/iio/adc/ad7923.c
new file mode 100644
index 000000000000..97fa0d3dc4aa
--- /dev/null
+++ b/drivers/iio/adc/ad7923.c
@@ -0,0 +1,383 @@
1/*
2 * AD7904/AD7914/AD7923/AD7924 SPI ADC driver
3 *
4 * Copyright 2011 Analog Devices Inc (from AD7923 Driver)
5 * Copyright 2012 CS Systemes d'Information
6 *
7 * Licensed under the GPL-2.
8 */
9
10#include <linux/device.h>
11#include <linux/kernel.h>
12#include <linux/slab.h>
13#include <linux/sysfs.h>
14#include <linux/spi/spi.h>
15#include <linux/regulator/consumer.h>
16#include <linux/err.h>
17#include <linux/delay.h>
18#include <linux/module.h>
19#include <linux/interrupt.h>
20
21#include <linux/iio/iio.h>
22#include <linux/iio/sysfs.h>
23#include <linux/iio/buffer.h>
24#include <linux/iio/trigger_consumer.h>
25#include <linux/iio/triggered_buffer.h>
26
27#define AD7923_WRITE_CR (1 << 11) /* write control register */
28#define AD7923_RANGE (1 << 1) /* range to REFin */
29#define AD7923_CODING (1 << 0) /* coding is straight binary */
30#define AD7923_PM_MODE_AS (1) /* auto shutdown */
31#define AD7923_PM_MODE_FS (2) /* full shutdown */
32#define AD7923_PM_MODE_OPS (3) /* normal operation */
33#define AD7923_CHANNEL_0 (0) /* analog input 0 */
34#define AD7923_CHANNEL_1 (1) /* analog input 1 */
35#define AD7923_CHANNEL_2 (2) /* analog input 2 */
36#define AD7923_CHANNEL_3 (3) /* analog input 3 */
37#define AD7923_SEQUENCE_OFF (0) /* no sequence fonction */
38#define AD7923_SEQUENCE_PROTECT (2) /* no interrupt write cycle */
39#define AD7923_SEQUENCE_ON (3) /* continuous sequence */
40
41#define AD7923_MAX_CHAN 4
42
43#define AD7923_PM_MODE_WRITE(mode) (mode << 4) /* write mode */
44#define AD7923_CHANNEL_WRITE(channel) (channel << 6) /* write channel */
45#define AD7923_SEQUENCE_WRITE(sequence) (((sequence & 1) << 3) \
46 + ((sequence & 2) << 9))
47 /* write sequence fonction */
48/* left shift for CR : bit 11 transmit in first */
49#define AD7923_SHIFT_REGISTER 4
50
51/* val = value, dec = left shift, bits = number of bits of the mask */
52#define EXTRACT(val, dec, bits) ((val >> dec) & ((1 << bits) - 1))
53
54struct ad7923_state {
55 struct spi_device *spi;
56 struct spi_transfer ring_xfer[5];
57 struct spi_transfer scan_single_xfer[2];
58 struct spi_message ring_msg;
59 struct spi_message scan_single_msg;
60
61 struct regulator *reg;
62
63 unsigned int settings;
64
65 /*
66 * DMA (thus cache coherency maintenance) requires the
67 * transfer buffers to live in their own cache lines.
68 */
69 __be16 rx_buf[4] ____cacheline_aligned;
70 __be16 tx_buf[4];
71};
72
73struct ad7923_chip_info {
74 const struct iio_chan_spec *channels;
75 unsigned int num_channels;
76};
77
78enum ad7923_id {
79 AD7904,
80 AD7914,
81 AD7924,
82};
83
84#define AD7923_V_CHAN(index, bits) \
85 { \
86 .type = IIO_VOLTAGE, \
87 .indexed = 1, \
88 .channel = index, \
89 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
90 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
91 .address = index, \
92 .scan_index = index, \
93 .scan_type = { \
94 .sign = 'u', \
95 .realbits = (bits), \
96 .storagebits = 16, \
97 .endianness = IIO_BE, \
98 }, \
99 }
100
101#define DECLARE_AD7923_CHANNELS(name, bits) \
102const struct iio_chan_spec name ## _channels[] = { \
103 AD7923_V_CHAN(0, bits), \
104 AD7923_V_CHAN(1, bits), \
105 AD7923_V_CHAN(2, bits), \
106 AD7923_V_CHAN(3, bits), \
107 IIO_CHAN_SOFT_TIMESTAMP(4), \
108}
109
110static DECLARE_AD7923_CHANNELS(ad7904, 8);
111static DECLARE_AD7923_CHANNELS(ad7914, 10);
112static DECLARE_AD7923_CHANNELS(ad7924, 12);
113
114static const struct ad7923_chip_info ad7923_chip_info[] = {
115 [AD7904] = {
116 .channels = ad7904_channels,
117 .num_channels = ARRAY_SIZE(ad7904_channels),
118 },
119 [AD7914] = {
120 .channels = ad7914_channels,
121 .num_channels = ARRAY_SIZE(ad7914_channels),
122 },
123 [AD7924] = {
124 .channels = ad7924_channels,
125 .num_channels = ARRAY_SIZE(ad7924_channels),
126 },
127};
128
129/**
130 * ad7923_update_scan_mode() setup the spi transfer buffer for the new scan mask
131 **/
132static int ad7923_update_scan_mode(struct iio_dev *indio_dev,
133 const unsigned long *active_scan_mask)
134{
135 struct ad7923_state *st = iio_priv(indio_dev);
136 int i, cmd, len;
137
138 len = 0;
139 for_each_set_bit(i, active_scan_mask, AD7923_MAX_CHAN) {
140 cmd = AD7923_WRITE_CR | AD7923_CHANNEL_WRITE(i) |
141 AD7923_SEQUENCE_WRITE(AD7923_SEQUENCE_OFF) |
142 st->settings;
143 cmd <<= AD7923_SHIFT_REGISTER;
144 st->tx_buf[len++] = cpu_to_be16(cmd);
145 }
146 /* build spi ring message */
147 st->ring_xfer[0].tx_buf = &st->tx_buf[0];
148 st->ring_xfer[0].len = len;
149 st->ring_xfer[0].cs_change = 1;
150
151 spi_message_init(&st->ring_msg);
152 spi_message_add_tail(&st->ring_xfer[0], &st->ring_msg);
153
154 for (i = 0; i < len; i++) {
155 st->ring_xfer[i + 1].rx_buf = &st->rx_buf[i];
156 st->ring_xfer[i + 1].len = 2;
157 st->ring_xfer[i + 1].cs_change = 1;
158 spi_message_add_tail(&st->ring_xfer[i + 1], &st->ring_msg);
159 }
160 /* make sure last transfer cs_change is not set */
161 st->ring_xfer[i + 1].cs_change = 0;
162
163 return 0;
164}
165
166/**
167 * ad7923_trigger_handler() bh of trigger launched polling to ring buffer
168 *
169 * Currently there is no option in this driver to disable the saving of
170 * timestamps within the ring.
171 **/
172static irqreturn_t ad7923_trigger_handler(int irq, void *p)
173{
174 struct iio_poll_func *pf = p;
175 struct iio_dev *indio_dev = pf->indio_dev;
176 struct ad7923_state *st = iio_priv(indio_dev);
177 s64 time_ns = 0;
178 int b_sent;
179
180 b_sent = spi_sync(st->spi, &st->ring_msg);
181 if (b_sent)
182 goto done;
183
184 if (indio_dev->scan_timestamp) {
185 time_ns = iio_get_time_ns();
186 memcpy((u8 *)st->rx_buf + indio_dev->scan_bytes - sizeof(s64),
187 &time_ns, sizeof(time_ns));
188 }
189
190 iio_push_to_buffers(indio_dev, (u8 *)st->rx_buf);
191
192done:
193 iio_trigger_notify_done(indio_dev->trig);
194
195 return IRQ_HANDLED;
196}
197
198static int ad7923_scan_direct(struct ad7923_state *st, unsigned ch)
199{
200 int ret, cmd;
201
202 cmd = AD7923_WRITE_CR | AD7923_CHANNEL_WRITE(ch) |
203 AD7923_SEQUENCE_WRITE(AD7923_SEQUENCE_OFF) |
204 st->settings;
205 cmd <<= AD7923_SHIFT_REGISTER;
206 st->tx_buf[0] = cpu_to_be16(cmd);
207
208 ret = spi_sync(st->spi, &st->scan_single_msg);
209 if (ret)
210 return ret;
211
212 return be16_to_cpu(st->rx_buf[0]);
213}
214
215static int ad7923_get_range(struct ad7923_state *st)
216{
217 int vref;
218
219 vref = regulator_get_voltage(st->reg);
220 if (vref < 0)
221 return vref;
222
223 vref /= 1000;
224
225 if (!(st->settings & AD7923_RANGE))
226 vref *= 2;
227
228 return vref;
229}
230
231static int ad7923_read_raw(struct iio_dev *indio_dev,
232 struct iio_chan_spec const *chan,
233 int *val,
234 int *val2,
235 long m)
236{
237 int ret;
238 struct ad7923_state *st = iio_priv(indio_dev);
239
240 switch (m) {
241 case IIO_CHAN_INFO_RAW:
242 mutex_lock(&indio_dev->mlock);
243 if (iio_buffer_enabled(indio_dev))
244 ret = -EBUSY;
245 else
246 ret = ad7923_scan_direct(st, chan->address);
247 mutex_unlock(&indio_dev->mlock);
248
249 if (ret < 0)
250 return ret;
251
252 if (chan->address == EXTRACT(ret, 12, 4))
253 *val = EXTRACT(ret, 0, 12);
254 else
255 return -EIO;
256
257 return IIO_VAL_INT;
258 case IIO_CHAN_INFO_SCALE:
259 ret = ad7923_get_range(st);
260 if (ret < 0)
261 return ret;
262 *val = ret;
263 *val2 = chan->scan_type.realbits;
264 return IIO_VAL_FRACTIONAL_LOG2;
265 }
266 return -EINVAL;
267}
268
269static const struct iio_info ad7923_info = {
270 .read_raw = &ad7923_read_raw,
271 .update_scan_mode = ad7923_update_scan_mode,
272 .driver_module = THIS_MODULE,
273};
274
275static int ad7923_probe(struct spi_device *spi)
276{
277 struct ad7923_state *st;
278 struct iio_dev *indio_dev = iio_device_alloc(sizeof(*st));
279 const struct ad7923_chip_info *info;
280 int ret;
281
282 if (indio_dev == NULL)
283 return -ENOMEM;
284
285 st = iio_priv(indio_dev);
286
287 spi_set_drvdata(spi, indio_dev);
288
289 st->spi = spi;
290 st->settings = AD7923_CODING | AD7923_RANGE |
291 AD7923_PM_MODE_WRITE(AD7923_PM_MODE_OPS);
292
293 info = &ad7923_chip_info[spi_get_device_id(spi)->driver_data];
294
295 indio_dev->name = spi_get_device_id(spi)->name;
296 indio_dev->dev.parent = &spi->dev;
297 indio_dev->modes = INDIO_DIRECT_MODE;
298 indio_dev->channels = info->channels;
299 indio_dev->num_channels = info->num_channels;
300 indio_dev->info = &ad7923_info;
301
302 /* Setup default message */
303
304 st->scan_single_xfer[0].tx_buf = &st->tx_buf[0];
305 st->scan_single_xfer[0].len = 2;
306 st->scan_single_xfer[0].cs_change = 1;
307 st->scan_single_xfer[1].rx_buf = &st->rx_buf[0];
308 st->scan_single_xfer[1].len = 2;
309
310 spi_message_init(&st->scan_single_msg);
311 spi_message_add_tail(&st->scan_single_xfer[0], &st->scan_single_msg);
312 spi_message_add_tail(&st->scan_single_xfer[1], &st->scan_single_msg);
313
314 st->reg = regulator_get(&spi->dev, "refin");
315 if (IS_ERR(st->reg)) {
316 ret = PTR_ERR(st->reg);
317 goto error_free;
318 }
319 ret = regulator_enable(st->reg);
320 if (ret)
321 goto error_put_reg;
322
323 ret = iio_triggered_buffer_setup(indio_dev, NULL,
324 &ad7923_trigger_handler, NULL);
325 if (ret)
326 goto error_disable_reg;
327
328 ret = iio_device_register(indio_dev);
329 if (ret)
330 goto error_cleanup_ring;
331
332 return 0;
333
334error_cleanup_ring:
335 iio_triggered_buffer_cleanup(indio_dev);
336error_disable_reg:
337 regulator_disable(st->reg);
338error_put_reg:
339 regulator_put(st->reg);
340error_free:
341 iio_device_free(indio_dev);
342
343 return ret;
344}
345
346static int ad7923_remove(struct spi_device *spi)
347{
348 struct iio_dev *indio_dev = spi_get_drvdata(spi);
349 struct ad7923_state *st = iio_priv(indio_dev);
350
351 iio_device_unregister(indio_dev);
352 iio_triggered_buffer_cleanup(indio_dev);
353 regulator_disable(st->reg);
354 regulator_put(st->reg);
355 iio_device_free(indio_dev);
356
357 return 0;
358}
359
360static const struct spi_device_id ad7923_id[] = {
361 {"ad7904", AD7904},
362 {"ad7914", AD7914},
363 {"ad7923", AD7924},
364 {"ad7924", AD7924},
365 {}
366};
367MODULE_DEVICE_TABLE(spi, ad7923_id);
368
369static struct spi_driver ad7923_driver = {
370 .driver = {
371 .name = "ad7923",
372 .owner = THIS_MODULE,
373 },
374 .probe = ad7923_probe,
375 .remove = ad7923_remove,
376 .id_table = ad7923_id,
377};
378module_spi_driver(ad7923_driver);
379
380MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
381MODULE_AUTHOR("Patrick Vasseur <patrick.vasseur@c-s.fr>");
382MODULE_DESCRIPTION("Analog Devices AD7904/AD7914/AD7923/AD7924 ADC");
383MODULE_LICENSE("GPL v2");
diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c
index 83c836ba600f..92eb6a5b9e72 100644
--- a/drivers/iio/adc/at91_adc.c
+++ b/drivers/iio/adc/at91_adc.c
@@ -140,8 +140,8 @@ static int at91_adc_channel_init(struct iio_dev *idev)
140 chan->scan_type.sign = 'u'; 140 chan->scan_type.sign = 'u';
141 chan->scan_type.realbits = 10; 141 chan->scan_type.realbits = 10;
142 chan->scan_type.storagebits = 16; 142 chan->scan_type.storagebits = 16;
143 chan->info_mask = IIO_CHAN_INFO_SCALE_SHARED_BIT | 143 chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE);
144 IIO_CHAN_INFO_RAW_SEPARATE_BIT; 144 chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
145 idx++; 145 idx++;
146 } 146 }
147 timestamp = chan_array + idx; 147 timestamp = chan_array + idx;
diff --git a/drivers/iio/adc/exynos_adc.c b/drivers/iio/adc/exynos_adc.c
new file mode 100644
index 000000000000..4a8a9a34228f
--- /dev/null
+++ b/drivers/iio/adc/exynos_adc.c
@@ -0,0 +1,452 @@
1/*
2 * exynos_adc.c - Support for ADC in EXYNOS SoCs
3 *
4 * 8 ~ 10 channel, 10/12-bit ADC
5 *
6 * Copyright (C) 2013 Naveen Krishna Chatradhi <ch.naveen@samsung.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23#include <linux/module.h>
24#include <linux/platform_device.h>
25#include <linux/interrupt.h>
26#include <linux/delay.h>
27#include <linux/kernel.h>
28#include <linux/slab.h>
29#include <linux/io.h>
30#include <linux/clk.h>
31#include <linux/completion.h>
32#include <linux/of.h>
33#include <linux/of_irq.h>
34#include <linux/regulator/consumer.h>
35#include <linux/of_platform.h>
36
37#include <linux/iio/iio.h>
38#include <linux/iio/machine.h>
39#include <linux/iio/driver.h>
40
41enum adc_version {
42 ADC_V1,
43 ADC_V2
44};
45
46/* EXYNOS4412/5250 ADC_V1 registers definitions */
47#define ADC_V1_CON(x) ((x) + 0x00)
48#define ADC_V1_DLY(x) ((x) + 0x08)
49#define ADC_V1_DATX(x) ((x) + 0x0C)
50#define ADC_V1_INTCLR(x) ((x) + 0x18)
51#define ADC_V1_MUX(x) ((x) + 0x1c)
52
53/* Future ADC_V2 registers definitions */
54#define ADC_V2_CON1(x) ((x) + 0x00)
55#define ADC_V2_CON2(x) ((x) + 0x04)
56#define ADC_V2_STAT(x) ((x) + 0x08)
57#define ADC_V2_INT_EN(x) ((x) + 0x10)
58#define ADC_V2_INT_ST(x) ((x) + 0x14)
59#define ADC_V2_VER(x) ((x) + 0x20)
60
61/* Bit definitions for ADC_V1 */
62#define ADC_V1_CON_RES (1u << 16)
63#define ADC_V1_CON_PRSCEN (1u << 14)
64#define ADC_V1_CON_PRSCLV(x) (((x) & 0xFF) << 6)
65#define ADC_V1_CON_STANDBY (1u << 2)
66
67/* Bit definitions for ADC_V2 */
68#define ADC_V2_CON1_SOFT_RESET (1u << 2)
69
70#define ADC_V2_CON2_OSEL (1u << 10)
71#define ADC_V2_CON2_ESEL (1u << 9)
72#define ADC_V2_CON2_HIGHF (1u << 8)
73#define ADC_V2_CON2_C_TIME(x) (((x) & 7) << 4)
74#define ADC_V2_CON2_ACH_SEL(x) (((x) & 0xF) << 0)
75#define ADC_V2_CON2_ACH_MASK 0xF
76
77#define MAX_ADC_V2_CHANNELS 10
78#define MAX_ADC_V1_CHANNELS 8
79
80/* Bit definitions common for ADC_V1 and ADC_V2 */
81#define ADC_CON_EN_START (1u << 0)
82#define ADC_DATX_MASK 0xFFF
83
84#define EXYNOS_ADC_TIMEOUT (msecs_to_jiffies(1000))
85
86struct exynos_adc {
87 void __iomem *regs;
88 void __iomem *enable_reg;
89 struct clk *clk;
90 unsigned int irq;
91 struct regulator *vdd;
92
93 struct completion completion;
94
95 u32 value;
96 unsigned int version;
97};
98
99static const struct of_device_id exynos_adc_match[] = {
100 { .compatible = "samsung,exynos-adc-v1", .data = (void *)ADC_V1 },
101 { .compatible = "samsung,exynos-adc-v2", .data = (void *)ADC_V2 },
102 {},
103};
104MODULE_DEVICE_TABLE(of, exynos_adc_match);
105
106static inline unsigned int exynos_adc_get_version(struct platform_device *pdev)
107{
108 const struct of_device_id *match;
109
110 match = of_match_node(exynos_adc_match, pdev->dev.of_node);
111 return (unsigned int)match->data;
112}
113
114static int exynos_read_raw(struct iio_dev *indio_dev,
115 struct iio_chan_spec const *chan,
116 int *val,
117 int *val2,
118 long mask)
119{
120 struct exynos_adc *info = iio_priv(indio_dev);
121 unsigned long timeout;
122 u32 con1, con2;
123
124 if (mask != IIO_CHAN_INFO_RAW)
125 return -EINVAL;
126
127 mutex_lock(&indio_dev->mlock);
128
129 /* Select the channel to be used and Trigger conversion */
130 if (info->version == ADC_V2) {
131 con2 = readl(ADC_V2_CON2(info->regs));
132 con2 &= ~ADC_V2_CON2_ACH_MASK;
133 con2 |= ADC_V2_CON2_ACH_SEL(chan->address);
134 writel(con2, ADC_V2_CON2(info->regs));
135
136 con1 = readl(ADC_V2_CON1(info->regs));
137 writel(con1 | ADC_CON_EN_START,
138 ADC_V2_CON1(info->regs));
139 } else {
140 writel(chan->address, ADC_V1_MUX(info->regs));
141
142 con1 = readl(ADC_V1_CON(info->regs));
143 writel(con1 | ADC_CON_EN_START,
144 ADC_V1_CON(info->regs));
145 }
146
147 timeout = wait_for_completion_interruptible_timeout
148 (&info->completion, EXYNOS_ADC_TIMEOUT);
149 *val = info->value;
150
151 mutex_unlock(&indio_dev->mlock);
152
153 if (timeout == 0)
154 return -ETIMEDOUT;
155
156 return IIO_VAL_INT;
157}
158
159static irqreturn_t exynos_adc_isr(int irq, void *dev_id)
160{
161 struct exynos_adc *info = (struct exynos_adc *)dev_id;
162
163 /* Read value */
164 info->value = readl(ADC_V1_DATX(info->regs)) &
165 ADC_DATX_MASK;
166 /* clear irq */
167 if (info->version == ADC_V2)
168 writel(1, ADC_V2_INT_ST(info->regs));
169 else
170 writel(1, ADC_V1_INTCLR(info->regs));
171
172 complete(&info->completion);
173
174 return IRQ_HANDLED;
175}
176
177static int exynos_adc_reg_access(struct iio_dev *indio_dev,
178 unsigned reg, unsigned writeval,
179 unsigned *readval)
180{
181 struct exynos_adc *info = iio_priv(indio_dev);
182
183 if (readval == NULL)
184 return -EINVAL;
185
186 *readval = readl(info->regs + reg);
187
188 return 0;
189}
190
191static const struct iio_info exynos_adc_iio_info = {
192 .read_raw = &exynos_read_raw,
193 .debugfs_reg_access = &exynos_adc_reg_access,
194 .driver_module = THIS_MODULE,
195};
196
197#define ADC_CHANNEL(_index, _id) { \
198 .type = IIO_VOLTAGE, \
199 .indexed = 1, \
200 .channel = _index, \
201 .address = _index, \
202 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
203 .datasheet_name = _id, \
204}
205
206static const struct iio_chan_spec exynos_adc_iio_channels[] = {
207 ADC_CHANNEL(0, "adc0"),
208 ADC_CHANNEL(1, "adc1"),
209 ADC_CHANNEL(2, "adc2"),
210 ADC_CHANNEL(3, "adc3"),
211 ADC_CHANNEL(4, "adc4"),
212 ADC_CHANNEL(5, "adc5"),
213 ADC_CHANNEL(6, "adc6"),
214 ADC_CHANNEL(7, "adc7"),
215 ADC_CHANNEL(8, "adc8"),
216 ADC_CHANNEL(9, "adc9"),
217};
218
219static int exynos_adc_remove_devices(struct device *dev, void *c)
220{
221 struct platform_device *pdev = to_platform_device(dev);
222
223 platform_device_unregister(pdev);
224
225 return 0;
226}
227
228static void exynos_adc_hw_init(struct exynos_adc *info)
229{
230 u32 con1, con2;
231
232 if (info->version == ADC_V2) {
233 con1 = ADC_V2_CON1_SOFT_RESET;
234 writel(con1, ADC_V2_CON1(info->regs));
235
236 con2 = ADC_V2_CON2_OSEL | ADC_V2_CON2_ESEL |
237 ADC_V2_CON2_HIGHF | ADC_V2_CON2_C_TIME(0);
238 writel(con2, ADC_V2_CON2(info->regs));
239
240 /* Enable interrupts */
241 writel(1, ADC_V2_INT_EN(info->regs));
242 } else {
243 /* set default prescaler values and Enable prescaler */
244 con1 = ADC_V1_CON_PRSCLV(49) | ADC_V1_CON_PRSCEN;
245
246 /* Enable 12-bit ADC resolution */
247 con1 |= ADC_V1_CON_RES;
248 writel(con1, ADC_V1_CON(info->regs));
249 }
250}
251
252static int exynos_adc_probe(struct platform_device *pdev)
253{
254 struct exynos_adc *info = NULL;
255 struct device_node *np = pdev->dev.of_node;
256 struct iio_dev *indio_dev = NULL;
257 struct resource *mem;
258 int ret = -ENODEV;
259 int irq;
260
261 if (!np)
262 return ret;
263
264 indio_dev = iio_device_alloc(sizeof(struct exynos_adc));
265 if (!indio_dev) {
266 dev_err(&pdev->dev, "failed allocating iio device\n");
267 return -ENOMEM;
268 }
269
270 info = iio_priv(indio_dev);
271
272 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
273 info->regs = devm_request_and_ioremap(&pdev->dev, mem);
274 if (!info->regs) {
275 ret = -ENOMEM;
276 goto err_iio;
277 }
278
279 mem = platform_get_resource(pdev, IORESOURCE_MEM, 1);
280 info->enable_reg = devm_request_and_ioremap(&pdev->dev, mem);
281 if (!info->enable_reg) {
282 ret = -ENOMEM;
283 goto err_iio;
284 }
285
286 irq = platform_get_irq(pdev, 0);
287 if (irq < 0) {
288 dev_err(&pdev->dev, "no irq resource?\n");
289 ret = irq;
290 goto err_iio;
291 }
292
293 info->irq = irq;
294
295 init_completion(&info->completion);
296
297 ret = request_irq(info->irq, exynos_adc_isr,
298 0, dev_name(&pdev->dev), info);
299 if (ret < 0) {
300 dev_err(&pdev->dev, "failed requesting irq, irq = %d\n",
301 info->irq);
302 goto err_iio;
303 }
304
305 writel(1, info->enable_reg);
306
307 info->clk = devm_clk_get(&pdev->dev, "adc");
308 if (IS_ERR(info->clk)) {
309 dev_err(&pdev->dev, "failed getting clock, err = %ld\n",
310 PTR_ERR(info->clk));
311 ret = PTR_ERR(info->clk);
312 goto err_irq;
313 }
314
315 info->vdd = devm_regulator_get(&pdev->dev, "vdd");
316 if (IS_ERR(info->vdd)) {
317 dev_err(&pdev->dev, "failed getting regulator, err = %ld\n",
318 PTR_ERR(info->vdd));
319 ret = PTR_ERR(info->vdd);
320 goto err_irq;
321 }
322
323 info->version = exynos_adc_get_version(pdev);
324
325 platform_set_drvdata(pdev, indio_dev);
326
327 indio_dev->name = dev_name(&pdev->dev);
328 indio_dev->dev.parent = &pdev->dev;
329 indio_dev->dev.of_node = pdev->dev.of_node;
330 indio_dev->info = &exynos_adc_iio_info;
331 indio_dev->modes = INDIO_DIRECT_MODE;
332 indio_dev->channels = exynos_adc_iio_channels;
333
334 if (info->version == ADC_V1)
335 indio_dev->num_channels = MAX_ADC_V1_CHANNELS;
336 else
337 indio_dev->num_channels = MAX_ADC_V2_CHANNELS;
338
339 ret = iio_device_register(indio_dev);
340 if (ret)
341 goto err_irq;
342
343 ret = regulator_enable(info->vdd);
344 if (ret)
345 goto err_iio_dev;
346
347 clk_prepare_enable(info->clk);
348
349 exynos_adc_hw_init(info);
350
351 ret = of_platform_populate(np, exynos_adc_match, NULL, &pdev->dev);
352 if (ret < 0) {
353 dev_err(&pdev->dev, "failed adding child nodes\n");
354 goto err_of_populate;
355 }
356
357 return 0;
358
359err_of_populate:
360 device_for_each_child(&pdev->dev, NULL,
361 exynos_adc_remove_devices);
362 regulator_disable(info->vdd);
363 clk_disable_unprepare(info->clk);
364err_iio_dev:
365 iio_device_unregister(indio_dev);
366err_irq:
367 free_irq(info->irq, info);
368err_iio:
369 iio_device_free(indio_dev);
370 return ret;
371}
372
373static int exynos_adc_remove(struct platform_device *pdev)
374{
375 struct iio_dev *indio_dev = platform_get_drvdata(pdev);
376 struct exynos_adc *info = iio_priv(indio_dev);
377
378 device_for_each_child(&pdev->dev, NULL,
379 exynos_adc_remove_devices);
380 regulator_disable(info->vdd);
381 clk_disable_unprepare(info->clk);
382 writel(0, info->enable_reg);
383 iio_device_unregister(indio_dev);
384 free_irq(info->irq, info);
385 iio_device_free(indio_dev);
386
387 return 0;
388}
389
390#ifdef CONFIG_PM_SLEEP
391static int exynos_adc_suspend(struct device *dev)
392{
393 struct platform_device *pdev = to_platform_device(dev);
394 struct exynos_adc *info = platform_get_drvdata(pdev);
395 u32 con;
396
397 if (info->version == ADC_V2) {
398 con = readl(ADC_V2_CON1(info->regs));
399 con &= ~ADC_CON_EN_START;
400 writel(con, ADC_V2_CON1(info->regs));
401 } else {
402 con = readl(ADC_V1_CON(info->regs));
403 con |= ADC_V1_CON_STANDBY;
404 writel(con, ADC_V1_CON(info->regs));
405 }
406
407 clk_disable_unprepare(info->clk);
408 writel(0, info->enable_reg);
409 regulator_disable(info->vdd);
410
411 return 0;
412}
413
414static int exynos_adc_resume(struct device *dev)
415{
416 struct platform_device *pdev = to_platform_device(dev);
417 struct exynos_adc *info = platform_get_drvdata(pdev);
418 int ret;
419
420 ret = regulator_enable(info->vdd);
421 if (ret)
422 return ret;
423
424 writel(1, info->enable_reg);
425 clk_prepare_enable(info->clk);
426
427 exynos_adc_hw_init(info);
428
429 return 0;
430}
431#endif
432
433static SIMPLE_DEV_PM_OPS(exynos_adc_pm_ops,
434 exynos_adc_suspend,
435 exynos_adc_resume);
436
437static struct platform_driver exynos_adc_driver = {
438 .probe = exynos_adc_probe,
439 .remove = exynos_adc_remove,
440 .driver = {
441 .name = "exynos-adc",
442 .owner = THIS_MODULE,
443 .of_match_table = of_match_ptr(exynos_adc_match),
444 .pm = &exynos_adc_pm_ops,
445 },
446};
447
448module_platform_driver(exynos_adc_driver);
449
450MODULE_AUTHOR("Naveen Krishna Chatradhi <ch.naveen@samsung.com>");
451MODULE_DESCRIPTION("Samsung EXYNOS5 ADC driver");
452MODULE_LICENSE("GPL v2");
diff --git a/drivers/iio/adc/lp8788_adc.c b/drivers/iio/adc/lp8788_adc.c
index 763f57565ee4..62bc39e9c94f 100644
--- a/drivers/iio/adc/lp8788_adc.c
+++ b/drivers/iio/adc/lp8788_adc.c
@@ -132,8 +132,8 @@ static const struct iio_info lp8788_adc_info = {
132 .type = _type, \ 132 .type = _type, \
133 .indexed = 1, \ 133 .indexed = 1, \
134 .channel = LPADC_##_id, \ 134 .channel = LPADC_##_id, \
135 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 135 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
136 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ 136 BIT(IIO_CHAN_INFO_SCALE), \
137 .datasheet_name = #_id, \ 137 .datasheet_name = #_id, \
138} 138}
139 139
diff --git a/drivers/iio/adc/max1363.c b/drivers/iio/adc/max1363.c
index 6c1cfb74bdfc..9e6da72ad823 100644
--- a/drivers/iio/adc/max1363.c
+++ b/drivers/iio/adc/max1363.c
@@ -427,15 +427,15 @@ static const enum max1363_modes max1363_mode_list[] = {
427#define MAX1363_EV_M \ 427#define MAX1363_EV_M \
428 (IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) \ 428 (IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) \
429 | IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING)) 429 | IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING))
430#define MAX1363_INFO_MASK (IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 430
431 IIO_CHAN_INFO_SCALE_SHARED_BIT)
432#define MAX1363_CHAN_U(num, addr, si, bits, evmask) \ 431#define MAX1363_CHAN_U(num, addr, si, bits, evmask) \
433 { \ 432 { \
434 .type = IIO_VOLTAGE, \ 433 .type = IIO_VOLTAGE, \
435 .indexed = 1, \ 434 .indexed = 1, \
436 .channel = num, \ 435 .channel = num, \
437 .address = addr, \ 436 .address = addr, \
438 .info_mask = MAX1363_INFO_MASK, \ 437 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
438 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
439 .datasheet_name = "AIN"#num, \ 439 .datasheet_name = "AIN"#num, \
440 .scan_type = { \ 440 .scan_type = { \
441 .sign = 'u', \ 441 .sign = 'u', \
@@ -456,7 +456,8 @@ static const enum max1363_modes max1363_mode_list[] = {
456 .channel = num, \ 456 .channel = num, \
457 .channel2 = num2, \ 457 .channel2 = num2, \
458 .address = addr, \ 458 .address = addr, \
459 .info_mask = MAX1363_INFO_MASK, \ 459 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
460 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
460 .datasheet_name = "AIN"#num"-AIN"#num2, \ 461 .datasheet_name = "AIN"#num"-AIN"#num2, \
461 .scan_type = { \ 462 .scan_type = { \
462 .sign = 's', \ 463 .sign = 's', \
diff --git a/drivers/iio/adc/ti-adc081c.c b/drivers/iio/adc/ti-adc081c.c
index f4a46dd8f43b..2826faae706c 100644
--- a/drivers/iio/adc/ti-adc081c.c
+++ b/drivers/iio/adc/ti-adc081c.c
@@ -55,8 +55,8 @@ static int adc081c_read_raw(struct iio_dev *iio,
55 55
56static const struct iio_chan_spec adc081c_channel = { 56static const struct iio_chan_spec adc081c_channel = {
57 .type = IIO_VOLTAGE, 57 .type = IIO_VOLTAGE,
58 .info_mask = IIO_CHAN_INFO_SCALE_SHARED_BIT | 58 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
59 IIO_CHAN_INFO_RAW_SEPARATE_BIT, 59 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
60}; 60};
61 61
62static const struct iio_info adc081c_info = { 62static const struct iio_info adc081c_info = {
diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index cd030e100c39..5f9a7e7d3135 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -89,7 +89,7 @@ static int tiadc_channel_init(struct iio_dev *indio_dev, int channels)
89 chan->type = IIO_VOLTAGE; 89 chan->type = IIO_VOLTAGE;
90 chan->indexed = 1; 90 chan->indexed = 1;
91 chan->channel = i; 91 chan->channel = i;
92 chan->info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT; 92 chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
93 } 93 }
94 94
95 indio_dev->channels = chan_array; 95 indio_dev->channels = chan_array;
diff --git a/drivers/iio/adc/viperboard_adc.c b/drivers/iio/adc/viperboard_adc.c
index ad0261533dee..56ac481c73c0 100644
--- a/drivers/iio/adc/viperboard_adc.c
+++ b/drivers/iio/adc/viperboard_adc.c
@@ -41,7 +41,7 @@ struct vprbrd_adc {
41 .type = IIO_VOLTAGE, \ 41 .type = IIO_VOLTAGE, \
42 .indexed = 1, \ 42 .indexed = 1, \
43 .channel = _index, \ 43 .channel = _index, \
44 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, \ 44 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
45 .scan_index = _index, \ 45 .scan_index = _index, \
46 .scan_type = { \ 46 .scan_type = { \
47 .sign = 'u', \ 47 .sign = 'u', \
diff --git a/drivers/iio/amplifiers/ad8366.c b/drivers/iio/amplifiers/ad8366.c
index d6c0af23a2a7..d354554b51b3 100644
--- a/drivers/iio/amplifiers/ad8366.c
+++ b/drivers/iio/amplifiers/ad8366.c
@@ -125,7 +125,7 @@ static const struct iio_info ad8366_info = {
125 .output = 1, \ 125 .output = 1, \
126 .indexed = 1, \ 126 .indexed = 1, \
127 .channel = _channel, \ 127 .channel = _channel, \
128 .info_mask = IIO_CHAN_INFO_HARDWAREGAIN_SEPARATE_BIT,\ 128 .info_mask_separate = BIT(IIO_CHAN_INFO_HARDWAREGAIN),\
129} 129}
130 130
131static const struct iio_chan_spec ad8366_channels[] = { 131static const struct iio_chan_spec ad8366_channels[] = {
diff --git a/drivers/iio/common/st_sensors/st_sensors_spi.c b/drivers/iio/common/st_sensors/st_sensors_spi.c
index f0aa2f105222..251baf6abc25 100644
--- a/drivers/iio/common/st_sensors/st_sensors_spi.c
+++ b/drivers/iio/common/st_sensors/st_sensors_spi.c
@@ -29,7 +29,6 @@ static unsigned int st_sensors_spi_get_irq(struct iio_dev *indio_dev)
29static int st_sensors_spi_read(struct st_sensor_transfer_buffer *tb, 29static int st_sensors_spi_read(struct st_sensor_transfer_buffer *tb,
30 struct device *dev, u8 reg_addr, int len, u8 *data, bool multiread_bit) 30 struct device *dev, u8 reg_addr, int len, u8 *data, bool multiread_bit)
31{ 31{
32 struct spi_message msg;
33 int err; 32 int err;
34 33
35 struct spi_transfer xfers[] = { 34 struct spi_transfer xfers[] = {
@@ -51,10 +50,7 @@ static int st_sensors_spi_read(struct st_sensor_transfer_buffer *tb,
51 else 50 else
52 tb->tx_buf[0] = reg_addr | ST_SENSORS_SPI_READ; 51 tb->tx_buf[0] = reg_addr | ST_SENSORS_SPI_READ;
53 52
54 spi_message_init(&msg); 53 err = spi_sync_transfer(to_spi_device(dev), xfers, ARRAY_SIZE(xfers));
55 spi_message_add_tail(&xfers[0], &msg);
56 spi_message_add_tail(&xfers[1], &msg);
57 err = spi_sync(to_spi_device(dev), &msg);
58 if (err) 54 if (err)
59 goto acc_spi_read_error; 55 goto acc_spi_read_error;
60 56
@@ -83,7 +79,6 @@ static int st_sensors_spi_read_multiple_byte(
83static int st_sensors_spi_write_byte(struct st_sensor_transfer_buffer *tb, 79static int st_sensors_spi_write_byte(struct st_sensor_transfer_buffer *tb,
84 struct device *dev, u8 reg_addr, u8 data) 80 struct device *dev, u8 reg_addr, u8 data)
85{ 81{
86 struct spi_message msg;
87 int err; 82 int err;
88 83
89 struct spi_transfer xfers = { 84 struct spi_transfer xfers = {
@@ -96,9 +91,7 @@ static int st_sensors_spi_write_byte(struct st_sensor_transfer_buffer *tb,
96 tb->tx_buf[0] = reg_addr; 91 tb->tx_buf[0] = reg_addr;
97 tb->tx_buf[1] = data; 92 tb->tx_buf[1] = data;
98 93
99 spi_message_init(&msg); 94 err = spi_sync_transfer(to_spi_device(dev), &xfers, 1);
100 spi_message_add_tail(&xfers, &msg);
101 err = spi_sync(to_spi_device(dev), &msg);
102 mutex_unlock(&tb->buf_lock); 95 mutex_unlock(&tb->buf_lock);
103 96
104 return err; 97 return err;
diff --git a/drivers/iio/dac/ad5064.c b/drivers/iio/dac/ad5064.c
index 74f2d52795f6..aa26d50ab638 100644
--- a/drivers/iio/dac/ad5064.c
+++ b/drivers/iio/dac/ad5064.c
@@ -296,8 +296,8 @@ static const struct iio_chan_spec_ext_info ad5064_ext_info[] = {
296 .indexed = 1, \ 296 .indexed = 1, \
297 .output = 1, \ 297 .output = 1, \
298 .channel = (chan), \ 298 .channel = (chan), \
299 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 299 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
300 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ 300 BIT(IIO_CHAN_INFO_SCALE), \
301 .address = addr, \ 301 .address = addr, \
302 .scan_type = IIO_ST('u', (bits), 16, 20 - (bits)), \ 302 .scan_type = IIO_ST('u', (bits), 16, 20 - (bits)), \
303 .ext_info = ad5064_ext_info, \ 303 .ext_info = ad5064_ext_info, \
diff --git a/drivers/iio/dac/ad5360.c b/drivers/iio/dac/ad5360.c
index 92771217f665..80923af424f2 100644
--- a/drivers/iio/dac/ad5360.c
+++ b/drivers/iio/dac/ad5360.c
@@ -102,11 +102,11 @@ enum ad5360_type {
102 .type = IIO_VOLTAGE, \ 102 .type = IIO_VOLTAGE, \
103 .indexed = 1, \ 103 .indexed = 1, \
104 .output = 1, \ 104 .output = 1, \
105 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 105 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
106 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | \ 106 BIT(IIO_CHAN_INFO_SCALE) | \
107 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | \ 107 BIT(IIO_CHAN_INFO_OFFSET) | \
108 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | \ 108 BIT(IIO_CHAN_INFO_CALIBSCALE) | \
109 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, \ 109 BIT(IIO_CHAN_INFO_CALIBBIAS), \
110 .scan_type = IIO_ST('u', (bits), 16, 16 - (bits)) \ 110 .scan_type = IIO_ST('u', (bits), 16, 16 - (bits)) \
111} 111}
112 112
diff --git a/drivers/iio/dac/ad5380.c b/drivers/iio/dac/ad5380.c
index 483fc379a2da..bf2db02215c2 100644
--- a/drivers/iio/dac/ad5380.c
+++ b/drivers/iio/dac/ad5380.c
@@ -257,10 +257,10 @@ static struct iio_chan_spec_ext_info ad5380_ext_info[] = {
257 .type = IIO_VOLTAGE, \ 257 .type = IIO_VOLTAGE, \
258 .indexed = 1, \ 258 .indexed = 1, \
259 .output = 1, \ 259 .output = 1, \
260 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 260 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
261 IIO_CHAN_INFO_SCALE_SHARED_BIT | \ 261 BIT(IIO_CHAN_INFO_CALIBSCALE) | \
262 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | \ 262 BIT(IIO_CHAN_INFO_CALIBBIAS), \
263 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, \ 263 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
264 .scan_type = IIO_ST('u', (_bits), 16, 14 - (_bits)), \ 264 .scan_type = IIO_ST('u', (_bits), 16, 14 - (_bits)), \
265 .ext_info = ad5380_ext_info, \ 265 .ext_info = ad5380_ext_info, \
266} 266}
diff --git a/drivers/iio/dac/ad5421.c b/drivers/iio/dac/ad5421.c
index 6b86a638dad0..98f24407c3ce 100644
--- a/drivers/iio/dac/ad5421.c
+++ b/drivers/iio/dac/ad5421.c
@@ -86,11 +86,11 @@ static const struct iio_chan_spec ad5421_channels[] = {
86 .indexed = 1, 86 .indexed = 1,
87 .output = 1, 87 .output = 1,
88 .channel = 0, 88 .channel = 0,
89 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 89 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
90 IIO_CHAN_INFO_SCALE_SHARED_BIT | 90 BIT(IIO_CHAN_INFO_CALIBSCALE) |
91 IIO_CHAN_INFO_OFFSET_SHARED_BIT | 91 BIT(IIO_CHAN_INFO_CALIBBIAS),
92 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | 92 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) |
93 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, 93 BIT(IIO_CHAN_INFO_OFFSET),
94 .scan_type = IIO_ST('u', 16, 16, 0), 94 .scan_type = IIO_ST('u', 16, 16, 0),
95 .event_mask = IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) | 95 .event_mask = IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) |
96 IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING), 96 IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
diff --git a/drivers/iio/dac/ad5446.c b/drivers/iio/dac/ad5446.c
index f5583aedfb59..cae8f6056ac3 100644
--- a/drivers/iio/dac/ad5446.c
+++ b/drivers/iio/dac/ad5446.c
@@ -143,8 +143,8 @@ static const struct iio_chan_spec_ext_info ad5446_ext_info_powerdown[] = {
143 .indexed = 1, \ 143 .indexed = 1, \
144 .output = 1, \ 144 .output = 1, \
145 .channel = 0, \ 145 .channel = 0, \
146 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 146 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
147 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 147 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
148 .scan_type = IIO_ST('u', (bits), (storage), (shift)), \ 148 .scan_type = IIO_ST('u', (bits), (storage), (shift)), \
149 .ext_info = (ext), \ 149 .ext_info = (ext), \
150} 150}
diff --git a/drivers/iio/dac/ad5449.c b/drivers/iio/dac/ad5449.c
index c4731b7b577b..ba1c914b0399 100644
--- a/drivers/iio/dac/ad5449.c
+++ b/drivers/iio/dac/ad5449.c
@@ -206,8 +206,8 @@ static const struct iio_info ad5449_info = {
206 .indexed = 1, \ 206 .indexed = 1, \
207 .output = 1, \ 207 .output = 1, \
208 .channel = (chan), \ 208 .channel = (chan), \
209 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 209 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
210 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ 210 BIT(IIO_CHAN_INFO_SCALE), \
211 .address = (chan), \ 211 .address = (chan), \
212 .scan_type = IIO_ST('u', (bits), 16, 12 - (bits)), \ 212 .scan_type = IIO_ST('u', (bits), 16, 12 - (bits)), \
213} 213}
diff --git a/drivers/iio/dac/ad5504.c b/drivers/iio/dac/ad5504.c
index e5e59749f109..139206e84cb7 100644
--- a/drivers/iio/dac/ad5504.c
+++ b/drivers/iio/dac/ad5504.c
@@ -259,8 +259,8 @@ static const struct iio_chan_spec_ext_info ad5504_ext_info[] = {
259 .indexed = 1, \ 259 .indexed = 1, \
260 .output = 1, \ 260 .output = 1, \
261 .channel = (_chan), \ 261 .channel = (_chan), \
262 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 262 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
263 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 263 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
264 .address = AD5504_ADDR_DAC(_chan), \ 264 .address = AD5504_ADDR_DAC(_chan), \
265 .scan_type = IIO_ST('u', 12, 16, 0), \ 265 .scan_type = IIO_ST('u', 12, 16, 0), \
266 .ext_info = ad5504_ext_info, \ 266 .ext_info = ad5504_ext_info, \
diff --git a/drivers/iio/dac/ad5624r_spi.c b/drivers/iio/dac/ad5624r_spi.c
index f6e116627b71..bb298aaff321 100644
--- a/drivers/iio/dac/ad5624r_spi.c
+++ b/drivers/iio/dac/ad5624r_spi.c
@@ -174,8 +174,8 @@ static const struct iio_chan_spec_ext_info ad5624r_ext_info[] = {
174 .indexed = 1, \ 174 .indexed = 1, \
175 .output = 1, \ 175 .output = 1, \
176 .channel = (_chan), \ 176 .channel = (_chan), \
177 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 177 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
178 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 178 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
179 .address = (_chan), \ 179 .address = (_chan), \
180 .scan_type = IIO_ST('u', (_bits), 16, 16 - (_bits)), \ 180 .scan_type = IIO_ST('u', (_bits), 16, 16 - (_bits)), \
181 .ext_info = ad5624r_ext_info, \ 181 .ext_info = ad5624r_ext_info, \
diff --git a/drivers/iio/dac/ad5686.c b/drivers/iio/dac/ad5686.c
index 5e554af21703..06439b1af9b6 100644
--- a/drivers/iio/dac/ad5686.c
+++ b/drivers/iio/dac/ad5686.c
@@ -276,9 +276,9 @@ static const struct iio_chan_spec_ext_info ad5686_ext_info[] = {
276 .indexed = 1, \ 276 .indexed = 1, \
277 .output = 1, \ 277 .output = 1, \
278 .channel = chan, \ 278 .channel = chan, \
279 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 279 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
280 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 280 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),\
281 .address = AD5686_ADDR_DAC(chan), \ 281 .address = AD5686_ADDR_DAC(chan), \
282 .scan_type = IIO_ST('u', bits, 16, shift), \ 282 .scan_type = IIO_ST('u', bits, 16, shift), \
283 .ext_info = ad5686_ext_info, \ 283 .ext_info = ad5686_ext_info, \
284} 284}
diff --git a/drivers/iio/dac/ad5755.c b/drivers/iio/dac/ad5755.c
index 71faabc6b14e..12bb315e55f8 100644
--- a/drivers/iio/dac/ad5755.c
+++ b/drivers/iio/dac/ad5755.c
@@ -393,11 +393,11 @@ static const struct iio_chan_spec_ext_info ad5755_ext_info[] = {
393#define AD5755_CHANNEL(_bits) { \ 393#define AD5755_CHANNEL(_bits) { \
394 .indexed = 1, \ 394 .indexed = 1, \
395 .output = 1, \ 395 .output = 1, \
396 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 396 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
397 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | \ 397 BIT(IIO_CHAN_INFO_SCALE) | \
398 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | \ 398 BIT(IIO_CHAN_INFO_OFFSET) | \
399 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | \ 399 BIT(IIO_CHAN_INFO_CALIBSCALE) | \
400 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, \ 400 BIT(IIO_CHAN_INFO_CALIBBIAS), \
401 .scan_type = IIO_ST('u', (_bits), 16, 16 - (_bits)), \ 401 .scan_type = IIO_ST('u', (_bits), 16, 16 - (_bits)), \
402 .ext_info = ad5755_ext_info, \ 402 .ext_info = ad5755_ext_info, \
403} 403}
diff --git a/drivers/iio/dac/ad5764.c b/drivers/iio/dac/ad5764.c
index 5b7acd3a2c77..7a53f7d70dac 100644
--- a/drivers/iio/dac/ad5764.c
+++ b/drivers/iio/dac/ad5764.c
@@ -78,11 +78,11 @@ enum ad5764_type {
78 .output = 1, \ 78 .output = 1, \
79 .channel = (_chan), \ 79 .channel = (_chan), \
80 .address = (_chan), \ 80 .address = (_chan), \
81 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 81 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
82 IIO_CHAN_INFO_OFFSET_SHARED_BIT | \ 82 BIT(IIO_CHAN_INFO_SCALE) | \
83 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | \ 83 BIT(IIO_CHAN_INFO_CALIBSCALE) | \
84 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | \ 84 BIT(IIO_CHAN_INFO_CALIBBIAS), \
85 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, \ 85 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET), \
86 .scan_type = IIO_ST('u', (_bits), 16, 16 - (_bits)) \ 86 .scan_type = IIO_ST('u', (_bits), 16, 16 - (_bits)) \
87} 87}
88 88
diff --git a/drivers/iio/dac/ad5791.c b/drivers/iio/dac/ad5791.c
index 8dfd3da8a07b..97c1e5d780df 100644
--- a/drivers/iio/dac/ad5791.c
+++ b/drivers/iio/dac/ad5791.c
@@ -302,9 +302,9 @@ static const struct iio_chan_spec_ext_info ad5791_ext_info[] = {
302 .indexed = 1, \ 302 .indexed = 1, \
303 .address = AD5791_ADDR_DAC0, \ 303 .address = AD5791_ADDR_DAC0, \
304 .channel = 0, \ 304 .channel = 0, \
305 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 305 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
306 IIO_CHAN_INFO_SCALE_SHARED_BIT | \ 306 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
307 IIO_CHAN_INFO_OFFSET_SHARED_BIT, \ 307 BIT(IIO_CHAN_INFO_OFFSET), \
308 .scan_type = IIO_ST('u', bits, 24, shift), \ 308 .scan_type = IIO_ST('u', bits, 24, shift), \
309 .ext_info = ad5791_ext_info, \ 309 .ext_info = ad5791_ext_info, \
310} 310}
diff --git a/drivers/iio/dac/max517.c b/drivers/iio/dac/max517.c
index 352abe2004a4..ebfaa4156246 100644
--- a/drivers/iio/dac/max517.c
+++ b/drivers/iio/dac/max517.c
@@ -146,8 +146,8 @@ static const struct iio_info max517_info = {
146 .indexed = 1, \ 146 .indexed = 1, \
147 .output = 1, \ 147 .output = 1, \
148 .channel = (chan), \ 148 .channel = (chan), \
149 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 149 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
150 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ 150 BIT(IIO_CHAN_INFO_SCALE), \
151 .scan_type = IIO_ST('u', 8, 8, 0), \ 151 .scan_type = IIO_ST('u', 8, 8, 0), \
152} 152}
153 153
diff --git a/drivers/iio/dac/mcp4725.c b/drivers/iio/dac/mcp4725.c
index 8f88cc4059a2..a612ec766d96 100644
--- a/drivers/iio/dac/mcp4725.c
+++ b/drivers/iio/dac/mcp4725.c
@@ -69,8 +69,8 @@ static const struct iio_chan_spec mcp4725_channel = {
69 .indexed = 1, 69 .indexed = 1,
70 .output = 1, 70 .output = 1,
71 .channel = 0, 71 .channel = 0,
72 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 72 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
73 IIO_CHAN_INFO_SCALE_SHARED_BIT, 73 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
74 .scan_type = IIO_ST('u', 12, 16, 0), 74 .scan_type = IIO_ST('u', 12, 16, 0),
75}; 75};
76 76
diff --git a/drivers/iio/frequency/ad9523.c b/drivers/iio/frequency/ad9523.c
index 1ea132e239ea..92276deeb026 100644
--- a/drivers/iio/frequency/ad9523.c
+++ b/drivers/iio/frequency/ad9523.c
@@ -920,10 +920,10 @@ static int ad9523_setup(struct iio_dev *indio_dev)
920 st->ad9523_channels[i].channel = chan->channel_num; 920 st->ad9523_channels[i].channel = chan->channel_num;
921 st->ad9523_channels[i].extend_name = 921 st->ad9523_channels[i].extend_name =
922 chan->extended_name; 922 chan->extended_name;
923 st->ad9523_channels[i].info_mask = 923 st->ad9523_channels[i].info_mask_separate =
924 IIO_CHAN_INFO_RAW_SEPARATE_BIT | 924 BIT(IIO_CHAN_INFO_RAW) |
925 IIO_CHAN_INFO_PHASE_SEPARATE_BIT | 925 BIT(IIO_CHAN_INFO_PHASE) |
926 IIO_CHAN_INFO_FREQUENCY_SEPARATE_BIT; 926 BIT(IIO_CHAN_INFO_FREQUENCY);
927 } 927 }
928 } 928 }
929 929
diff --git a/drivers/iio/gyro/adis16080.c b/drivers/iio/gyro/adis16080.c
index 1861287911f1..e1bb5f994a54 100644
--- a/drivers/iio/gyro/adis16080.c
+++ b/drivers/iio/gyro/adis16080.c
@@ -136,32 +136,32 @@ static const struct iio_chan_spec adis16080_channels[] = {
136 .type = IIO_ANGL_VEL, 136 .type = IIO_ANGL_VEL,
137 .modified = 1, 137 .modified = 1,
138 .channel2 = IIO_MOD_Z, 138 .channel2 = IIO_MOD_Z,
139 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 139 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
140 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 140 BIT(IIO_CHAN_INFO_SCALE),
141 .address = ADIS16080_DIN_GYRO, 141 .address = ADIS16080_DIN_GYRO,
142 }, { 142 }, {
143 .type = IIO_VOLTAGE, 143 .type = IIO_VOLTAGE,
144 .indexed = 1, 144 .indexed = 1,
145 .channel = 0, 145 .channel = 0,
146 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 146 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
147 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | 147 BIT(IIO_CHAN_INFO_SCALE) |
148 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT, 148 BIT(IIO_CHAN_INFO_OFFSET),
149 .address = ADIS16080_DIN_AIN1, 149 .address = ADIS16080_DIN_AIN1,
150 }, { 150 }, {
151 .type = IIO_VOLTAGE, 151 .type = IIO_VOLTAGE,
152 .indexed = 1, 152 .indexed = 1,
153 .channel = 1, 153 .channel = 1,
154 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 154 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
155 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | 155 BIT(IIO_CHAN_INFO_SCALE) |
156 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT, 156 BIT(IIO_CHAN_INFO_OFFSET),
157 .address = ADIS16080_DIN_AIN2, 157 .address = ADIS16080_DIN_AIN2,
158 }, { 158 }, {
159 .type = IIO_TEMP, 159 .type = IIO_TEMP,
160 .indexed = 1, 160 .indexed = 1,
161 .channel = 0, 161 .channel = 0,
162 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 162 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
163 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | 163 BIT(IIO_CHAN_INFO_SCALE) |
164 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT, 164 BIT(IIO_CHAN_INFO_OFFSET),
165 .address = ADIS16080_DIN_TEMP, 165 .address = ADIS16080_DIN_TEMP,
166 } 166 }
167}; 167};
diff --git a/drivers/iio/gyro/adis16136.c b/drivers/iio/gyro/adis16136.c
index 8cb0bcbfd609..058e6d5c955f 100644
--- a/drivers/iio/gyro/adis16136.c
+++ b/drivers/iio/gyro/adis16136.c
@@ -357,10 +357,11 @@ static const struct iio_chan_spec adis16136_channels[] = {
357 .type = IIO_ANGL_VEL, 357 .type = IIO_ANGL_VEL,
358 .modified = 1, 358 .modified = 1,
359 .channel2 = IIO_MOD_X, 359 .channel2 = IIO_MOD_X,
360 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 360 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
361 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | 361 BIT(IIO_CHAN_INFO_CALIBBIAS) |
362 IIO_CHAN_INFO_SCALE_SHARED_BIT | 362 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY),
363 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SEPARATE_BIT, 363 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
364
364 .address = ADIS16136_REG_GYRO_OUT2, 365 .address = ADIS16136_REG_GYRO_OUT2,
365 .scan_index = ADIS16136_SCAN_GYRO, 366 .scan_index = ADIS16136_SCAN_GYRO,
366 .scan_type = { 367 .scan_type = {
@@ -373,8 +374,8 @@ static const struct iio_chan_spec adis16136_channels[] = {
373 .type = IIO_TEMP, 374 .type = IIO_TEMP,
374 .indexed = 1, 375 .indexed = 1,
375 .channel = 0, 376 .channel = 0,
376 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 377 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
377 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 378 BIT(IIO_CHAN_INFO_SCALE),
378 .address = ADIS16136_REG_TEMP_OUT, 379 .address = ADIS16136_REG_TEMP_OUT,
379 .scan_index = ADIS16136_SCAN_TEMP, 380 .scan_index = ADIS16136_SCAN_TEMP,
380 .scan_type = { 381 .scan_type = {
diff --git a/drivers/iio/gyro/adxrs450.c b/drivers/iio/gyro/adxrs450.c
index 5b79953f7011..8bd72b490b7f 100644
--- a/drivers/iio/gyro/adxrs450.c
+++ b/drivers/iio/gyro/adxrs450.c
@@ -383,16 +383,16 @@ static const struct iio_chan_spec adxrs450_channels[2][2] = {
383 .type = IIO_ANGL_VEL, 383 .type = IIO_ANGL_VEL,
384 .modified = 1, 384 .modified = 1,
385 .channel2 = IIO_MOD_Z, 385 .channel2 = IIO_MOD_Z,
386 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 386 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
387 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | 387 BIT(IIO_CHAN_INFO_CALIBBIAS) |
388 IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT | 388 BIT(IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW) |
389 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 389 BIT(IIO_CHAN_INFO_SCALE),
390 }, { 390 }, {
391 .type = IIO_TEMP, 391 .type = IIO_TEMP,
392 .indexed = 1, 392 .indexed = 1,
393 .channel = 0, 393 .channel = 0,
394 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 394 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
395 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 395 BIT(IIO_CHAN_INFO_SCALE),
396 } 396 }
397 }, 397 },
398 [ID_ADXRS453] = { 398 [ID_ADXRS453] = {
@@ -400,15 +400,15 @@ static const struct iio_chan_spec adxrs450_channels[2][2] = {
400 .type = IIO_ANGL_VEL, 400 .type = IIO_ANGL_VEL,
401 .modified = 1, 401 .modified = 1,
402 .channel2 = IIO_MOD_Z, 402 .channel2 = IIO_MOD_Z,
403 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 403 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
404 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | 404 BIT(IIO_CHAN_INFO_SCALE) |
405 IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT, 405 BIT(IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW),
406 }, { 406 }, {
407 .type = IIO_TEMP, 407 .type = IIO_TEMP,
408 .indexed = 1, 408 .indexed = 1,
409 .channel = 0, 409 .channel = 0,
410 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 410 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
411 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 411 BIT(IIO_CHAN_INFO_SCALE),
412 } 412 }
413 }, 413 },
414}; 414};
diff --git a/drivers/iio/gyro/hid-sensor-gyro-3d.c b/drivers/iio/gyro/hid-sensor-gyro-3d.c
index fcfc83a9f861..bc943dd47da5 100644
--- a/drivers/iio/gyro/hid-sensor-gyro-3d.c
+++ b/drivers/iio/gyro/hid-sensor-gyro-3d.c
@@ -60,28 +60,28 @@ static const struct iio_chan_spec gyro_3d_channels[] = {
60 .type = IIO_ANGL_VEL, 60 .type = IIO_ANGL_VEL,
61 .modified = 1, 61 .modified = 1,
62 .channel2 = IIO_MOD_X, 62 .channel2 = IIO_MOD_X,
63 .info_mask = IIO_CHAN_INFO_OFFSET_SHARED_BIT | 63 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
64 IIO_CHAN_INFO_SCALE_SHARED_BIT | 64 BIT(IIO_CHAN_INFO_SCALE) |
65 IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT | 65 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
66 IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT, 66 BIT(IIO_CHAN_INFO_HYSTERESIS),
67 .scan_index = CHANNEL_SCAN_INDEX_X, 67 .scan_index = CHANNEL_SCAN_INDEX_X,
68 }, { 68 }, {
69 .type = IIO_ANGL_VEL, 69 .type = IIO_ANGL_VEL,
70 .modified = 1, 70 .modified = 1,
71 .channel2 = IIO_MOD_Y, 71 .channel2 = IIO_MOD_Y,
72 .info_mask = IIO_CHAN_INFO_OFFSET_SHARED_BIT | 72 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
73 IIO_CHAN_INFO_SCALE_SHARED_BIT | 73 BIT(IIO_CHAN_INFO_SCALE) |
74 IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT | 74 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
75 IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT, 75 BIT(IIO_CHAN_INFO_HYSTERESIS),
76 .scan_index = CHANNEL_SCAN_INDEX_Y, 76 .scan_index = CHANNEL_SCAN_INDEX_Y,
77 }, { 77 }, {
78 .type = IIO_ANGL_VEL, 78 .type = IIO_ANGL_VEL,
79 .modified = 1, 79 .modified = 1,
80 .channel2 = IIO_MOD_Z, 80 .channel2 = IIO_MOD_Z,
81 .info_mask = IIO_CHAN_INFO_OFFSET_SHARED_BIT | 81 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
82 IIO_CHAN_INFO_SCALE_SHARED_BIT | 82 BIT(IIO_CHAN_INFO_SCALE) |
83 IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT | 83 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
84 IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT, 84 BIT(IIO_CHAN_INFO_HYSTERESIS),
85 .scan_index = CHANNEL_SCAN_INDEX_Z, 85 .scan_index = CHANNEL_SCAN_INDEX_Z,
86 } 86 }
87}; 87};
diff --git a/drivers/iio/gyro/itg3200_core.c b/drivers/iio/gyro/itg3200_core.c
index df2e6aa5d73b..d66605d2629d 100644
--- a/drivers/iio/gyro/itg3200_core.c
+++ b/drivers/iio/gyro/itg3200_core.c
@@ -248,12 +248,6 @@ err_ret:
248 return ret; 248 return ret;
249} 249}
250 250
251#define ITG3200_TEMP_INFO_MASK (IIO_CHAN_INFO_OFFSET_SHARED_BIT | \
252 IIO_CHAN_INFO_SCALE_SHARED_BIT | \
253 IIO_CHAN_INFO_RAW_SEPARATE_BIT)
254#define ITG3200_GYRO_INFO_MASK (IIO_CHAN_INFO_SCALE_SHARED_BIT | \
255 IIO_CHAN_INFO_RAW_SEPARATE_BIT)
256
257#define ITG3200_ST \ 251#define ITG3200_ST \
258 { .sign = 's', .realbits = 16, .storagebits = 16, .endianness = IIO_BE } 252 { .sign = 's', .realbits = 16, .storagebits = 16, .endianness = IIO_BE }
259 253
@@ -261,7 +255,8 @@ err_ret:
261 .type = IIO_ANGL_VEL, \ 255 .type = IIO_ANGL_VEL, \
262 .modified = 1, \ 256 .modified = 1, \
263 .channel2 = IIO_MOD_ ## _mod, \ 257 .channel2 = IIO_MOD_ ## _mod, \
264 .info_mask = ITG3200_GYRO_INFO_MASK, \ 258 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
259 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
265 .address = ITG3200_REG_GYRO_ ## _mod ## OUT_H, \ 260 .address = ITG3200_REG_GYRO_ ## _mod ## OUT_H, \
266 .scan_index = ITG3200_SCAN_GYRO_ ## _mod, \ 261 .scan_index = ITG3200_SCAN_GYRO_ ## _mod, \
267 .scan_type = ITG3200_ST, \ 262 .scan_type = ITG3200_ST, \
@@ -271,7 +266,9 @@ static const struct iio_chan_spec itg3200_channels[] = {
271 { 266 {
272 .type = IIO_TEMP, 267 .type = IIO_TEMP,
273 .channel2 = IIO_NO_MOD, 268 .channel2 = IIO_NO_MOD,
274 .info_mask = ITG3200_TEMP_INFO_MASK, 269 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
270 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
271 BIT(IIO_CHAN_INFO_SCALE),
275 .address = ITG3200_REG_TEMP_OUT_H, 272 .address = ITG3200_REG_TEMP_OUT_H,
276 .scan_index = ITG3200_SCAN_TEMP, 273 .scan_index = ITG3200_SCAN_TEMP,
277 .scan_type = ITG3200_ST, 274 .scan_type = ITG3200_ST,
diff --git a/drivers/iio/iio_core.h b/drivers/iio/iio_core.h
index f652e6ae5a35..05c1b74502a3 100644
--- a/drivers/iio/iio_core.h
+++ b/drivers/iio/iio_core.h
@@ -18,6 +18,7 @@
18struct iio_chan_spec; 18struct iio_chan_spec;
19struct iio_dev; 19struct iio_dev;
20 20
21extern struct device_type iio_device_type;
21 22
22int __iio_add_chan_devattr(const char *postfix, 23int __iio_add_chan_devattr(const char *postfix,
23 struct iio_chan_spec const *chan, 24 struct iio_chan_spec const *chan,
diff --git a/drivers/iio/imu/adis16400_core.c b/drivers/iio/imu/adis16400_core.c
index b7f215eab5de..f60591f0b925 100644
--- a/drivers/iio/imu/adis16400_core.c
+++ b/drivers/iio/imu/adis16400_core.c
@@ -484,8 +484,8 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
484 .indexed = 1, \ 484 .indexed = 1, \
485 .channel = 0, \ 485 .channel = 0, \
486 .extend_name = name, \ 486 .extend_name = name, \
487 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 487 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
488 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ 488 BIT(IIO_CHAN_INFO_SCALE), \
489 .address = (addr), \ 489 .address = (addr), \
490 .scan_index = (si), \ 490 .scan_index = (si), \
491 .scan_type = { \ 491 .scan_type = { \
@@ -507,10 +507,10 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
507 .type = IIO_ANGL_VEL, \ 507 .type = IIO_ANGL_VEL, \
508 .modified = 1, \ 508 .modified = 1, \
509 .channel2 = IIO_MOD_ ## mod, \ 509 .channel2 = IIO_MOD_ ## mod, \
510 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 510 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
511 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | \ 511 BIT(IIO_CHAN_INFO_CALIBBIAS), \
512 IIO_CHAN_INFO_SCALE_SHARED_BIT | \ 512 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
513 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, \ 513 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
514 .address = addr, \ 514 .address = addr, \
515 .scan_index = ADIS16400_SCAN_GYRO_ ## mod, \ 515 .scan_index = ADIS16400_SCAN_GYRO_ ## mod, \
516 .scan_type = { \ 516 .scan_type = { \
@@ -526,10 +526,10 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
526 .type = IIO_ACCEL, \ 526 .type = IIO_ACCEL, \
527 .modified = 1, \ 527 .modified = 1, \
528 .channel2 = IIO_MOD_ ## mod, \ 528 .channel2 = IIO_MOD_ ## mod, \
529 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 529 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
530 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | \ 530 BIT(IIO_CHAN_INFO_CALIBBIAS), \
531 IIO_CHAN_INFO_SCALE_SHARED_BIT | \ 531 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
532 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, \ 532 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
533 .address = (addr), \ 533 .address = (addr), \
534 .scan_index = ADIS16400_SCAN_ACC_ ## mod, \ 534 .scan_index = ADIS16400_SCAN_ACC_ ## mod, \
535 .scan_type = { \ 535 .scan_type = { \
@@ -545,9 +545,9 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
545 .type = IIO_MAGN, \ 545 .type = IIO_MAGN, \
546 .modified = 1, \ 546 .modified = 1, \
547 .channel2 = IIO_MOD_ ## mod, \ 547 .channel2 = IIO_MOD_ ## mod, \
548 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 548 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
549 IIO_CHAN_INFO_SCALE_SHARED_BIT | \ 549 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
550 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, \ 550 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
551 .address = (addr), \ 551 .address = (addr), \
552 .scan_index = ADIS16400_SCAN_MAGN_ ## mod, \ 552 .scan_index = ADIS16400_SCAN_MAGN_ ## mod, \
553 .scan_type = { \ 553 .scan_type = { \
@@ -568,10 +568,11 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
568 .indexed = 1, \ 568 .indexed = 1, \
569 .channel = 0, \ 569 .channel = 0, \
570 .extend_name = ADIS16400_MOD_TEMP_NAME_ ## mod, \ 570 .extend_name = ADIS16400_MOD_TEMP_NAME_ ## mod, \
571 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 571 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
572 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | \ 572 BIT(IIO_CHAN_INFO_OFFSET) | \
573 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | \ 573 BIT(IIO_CHAN_INFO_SCALE), \
574 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, \ 574 .info_mask_shared_by_type = \
575 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
575 .address = (addr), \ 576 .address = (addr), \
576 .scan_index = ADIS16350_SCAN_TEMP_ ## mod, \ 577 .scan_index = ADIS16350_SCAN_TEMP_ ## mod, \
577 .scan_type = { \ 578 .scan_type = { \
@@ -587,9 +588,9 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
587 .type = IIO_TEMP, \ 588 .type = IIO_TEMP, \
588 .indexed = 1, \ 589 .indexed = 1, \
589 .channel = 0, \ 590 .channel = 0, \
590 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 591 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
591 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | \ 592 BIT(IIO_CHAN_INFO_OFFSET) | \
592 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ 593 BIT(IIO_CHAN_INFO_SCALE), \
593 .address = (addr), \ 594 .address = (addr), \
594 .scan_index = ADIS16350_SCAN_TEMP_X, \ 595 .scan_index = ADIS16350_SCAN_TEMP_X, \
595 .scan_type = { \ 596 .scan_type = { \
@@ -605,8 +606,8 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
605 .type = IIO_INCLI, \ 606 .type = IIO_INCLI, \
606 .modified = 1, \ 607 .modified = 1, \
607 .channel2 = IIO_MOD_ ## mod, \ 608 .channel2 = IIO_MOD_ ## mod, \
608 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 609 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
609 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 610 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
610 .address = (addr), \ 611 .address = (addr), \
611 .scan_index = ADIS16300_SCAN_INCLI_ ## mod, \ 612 .scan_index = ADIS16300_SCAN_INCLI_ ## mod, \
612 .scan_type = { \ 613 .scan_type = { \
@@ -646,8 +647,8 @@ static const struct iio_chan_spec adis16448_channels[] = {
646 ADIS16400_MAGN_CHAN(Z, ADIS16400_ZMAGN_OUT, 16), 647 ADIS16400_MAGN_CHAN(Z, ADIS16400_ZMAGN_OUT, 16),
647 { 648 {
648 .type = IIO_PRESSURE, 649 .type = IIO_PRESSURE,
649 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 650 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
650 IIO_CHAN_INFO_SCALE_SHARED_BIT, 651 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
651 .address = ADIS16448_BARO_OUT, 652 .address = ADIS16448_BARO_OUT,
652 .scan_index = ADIS16400_SCAN_BARO, 653 .scan_index = ADIS16400_SCAN_BARO,
653 .scan_type = IIO_ST('s', 16, 16, 0), 654 .scan_type = IIO_ST('s', 16, 16, 0),
diff --git a/drivers/iio/imu/adis16480.c b/drivers/iio/imu/adis16480.c
index 8c26a5f7cd5d..b7db38376295 100644
--- a/drivers/iio/imu/adis16480.c
+++ b/drivers/iio/imu/adis16480.c
@@ -591,15 +591,15 @@ static int adis16480_write_raw(struct iio_dev *indio_dev,
591 } 591 }
592} 592}
593 593
594#define ADIS16480_MOD_CHANNEL(_type, _mod, _address, _si, _info, _bits) \ 594#define ADIS16480_MOD_CHANNEL(_type, _mod, _address, _si, _info_sep, _bits) \
595 { \ 595 { \
596 .type = (_type), \ 596 .type = (_type), \
597 .modified = 1, \ 597 .modified = 1, \
598 .channel2 = (_mod), \ 598 .channel2 = (_mod), \
599 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 599 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
600 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | \ 600 BIT(IIO_CHAN_INFO_CALIBBIAS) | \
601 IIO_CHAN_INFO_SCALE_SHARED_BIT | \ 601 _info_sep, \
602 _info, \ 602 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
603 .address = (_address), \ 603 .address = (_address), \
604 .scan_index = (_si), \ 604 .scan_index = (_si), \
605 .scan_type = { \ 605 .scan_type = { \
@@ -613,21 +613,21 @@ static int adis16480_write_raw(struct iio_dev *indio_dev,
613#define ADIS16480_GYRO_CHANNEL(_mod) \ 613#define ADIS16480_GYRO_CHANNEL(_mod) \
614 ADIS16480_MOD_CHANNEL(IIO_ANGL_VEL, IIO_MOD_ ## _mod, \ 614 ADIS16480_MOD_CHANNEL(IIO_ANGL_VEL, IIO_MOD_ ## _mod, \
615 ADIS16480_REG_ ## _mod ## _GYRO_OUT, ADIS16480_SCAN_GYRO_ ## _mod, \ 615 ADIS16480_REG_ ## _mod ## _GYRO_OUT, ADIS16480_SCAN_GYRO_ ## _mod, \
616 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SEPARATE_BIT | \ 616 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY) | \
617 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT, \ 617 BIT(IIO_CHAN_INFO_CALIBSCALE), \
618 32) 618 32)
619 619
620#define ADIS16480_ACCEL_CHANNEL(_mod) \ 620#define ADIS16480_ACCEL_CHANNEL(_mod) \
621 ADIS16480_MOD_CHANNEL(IIO_ACCEL, IIO_MOD_ ## _mod, \ 621 ADIS16480_MOD_CHANNEL(IIO_ACCEL, IIO_MOD_ ## _mod, \
622 ADIS16480_REG_ ## _mod ## _ACCEL_OUT, ADIS16480_SCAN_ACCEL_ ## _mod, \ 622 ADIS16480_REG_ ## _mod ## _ACCEL_OUT, ADIS16480_SCAN_ACCEL_ ## _mod, \
623 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SEPARATE_BIT | \ 623 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY) | \
624 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT, \ 624 BIT(IIO_CHAN_INFO_CALIBSCALE), \
625 32) 625 32)
626 626
627#define ADIS16480_MAGN_CHANNEL(_mod) \ 627#define ADIS16480_MAGN_CHANNEL(_mod) \
628 ADIS16480_MOD_CHANNEL(IIO_MAGN, IIO_MOD_ ## _mod, \ 628 ADIS16480_MOD_CHANNEL(IIO_MAGN, IIO_MOD_ ## _mod, \
629 ADIS16480_REG_ ## _mod ## _MAGN_OUT, ADIS16480_SCAN_MAGN_ ## _mod, \ 629 ADIS16480_REG_ ## _mod ## _MAGN_OUT, ADIS16480_SCAN_MAGN_ ## _mod, \
630 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SEPARATE_BIT, \ 630 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
631 16) 631 16)
632 632
633#define ADIS16480_PRESSURE_CHANNEL() \ 633#define ADIS16480_PRESSURE_CHANNEL() \
@@ -635,9 +635,9 @@ static int adis16480_write_raw(struct iio_dev *indio_dev,
635 .type = IIO_PRESSURE, \ 635 .type = IIO_PRESSURE, \
636 .indexed = 1, \ 636 .indexed = 1, \
637 .channel = 0, \ 637 .channel = 0, \
638 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 638 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
639 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | \ 639 BIT(IIO_CHAN_INFO_CALIBBIAS) | \
640 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ 640 BIT(IIO_CHAN_INFO_SCALE), \
641 .address = ADIS16480_REG_BAROM_OUT, \ 641 .address = ADIS16480_REG_BAROM_OUT, \
642 .scan_index = ADIS16480_SCAN_BARO, \ 642 .scan_index = ADIS16480_SCAN_BARO, \
643 .scan_type = { \ 643 .scan_type = { \
@@ -652,9 +652,9 @@ static int adis16480_write_raw(struct iio_dev *indio_dev,
652 .type = IIO_TEMP, \ 652 .type = IIO_TEMP, \
653 .indexed = 1, \ 653 .indexed = 1, \
654 .channel = 0, \ 654 .channel = 0, \
655 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 655 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
656 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | \ 656 BIT(IIO_CHAN_INFO_SCALE) | \
657 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT, \ 657 BIT(IIO_CHAN_INFO_OFFSET), \
658 .address = ADIS16480_REG_TEMP_OUT, \ 658 .address = ADIS16480_REG_TEMP_OUT, \
659 .scan_index = ADIS16480_SCAN_TEMP, \ 659 .scan_index = ADIS16480_SCAN_TEMP, \
660 .scan_type = { \ 660 .scan_type = { \
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
index 37ca05b47e4b..fe4c61e219f3 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
@@ -544,8 +544,8 @@ static int inv_mpu6050_validate_trigger(struct iio_dev *indio_dev,
544 .type = _type, \ 544 .type = _type, \
545 .modified = 1, \ 545 .modified = 1, \
546 .channel2 = _channel2, \ 546 .channel2 = _channel2, \
547 .info_mask = IIO_CHAN_INFO_SCALE_SHARED_BIT \ 547 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
548 | IIO_CHAN_INFO_RAW_SEPARATE_BIT, \ 548 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
549 .scan_index = _index, \ 549 .scan_index = _index, \
550 .scan_type = { \ 550 .scan_type = { \
551 .sign = 's', \ 551 .sign = 's', \
@@ -564,9 +564,9 @@ static const struct iio_chan_spec inv_mpu_channels[] = {
564 */ 564 */
565 { 565 {
566 .type = IIO_TEMP, 566 .type = IIO_TEMP,
567 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT 567 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW)
568 | IIO_CHAN_INFO_OFFSET_SEPARATE_BIT 568 | BIT(IIO_CHAN_INFO_OFFSET)
569 | IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 569 | BIT(IIO_CHAN_INFO_SCALE),
570 .scan_index = -1, 570 .scan_index = -1,
571 }, 571 },
572 INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X), 572 INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
index 331781ffbb15..7da0832f187b 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
@@ -105,9 +105,8 @@ irqreturn_t inv_mpu6050_irq_handler(int irq, void *p)
105 s64 timestamp; 105 s64 timestamp;
106 106
107 timestamp = iio_get_time_ns(); 107 timestamp = iio_get_time_ns();
108 spin_lock(&st->time_stamp_lock); 108 kfifo_in_spinlocked(&st->timestamps, &timestamp, 1,
109 kfifo_in(&st->timestamps, &timestamp, 1); 109 &st->time_stamp_lock);
110 spin_unlock(&st->time_stamp_lock);
111 110
112 return IRQ_WAKE_THREAD; 111 return IRQ_WAKE_THREAD;
113} 112}
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index 8848f16c547b..e145931ef1b8 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -691,21 +691,34 @@ static int iio_device_add_channel_sysfs(struct iio_dev *indio_dev,
691 691
692 if (chan->channel < 0) 692 if (chan->channel < 0)
693 return 0; 693 return 0;
694 for_each_set_bit(i, &chan->info_mask, sizeof(long)*8) { 694 for_each_set_bit(i, &chan->info_mask_separate, sizeof(long)*8) {
695 ret = __iio_add_chan_devattr(iio_chan_info_postfix[i/2], 695 ret = __iio_add_chan_devattr(iio_chan_info_postfix[i],
696 chan, 696 chan,
697 &iio_read_channel_info, 697 &iio_read_channel_info,
698 &iio_write_channel_info, 698 &iio_write_channel_info,
699 i/2, 699 i,
700 !(i%2), 700 0,
701 &indio_dev->dev, 701 &indio_dev->dev,
702 &indio_dev->channel_attr_list); 702 &indio_dev->channel_attr_list);
703 if (ret == -EBUSY && (i%2 == 0)) { 703 if (ret < 0)
704 goto error_ret;
705 attrcount++;
706 }
707 for_each_set_bit(i, &chan->info_mask_shared_by_type, sizeof(long)*8) {
708 ret = __iio_add_chan_devattr(iio_chan_info_postfix[i],
709 chan,
710 &iio_read_channel_info,
711 &iio_write_channel_info,
712 i,
713 1,
714 &indio_dev->dev,
715 &indio_dev->channel_attr_list);
716 if (ret == -EBUSY) {
704 ret = 0; 717 ret = 0;
705 continue; 718 continue;
706 } 719 } else if (ret < 0) {
707 if (ret < 0)
708 goto error_ret; 720 goto error_ret;
721 }
709 attrcount++; 722 attrcount++;
710 } 723 }
711 724
@@ -847,7 +860,7 @@ static void iio_dev_release(struct device *device)
847 kfree(indio_dev); 860 kfree(indio_dev);
848} 861}
849 862
850static struct device_type iio_dev_type = { 863struct device_type iio_device_type = {
851 .name = "iio_device", 864 .name = "iio_device",
852 .release = iio_dev_release, 865 .release = iio_dev_release,
853}; 866};
@@ -869,7 +882,7 @@ struct iio_dev *iio_device_alloc(int sizeof_priv)
869 882
870 if (dev) { 883 if (dev) {
871 dev->dev.groups = dev->groups; 884 dev->dev.groups = dev->groups;
872 dev->dev.type = &iio_dev_type; 885 dev->dev.type = &iio_device_type;
873 dev->dev.bus = &iio_bus_type; 886 dev->dev.bus = &iio_bus_type;
874 device_initialize(&dev->dev); 887 device_initialize(&dev->dev);
875 dev_set_drvdata(&dev->dev, (void *)dev); 888 dev_set_drvdata(&dev->dev, (void *)dev);
@@ -960,6 +973,10 @@ int iio_device_register(struct iio_dev *indio_dev)
960{ 973{
961 int ret; 974 int ret;
962 975
976 /* If the calling driver did not initialize of_node, do it here */
977 if (!indio_dev->dev.of_node && indio_dev->dev.parent)
978 indio_dev->dev.of_node = indio_dev->dev.parent->of_node;
979
963 /* configure elements for the chrdev */ 980 /* configure elements for the chrdev */
964 indio_dev->dev.devt = MKDEV(MAJOR(iio_devt), indio_dev->id); 981 indio_dev->dev.devt = MKDEV(MAJOR(iio_devt), indio_dev->id);
965 982
diff --git a/drivers/iio/industrialio-event.c b/drivers/iio/industrialio-event.c
index 261cae00557e..10aa9ef86cec 100644
--- a/drivers/iio/industrialio-event.c
+++ b/drivers/iio/industrialio-event.c
@@ -46,10 +46,11 @@ int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp)
46{ 46{
47 struct iio_event_interface *ev_int = indio_dev->event_interface; 47 struct iio_event_interface *ev_int = indio_dev->event_interface;
48 struct iio_event_data ev; 48 struct iio_event_data ev;
49 unsigned long flags;
49 int copied; 50 int copied;
50 51
51 /* Does anyone care? */ 52 /* Does anyone care? */
52 spin_lock(&ev_int->wait.lock); 53 spin_lock_irqsave(&ev_int->wait.lock, flags);
53 if (test_bit(IIO_BUSY_BIT_POS, &ev_int->flags)) { 54 if (test_bit(IIO_BUSY_BIT_POS, &ev_int->flags)) {
54 55
55 ev.id = ev_code; 56 ev.id = ev_code;
@@ -59,7 +60,7 @@ int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp)
59 if (copied != 0) 60 if (copied != 0)
60 wake_up_locked_poll(&ev_int->wait, POLLIN); 61 wake_up_locked_poll(&ev_int->wait, POLLIN);
61 } 62 }
62 spin_unlock(&ev_int->wait.lock); 63 spin_unlock_irqrestore(&ev_int->wait.lock, flags);
63 64
64 return 0; 65 return 0;
65} 66}
@@ -76,10 +77,10 @@ static unsigned int iio_event_poll(struct file *filep,
76 77
77 poll_wait(filep, &ev_int->wait, wait); 78 poll_wait(filep, &ev_int->wait, wait);
78 79
79 spin_lock(&ev_int->wait.lock); 80 spin_lock_irq(&ev_int->wait.lock);
80 if (!kfifo_is_empty(&ev_int->det_events)) 81 if (!kfifo_is_empty(&ev_int->det_events))
81 events = POLLIN | POLLRDNORM; 82 events = POLLIN | POLLRDNORM;
82 spin_unlock(&ev_int->wait.lock); 83 spin_unlock_irq(&ev_int->wait.lock);
83 84
84 return events; 85 return events;
85} 86}
@@ -96,14 +97,14 @@ static ssize_t iio_event_chrdev_read(struct file *filep,
96 if (count < sizeof(struct iio_event_data)) 97 if (count < sizeof(struct iio_event_data))
97 return -EINVAL; 98 return -EINVAL;
98 99
99 spin_lock(&ev_int->wait.lock); 100 spin_lock_irq(&ev_int->wait.lock);
100 if (kfifo_is_empty(&ev_int->det_events)) { 101 if (kfifo_is_empty(&ev_int->det_events)) {
101 if (filep->f_flags & O_NONBLOCK) { 102 if (filep->f_flags & O_NONBLOCK) {
102 ret = -EAGAIN; 103 ret = -EAGAIN;
103 goto error_unlock; 104 goto error_unlock;
104 } 105 }
105 /* Blocking on device; waiting for something to be there */ 106 /* Blocking on device; waiting for something to be there */
106 ret = wait_event_interruptible_locked(ev_int->wait, 107 ret = wait_event_interruptible_locked_irq(ev_int->wait,
107 !kfifo_is_empty(&ev_int->det_events)); 108 !kfifo_is_empty(&ev_int->det_events));
108 if (ret) 109 if (ret)
109 goto error_unlock; 110 goto error_unlock;
@@ -113,7 +114,7 @@ static ssize_t iio_event_chrdev_read(struct file *filep,
113 ret = kfifo_to_user(&ev_int->det_events, buf, count, &copied); 114 ret = kfifo_to_user(&ev_int->det_events, buf, count, &copied);
114 115
115error_unlock: 116error_unlock:
116 spin_unlock(&ev_int->wait.lock); 117 spin_unlock_irq(&ev_int->wait.lock);
117 118
118 return ret ? ret : copied; 119 return ret ? ret : copied;
119} 120}
@@ -122,7 +123,7 @@ static int iio_event_chrdev_release(struct inode *inode, struct file *filep)
122{ 123{
123 struct iio_event_interface *ev_int = filep->private_data; 124 struct iio_event_interface *ev_int = filep->private_data;
124 125
125 spin_lock(&ev_int->wait.lock); 126 spin_lock_irq(&ev_int->wait.lock);
126 __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags); 127 __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags);
127 /* 128 /*
128 * In order to maintain a clean state for reopening, 129 * In order to maintain a clean state for reopening,
@@ -130,7 +131,7 @@ static int iio_event_chrdev_release(struct inode *inode, struct file *filep)
130 * any new __iio_push_event calls running. 131 * any new __iio_push_event calls running.
131 */ 132 */
132 kfifo_reset_out(&ev_int->det_events); 133 kfifo_reset_out(&ev_int->det_events);
133 spin_unlock(&ev_int->wait.lock); 134 spin_unlock_irq(&ev_int->wait.lock);
134 135
135 return 0; 136 return 0;
136} 137}
@@ -151,18 +152,18 @@ int iio_event_getfd(struct iio_dev *indio_dev)
151 if (ev_int == NULL) 152 if (ev_int == NULL)
152 return -ENODEV; 153 return -ENODEV;
153 154
154 spin_lock(&ev_int->wait.lock); 155 spin_lock_irq(&ev_int->wait.lock);
155 if (__test_and_set_bit(IIO_BUSY_BIT_POS, &ev_int->flags)) { 156 if (__test_and_set_bit(IIO_BUSY_BIT_POS, &ev_int->flags)) {
156 spin_unlock(&ev_int->wait.lock); 157 spin_unlock_irq(&ev_int->wait.lock);
157 return -EBUSY; 158 return -EBUSY;
158 } 159 }
159 spin_unlock(&ev_int->wait.lock); 160 spin_unlock_irq(&ev_int->wait.lock);
160 fd = anon_inode_getfd("iio:event", 161 fd = anon_inode_getfd("iio:event",
161 &iio_event_chrdev_fileops, ev_int, O_RDONLY); 162 &iio_event_chrdev_fileops, ev_int, O_RDONLY);
162 if (fd < 0) { 163 if (fd < 0) {
163 spin_lock(&ev_int->wait.lock); 164 spin_lock_irq(&ev_int->wait.lock);
164 __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags); 165 __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags);
165 spin_unlock(&ev_int->wait.lock); 166 spin_unlock_irq(&ev_int->wait.lock);
166 } 167 }
167 return fd; 168 return fd;
168} 169}
diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c
index b289915b8469..795d100b4c36 100644
--- a/drivers/iio/inkern.c
+++ b/drivers/iio/inkern.c
@@ -10,6 +10,7 @@
10#include <linux/export.h> 10#include <linux/export.h>
11#include <linux/slab.h> 11#include <linux/slab.h>
12#include <linux/mutex.h> 12#include <linux/mutex.h>
13#include <linux/of.h>
13 14
14#include <linux/iio/iio.h> 15#include <linux/iio/iio.h>
15#include "iio_core.h" 16#include "iio_core.h"
@@ -92,6 +93,164 @@ static const struct iio_chan_spec
92 return chan; 93 return chan;
93} 94}
94 95
96#ifdef CONFIG_OF
97
98static int iio_dev_node_match(struct device *dev, void *data)
99{
100 return dev->of_node == data && dev->type == &iio_device_type;
101}
102
103static int __of_iio_channel_get(struct iio_channel *channel,
104 struct device_node *np, int index)
105{
106 struct device *idev;
107 struct iio_dev *indio_dev;
108 int err;
109 struct of_phandle_args iiospec;
110
111 err = of_parse_phandle_with_args(np, "io-channels",
112 "#io-channel-cells",
113 index, &iiospec);
114 if (err)
115 return err;
116
117 idev = bus_find_device(&iio_bus_type, NULL, iiospec.np,
118 iio_dev_node_match);
119 of_node_put(iiospec.np);
120 if (idev == NULL)
121 return -EPROBE_DEFER;
122
123 indio_dev = dev_to_iio_dev(idev);
124 channel->indio_dev = indio_dev;
125 index = iiospec.args_count ? iiospec.args[0] : 0;
126 if (index >= indio_dev->num_channels) {
127 return -EINVAL;
128 goto err_put;
129 }
130 channel->channel = &indio_dev->channels[index];
131
132 return 0;
133
134err_put:
135 iio_device_put(indio_dev);
136 return err;
137}
138
139static struct iio_channel *of_iio_channel_get(struct device_node *np, int index)
140{
141 struct iio_channel *channel;
142 int err;
143
144 if (index < 0)
145 return ERR_PTR(-EINVAL);
146
147 channel = kzalloc(sizeof(*channel), GFP_KERNEL);
148 if (channel == NULL)
149 return ERR_PTR(-ENOMEM);
150
151 err = __of_iio_channel_get(channel, np, index);
152 if (err)
153 goto err_free_channel;
154
155 return channel;
156
157err_free_channel:
158 kfree(channel);
159 return ERR_PTR(err);
160}
161
162static struct iio_channel *of_iio_channel_get_by_name(struct device_node *np,
163 const char *name)
164{
165 struct iio_channel *chan = NULL;
166
167 /* Walk up the tree of devices looking for a matching iio channel */
168 while (np) {
169 int index = 0;
170
171 /*
172 * For named iio channels, first look up the name in the
173 * "io-channel-names" property. If it cannot be found, the
174 * index will be an error code, and of_iio_channel_get()
175 * will fail.
176 */
177 if (name)
178 index = of_property_match_string(np, "io-channel-names",
179 name);
180 chan = of_iio_channel_get(np, index);
181 if (!IS_ERR(chan))
182 break;
183 else if (name && index >= 0) {
184 pr_err("ERROR: could not get IIO channel %s:%s(%i)\n",
185 np->full_name, name ? name : "", index);
186 return chan;
187 }
188
189 /*
190 * No matching IIO channel found on this node.
191 * If the parent node has a "io-channel-ranges" property,
192 * then we can try one of its channels.
193 */
194 np = np->parent;
195 if (np && !of_get_property(np, "io-channel-ranges", NULL))
196 break;
197 }
198 return chan;
199}
200
201static struct iio_channel *of_iio_channel_get_all(struct device *dev)
202{
203 struct iio_channel *chans;
204 int i, mapind, nummaps = 0;
205 int ret;
206
207 do {
208 ret = of_parse_phandle_with_args(dev->of_node,
209 "io-channels",
210 "#io-channel-cells",
211 nummaps, NULL);
212 if (ret < 0)
213 break;
214 } while (++nummaps);
215
216 if (nummaps == 0) /* no error, return NULL to search map table */
217 return NULL;
218
219 /* NULL terminated array to save passing size */
220 chans = kcalloc(nummaps + 1, sizeof(*chans), GFP_KERNEL);
221 if (chans == NULL)
222 return ERR_PTR(-ENOMEM);
223
224 /* Search for OF matches */
225 for (mapind = 0; mapind < nummaps; mapind++) {
226 ret = __of_iio_channel_get(&chans[mapind], dev->of_node,
227 mapind);
228 if (ret)
229 goto error_free_chans;
230 }
231 return chans;
232
233error_free_chans:
234 for (i = 0; i < mapind; i++)
235 iio_device_put(chans[i].indio_dev);
236 kfree(chans);
237 return ERR_PTR(ret);
238}
239
240#else /* CONFIG_OF */
241
242static inline struct iio_channel *
243of_iio_channel_get_by_name(struct device_node *np, const char *name)
244{
245 return NULL;
246}
247
248static inline struct iio_channel *of_iio_channel_get_all(struct device *dev)
249{
250 return NULL;
251}
252
253#endif /* CONFIG_OF */
95 254
96static struct iio_channel *iio_channel_get_sys(const char *name, 255static struct iio_channel *iio_channel_get_sys(const char *name,
97 const char *channel_name) 256 const char *channel_name)
@@ -150,7 +309,14 @@ struct iio_channel *iio_channel_get(struct device *dev,
150 const char *channel_name) 309 const char *channel_name)
151{ 310{
152 const char *name = dev ? dev_name(dev) : NULL; 311 const char *name = dev ? dev_name(dev) : NULL;
312 struct iio_channel *channel;
153 313
314 if (dev) {
315 channel = of_iio_channel_get_by_name(dev->of_node,
316 channel_name);
317 if (channel != NULL)
318 return channel;
319 }
154 return iio_channel_get_sys(name, channel_name); 320 return iio_channel_get_sys(name, channel_name);
155} 321}
156EXPORT_SYMBOL_GPL(iio_channel_get); 322EXPORT_SYMBOL_GPL(iio_channel_get);
@@ -173,6 +339,11 @@ struct iio_channel *iio_channel_get_all(struct device *dev)
173 339
174 if (dev == NULL) 340 if (dev == NULL)
175 return ERR_PTR(-EINVAL); 341 return ERR_PTR(-EINVAL);
342
343 chans = of_iio_channel_get_all(dev);
344 if (chans)
345 return chans;
346
176 name = dev_name(dev); 347 name = dev_name(dev);
177 348
178 mutex_lock(&iio_map_list_lock); 349 mutex_lock(&iio_map_list_lock);
diff --git a/drivers/iio/light/adjd_s311.c b/drivers/iio/light/adjd_s311.c
index d5b9d39d95b2..5f4749e60b04 100644
--- a/drivers/iio/light/adjd_s311.c
+++ b/drivers/iio/light/adjd_s311.c
@@ -207,8 +207,8 @@ static const struct iio_chan_spec_ext_info adjd_s311_ext_info[] = {
207 .type = IIO_INTENSITY, \ 207 .type = IIO_INTENSITY, \
208 .modified = 1, \ 208 .modified = 1, \
209 .address = (IDX_##_color), \ 209 .address = (IDX_##_color), \
210 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 210 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
211 IIO_CHAN_INFO_HARDWAREGAIN_SEPARATE_BIT, \ 211 BIT(IIO_CHAN_INFO_HARDWAREGAIN), \
212 .channel2 = (IIO_MOD_LIGHT_##_color), \ 212 .channel2 = (IIO_MOD_LIGHT_##_color), \
213 .scan_index = (_scan_idx), \ 213 .scan_index = (_scan_idx), \
214 .scan_type = IIO_ST('u', 10, 16, 0), \ 214 .scan_type = IIO_ST('u', 10, 16, 0), \
diff --git a/drivers/iio/light/hid-sensor-als.c b/drivers/iio/light/hid-sensor-als.c
index 3d7e8c9b4beb..80d68ff02d29 100644
--- a/drivers/iio/light/hid-sensor-als.c
+++ b/drivers/iio/light/hid-sensor-als.c
@@ -49,10 +49,10 @@ static const struct iio_chan_spec als_channels[] = {
49 .type = IIO_INTENSITY, 49 .type = IIO_INTENSITY,
50 .modified = 1, 50 .modified = 1,
51 .channel2 = IIO_MOD_LIGHT_BOTH, 51 .channel2 = IIO_MOD_LIGHT_BOTH,
52 .info_mask = IIO_CHAN_INFO_OFFSET_SHARED_BIT | 52 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
53 IIO_CHAN_INFO_SCALE_SHARED_BIT | 53 BIT(IIO_CHAN_INFO_SCALE) |
54 IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT | 54 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
55 IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT, 55 BIT(IIO_CHAN_INFO_HYSTERESIS),
56 .scan_index = CHANNEL_SCAN_INDEX_ILLUM, 56 .scan_index = CHANNEL_SCAN_INDEX_ILLUM,
57 } 57 }
58}; 58};
diff --git a/drivers/iio/light/lm3533-als.c b/drivers/iio/light/lm3533-als.c
index 7503012ce933..5fa31a4ef82a 100644
--- a/drivers/iio/light/lm3533-als.c
+++ b/drivers/iio/light/lm3533-als.c
@@ -231,7 +231,7 @@ static int lm3533_als_read_raw(struct iio_dev *indio_dev,
231 .channel = _channel, \ 231 .channel = _channel, \
232 .indexed = true, \ 232 .indexed = true, \
233 .output = true, \ 233 .output = true, \
234 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, \ 234 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
235 } 235 }
236 236
237static const struct iio_chan_spec lm3533_als_channels[] = { 237static const struct iio_chan_spec lm3533_als_channels[] = {
@@ -239,8 +239,8 @@ static const struct iio_chan_spec lm3533_als_channels[] = {
239 .type = IIO_LIGHT, 239 .type = IIO_LIGHT,
240 .channel = 0, 240 .channel = 0,
241 .indexed = true, 241 .indexed = true,
242 .info_mask = (IIO_CHAN_INFO_AVERAGE_RAW_SEPARATE_BIT | 242 .info_mask_separate = BIT(IIO_CHAN_INFO_AVERAGE_RAW) |
243 IIO_CHAN_INFO_RAW_SEPARATE_BIT), 243 BIT(IIO_CHAN_INFO_RAW),
244 }, 244 },
245 CHANNEL_CURRENT(0), 245 CHANNEL_CURRENT(0),
246 CHANNEL_CURRENT(1), 246 CHANNEL_CURRENT(1),
diff --git a/drivers/iio/light/tsl2563.c b/drivers/iio/light/tsl2563.c
index fd8be69b7d05..1f529f36f138 100644
--- a/drivers/iio/light/tsl2563.c
+++ b/drivers/iio/light/tsl2563.c
@@ -530,14 +530,14 @@ static const struct iio_chan_spec tsl2563_channels[] = {
530 { 530 {
531 .type = IIO_LIGHT, 531 .type = IIO_LIGHT,
532 .indexed = 1, 532 .indexed = 1,
533 .info_mask = IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT, 533 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
534 .channel = 0, 534 .channel = 0,
535 }, { 535 }, {
536 .type = IIO_INTENSITY, 536 .type = IIO_INTENSITY,
537 .modified = 1, 537 .modified = 1,
538 .channel2 = IIO_MOD_LIGHT_BOTH, 538 .channel2 = IIO_MOD_LIGHT_BOTH,
539 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 539 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
540 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT, 540 BIT(IIO_CHAN_INFO_CALIBSCALE),
541 .event_mask = (IIO_EV_BIT(IIO_EV_TYPE_THRESH, 541 .event_mask = (IIO_EV_BIT(IIO_EV_TYPE_THRESH,
542 IIO_EV_DIR_RISING) | 542 IIO_EV_DIR_RISING) |
543 IIO_EV_BIT(IIO_EV_TYPE_THRESH, 543 IIO_EV_BIT(IIO_EV_TYPE_THRESH,
@@ -546,8 +546,8 @@ static const struct iio_chan_spec tsl2563_channels[] = {
546 .type = IIO_INTENSITY, 546 .type = IIO_INTENSITY,
547 .modified = 1, 547 .modified = 1,
548 .channel2 = IIO_MOD_LIGHT_IR, 548 .channel2 = IIO_MOD_LIGHT_IR,
549 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 549 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
550 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT, 550 BIT(IIO_CHAN_INFO_CALIBSCALE),
551 } 551 }
552}; 552};
553 553
diff --git a/drivers/iio/light/vcnl4000.c b/drivers/iio/light/vcnl4000.c
index 2aa748fbdc0e..1014943d949a 100644
--- a/drivers/iio/light/vcnl4000.c
+++ b/drivers/iio/light/vcnl4000.c
@@ -93,11 +93,11 @@ static int vcnl4000_measure(struct vcnl4000_data *data, u8 req_mask,
93static const struct iio_chan_spec vcnl4000_channels[] = { 93static const struct iio_chan_spec vcnl4000_channels[] = {
94 { 94 {
95 .type = IIO_LIGHT, 95 .type = IIO_LIGHT,
96 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 96 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
97 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 97 BIT(IIO_CHAN_INFO_SCALE),
98 }, { 98 }, {
99 .type = IIO_PROXIMITY, 99 .type = IIO_PROXIMITY,
100 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 100 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
101 } 101 }
102}; 102};
103 103
diff --git a/drivers/iio/magnetometer/hid-sensor-magn-3d.c b/drivers/iio/magnetometer/hid-sensor-magn-3d.c
index d8d01265220b..99f4e494513b 100644
--- a/drivers/iio/magnetometer/hid-sensor-magn-3d.c
+++ b/drivers/iio/magnetometer/hid-sensor-magn-3d.c
@@ -60,28 +60,28 @@ static const struct iio_chan_spec magn_3d_channels[] = {
60 .type = IIO_MAGN, 60 .type = IIO_MAGN,
61 .modified = 1, 61 .modified = 1,
62 .channel2 = IIO_MOD_X, 62 .channel2 = IIO_MOD_X,
63 .info_mask = IIO_CHAN_INFO_OFFSET_SHARED_BIT | 63 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
64 IIO_CHAN_INFO_SCALE_SHARED_BIT | 64 BIT(IIO_CHAN_INFO_SCALE) |
65 IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT | 65 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
66 IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT, 66 BIT(IIO_CHAN_INFO_HYSTERESIS),
67 .scan_index = CHANNEL_SCAN_INDEX_X, 67 .scan_index = CHANNEL_SCAN_INDEX_X,
68 }, { 68 }, {
69 .type = IIO_MAGN, 69 .type = IIO_MAGN,
70 .modified = 1, 70 .modified = 1,
71 .channel2 = IIO_MOD_Y, 71 .channel2 = IIO_MOD_Y,
72 .info_mask = IIO_CHAN_INFO_OFFSET_SHARED_BIT | 72 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
73 IIO_CHAN_INFO_SCALE_SHARED_BIT | 73 BIT(IIO_CHAN_INFO_SCALE) |
74 IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT | 74 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
75 IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT, 75 BIT(IIO_CHAN_INFO_HYSTERESIS),
76 .scan_index = CHANNEL_SCAN_INDEX_Y, 76 .scan_index = CHANNEL_SCAN_INDEX_Y,
77 }, { 77 }, {
78 .type = IIO_MAGN, 78 .type = IIO_MAGN,
79 .modified = 1, 79 .modified = 1,
80 .channel2 = IIO_MOD_Z, 80 .channel2 = IIO_MOD_Z,
81 .info_mask = IIO_CHAN_INFO_OFFSET_SHARED_BIT | 81 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
82 IIO_CHAN_INFO_SCALE_SHARED_BIT | 82 BIT(IIO_CHAN_INFO_SCALE) |
83 IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT | 83 BIT(IIO_CHAN_INFO_SAMP_FREQ) |
84 IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT, 84 BIT(IIO_CHAN_INFO_HYSTERESIS),
85 .scan_index = CHANNEL_SCAN_INDEX_Z, 85 .scan_index = CHANNEL_SCAN_INDEX_Z,
86 } 86 }
87}; 87};
diff --git a/drivers/staging/iio/Kconfig b/drivers/staging/iio/Kconfig
index dc267175a2b5..db4d6dc03243 100644
--- a/drivers/staging/iio/Kconfig
+++ b/drivers/staging/iio/Kconfig
@@ -4,14 +4,6 @@
4menu "IIO staging drivers" 4menu "IIO staging drivers"
5 depends on IIO 5 depends on IIO
6 6
7config IIO_ST_HWMON
8 tristate "Hwmon driver that uses channels specified via iio maps"
9 depends on HWMON
10 help
11 This is a platform driver that in combination with a suitable
12 map allows IIO devices to provide basic hwmon functionality
13 for those channels specified in the map.
14
15source "drivers/staging/iio/accel/Kconfig" 7source "drivers/staging/iio/accel/Kconfig"
16source "drivers/staging/iio/adc/Kconfig" 8source "drivers/staging/iio/adc/Kconfig"
17source "drivers/staging/iio/addac/Kconfig" 9source "drivers/staging/iio/addac/Kconfig"
diff --git a/drivers/staging/iio/Makefile b/drivers/staging/iio/Makefile
index 158e0a017e7b..d87106135b27 100644
--- a/drivers/staging/iio/Makefile
+++ b/drivers/staging/iio/Makefile
@@ -9,8 +9,6 @@ iio_dummy-$(CONFIG_IIO_SIMPLE_DUMMY_BUFFER) += iio_simple_dummy_buffer.o
9 9
10obj-$(CONFIG_IIO_DUMMY_EVGEN) += iio_dummy_evgen.o 10obj-$(CONFIG_IIO_DUMMY_EVGEN) += iio_dummy_evgen.o
11 11
12obj-$(CONFIG_IIO_ST_HWMON) += iio_hwmon.o
13
14obj-y += accel/ 12obj-y += accel/
15obj-y += adc/ 13obj-y += adc/
16obj-y += addac/ 14obj-y += addac/
diff --git a/drivers/staging/iio/accel/adis16201_core.c b/drivers/staging/iio/accel/adis16201_core.c
index 9e5791ff2a04..ab8ec7af88b4 100644
--- a/drivers/staging/iio/accel/adis16201_core.c
+++ b/drivers/staging/iio/accel/adis16201_core.c
@@ -134,14 +134,14 @@ static const struct iio_chan_spec adis16201_channels[] = {
134 ADIS_SUPPLY_CHAN(ADIS16201_SUPPLY_OUT, ADIS16201_SCAN_SUPPLY, 12), 134 ADIS_SUPPLY_CHAN(ADIS16201_SUPPLY_OUT, ADIS16201_SCAN_SUPPLY, 12),
135 ADIS_TEMP_CHAN(ADIS16201_TEMP_OUT, ADIS16201_SCAN_TEMP, 12), 135 ADIS_TEMP_CHAN(ADIS16201_TEMP_OUT, ADIS16201_SCAN_TEMP, 12),
136 ADIS_ACCEL_CHAN(X, ADIS16201_XACCL_OUT, ADIS16201_SCAN_ACC_X, 136 ADIS_ACCEL_CHAN(X, ADIS16201_XACCL_OUT, ADIS16201_SCAN_ACC_X,
137 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, 14), 137 BIT(IIO_CHAN_INFO_CALIBBIAS), 14),
138 ADIS_ACCEL_CHAN(Y, ADIS16201_YACCL_OUT, ADIS16201_SCAN_ACC_Y, 138 ADIS_ACCEL_CHAN(Y, ADIS16201_YACCL_OUT, ADIS16201_SCAN_ACC_Y,
139 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, 14), 139 BIT(IIO_CHAN_INFO_CALIBBIAS), 14),
140 ADIS_AUX_ADC_CHAN(ADIS16201_AUX_ADC, ADIS16201_SCAN_AUX_ADC, 12), 140 ADIS_AUX_ADC_CHAN(ADIS16201_AUX_ADC, ADIS16201_SCAN_AUX_ADC, 12),
141 ADIS_INCLI_CHAN(X, ADIS16201_XINCL_OUT, ADIS16201_SCAN_INCLI_X, 141 ADIS_INCLI_CHAN(X, ADIS16201_XINCL_OUT, ADIS16201_SCAN_INCLI_X,
142 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, 14), 142 BIT(IIO_CHAN_INFO_CALIBBIAS), 14),
143 ADIS_INCLI_CHAN(X, ADIS16201_YINCL_OUT, ADIS16201_SCAN_INCLI_Y, 143 ADIS_INCLI_CHAN(X, ADIS16201_YINCL_OUT, ADIS16201_SCAN_INCLI_Y,
144 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, 14), 144 BIT(IIO_CHAN_INFO_CALIBBIAS), 14),
145 IIO_CHAN_SOFT_TIMESTAMP(7) 145 IIO_CHAN_SOFT_TIMESTAMP(7)
146}; 146};
147 147
diff --git a/drivers/staging/iio/accel/adis16203_core.c b/drivers/staging/iio/accel/adis16203_core.c
index 8c235273ff13..b08ac8fdeee2 100644
--- a/drivers/staging/iio/accel/adis16203_core.c
+++ b/drivers/staging/iio/accel/adis16203_core.c
@@ -102,7 +102,7 @@ static const struct iio_chan_spec adis16203_channels[] = {
102 ADIS_SUPPLY_CHAN(ADIS16203_SUPPLY_OUT, ADIS16203_SCAN_SUPPLY, 12), 102 ADIS_SUPPLY_CHAN(ADIS16203_SUPPLY_OUT, ADIS16203_SCAN_SUPPLY, 12),
103 ADIS_AUX_ADC_CHAN(ADIS16203_AUX_ADC, ADIS16203_SCAN_AUX_ADC, 12), 103 ADIS_AUX_ADC_CHAN(ADIS16203_AUX_ADC, ADIS16203_SCAN_AUX_ADC, 12),
104 ADIS_INCLI_CHAN(X, ADIS16203_XINCL_OUT, ADIS16203_SCAN_INCLI_X, 104 ADIS_INCLI_CHAN(X, ADIS16203_XINCL_OUT, ADIS16203_SCAN_INCLI_X,
105 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, 14), 105 BIT(IIO_CHAN_INFO_CALIBBIAS), 14),
106 /* Fixme: Not what it appears to be - see data sheet */ 106 /* Fixme: Not what it appears to be - see data sheet */
107 ADIS_INCLI_CHAN(Y, ADIS16203_YINCL_OUT, ADIS16203_SCAN_INCLI_Y, 0, 14), 107 ADIS_INCLI_CHAN(Y, ADIS16203_YINCL_OUT, ADIS16203_SCAN_INCLI_Y, 0, 14),
108 ADIS_TEMP_CHAN(ADIS16203_TEMP_OUT, ADIS16203_SCAN_TEMP, 12), 108 ADIS_TEMP_CHAN(ADIS16203_TEMP_OUT, ADIS16203_SCAN_TEMP, 12),
diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c
index f3592668e066..792ec25a50dc 100644
--- a/drivers/staging/iio/accel/adis16204_core.c
+++ b/drivers/staging/iio/accel/adis16204_core.c
@@ -140,13 +140,11 @@ static const struct iio_chan_spec adis16204_channels[] = {
140 ADIS_AUX_ADC_CHAN(ADIS16204_AUX_ADC, ADIS16204_SCAN_AUX_ADC, 12), 140 ADIS_AUX_ADC_CHAN(ADIS16204_AUX_ADC, ADIS16204_SCAN_AUX_ADC, 12),
141 ADIS_TEMP_CHAN(ADIS16204_TEMP_OUT, ADIS16204_SCAN_TEMP, 12), 141 ADIS_TEMP_CHAN(ADIS16204_TEMP_OUT, ADIS16204_SCAN_TEMP, 12),
142 ADIS_ACCEL_CHAN(X, ADIS16204_XACCL_OUT, ADIS16204_SCAN_ACC_X, 142 ADIS_ACCEL_CHAN(X, ADIS16204_XACCL_OUT, ADIS16204_SCAN_ACC_X,
143 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | 143 BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 14),
144 IIO_CHAN_INFO_PEAK_SEPARATE_BIT, 14),
145 ADIS_ACCEL_CHAN(Y, ADIS16204_YACCL_OUT, ADIS16204_SCAN_ACC_Y, 144 ADIS_ACCEL_CHAN(Y, ADIS16204_YACCL_OUT, ADIS16204_SCAN_ACC_Y,
146 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | 145 BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 14),
147 IIO_CHAN_INFO_PEAK_SEPARATE_BIT, 14),
148 ADIS_ACCEL_CHAN(ROOT_SUM_SQUARED_X_Y, ADIS16204_XY_RSS_OUT, 146 ADIS_ACCEL_CHAN(ROOT_SUM_SQUARED_X_Y, ADIS16204_XY_RSS_OUT,
149 ADIS16204_SCAN_ACC_XY, IIO_CHAN_INFO_PEAK_SEPARATE_BIT, 14), 147 ADIS16204_SCAN_ACC_XY, BIT(IIO_CHAN_INFO_PEAK), 14),
150 IIO_CHAN_SOFT_TIMESTAMP(5), 148 IIO_CHAN_SOFT_TIMESTAMP(5),
151}; 149};
152 150
diff --git a/drivers/staging/iio/accel/adis16209_core.c b/drivers/staging/iio/accel/adis16209_core.c
index 69c50ee44ce3..323c169d699c 100644
--- a/drivers/staging/iio/accel/adis16209_core.c
+++ b/drivers/staging/iio/accel/adis16209_core.c
@@ -133,9 +133,9 @@ static const struct iio_chan_spec adis16209_channels[] = {
133 ADIS_SUPPLY_CHAN(ADIS16209_SUPPLY_OUT, ADIS16209_SCAN_SUPPLY, 14), 133 ADIS_SUPPLY_CHAN(ADIS16209_SUPPLY_OUT, ADIS16209_SCAN_SUPPLY, 14),
134 ADIS_TEMP_CHAN(ADIS16209_TEMP_OUT, ADIS16209_SCAN_TEMP, 12), 134 ADIS_TEMP_CHAN(ADIS16209_TEMP_OUT, ADIS16209_SCAN_TEMP, 12),
135 ADIS_ACCEL_CHAN(X, ADIS16209_XACCL_OUT, ADIS16209_SCAN_ACC_X, 135 ADIS_ACCEL_CHAN(X, ADIS16209_XACCL_OUT, ADIS16209_SCAN_ACC_X,
136 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, 14), 136 BIT(IIO_CHAN_INFO_CALIBBIAS), 14),
137 ADIS_ACCEL_CHAN(Y, ADIS16209_YACCL_OUT, ADIS16209_SCAN_ACC_Y, 137 ADIS_ACCEL_CHAN(Y, ADIS16209_YACCL_OUT, ADIS16209_SCAN_ACC_Y,
138 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, 14), 138 BIT(IIO_CHAN_INFO_CALIBBIAS), 14),
139 ADIS_AUX_ADC_CHAN(ADIS16209_AUX_ADC, ADIS16209_SCAN_AUX_ADC, 12), 139 ADIS_AUX_ADC_CHAN(ADIS16209_AUX_ADC, ADIS16209_SCAN_AUX_ADC, 12),
140 ADIS_INCLI_CHAN(X, ADIS16209_XINCL_OUT, ADIS16209_SCAN_INCLI_X, 0, 14), 140 ADIS_INCLI_CHAN(X, ADIS16209_XINCL_OUT, ADIS16209_SCAN_INCLI_X, 0, 14),
141 ADIS_INCLI_CHAN(Y, ADIS16209_YINCL_OUT, ADIS16209_SCAN_INCLI_Y, 0, 14), 141 ADIS_INCLI_CHAN(Y, ADIS16209_YINCL_OUT, ADIS16209_SCAN_INCLI_Y, 0, 14),
diff --git a/drivers/staging/iio/accel/adis16220_core.c b/drivers/staging/iio/accel/adis16220_core.c
index 370b01aa767a..0e72f795ed09 100644
--- a/drivers/staging/iio/accel/adis16220_core.c
+++ b/drivers/staging/iio/accel/adis16220_core.c
@@ -344,37 +344,37 @@ static const struct iio_chan_spec adis16220_channels[] = {
344 .indexed = 1, 344 .indexed = 1,
345 .channel = 0, 345 .channel = 0,
346 .extend_name = "supply", 346 .extend_name = "supply",
347 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 347 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
348 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 348 BIT(IIO_CHAN_INFO_SCALE),
349 .address = in_supply, 349 .address = in_supply,
350 }, { 350 }, {
351 .type = IIO_ACCEL, 351 .type = IIO_ACCEL,
352 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 352 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
353 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | 353 BIT(IIO_CHAN_INFO_OFFSET) |
354 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | 354 BIT(IIO_CHAN_INFO_SCALE) |
355 IIO_CHAN_INFO_PEAK_SEPARATE_BIT, 355 BIT(IIO_CHAN_INFO_PEAK),
356 .address = accel, 356 .address = accel,
357 }, { 357 }, {
358 .type = IIO_TEMP, 358 .type = IIO_TEMP,
359 .indexed = 1, 359 .indexed = 1,
360 .channel = 0, 360 .channel = 0,
361 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 361 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
362 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | 362 BIT(IIO_CHAN_INFO_OFFSET) |
363 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 363 BIT(IIO_CHAN_INFO_SCALE),
364 .address = temp, 364 .address = temp,
365 }, { 365 }, {
366 .type = IIO_VOLTAGE, 366 .type = IIO_VOLTAGE,
367 .indexed = 1, 367 .indexed = 1,
368 .channel = 1, 368 .channel = 1,
369 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 369 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
370 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | 370 BIT(IIO_CHAN_INFO_OFFSET) |
371 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 371 BIT(IIO_CHAN_INFO_SCALE),
372 .address = in_1, 372 .address = in_1,
373 }, { 373 }, {
374 .type = IIO_VOLTAGE, 374 .type = IIO_VOLTAGE,
375 .indexed = 1, 375 .indexed = 1,
376 .channel = 2, 376 .channel = 2,
377 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 377 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
378 .address = in_2, 378 .address = in_2,
379 } 379 }
380}; 380};
diff --git a/drivers/staging/iio/accel/adis16240_core.c b/drivers/staging/iio/accel/adis16240_core.c
index e97fa0b0233d..fd1f0fd0fba8 100644
--- a/drivers/staging/iio/accel/adis16240_core.c
+++ b/drivers/staging/iio/accel/adis16240_core.c
@@ -176,14 +176,11 @@ static const struct iio_chan_spec adis16240_channels[] = {
176 ADIS_SUPPLY_CHAN(ADIS16240_SUPPLY_OUT, ADIS16240_SCAN_SUPPLY, 10), 176 ADIS_SUPPLY_CHAN(ADIS16240_SUPPLY_OUT, ADIS16240_SCAN_SUPPLY, 10),
177 ADIS_AUX_ADC_CHAN(ADIS16240_AUX_ADC, ADIS16240_SCAN_AUX_ADC, 10), 177 ADIS_AUX_ADC_CHAN(ADIS16240_AUX_ADC, ADIS16240_SCAN_AUX_ADC, 10),
178 ADIS_ACCEL_CHAN(X, ADIS16240_XACCL_OUT, ADIS16240_SCAN_ACC_X, 178 ADIS_ACCEL_CHAN(X, ADIS16240_XACCL_OUT, ADIS16240_SCAN_ACC_X,
179 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | 179 BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 10),
180 IIO_CHAN_INFO_PEAK_SEPARATE_BIT, 10),
181 ADIS_ACCEL_CHAN(Y, ADIS16240_YACCL_OUT, ADIS16240_SCAN_ACC_Y, 180 ADIS_ACCEL_CHAN(Y, ADIS16240_YACCL_OUT, ADIS16240_SCAN_ACC_Y,
182 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | 181 BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 10),
183 IIO_CHAN_INFO_PEAK_SEPARATE_BIT, 10),
184 ADIS_ACCEL_CHAN(Z, ADIS16240_ZACCL_OUT, ADIS16240_SCAN_ACC_Z, 182 ADIS_ACCEL_CHAN(Z, ADIS16240_ZACCL_OUT, ADIS16240_SCAN_ACC_Z,
185 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | 183 BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 10),
186 IIO_CHAN_INFO_PEAK_SEPARATE_BIT, 10),
187 ADIS_TEMP_CHAN(ADIS16240_TEMP_OUT, ADIS16240_SCAN_TEMP, 10), 184 ADIS_TEMP_CHAN(ADIS16240_TEMP_OUT, ADIS16240_SCAN_TEMP, 10),
188 IIO_CHAN_SOFT_TIMESTAMP(6) 185 IIO_CHAN_SOFT_TIMESTAMP(6)
189}; 186};
diff --git a/drivers/staging/iio/accel/lis3l02dq_core.c b/drivers/staging/iio/accel/lis3l02dq_core.c
index 0e019306439c..1bfe5d81792b 100644
--- a/drivers/staging/iio/accel/lis3l02dq_core.c
+++ b/drivers/staging/iio/accel/lis3l02dq_core.c
@@ -501,12 +501,6 @@ static irqreturn_t lis3l02dq_event_handler(int irq, void *private)
501 return IRQ_HANDLED; 501 return IRQ_HANDLED;
502} 502}
503 503
504#define LIS3L02DQ_INFO_MASK \
505 (IIO_CHAN_INFO_RAW_SEPARATE_BIT | \
506 IIO_CHAN_INFO_SCALE_SHARED_BIT | \
507 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | \
508 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT)
509
510#define LIS3L02DQ_EVENT_MASK \ 504#define LIS3L02DQ_EVENT_MASK \
511 (IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) | \ 505 (IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) | \
512 IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING)) 506 IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING))
@@ -516,7 +510,10 @@ static irqreturn_t lis3l02dq_event_handler(int irq, void *private)
516 .type = IIO_ACCEL, \ 510 .type = IIO_ACCEL, \
517 .modified = 1, \ 511 .modified = 1, \
518 .channel2 = mod, \ 512 .channel2 = mod, \
519 .info_mask = LIS3L02DQ_INFO_MASK, \ 513 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
514 BIT(IIO_CHAN_INFO_CALIBSCALE) | \
515 BIT(IIO_CHAN_INFO_CALIBBIAS), \
516 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
520 .address = index, \ 517 .address = index, \
521 .scan_index = index, \ 518 .scan_index = index, \
522 .scan_type = { \ 519 .scan_type = { \
diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c
index 14683f583ccf..32950ad94857 100644
--- a/drivers/staging/iio/accel/sca3000_core.c
+++ b/drivers/staging/iio/accel/sca3000_core.c
@@ -419,8 +419,6 @@ static IIO_DEVICE_ATTR(measurement_mode, S_IRUGO | S_IWUSR,
419 419
420static IIO_DEVICE_ATTR(revision, S_IRUGO, sca3000_show_rev, NULL, 0); 420static IIO_DEVICE_ATTR(revision, S_IRUGO, sca3000_show_rev, NULL, 0);
421 421
422#define SCA3000_INFO_MASK \
423 IIO_CHAN_INFO_RAW_SEPARATE_BIT | IIO_CHAN_INFO_SCALE_SHARED_BIT
424#define SCA3000_EVENT_MASK \ 422#define SCA3000_EVENT_MASK \
425 (IIO_EV_BIT(IIO_EV_TYPE_MAG, IIO_EV_DIR_RISING)) 423 (IIO_EV_BIT(IIO_EV_TYPE_MAG, IIO_EV_DIR_RISING))
426 424
@@ -429,7 +427,8 @@ static IIO_DEVICE_ATTR(revision, S_IRUGO, sca3000_show_rev, NULL, 0);
429 .type = IIO_ACCEL, \ 427 .type = IIO_ACCEL, \
430 .modified = 1, \ 428 .modified = 1, \
431 .channel2 = mod, \ 429 .channel2 = mod, \
432 .info_mask = SCA3000_INFO_MASK, \ 430 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
431 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),\
433 .address = index, \ 432 .address = index, \
434 .scan_index = index, \ 433 .scan_index = index, \
435 .scan_type = { \ 434 .scan_type = { \
diff --git a/drivers/staging/iio/adc/Kconfig b/drivers/staging/iio/adc/Kconfig
index 7b2a01d64f5e..d990829008ff 100644
--- a/drivers/staging/iio/adc/Kconfig
+++ b/drivers/staging/iio/adc/Kconfig
@@ -90,13 +90,6 @@ config AD7192
90 To compile this driver as a module, choose M here: the 90 To compile this driver as a module, choose M here: the
91 module will be called ad7192. 91 module will be called ad7192.
92 92
93config ADT7410
94 tristate "Analog Devices ADT7310/ADT7410 temperature sensor driver"
95 depends on I2C || SPI_MASTER
96 help
97 Say yes here to build support for Analog Devices ADT7310/ADT7410
98 temperature sensors.
99
100config AD7280 93config AD7280
101 tristate "Analog Devices AD7280A Lithium Ion Battery Monitoring System" 94 tristate "Analog Devices AD7280A Lithium Ion Battery Monitoring System"
102 depends on SPI 95 depends on SPI
diff --git a/drivers/staging/iio/adc/Makefile b/drivers/staging/iio/adc/Makefile
index d285596272a0..3e9fb143d25b 100644
--- a/drivers/staging/iio/adc/Makefile
+++ b/drivers/staging/iio/adc/Makefile
@@ -16,7 +16,6 @@ obj-$(CONFIG_AD7291) += ad7291.o
16obj-$(CONFIG_AD7780) += ad7780.o 16obj-$(CONFIG_AD7780) += ad7780.o
17obj-$(CONFIG_AD7816) += ad7816.o 17obj-$(CONFIG_AD7816) += ad7816.o
18obj-$(CONFIG_AD7192) += ad7192.o 18obj-$(CONFIG_AD7192) += ad7192.o
19obj-$(CONFIG_ADT7410) += adt7410.o
20obj-$(CONFIG_AD7280) += ad7280a.o 19obj-$(CONFIG_AD7280) += ad7280a.o
21obj-$(CONFIG_LPC32XX_ADC) += lpc32xx_adc.o 20obj-$(CONFIG_LPC32XX_ADC) += lpc32xx_adc.o
22obj-$(CONFIG_MXS_LRADC) += mxs-lradc.o 21obj-$(CONFIG_MXS_LRADC) += mxs-lradc.o
diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c
index 1f190c1b12a6..2fd6ee3c1902 100644
--- a/drivers/staging/iio/adc/ad7280a.c
+++ b/drivers/staging/iio/adc/ad7280a.c
@@ -503,9 +503,10 @@ static int ad7280_channel_init(struct ad7280_state *st)
503 st->channels[cnt].channel = (dev * 6) + ch - 6; 503 st->channels[cnt].channel = (dev * 6) + ch - 6;
504 } 504 }
505 st->channels[cnt].indexed = 1; 505 st->channels[cnt].indexed = 1;
506 st->channels[cnt].info_mask = 506 st->channels[cnt].info_mask_separate =
507 IIO_CHAN_INFO_RAW_SEPARATE_BIT | 507 BIT(IIO_CHAN_INFO_RAW);
508 IIO_CHAN_INFO_SCALE_SHARED_BIT; 508 st->channels[cnt].info_mask_shared_by_type =
509 BIT(IIO_CHAN_INFO_SCALE);
509 st->channels[cnt].address = 510 st->channels[cnt].address =
510 AD7280A_DEVADDR(dev) << 8 | ch; 511 AD7280A_DEVADDR(dev) << 8 | ch;
511 st->channels[cnt].scan_index = cnt; 512 st->channels[cnt].scan_index = cnt;
@@ -521,9 +522,8 @@ static int ad7280_channel_init(struct ad7280_state *st)
521 st->channels[cnt].channel2 = dev * 6; 522 st->channels[cnt].channel2 = dev * 6;
522 st->channels[cnt].address = AD7280A_ALL_CELLS; 523 st->channels[cnt].address = AD7280A_ALL_CELLS;
523 st->channels[cnt].indexed = 1; 524 st->channels[cnt].indexed = 1;
524 st->channels[cnt].info_mask = 525 st->channels[cnt].info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
525 IIO_CHAN_INFO_RAW_SEPARATE_BIT | 526 st->channels[cnt].info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE);
526 IIO_CHAN_INFO_SCALE_SHARED_BIT;
527 st->channels[cnt].scan_index = cnt; 527 st->channels[cnt].scan_index = cnt;
528 st->channels[cnt].scan_type.sign = 'u'; 528 st->channels[cnt].scan_type.sign = 'u';
529 st->channels[cnt].scan_type.realbits = 32; 529 st->channels[cnt].scan_type.realbits = 32;
diff --git a/drivers/staging/iio/adc/ad7291.c b/drivers/staging/iio/adc/ad7291.c
index 6e58e36d242c..d088c662d5cd 100644
--- a/drivers/staging/iio/adc/ad7291.c
+++ b/drivers/staging/iio/adc/ad7291.c
@@ -536,8 +536,8 @@ static int ad7291_read_raw(struct iio_dev *indio_dev,
536#define AD7291_VOLTAGE_CHAN(_chan) \ 536#define AD7291_VOLTAGE_CHAN(_chan) \
537{ \ 537{ \
538 .type = IIO_VOLTAGE, \ 538 .type = IIO_VOLTAGE, \
539 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 539 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
540 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 540 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
541 .indexed = 1, \ 541 .indexed = 1, \
542 .channel = _chan, \ 542 .channel = _chan, \
543 .event_mask = IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING)|\ 543 .event_mask = IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING)|\
@@ -555,9 +555,9 @@ static const struct iio_chan_spec ad7291_channels[] = {
555 AD7291_VOLTAGE_CHAN(7), 555 AD7291_VOLTAGE_CHAN(7),
556 { 556 {
557 .type = IIO_TEMP, 557 .type = IIO_TEMP,
558 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 558 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
559 IIO_CHAN_INFO_AVERAGE_RAW_SEPARATE_BIT | 559 BIT(IIO_CHAN_INFO_AVERAGE_RAW) |
560 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 560 BIT(IIO_CHAN_INFO_SCALE),
561 .indexed = 1, 561 .indexed = 1,
562 .channel = 0, 562 .channel = 0,
563 .event_mask = 563 .event_mask =
diff --git a/drivers/staging/iio/adc/ad7606_core.c b/drivers/staging/iio/adc/ad7606_core.c
index bae61cbe9212..d104b4378424 100644
--- a/drivers/staging/iio/adc/ad7606_core.c
+++ b/drivers/staging/iio/adc/ad7606_core.c
@@ -235,8 +235,8 @@ static const struct attribute_group ad7606_attribute_group_range = {
235 .indexed = 1, \ 235 .indexed = 1, \
236 .channel = num, \ 236 .channel = num, \
237 .address = num, \ 237 .address = num, \
238 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 238 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
239 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 239 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),\
240 .scan_index = num, \ 240 .scan_index = num, \
241 .scan_type = IIO_ST('s', 16, 16, 0), \ 241 .scan_type = IIO_ST('s', 16, 16, 0), \
242 } 242 }
diff --git a/drivers/staging/iio/adc/ad799x_core.c b/drivers/staging/iio/adc/ad799x_core.c
index 077eedbd0a0c..40cc89abe3c3 100644
--- a/drivers/staging/iio/adc/ad799x_core.c
+++ b/drivers/staging/iio/adc/ad799x_core.c
@@ -467,7 +467,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
467 .type = IIO_VOLTAGE, 467 .type = IIO_VOLTAGE,
468 .indexed = 1, 468 .indexed = 1,
469 .channel = 0, 469 .channel = 0,
470 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 470 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
471 .scan_index = 0, 471 .scan_index = 0,
472 .scan_type = IIO_ST('u', 12, 16, 0), 472 .scan_type = IIO_ST('u', 12, 16, 0),
473 }, 473 },
@@ -475,7 +475,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
475 .type = IIO_VOLTAGE, 475 .type = IIO_VOLTAGE,
476 .indexed = 1, 476 .indexed = 1,
477 .channel = 1, 477 .channel = 1,
478 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 478 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
479 .scan_index = 1, 479 .scan_index = 1,
480 .scan_type = IIO_ST('u', 12, 16, 0), 480 .scan_type = IIO_ST('u', 12, 16, 0),
481 }, 481 },
@@ -483,7 +483,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
483 .type = IIO_VOLTAGE, 483 .type = IIO_VOLTAGE,
484 .indexed = 1, 484 .indexed = 1,
485 .channel = 2, 485 .channel = 2,
486 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 486 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
487 .scan_index = 2, 487 .scan_index = 2,
488 .scan_type = IIO_ST('u', 12, 16, 0), 488 .scan_type = IIO_ST('u', 12, 16, 0),
489 }, 489 },
@@ -491,7 +491,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
491 .type = IIO_VOLTAGE, 491 .type = IIO_VOLTAGE,
492 .indexed = 1, 492 .indexed = 1,
493 .channel = 3, 493 .channel = 3,
494 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 494 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
495 .scan_index = 3, 495 .scan_index = 3,
496 .scan_type = IIO_ST('u', 12, 16, 0), 496 .scan_type = IIO_ST('u', 12, 16, 0),
497 }, 497 },
@@ -507,7 +507,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
507 .type = IIO_VOLTAGE, 507 .type = IIO_VOLTAGE,
508 .indexed = 1, 508 .indexed = 1,
509 .channel = 0, 509 .channel = 0,
510 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 510 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
511 .scan_index = 0, 511 .scan_index = 0,
512 .scan_type = IIO_ST('u', 10, 16, 2), 512 .scan_type = IIO_ST('u', 10, 16, 2),
513 }, 513 },
@@ -515,7 +515,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
515 .type = IIO_VOLTAGE, 515 .type = IIO_VOLTAGE,
516 .indexed = 1, 516 .indexed = 1,
517 .channel = 1, 517 .channel = 1,
518 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 518 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
519 .scan_index = 1, 519 .scan_index = 1,
520 .scan_type = IIO_ST('u', 10, 16, 2), 520 .scan_type = IIO_ST('u', 10, 16, 2),
521 }, 521 },
@@ -523,7 +523,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
523 .type = IIO_VOLTAGE, 523 .type = IIO_VOLTAGE,
524 .indexed = 1, 524 .indexed = 1,
525 .channel = 2, 525 .channel = 2,
526 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 526 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
527 .scan_index = 2, 527 .scan_index = 2,
528 .scan_type = IIO_ST('u', 10, 16, 2), 528 .scan_type = IIO_ST('u', 10, 16, 2),
529 }, 529 },
@@ -531,7 +531,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
531 .type = IIO_VOLTAGE, 531 .type = IIO_VOLTAGE,
532 .indexed = 1, 532 .indexed = 1,
533 .channel = 3, 533 .channel = 3,
534 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 534 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
535 .scan_index = 3, 535 .scan_index = 3,
536 .scan_type = IIO_ST('u', 10, 16, 2), 536 .scan_type = IIO_ST('u', 10, 16, 2),
537 }, 537 },
@@ -547,7 +547,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
547 .type = IIO_VOLTAGE, 547 .type = IIO_VOLTAGE,
548 .indexed = 1, 548 .indexed = 1,
549 .channel = 0, 549 .channel = 0,
550 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 550 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
551 .scan_index = 0, 551 .scan_index = 0,
552 .scan_type = IIO_ST('u', 8, 16, 4), 552 .scan_type = IIO_ST('u', 8, 16, 4),
553 }, 553 },
@@ -555,7 +555,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
555 .type = IIO_VOLTAGE, 555 .type = IIO_VOLTAGE,
556 .indexed = 1, 556 .indexed = 1,
557 .channel = 1, 557 .channel = 1,
558 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 558 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
559 .scan_index = 1, 559 .scan_index = 1,
560 .scan_type = IIO_ST('u', 8, 16, 4), 560 .scan_type = IIO_ST('u', 8, 16, 4),
561 }, 561 },
@@ -563,7 +563,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
563 .type = IIO_VOLTAGE, 563 .type = IIO_VOLTAGE,
564 .indexed = 1, 564 .indexed = 1,
565 .channel = 2, 565 .channel = 2,
566 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 566 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
567 .scan_index = 2, 567 .scan_index = 2,
568 .scan_type = IIO_ST('u', 8, 16, 4), 568 .scan_type = IIO_ST('u', 8, 16, 4),
569 }, 569 },
@@ -571,7 +571,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
571 .type = IIO_VOLTAGE, 571 .type = IIO_VOLTAGE,
572 .indexed = 1, 572 .indexed = 1,
573 .channel = 3, 573 .channel = 3,
574 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 574 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
575 .scan_index = 3, 575 .scan_index = 3,
576 .scan_type = IIO_ST('u', 8, 16, 4), 576 .scan_type = IIO_ST('u', 8, 16, 4),
577 }, 577 },
@@ -587,7 +587,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
587 .type = IIO_VOLTAGE, 587 .type = IIO_VOLTAGE,
588 .indexed = 1, 588 .indexed = 1,
589 .channel = 0, 589 .channel = 0,
590 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 590 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
591 .scan_index = 0, 591 .scan_index = 0,
592 .scan_type = IIO_ST('u', 12, 16, 0), 592 .scan_type = IIO_ST('u', 12, 16, 0),
593 .event_mask = AD799X_EV_MASK, 593 .event_mask = AD799X_EV_MASK,
@@ -596,7 +596,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
596 .type = IIO_VOLTAGE, 596 .type = IIO_VOLTAGE,
597 .indexed = 1, 597 .indexed = 1,
598 .channel = 1, 598 .channel = 1,
599 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 599 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
600 .scan_index = 1, 600 .scan_index = 1,
601 .scan_type = IIO_ST('u', 12, 16, 0), 601 .scan_type = IIO_ST('u', 12, 16, 0),
602 .event_mask = AD799X_EV_MASK, 602 .event_mask = AD799X_EV_MASK,
@@ -614,7 +614,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
614 .type = IIO_VOLTAGE, 614 .type = IIO_VOLTAGE,
615 .indexed = 1, 615 .indexed = 1,
616 .channel = 0, 616 .channel = 0,
617 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 617 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
618 .scan_index = 0, 618 .scan_index = 0,
619 .scan_type = IIO_ST('u', 10, 16, 2), 619 .scan_type = IIO_ST('u', 10, 16, 2),
620 .event_mask = AD799X_EV_MASK, 620 .event_mask = AD799X_EV_MASK,
@@ -624,7 +624,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
624 .indexed = 1, 624 .indexed = 1,
625 .channel = 1, 625 .channel = 1,
626 .scan_index = 1, 626 .scan_index = 1,
627 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 627 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
628 .scan_type = IIO_ST('u', 10, 16, 2), 628 .scan_type = IIO_ST('u', 10, 16, 2),
629 .event_mask = AD799X_EV_MASK, 629 .event_mask = AD799X_EV_MASK,
630 }, 630 },
@@ -632,7 +632,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
632 .type = IIO_VOLTAGE, 632 .type = IIO_VOLTAGE,
633 .indexed = 1, 633 .indexed = 1,
634 .channel = 2, 634 .channel = 2,
635 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 635 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
636 .scan_index = 2, 636 .scan_index = 2,
637 .scan_type = IIO_ST('u', 10, 16, 2), 637 .scan_type = IIO_ST('u', 10, 16, 2),
638 .event_mask = AD799X_EV_MASK, 638 .event_mask = AD799X_EV_MASK,
@@ -641,7 +641,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
641 .type = IIO_VOLTAGE, 641 .type = IIO_VOLTAGE,
642 .indexed = 1, 642 .indexed = 1,
643 .channel = 3, 643 .channel = 3,
644 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 644 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
645 .scan_index = 3, 645 .scan_index = 3,
646 .scan_type = IIO_ST('u', 10, 16, 2), 646 .scan_type = IIO_ST('u', 10, 16, 2),
647 .event_mask = AD799X_EV_MASK, 647 .event_mask = AD799X_EV_MASK,
@@ -659,7 +659,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
659 .type = IIO_VOLTAGE, 659 .type = IIO_VOLTAGE,
660 .indexed = 1, 660 .indexed = 1,
661 .channel = 0, 661 .channel = 0,
662 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 662 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
663 .scan_index = 0, 663 .scan_index = 0,
664 .scan_type = IIO_ST('u', 12, 16, 0), 664 .scan_type = IIO_ST('u', 12, 16, 0),
665 .event_mask = AD799X_EV_MASK, 665 .event_mask = AD799X_EV_MASK,
@@ -668,7 +668,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
668 .type = IIO_VOLTAGE, 668 .type = IIO_VOLTAGE,
669 .indexed = 1, 669 .indexed = 1,
670 .channel = 1, 670 .channel = 1,
671 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 671 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
672 .scan_index = 1, 672 .scan_index = 1,
673 .scan_type = IIO_ST('u', 12, 16, 0), 673 .scan_type = IIO_ST('u', 12, 16, 0),
674 .event_mask = AD799X_EV_MASK, 674 .event_mask = AD799X_EV_MASK,
@@ -677,7 +677,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
677 .type = IIO_VOLTAGE, 677 .type = IIO_VOLTAGE,
678 .indexed = 1, 678 .indexed = 1,
679 .channel = 2, 679 .channel = 2,
680 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 680 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
681 .scan_index = 2, 681 .scan_index = 2,
682 .scan_type = IIO_ST('u', 12, 16, 0), 682 .scan_type = IIO_ST('u', 12, 16, 0),
683 .event_mask = AD799X_EV_MASK, 683 .event_mask = AD799X_EV_MASK,
@@ -686,7 +686,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
686 .type = IIO_VOLTAGE, 686 .type = IIO_VOLTAGE,
687 .indexed = 1, 687 .indexed = 1,
688 .channel = 3, 688 .channel = 3,
689 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 689 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
690 .scan_index = 3, 690 .scan_index = 3,
691 .scan_type = IIO_ST('u', 12, 16, 0), 691 .scan_type = IIO_ST('u', 12, 16, 0),
692 .event_mask = AD799X_EV_MASK, 692 .event_mask = AD799X_EV_MASK,
@@ -704,7 +704,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
704 .type = IIO_VOLTAGE, 704 .type = IIO_VOLTAGE,
705 .indexed = 1, 705 .indexed = 1,
706 .channel = 0, 706 .channel = 0,
707 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 707 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
708 .scan_index = 0, 708 .scan_index = 0,
709 .scan_type = IIO_ST('u', 10, 16, 2), 709 .scan_type = IIO_ST('u', 10, 16, 2),
710 .event_mask = AD799X_EV_MASK, 710 .event_mask = AD799X_EV_MASK,
@@ -713,7 +713,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
713 .type = IIO_VOLTAGE, 713 .type = IIO_VOLTAGE,
714 .indexed = 1, 714 .indexed = 1,
715 .channel = 1, 715 .channel = 1,
716 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 716 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
717 .scan_index = 1, 717 .scan_index = 1,
718 .scan_type = IIO_ST('u', 10, 16, 2), 718 .scan_type = IIO_ST('u', 10, 16, 2),
719 .event_mask = AD799X_EV_MASK, 719 .event_mask = AD799X_EV_MASK,
@@ -722,7 +722,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
722 .type = IIO_VOLTAGE, 722 .type = IIO_VOLTAGE,
723 .indexed = 1, 723 .indexed = 1,
724 .channel = 2, 724 .channel = 2,
725 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 725 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
726 .scan_index = 2, 726 .scan_index = 2,
727 .scan_type = IIO_ST('u', 10, 16, 2), 727 .scan_type = IIO_ST('u', 10, 16, 2),
728 .event_mask = AD799X_EV_MASK, 728 .event_mask = AD799X_EV_MASK,
@@ -731,7 +731,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
731 .type = IIO_VOLTAGE, 731 .type = IIO_VOLTAGE,
732 .indexed = 1, 732 .indexed = 1,
733 .channel = 3, 733 .channel = 3,
734 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 734 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
735 .scan_index = 3, 735 .scan_index = 3,
736 .scan_type = IIO_ST('u', 10, 16, 2), 736 .scan_type = IIO_ST('u', 10, 16, 2),
737 .event_mask = AD799X_EV_MASK, 737 .event_mask = AD799X_EV_MASK,
@@ -740,7 +740,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
740 .type = IIO_VOLTAGE, 740 .type = IIO_VOLTAGE,
741 .indexed = 1, 741 .indexed = 1,
742 .channel = 4, 742 .channel = 4,
743 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 743 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
744 .scan_index = 4, 744 .scan_index = 4,
745 .scan_type = IIO_ST('u', 10, 16, 2), 745 .scan_type = IIO_ST('u', 10, 16, 2),
746 }, 746 },
@@ -748,7 +748,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
748 .type = IIO_VOLTAGE, 748 .type = IIO_VOLTAGE,
749 .indexed = 1, 749 .indexed = 1,
750 .channel = 5, 750 .channel = 5,
751 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 751 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
752 .scan_index = 5, 752 .scan_index = 5,
753 .scan_type = IIO_ST('u', 10, 16, 2), 753 .scan_type = IIO_ST('u', 10, 16, 2),
754 }, 754 },
@@ -756,7 +756,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
756 .type = IIO_VOLTAGE, 756 .type = IIO_VOLTAGE,
757 .indexed = 1, 757 .indexed = 1,
758 .channel = 6, 758 .channel = 6,
759 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 759 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
760 .scan_index = 6, 760 .scan_index = 6,
761 .scan_type = IIO_ST('u', 10, 16, 2), 761 .scan_type = IIO_ST('u', 10, 16, 2),
762 }, 762 },
@@ -764,7 +764,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
764 .type = IIO_VOLTAGE, 764 .type = IIO_VOLTAGE,
765 .indexed = 1, 765 .indexed = 1,
766 .channel = 7, 766 .channel = 7,
767 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 767 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
768 .scan_index = 7, 768 .scan_index = 7,
769 .scan_type = IIO_ST('u', 10, 16, 2), 769 .scan_type = IIO_ST('u', 10, 16, 2),
770 }, 770 },
@@ -781,7 +781,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
781 .type = IIO_VOLTAGE, 781 .type = IIO_VOLTAGE,
782 .indexed = 1, 782 .indexed = 1,
783 .channel = 0, 783 .channel = 0,
784 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 784 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
785 .scan_index = 0, 785 .scan_index = 0,
786 .scan_type = IIO_ST('u', 12, 16, 0), 786 .scan_type = IIO_ST('u', 12, 16, 0),
787 .event_mask = AD799X_EV_MASK, 787 .event_mask = AD799X_EV_MASK,
@@ -790,7 +790,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
790 .type = IIO_VOLTAGE, 790 .type = IIO_VOLTAGE,
791 .indexed = 1, 791 .indexed = 1,
792 .channel = 1, 792 .channel = 1,
793 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 793 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
794 .scan_index = 1, 794 .scan_index = 1,
795 .scan_type = IIO_ST('u', 12, 16, 0), 795 .scan_type = IIO_ST('u', 12, 16, 0),
796 .event_mask = AD799X_EV_MASK, 796 .event_mask = AD799X_EV_MASK,
@@ -799,7 +799,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
799 .type = IIO_VOLTAGE, 799 .type = IIO_VOLTAGE,
800 .indexed = 1, 800 .indexed = 1,
801 .channel = 2, 801 .channel = 2,
802 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 802 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
803 .scan_index = 2, 803 .scan_index = 2,
804 .scan_type = IIO_ST('u', 12, 16, 0), 804 .scan_type = IIO_ST('u', 12, 16, 0),
805 .event_mask = AD799X_EV_MASK, 805 .event_mask = AD799X_EV_MASK,
@@ -808,7 +808,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
808 .type = IIO_VOLTAGE, 808 .type = IIO_VOLTAGE,
809 .indexed = 1, 809 .indexed = 1,
810 .channel = 3, 810 .channel = 3,
811 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 811 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
812 .scan_index = 3, 812 .scan_index = 3,
813 .scan_type = IIO_ST('u', 12, 16, 0), 813 .scan_type = IIO_ST('u', 12, 16, 0),
814 .event_mask = AD799X_EV_MASK, 814 .event_mask = AD799X_EV_MASK,
@@ -817,7 +817,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
817 .type = IIO_VOLTAGE, 817 .type = IIO_VOLTAGE,
818 .indexed = 1, 818 .indexed = 1,
819 .channel = 4, 819 .channel = 4,
820 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 820 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
821 .scan_index = 4, 821 .scan_index = 4,
822 .scan_type = IIO_ST('u', 12, 16, 0), 822 .scan_type = IIO_ST('u', 12, 16, 0),
823 }, 823 },
@@ -825,7 +825,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
825 .type = IIO_VOLTAGE, 825 .type = IIO_VOLTAGE,
826 .indexed = 1, 826 .indexed = 1,
827 .channel = 5, 827 .channel = 5,
828 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 828 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
829 .scan_index = 5, 829 .scan_index = 5,
830 .scan_type = IIO_ST('u', 12, 16, 0), 830 .scan_type = IIO_ST('u', 12, 16, 0),
831 }, 831 },
@@ -833,7 +833,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
833 .type = IIO_VOLTAGE, 833 .type = IIO_VOLTAGE,
834 .indexed = 1, 834 .indexed = 1,
835 .channel = 6, 835 .channel = 6,
836 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 836 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
837 .scan_index = 6, 837 .scan_index = 6,
838 .scan_type = IIO_ST('u', 12, 16, 0), 838 .scan_type = IIO_ST('u', 12, 16, 0),
839 }, 839 },
@@ -841,7 +841,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
841 .type = IIO_VOLTAGE, 841 .type = IIO_VOLTAGE,
842 .indexed = 1, 842 .indexed = 1,
843 .channel = 7, 843 .channel = 7,
844 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 844 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
845 .scan_index = 7, 845 .scan_index = 7,
846 .scan_type = IIO_ST('u', 12, 16, 0), 846 .scan_type = IIO_ST('u', 12, 16, 0),
847 }, 847 },
diff --git a/drivers/staging/iio/adc/adt7410.c b/drivers/staging/iio/adc/adt7410.c
deleted file mode 100644
index 35455e160945..000000000000
--- a/drivers/staging/iio/adc/adt7410.c
+++ /dev/null
@@ -1,1102 +0,0 @@
1/*
2 * ADT7410 digital temperature sensor driver supporting ADT7310/ADT7410
3 *
4 * Copyright 2010 Analog Devices Inc.
5 *
6 * Licensed under the GPL-2 or later.
7 */
8
9#include <linux/interrupt.h>
10#include <linux/device.h>
11#include <linux/kernel.h>
12#include <linux/slab.h>
13#include <linux/sysfs.h>
14#include <linux/list.h>
15#include <linux/i2c.h>
16#include <linux/spi/spi.h>
17#include <linux/module.h>
18
19#include <linux/iio/iio.h>
20#include <linux/iio/sysfs.h>
21#include <linux/iio/events.h>
22
23/*
24 * ADT7410 registers definition
25 */
26
27#define ADT7410_TEMPERATURE 0
28#define ADT7410_STATUS 2
29#define ADT7410_CONFIG 3
30#define ADT7410_T_ALARM_HIGH 4
31#define ADT7410_T_ALARM_LOW 6
32#define ADT7410_T_CRIT 8
33#define ADT7410_T_HYST 0xA
34#define ADT7410_ID 0xB
35#define ADT7410_RESET 0x2F
36
37/*
38 * ADT7310 registers definition
39 */
40
41#define ADT7310_STATUS 0
42#define ADT7310_CONFIG 1
43#define ADT7310_TEMPERATURE 2
44#define ADT7310_ID 3
45#define ADT7310_T_CRIT 4
46#define ADT7310_T_HYST 5
47#define ADT7310_T_ALARM_HIGH 6
48#define ADT7310_T_ALARM_LOW 7
49
50/*
51 * ADT7410 status
52 */
53#define ADT7410_STAT_T_LOW 0x10
54#define ADT7410_STAT_T_HIGH 0x20
55#define ADT7410_STAT_T_CRIT 0x40
56#define ADT7410_STAT_NOT_RDY 0x80
57
58/*
59 * ADT7410 config
60 */
61#define ADT7410_FAULT_QUEUE_MASK 0x3
62#define ADT7410_CT_POLARITY 0x4
63#define ADT7410_INT_POLARITY 0x8
64#define ADT7410_EVENT_MODE 0x10
65#define ADT7410_MODE_MASK 0x60
66#define ADT7410_ONESHOT 0x20
67#define ADT7410_SPS 0x40
68#define ADT7410_PD 0x60
69#define ADT7410_RESOLUTION 0x80
70
71/*
72 * ADT7410 masks
73 */
74#define ADT7410_T16_VALUE_SIGN 0x8000
75#define ADT7410_T16_VALUE_FLOAT_OFFSET 7
76#define ADT7410_T16_VALUE_FLOAT_MASK 0x7F
77#define ADT7410_T13_VALUE_SIGN 0x1000
78#define ADT7410_T13_VALUE_OFFSET 3
79#define ADT7410_T13_VALUE_FLOAT_OFFSET 4
80#define ADT7410_T13_VALUE_FLOAT_MASK 0xF
81#define ADT7410_T_HYST_MASK 0xF
82#define ADT7410_DEVICE_ID_MASK 0xF
83#define ADT7410_MANUFACTORY_ID_MASK 0xF0
84#define ADT7410_MANUFACTORY_ID_OFFSET 4
85
86
87#define ADT7310_CMD_REG_MASK 0x28
88#define ADT7310_CMD_REG_OFFSET 3
89#define ADT7310_CMD_READ 0x40
90#define ADT7310_CMD_CON_READ 0x4
91
92#define ADT7410_IRQS 2
93
94/*
95 * struct adt7410_chip_info - chip specifc information
96 */
97
98struct adt7410_chip_info;
99
100struct adt7410_ops {
101 int (*read_word)(struct adt7410_chip_info *, u8 reg, u16 *data);
102 int (*write_word)(struct adt7410_chip_info *, u8 reg, u16 data);
103 int (*read_byte)(struct adt7410_chip_info *, u8 reg, u8 *data);
104 int (*write_byte)(struct adt7410_chip_info *, u8 reg, u8 data);
105};
106
107struct adt7410_chip_info {
108 struct device *dev;
109 u8 config;
110
111 const struct adt7410_ops *ops;
112};
113
114static int adt7410_read_word(struct adt7410_chip_info *chip, u8 reg, u16 *data)
115{
116 return chip->ops->read_word(chip, reg, data);
117}
118
119static int adt7410_write_word(struct adt7410_chip_info *chip, u8 reg, u16 data)
120{
121 return chip->ops->write_word(chip, reg, data);
122}
123
124static int adt7410_read_byte(struct adt7410_chip_info *chip, u8 reg, u8 *data)
125{
126 return chip->ops->read_byte(chip, reg, data);
127}
128
129static int adt7410_write_byte(struct adt7410_chip_info *chip, u8 reg, u8 data)
130{
131 return chip->ops->write_byte(chip, reg, data);
132}
133
134static ssize_t adt7410_show_mode(struct device *dev,
135 struct device_attribute *attr,
136 char *buf)
137{
138 struct iio_dev *dev_info = dev_to_iio_dev(dev);
139 struct adt7410_chip_info *chip = iio_priv(dev_info);
140 u8 config;
141
142 config = chip->config & ADT7410_MODE_MASK;
143
144 switch (config) {
145 case ADT7410_PD:
146 return sprintf(buf, "power-down\n");
147 case ADT7410_ONESHOT:
148 return sprintf(buf, "one-shot\n");
149 case ADT7410_SPS:
150 return sprintf(buf, "sps\n");
151 default:
152 return sprintf(buf, "full\n");
153 }
154}
155
156static ssize_t adt7410_store_mode(struct device *dev,
157 struct device_attribute *attr,
158 const char *buf,
159 size_t len)
160{
161 struct iio_dev *dev_info = dev_to_iio_dev(dev);
162 struct adt7410_chip_info *chip = iio_priv(dev_info);
163 u16 config;
164 int ret;
165
166 ret = adt7410_read_byte(chip, ADT7410_CONFIG, &chip->config);
167 if (ret)
168 return -EIO;
169
170 config = chip->config & (~ADT7410_MODE_MASK);
171 if (strcmp(buf, "power-down"))
172 config |= ADT7410_PD;
173 else if (strcmp(buf, "one-shot"))
174 config |= ADT7410_ONESHOT;
175 else if (strcmp(buf, "sps"))
176 config |= ADT7410_SPS;
177
178 ret = adt7410_write_byte(chip, ADT7410_CONFIG, config);
179 if (ret)
180 return -EIO;
181
182 chip->config = config;
183
184 return len;
185}
186
187static IIO_DEVICE_ATTR(mode, S_IRUGO | S_IWUSR,
188 adt7410_show_mode,
189 adt7410_store_mode,
190 0);
191
192static ssize_t adt7410_show_available_modes(struct device *dev,
193 struct device_attribute *attr,
194 char *buf)
195{
196 return sprintf(buf, "full\none-shot\nsps\npower-down\n");
197}
198
199static IIO_DEVICE_ATTR(available_modes, S_IRUGO, adt7410_show_available_modes, NULL, 0);
200
201static ssize_t adt7410_show_resolution(struct device *dev,
202 struct device_attribute *attr,
203 char *buf)
204{
205 struct iio_dev *dev_info = dev_to_iio_dev(dev);
206 struct adt7410_chip_info *chip = iio_priv(dev_info);
207 int ret;
208 int bits;
209
210 ret = adt7410_read_byte(chip, ADT7410_CONFIG, &chip->config);
211 if (ret)
212 return -EIO;
213
214 if (chip->config & ADT7410_RESOLUTION)
215 bits = 16;
216 else
217 bits = 13;
218
219 return sprintf(buf, "%d bits\n", bits);
220}
221
222static ssize_t adt7410_store_resolution(struct device *dev,
223 struct device_attribute *attr,
224 const char *buf,
225 size_t len)
226{
227 struct iio_dev *dev_info = dev_to_iio_dev(dev);
228 struct adt7410_chip_info *chip = iio_priv(dev_info);
229 unsigned long data;
230 u16 config;
231 int ret;
232
233 ret = strict_strtoul(buf, 10, &data);
234 if (ret)
235 return -EINVAL;
236
237 ret = adt7410_read_byte(chip, ADT7410_CONFIG, &chip->config);
238 if (ret)
239 return -EIO;
240
241 config = chip->config & (~ADT7410_RESOLUTION);
242 if (data)
243 config |= ADT7410_RESOLUTION;
244
245 ret = adt7410_write_byte(chip, ADT7410_CONFIG, config);
246 if (ret)
247 return -EIO;
248
249 chip->config = config;
250
251 return len;
252}
253
254static IIO_DEVICE_ATTR(resolution, S_IRUGO | S_IWUSR,
255 adt7410_show_resolution,
256 adt7410_store_resolution,
257 0);
258
259static ssize_t adt7410_show_id(struct device *dev,
260 struct device_attribute *attr,
261 char *buf)
262{
263 struct iio_dev *dev_info = dev_to_iio_dev(dev);
264 struct adt7410_chip_info *chip = iio_priv(dev_info);
265 u8 id;
266 int ret;
267
268 ret = adt7410_read_byte(chip, ADT7410_ID, &id);
269 if (ret)
270 return -EIO;
271
272 return sprintf(buf, "device id: 0x%x\nmanufactory id: 0x%x\n",
273 id & ADT7410_DEVICE_ID_MASK,
274 (id & ADT7410_MANUFACTORY_ID_MASK) >> ADT7410_MANUFACTORY_ID_OFFSET);
275}
276
277static IIO_DEVICE_ATTR(id, S_IRUGO | S_IWUSR,
278 adt7410_show_id,
279 NULL,
280 0);
281
282static ssize_t adt7410_convert_temperature(struct adt7410_chip_info *chip,
283 u16 data, char *buf)
284{
285 char sign = ' ';
286
287 if (!(chip->config & ADT7410_RESOLUTION))
288 data &= ~0x7;
289
290 if (data & ADT7410_T16_VALUE_SIGN) {
291 /* convert supplement to positive value */
292 data = (u16)((ADT7410_T16_VALUE_SIGN << 1) - (u32)data);
293 sign = '-';
294 }
295 return sprintf(buf, "%c%d.%.7d\n", sign,
296 (data >> ADT7410_T16_VALUE_FLOAT_OFFSET),
297 (data & ADT7410_T16_VALUE_FLOAT_MASK) * 78125);
298}
299
300static ssize_t adt7410_show_value(struct device *dev,
301 struct device_attribute *attr,
302 char *buf)
303{
304 struct iio_dev *dev_info = dev_to_iio_dev(dev);
305 struct adt7410_chip_info *chip = iio_priv(dev_info);
306 u8 status;
307 u16 data;
308 int ret, i = 0;
309
310 do {
311 ret = adt7410_read_byte(chip, ADT7410_STATUS, &status);
312 if (ret)
313 return -EIO;
314 i++;
315 if (i == 10000)
316 return -EIO;
317 } while (status & ADT7410_STAT_NOT_RDY);
318
319 ret = adt7410_read_word(chip, ADT7410_TEMPERATURE, &data);
320 if (ret)
321 return -EIO;
322
323 return adt7410_convert_temperature(chip, data, buf);
324}
325
326static IIO_DEVICE_ATTR(value, S_IRUGO, adt7410_show_value, NULL, 0);
327
328static struct attribute *adt7410_attributes[] = {
329 &iio_dev_attr_available_modes.dev_attr.attr,
330 &iio_dev_attr_mode.dev_attr.attr,
331 &iio_dev_attr_resolution.dev_attr.attr,
332 &iio_dev_attr_id.dev_attr.attr,
333 &iio_dev_attr_value.dev_attr.attr,
334 NULL,
335};
336
337static const struct attribute_group adt7410_attribute_group = {
338 .attrs = adt7410_attributes,
339};
340
341static irqreturn_t adt7410_event_handler(int irq, void *private)
342{
343 struct iio_dev *indio_dev = private;
344 struct adt7410_chip_info *chip = iio_priv(indio_dev);
345 s64 timestamp = iio_get_time_ns();
346 u8 status;
347
348 if (adt7410_read_byte(chip, ADT7410_STATUS, &status))
349 return IRQ_HANDLED;
350
351 if (status & ADT7410_STAT_T_HIGH)
352 iio_push_event(indio_dev,
353 IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0,
354 IIO_EV_TYPE_THRESH,
355 IIO_EV_DIR_RISING),
356 timestamp);
357 if (status & ADT7410_STAT_T_LOW)
358 iio_push_event(indio_dev,
359 IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0,
360 IIO_EV_TYPE_THRESH,
361 IIO_EV_DIR_FALLING),
362 timestamp);
363 if (status & ADT7410_STAT_T_CRIT)
364 iio_push_event(indio_dev,
365 IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0,
366 IIO_EV_TYPE_THRESH,
367 IIO_EV_DIR_RISING),
368 timestamp);
369
370 return IRQ_HANDLED;
371}
372
373static ssize_t adt7410_show_event_mode(struct device *dev,
374 struct device_attribute *attr,
375 char *buf)
376{
377 struct iio_dev *dev_info = dev_to_iio_dev(dev);
378 struct adt7410_chip_info *chip = iio_priv(dev_info);
379 int ret;
380
381 ret = adt7410_read_byte(chip, ADT7410_CONFIG, &chip->config);
382 if (ret)
383 return -EIO;
384
385 if (chip->config & ADT7410_EVENT_MODE)
386 return sprintf(buf, "interrupt\n");
387 else
388 return sprintf(buf, "comparator\n");
389}
390
391static ssize_t adt7410_set_event_mode(struct device *dev,
392 struct device_attribute *attr,
393 const char *buf,
394 size_t len)
395{
396 struct iio_dev *dev_info = dev_to_iio_dev(dev);
397 struct adt7410_chip_info *chip = iio_priv(dev_info);
398 u16 config;
399 int ret;
400
401 ret = adt7410_read_byte(chip, ADT7410_CONFIG, &chip->config);
402 if (ret)
403 return -EIO;
404
405 config = chip->config &= ~ADT7410_EVENT_MODE;
406 if (strcmp(buf, "comparator") != 0)
407 config |= ADT7410_EVENT_MODE;
408
409 ret = adt7410_write_byte(chip, ADT7410_CONFIG, config);
410 if (ret)
411 return -EIO;
412
413 chip->config = config;
414
415 return ret;
416}
417
418static ssize_t adt7410_show_available_event_modes(struct device *dev,
419 struct device_attribute *attr,
420 char *buf)
421{
422 return sprintf(buf, "comparator\ninterrupt\n");
423}
424
425static ssize_t adt7410_show_fault_queue(struct device *dev,
426 struct device_attribute *attr,
427 char *buf)
428{
429 struct iio_dev *dev_info = dev_to_iio_dev(dev);
430 struct adt7410_chip_info *chip = iio_priv(dev_info);
431 int ret;
432
433 ret = adt7410_read_byte(chip, ADT7410_CONFIG, &chip->config);
434 if (ret)
435 return -EIO;
436
437 return sprintf(buf, "%d\n", chip->config & ADT7410_FAULT_QUEUE_MASK);
438}
439
440static ssize_t adt7410_set_fault_queue(struct device *dev,
441 struct device_attribute *attr,
442 const char *buf,
443 size_t len)
444{
445 struct iio_dev *dev_info = dev_to_iio_dev(dev);
446 struct adt7410_chip_info *chip = iio_priv(dev_info);
447 unsigned long data;
448 int ret;
449 u8 config;
450
451 ret = strict_strtoul(buf, 10, &data);
452 if (ret || data > 3)
453 return -EINVAL;
454
455 ret = adt7410_read_byte(chip, ADT7410_CONFIG, &chip->config);
456 if (ret)
457 return -EIO;
458
459 config = chip->config & ~ADT7410_FAULT_QUEUE_MASK;
460 config |= data;
461 ret = adt7410_write_byte(chip, ADT7410_CONFIG, config);
462 if (ret)
463 return -EIO;
464
465 chip->config = config;
466
467 return ret;
468}
469
470static inline ssize_t adt7410_show_t_bound(struct device *dev,
471 struct device_attribute *attr,
472 u8 bound_reg,
473 char *buf)
474{
475 struct iio_dev *dev_info = dev_to_iio_dev(dev);
476 struct adt7410_chip_info *chip = iio_priv(dev_info);
477 u16 data;
478 int ret;
479
480 ret = adt7410_read_word(chip, bound_reg, &data);
481 if (ret)
482 return -EIO;
483
484 return adt7410_convert_temperature(chip, data, buf);
485}
486
487static inline ssize_t adt7410_set_t_bound(struct device *dev,
488 struct device_attribute *attr,
489 u8 bound_reg,
490 const char *buf,
491 size_t len)
492{
493 struct iio_dev *dev_info = dev_to_iio_dev(dev);
494 struct adt7410_chip_info *chip = iio_priv(dev_info);
495 long tmp1, tmp2;
496 u16 data;
497 char *pos;
498 int ret;
499
500 pos = strchr(buf, '.');
501
502 ret = strict_strtol(buf, 10, &tmp1);
503
504 if (ret || tmp1 > 127 || tmp1 < -128)
505 return -EINVAL;
506
507 if (pos) {
508 len = strlen(pos);
509
510 if (chip->config & ADT7410_RESOLUTION) {
511 if (len > ADT7410_T16_VALUE_FLOAT_OFFSET)
512 len = ADT7410_T16_VALUE_FLOAT_OFFSET;
513 pos[len] = 0;
514 ret = strict_strtol(pos, 10, &tmp2);
515
516 if (!ret)
517 tmp2 = (tmp2 / 78125) * 78125;
518 } else {
519 if (len > ADT7410_T13_VALUE_FLOAT_OFFSET)
520 len = ADT7410_T13_VALUE_FLOAT_OFFSET;
521 pos[len] = 0;
522 ret = strict_strtol(pos, 10, &tmp2);
523
524 if (!ret)
525 tmp2 = (tmp2 / 625) * 625;
526 }
527 }
528
529 if (tmp1 < 0)
530 data = (u16)(-tmp1);
531 else
532 data = (u16)tmp1;
533
534 if (chip->config & ADT7410_RESOLUTION) {
535 data = (data << ADT7410_T16_VALUE_FLOAT_OFFSET) |
536 (tmp2 & ADT7410_T16_VALUE_FLOAT_MASK);
537
538 if (tmp1 < 0)
539 /* convert positive value to supplyment */
540 data = (u16)((ADT7410_T16_VALUE_SIGN << 1) - (u32)data);
541 } else {
542 data = (data << ADT7410_T13_VALUE_FLOAT_OFFSET) |
543 (tmp2 & ADT7410_T13_VALUE_FLOAT_MASK);
544
545 if (tmp1 < 0)
546 /* convert positive value to supplyment */
547 data = (ADT7410_T13_VALUE_SIGN << 1) - data;
548 data <<= ADT7410_T13_VALUE_OFFSET;
549 }
550
551 ret = adt7410_write_word(chip, bound_reg, data);
552 if (ret)
553 return -EIO;
554
555 return ret;
556}
557
558static ssize_t adt7410_show_t_alarm_high(struct device *dev,
559 struct device_attribute *attr,
560 char *buf)
561{
562 return adt7410_show_t_bound(dev, attr,
563 ADT7410_T_ALARM_HIGH, buf);
564}
565
566static inline ssize_t adt7410_set_t_alarm_high(struct device *dev,
567 struct device_attribute *attr,
568 const char *buf,
569 size_t len)
570{
571 return adt7410_set_t_bound(dev, attr,
572 ADT7410_T_ALARM_HIGH, buf, len);
573}
574
575static ssize_t adt7410_show_t_alarm_low(struct device *dev,
576 struct device_attribute *attr,
577 char *buf)
578{
579 return adt7410_show_t_bound(dev, attr,
580 ADT7410_T_ALARM_LOW, buf);
581}
582
583static inline ssize_t adt7410_set_t_alarm_low(struct device *dev,
584 struct device_attribute *attr,
585 const char *buf,
586 size_t len)
587{
588 return adt7410_set_t_bound(dev, attr,
589 ADT7410_T_ALARM_LOW, buf, len);
590}
591
592static ssize_t adt7410_show_t_crit(struct device *dev,
593 struct device_attribute *attr,
594 char *buf)
595{
596 return adt7410_show_t_bound(dev, attr,
597 ADT7410_T_CRIT, buf);
598}
599
600static inline ssize_t adt7410_set_t_crit(struct device *dev,
601 struct device_attribute *attr,
602 const char *buf,
603 size_t len)
604{
605 return adt7410_set_t_bound(dev, attr,
606 ADT7410_T_CRIT, buf, len);
607}
608
609static ssize_t adt7410_show_t_hyst(struct device *dev,
610 struct device_attribute *attr,
611 char *buf)
612{
613 struct iio_dev *dev_info = dev_to_iio_dev(dev);
614 struct adt7410_chip_info *chip = iio_priv(dev_info);
615 int ret;
616 u8 t_hyst;
617
618 ret = adt7410_read_byte(chip, ADT7410_T_HYST, &t_hyst);
619 if (ret)
620 return -EIO;
621
622 return sprintf(buf, "%d\n", t_hyst & ADT7410_T_HYST_MASK);
623}
624
625static inline ssize_t adt7410_set_t_hyst(struct device *dev,
626 struct device_attribute *attr,
627 const char *buf,
628 size_t len)
629{
630 struct iio_dev *dev_info = dev_to_iio_dev(dev);
631 struct adt7410_chip_info *chip = iio_priv(dev_info);
632 int ret;
633 unsigned long data;
634 u8 t_hyst;
635
636 ret = strict_strtol(buf, 10, &data);
637
638 if (ret || data > ADT7410_T_HYST_MASK)
639 return -EINVAL;
640
641 t_hyst = (u8)data;
642
643 ret = adt7410_write_byte(chip, ADT7410_T_HYST, t_hyst);
644 if (ret)
645 return -EIO;
646
647 return ret;
648}
649
650static IIO_DEVICE_ATTR(event_mode,
651 S_IRUGO | S_IWUSR,
652 adt7410_show_event_mode, adt7410_set_event_mode, 0);
653static IIO_DEVICE_ATTR(available_event_modes,
654 S_IRUGO,
655 adt7410_show_available_event_modes, NULL, 0);
656static IIO_DEVICE_ATTR(fault_queue,
657 S_IRUGO | S_IWUSR,
658 adt7410_show_fault_queue, adt7410_set_fault_queue, 0);
659static IIO_DEVICE_ATTR(t_alarm_high,
660 S_IRUGO | S_IWUSR,
661 adt7410_show_t_alarm_high, adt7410_set_t_alarm_high, 0);
662static IIO_DEVICE_ATTR(t_alarm_low,
663 S_IRUGO | S_IWUSR,
664 adt7410_show_t_alarm_low, adt7410_set_t_alarm_low, 0);
665static IIO_DEVICE_ATTR(t_crit,
666 S_IRUGO | S_IWUSR,
667 adt7410_show_t_crit, adt7410_set_t_crit, 0);
668static IIO_DEVICE_ATTR(t_hyst,
669 S_IRUGO | S_IWUSR,
670 adt7410_show_t_hyst, adt7410_set_t_hyst, 0);
671
672static struct attribute *adt7410_event_int_attributes[] = {
673 &iio_dev_attr_event_mode.dev_attr.attr,
674 &iio_dev_attr_available_event_modes.dev_attr.attr,
675 &iio_dev_attr_fault_queue.dev_attr.attr,
676 &iio_dev_attr_t_alarm_high.dev_attr.attr,
677 &iio_dev_attr_t_alarm_low.dev_attr.attr,
678 &iio_dev_attr_t_crit.dev_attr.attr,
679 &iio_dev_attr_t_hyst.dev_attr.attr,
680 NULL,
681};
682
683static struct attribute_group adt7410_event_attribute_group = {
684 .attrs = adt7410_event_int_attributes,
685 .name = "events",
686};
687
688static const struct iio_info adt7410_info = {
689 .attrs = &adt7410_attribute_group,
690 .event_attrs = &adt7410_event_attribute_group,
691 .driver_module = THIS_MODULE,
692};
693
694/*
695 * device probe and remove
696 */
697
698static int adt7410_probe(struct device *dev, int irq,
699 const char *name, const struct adt7410_ops *ops)
700{
701 unsigned long *adt7410_platform_data = dev->platform_data;
702 unsigned long local_pdata[] = {0, 0};
703 struct adt7410_chip_info *chip;
704 struct iio_dev *indio_dev;
705 int ret = 0;
706
707 indio_dev = iio_device_alloc(sizeof(*chip));
708 if (indio_dev == NULL) {
709 ret = -ENOMEM;
710 goto error_ret;
711 }
712 chip = iio_priv(indio_dev);
713 /* this is only used for device removal purposes */
714 dev_set_drvdata(dev, indio_dev);
715
716 chip->dev = dev;
717 chip->ops = ops;
718
719 indio_dev->name = name;
720 indio_dev->dev.parent = dev;
721 indio_dev->info = &adt7410_info;
722 indio_dev->modes = INDIO_DIRECT_MODE;
723
724 if (!adt7410_platform_data)
725 adt7410_platform_data = local_pdata;
726
727 /* CT critcal temperature event. line 0 */
728 if (irq) {
729 ret = request_threaded_irq(irq,
730 NULL,
731 &adt7410_event_handler,
732 IRQF_TRIGGER_LOW | IRQF_ONESHOT,
733 name,
734 indio_dev);
735 if (ret)
736 goto error_free_dev;
737 }
738
739 /* INT bound temperature alarm event. line 1 */
740 if (adt7410_platform_data[0]) {
741 ret = request_threaded_irq(adt7410_platform_data[0],
742 NULL,
743 &adt7410_event_handler,
744 adt7410_platform_data[1] |
745 IRQF_ONESHOT,
746 name,
747 indio_dev);
748 if (ret)
749 goto error_unreg_ct_irq;
750 }
751
752 ret = adt7410_read_byte(chip, ADT7410_CONFIG, &chip->config);
753 if (ret) {
754 ret = -EIO;
755 goto error_unreg_int_irq;
756 }
757
758 chip->config |= ADT7410_RESOLUTION;
759
760 if (irq && adt7410_platform_data[0]) {
761
762 /* set irq polarity low level */
763 chip->config &= ~ADT7410_CT_POLARITY;
764
765 if (adt7410_platform_data[1] & IRQF_TRIGGER_HIGH)
766 chip->config |= ADT7410_INT_POLARITY;
767 else
768 chip->config &= ~ADT7410_INT_POLARITY;
769 }
770
771 ret = adt7410_write_byte(chip, ADT7410_CONFIG, chip->config);
772 if (ret) {
773 ret = -EIO;
774 goto error_unreg_int_irq;
775 }
776 ret = iio_device_register(indio_dev);
777 if (ret)
778 goto error_unreg_int_irq;
779
780 dev_info(dev, "%s temperature sensor registered.\n",
781 name);
782
783 return 0;
784
785error_unreg_int_irq:
786 free_irq(adt7410_platform_data[0], indio_dev);
787error_unreg_ct_irq:
788 free_irq(irq, indio_dev);
789error_free_dev:
790 iio_device_free(indio_dev);
791error_ret:
792 return ret;
793}
794
795static int adt7410_remove(struct device *dev, int irq)
796{
797 struct iio_dev *indio_dev = dev_get_drvdata(dev);
798 unsigned long *adt7410_platform_data = dev->platform_data;
799
800 iio_device_unregister(indio_dev);
801 if (adt7410_platform_data[0])
802 free_irq(adt7410_platform_data[0], indio_dev);
803 if (irq)
804 free_irq(irq, indio_dev);
805 iio_device_free(indio_dev);
806
807 return 0;
808}
809
810#if IS_ENABLED(CONFIG_I2C)
811
812static int adt7410_i2c_read_word(struct adt7410_chip_info *chip, u8 reg,
813 u16 *data)
814{
815 struct i2c_client *client = to_i2c_client(chip->dev);
816 int ret = 0;
817
818 ret = i2c_smbus_read_word_data(client, reg);
819 if (ret < 0) {
820 dev_err(&client->dev, "I2C read error\n");
821 return ret;
822 }
823
824 *data = swab16((u16)ret);
825
826 return 0;
827}
828
829static int adt7410_i2c_write_word(struct adt7410_chip_info *chip, u8 reg,
830 u16 data)
831{
832 struct i2c_client *client = to_i2c_client(chip->dev);
833 int ret = 0;
834
835 ret = i2c_smbus_write_word_data(client, reg, swab16(data));
836 if (ret < 0)
837 dev_err(&client->dev, "I2C write error\n");
838
839 return ret;
840}
841
842static int adt7410_i2c_read_byte(struct adt7410_chip_info *chip, u8 reg,
843 u8 *data)
844{
845 struct i2c_client *client = to_i2c_client(chip->dev);
846 int ret = 0;
847
848 ret = i2c_smbus_read_byte_data(client, reg);
849 if (ret < 0) {
850 dev_err(&client->dev, "I2C read error\n");
851 return ret;
852 }
853
854 *data = (u8)ret;
855
856 return 0;
857}
858
859static int adt7410_i2c_write_byte(struct adt7410_chip_info *chip, u8 reg,
860 u8 data)
861{
862 struct i2c_client *client = to_i2c_client(chip->dev);
863 int ret = 0;
864
865 ret = i2c_smbus_write_byte_data(client, reg, data);
866 if (ret < 0)
867 dev_err(&client->dev, "I2C write error\n");
868
869 return ret;
870}
871
872static const struct adt7410_ops adt7410_i2c_ops = {
873 .read_word = adt7410_i2c_read_word,
874 .write_word = adt7410_i2c_write_word,
875 .read_byte = adt7410_i2c_read_byte,
876 .write_byte = adt7410_i2c_write_byte,
877};
878
879static int adt7410_i2c_probe(struct i2c_client *client,
880 const struct i2c_device_id *id)
881{
882 return adt7410_probe(&client->dev, client->irq, id->name,
883 &adt7410_i2c_ops);
884}
885
886static int adt7410_i2c_remove(struct i2c_client *client)
887{
888 return adt7410_remove(&client->dev, client->irq);
889}
890
891static const struct i2c_device_id adt7410_id[] = {
892 { "adt7410", 0 },
893 {}
894};
895
896MODULE_DEVICE_TABLE(i2c, adt7410_id);
897
898static struct i2c_driver adt7410_driver = {
899 .driver = {
900 .name = "adt7410",
901 },
902 .probe = adt7410_i2c_probe,
903 .remove = adt7410_i2c_remove,
904 .id_table = adt7410_id,
905};
906
907static int __init adt7410_i2c_init(void)
908{
909 return i2c_add_driver(&adt7410_driver);
910}
911
912static void __exit adt7410_i2c_exit(void)
913{
914 i2c_del_driver(&adt7410_driver);
915}
916
917#else
918
919static int __init adt7410_i2c_init(void) { return 0; };
920static void __exit adt7410_i2c_exit(void) {};
921
922#endif
923
924#if IS_ENABLED(CONFIG_SPI_MASTER)
925
926static const u8 adt7371_reg_table[] = {
927 [ADT7410_TEMPERATURE] = ADT7310_TEMPERATURE,
928 [ADT7410_STATUS] = ADT7310_STATUS,
929 [ADT7410_CONFIG] = ADT7310_CONFIG,
930 [ADT7410_T_ALARM_HIGH] = ADT7310_T_ALARM_HIGH,
931 [ADT7410_T_ALARM_LOW] = ADT7310_T_ALARM_LOW,
932 [ADT7410_T_CRIT] = ADT7310_T_CRIT,
933 [ADT7410_T_HYST] = ADT7310_T_HYST,
934 [ADT7410_ID] = ADT7310_ID,
935};
936
937#define AD7310_COMMAND(reg) (adt7371_reg_table[(reg)] << ADT7310_CMD_REG_OFFSET)
938
939static int adt7310_spi_read_word(struct adt7410_chip_info *chip,
940 u8 reg, u16 *data)
941{
942 struct spi_device *spi = to_spi_device(chip->dev);
943 u8 command = AD7310_COMMAND(reg);
944 int ret = 0;
945
946 command |= ADT7310_CMD_READ;
947 ret = spi_write(spi, &command, sizeof(command));
948 if (ret < 0) {
949 dev_err(&spi->dev, "SPI write command error\n");
950 return ret;
951 }
952
953 ret = spi_read(spi, (u8 *)data, sizeof(*data));
954 if (ret < 0) {
955 dev_err(&spi->dev, "SPI read word error\n");
956 return ret;
957 }
958
959 *data = be16_to_cpu(*data);
960
961 return 0;
962}
963
964static int adt7310_spi_write_word(struct adt7410_chip_info *chip, u8 reg,
965 u16 data)
966{
967 struct spi_device *spi = to_spi_device(chip->dev);
968 u8 buf[3];
969 int ret = 0;
970
971 buf[0] = AD7310_COMMAND(reg);
972 buf[1] = (u8)(data >> 8);
973 buf[2] = (u8)(data & 0xFF);
974
975 ret = spi_write(spi, buf, 3);
976 if (ret < 0) {
977 dev_err(&spi->dev, "SPI write word error\n");
978 return ret;
979 }
980
981 return ret;
982}
983
984static int adt7310_spi_read_byte(struct adt7410_chip_info *chip, u8 reg,
985 u8 *data)
986{
987 struct spi_device *spi = to_spi_device(chip->dev);
988 u8 command = AD7310_COMMAND(reg);
989 int ret = 0;
990
991 command |= ADT7310_CMD_READ;
992 ret = spi_write(spi, &command, sizeof(command));
993 if (ret < 0) {
994 dev_err(&spi->dev, "SPI write command error\n");
995 return ret;
996 }
997
998 ret = spi_read(spi, data, sizeof(*data));
999 if (ret < 0) {
1000 dev_err(&spi->dev, "SPI read byte error\n");
1001 return ret;
1002 }
1003
1004 return 0;
1005}
1006
1007static int adt7310_spi_write_byte(struct adt7410_chip_info *chip, u8 reg,
1008 u8 data)
1009{
1010 struct spi_device *spi = to_spi_device(chip->dev);
1011 u8 buf[2];
1012 int ret = 0;
1013
1014 buf[0] = AD7310_COMMAND(reg);
1015 buf[1] = data;
1016
1017 ret = spi_write(spi, buf, 2);
1018 if (ret < 0) {
1019 dev_err(&spi->dev, "SPI write byte error\n");
1020 return ret;
1021 }
1022
1023 return ret;
1024}
1025
1026static const struct adt7410_ops adt7310_spi_ops = {
1027 .read_word = adt7310_spi_read_word,
1028 .write_word = adt7310_spi_write_word,
1029 .read_byte = adt7310_spi_read_byte,
1030 .write_byte = adt7310_spi_write_byte,
1031};
1032
1033static int adt7310_spi_probe(struct spi_device *spi)
1034{
1035 return adt7410_probe(&spi->dev, spi->irq,
1036 spi_get_device_id(spi)->name, &adt7310_spi_ops);
1037}
1038
1039static int adt7310_spi_remove(struct spi_device *spi)
1040{
1041 return adt7410_remove(&spi->dev, spi->irq);
1042}
1043
1044static const struct spi_device_id adt7310_id[] = {
1045 { "adt7310", 0 },
1046 {}
1047};
1048MODULE_DEVICE_TABLE(spi, adt7310_id);
1049
1050static struct spi_driver adt7310_driver = {
1051 .driver = {
1052 .name = "adt7310",
1053 .owner = THIS_MODULE,
1054 },
1055 .probe = adt7310_spi_probe,
1056 .remove = adt7310_spi_remove,
1057 .id_table = adt7310_id,
1058};
1059
1060static int __init adt7310_spi_init(void)
1061{
1062 return spi_register_driver(&adt7310_driver);
1063}
1064
1065static void adt7310_spi_exit(void)
1066{
1067 spi_unregister_driver(&adt7310_driver);
1068}
1069
1070#else
1071
1072static int __init adt7310_spi_init(void) { return 0; };
1073static void adt7310_spi_exit(void) {};
1074
1075#endif
1076
1077static int __init adt7410_init(void)
1078{
1079 int ret;
1080
1081 ret = adt7310_spi_init();
1082 if (ret)
1083 return ret;
1084
1085 ret = adt7410_i2c_init();
1086 if (ret)
1087 adt7310_spi_exit();
1088
1089 return ret;
1090}
1091module_init(adt7410_init);
1092
1093static void __exit adt7410_exit(void)
1094{
1095 adt7410_i2c_exit();
1096 adt7310_spi_exit();
1097}
1098module_exit(adt7410_exit);
1099
1100MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
1101MODULE_DESCRIPTION("Analog Devices ADT7310/ADT7410 digital temperature sensor driver");
1102MODULE_LICENSE("GPL v2");
diff --git a/drivers/staging/iio/adc/lpc32xx_adc.c b/drivers/staging/iio/adc/lpc32xx_adc.c
index 0bf2a6cc79e0..2f2f7fdd0691 100644
--- a/drivers/staging/iio/adc/lpc32xx_adc.c
+++ b/drivers/staging/iio/adc/lpc32xx_adc.c
@@ -103,7 +103,7 @@ static const struct iio_info lpc32xx_adc_iio_info = {
103 .type = IIO_VOLTAGE, \ 103 .type = IIO_VOLTAGE, \
104 .indexed = 1, \ 104 .indexed = 1, \
105 .channel = _index, \ 105 .channel = _index, \
106 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, \ 106 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
107 .address = AD_IN * _index, \ 107 .address = AD_IN * _index, \
108 .scan_index = _index, \ 108 .scan_index = _index, \
109} 109}
diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c
index 55a459b61907..25a4359a92db 100644
--- a/drivers/staging/iio/adc/mxs-lradc.c
+++ b/drivers/staging/iio/adc/mxs-lradc.c
@@ -822,7 +822,7 @@ static const struct iio_buffer_setup_ops mxs_lradc_buffer_ops = {
822 .type = (chan_type), \ 822 .type = (chan_type), \
823 .indexed = 1, \ 823 .indexed = 1, \
824 .scan_index = (idx), \ 824 .scan_index = (idx), \
825 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, \ 825 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
826 .channel = (idx), \ 826 .channel = (idx), \
827 .scan_type = { \ 827 .scan_type = { \
828 .sign = 'u', \ 828 .sign = 'u', \
diff --git a/drivers/staging/iio/adc/spear_adc.c b/drivers/staging/iio/adc/spear_adc.c
index 13052ceb2f2b..f45da4266950 100644
--- a/drivers/staging/iio/adc/spear_adc.c
+++ b/drivers/staging/iio/adc/spear_adc.c
@@ -180,8 +180,8 @@ static int spear_read_raw(struct iio_dev *indio_dev,
180#define SPEAR_ADC_CHAN(idx) { \ 180#define SPEAR_ADC_CHAN(idx) { \
181 .type = IIO_VOLTAGE, \ 181 .type = IIO_VOLTAGE, \
182 .indexed = 1, \ 182 .indexed = 1, \
183 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 183 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
184 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 184 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
185 .channel = idx, \ 185 .channel = idx, \
186 .scan_type = { \ 186 .scan_type = { \
187 .sign = 'u', \ 187 .sign = 'u', \
diff --git a/drivers/staging/iio/cdc/ad7150.c b/drivers/staging/iio/cdc/ad7150.c
index 3c608c14dd99..687dd2c91437 100644
--- a/drivers/staging/iio/cdc/ad7150.c
+++ b/drivers/staging/iio/cdc/ad7150.c
@@ -429,8 +429,8 @@ static const struct iio_chan_spec ad7150_channels[] = {
429 .type = IIO_CAPACITANCE, 429 .type = IIO_CAPACITANCE,
430 .indexed = 1, 430 .indexed = 1,
431 .channel = 0, 431 .channel = 0,
432 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 432 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
433 IIO_CHAN_INFO_AVERAGE_RAW_SEPARATE_BIT, 433 BIT(IIO_CHAN_INFO_AVERAGE_RAW),
434 .event_mask = 434 .event_mask =
435 IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) | 435 IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) |
436 IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING) | 436 IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING) |
@@ -442,8 +442,8 @@ static const struct iio_chan_spec ad7150_channels[] = {
442 .type = IIO_CAPACITANCE, 442 .type = IIO_CAPACITANCE,
443 .indexed = 1, 443 .indexed = 1,
444 .channel = 1, 444 .channel = 1,
445 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 445 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
446 IIO_CHAN_INFO_AVERAGE_RAW_SEPARATE_BIT, 446 BIT(IIO_CHAN_INFO_AVERAGE_RAW),
447 .event_mask = 447 .event_mask =
448 IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) | 448 IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) |
449 IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING) | 449 IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING) |
diff --git a/drivers/staging/iio/cdc/ad7152.c b/drivers/staging/iio/cdc/ad7152.c
index 3c92ba3722a8..1d7c5283a85c 100644
--- a/drivers/staging/iio/cdc/ad7152.c
+++ b/drivers/staging/iio/cdc/ad7152.c
@@ -436,38 +436,38 @@ static const struct iio_chan_spec ad7152_channels[] = {
436 .type = IIO_CAPACITANCE, 436 .type = IIO_CAPACITANCE,
437 .indexed = 1, 437 .indexed = 1,
438 .channel = 0, 438 .channel = 0,
439 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 439 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
440 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | 440 BIT(IIO_CHAN_INFO_CALIBSCALE) |
441 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | 441 BIT(IIO_CHAN_INFO_CALIBBIAS) |
442 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 442 BIT(IIO_CHAN_INFO_SCALE),
443 }, { 443 }, {
444 .type = IIO_CAPACITANCE, 444 .type = IIO_CAPACITANCE,
445 .differential = 1, 445 .differential = 1,
446 .indexed = 1, 446 .indexed = 1,
447 .channel = 0, 447 .channel = 0,
448 .channel2 = 2, 448 .channel2 = 2,
449 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 449 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
450 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | 450 BIT(IIO_CHAN_INFO_CALIBSCALE) |
451 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | 451 BIT(IIO_CHAN_INFO_CALIBBIAS) |
452 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 452 BIT(IIO_CHAN_INFO_SCALE),
453 }, { 453 }, {
454 .type = IIO_CAPACITANCE, 454 .type = IIO_CAPACITANCE,
455 .indexed = 1, 455 .indexed = 1,
456 .channel = 1, 456 .channel = 1,
457 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 457 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
458 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | 458 BIT(IIO_CHAN_INFO_CALIBSCALE) |
459 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | 459 BIT(IIO_CHAN_INFO_CALIBBIAS) |
460 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 460 BIT(IIO_CHAN_INFO_SCALE),
461 }, { 461 }, {
462 .type = IIO_CAPACITANCE, 462 .type = IIO_CAPACITANCE,
463 .differential = 1, 463 .differential = 1,
464 .indexed = 1, 464 .indexed = 1,
465 .channel = 1, 465 .channel = 1,
466 .channel2 = 3, 466 .channel2 = 3,
467 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 467 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
468 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | 468 BIT(IIO_CHAN_INFO_CALIBSCALE) |
469 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | 469 BIT(IIO_CHAN_INFO_CALIBBIAS) |
470 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 470 BIT(IIO_CHAN_INFO_SCALE),
471 } 471 }
472}; 472};
473/* 473/*
diff --git a/drivers/staging/iio/cdc/ad7746.c b/drivers/staging/iio/cdc/ad7746.c
index 466b82ecfbe0..94f9ca726d1c 100644
--- a/drivers/staging/iio/cdc/ad7746.c
+++ b/drivers/staging/iio/cdc/ad7746.c
@@ -123,8 +123,8 @@ static const struct iio_chan_spec ad7746_channels[] = {
123 .type = IIO_VOLTAGE, 123 .type = IIO_VOLTAGE,
124 .indexed = 1, 124 .indexed = 1,
125 .channel = 0, 125 .channel = 0,
126 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 126 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
127 IIO_CHAN_INFO_SCALE_SHARED_BIT, 127 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
128 .address = AD7746_REG_VT_DATA_HIGH << 8 | 128 .address = AD7746_REG_VT_DATA_HIGH << 8 |
129 AD7746_VTSETUP_VTMD_EXT_VIN, 129 AD7746_VTSETUP_VTMD_EXT_VIN,
130 }, 130 },
@@ -133,8 +133,8 @@ static const struct iio_chan_spec ad7746_channels[] = {
133 .indexed = 1, 133 .indexed = 1,
134 .channel = 1, 134 .channel = 1,
135 .extend_name = "supply", 135 .extend_name = "supply",
136 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 136 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
137 IIO_CHAN_INFO_SCALE_SHARED_BIT, 137 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
138 .address = AD7746_REG_VT_DATA_HIGH << 8 | 138 .address = AD7746_REG_VT_DATA_HIGH << 8 |
139 AD7746_VTSETUP_VTMD_VDD_MON, 139 AD7746_VTSETUP_VTMD_VDD_MON,
140 }, 140 },
@@ -142,7 +142,7 @@ static const struct iio_chan_spec ad7746_channels[] = {
142 .type = IIO_TEMP, 142 .type = IIO_TEMP,
143 .indexed = 1, 143 .indexed = 1,
144 .channel = 0, 144 .channel = 0,
145 .info_mask = IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT, 145 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
146 .address = AD7746_REG_VT_DATA_HIGH << 8 | 146 .address = AD7746_REG_VT_DATA_HIGH << 8 |
147 AD7746_VTSETUP_VTMD_INT_TEMP, 147 AD7746_VTSETUP_VTMD_INT_TEMP,
148 }, 148 },
@@ -150,7 +150,7 @@ static const struct iio_chan_spec ad7746_channels[] = {
150 .type = IIO_TEMP, 150 .type = IIO_TEMP,
151 .indexed = 1, 151 .indexed = 1,
152 .channel = 1, 152 .channel = 1,
153 .info_mask = IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT, 153 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
154 .address = AD7746_REG_VT_DATA_HIGH << 8 | 154 .address = AD7746_REG_VT_DATA_HIGH << 8 |
155 AD7746_VTSETUP_VTMD_EXT_TEMP, 155 AD7746_VTSETUP_VTMD_EXT_TEMP,
156 }, 156 },
@@ -158,11 +158,10 @@ static const struct iio_chan_spec ad7746_channels[] = {
158 .type = IIO_CAPACITANCE, 158 .type = IIO_CAPACITANCE,
159 .indexed = 1, 159 .indexed = 1,
160 .channel = 0, 160 .channel = 0,
161 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 161 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
162 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | 162 BIT(IIO_CHAN_INFO_CALIBSCALE) | BIT(IIO_CHAN_INFO_OFFSET),
163 IIO_CHAN_INFO_CALIBBIAS_SHARED_BIT | 163 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_CALIBBIAS) |
164 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | 164 BIT(IIO_CHAN_INFO_SCALE),
165 IIO_CHAN_INFO_SCALE_SHARED_BIT,
166 .address = AD7746_REG_CAP_DATA_HIGH << 8, 165 .address = AD7746_REG_CAP_DATA_HIGH << 8,
167 }, 166 },
168 [CIN1_DIFF] = { 167 [CIN1_DIFF] = {
@@ -171,11 +170,10 @@ static const struct iio_chan_spec ad7746_channels[] = {
171 .indexed = 1, 170 .indexed = 1,
172 .channel = 0, 171 .channel = 0,
173 .channel2 = 2, 172 .channel2 = 2,
174 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 173 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
175 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | 174 BIT(IIO_CHAN_INFO_CALIBSCALE) | BIT(IIO_CHAN_INFO_OFFSET),
176 IIO_CHAN_INFO_CALIBBIAS_SHARED_BIT | 175 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_CALIBBIAS) |
177 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | 176 BIT(IIO_CHAN_INFO_SCALE),
178 IIO_CHAN_INFO_SCALE_SHARED_BIT,
179 .address = AD7746_REG_CAP_DATA_HIGH << 8 | 177 .address = AD7746_REG_CAP_DATA_HIGH << 8 |
180 AD7746_CAPSETUP_CAPDIFF 178 AD7746_CAPSETUP_CAPDIFF
181 }, 179 },
@@ -183,11 +181,10 @@ static const struct iio_chan_spec ad7746_channels[] = {
183 .type = IIO_CAPACITANCE, 181 .type = IIO_CAPACITANCE,
184 .indexed = 1, 182 .indexed = 1,
185 .channel = 1, 183 .channel = 1,
186 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 184 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
187 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | 185 BIT(IIO_CHAN_INFO_CALIBSCALE) | BIT(IIO_CHAN_INFO_OFFSET),
188 IIO_CHAN_INFO_CALIBBIAS_SHARED_BIT | 186 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_CALIBBIAS) |
189 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | 187 BIT(IIO_CHAN_INFO_SCALE),
190 IIO_CHAN_INFO_SCALE_SHARED_BIT,
191 .address = AD7746_REG_CAP_DATA_HIGH << 8 | 188 .address = AD7746_REG_CAP_DATA_HIGH << 8 |
192 AD7746_CAPSETUP_CIN2, 189 AD7746_CAPSETUP_CIN2,
193 }, 190 },
@@ -197,11 +194,10 @@ static const struct iio_chan_spec ad7746_channels[] = {
197 .indexed = 1, 194 .indexed = 1,
198 .channel = 1, 195 .channel = 1,
199 .channel2 = 3, 196 .channel2 = 3,
200 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 197 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
201 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | 198 BIT(IIO_CHAN_INFO_CALIBSCALE) | BIT(IIO_CHAN_INFO_OFFSET),
202 IIO_CHAN_INFO_CALIBBIAS_SHARED_BIT | 199 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_CALIBBIAS) |
203 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | 200 BIT(IIO_CHAN_INFO_SCALE),
204 IIO_CHAN_INFO_SCALE_SHARED_BIT,
205 .address = AD7746_REG_CAP_DATA_HIGH << 8 | 201 .address = AD7746_REG_CAP_DATA_HIGH << 8 |
206 AD7746_CAPSETUP_CAPDIFF | AD7746_CAPSETUP_CIN2, 202 AD7746_CAPSETUP_CAPDIFF | AD7746_CAPSETUP_CIN2,
207 } 203 }
diff --git a/drivers/staging/iio/gyro/adis16060_core.c b/drivers/staging/iio/gyro/adis16060_core.c
index 687c151f9847..c67d3a832aef 100644
--- a/drivers/staging/iio/gyro/adis16060_core.c
+++ b/drivers/staging/iio/gyro/adis16060_core.c
@@ -120,27 +120,26 @@ static const struct iio_chan_spec adis16060_channels[] = {
120 .type = IIO_ANGL_VEL, 120 .type = IIO_ANGL_VEL,
121 .modified = 1, 121 .modified = 1,
122 .channel2 = IIO_MOD_Z, 122 .channel2 = IIO_MOD_Z,
123 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 123 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
124 .address = ADIS16060_GYRO, 124 .address = ADIS16060_GYRO,
125 }, { 125 }, {
126 .type = IIO_VOLTAGE, 126 .type = IIO_VOLTAGE,
127 .indexed = 1, 127 .indexed = 1,
128 .channel = 0, 128 .channel = 0,
129 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 129 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
130 .address = ADIS16060_AIN1, 130 .address = ADIS16060_AIN1,
131 }, { 131 }, {
132 .type = IIO_VOLTAGE, 132 .type = IIO_VOLTAGE,
133 .indexed = 1, 133 .indexed = 1,
134 .channel = 1, 134 .channel = 1,
135 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 135 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
136 .address = ADIS16060_AIN2, 136 .address = ADIS16060_AIN2,
137 }, { 137 }, {
138 .type = IIO_TEMP, 138 .type = IIO_TEMP,
139 .indexed = 1, 139 .indexed = 1,
140 .channel = 0, 140 .channel = 0,
141 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 141 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
142 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | 142 BIT(IIO_CHAN_INFO_OFFSET) | BIT(IIO_CHAN_INFO_SCALE),
143 IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
144 .address = ADIS16060_TEMP_OUT, 143 .address = ADIS16060_TEMP_OUT,
145 } 144 }
146}; 145};
diff --git a/drivers/staging/iio/gyro/adis16130_core.c b/drivers/staging/iio/gyro/adis16130_core.c
index 835801ee7e80..531b803cb2ac 100644
--- a/drivers/staging/iio/gyro/adis16130_core.c
+++ b/drivers/staging/iio/gyro/adis16130_core.c
@@ -100,13 +100,13 @@ static const struct iio_chan_spec adis16130_channels[] = {
100 .type = IIO_ANGL_VEL, 100 .type = IIO_ANGL_VEL,
101 .modified = 1, 101 .modified = 1,
102 .channel2 = IIO_MOD_Z, 102 .channel2 = IIO_MOD_Z,
103 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 103 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
104 .address = ADIS16130_RATEDATA, 104 .address = ADIS16130_RATEDATA,
105 }, { 105 }, {
106 .type = IIO_TEMP, 106 .type = IIO_TEMP,
107 .indexed = 1, 107 .indexed = 1,
108 .channel = 0, 108 .channel = 0,
109 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 109 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
110 .address = ADIS16130_TEMPDATA, 110 .address = ADIS16130_TEMPDATA,
111 } 111 }
112}; 112};
diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index 6e80b8c768ae..620d63fd099b 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -124,8 +124,8 @@ static IIO_DEVICE_ATTR(sampling_frequency_available,
124#define ADIS16260_GYRO_CHANNEL_SET(axis, mod) \ 124#define ADIS16260_GYRO_CHANNEL_SET(axis, mod) \
125struct iio_chan_spec adis16260_channels_##axis[] = { \ 125struct iio_chan_spec adis16260_channels_##axis[] = { \
126 ADIS_GYRO_CHAN(mod, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO, \ 126 ADIS_GYRO_CHAN(mod, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO, \
127 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | \ 127 BIT(IIO_CHAN_INFO_CALIBBIAS) | \
128 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT, 14), \ 128 BIT(IIO_CHAN_INFO_CALIBSCALE), 14), \
129 ADIS_INCLI_CHAN(mod, ADIS16260_ANGL_OUT, ADIS16260_SCAN_ANGL, 0, 14), \ 129 ADIS_INCLI_CHAN(mod, ADIS16260_ANGL_OUT, ADIS16260_SCAN_ANGL, 0, 14), \
130 ADIS_TEMP_CHAN(ADIS16260_TEMP_OUT, ADIS16260_SCAN_TEMP, 12), \ 130 ADIS_TEMP_CHAN(ADIS16260_TEMP_OUT, ADIS16260_SCAN_TEMP, 12), \
131 ADIS_SUPPLY_CHAN(ADIS16260_SUPPLY_OUT, ADIS16260_SCAN_SUPPLY, 12), \ 131 ADIS_SUPPLY_CHAN(ADIS16260_SUPPLY_OUT, ADIS16260_SCAN_SUPPLY, 12), \
diff --git a/drivers/staging/iio/iio_simple_dummy.c b/drivers/staging/iio/iio_simple_dummy.c
index aee76c710a3b..0193e1796b18 100644
--- a/drivers/staging/iio/iio_simple_dummy.c
+++ b/drivers/staging/iio/iio_simple_dummy.c
@@ -71,25 +71,25 @@ static const struct iio_chan_spec iio_dummy_channels[] = {
71 .indexed = 1, 71 .indexed = 1,
72 .channel = 0, 72 .channel = 0,
73 /* What other information is available? */ 73 /* What other information is available? */
74 .info_mask = 74 .info_mask_separate =
75 /* 75 /*
76 * in_voltage0_raw 76 * in_voltage0_raw
77 * Raw (unscaled no bias removal etc) measurement 77 * Raw (unscaled no bias removal etc) measurement
78 * from the device. 78 * from the device.
79 */ 79 */
80 IIO_CHAN_INFO_RAW_SEPARATE_BIT | 80 BIT(IIO_CHAN_INFO_RAW) |
81 /* 81 /*
82 * in_voltage0_offset 82 * in_voltage0_offset
83 * Offset for userspace to apply prior to scale 83 * Offset for userspace to apply prior to scale
84 * when converting to standard units (microvolts) 84 * when converting to standard units (microvolts)
85 */ 85 */
86 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | 86 BIT(IIO_CHAN_INFO_OFFSET) |
87 /* 87 /*
88 * in_voltage0_scale 88 * in_voltage0_scale
89 * Multipler for userspace to apply post offset 89 * Multipler for userspace to apply post offset
90 * when converting to standard units (microvolts) 90 * when converting to standard units (microvolts)
91 */ 91 */
92 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 92 BIT(IIO_CHAN_INFO_SCALE),
93 /* The ordering of elements in the buffer via an enum */ 93 /* The ordering of elements in the buffer via an enum */
94 .scan_index = voltage0, 94 .scan_index = voltage0,
95 .scan_type = { /* Description of storage in buffer */ 95 .scan_type = { /* Description of storage in buffer */
@@ -118,19 +118,18 @@ static const struct iio_chan_spec iio_dummy_channels[] = {
118 .indexed = 1, 118 .indexed = 1,
119 .channel = 1, 119 .channel = 1,
120 .channel2 = 2, 120 .channel2 = 2,
121 .info_mask =
122 /* 121 /*
123 * in_voltage1-voltage2_raw 122 * in_voltage1-voltage2_raw
124 * Raw (unscaled no bias removal etc) measurement 123 * Raw (unscaled no bias removal etc) measurement
125 * from the device. 124 * from the device.
126 */ 125 */
127 IIO_CHAN_INFO_RAW_SEPARATE_BIT | 126 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
128 /* 127 /*
129 * in_voltage-voltage_scale 128 * in_voltage-voltage_scale
130 * Shared version of scale - shared by differential 129 * Shared version of scale - shared by differential
131 * input channels of type IIO_VOLTAGE. 130 * input channels of type IIO_VOLTAGE.
132 */ 131 */
133 IIO_CHAN_INFO_SCALE_SHARED_BIT, 132 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
134 .scan_index = diffvoltage1m2, 133 .scan_index = diffvoltage1m2,
135 .scan_type = { /* Description of storage in buffer */ 134 .scan_type = { /* Description of storage in buffer */
136 .sign = 's', /* signed */ 135 .sign = 's', /* signed */
@@ -146,9 +145,8 @@ static const struct iio_chan_spec iio_dummy_channels[] = {
146 .indexed = 1, 145 .indexed = 1,
147 .channel = 3, 146 .channel = 3,
148 .channel2 = 4, 147 .channel2 = 4,
149 .info_mask = 148 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
150 IIO_CHAN_INFO_RAW_SEPARATE_BIT | 149 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
151 IIO_CHAN_INFO_SCALE_SHARED_BIT,
152 .scan_index = diffvoltage3m4, 150 .scan_index = diffvoltage3m4,
153 .scan_type = { 151 .scan_type = {
154 .sign = 's', 152 .sign = 's',
@@ -166,15 +164,14 @@ static const struct iio_chan_spec iio_dummy_channels[] = {
166 .modified = 1, 164 .modified = 1,
167 /* Channel 2 is use for modifiers */ 165 /* Channel 2 is use for modifiers */
168 .channel2 = IIO_MOD_X, 166 .channel2 = IIO_MOD_X,
169 .info_mask = 167 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
170 IIO_CHAN_INFO_RAW_SEPARATE_BIT |
171 /* 168 /*
172 * Internal bias correction value. Applied 169 * Internal bias correction value. Applied
173 * by the hardware or driver prior to userspace 170 * by the hardware or driver prior to userspace
174 * seeing the readings. Typically part of hardware 171 * seeing the readings. Typically part of hardware
175 * calibration. 172 * calibration.
176 */ 173 */
177 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, 174 BIT(IIO_CHAN_INFO_CALIBBIAS),
178 .scan_index = accelx, 175 .scan_index = accelx,
179 .scan_type = { /* Description of storage in buffer */ 176 .scan_type = { /* Description of storage in buffer */
180 .sign = 's', /* signed */ 177 .sign = 's', /* signed */
@@ -191,7 +188,7 @@ static const struct iio_chan_spec iio_dummy_channels[] = {
191 /* DAC channel out_voltage0_raw */ 188 /* DAC channel out_voltage0_raw */
192 { 189 {
193 .type = IIO_VOLTAGE, 190 .type = IIO_VOLTAGE,
194 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 191 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
195 .output = 1, 192 .output = 1,
196 .indexed = 1, 193 .indexed = 1,
197 .channel = 0, 194 .channel = 0,
@@ -204,8 +201,8 @@ static const struct iio_chan_spec iio_dummy_channels[] = {
204 * @chan: the channel whose data is to be read 201 * @chan: the channel whose data is to be read
205 * @val: first element of returned value (typically INT) 202 * @val: first element of returned value (typically INT)
206 * @val2: second element of returned value (typically MICRO) 203 * @val2: second element of returned value (typically MICRO)
207 * @mask: what we actually want to read. 0 is the channel, everything else 204 * @mask: what we actually want to read as per the info_mask_*
208 * is as per the info_mask in iio_chan_spec. 205 * in iio_chan_spec.
209 */ 206 */
210static int iio_dummy_read_raw(struct iio_dev *indio_dev, 207static int iio_dummy_read_raw(struct iio_dev *indio_dev,
211 struct iio_chan_spec const *chan, 208 struct iio_chan_spec const *chan,
@@ -287,8 +284,8 @@ static int iio_dummy_read_raw(struct iio_dev *indio_dev,
287 * @chan: the channel whose data is to be written 284 * @chan: the channel whose data is to be written
288 * @val: first element of value to set (typically INT) 285 * @val: first element of value to set (typically INT)
289 * @val2: second element of value to set (typically MICRO) 286 * @val2: second element of value to set (typically MICRO)
290 * @mask: what we actually want to write. 0 is the channel, everything else 287 * @mask: what we actually want to write as per the info_mask_*
291 * is as per the info_mask in iio_chan_spec. 288 * in iio_chan_spec.
292 * 289 *
293 * Note that all raw writes are assumed IIO_VAL_INT and info mask elements 290 * Note that all raw writes are assumed IIO_VAL_INT and info mask elements
294 * are assumed to be IIO_INT_PLUS_MICRO unless the callback write_raw_get_fmt 291 * are assumed to be IIO_INT_PLUS_MICRO unless the callback write_raw_get_fmt
diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
index 440e2261e8cb..6330af656a0f 100644
--- a/drivers/staging/iio/impedance-analyzer/ad5933.c
+++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
@@ -113,7 +113,7 @@ static const struct iio_chan_spec ad5933_channels[] = {
113 .type = IIO_TEMP, 113 .type = IIO_TEMP,
114 .indexed = 1, 114 .indexed = 1,
115 .channel = 0, 115 .channel = 0,
116 .info_mask = IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT, 116 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
117 .address = AD5933_REG_TEMP_DATA, 117 .address = AD5933_REG_TEMP_DATA,
118 .scan_type = { 118 .scan_type = {
119 .sign = 's', 119 .sign = 's',
@@ -125,8 +125,8 @@ static const struct iio_chan_spec ad5933_channels[] = {
125 .indexed = 1, 125 .indexed = 1,
126 .channel = 0, 126 .channel = 0,
127 .extend_name = "real_raw", 127 .extend_name = "real_raw",
128 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 128 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
129 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 129 BIT(IIO_CHAN_INFO_SCALE),
130 .address = AD5933_REG_REAL_DATA, 130 .address = AD5933_REG_REAL_DATA,
131 .scan_index = 0, 131 .scan_index = 0,
132 .scan_type = { 132 .scan_type = {
@@ -139,8 +139,8 @@ static const struct iio_chan_spec ad5933_channels[] = {
139 .indexed = 1, 139 .indexed = 1,
140 .channel = 0, 140 .channel = 0,
141 .extend_name = "imag_raw", 141 .extend_name = "imag_raw",
142 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 142 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
143 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 143 BIT(IIO_CHAN_INFO_SCALE),
144 .address = AD5933_REG_IMAG_DATA, 144 .address = AD5933_REG_IMAG_DATA,
145 .scan_index = 1, 145 .scan_index = 1,
146 .scan_type = { 146 .scan_type = {
diff --git a/drivers/staging/iio/light/isl29018.c b/drivers/staging/iio/light/isl29018.c
index b0adac0bf5d5..82478a59e42e 100644
--- a/drivers/staging/iio/light/isl29018.c
+++ b/drivers/staging/iio/light/isl29018.c
@@ -412,17 +412,17 @@ static const struct iio_chan_spec isl29018_channels[] = {
412 .type = IIO_LIGHT, 412 .type = IIO_LIGHT,
413 .indexed = 1, 413 .indexed = 1,
414 .channel = 0, 414 .channel = 0,
415 .info_mask = IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT | 415 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
416 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT, 416 BIT(IIO_CHAN_INFO_CALIBSCALE),
417 }, { 417 }, {
418 .type = IIO_INTENSITY, 418 .type = IIO_INTENSITY,
419 .modified = 1, 419 .modified = 1,
420 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 420 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
421 .channel2 = IIO_MOD_LIGHT_IR, 421 .channel2 = IIO_MOD_LIGHT_IR,
422 }, { 422 }, {
423 /* Unindexed in current ABI. But perhaps it should be. */ 423 /* Unindexed in current ABI. But perhaps it should be. */
424 .type = IIO_PROXIMITY, 424 .type = IIO_PROXIMITY,
425 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 425 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
426 } 426 }
427}; 427};
428 428
diff --git a/drivers/staging/iio/light/isl29028.c b/drivers/staging/iio/light/isl29028.c
index e52af77f7782..8bb0d03627f2 100644
--- a/drivers/staging/iio/light/isl29028.c
+++ b/drivers/staging/iio/light/isl29028.c
@@ -391,15 +391,15 @@ static const struct attribute_group isl29108_group = {
391static const struct iio_chan_spec isl29028_channels[] = { 391static const struct iio_chan_spec isl29028_channels[] = {
392 { 392 {
393 .type = IIO_LIGHT, 393 .type = IIO_LIGHT,
394 .info_mask = IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT | 394 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
395 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, 395 BIT(IIO_CHAN_INFO_SCALE),
396 }, { 396 }, {
397 .type = IIO_INTENSITY, 397 .type = IIO_INTENSITY,
398 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 398 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
399 }, { 399 }, {
400 .type = IIO_PROXIMITY, 400 .type = IIO_PROXIMITY,
401 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 401 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
402 IIO_CHAN_INFO_SAMP_FREQ_SEPARATE_BIT, 402 BIT(IIO_CHAN_INFO_SAMP_FREQ),
403 } 403 }
404}; 404};
405 405
diff --git a/drivers/staging/iio/light/tsl2x7x_core.c b/drivers/staging/iio/light/tsl2x7x_core.c
index a58731e70bb9..d060f2572512 100644
--- a/drivers/staging/iio/light/tsl2x7x_core.c
+++ b/drivers/staging/iio/light/tsl2x7x_core.c
@@ -1733,14 +1733,14 @@ static const struct tsl2x7x_chip_info tsl2x7x_chip_info_tbl[] = {
1733 .type = IIO_LIGHT, 1733 .type = IIO_LIGHT,
1734 .indexed = 1, 1734 .indexed = 1,
1735 .channel = 0, 1735 .channel = 0,
1736 .info_mask = IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT, 1736 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
1737 }, { 1737 }, {
1738 .type = IIO_INTENSITY, 1738 .type = IIO_INTENSITY,
1739 .indexed = 1, 1739 .indexed = 1,
1740 .channel = 0, 1740 .channel = 0,
1741 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 1741 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
1742 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | 1742 BIT(IIO_CHAN_INFO_CALIBSCALE) |
1743 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, 1743 BIT(IIO_CHAN_INFO_CALIBBIAS),
1744 .event_mask = TSL2X7X_EVENT_MASK 1744 .event_mask = TSL2X7X_EVENT_MASK
1745 }, { 1745 }, {
1746 .type = IIO_INTENSITY, 1746 .type = IIO_INTENSITY,
@@ -1757,7 +1757,7 @@ static const struct tsl2x7x_chip_info tsl2x7x_chip_info_tbl[] = {
1757 .type = IIO_PROXIMITY, 1757 .type = IIO_PROXIMITY,
1758 .indexed = 1, 1758 .indexed = 1,
1759 .channel = 0, 1759 .channel = 0,
1760 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 1760 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
1761 .event_mask = TSL2X7X_EVENT_MASK 1761 .event_mask = TSL2X7X_EVENT_MASK
1762 }, 1762 },
1763 }, 1763 },
@@ -1770,25 +1770,25 @@ static const struct tsl2x7x_chip_info tsl2x7x_chip_info_tbl[] = {
1770 .type = IIO_LIGHT, 1770 .type = IIO_LIGHT,
1771 .indexed = 1, 1771 .indexed = 1,
1772 .channel = 0, 1772 .channel = 0,
1773 .info_mask = IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT 1773 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED)
1774 }, { 1774 }, {
1775 .type = IIO_INTENSITY, 1775 .type = IIO_INTENSITY,
1776 .indexed = 1, 1776 .indexed = 1,
1777 .channel = 0, 1777 .channel = 0,
1778 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 1778 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
1779 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | 1779 BIT(IIO_CHAN_INFO_CALIBSCALE) |
1780 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, 1780 BIT(IIO_CHAN_INFO_CALIBBIAS),
1781 .event_mask = TSL2X7X_EVENT_MASK 1781 .event_mask = TSL2X7X_EVENT_MASK
1782 }, { 1782 }, {
1783 .type = IIO_INTENSITY, 1783 .type = IIO_INTENSITY,
1784 .indexed = 1, 1784 .indexed = 1,
1785 .channel = 1, 1785 .channel = 1,
1786 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 1786 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
1787 }, { 1787 }, {
1788 .type = IIO_PROXIMITY, 1788 .type = IIO_PROXIMITY,
1789 .indexed = 1, 1789 .indexed = 1,
1790 .channel = 0, 1790 .channel = 0,
1791 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 1791 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
1792 .event_mask = TSL2X7X_EVENT_MASK 1792 .event_mask = TSL2X7X_EVENT_MASK
1793 }, 1793 },
1794 }, 1794 },
@@ -1801,8 +1801,8 @@ static const struct tsl2x7x_chip_info tsl2x7x_chip_info_tbl[] = {
1801 .type = IIO_PROXIMITY, 1801 .type = IIO_PROXIMITY,
1802 .indexed = 1, 1802 .indexed = 1,
1803 .channel = 0, 1803 .channel = 0,
1804 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 1804 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
1805 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT, 1805 BIT(IIO_CHAN_INFO_CALIBSCALE),
1806 .event_mask = TSL2X7X_EVENT_MASK 1806 .event_mask = TSL2X7X_EVENT_MASK
1807 }, 1807 },
1808 }, 1808 },
@@ -1815,26 +1815,26 @@ static const struct tsl2x7x_chip_info tsl2x7x_chip_info_tbl[] = {
1815 .type = IIO_LIGHT, 1815 .type = IIO_LIGHT,
1816 .indexed = 1, 1816 .indexed = 1,
1817 .channel = 0, 1817 .channel = 0,
1818 .info_mask = IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT, 1818 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
1819 }, { 1819 }, {
1820 .type = IIO_INTENSITY, 1820 .type = IIO_INTENSITY,
1821 .indexed = 1, 1821 .indexed = 1,
1822 .channel = 0, 1822 .channel = 0,
1823 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 1823 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
1824 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | 1824 BIT(IIO_CHAN_INFO_CALIBSCALE) |
1825 IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT, 1825 BIT(IIO_CHAN_INFO_CALIBBIAS),
1826 .event_mask = TSL2X7X_EVENT_MASK 1826 .event_mask = TSL2X7X_EVENT_MASK
1827 }, { 1827 }, {
1828 .type = IIO_INTENSITY, 1828 .type = IIO_INTENSITY,
1829 .indexed = 1, 1829 .indexed = 1,
1830 .channel = 1, 1830 .channel = 1,
1831 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 1831 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
1832 }, { 1832 }, {
1833 .type = IIO_PROXIMITY, 1833 .type = IIO_PROXIMITY,
1834 .indexed = 1, 1834 .indexed = 1,
1835 .channel = 0, 1835 .channel = 0,
1836 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 1836 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
1837 IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT, 1837 BIT(IIO_CHAN_INFO_CALIBSCALE),
1838 .event_mask = TSL2X7X_EVENT_MASK 1838 .event_mask = TSL2X7X_EVENT_MASK
1839 }, 1839 },
1840 }, 1840 },
diff --git a/drivers/staging/iio/magnetometer/ak8975.c b/drivers/staging/iio/magnetometer/ak8975.c
index 28f080e9eeee..b614da1b21f8 100644
--- a/drivers/staging/iio/magnetometer/ak8975.c
+++ b/drivers/staging/iio/magnetometer/ak8975.c
@@ -395,8 +395,8 @@ static int ak8975_read_raw(struct iio_dev *indio_dev,
395 .type = IIO_MAGN, \ 395 .type = IIO_MAGN, \
396 .modified = 1, \ 396 .modified = 1, \
397 .channel2 = IIO_MOD_##axis, \ 397 .channel2 = IIO_MOD_##axis, \
398 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 398 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
399 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ 399 BIT(IIO_CHAN_INFO_SCALE), \
400 .address = index, \ 400 .address = index, \
401 } 401 }
402 402
diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c
index 1a520ecfa3e2..86c6bf9d5dd8 100644
--- a/drivers/staging/iio/magnetometer/hmc5843.c
+++ b/drivers/staging/iio/magnetometer/hmc5843.c
@@ -564,8 +564,8 @@ static int hmc5843_read_raw(struct iio_dev *indio_dev,
564 .type = IIO_MAGN, \ 564 .type = IIO_MAGN, \
565 .modified = 1, \ 565 .modified = 1, \
566 .channel2 = IIO_MOD_##axis, \ 566 .channel2 = IIO_MOD_##axis, \
567 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 567 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
568 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 568 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
569 .address = add \ 569 .address = add \
570 } 570 }
571 571
diff --git a/drivers/staging/iio/meter/ade7758_core.c b/drivers/staging/iio/meter/ade7758_core.c
index 53c68dcc4544..8f5bcfab3563 100644
--- a/drivers/staging/iio/meter/ade7758_core.c
+++ b/drivers/staging/iio/meter/ade7758_core.c
@@ -649,8 +649,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
649 .indexed = 1, 649 .indexed = 1,
650 .channel = 0, 650 .channel = 0,
651 .extend_name = "raw", 651 .extend_name = "raw",
652 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 652 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
653 IIO_CHAN_INFO_SCALE_SHARED_BIT, 653 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
654 .address = AD7758_WT(AD7758_PHASE_A, AD7758_VOLTAGE), 654 .address = AD7758_WT(AD7758_PHASE_A, AD7758_VOLTAGE),
655 .scan_index = 0, 655 .scan_index = 0,
656 .scan_type = { 656 .scan_type = {
@@ -663,8 +663,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
663 .indexed = 1, 663 .indexed = 1,
664 .channel = 0, 664 .channel = 0,
665 .extend_name = "raw", 665 .extend_name = "raw",
666 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 666 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
667 IIO_CHAN_INFO_SCALE_SHARED_BIT, 667 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
668 .address = AD7758_WT(AD7758_PHASE_A, AD7758_CURRENT), 668 .address = AD7758_WT(AD7758_PHASE_A, AD7758_CURRENT),
669 .scan_index = 1, 669 .scan_index = 1,
670 .scan_type = { 670 .scan_type = {
@@ -677,8 +677,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
677 .indexed = 1, 677 .indexed = 1,
678 .channel = 0, 678 .channel = 0,
679 .extend_name = "apparent_raw", 679 .extend_name = "apparent_raw",
680 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 680 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
681 IIO_CHAN_INFO_SCALE_SHARED_BIT, 681 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
682 .address = AD7758_WT(AD7758_PHASE_A, AD7758_APP_PWR), 682 .address = AD7758_WT(AD7758_PHASE_A, AD7758_APP_PWR),
683 .scan_index = 2, 683 .scan_index = 2,
684 .scan_type = { 684 .scan_type = {
@@ -691,8 +691,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
691 .indexed = 1, 691 .indexed = 1,
692 .channel = 0, 692 .channel = 0,
693 .extend_name = "active_raw", 693 .extend_name = "active_raw",
694 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 694 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
695 IIO_CHAN_INFO_SCALE_SHARED_BIT, 695 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
696 .address = AD7758_WT(AD7758_PHASE_A, AD7758_ACT_PWR), 696 .address = AD7758_WT(AD7758_PHASE_A, AD7758_ACT_PWR),
697 .scan_index = 3, 697 .scan_index = 3,
698 .scan_type = { 698 .scan_type = {
@@ -705,8 +705,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
705 .indexed = 1, 705 .indexed = 1,
706 .channel = 0, 706 .channel = 0,
707 .extend_name = "reactive_raw", 707 .extend_name = "reactive_raw",
708 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 708 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
709 IIO_CHAN_INFO_SCALE_SHARED_BIT, 709 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
710 .address = AD7758_WT(AD7758_PHASE_A, AD7758_REACT_PWR), 710 .address = AD7758_WT(AD7758_PHASE_A, AD7758_REACT_PWR),
711 .scan_index = 4, 711 .scan_index = 4,
712 .scan_type = { 712 .scan_type = {
@@ -719,8 +719,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
719 .indexed = 1, 719 .indexed = 1,
720 .channel = 1, 720 .channel = 1,
721 .extend_name = "raw", 721 .extend_name = "raw",
722 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 722 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
723 IIO_CHAN_INFO_SCALE_SHARED_BIT, 723 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
724 .address = AD7758_WT(AD7758_PHASE_B, AD7758_VOLTAGE), 724 .address = AD7758_WT(AD7758_PHASE_B, AD7758_VOLTAGE),
725 .scan_index = 5, 725 .scan_index = 5,
726 .scan_type = { 726 .scan_type = {
@@ -733,8 +733,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
733 .indexed = 1, 733 .indexed = 1,
734 .channel = 1, 734 .channel = 1,
735 .extend_name = "raw", 735 .extend_name = "raw",
736 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 736 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
737 IIO_CHAN_INFO_SCALE_SHARED_BIT, 737 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
738 .address = AD7758_WT(AD7758_PHASE_B, AD7758_CURRENT), 738 .address = AD7758_WT(AD7758_PHASE_B, AD7758_CURRENT),
739 .scan_index = 6, 739 .scan_index = 6,
740 .scan_type = { 740 .scan_type = {
@@ -747,8 +747,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
747 .indexed = 1, 747 .indexed = 1,
748 .channel = 1, 748 .channel = 1,
749 .extend_name = "apparent_raw", 749 .extend_name = "apparent_raw",
750 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 750 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
751 IIO_CHAN_INFO_SCALE_SHARED_BIT, 751 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
752 .address = AD7758_WT(AD7758_PHASE_B, AD7758_APP_PWR), 752 .address = AD7758_WT(AD7758_PHASE_B, AD7758_APP_PWR),
753 .scan_index = 7, 753 .scan_index = 7,
754 .scan_type = { 754 .scan_type = {
@@ -761,8 +761,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
761 .indexed = 1, 761 .indexed = 1,
762 .channel = 1, 762 .channel = 1,
763 .extend_name = "active_raw", 763 .extend_name = "active_raw",
764 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 764 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
765 IIO_CHAN_INFO_SCALE_SHARED_BIT, 765 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
766 .address = AD7758_WT(AD7758_PHASE_B, AD7758_ACT_PWR), 766 .address = AD7758_WT(AD7758_PHASE_B, AD7758_ACT_PWR),
767 .scan_index = 8, 767 .scan_index = 8,
768 .scan_type = { 768 .scan_type = {
@@ -775,8 +775,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
775 .indexed = 1, 775 .indexed = 1,
776 .channel = 1, 776 .channel = 1,
777 .extend_name = "reactive_raw", 777 .extend_name = "reactive_raw",
778 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 778 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
779 IIO_CHAN_INFO_SCALE_SHARED_BIT, 779 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
780 .address = AD7758_WT(AD7758_PHASE_B, AD7758_REACT_PWR), 780 .address = AD7758_WT(AD7758_PHASE_B, AD7758_REACT_PWR),
781 .scan_index = 9, 781 .scan_index = 9,
782 .scan_type = { 782 .scan_type = {
@@ -789,8 +789,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
789 .indexed = 1, 789 .indexed = 1,
790 .channel = 2, 790 .channel = 2,
791 .extend_name = "raw", 791 .extend_name = "raw",
792 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 792 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
793 IIO_CHAN_INFO_SCALE_SHARED_BIT, 793 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
794 .address = AD7758_WT(AD7758_PHASE_C, AD7758_VOLTAGE), 794 .address = AD7758_WT(AD7758_PHASE_C, AD7758_VOLTAGE),
795 .scan_index = 10, 795 .scan_index = 10,
796 .scan_type = { 796 .scan_type = {
@@ -803,8 +803,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
803 .indexed = 1, 803 .indexed = 1,
804 .channel = 2, 804 .channel = 2,
805 .extend_name = "raw", 805 .extend_name = "raw",
806 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 806 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
807 IIO_CHAN_INFO_SCALE_SHARED_BIT, 807 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
808 .address = AD7758_WT(AD7758_PHASE_C, AD7758_CURRENT), 808 .address = AD7758_WT(AD7758_PHASE_C, AD7758_CURRENT),
809 .scan_index = 11, 809 .scan_index = 11,
810 .scan_type = { 810 .scan_type = {
@@ -817,8 +817,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
817 .indexed = 1, 817 .indexed = 1,
818 .channel = 2, 818 .channel = 2,
819 .extend_name = "apparent_raw", 819 .extend_name = "apparent_raw",
820 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 820 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
821 IIO_CHAN_INFO_SCALE_SHARED_BIT, 821 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
822 .address = AD7758_WT(AD7758_PHASE_C, AD7758_APP_PWR), 822 .address = AD7758_WT(AD7758_PHASE_C, AD7758_APP_PWR),
823 .scan_index = 12, 823 .scan_index = 12,
824 .scan_type = { 824 .scan_type = {
@@ -831,8 +831,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
831 .indexed = 1, 831 .indexed = 1,
832 .channel = 2, 832 .channel = 2,
833 .extend_name = "active_raw", 833 .extend_name = "active_raw",
834 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 834 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
835 IIO_CHAN_INFO_SCALE_SHARED_BIT, 835 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
836 .address = AD7758_WT(AD7758_PHASE_C, AD7758_ACT_PWR), 836 .address = AD7758_WT(AD7758_PHASE_C, AD7758_ACT_PWR),
837 .scan_index = 13, 837 .scan_index = 13,
838 .scan_type = { 838 .scan_type = {
@@ -845,8 +845,8 @@ static const struct iio_chan_spec ade7758_channels[] = {
845 .indexed = 1, 845 .indexed = 1,
846 .channel = 2, 846 .channel = 2,
847 .extend_name = "reactive_raw", 847 .extend_name = "reactive_raw",
848 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | 848 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
849 IIO_CHAN_INFO_SCALE_SHARED_BIT, 849 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
850 .address = AD7758_WT(AD7758_PHASE_C, AD7758_REACT_PWR), 850 .address = AD7758_WT(AD7758_PHASE_C, AD7758_REACT_PWR),
851 .scan_index = 14, 851 .scan_index = 14,
852 .scan_type = { 852 .scan_type = {
diff --git a/drivers/staging/iio/resolver/ad2s1200.c b/drivers/staging/iio/resolver/ad2s1200.c
index 4fe349914f9a..71221161aa6b 100644
--- a/drivers/staging/iio/resolver/ad2s1200.c
+++ b/drivers/staging/iio/resolver/ad2s1200.c
@@ -85,12 +85,12 @@ static const struct iio_chan_spec ad2s1200_channels[] = {
85 .type = IIO_ANGL, 85 .type = IIO_ANGL,
86 .indexed = 1, 86 .indexed = 1,
87 .channel = 0, 87 .channel = 0,
88 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 88 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
89 }, { 89 }, {
90 .type = IIO_ANGL_VEL, 90 .type = IIO_ANGL_VEL,
91 .indexed = 1, 91 .indexed = 1,
92 .channel = 0, 92 .channel = 0,
93 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 93 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
94 } 94 }
95}; 95};
96 96
diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
index 53110b6a3c74..0d3356d4b7d2 100644
--- a/drivers/staging/iio/resolver/ad2s1210.c
+++ b/drivers/staging/iio/resolver/ad2s1210.c
@@ -577,12 +577,12 @@ static const struct iio_chan_spec ad2s1210_channels[] = {
577 .type = IIO_ANGL, 577 .type = IIO_ANGL,
578 .indexed = 1, 578 .indexed = 1,
579 .channel = 0, 579 .channel = 0,
580 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 580 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
581 }, { 581 }, {
582 .type = IIO_ANGL_VEL, 582 .type = IIO_ANGL_VEL,
583 .indexed = 1, 583 .indexed = 1,
584 .channel = 0, 584 .channel = 0,
585 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 585 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
586 } 586 }
587}; 587};
588 588
diff --git a/drivers/staging/iio/resolver/ad2s90.c b/drivers/staging/iio/resolver/ad2s90.c
index 0aecfbcdb992..40b825286d4a 100644
--- a/drivers/staging/iio/resolver/ad2s90.c
+++ b/drivers/staging/iio/resolver/ad2s90.c
@@ -55,7 +55,7 @@ static const struct iio_chan_spec ad2s90_chan = {
55 .type = IIO_ANGL, 55 .type = IIO_ANGL,
56 .indexed = 1, 56 .indexed = 1,
57 .channel = 0, 57 .channel = 0,
58 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, 58 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
59}; 59};
60 60
61static int ad2s90_probe(struct spi_device *spi) 61static int ad2s90_probe(struct spi_device *spi)
diff --git a/include/linux/iio/adc/ad_sigma_delta.h b/include/linux/iio/adc/ad_sigma_delta.h
index 2e4eab9868a3..e7fdec4db9da 100644
--- a/include/linux/iio/adc/ad_sigma_delta.h
+++ b/include/linux/iio/adc/ad_sigma_delta.h
@@ -133,9 +133,9 @@ int ad_sd_validate_trigger(struct iio_dev *indio_dev, struct iio_trigger *trig);
133 .channel2 = (_channel2), \ 133 .channel2 = (_channel2), \
134 .address = (_address), \ 134 .address = (_address), \
135 .extend_name = (_extend_name), \ 135 .extend_name = (_extend_name), \
136 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 136 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
137 IIO_CHAN_INFO_SCALE_SHARED_BIT | \ 137 BIT(IIO_CHAN_INFO_OFFSET), \
138 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT, \ 138 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
139 .scan_index = (_si), \ 139 .scan_index = (_si), \
140 .scan_type = { \ 140 .scan_type = { \
141 .sign = 'u', \ 141 .sign = 'u', \
diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h
index 8bd12be0b02f..172c5b23cb84 100644
--- a/include/linux/iio/common/st_sensors.h
+++ b/include/linux/iio/common/st_sensors.h
@@ -15,6 +15,7 @@
15#include <linux/spi/spi.h> 15#include <linux/spi/spi.h>
16#include <linux/irqreturn.h> 16#include <linux/irqreturn.h>
17#include <linux/iio/trigger.h> 17#include <linux/iio/trigger.h>
18#include <linux/bitops.h>
18 19
19#define ST_SENSORS_TX_MAX_LENGTH 2 20#define ST_SENSORS_TX_MAX_LENGTH 2
20#define ST_SENSORS_RX_MAX_LENGTH 6 21#define ST_SENSORS_RX_MAX_LENGTH 6
@@ -45,8 +46,8 @@
45{ \ 46{ \
46 .type = device_type, \ 47 .type = device_type, \
47 .modified = 1, \ 48 .modified = 1, \
48 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 49 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
49 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ 50 BIT(IIO_CHAN_INFO_SCALE), \
50 .scan_index = index, \ 51 .scan_index = index, \
51 .channel2 = mod, \ 52 .channel2 = mod, \
52 .address = addr, \ 53 .address = addr, \
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
index da8c776ba0bd..8d171f427632 100644
--- a/include/linux/iio/iio.h
+++ b/include/linux/iio/iio.h
@@ -38,76 +38,6 @@ enum iio_chan_info_enum {
38 IIO_CHAN_INFO_HYSTERESIS, 38 IIO_CHAN_INFO_HYSTERESIS,
39}; 39};
40 40
41#define IIO_CHAN_INFO_SHARED_BIT(type) BIT(type*2)
42#define IIO_CHAN_INFO_SEPARATE_BIT(type) BIT(type*2 + 1)
43#define IIO_CHAN_INFO_BITS(type) (IIO_CHAN_INFO_SHARED_BIT(type) | \
44 IIO_CHAN_INFO_SEPARATE_BIT(type))
45
46#define IIO_CHAN_INFO_RAW_SEPARATE_BIT \
47 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_RAW)
48#define IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT \
49 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PROCESSED)
50#define IIO_CHAN_INFO_SCALE_SEPARATE_BIT \
51 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SCALE)
52#define IIO_CHAN_INFO_SCALE_SHARED_BIT \
53 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SCALE)
54#define IIO_CHAN_INFO_OFFSET_SEPARATE_BIT \
55 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_OFFSET)
56#define IIO_CHAN_INFO_OFFSET_SHARED_BIT \
57 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_OFFSET)
58#define IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT \
59 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBSCALE)
60#define IIO_CHAN_INFO_CALIBSCALE_SHARED_BIT \
61 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBSCALE)
62#define IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT \
63 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBBIAS)
64#define IIO_CHAN_INFO_CALIBBIAS_SHARED_BIT \
65 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBBIAS)
66#define IIO_CHAN_INFO_PEAK_SEPARATE_BIT \
67 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAK)
68#define IIO_CHAN_INFO_PEAK_SHARED_BIT \
69 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAK)
70#define IIO_CHAN_INFO_PEAKSCALE_SEPARATE_BIT \
71 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAKSCALE)
72#define IIO_CHAN_INFO_PEAKSCALE_SHARED_BIT \
73 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAKSCALE)
74#define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT \
75 IIO_CHAN_INFO_SEPARATE_BIT( \
76 IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW)
77#define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SHARED_BIT \
78 IIO_CHAN_INFO_SHARED_BIT( \
79 IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW)
80#define IIO_CHAN_INFO_AVERAGE_RAW_SEPARATE_BIT \
81 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_AVERAGE_RAW)
82#define IIO_CHAN_INFO_AVERAGE_RAW_SHARED_BIT \
83 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_AVERAGE_RAW)
84#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT \
85 IIO_CHAN_INFO_SHARED_BIT( \
86 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY)
87#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SEPARATE_BIT \
88 IIO_CHAN_INFO_SEPARATE_BIT( \
89 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY)
90#define IIO_CHAN_INFO_SAMP_FREQ_SEPARATE_BIT \
91 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SAMP_FREQ)
92#define IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT \
93 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SAMP_FREQ)
94#define IIO_CHAN_INFO_FREQUENCY_SEPARATE_BIT \
95 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_FREQUENCY)
96#define IIO_CHAN_INFO_FREQUENCY_SHARED_BIT \
97 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_FREQUENCY)
98#define IIO_CHAN_INFO_PHASE_SEPARATE_BIT \
99 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PHASE)
100#define IIO_CHAN_INFO_PHASE_SHARED_BIT \
101 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PHASE)
102#define IIO_CHAN_INFO_HARDWAREGAIN_SEPARATE_BIT \
103 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_HARDWAREGAIN)
104#define IIO_CHAN_INFO_HARDWAREGAIN_SHARED_BIT \
105 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_HARDWAREGAIN)
106#define IIO_CHAN_INFO_HYSTERESIS_SEPARATE_BIT \
107 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_HYSTERESIS)
108#define IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT \
109 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_HYSTERESIS)
110
111enum iio_endian { 41enum iio_endian {
112 IIO_CPU, 42 IIO_CPU,
113 IIO_BE, 43 IIO_BE,
@@ -218,6 +148,10 @@ ssize_t iio_enum_write(struct iio_dev *indio_dev,
218 * endianness: little or big endian 148 * endianness: little or big endian
219 * @info_mask: What information is to be exported about this channel. 149 * @info_mask: What information is to be exported about this channel.
220 * This includes calibbias, scale etc. 150 * This includes calibbias, scale etc.
151 * @info_mask_separate: What information is to be exported that is specific to
152 * this channel.
153 * @info_mask_shared_by_type: What information is to be exported that is shared
154* by all channels of the same type.
221 * @event_mask: What events can this channel produce. 155 * @event_mask: What events can this channel produce.
222 * @ext_info: Array of extended info attributes for this channel. 156 * @ext_info: Array of extended info attributes for this channel.
223 * The array is NULL terminated, the last element should 157 * The array is NULL terminated, the last element should
@@ -253,6 +187,8 @@ struct iio_chan_spec {
253 enum iio_endian endianness; 187 enum iio_endian endianness;
254 } scan_type; 188 } scan_type;
255 long info_mask; 189 long info_mask;
190 long info_mask_separate;
191 long info_mask_shared_by_type;
256 long event_mask; 192 long event_mask;
257 const struct iio_chan_spec_ext_info *ext_info; 193 const struct iio_chan_spec_ext_info *ext_info;
258 const char *extend_name; 194 const char *extend_name;
@@ -275,7 +211,8 @@ struct iio_chan_spec {
275static inline bool iio_channel_has_info(const struct iio_chan_spec *chan, 211static inline bool iio_channel_has_info(const struct iio_chan_spec *chan,
276 enum iio_chan_info_enum type) 212 enum iio_chan_info_enum type)
277{ 213{
278 return chan->info_mask & IIO_CHAN_INFO_BITS(type); 214 return (chan->info_mask_separate & type) |
215 (chan->info_mask_shared_by_type & type);
279} 216}
280 217
281#define IIO_ST(si, rb, sb, sh) \ 218#define IIO_ST(si, rb, sb, sh) \
diff --git a/include/linux/iio/imu/adis.h b/include/linux/iio/imu/adis.h
index ff781dca2e9a..b665dc7f017b 100644
--- a/include/linux/iio/imu/adis.h
+++ b/include/linux/iio/imu/adis.h
@@ -162,8 +162,8 @@ int adis_single_conversion(struct iio_dev *indio_dev,
162 .indexed = 1, \ 162 .indexed = 1, \
163 .channel = (chan), \ 163 .channel = (chan), \
164 .extend_name = name, \ 164 .extend_name = name, \
165 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 165 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
166 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ 166 BIT(IIO_CHAN_INFO_SCALE), \
167 .address = (addr), \ 167 .address = (addr), \
168 .scan_index = (si), \ 168 .scan_index = (si), \
169 .scan_type = { \ 169 .scan_type = { \
@@ -184,9 +184,9 @@ int adis_single_conversion(struct iio_dev *indio_dev,
184 .type = IIO_TEMP, \ 184 .type = IIO_TEMP, \
185 .indexed = 1, \ 185 .indexed = 1, \
186 .channel = 0, \ 186 .channel = 0, \
187 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 187 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
188 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | \ 188 BIT(IIO_CHAN_INFO_SCALE) | \
189 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT, \ 189 BIT(IIO_CHAN_INFO_OFFSET), \
190 .address = (addr), \ 190 .address = (addr), \
191 .scan_index = (si), \ 191 .scan_index = (si), \
192 .scan_type = { \ 192 .scan_type = { \
@@ -197,13 +197,13 @@ int adis_single_conversion(struct iio_dev *indio_dev,
197 }, \ 197 }, \
198} 198}
199 199
200#define ADIS_MOD_CHAN(_type, mod, addr, si, info, bits) { \ 200#define ADIS_MOD_CHAN(_type, mod, addr, si, info_sep, bits) { \
201 .type = (_type), \ 201 .type = (_type), \
202 .modified = 1, \ 202 .modified = 1, \
203 .channel2 = IIO_MOD_ ## mod, \ 203 .channel2 = IIO_MOD_ ## mod, \
204 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 204 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
205 IIO_CHAN_INFO_SCALE_SHARED_BIT | \ 205 info_sep, \
206 info, \ 206 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
207 .address = (addr), \ 207 .address = (addr), \
208 .scan_index = (si), \ 208 .scan_index = (si), \
209 .scan_type = { \ 209 .scan_type = { \
@@ -214,17 +214,17 @@ int adis_single_conversion(struct iio_dev *indio_dev,
214 }, \ 214 }, \
215} 215}
216 216
217#define ADIS_ACCEL_CHAN(mod, addr, si, info, bits) \ 217#define ADIS_ACCEL_CHAN(mod, addr, si, info_sep, bits) \
218 ADIS_MOD_CHAN(IIO_ACCEL, mod, addr, si, info, bits) 218 ADIS_MOD_CHAN(IIO_ACCEL, mod, addr, si, info_sep, bits)
219 219
220#define ADIS_GYRO_CHAN(mod, addr, si, info, bits) \ 220#define ADIS_GYRO_CHAN(mod, addr, si, info_sep, bits) \
221 ADIS_MOD_CHAN(IIO_ANGL_VEL, mod, addr, si, info, bits) 221 ADIS_MOD_CHAN(IIO_ANGL_VEL, mod, addr, si, info_sep, bits)
222 222
223#define ADIS_INCLI_CHAN(mod, addr, si, info, bits) \ 223#define ADIS_INCLI_CHAN(mod, addr, si, info_sep, bits) \
224 ADIS_MOD_CHAN(IIO_INCLI, mod, addr, si, info, bits) 224 ADIS_MOD_CHAN(IIO_INCLI, mod, addr, si, info_sep, bits)
225 225
226#define ADIS_ROT_CHAN(mod, addr, si, info, bits) \ 226#define ADIS_ROT_CHAN(mod, addr, si, info_sep, bits) \
227 ADIS_MOD_CHAN(IIO_ROT, mod, addr, si, info, bits) 227 ADIS_MOD_CHAN(IIO_ROT, mod, addr, si, info_sep, bits)
228 228
229#ifdef CONFIG_IIO_ADIS_LIB_BUFFER 229#ifdef CONFIG_IIO_ADIS_LIB_BUFFER
230 230