aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-09-22 14:30:12 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-09-22 14:30:12 -0400
commit3ffdea3feca9e2c95c2e93e217d77c9c368f747a (patch)
treee970c502cbd02244344ee1449af072d0d7086bbd
parent9076b09e07da4b2644a17d7d18e117944cbc09be (diff)
parent074b6a8d9d73db27d48abe4200ce149bd4189b39 (diff)
Merge tag 'iio-for-3.13a' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-next
Jonathan writes: First round of new drivers, functionality and cleanups for IIO in the 3.13 cycle A number of new drivers and some new functionality + a lot of cleanups all over IIO. New Core Elements 1) New INT_TIME info_mask element for integration time, which may have different effects on measurement noise and similar, than an amplifier and hence is different from existing SCALE. Already existed in some drivers as a custom attribute. 2) Introduce a iio_push_buffers_with_timestamp helper to cover the common case of filling the last 64 bits of data to be passed to the buffer with a timestamp. Applied to lots of drivers. Cuts down on repeated code and moves a slightly fiddly bit of logic into a single location. 3) Introduce info_mask_[shared_by_dir/shared_by_all] elements to allow support of elements such as sampling_frequency which is typically shared by all input channels on a device. This reduces code and makes these controls available from in kernel consumers of IIO devices. New drivers 1) MCP3422/3/4 ADC 2) TSL4531 ambient light sensor 3) TCS3472/5 color light sensor 4) GP2AP020A00F ambient light / proximity sensor 5) LPS001WP support added to ST pressure sensor driver. New driver functionality 1) ti_am335x_adc Add buffered sampling support. This device has a hardware fifo that is fed directly into an IIO kfifo buffer based on a watershed interrupt. Note this will act as an example of how to handle this increasingly common type of device. The only previous example - sca3000 - take a less than optimal approach which is largely why it is still in staging. A couple of little cleanups for that new functionality followed later. Core cleanups: 1) MAINTAINERS - Sachin actually brought my email address up to date because I said I'd do it and never got around to it :) 2) Assign buffer list elements as single element lists to simplify the iio_buffer_is_active logic. 3) wake_up_interruptible_poll instead of wake_up_interruptible to only wake up threads waiting for poll notifications. 4) Add O_CLOEXEC flag to anon_inode_get_fd call for IIO event interface. 5) Change iio_push_to_buffers to take a void * pointer so as to avoid some annoying and unnecessary type casts. 6) iio_compute_scan_bytes incorrectly took a long rather than unsigned long. 7) Various minor tidy ups. Driver cleanups (in no particular order) 1) Another set of devm_ allocations patches from Sachin Kamat. 2) tsl2x7x - 0 to NULL cleanup. 3) hmc5843 - fix missing > in MODULE_AUTHOR 4) Set of strict_strto* to kstrto* conversions. 5) mxs-lradc - fix ordering of resource removal to match creation 6) mxs-lradc - add MODULE_ALIAS 7) adc7606 - drop a work pending test duplicated in core functions. 8) hmc5843 - devm_ allocation patch 9) Series of redundant breaks removed. 10) ad2s1200 - pr_err -> dev_err 11) adjd_s311 - use INT_TIME 12) ST sensors - large set of cleanups from Lee Jones and removed restriction to using only triggers provided by the st_sensors themselves from Dennis Ciocca. 13) dummy and tmp006 provide sampling_frequency via info_mask_shared_by_all. 14) tcs3472 - fix incorrect buffer size and wrong device pointer used in suspend / resume functions. 15) max1363 - use defaults for buffer setup ops as provided by the triggered buffer helpers as they are the same as were specified in max1363 driver. 16) Trivial tidy ups in a number of other drivers.
-rw-r--r--Documentation/ABI/testing/sysfs-bus-iio11
-rw-r--r--Documentation/devicetree/bindings/iio/light/gp2ap020a00f.txt21
-rw-r--r--MAINTAINERS4
-rw-r--r--drivers/iio/accel/bma180.c7
-rw-r--r--drivers/iio/accel/hid-sensor-accel-3d.c7
-rw-r--r--drivers/iio/accel/st_accel_core.c30
-rw-r--r--drivers/iio/adc/Kconfig11
-rw-r--r--drivers/iio/adc/Makefile1
-rw-r--r--drivers/iio/adc/ad7266.c13
-rw-r--r--drivers/iio/adc/ad7298.c10
-rw-r--r--drivers/iio/adc/ad7476.c9
-rw-r--r--drivers/iio/adc/ad7887.c10
-rw-r--r--drivers/iio/adc/ad7923.c10
-rw-r--r--drivers/iio/adc/ad_sigma_delta.c6
-rw-r--r--drivers/iio/adc/at91_adc.c10
-rw-r--r--drivers/iio/adc/max1363.c15
-rw-r--r--drivers/iio/adc/mcp3422.c409
-rw-r--r--drivers/iio/adc/ti_am335x_adc.c223
-rw-r--r--drivers/iio/buffer_cb.c8
-rw-r--r--drivers/iio/common/st_sensors/st_sensors_buffer.c7
-rw-r--r--drivers/iio/common/st_sensors/st_sensors_core.c70
-rw-r--r--drivers/iio/dac/ad5064.c3
-rw-r--r--drivers/iio/dac/ad5380.c4
-rw-r--r--drivers/iio/dac/ad5446.c3
-rw-r--r--drivers/iio/dac/ad5504.c4
-rw-r--r--drivers/iio/dac/ad5624r_spi.c4
-rw-r--r--drivers/iio/dac/ad5686.c4
-rw-r--r--drivers/iio/dac/ad5755.c1
-rw-r--r--drivers/iio/dac/ad5791.c5
-rw-r--r--drivers/iio/dac/ad7303.c1
-rw-r--r--drivers/iio/dac/mcp4725.c3
-rw-r--r--drivers/iio/frequency/adf4350.c1
-rw-r--r--drivers/iio/gyro/adis16130.c2
-rw-r--r--drivers/iio/gyro/adis16260.c1
-rw-r--r--drivers/iio/gyro/adxrs450.c1
-rw-r--r--drivers/iio/gyro/hid-sensor-gyro-3d.c7
-rw-r--r--drivers/iio/gyro/itg3200_buffer.c5
-rw-r--r--drivers/iio/gyro/st_gyro_core.c30
-rw-r--r--drivers/iio/iio_core.h2
-rw-r--r--drivers/iio/imu/adis16400_buffer.c9
-rw-r--r--drivers/iio/imu/adis_buffer.c9
-rw-r--r--drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c6
-rw-r--r--drivers/iio/industrialio-buffer.c60
-rw-r--r--drivers/iio/industrialio-core.c180
-rw-r--r--drivers/iio/industrialio-event.c2
-rw-r--r--drivers/iio/kfifo_buf.c5
-rw-r--r--drivers/iio/light/Kconfig32
-rw-r--r--drivers/iio/light/Makefile3
-rw-r--r--drivers/iio/light/adjd_s311.c77
-rw-r--r--drivers/iio/light/gp2ap020a00f.c1617
-rw-r--r--drivers/iio/light/hid-sensor-als.c7
-rw-r--r--drivers/iio/light/tcs3472.c367
-rw-r--r--drivers/iio/light/tsl4531.c258
-rw-r--r--drivers/iio/magnetometer/hid-sensor-magn-3d.c7
-rw-r--r--drivers/iio/magnetometer/st_magn_core.c31
-rw-r--r--drivers/iio/pressure/st_pressure.h1
-rw-r--r--drivers/iio/pressure/st_pressure_core.c268
-rw-r--r--drivers/iio/pressure/st_pressure_i2c.c1
-rw-r--r--drivers/iio/temperature/tmp006.c57
-rw-r--r--drivers/input/touchscreen/ti_am335x_tsc.c12
-rw-r--r--drivers/staging/iio/accel/lis3l02dq_ring.c6
-rw-r--r--drivers/staging/iio/accel/sca3000_core.c8
-rw-r--r--drivers/staging/iio/accel/sca3000_ring.c4
-rw-r--r--drivers/staging/iio/adc/ad7192.c15
-rw-r--r--drivers/staging/iio/adc/ad7280a.c11
-rw-r--r--drivers/staging/iio/adc/ad7291.c27
-rw-r--r--drivers/staging/iio/adc/ad7606_core.c26
-rw-r--r--drivers/staging/iio/adc/ad7606_ring.c8
-rw-r--r--drivers/staging/iio/adc/ad7780.c28
-rw-r--r--drivers/staging/iio/adc/ad7816.c59
-rw-r--r--drivers/staging/iio/adc/ad799x_core.c16
-rw-r--r--drivers/staging/iio/adc/ad799x_ring.c10
-rw-r--r--drivers/staging/iio/adc/lpc32xx_adc.c49
-rw-r--r--drivers/staging/iio/adc/mxs-lradc.c19
-rw-r--r--drivers/staging/iio/addac/adt7316.c86
-rw-r--r--drivers/staging/iio/frequency/ad5930.c16
-rw-r--r--drivers/staging/iio/frequency/ad9832.c36
-rw-r--r--drivers/staging/iio/frequency/ad9834.c33
-rw-r--r--drivers/staging/iio/frequency/ad9850.c16
-rw-r--r--drivers/staging/iio/frequency/ad9852.c17
-rw-r--r--drivers/staging/iio/frequency/ad9910.c16
-rw-r--r--drivers/staging/iio/frequency/ad9951.c17
-rw-r--r--drivers/staging/iio/iio_simple_dummy.c16
-rw-r--r--drivers/staging/iio/iio_simple_dummy_buffer.c7
-rw-r--r--drivers/staging/iio/impedance-analyzer/ad5933.c32
-rw-r--r--drivers/staging/iio/light/isl29018.c18
-rw-r--r--drivers/staging/iio/light/tsl2583.c48
-rw-r--r--drivers/staging/iio/light/tsl2x7x_core.c48
-rw-r--r--drivers/staging/iio/magnetometer/hmc5843.c26
-rw-r--r--drivers/staging/iio/meter/ade7753.c31
-rw-r--r--drivers/staging/iio/meter/ade7754.c31
-rw-r--r--drivers/staging/iio/meter/ade7758_core.c32
-rw-r--r--drivers/staging/iio/meter/ade7758_ring.c6
-rw-r--r--drivers/staging/iio/meter/ade7759.c30
-rw-r--r--drivers/staging/iio/meter/ade7854-i2c.c4
-rw-r--r--drivers/staging/iio/meter/ade7854-spi.c4
-rw-r--r--drivers/staging/iio/meter/ade7854.c22
-rw-r--r--drivers/staging/iio/resolver/ad2s1200.c28
-rw-r--r--drivers/staging/iio/resolver/ad2s1210.c34
-rw-r--r--drivers/staging/iio/resolver/ad2s90.c16
-rw-r--r--drivers/staging/iio/trigger/iio-trig-bfin-timer.c23
-rw-r--r--drivers/staging/iio/trigger/iio-trig-periodic-rtc.c4
-rw-r--r--include/linux/iio/buffer.h31
-rw-r--r--include/linux/iio/common/st_sensors.h1
-rw-r--r--include/linux/iio/consumer.h2
-rw-r--r--include/linux/iio/iio.h35
-rw-r--r--include/linux/iio/sysfs.h15
-rw-r--r--include/linux/mfd/ti_am335x_tscadc.h9
108 files changed, 3913 insertions, 1145 deletions
diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio
index 39c8de0e53d0..ab1047c20495 100644
--- a/Documentation/ABI/testing/sysfs-bus-iio
+++ b/Documentation/ABI/testing/sysfs-bus-iio
@@ -811,3 +811,14 @@ Description:
811 Writing '1' stores the current device configuration into 811 Writing '1' stores the current device configuration into
812 on-chip EEPROM. After power-up or chip reset the device will 812 on-chip EEPROM. After power-up or chip reset the device will
813 automatically load the saved configuration. 813 automatically load the saved configuration.
814
815What: /sys/.../iio:deviceX/in_intensity_red_integration_time
816What: /sys/.../iio:deviceX/in_intensity_green_integration_time
817What: /sys/.../iio:deviceX/in_intensity_blue_integration_time
818What: /sys/.../iio:deviceX/in_intensity_clear_integration_time
819What: /sys/.../iio:deviceX/in_illuminance_integration_time
820KernelVersion: 3.12
821Contact: linux-iio@vger.kernel.org
822Description:
823 This attribute is used to get/set the integration time in
824 seconds.
diff --git a/Documentation/devicetree/bindings/iio/light/gp2ap020a00f.txt b/Documentation/devicetree/bindings/iio/light/gp2ap020a00f.txt
new file mode 100644
index 000000000000..9231c82317ad
--- /dev/null
+++ b/Documentation/devicetree/bindings/iio/light/gp2ap020a00f.txt
@@ -0,0 +1,21 @@
1* Sharp GP2AP020A00F I2C Proximity/ALS sensor
2
3The proximity detector sensor requires power supply
4for its built-in led. It is also defined by this binding.
5
6Required properties:
7
8 - compatible : should be "sharp,gp2ap020a00f"
9 - reg : the I2C slave address of the light sensor
10 - interrupts : interrupt specifier for the sole interrupt generated
11 by the device
12 - vled-supply : VLED power supply, as covered in ../regulator/regulator.txt
13
14Example:
15
16gp2ap020a00f@39 {
17 compatible = "sharp,gp2ap020a00f";
18 reg = <0x39>;
19 interrupts = <2 0>;
20 vled-supply = <...>;
21};
diff --git a/MAINTAINERS b/MAINTAINERS
index e61c2e83fc2b..e8ee569fdce5 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4195,7 +4195,7 @@ S: Maintained
4195F: drivers/media/rc/iguanair.c 4195F: drivers/media/rc/iguanair.c
4196 4196
4197IIO SUBSYSTEM AND DRIVERS 4197IIO SUBSYSTEM AND DRIVERS
4198M: Jonathan Cameron <jic23@cam.ac.uk> 4198M: Jonathan Cameron <jic23@kernel.org>
4199L: linux-iio@vger.kernel.org 4199L: linux-iio@vger.kernel.org
4200S: Maintained 4200S: Maintained
4201F: drivers/iio/ 4201F: drivers/iio/
@@ -7947,7 +7947,7 @@ S: Maintained
7947F: drivers/staging/media/go7007/ 7947F: drivers/staging/media/go7007/
7948 7948
7949STAGING - INDUSTRIAL IO 7949STAGING - INDUSTRIAL IO
7950M: Jonathan Cameron <jic23@cam.ac.uk> 7950M: Jonathan Cameron <jic23@kernel.org>
7951L: linux-iio@vger.kernel.org 7951L: linux-iio@vger.kernel.org
7952S: Odd Fixes 7952S: Odd Fixes
7953F: drivers/staging/iio/ 7953F: drivers/staging/iio/
diff --git a/drivers/iio/accel/bma180.c b/drivers/iio/accel/bma180.c
index 12e32e6b4103..bda7a8343ddd 100644
--- a/drivers/iio/accel/bma180.c
+++ b/drivers/iio/accel/bma180.c
@@ -471,13 +471,10 @@ static irqreturn_t bma180_trigger_handler(int irq, void *p)
471 struct iio_poll_func *pf = p; 471 struct iio_poll_func *pf = p;
472 struct iio_dev *indio_dev = pf->indio_dev; 472 struct iio_dev *indio_dev = pf->indio_dev;
473 struct bma180_data *data = iio_priv(indio_dev); 473 struct bma180_data *data = iio_priv(indio_dev);
474 int64_t time_ns = iio_get_time_ns();
474 int bit, ret, i = 0; 475 int bit, ret, i = 0;
475 476
476 mutex_lock(&data->mutex); 477 mutex_lock(&data->mutex);
477 if (indio_dev->scan_timestamp) {
478 ret = indio_dev->scan_bytes / sizeof(s64) - 1;
479 ((s64 *)data->buff)[ret] = iio_get_time_ns();
480 }
481 478
482 for_each_set_bit(bit, indio_dev->buffer->scan_mask, 479 for_each_set_bit(bit, indio_dev->buffer->scan_mask,
483 indio_dev->masklength) { 480 indio_dev->masklength) {
@@ -490,7 +487,7 @@ static irqreturn_t bma180_trigger_handler(int irq, void *p)
490 } 487 }
491 mutex_unlock(&data->mutex); 488 mutex_unlock(&data->mutex);
492 489
493 iio_push_to_buffers(indio_dev, (u8 *)data->buff); 490 iio_push_to_buffers_with_timestamp(indio_dev, data->buff, time_ns);
494err: 491err:
495 iio_trigger_notify_done(indio_dev->trig); 492 iio_trigger_notify_done(indio_dev->trig);
496 493
diff --git a/drivers/iio/accel/hid-sensor-accel-3d.c b/drivers/iio/accel/hid-sensor-accel-3d.c
index 46d22f3fb1a9..dcda17395c4e 100644
--- a/drivers/iio/accel/hid-sensor-accel-3d.c
+++ b/drivers/iio/accel/hid-sensor-accel-3d.c
@@ -182,10 +182,11 @@ static const struct iio_info accel_3d_info = {
182}; 182};
183 183
184/* Function to push data to buffer */ 184/* Function to push data to buffer */
185static void hid_sensor_push_data(struct iio_dev *indio_dev, u8 *data, int len) 185static void hid_sensor_push_data(struct iio_dev *indio_dev, const void *data,
186 int len)
186{ 187{
187 dev_dbg(&indio_dev->dev, "hid_sensor_push_data\n"); 188 dev_dbg(&indio_dev->dev, "hid_sensor_push_data\n");
188 iio_push_to_buffers(indio_dev, (u8 *)data); 189 iio_push_to_buffers(indio_dev, data);
189} 190}
190 191
191/* Callback handler to send event after all samples are received and captured */ 192/* Callback handler to send event after all samples are received and captured */
@@ -200,7 +201,7 @@ static int accel_3d_proc_event(struct hid_sensor_hub_device *hsdev,
200 accel_state->common_attributes.data_ready); 201 accel_state->common_attributes.data_ready);
201 if (accel_state->common_attributes.data_ready) 202 if (accel_state->common_attributes.data_ready)
202 hid_sensor_push_data(indio_dev, 203 hid_sensor_push_data(indio_dev,
203 (u8 *)accel_state->accel_val, 204 accel_state->accel_val,
204 sizeof(accel_state->accel_val)); 205 sizeof(accel_state->accel_val));
205 206
206 return 0; 207 return 0;
diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c
index 1458343f6f3f..38caedc76b98 100644
--- a/drivers/iio/accel/st_accel_core.c
+++ b/drivers/iio/accel/st_accel_core.c
@@ -452,8 +452,9 @@ static const struct iio_trigger_ops st_accel_trigger_ops = {
452int st_accel_common_probe(struct iio_dev *indio_dev, 452int st_accel_common_probe(struct iio_dev *indio_dev,
453 struct st_sensors_platform_data *plat_data) 453 struct st_sensors_platform_data *plat_data)
454{ 454{
455 int err;
456 struct st_sensor_data *adata = iio_priv(indio_dev); 455 struct st_sensor_data *adata = iio_priv(indio_dev);
456 int irq = adata->get_irq_data_ready(indio_dev);
457 int err;
457 458
458 indio_dev->modes = INDIO_DIRECT_MODE; 459 indio_dev->modes = INDIO_DIRECT_MODE;
459 indio_dev->info = &accel_info; 460 indio_dev->info = &accel_info;
@@ -461,7 +462,7 @@ int st_accel_common_probe(struct iio_dev *indio_dev,
461 err = st_sensors_check_device_support(indio_dev, 462 err = st_sensors_check_device_support(indio_dev,
462 ARRAY_SIZE(st_accel_sensors), st_accel_sensors); 463 ARRAY_SIZE(st_accel_sensors), st_accel_sensors);
463 if (err < 0) 464 if (err < 0)
464 goto st_accel_common_probe_error; 465 return err;
465 466
466 adata->num_data_channels = ST_ACCEL_NUMBER_DATA_CHANNELS; 467 adata->num_data_channels = ST_ACCEL_NUMBER_DATA_CHANNELS;
467 adata->multiread_bit = adata->sensor->multi_read_bit; 468 adata->multiread_bit = adata->sensor->multi_read_bit;
@@ -478,13 +479,13 @@ int st_accel_common_probe(struct iio_dev *indio_dev,
478 479
479 err = st_sensors_init_sensor(indio_dev, plat_data); 480 err = st_sensors_init_sensor(indio_dev, plat_data);
480 if (err < 0) 481 if (err < 0)
481 goto st_accel_common_probe_error; 482 return err;
482 483
483 if (adata->get_irq_data_ready(indio_dev) > 0) { 484 err = st_accel_allocate_ring(indio_dev);
484 err = st_accel_allocate_ring(indio_dev); 485 if (err < 0)
485 if (err < 0) 486 return err;
486 goto st_accel_common_probe_error;
487 487
488 if (irq > 0) {
488 err = st_sensors_allocate_trigger(indio_dev, 489 err = st_sensors_allocate_trigger(indio_dev,
489 ST_ACCEL_TRIGGER_OPS); 490 ST_ACCEL_TRIGGER_OPS);
490 if (err < 0) 491 if (err < 0)
@@ -495,15 +496,14 @@ int st_accel_common_probe(struct iio_dev *indio_dev,
495 if (err) 496 if (err)
496 goto st_accel_device_register_error; 497 goto st_accel_device_register_error;
497 498
498 return err; 499 return 0;
499 500
500st_accel_device_register_error: 501st_accel_device_register_error:
501 if (adata->get_irq_data_ready(indio_dev) > 0) 502 if (irq > 0)
502 st_sensors_deallocate_trigger(indio_dev); 503 st_sensors_deallocate_trigger(indio_dev);
503st_accel_probe_trigger_error: 504st_accel_probe_trigger_error:
504 if (adata->get_irq_data_ready(indio_dev) > 0) 505 st_accel_deallocate_ring(indio_dev);
505 st_accel_deallocate_ring(indio_dev); 506
506st_accel_common_probe_error:
507 return err; 507 return err;
508} 508}
509EXPORT_SYMBOL(st_accel_common_probe); 509EXPORT_SYMBOL(st_accel_common_probe);
@@ -513,10 +513,10 @@ void st_accel_common_remove(struct iio_dev *indio_dev)
513 struct st_sensor_data *adata = iio_priv(indio_dev); 513 struct st_sensor_data *adata = iio_priv(indio_dev);
514 514
515 iio_device_unregister(indio_dev); 515 iio_device_unregister(indio_dev);
516 if (adata->get_irq_data_ready(indio_dev) > 0) { 516 if (adata->get_irq_data_ready(indio_dev) > 0)
517 st_sensors_deallocate_trigger(indio_dev); 517 st_sensors_deallocate_trigger(indio_dev);
518 st_accel_deallocate_ring(indio_dev); 518
519 } 519 st_accel_deallocate_ring(indio_dev);
520} 520}
521EXPORT_SYMBOL(st_accel_common_remove); 521EXPORT_SYMBOL(st_accel_common_remove);
522 522
diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig
index 09371cbc9dc1..8b885188b839 100644
--- a/drivers/iio/adc/Kconfig
+++ b/drivers/iio/adc/Kconfig
@@ -145,6 +145,16 @@ config MCP320X
145 This driver can also be built as a module. If so, the module will be 145 This driver can also be built as a module. If so, the module will be
146 called mcp320x. 146 called mcp320x.
147 147
148config MCP3422
149 tristate "Microchip Technology MCP3422/3/4 driver"
150 depends on I2C
151 help
152 Say yes here to build support for Microchip Technology's MCP3422,
153 MCP3423 or MCP3424 analog to digital converters.
154
155 This driver can also be built as a module. If so, the module will be
156 called mcp3422.
157
148config NAU7802 158config NAU7802
149 tristate "Nuvoton NAU7802 ADC driver" 159 tristate "Nuvoton NAU7802 ADC driver"
150 depends on I2C 160 depends on I2C
@@ -167,6 +177,7 @@ config TI_ADC081C
167config TI_AM335X_ADC 177config TI_AM335X_ADC
168 tristate "TI's AM335X ADC driver" 178 tristate "TI's AM335X ADC driver"
169 depends on MFD_TI_AM335X_TSCADC 179 depends on MFD_TI_AM335X_TSCADC
180 select IIO_KFIFO_BUF
170 help 181 help
171 Say yes here to build support for Texas Instruments ADC 182 Say yes here to build support for Texas Instruments ADC
172 driver which is also a MFD client. 183 driver which is also a MFD client.
diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile
index 33656ef7d1f6..ba9a10a24cd0 100644
--- a/drivers/iio/adc/Makefile
+++ b/drivers/iio/adc/Makefile
@@ -16,6 +16,7 @@ obj-$(CONFIG_EXYNOS_ADC) += exynos_adc.o
16obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o 16obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o
17obj-$(CONFIG_MAX1363) += max1363.o 17obj-$(CONFIG_MAX1363) += max1363.o
18obj-$(CONFIG_MCP320X) += mcp320x.o 18obj-$(CONFIG_MCP320X) += mcp320x.o
19obj-$(CONFIG_MCP3422) += mcp3422.o
19obj-$(CONFIG_NAU7802) += nau7802.o 20obj-$(CONFIG_NAU7802) += nau7802.o
20obj-$(CONFIG_TI_ADC081C) += ti-adc081c.o 21obj-$(CONFIG_TI_ADC081C) += ti-adc081c.o
21obj-$(CONFIG_TI_AM335X_ADC) += ti_am335x_adc.o 22obj-$(CONFIG_TI_AM335X_ADC) += ti_am335x_adc.o
diff --git a/drivers/iio/adc/ad7266.c b/drivers/iio/adc/ad7266.c
index 371731df1634..656aa3e102f2 100644
--- a/drivers/iio/adc/ad7266.c
+++ b/drivers/iio/adc/ad7266.c
@@ -96,9 +96,8 @@ static irqreturn_t ad7266_trigger_handler(int irq, void *p)
96 96
97 ret = spi_read(st->spi, st->data, 4); 97 ret = spi_read(st->spi, st->data, 4);
98 if (ret == 0) { 98 if (ret == 0) {
99 if (indio_dev->scan_timestamp) 99 iio_push_to_buffers_with_timestamp(indio_dev, st->data,
100 ((s64 *)st->data)[1] = pf->timestamp; 100 pf->timestamp);
101 iio_push_to_buffers(indio_dev, (u8 *)st->data);
102 } 101 }
103 102
104 iio_trigger_notify_done(indio_dev->trig); 103 iio_trigger_notify_done(indio_dev->trig);
@@ -293,7 +292,7 @@ static const struct iio_info ad7266_info = {
293 .driver_module = THIS_MODULE, 292 .driver_module = THIS_MODULE,
294}; 293};
295 294
296static unsigned long ad7266_available_scan_masks[] = { 295static const unsigned long ad7266_available_scan_masks[] = {
297 0x003, 296 0x003,
298 0x00c, 297 0x00c,
299 0x030, 298 0x030,
@@ -303,14 +302,14 @@ static unsigned long ad7266_available_scan_masks[] = {
303 0x000, 302 0x000,
304}; 303};
305 304
306static unsigned long ad7266_available_scan_masks_diff[] = { 305static const unsigned long ad7266_available_scan_masks_diff[] = {
307 0x003, 306 0x003,
308 0x00c, 307 0x00c,
309 0x030, 308 0x030,
310 0x000, 309 0x000,
311}; 310};
312 311
313static unsigned long ad7266_available_scan_masks_fixed[] = { 312static const unsigned long ad7266_available_scan_masks_fixed[] = {
314 0x003, 313 0x003,
315 0x000, 314 0x000,
316}; 315};
@@ -318,7 +317,7 @@ static unsigned long ad7266_available_scan_masks_fixed[] = {
318struct ad7266_chan_info { 317struct ad7266_chan_info {
319 const struct iio_chan_spec *channels; 318 const struct iio_chan_spec *channels;
320 unsigned int num_channels; 319 unsigned int num_channels;
321 unsigned long *scan_masks; 320 const unsigned long *scan_masks;
322}; 321};
323 322
324#define AD7266_CHAN_INFO_INDEX(_differential, _signed, _fixed) \ 323#define AD7266_CHAN_INFO_INDEX(_differential, _signed, _fixed) \
diff --git a/drivers/iio/adc/ad7298.c b/drivers/iio/adc/ad7298.c
index 85d1481c312f..2a3b65c74af9 100644
--- a/drivers/iio/adc/ad7298.c
+++ b/drivers/iio/adc/ad7298.c
@@ -159,20 +159,14 @@ static irqreturn_t ad7298_trigger_handler(int irq, void *p)
159 struct iio_poll_func *pf = p; 159 struct iio_poll_func *pf = p;
160 struct iio_dev *indio_dev = pf->indio_dev; 160 struct iio_dev *indio_dev = pf->indio_dev;
161 struct ad7298_state *st = iio_priv(indio_dev); 161 struct ad7298_state *st = iio_priv(indio_dev);
162 s64 time_ns = 0;
163 int b_sent; 162 int b_sent;
164 163
165 b_sent = spi_sync(st->spi, &st->ring_msg); 164 b_sent = spi_sync(st->spi, &st->ring_msg);
166 if (b_sent) 165 if (b_sent)
167 goto done; 166 goto done;
168 167
169 if (indio_dev->scan_timestamp) { 168 iio_push_to_buffers_with_timestamp(indio_dev, st->rx_buf,
170 time_ns = iio_get_time_ns(); 169 iio_get_time_ns());
171 memcpy((u8 *)st->rx_buf + indio_dev->scan_bytes - sizeof(s64),
172 &time_ns, sizeof(time_ns));
173 }
174
175 iio_push_to_buffers(indio_dev, (u8 *)st->rx_buf);
176 170
177done: 171done:
178 iio_trigger_notify_done(indio_dev->trig); 172 iio_trigger_notify_done(indio_dev->trig);
diff --git a/drivers/iio/adc/ad7476.c b/drivers/iio/adc/ad7476.c
index 6d2b1d8d1a1f..8d808b9de909 100644
--- a/drivers/iio/adc/ad7476.c
+++ b/drivers/iio/adc/ad7476.c
@@ -64,19 +64,14 @@ static irqreturn_t ad7476_trigger_handler(int irq, void *p)
64 struct iio_poll_func *pf = p; 64 struct iio_poll_func *pf = p;
65 struct iio_dev *indio_dev = pf->indio_dev; 65 struct iio_dev *indio_dev = pf->indio_dev;
66 struct ad7476_state *st = iio_priv(indio_dev); 66 struct ad7476_state *st = iio_priv(indio_dev);
67 s64 time_ns;
68 int b_sent; 67 int b_sent;
69 68
70 b_sent = spi_sync(st->spi, &st->msg); 69 b_sent = spi_sync(st->spi, &st->msg);
71 if (b_sent < 0) 70 if (b_sent < 0)
72 goto done; 71 goto done;
73 72
74 time_ns = iio_get_time_ns(); 73 iio_push_to_buffers_with_timestamp(indio_dev, st->data,
75 74 iio_get_time_ns());
76 if (indio_dev->scan_timestamp)
77 ((s64 *)st->data)[1] = time_ns;
78
79 iio_push_to_buffers(indio_dev, st->data);
80done: 75done:
81 iio_trigger_notify_done(indio_dev->trig); 76 iio_trigger_notify_done(indio_dev->trig);
82 77
diff --git a/drivers/iio/adc/ad7887.c b/drivers/iio/adc/ad7887.c
index 9dd077b78759..faedd0e165f6 100644
--- a/drivers/iio/adc/ad7887.c
+++ b/drivers/iio/adc/ad7887.c
@@ -121,20 +121,14 @@ static irqreturn_t ad7887_trigger_handler(int irq, void *p)
121 struct iio_poll_func *pf = p; 121 struct iio_poll_func *pf = p;
122 struct iio_dev *indio_dev = pf->indio_dev; 122 struct iio_dev *indio_dev = pf->indio_dev;
123 struct ad7887_state *st = iio_priv(indio_dev); 123 struct ad7887_state *st = iio_priv(indio_dev);
124 s64 time_ns;
125 int b_sent; 124 int b_sent;
126 125
127 b_sent = spi_sync(st->spi, st->ring_msg); 126 b_sent = spi_sync(st->spi, st->ring_msg);
128 if (b_sent) 127 if (b_sent)
129 goto done; 128 goto done;
130 129
131 time_ns = iio_get_time_ns(); 130 iio_push_to_buffers_with_timestamp(indio_dev, st->data,
132 131 iio_get_time_ns());
133 if (indio_dev->scan_timestamp)
134 memcpy(st->data + indio_dev->scan_bytes - sizeof(s64),
135 &time_ns, sizeof(time_ns));
136
137 iio_push_to_buffers(indio_dev, st->data);
138done: 132done:
139 iio_trigger_notify_done(indio_dev->trig); 133 iio_trigger_notify_done(indio_dev->trig);
140 134
diff --git a/drivers/iio/adc/ad7923.c b/drivers/iio/adc/ad7923.c
index 4108dbb28c3d..28732c28e819 100644
--- a/drivers/iio/adc/ad7923.c
+++ b/drivers/iio/adc/ad7923.c
@@ -174,20 +174,14 @@ static irqreturn_t ad7923_trigger_handler(int irq, void *p)
174 struct iio_poll_func *pf = p; 174 struct iio_poll_func *pf = p;
175 struct iio_dev *indio_dev = pf->indio_dev; 175 struct iio_dev *indio_dev = pf->indio_dev;
176 struct ad7923_state *st = iio_priv(indio_dev); 176 struct ad7923_state *st = iio_priv(indio_dev);
177 s64 time_ns = 0;
178 int b_sent; 177 int b_sent;
179 178
180 b_sent = spi_sync(st->spi, &st->ring_msg); 179 b_sent = spi_sync(st->spi, &st->ring_msg);
181 if (b_sent) 180 if (b_sent)
182 goto done; 181 goto done;
183 182
184 if (indio_dev->scan_timestamp) { 183 iio_push_to_buffers_with_timestamp(indio_dev, st->rx_buf,
185 time_ns = iio_get_time_ns(); 184 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 185
192done: 186done:
193 iio_trigger_notify_done(indio_dev->trig); 187 iio_trigger_notify_done(indio_dev->trig);
diff --git a/drivers/iio/adc/ad_sigma_delta.c b/drivers/iio/adc/ad_sigma_delta.c
index f0d6335ae087..2b5911274763 100644
--- a/drivers/iio/adc/ad_sigma_delta.c
+++ b/drivers/iio/adc/ad_sigma_delta.c
@@ -368,10 +368,6 @@ static irqreturn_t ad_sd_trigger_handler(int irq, void *p)
368 368
369 memset(data, 0x00, 16); 369 memset(data, 0x00, 16);
370 370
371 /* Guaranteed to be aligned with 8 byte boundary */
372 if (indio_dev->scan_timestamp)
373 ((s64 *)data)[1] = pf->timestamp;
374
375 reg_size = indio_dev->channels[0].scan_type.realbits + 371 reg_size = indio_dev->channels[0].scan_type.realbits +
376 indio_dev->channels[0].scan_type.shift; 372 indio_dev->channels[0].scan_type.shift;
377 reg_size = DIV_ROUND_UP(reg_size, 8); 373 reg_size = DIV_ROUND_UP(reg_size, 8);
@@ -391,7 +387,7 @@ static irqreturn_t ad_sd_trigger_handler(int irq, void *p)
391 break; 387 break;
392 } 388 }
393 389
394 iio_push_to_buffers(indio_dev, (uint8_t *)data); 390 iio_push_to_buffers_with_timestamp(indio_dev, data, pf->timestamp);
395 391
396 iio_trigger_notify_done(indio_dev->trig); 392 iio_trigger_notify_done(indio_dev->trig);
397 sigma_delta->irq_dis = false; 393 sigma_delta->irq_dis = false;
diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c
index 84be63bdf038..5c8f690ce92f 100644
--- a/drivers/iio/adc/at91_adc.c
+++ b/drivers/iio/adc/at91_adc.c
@@ -83,13 +83,7 @@ static irqreturn_t at91_adc_trigger_handler(int irq, void *p)
83 j++; 83 j++;
84 } 84 }
85 85
86 if (idev->scan_timestamp) { 86 iio_push_to_buffers_with_timestamp(idev, st->buffer, pf->timestamp);
87 s64 *timestamp = (s64 *)((u8 *)st->buffer +
88 ALIGN(j, sizeof(s64)));
89 *timestamp = pf->timestamp;
90 }
91
92 iio_push_to_buffers(idev, (u8 *)st->buffer);
93 87
94 iio_trigger_notify_done(idev->trig); 88 iio_trigger_notify_done(idev->trig);
95 89
@@ -279,7 +273,7 @@ static int at91_adc_trigger_init(struct iio_dev *idev)
279 int i, ret; 273 int i, ret;
280 274
281 st->trig = devm_kzalloc(&idev->dev, 275 st->trig = devm_kzalloc(&idev->dev,
282 st->trigger_number * sizeof(st->trig), 276 st->trigger_number * sizeof(*st->trig),
283 GFP_KERNEL); 277 GFP_KERNEL);
284 278
285 if (st->trig == NULL) { 279 if (st->trig == NULL) {
diff --git a/drivers/iio/adc/max1363.c b/drivers/iio/adc/max1363.c
index 4fb35d1d7494..b4bc166d57b0 100644
--- a/drivers/iio/adc/max1363.c
+++ b/drivers/iio/adc/max1363.c
@@ -1436,7 +1436,6 @@ static irqreturn_t max1363_trigger_handler(int irq, void *p)
1436 struct iio_poll_func *pf = p; 1436 struct iio_poll_func *pf = p;
1437 struct iio_dev *indio_dev = pf->indio_dev; 1437 struct iio_dev *indio_dev = pf->indio_dev;
1438 struct max1363_state *st = iio_priv(indio_dev); 1438 struct max1363_state *st = iio_priv(indio_dev);
1439 s64 time_ns;
1440 __u8 *rxbuf; 1439 __u8 *rxbuf;
1441 int b_sent; 1440 int b_sent;
1442 size_t d_size; 1441 size_t d_size;
@@ -1470,11 +1469,7 @@ static irqreturn_t max1363_trigger_handler(int irq, void *p)
1470 if (b_sent < 0) 1469 if (b_sent < 0)
1471 goto done_free; 1470 goto done_free;
1472 1471
1473 time_ns = iio_get_time_ns(); 1472 iio_push_to_buffers_with_timestamp(indio_dev, rxbuf, iio_get_time_ns());
1474
1475 if (indio_dev->scan_timestamp)
1476 memcpy(rxbuf + d_size - sizeof(s64), &time_ns, sizeof(time_ns));
1477 iio_push_to_buffers(indio_dev, rxbuf);
1478 1473
1479done_free: 1474done_free:
1480 kfree(rxbuf); 1475 kfree(rxbuf);
@@ -1484,12 +1479,6 @@ done:
1484 return IRQ_HANDLED; 1479 return IRQ_HANDLED;
1485} 1480}
1486 1481
1487static const struct iio_buffer_setup_ops max1363_buffered_setup_ops = {
1488 .postenable = &iio_triggered_buffer_postenable,
1489 .preenable = &iio_sw_buffer_preenable,
1490 .predisable = &iio_triggered_buffer_predisable,
1491};
1492
1493static int max1363_probe(struct i2c_client *client, 1482static int max1363_probe(struct i2c_client *client,
1494 const struct i2c_device_id *id) 1483 const struct i2c_device_id *id)
1495{ 1484{
@@ -1559,7 +1548,7 @@ static int max1363_probe(struct i2c_client *client,
1559 goto error_disable_reg; 1548 goto error_disable_reg;
1560 1549
1561 ret = iio_triggered_buffer_setup(indio_dev, NULL, 1550 ret = iio_triggered_buffer_setup(indio_dev, NULL,
1562 &max1363_trigger_handler, &max1363_buffered_setup_ops); 1551 &max1363_trigger_handler, NULL);
1563 if (ret) 1552 if (ret)
1564 goto error_disable_reg; 1553 goto error_disable_reg;
1565 1554
diff --git a/drivers/iio/adc/mcp3422.c b/drivers/iio/adc/mcp3422.c
new file mode 100644
index 000000000000..bc93f538cb13
--- /dev/null
+++ b/drivers/iio/adc/mcp3422.c
@@ -0,0 +1,409 @@
1/*
2 * mcp3422.c - driver for the Microchip mcp3422/3/4 chip family
3 *
4 * Copyright (C) 2013, Angelo Compagnucci
5 * Author: Angelo Compagnucci <angelo.compagnucci@gmail.com>
6 *
7 * Datasheet: http://ww1.microchip.com/downloads/en/devicedoc/22088b.pdf
8 *
9 * This driver exports the value of analog input voltage to sysfs, the
10 * voltage unit is nV.
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 */
17
18#include <linux/err.h>
19#include <linux/i2c.h>
20#include <linux/module.h>
21#include <linux/delay.h>
22#include <linux/sysfs.h>
23
24#include <linux/iio/iio.h>
25#include <linux/iio/sysfs.h>
26
27/* Masks */
28#define MCP3422_CHANNEL_MASK 0x60
29#define MCP3422_PGA_MASK 0x03
30#define MCP3422_SRATE_MASK 0x0C
31#define MCP3422_SRATE_240 0x0
32#define MCP3422_SRATE_60 0x1
33#define MCP3422_SRATE_15 0x2
34#define MCP3422_SRATE_3 0x3
35#define MCP3422_PGA_1 0
36#define MCP3422_PGA_2 1
37#define MCP3422_PGA_4 2
38#define MCP3422_PGA_8 3
39#define MCP3422_CONT_SAMPLING 0x10
40
41#define MCP3422_CHANNEL(config) (((config) & MCP3422_CHANNEL_MASK) >> 5)
42#define MCP3422_PGA(config) ((config) & MCP3422_PGA_MASK)
43#define MCP3422_SAMPLE_RATE(config) (((config) & MCP3422_SRATE_MASK) >> 2)
44
45#define MCP3422_CHANNEL_VALUE(value) (((value) << 5) & MCP3422_CHANNEL_MASK)
46#define MCP3422_PGA_VALUE(value) ((value) & MCP3422_PGA_MASK)
47#define MCP3422_SAMPLE_RATE_VALUE(value) ((value << 2) & MCP3422_SRATE_MASK)
48
49#define MCP3422_CHAN(_index) \
50 { \
51 .type = IIO_VOLTAGE, \
52 .indexed = 1, \
53 .channel = _index, \
54 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) \
55 | BIT(IIO_CHAN_INFO_SCALE), \
56 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ), \
57 }
58
59/* LSB is in nV to eliminate floating point */
60static const u32 rates_to_lsb[] = {1000000, 250000, 62500, 15625};
61
62/*
63 * scales calculated as:
64 * rates_to_lsb[sample_rate] / (1 << pga);
65 * pga is 1 for 0, 2
66 */
67
68static const int mcp3422_scales[4][4] = {
69 { 1000000, 250000, 62500, 15625 },
70 { 500000 , 125000, 31250, 7812 },
71 { 250000 , 62500 , 15625, 3906 },
72 { 125000 , 31250 , 7812 , 1953 } };
73
74/* Constant msleep times for data acquisitions */
75static const int mcp3422_read_times[4] = {
76 [MCP3422_SRATE_240] = 1000 / 240,
77 [MCP3422_SRATE_60] = 1000 / 60,
78 [MCP3422_SRATE_15] = 1000 / 15,
79 [MCP3422_SRATE_3] = 1000 / 3 };
80
81/* sample rates to integer conversion table */
82static const int mcp3422_sample_rates[4] = {
83 [MCP3422_SRATE_240] = 240,
84 [MCP3422_SRATE_60] = 60,
85 [MCP3422_SRATE_15] = 15,
86 [MCP3422_SRATE_3] = 3 };
87
88/* sample rates to sign extension table */
89static const int mcp3422_sign_extend[4] = {
90 [MCP3422_SRATE_240] = 12,
91 [MCP3422_SRATE_60] = 14,
92 [MCP3422_SRATE_15] = 16,
93 [MCP3422_SRATE_3] = 18 };
94
95/* Client data (each client gets its own) */
96struct mcp3422 {
97 struct i2c_client *i2c;
98 u8 config;
99 u8 pga[4];
100 struct mutex lock;
101};
102
103static int mcp3422_update_config(struct mcp3422 *adc, u8 newconfig)
104{
105 int ret;
106
107 mutex_lock(&adc->lock);
108
109 ret = i2c_master_send(adc->i2c, &newconfig, 1);
110 if (ret > 0) {
111 adc->config = newconfig;
112 ret = 0;
113 }
114
115 mutex_unlock(&adc->lock);
116
117 return ret;
118}
119
120static int mcp3422_read(struct mcp3422 *adc, int *value, u8 *config)
121{
122 int ret = 0;
123 u8 sample_rate = MCP3422_SAMPLE_RATE(adc->config);
124 u8 buf[4] = {0, 0, 0, 0};
125 u32 temp;
126
127 if (sample_rate == MCP3422_SRATE_3) {
128 ret = i2c_master_recv(adc->i2c, buf, 4);
129 temp = buf[0] << 16 | buf[1] << 8 | buf[2];
130 *config = buf[3];
131 } else {
132 ret = i2c_master_recv(adc->i2c, buf, 3);
133 temp = buf[0] << 8 | buf[1];
134 *config = buf[2];
135 }
136
137 *value = sign_extend32(temp, mcp3422_sign_extend[sample_rate]);
138
139 return ret;
140}
141
142static int mcp3422_read_channel(struct mcp3422 *adc,
143 struct iio_chan_spec const *channel, int *value)
144{
145 int ret;
146 u8 config;
147 u8 req_channel = channel->channel;
148
149 if (req_channel != MCP3422_CHANNEL(adc->config)) {
150 config = adc->config;
151 config &= ~MCP3422_CHANNEL_MASK;
152 config |= MCP3422_CHANNEL_VALUE(req_channel);
153 config &= ~MCP3422_PGA_MASK;
154 config |= MCP3422_PGA_VALUE(adc->pga[req_channel]);
155 ret = mcp3422_update_config(adc, config);
156 if (ret < 0)
157 return ret;
158 msleep(mcp3422_read_times[MCP3422_SAMPLE_RATE(adc->config)]);
159 }
160
161 return mcp3422_read(adc, value, &config);
162}
163
164static int mcp3422_read_raw(struct iio_dev *iio,
165 struct iio_chan_spec const *channel, int *val1,
166 int *val2, long mask)
167{
168 struct mcp3422 *adc = iio_priv(iio);
169 int err;
170
171 u8 sample_rate = MCP3422_SAMPLE_RATE(adc->config);
172 u8 pga = MCP3422_PGA(adc->config);
173
174 switch (mask) {
175 case IIO_CHAN_INFO_RAW:
176 err = mcp3422_read_channel(adc, channel, val1);
177 if (err < 0)
178 return -EINVAL;
179 return IIO_VAL_INT;
180
181 case IIO_CHAN_INFO_SCALE:
182
183 *val1 = 0;
184 *val2 = mcp3422_scales[sample_rate][pga];
185 return IIO_VAL_INT_PLUS_NANO;
186
187 case IIO_CHAN_INFO_SAMP_FREQ:
188 *val1 = mcp3422_sample_rates[MCP3422_SAMPLE_RATE(adc->config)];
189 return IIO_VAL_INT;
190
191 default:
192 break;
193 }
194
195 return -EINVAL;
196}
197
198static int mcp3422_write_raw(struct iio_dev *iio,
199 struct iio_chan_spec const *channel, int val1,
200 int val2, long mask)
201{
202 struct mcp3422 *adc = iio_priv(iio);
203 u8 temp;
204 u8 config = adc->config;
205 u8 req_channel = channel->channel;
206 u8 sample_rate = MCP3422_SAMPLE_RATE(config);
207 u8 i;
208
209 switch (mask) {
210 case IIO_CHAN_INFO_SCALE:
211 if (val1 != 0)
212 return -EINVAL;
213
214 for (i = 0; i < ARRAY_SIZE(mcp3422_scales[0]); i++) {
215 if (val2 == mcp3422_scales[sample_rate][i]) {
216 adc->pga[req_channel] = i;
217
218 config &= ~MCP3422_CHANNEL_MASK;
219 config |= MCP3422_CHANNEL_VALUE(req_channel);
220 config &= ~MCP3422_PGA_MASK;
221 config |= MCP3422_PGA_VALUE(adc->pga[req_channel]);
222
223 return mcp3422_update_config(adc, config);
224 }
225 }
226 return -EINVAL;
227
228 case IIO_CHAN_INFO_SAMP_FREQ:
229 switch (val1) {
230 case 240:
231 temp = MCP3422_SRATE_240;
232 break;
233 case 60:
234 temp = MCP3422_SRATE_60;
235 break;
236 case 15:
237 temp = MCP3422_SRATE_15;
238 break;
239 case 3:
240 temp = MCP3422_SRATE_3;
241 break;
242 default:
243 return -EINVAL;
244 }
245
246 config &= ~MCP3422_CHANNEL_MASK;
247 config |= MCP3422_CHANNEL_VALUE(req_channel);
248 config &= ~MCP3422_SRATE_MASK;
249 config |= MCP3422_SAMPLE_RATE_VALUE(temp);
250
251 return mcp3422_update_config(adc, config);
252
253 default:
254 break;
255 }
256
257 return -EINVAL;
258}
259
260static int mcp3422_write_raw_get_fmt(struct iio_dev *indio_dev,
261 struct iio_chan_spec const *chan, long mask)
262{
263 switch (mask) {
264 case IIO_CHAN_INFO_SCALE:
265 return IIO_VAL_INT_PLUS_NANO;
266 case IIO_CHAN_INFO_SAMP_FREQ:
267 return IIO_VAL_INT_PLUS_MICRO;
268 default:
269 return -EINVAL;
270 }
271}
272
273static ssize_t mcp3422_show_scales(struct device *dev,
274 struct device_attribute *attr, char *buf)
275{
276 struct mcp3422 *adc = iio_priv(dev_to_iio_dev(dev));
277 u8 sample_rate = MCP3422_SAMPLE_RATE(adc->config);
278
279 return sprintf(buf, "0.%09u 0.%09u 0.%09u 0.%09u\n",
280 mcp3422_scales[sample_rate][0],
281 mcp3422_scales[sample_rate][1],
282 mcp3422_scales[sample_rate][2],
283 mcp3422_scales[sample_rate][3]);
284}
285
286static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("240 60 15 3");
287static IIO_DEVICE_ATTR(in_voltage_scale_available, S_IRUGO,
288 mcp3422_show_scales, NULL, 0);
289
290static struct attribute *mcp3422_attributes[] = {
291 &iio_const_attr_sampling_frequency_available.dev_attr.attr,
292 &iio_dev_attr_in_voltage_scale_available.dev_attr.attr,
293 NULL,
294};
295
296static const struct attribute_group mcp3422_attribute_group = {
297 .attrs = mcp3422_attributes,
298};
299
300static const struct iio_chan_spec mcp3422_channels[] = {
301 MCP3422_CHAN(0),
302 MCP3422_CHAN(1),
303};
304
305static const struct iio_chan_spec mcp3424_channels[] = {
306 MCP3422_CHAN(0),
307 MCP3422_CHAN(1),
308 MCP3422_CHAN(2),
309 MCP3422_CHAN(3),
310};
311
312static const struct iio_info mcp3422_info = {
313 .read_raw = mcp3422_read_raw,
314 .write_raw = mcp3422_write_raw,
315 .write_raw_get_fmt = mcp3422_write_raw_get_fmt,
316 .attrs = &mcp3422_attribute_group,
317 .driver_module = THIS_MODULE,
318};
319
320static int mcp3422_probe(struct i2c_client *client,
321 const struct i2c_device_id *id)
322{
323 struct iio_dev *indio_dev;
324 struct mcp3422 *adc;
325 int err;
326 u8 config;
327
328 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
329 return -ENODEV;
330
331 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*adc));
332 if (!indio_dev)
333 return -ENOMEM;
334
335 adc = iio_priv(indio_dev);
336 adc->i2c = client;
337
338 mutex_init(&adc->lock);
339
340 indio_dev->dev.parent = &client->dev;
341 indio_dev->name = dev_name(&client->dev);
342 indio_dev->modes = INDIO_DIRECT_MODE;
343 indio_dev->info = &mcp3422_info;
344
345 switch ((unsigned int)(id->driver_data)) {
346 case 2:
347 case 3:
348 indio_dev->channels = mcp3422_channels;
349 indio_dev->num_channels = ARRAY_SIZE(mcp3422_channels);
350 break;
351 case 4:
352 indio_dev->channels = mcp3424_channels;
353 indio_dev->num_channels = ARRAY_SIZE(mcp3424_channels);
354 break;
355 }
356
357 /* meaningful default configuration */
358 config = (MCP3422_CONT_SAMPLING
359 | MCP3422_CHANNEL_VALUE(1)
360 | MCP3422_PGA_VALUE(MCP3422_PGA_1)
361 | MCP3422_SAMPLE_RATE_VALUE(MCP3422_SRATE_240));
362 mcp3422_update_config(adc, config);
363
364 err = iio_device_register(indio_dev);
365 if (err < 0)
366 return err;
367
368 i2c_set_clientdata(client, indio_dev);
369
370 return 0;
371}
372
373static int mcp3422_remove(struct i2c_client *client)
374{
375 iio_device_unregister(i2c_get_clientdata(client));
376 return 0;
377}
378
379static const struct i2c_device_id mcp3422_id[] = {
380 { "mcp3422", 2 },
381 { "mcp3423", 3 },
382 { "mcp3424", 4 },
383 { }
384};
385MODULE_DEVICE_TABLE(i2c, mcp3422_id);
386
387#ifdef CONFIG_OF
388static const struct of_device_id mcp3422_of_match[] = {
389 { .compatible = "mcp3422" },
390 { }
391};
392MODULE_DEVICE_TABLE(of, mcp3422_of_match);
393#endif
394
395static struct i2c_driver mcp3422_driver = {
396 .driver = {
397 .name = "mcp3422",
398 .owner = THIS_MODULE,
399 .of_match_table = of_match_ptr(mcp3422_of_match),
400 },
401 .probe = mcp3422_probe,
402 .remove = mcp3422_remove,
403 .id_table = mcp3422_id,
404};
405module_i2c_driver(mcp3422_driver);
406
407MODULE_AUTHOR("Angelo Compagnucci <angelo.compagnucci@gmail.com>");
408MODULE_DESCRIPTION("Microchip mcp3422/3/4 driver");
409MODULE_LICENSE("GPL v2");
diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index a952538a1a8b..8fb5429e39ae 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -28,12 +28,16 @@
28#include <linux/iio/driver.h> 28#include <linux/iio/driver.h>
29 29
30#include <linux/mfd/ti_am335x_tscadc.h> 30#include <linux/mfd/ti_am335x_tscadc.h>
31#include <linux/iio/buffer.h>
32#include <linux/iio/kfifo_buf.h>
31 33
32struct tiadc_device { 34struct tiadc_device {
33 struct ti_tscadc_dev *mfd_tscadc; 35 struct ti_tscadc_dev *mfd_tscadc;
34 int channels; 36 int channels;
35 u8 channel_line[8]; 37 u8 channel_line[8];
36 u8 channel_step[8]; 38 u8 channel_step[8];
39 int buffer_en_ch_steps;
40 u16 data[8];
37}; 41};
38 42
39static unsigned int tiadc_readl(struct tiadc_device *adc, unsigned int reg) 43static unsigned int tiadc_readl(struct tiadc_device *adc, unsigned int reg)
@@ -56,8 +60,14 @@ static u32 get_adc_step_mask(struct tiadc_device *adc_dev)
56 return step_en; 60 return step_en;
57} 61}
58 62
59static void tiadc_step_config(struct tiadc_device *adc_dev) 63static u32 get_adc_step_bit(struct tiadc_device *adc_dev, int chan)
60{ 64{
65 return 1 << adc_dev->channel_step[chan];
66}
67
68static void tiadc_step_config(struct iio_dev *indio_dev)
69{
70 struct tiadc_device *adc_dev = iio_priv(indio_dev);
61 unsigned int stepconfig; 71 unsigned int stepconfig;
62 int i, steps; 72 int i, steps;
63 73
@@ -72,7 +82,11 @@ static void tiadc_step_config(struct tiadc_device *adc_dev)
72 */ 82 */
73 83
74 steps = TOTAL_STEPS - adc_dev->channels; 84 steps = TOTAL_STEPS - adc_dev->channels;
75 stepconfig = STEPCONFIG_AVG_16 | STEPCONFIG_FIFO1; 85 if (iio_buffer_enabled(indio_dev))
86 stepconfig = STEPCONFIG_AVG_16 | STEPCONFIG_FIFO1
87 | STEPCONFIG_MODE_SWCNT;
88 else
89 stepconfig = STEPCONFIG_AVG_16 | STEPCONFIG_FIFO1;
76 90
77 for (i = 0; i < adc_dev->channels; i++) { 91 for (i = 0; i < adc_dev->channels; i++) {
78 int chan; 92 int chan;
@@ -85,9 +99,175 @@ static void tiadc_step_config(struct tiadc_device *adc_dev)
85 adc_dev->channel_step[i] = steps; 99 adc_dev->channel_step[i] = steps;
86 steps++; 100 steps++;
87 } 101 }
102}
103
104static irqreturn_t tiadc_irq_h(int irq, void *private)
105{
106 struct iio_dev *indio_dev = private;
107 struct tiadc_device *adc_dev = iio_priv(indio_dev);
108 unsigned int status, config;
109 status = tiadc_readl(adc_dev, REG_IRQSTATUS);
110
111 /*
112 * ADC and touchscreen share the IRQ line.
113 * FIFO0 interrupts are used by TSC. Handle FIFO1 IRQs here only
114 */
115 if (status & IRQENB_FIFO1OVRRUN) {
116 /* FIFO Overrun. Clear flag. Disable/Enable ADC to recover */
117 config = tiadc_readl(adc_dev, REG_CTRL);
118 config &= ~(CNTRLREG_TSCSSENB);
119 tiadc_writel(adc_dev, REG_CTRL, config);
120 tiadc_writel(adc_dev, REG_IRQSTATUS, IRQENB_FIFO1OVRRUN
121 | IRQENB_FIFO1UNDRFLW | IRQENB_FIFO1THRES);
122 tiadc_writel(adc_dev, REG_CTRL, (config | CNTRLREG_TSCSSENB));
123 return IRQ_HANDLED;
124 } else if (status & IRQENB_FIFO1THRES) {
125 /* Disable irq and wake worker thread */
126 tiadc_writel(adc_dev, REG_IRQCLR, IRQENB_FIFO1THRES);
127 return IRQ_WAKE_THREAD;
128 }
129
130 return IRQ_NONE;
131}
132
133static irqreturn_t tiadc_worker_h(int irq, void *private)
134{
135 struct iio_dev *indio_dev = private;
136 struct tiadc_device *adc_dev = iio_priv(indio_dev);
137 int i, k, fifo1count, read;
138 u16 *data = adc_dev->data;
139
140 fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
141 for (k = 0; k < fifo1count; k = k + i) {
142 for (i = 0; i < (indio_dev->scan_bytes)/2; i++) {
143 read = tiadc_readl(adc_dev, REG_FIFO1);
144 data[i] = read & FIFOREAD_DATA_MASK;
145 }
146 iio_push_to_buffers(indio_dev, (u8 *) data);
147 }
148
149 tiadc_writel(adc_dev, REG_IRQSTATUS, IRQENB_FIFO1THRES);
150 tiadc_writel(adc_dev, REG_IRQENABLE, IRQENB_FIFO1THRES);
151
152 return IRQ_HANDLED;
153}
154
155static int tiadc_buffer_preenable(struct iio_dev *indio_dev)
156{
157 struct tiadc_device *adc_dev = iio_priv(indio_dev);
158 int i, fifo1count, read;
159
160 tiadc_writel(adc_dev, REG_IRQCLR, (IRQENB_FIFO1THRES |
161 IRQENB_FIFO1OVRRUN |
162 IRQENB_FIFO1UNDRFLW));
163
164 /* Flush FIFO. Needed in corner cases in simultaneous tsc/adc use */
165 fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
166 for (i = 0; i < fifo1count; i++)
167 read = tiadc_readl(adc_dev, REG_FIFO1);
168
169 return iio_sw_buffer_preenable(indio_dev);
170}
171
172static int tiadc_buffer_postenable(struct iio_dev *indio_dev)
173{
174 struct tiadc_device *adc_dev = iio_priv(indio_dev);
175 struct iio_buffer *buffer = indio_dev->buffer;
176 unsigned int enb = 0;
177 u8 bit;
178
179 tiadc_step_config(indio_dev);
180 for_each_set_bit(bit, buffer->scan_mask, adc_dev->channels)
181 enb |= (get_adc_step_bit(adc_dev, bit) << 1);
182 adc_dev->buffer_en_ch_steps = enb;
183
184 am335x_tsc_se_set(adc_dev->mfd_tscadc, enb);
185
186 tiadc_writel(adc_dev, REG_IRQSTATUS, IRQENB_FIFO1THRES
187 | IRQENB_FIFO1OVRRUN | IRQENB_FIFO1UNDRFLW);
188 tiadc_writel(adc_dev, REG_IRQENABLE, IRQENB_FIFO1THRES
189 | IRQENB_FIFO1OVRRUN);
190
191 return 0;
192}
193
194static int tiadc_buffer_predisable(struct iio_dev *indio_dev)
195{
196 struct tiadc_device *adc_dev = iio_priv(indio_dev);
197 int fifo1count, i, read;
198
199 tiadc_writel(adc_dev, REG_IRQCLR, (IRQENB_FIFO1THRES |
200 IRQENB_FIFO1OVRRUN | IRQENB_FIFO1UNDRFLW));
201 am335x_tsc_se_clr(adc_dev->mfd_tscadc, adc_dev->buffer_en_ch_steps);
202
203 /* Flush FIFO of leftover data in the time it takes to disable adc */
204 fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
205 for (i = 0; i < fifo1count; i++)
206 read = tiadc_readl(adc_dev, REG_FIFO1);
207
208 return 0;
209}
210
211static int tiadc_buffer_postdisable(struct iio_dev *indio_dev)
212{
213 tiadc_step_config(indio_dev);
88 214
215 return 0;
89} 216}
90 217
218static const struct iio_buffer_setup_ops tiadc_buffer_setup_ops = {
219 .preenable = &tiadc_buffer_preenable,
220 .postenable = &tiadc_buffer_postenable,
221 .predisable = &tiadc_buffer_predisable,
222 .postdisable = &tiadc_buffer_postdisable,
223};
224
225static int tiadc_iio_buffered_hardware_setup(struct iio_dev *indio_dev,
226 irqreturn_t (*pollfunc_bh)(int irq, void *p),
227 irqreturn_t (*pollfunc_th)(int irq, void *p),
228 int irq,
229 unsigned long flags,
230 const struct iio_buffer_setup_ops *setup_ops)
231{
232 int ret;
233
234 indio_dev->buffer = iio_kfifo_allocate(indio_dev);
235 if (!indio_dev->buffer)
236 return -ENOMEM;
237
238 ret = request_threaded_irq(irq, pollfunc_th, pollfunc_bh,
239 flags, indio_dev->name, indio_dev);
240 if (ret)
241 goto error_kfifo_free;
242
243 indio_dev->setup_ops = setup_ops;
244 indio_dev->modes |= INDIO_BUFFER_HARDWARE;
245
246 ret = iio_buffer_register(indio_dev,
247 indio_dev->channels,
248 indio_dev->num_channels);
249 if (ret)
250 goto error_free_irq;
251
252 return 0;
253
254error_free_irq:
255 free_irq(irq, indio_dev);
256error_kfifo_free:
257 iio_kfifo_free(indio_dev->buffer);
258 return ret;
259}
260
261static void tiadc_iio_buffered_hardware_remove(struct iio_dev *indio_dev)
262{
263 struct tiadc_device *adc_dev = iio_priv(indio_dev);
264
265 free_irq(adc_dev->mfd_tscadc->irq, indio_dev);
266 iio_kfifo_free(indio_dev->buffer);
267 iio_buffer_unregister(indio_dev);
268}
269
270
91static const char * const chan_name_ain[] = { 271static const char * const chan_name_ain[] = {
92 "AIN0", 272 "AIN0",
93 "AIN1", 273 "AIN1",
@@ -120,9 +300,10 @@ static int tiadc_channel_init(struct iio_dev *indio_dev, int channels)
120 chan->channel = adc_dev->channel_line[i]; 300 chan->channel = adc_dev->channel_line[i];
121 chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW); 301 chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
122 chan->datasheet_name = chan_name_ain[chan->channel]; 302 chan->datasheet_name = chan_name_ain[chan->channel];
303 chan->scan_index = i;
123 chan->scan_type.sign = 'u'; 304 chan->scan_type.sign = 'u';
124 chan->scan_type.realbits = 12; 305 chan->scan_type.realbits = 12;
125 chan->scan_type.storagebits = 32; 306 chan->scan_type.storagebits = 16;
126 } 307 }
127 308
128 indio_dev->channels = chan_array; 309 indio_dev->channels = chan_array;
@@ -142,11 +323,14 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
142 struct tiadc_device *adc_dev = iio_priv(indio_dev); 323 struct tiadc_device *adc_dev = iio_priv(indio_dev);
143 int i, map_val; 324 int i, map_val;
144 unsigned int fifo1count, read, stepid; 325 unsigned int fifo1count, read, stepid;
145 u32 step = UINT_MAX;
146 bool found = false; 326 bool found = false;
147 u32 step_en; 327 u32 step_en;
148 unsigned long timeout = jiffies + usecs_to_jiffies 328 unsigned long timeout = jiffies + usecs_to_jiffies
149 (IDLE_TIMEOUT * adc_dev->channels); 329 (IDLE_TIMEOUT * adc_dev->channels);
330
331 if (iio_buffer_enabled(indio_dev))
332 return -EBUSY;
333
150 step_en = get_adc_step_mask(adc_dev); 334 step_en = get_adc_step_mask(adc_dev);
151 am335x_tsc_se_set(adc_dev->mfd_tscadc, step_en); 335 am335x_tsc_se_set(adc_dev->mfd_tscadc, step_en);
152 336
@@ -168,15 +352,6 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
168 * Hence we need to flush out this data. 352 * Hence we need to flush out this data.
169 */ 353 */
170 354
171 for (i = 0; i < ARRAY_SIZE(adc_dev->channel_step); i++) {
172 if (chan->channel == adc_dev->channel_line[i]) {
173 step = adc_dev->channel_step[i];
174 break;
175 }
176 }
177 if (WARN_ON_ONCE(step == UINT_MAX))
178 return -EINVAL;
179
180 fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT); 355 fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
181 for (i = 0; i < fifo1count; i++) { 356 for (i = 0; i < fifo1count; i++) {
182 read = tiadc_readl(adc_dev, REG_FIFO1); 357 read = tiadc_readl(adc_dev, REG_FIFO1);
@@ -186,7 +361,7 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
186 if (stepid == map_val) { 361 if (stepid == map_val) {
187 read = read & FIFOREAD_DATA_MASK; 362 read = read & FIFOREAD_DATA_MASK;
188 found = true; 363 found = true;
189 *val = read; 364 *val = (u16) read;
190 } 365 }
191 } 366 }
192 367
@@ -237,20 +412,33 @@ static int tiadc_probe(struct platform_device *pdev)
237 indio_dev->modes = INDIO_DIRECT_MODE; 412 indio_dev->modes = INDIO_DIRECT_MODE;
238 indio_dev->info = &tiadc_info; 413 indio_dev->info = &tiadc_info;
239 414
240 tiadc_step_config(adc_dev); 415 tiadc_step_config(indio_dev);
416 tiadc_writel(adc_dev, REG_FIFO1THR, FIFO1_THRESHOLD);
241 417
242 err = tiadc_channel_init(indio_dev, adc_dev->channels); 418 err = tiadc_channel_init(indio_dev, adc_dev->channels);
243 if (err < 0) 419 if (err < 0)
244 return err; 420 return err;
245 421
246 err = iio_device_register(indio_dev); 422 err = tiadc_iio_buffered_hardware_setup(indio_dev,
423 &tiadc_worker_h,
424 &tiadc_irq_h,
425 adc_dev->mfd_tscadc->irq,
426 IRQF_SHARED,
427 &tiadc_buffer_setup_ops);
428
247 if (err) 429 if (err)
248 goto err_free_channels; 430 goto err_free_channels;
249 431
432 err = iio_device_register(indio_dev);
433 if (err)
434 goto err_buffer_unregister;
435
250 platform_set_drvdata(pdev, indio_dev); 436 platform_set_drvdata(pdev, indio_dev);
251 437
252 return 0; 438 return 0;
253 439
440err_buffer_unregister:
441 tiadc_iio_buffered_hardware_remove(indio_dev);
254err_free_channels: 442err_free_channels:
255 tiadc_channels_remove(indio_dev); 443 tiadc_channels_remove(indio_dev);
256 return err; 444 return err;
@@ -263,6 +451,7 @@ static int tiadc_remove(struct platform_device *pdev)
263 u32 step_en; 451 u32 step_en;
264 452
265 iio_device_unregister(indio_dev); 453 iio_device_unregister(indio_dev);
454 tiadc_iio_buffered_hardware_remove(indio_dev);
266 tiadc_channels_remove(indio_dev); 455 tiadc_channels_remove(indio_dev);
267 456
268 step_en = get_adc_step_mask(adc_dev); 457 step_en = get_adc_step_mask(adc_dev);
@@ -301,7 +490,7 @@ static int tiadc_resume(struct device *dev)
301 restore &= ~(CNTRLREG_POWERDOWN); 490 restore &= ~(CNTRLREG_POWERDOWN);
302 tiadc_writel(adc_dev, REG_CTRL, restore); 491 tiadc_writel(adc_dev, REG_CTRL, restore);
303 492
304 tiadc_step_config(adc_dev); 493 tiadc_step_config(indio_dev);
305 494
306 return 0; 495 return 0;
307} 496}
diff --git a/drivers/iio/buffer_cb.c b/drivers/iio/buffer_cb.c
index 9d19ba74f22b..578f7199ed51 100644
--- a/drivers/iio/buffer_cb.c
+++ b/drivers/iio/buffer_cb.c
@@ -7,12 +7,12 @@
7 7
8struct iio_cb_buffer { 8struct iio_cb_buffer {
9 struct iio_buffer buffer; 9 struct iio_buffer buffer;
10 int (*cb)(u8 *data, void *private); 10 int (*cb)(const void *data, void *private);
11 void *private; 11 void *private;
12 struct iio_channel *channels; 12 struct iio_channel *channels;
13}; 13};
14 14
15static int iio_buffer_cb_store_to(struct iio_buffer *buffer, u8 *data) 15static int iio_buffer_cb_store_to(struct iio_buffer *buffer, const void *data)
16{ 16{
17 struct iio_cb_buffer *cb_buff = container_of(buffer, 17 struct iio_cb_buffer *cb_buff = container_of(buffer,
18 struct iio_cb_buffer, 18 struct iio_cb_buffer,
@@ -21,12 +21,12 @@ static int iio_buffer_cb_store_to(struct iio_buffer *buffer, u8 *data)
21 return cb_buff->cb(data, cb_buff->private); 21 return cb_buff->cb(data, cb_buff->private);
22} 22}
23 23
24static struct iio_buffer_access_funcs iio_cb_access = { 24static const struct iio_buffer_access_funcs iio_cb_access = {
25 .store_to = &iio_buffer_cb_store_to, 25 .store_to = &iio_buffer_cb_store_to,
26}; 26};
27 27
28struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev, 28struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev,
29 int (*cb)(u8 *data, 29 int (*cb)(const void *data,
30 void *private), 30 void *private),
31 void *private) 31 void *private)
32{ 32{
diff --git a/drivers/iio/common/st_sensors/st_sensors_buffer.c b/drivers/iio/common/st_sensors/st_sensors_buffer.c
index 71a2c5f63b9c..1665c8e4b62b 100644
--- a/drivers/iio/common/st_sensors/st_sensors_buffer.c
+++ b/drivers/iio/common/st_sensors/st_sensors_buffer.c
@@ -113,11 +113,8 @@ irqreturn_t st_sensors_trigger_handler(int irq, void *p)
113 if (len < 0) 113 if (len < 0)
114 goto st_sensors_get_buffer_element_error; 114 goto st_sensors_get_buffer_element_error;
115 115
116 if (indio_dev->scan_timestamp) 116 iio_push_to_buffers_with_timestamp(indio_dev, sdata->buffer_data,
117 *(s64 *)((u8 *)sdata->buffer_data + 117 pf->timestamp);
118 ALIGN(len, sizeof(s64))) = pf->timestamp;
119
120 iio_push_to_buffers(indio_dev, sdata->buffer_data);
121 118
122st_sensors_get_buffer_element_error: 119st_sensors_get_buffer_element_error:
123 iio_trigger_notify_done(indio_dev->trig); 120 iio_trigger_notify_done(indio_dev->trig);
diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c
index 965ee22d3ac8..7ba1ef270213 100644
--- a/drivers/iio/common/st_sensors/st_sensors_core.c
+++ b/drivers/iio/common/st_sensors/st_sensors_core.c
@@ -198,21 +198,17 @@ int st_sensors_set_axis_enable(struct iio_dev *indio_dev, u8 axis_enable)
198} 198}
199EXPORT_SYMBOL(st_sensors_set_axis_enable); 199EXPORT_SYMBOL(st_sensors_set_axis_enable);
200 200
201int st_sensors_init_sensor(struct iio_dev *indio_dev, 201static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev,
202 struct st_sensors_platform_data *pdata) 202 struct st_sensors_platform_data *pdata)
203{ 203{
204 int err;
205 struct st_sensor_data *sdata = iio_priv(indio_dev); 204 struct st_sensor_data *sdata = iio_priv(indio_dev);
206 205
207 mutex_init(&sdata->tb.buf_lock);
208
209 switch (pdata->drdy_int_pin) { 206 switch (pdata->drdy_int_pin) {
210 case 1: 207 case 1:
211 if (sdata->sensor->drdy_irq.mask_int1 == 0) { 208 if (sdata->sensor->drdy_irq.mask_int1 == 0) {
212 dev_err(&indio_dev->dev, 209 dev_err(&indio_dev->dev,
213 "DRDY on INT1 not available.\n"); 210 "DRDY on INT1 not available.\n");
214 err = -EINVAL; 211 return -EINVAL;
215 goto init_error;
216 } 212 }
217 sdata->drdy_int_pin = 1; 213 sdata->drdy_int_pin = 1;
218 break; 214 break;
@@ -220,39 +216,53 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev,
220 if (sdata->sensor->drdy_irq.mask_int2 == 0) { 216 if (sdata->sensor->drdy_irq.mask_int2 == 0) {
221 dev_err(&indio_dev->dev, 217 dev_err(&indio_dev->dev,
222 "DRDY on INT2 not available.\n"); 218 "DRDY on INT2 not available.\n");
223 err = -EINVAL; 219 return -EINVAL;
224 goto init_error;
225 } 220 }
226 sdata->drdy_int_pin = 2; 221 sdata->drdy_int_pin = 2;
227 break; 222 break;
228 default: 223 default:
229 dev_err(&indio_dev->dev, "DRDY on pdata not valid.\n"); 224 dev_err(&indio_dev->dev, "DRDY on pdata not valid.\n");
230 err = -EINVAL; 225 return -EINVAL;
231 goto init_error;
232 } 226 }
233 227
228 return 0;
229}
230
231int st_sensors_init_sensor(struct iio_dev *indio_dev,
232 struct st_sensors_platform_data *pdata)
233{
234 struct st_sensor_data *sdata = iio_priv(indio_dev);
235 int err = 0;
236
237 mutex_init(&sdata->tb.buf_lock);
238
239 if (pdata)
240 err = st_sensors_set_drdy_int_pin(indio_dev, pdata);
241
234 err = st_sensors_set_enable(indio_dev, false); 242 err = st_sensors_set_enable(indio_dev, false);
235 if (err < 0) 243 if (err < 0)
236 goto init_error; 244 return err;
237 245
238 err = st_sensors_set_fullscale(indio_dev, 246 if (sdata->current_fullscale) {
239 sdata->current_fullscale->num); 247 err = st_sensors_set_fullscale(indio_dev,
240 if (err < 0) 248 sdata->current_fullscale->num);
241 goto init_error; 249 if (err < 0)
250 return err;
251 } else
252 dev_info(&indio_dev->dev, "Full-scale not possible\n");
242 253
243 err = st_sensors_set_odr(indio_dev, sdata->odr); 254 err = st_sensors_set_odr(indio_dev, sdata->odr);
244 if (err < 0) 255 if (err < 0)
245 goto init_error; 256 return err;
246 257
247 /* set BDU */ 258 /* set BDU */
248 err = st_sensors_write_data_with_mask(indio_dev, 259 err = st_sensors_write_data_with_mask(indio_dev,
249 sdata->sensor->bdu.addr, sdata->sensor->bdu.mask, true); 260 sdata->sensor->bdu.addr, sdata->sensor->bdu.mask, true);
250 if (err < 0) 261 if (err < 0)
251 goto init_error; 262 return err;
252 263
253 err = st_sensors_set_axis_enable(indio_dev, ST_SENSORS_ENABLE_ALL_AXIS); 264 err = st_sensors_set_axis_enable(indio_dev, ST_SENSORS_ENABLE_ALL_AXIS);
254 265
255init_error:
256 return err; 266 return err;
257} 267}
258EXPORT_SYMBOL(st_sensors_init_sensor); 268EXPORT_SYMBOL(st_sensors_init_sensor);
@@ -263,6 +273,9 @@ int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable)
263 u8 drdy_mask; 273 u8 drdy_mask;
264 struct st_sensor_data *sdata = iio_priv(indio_dev); 274 struct st_sensor_data *sdata = iio_priv(indio_dev);
265 275
276 if (!sdata->sensor->drdy_irq.addr)
277 return 0;
278
266 /* Enable/Disable the interrupt generator 1. */ 279 /* Enable/Disable the interrupt generator 1. */
267 if (sdata->sensor->drdy_irq.ig1.en_addr > 0) { 280 if (sdata->sensor->drdy_irq.ig1.en_addr > 0) {
268 err = st_sensors_write_data_with_mask(indio_dev, 281 err = st_sensors_write_data_with_mask(indio_dev,
@@ -318,10 +331,8 @@ static int st_sensors_read_axis_data(struct iio_dev *indio_dev,
318 unsigned int byte_for_channel = ch->scan_type.storagebits >> 3; 331 unsigned int byte_for_channel = ch->scan_type.storagebits >> 3;
319 332
320 outdata = kmalloc(byte_for_channel, GFP_KERNEL); 333 outdata = kmalloc(byte_for_channel, GFP_KERNEL);
321 if (!outdata) { 334 if (!outdata)
322 err = -EINVAL; 335 return -ENOMEM;
323 goto st_sensors_read_axis_data_error;
324 }
325 336
326 err = sdata->tf->read_multiple_byte(&sdata->tb, sdata->dev, 337 err = sdata->tf->read_multiple_byte(&sdata->tb, sdata->dev,
327 ch->address, byte_for_channel, 338 ch->address, byte_for_channel,
@@ -336,7 +347,7 @@ static int st_sensors_read_axis_data(struct iio_dev *indio_dev,
336 347
337st_sensors_free_memory: 348st_sensors_free_memory:
338 kfree(outdata); 349 kfree(outdata);
339st_sensors_read_axis_data_error: 350
340 return err; 351 return err;
341} 352}
342 353
@@ -349,28 +360,25 @@ int st_sensors_read_info_raw(struct iio_dev *indio_dev,
349 mutex_lock(&indio_dev->mlock); 360 mutex_lock(&indio_dev->mlock);
350 if (indio_dev->currentmode == INDIO_BUFFER_TRIGGERED) { 361 if (indio_dev->currentmode == INDIO_BUFFER_TRIGGERED) {
351 err = -EBUSY; 362 err = -EBUSY;
352 goto read_error; 363 goto out;
353 } else { 364 } else {
354 err = st_sensors_set_enable(indio_dev, true); 365 err = st_sensors_set_enable(indio_dev, true);
355 if (err < 0) 366 if (err < 0)
356 goto read_error; 367 goto out;
357 368
358 msleep((sdata->sensor->bootime * 1000) / sdata->odr); 369 msleep((sdata->sensor->bootime * 1000) / sdata->odr);
359 err = st_sensors_read_axis_data(indio_dev, ch, val); 370 err = st_sensors_read_axis_data(indio_dev, ch, val);
360 if (err < 0) 371 if (err < 0)
361 goto read_error; 372 goto out;
362 373
363 *val = *val >> ch->scan_type.shift; 374 *val = *val >> ch->scan_type.shift;
364 375
365 err = st_sensors_set_enable(indio_dev, false); 376 err = st_sensors_set_enable(indio_dev, false);
366 } 377 }
378out:
367 mutex_unlock(&indio_dev->mlock); 379 mutex_unlock(&indio_dev->mlock);
368 380
369 return err; 381 return err;
370
371read_error:
372 mutex_unlock(&indio_dev->mlock);
373 return err;
374} 382}
375EXPORT_SYMBOL(st_sensors_read_info_raw); 383EXPORT_SYMBOL(st_sensors_read_info_raw);
376 384
diff --git a/drivers/iio/dac/ad5064.c b/drivers/iio/dac/ad5064.c
index a3a52be4852c..b18e8c4347c2 100644
--- a/drivers/iio/dac/ad5064.c
+++ b/drivers/iio/dac/ad5064.c
@@ -285,8 +285,9 @@ static const struct iio_chan_spec_ext_info ad5064_ext_info[] = {
285 .name = "powerdown", 285 .name = "powerdown",
286 .read = ad5064_read_dac_powerdown, 286 .read = ad5064_read_dac_powerdown,
287 .write = ad5064_write_dac_powerdown, 287 .write = ad5064_write_dac_powerdown,
288 .shared = IIO_SEPARATE,
288 }, 289 },
289 IIO_ENUM("powerdown_mode", false, &ad5064_powerdown_mode_enum), 290 IIO_ENUM("powerdown_mode", IIO_SEPARATE, &ad5064_powerdown_mode_enum),
290 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5064_powerdown_mode_enum), 291 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5064_powerdown_mode_enum),
291 { }, 292 { },
292}; 293};
diff --git a/drivers/iio/dac/ad5380.c b/drivers/iio/dac/ad5380.c
index 1c44ae3920e2..4c791e66e0d7 100644
--- a/drivers/iio/dac/ad5380.c
+++ b/drivers/iio/dac/ad5380.c
@@ -247,8 +247,10 @@ static struct iio_chan_spec_ext_info ad5380_ext_info[] = {
247 .name = "powerdown", 247 .name = "powerdown",
248 .read = ad5380_read_dac_powerdown, 248 .read = ad5380_read_dac_powerdown,
249 .write = ad5380_write_dac_powerdown, 249 .write = ad5380_write_dac_powerdown,
250 .shared = IIO_SEPARATE,
250 }, 251 },
251 IIO_ENUM("powerdown_mode", true, &ad5380_powerdown_mode_enum), 252 IIO_ENUM("powerdown_mode", IIO_SHARED_BY_TYPE,
253 &ad5380_powerdown_mode_enum),
252 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5380_powerdown_mode_enum), 254 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5380_powerdown_mode_enum),
253 { }, 255 { },
254}; 256};
diff --git a/drivers/iio/dac/ad5446.c b/drivers/iio/dac/ad5446.c
index 96e9ed4c2d01..6dcb6d93f0e4 100644
--- a/drivers/iio/dac/ad5446.c
+++ b/drivers/iio/dac/ad5446.c
@@ -132,8 +132,9 @@ static const struct iio_chan_spec_ext_info ad5446_ext_info_powerdown[] = {
132 .name = "powerdown", 132 .name = "powerdown",
133 .read = ad5446_read_dac_powerdown, 133 .read = ad5446_read_dac_powerdown,
134 .write = ad5446_write_dac_powerdown, 134 .write = ad5446_write_dac_powerdown,
135 .shared = IIO_SEPARATE,
135 }, 136 },
136 IIO_ENUM("powerdown_mode", false, &ad5446_powerdown_mode_enum), 137 IIO_ENUM("powerdown_mode", IIO_SEPARATE, &ad5446_powerdown_mode_enum),
137 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5446_powerdown_mode_enum), 138 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5446_powerdown_mode_enum),
138 { }, 139 { },
139}; 140};
diff --git a/drivers/iio/dac/ad5504.c b/drivers/iio/dac/ad5504.c
index caffb16bc05c..31f4ff29f914 100644
--- a/drivers/iio/dac/ad5504.c
+++ b/drivers/iio/dac/ad5504.c
@@ -248,8 +248,10 @@ static const struct iio_chan_spec_ext_info ad5504_ext_info[] = {
248 .name = "powerdown", 248 .name = "powerdown",
249 .read = ad5504_read_dac_powerdown, 249 .read = ad5504_read_dac_powerdown,
250 .write = ad5504_write_dac_powerdown, 250 .write = ad5504_write_dac_powerdown,
251 .shared = IIO_SEPARATE,
251 }, 252 },
252 IIO_ENUM("powerdown_mode", true, &ad5504_powerdown_mode_enum), 253 IIO_ENUM("powerdown_mode", IIO_SHARED_BY_TYPE,
254 &ad5504_powerdown_mode_enum),
253 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5504_powerdown_mode_enum), 255 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5504_powerdown_mode_enum),
254 { }, 256 { },
255}; 257};
diff --git a/drivers/iio/dac/ad5624r_spi.c b/drivers/iio/dac/ad5624r_spi.c
index 714af757cd56..dbb1289cc7a6 100644
--- a/drivers/iio/dac/ad5624r_spi.c
+++ b/drivers/iio/dac/ad5624r_spi.c
@@ -163,8 +163,10 @@ static const struct iio_chan_spec_ext_info ad5624r_ext_info[] = {
163 .name = "powerdown", 163 .name = "powerdown",
164 .read = ad5624r_read_dac_powerdown, 164 .read = ad5624r_read_dac_powerdown,
165 .write = ad5624r_write_dac_powerdown, 165 .write = ad5624r_write_dac_powerdown,
166 .shared = IIO_SEPARATE,
166 }, 167 },
167 IIO_ENUM("powerdown_mode", true, &ad5624r_powerdown_mode_enum), 168 IIO_ENUM("powerdown_mode", IIO_SHARED_BY_TYPE,
169 &ad5624r_powerdown_mode_enum),
168 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5624r_powerdown_mode_enum), 170 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5624r_powerdown_mode_enum),
169 { }, 171 { },
170}; 172};
diff --git a/drivers/iio/dac/ad5686.c b/drivers/iio/dac/ad5686.c
index 57825ead7db2..f472b48445f6 100644
--- a/drivers/iio/dac/ad5686.c
+++ b/drivers/iio/dac/ad5686.c
@@ -213,7 +213,6 @@ static int ad5686_read_raw(struct iio_dev *indio_dev,
213 return ret; 213 return ret;
214 *val = ret; 214 *val = ret;
215 return IIO_VAL_INT; 215 return IIO_VAL_INT;
216 break;
217 case IIO_CHAN_INFO_SCALE: 216 case IIO_CHAN_INFO_SCALE:
218 scale_uv = (st->vref_mv * 100000) 217 scale_uv = (st->vref_mv * 100000)
219 >> (chan->scan_type.realbits); 218 >> (chan->scan_type.realbits);
@@ -265,8 +264,9 @@ static const struct iio_chan_spec_ext_info ad5686_ext_info[] = {
265 .name = "powerdown", 264 .name = "powerdown",
266 .read = ad5686_read_dac_powerdown, 265 .read = ad5686_read_dac_powerdown,
267 .write = ad5686_write_dac_powerdown, 266 .write = ad5686_write_dac_powerdown,
267 .shared = IIO_SEPARATE,
268 }, 268 },
269 IIO_ENUM("powerdown_mode", false, &ad5686_powerdown_mode_enum), 269 IIO_ENUM("powerdown_mode", IIO_SEPARATE, &ad5686_powerdown_mode_enum),
270 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5686_powerdown_mode_enum), 270 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5686_powerdown_mode_enum),
271 { }, 271 { },
272}; 272};
diff --git a/drivers/iio/dac/ad5755.c b/drivers/iio/dac/ad5755.c
index 36a4361aece1..f305a0c83418 100644
--- a/drivers/iio/dac/ad5755.c
+++ b/drivers/iio/dac/ad5755.c
@@ -386,6 +386,7 @@ static const struct iio_chan_spec_ext_info ad5755_ext_info[] = {
386 .name = "powerdown", 386 .name = "powerdown",
387 .read = ad5755_read_powerdown, 387 .read = ad5755_read_powerdown,
388 .write = ad5755_write_powerdown, 388 .write = ad5755_write_powerdown,
389 .shared = IIO_SEPARATE,
389 }, 390 },
390 { }, 391 { },
391}; 392};
diff --git a/drivers/iio/dac/ad5791.c b/drivers/iio/dac/ad5791.c
index ce7458963309..3cee89be68c3 100644
--- a/drivers/iio/dac/ad5791.c
+++ b/drivers/iio/dac/ad5791.c
@@ -287,11 +287,12 @@ static int ad5791_read_raw(struct iio_dev *indio_dev,
287static const struct iio_chan_spec_ext_info ad5791_ext_info[] = { 287static const struct iio_chan_spec_ext_info ad5791_ext_info[] = {
288 { 288 {
289 .name = "powerdown", 289 .name = "powerdown",
290 .shared = true, 290 .shared = IIO_SHARED_BY_TYPE,
291 .read = ad5791_read_dac_powerdown, 291 .read = ad5791_read_dac_powerdown,
292 .write = ad5791_write_dac_powerdown, 292 .write = ad5791_write_dac_powerdown,
293 }, 293 },
294 IIO_ENUM("powerdown_mode", true, &ad5791_powerdown_mode_enum), 294 IIO_ENUM("powerdown_mode", IIO_SHARED_BY_TYPE,
295 &ad5791_powerdown_mode_enum),
295 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5791_powerdown_mode_enum), 296 IIO_ENUM_AVAILABLE("powerdown_mode", &ad5791_powerdown_mode_enum),
296 { }, 297 { },
297}; 298};
diff --git a/drivers/iio/dac/ad7303.c b/drivers/iio/dac/ad7303.c
index ed2d276477bd..d0505fd22ef4 100644
--- a/drivers/iio/dac/ad7303.c
+++ b/drivers/iio/dac/ad7303.c
@@ -169,6 +169,7 @@ static const struct iio_chan_spec_ext_info ad7303_ext_info[] = {
169 .name = "powerdown", 169 .name = "powerdown",
170 .read = ad7303_read_dac_powerdown, 170 .read = ad7303_read_dac_powerdown,
171 .write = ad7303_write_dac_powerdown, 171 .write = ad7303_write_dac_powerdown,
172 .shared = IIO_SEPARATE,
172 }, 173 },
173 { }, 174 { },
174}; 175};
diff --git a/drivers/iio/dac/mcp4725.c b/drivers/iio/dac/mcp4725.c
index 1f4a48e6a82c..6711a33b16ba 100644
--- a/drivers/iio/dac/mcp4725.c
+++ b/drivers/iio/dac/mcp4725.c
@@ -195,8 +195,9 @@ static const struct iio_chan_spec_ext_info mcp4725_ext_info[] = {
195 .name = "powerdown", 195 .name = "powerdown",
196 .read = mcp4725_read_powerdown, 196 .read = mcp4725_read_powerdown,
197 .write = mcp4725_write_powerdown, 197 .write = mcp4725_write_powerdown,
198 .shared = IIO_SEPARATE,
198 }, 199 },
199 IIO_ENUM("powerdown_mode", false, &mcp4725_powerdown_mode_enum), 200 IIO_ENUM("powerdown_mode", IIO_SEPARATE, &mcp4725_powerdown_mode_enum),
200 IIO_ENUM_AVAILABLE("powerdown_mode", &mcp4725_powerdown_mode_enum), 201 IIO_ENUM_AVAILABLE("powerdown_mode", &mcp4725_powerdown_mode_enum),
201 { }, 202 { },
202}; 203};
diff --git a/drivers/iio/frequency/adf4350.c b/drivers/iio/frequency/adf4350.c
index a7b30be86ae0..85152547aa8b 100644
--- a/drivers/iio/frequency/adf4350.c
+++ b/drivers/iio/frequency/adf4350.c
@@ -351,6 +351,7 @@ static ssize_t adf4350_read(struct iio_dev *indio_dev,
351 .read = adf4350_read, \ 351 .read = adf4350_read, \
352 .write = adf4350_write, \ 352 .write = adf4350_write, \
353 .private = _ident, \ 353 .private = _ident, \
354 .shared = IIO_SEPARATE, \
354} 355}
355 356
356static const struct iio_chan_spec_ext_info adf4350_ext_info[] = { 357static const struct iio_chan_spec_ext_info adf4350_ext_info[] = {
diff --git a/drivers/iio/gyro/adis16130.c b/drivers/iio/gyro/adis16130.c
index ac66fc184042..9155cf6cf287 100644
--- a/drivers/iio/gyro/adis16130.c
+++ b/drivers/iio/gyro/adis16130.c
@@ -103,7 +103,6 @@ static int adis16130_read_raw(struct iio_dev *indio_dev,
103 default: 103 default:
104 return -EINVAL; 104 return -EINVAL;
105 } 105 }
106 break;
107 case IIO_CHAN_INFO_OFFSET: 106 case IIO_CHAN_INFO_OFFSET:
108 switch (chan->type) { 107 switch (chan->type) {
109 case IIO_ANGL_VEL: 108 case IIO_ANGL_VEL:
@@ -115,7 +114,6 @@ static int adis16130_read_raw(struct iio_dev *indio_dev,
115 default: 114 default:
116 return -EINVAL; 115 return -EINVAL;
117 } 116 }
118 break;
119 } 117 }
120 118
121 return -EINVAL; 119 return -EINVAL;
diff --git a/drivers/iio/gyro/adis16260.c b/drivers/iio/gyro/adis16260.c
index 06541162fc02..22b6fb80fa1a 100644
--- a/drivers/iio/gyro/adis16260.c
+++ b/drivers/iio/gyro/adis16260.c
@@ -239,7 +239,6 @@ static int adis16260_read_raw(struct iio_dev *indio_dev,
239 default: 239 default:
240 return -EINVAL; 240 return -EINVAL;
241 } 241 }
242 break;
243 case IIO_CHAN_INFO_OFFSET: 242 case IIO_CHAN_INFO_OFFSET:
244 *val = 250000 / 1453; /* 25 C = 0x00 */ 243 *val = 250000 / 1453; /* 25 C = 0x00 */
245 return IIO_VAL_INT; 244 return IIO_VAL_INT;
diff --git a/drivers/iio/gyro/adxrs450.c b/drivers/iio/gyro/adxrs450.c
index 6dab2995f0f2..c1f40efbf639 100644
--- a/drivers/iio/gyro/adxrs450.c
+++ b/drivers/iio/gyro/adxrs450.c
@@ -354,7 +354,6 @@ static int adxrs450_read_raw(struct iio_dev *indio_dev,
354 default: 354 default:
355 return -EINVAL; 355 return -EINVAL;
356 } 356 }
357 break;
358 case IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW: 357 case IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW:
359 ret = adxrs450_spi_read_reg_16(indio_dev, ADXRS450_QUAD1, &t); 358 ret = adxrs450_spi_read_reg_16(indio_dev, ADXRS450_QUAD1, &t);
360 if (ret) 359 if (ret)
diff --git a/drivers/iio/gyro/hid-sensor-gyro-3d.c b/drivers/iio/gyro/hid-sensor-gyro-3d.c
index c688d974d3e3..ea01c6bcfb56 100644
--- a/drivers/iio/gyro/hid-sensor-gyro-3d.c
+++ b/drivers/iio/gyro/hid-sensor-gyro-3d.c
@@ -182,10 +182,11 @@ static const struct iio_info gyro_3d_info = {
182}; 182};
183 183
184/* Function to push data to buffer */ 184/* Function to push data to buffer */
185static void hid_sensor_push_data(struct iio_dev *indio_dev, u8 *data, int len) 185static void hid_sensor_push_data(struct iio_dev *indio_dev, const void *data,
186 int len)
186{ 187{
187 dev_dbg(&indio_dev->dev, "hid_sensor_push_data\n"); 188 dev_dbg(&indio_dev->dev, "hid_sensor_push_data\n");
188 iio_push_to_buffers(indio_dev, (u8 *)data); 189 iio_push_to_buffers(indio_dev, data);
189} 190}
190 191
191/* Callback handler to send event after all samples are received and captured */ 192/* Callback handler to send event after all samples are received and captured */
@@ -200,7 +201,7 @@ static int gyro_3d_proc_event(struct hid_sensor_hub_device *hsdev,
200 gyro_state->common_attributes.data_ready); 201 gyro_state->common_attributes.data_ready);
201 if (gyro_state->common_attributes.data_ready) 202 if (gyro_state->common_attributes.data_ready)
202 hid_sensor_push_data(indio_dev, 203 hid_sensor_push_data(indio_dev,
203 (u8 *)gyro_state->gyro_val, 204 gyro_state->gyro_val,
204 sizeof(gyro_state->gyro_val)); 205 sizeof(gyro_state->gyro_val));
205 206
206 return 0; 207 return 0;
diff --git a/drivers/iio/gyro/itg3200_buffer.c b/drivers/iio/gyro/itg3200_buffer.c
index 6c43af9bb0a4..e3b3c5084070 100644
--- a/drivers/iio/gyro/itg3200_buffer.c
+++ b/drivers/iio/gyro/itg3200_buffer.c
@@ -55,11 +55,8 @@ static irqreturn_t itg3200_trigger_handler(int irq, void *p)
55 if (ret < 0) 55 if (ret < 0)
56 goto error_ret; 56 goto error_ret;
57 57
58 if (indio_dev->scan_timestamp) 58 iio_push_to_buffers_with_timestamp(indio_dev, buf, pf->timestamp);
59 memcpy(buf + indio_dev->scan_bytes - sizeof(s64),
60 &pf->timestamp, sizeof(pf->timestamp));
61 59
62 iio_push_to_buffers(indio_dev, (u8 *)buf);
63 iio_trigger_notify_done(indio_dev->trig); 60 iio_trigger_notify_done(indio_dev->trig);
64 61
65error_ret: 62error_ret:
diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c
index e13c2b0bf3d1..d53d91adfb55 100644
--- a/drivers/iio/gyro/st_gyro_core.c
+++ b/drivers/iio/gyro/st_gyro_core.c
@@ -305,8 +305,9 @@ static const struct iio_trigger_ops st_gyro_trigger_ops = {
305int st_gyro_common_probe(struct iio_dev *indio_dev, 305int st_gyro_common_probe(struct iio_dev *indio_dev,
306 struct st_sensors_platform_data *pdata) 306 struct st_sensors_platform_data *pdata)
307{ 307{
308 int err;
309 struct st_sensor_data *gdata = iio_priv(indio_dev); 308 struct st_sensor_data *gdata = iio_priv(indio_dev);
309 int irq = gdata->get_irq_data_ready(indio_dev);
310 int err;
310 311
311 indio_dev->modes = INDIO_DIRECT_MODE; 312 indio_dev->modes = INDIO_DIRECT_MODE;
312 indio_dev->info = &gyro_info; 313 indio_dev->info = &gyro_info;
@@ -314,7 +315,7 @@ int st_gyro_common_probe(struct iio_dev *indio_dev,
314 err = st_sensors_check_device_support(indio_dev, 315 err = st_sensors_check_device_support(indio_dev,
315 ARRAY_SIZE(st_gyro_sensors), st_gyro_sensors); 316 ARRAY_SIZE(st_gyro_sensors), st_gyro_sensors);
316 if (err < 0) 317 if (err < 0)
317 goto st_gyro_common_probe_error; 318 return err;
318 319
319 gdata->num_data_channels = ST_GYRO_NUMBER_DATA_CHANNELS; 320 gdata->num_data_channels = ST_GYRO_NUMBER_DATA_CHANNELS;
320 gdata->multiread_bit = gdata->sensor->multi_read_bit; 321 gdata->multiread_bit = gdata->sensor->multi_read_bit;
@@ -327,13 +328,13 @@ int st_gyro_common_probe(struct iio_dev *indio_dev,
327 328
328 err = st_sensors_init_sensor(indio_dev, pdata); 329 err = st_sensors_init_sensor(indio_dev, pdata);
329 if (err < 0) 330 if (err < 0)
330 goto st_gyro_common_probe_error; 331 return err;
331 332
332 if (gdata->get_irq_data_ready(indio_dev) > 0) { 333 err = st_gyro_allocate_ring(indio_dev);
333 err = st_gyro_allocate_ring(indio_dev); 334 if (err < 0)
334 if (err < 0) 335 return err;
335 goto st_gyro_common_probe_error;
336 336
337 if (irq > 0) {
337 err = st_sensors_allocate_trigger(indio_dev, 338 err = st_sensors_allocate_trigger(indio_dev,
338 ST_GYRO_TRIGGER_OPS); 339 ST_GYRO_TRIGGER_OPS);
339 if (err < 0) 340 if (err < 0)
@@ -344,15 +345,14 @@ int st_gyro_common_probe(struct iio_dev *indio_dev,
344 if (err) 345 if (err)
345 goto st_gyro_device_register_error; 346 goto st_gyro_device_register_error;
346 347
347 return err; 348 return 0;
348 349
349st_gyro_device_register_error: 350st_gyro_device_register_error:
350 if (gdata->get_irq_data_ready(indio_dev) > 0) 351 if (irq > 0)
351 st_sensors_deallocate_trigger(indio_dev); 352 st_sensors_deallocate_trigger(indio_dev);
352st_gyro_probe_trigger_error: 353st_gyro_probe_trigger_error:
353 if (gdata->get_irq_data_ready(indio_dev) > 0) 354 st_gyro_deallocate_ring(indio_dev);
354 st_gyro_deallocate_ring(indio_dev); 355
355st_gyro_common_probe_error:
356 return err; 356 return err;
357} 357}
358EXPORT_SYMBOL(st_gyro_common_probe); 358EXPORT_SYMBOL(st_gyro_common_probe);
@@ -362,10 +362,10 @@ void st_gyro_common_remove(struct iio_dev *indio_dev)
362 struct st_sensor_data *gdata = iio_priv(indio_dev); 362 struct st_sensor_data *gdata = iio_priv(indio_dev);
363 363
364 iio_device_unregister(indio_dev); 364 iio_device_unregister(indio_dev);
365 if (gdata->get_irq_data_ready(indio_dev) > 0) { 365 if (gdata->get_irq_data_ready(indio_dev) > 0)
366 st_sensors_deallocate_trigger(indio_dev); 366 st_sensors_deallocate_trigger(indio_dev);
367 st_gyro_deallocate_ring(indio_dev); 367
368 } 368 st_gyro_deallocate_ring(indio_dev);
369} 369}
370EXPORT_SYMBOL(st_gyro_common_remove); 370EXPORT_SYMBOL(st_gyro_common_remove);
371 371
diff --git a/drivers/iio/iio_core.h b/drivers/iio/iio_core.h
index 05c1b74502a3..6be5ab864b1a 100644
--- a/drivers/iio/iio_core.h
+++ b/drivers/iio/iio_core.h
@@ -30,7 +30,7 @@ int __iio_add_chan_devattr(const char *postfix,
30 const char *buf, 30 const char *buf,
31 size_t len), 31 size_t len),
32 u64 mask, 32 u64 mask,
33 bool generic, 33 enum iio_shared_by shared_by,
34 struct device *dev, 34 struct device *dev,
35 struct list_head *attr_list); 35 struct list_head *attr_list);
36 36
diff --git a/drivers/iio/imu/adis16400_buffer.c b/drivers/iio/imu/adis16400_buffer.c
index 054c01d6e73c..f2cf829e5df1 100644
--- a/drivers/iio/imu/adis16400_buffer.c
+++ b/drivers/iio/imu/adis16400_buffer.c
@@ -82,13 +82,8 @@ irqreturn_t adis16400_trigger_handler(int irq, void *p)
82 spi_setup(st->adis.spi); 82 spi_setup(st->adis.spi);
83 } 83 }
84 84
85 /* Guaranteed to be aligned with 8 byte boundary */ 85 iio_push_to_buffers_with_timestamp(indio_dev, adis->buffer,
86 if (indio_dev->scan_timestamp) { 86 pf->timestamp);
87 void *b = adis->buffer + indio_dev->scan_bytes - sizeof(s64);
88 *(s64 *)b = pf->timestamp;
89 }
90
91 iio_push_to_buffers(indio_dev, adis->buffer);
92 87
93 iio_trigger_notify_done(indio_dev->trig); 88 iio_trigger_notify_done(indio_dev->trig);
94 89
diff --git a/drivers/iio/imu/adis_buffer.c b/drivers/iio/imu/adis_buffer.c
index 99d8e0b0dd34..cb32b593f1c5 100644
--- a/drivers/iio/imu/adis_buffer.c
+++ b/drivers/iio/imu/adis_buffer.c
@@ -102,13 +102,8 @@ static irqreturn_t adis_trigger_handler(int irq, void *p)
102 mutex_unlock(&adis->txrx_lock); 102 mutex_unlock(&adis->txrx_lock);
103 } 103 }
104 104
105 /* Guaranteed to be aligned with 8 byte boundary */ 105 iio_push_to_buffers_with_timestamp(indio_dev, adis->buffer,
106 if (indio_dev->scan_timestamp) { 106 pf->timestamp);
107 void *b = adis->buffer + indio_dev->scan_bytes - sizeof(s64);
108 *(s64 *)b = pf->timestamp;
109 }
110
111 iio_push_to_buffers(indio_dev, adis->buffer);
112 107
113 iio_trigger_notify_done(indio_dev->trig); 108 iio_trigger_notify_done(indio_dev->trig);
114 109
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
index 7da0832f187b..429517117eff 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c
@@ -124,7 +124,6 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)
124 u8 data[INV_MPU6050_OUTPUT_DATA_SIZE]; 124 u8 data[INV_MPU6050_OUTPUT_DATA_SIZE];
125 u16 fifo_count; 125 u16 fifo_count;
126 s64 timestamp; 126 s64 timestamp;
127 u64 *tmp;
128 127
129 mutex_lock(&indio_dev->mlock); 128 mutex_lock(&indio_dev->mlock);
130 if (!(st->chip_config.accl_fifo_enable | 129 if (!(st->chip_config.accl_fifo_enable |
@@ -170,9 +169,8 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)
170 if (0 == result) 169 if (0 == result)
171 timestamp = 0; 170 timestamp = 0;
172 171
173 tmp = (u64 *)data; 172 result = iio_push_to_buffers_with_timestamp(indio_dev, data,
174 tmp[DIV_ROUND_UP(bytes_per_datum, 8)] = timestamp; 173 timestamp);
175 result = iio_push_to_buffers(indio_dev, data);
176 if (result) 174 if (result)
177 goto flush_fifo; 175 goto flush_fifo;
178 fifo_count -= bytes_per_datum; 176 fifo_count -= bytes_per_datum;
diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
index e73033f3839a..2361fbc74e33 100644
--- a/drivers/iio/industrialio-buffer.c
+++ b/drivers/iio/industrialio-buffer.c
@@ -31,16 +31,9 @@ static const char * const iio_endian_prefix[] = {
31 [IIO_LE] = "le", 31 [IIO_LE] = "le",
32}; 32};
33 33
34static bool iio_buffer_is_active(struct iio_dev *indio_dev, 34static bool iio_buffer_is_active(struct iio_buffer *buf)
35 struct iio_buffer *buf)
36{ 35{
37 struct list_head *p; 36 return !list_empty(&buf->buffer_list);
38
39 list_for_each(p, &indio_dev->buffer_list)
40 if (p == &buf->buffer_list)
41 return true;
42
43 return false;
44} 37}
45 38
46/** 39/**
@@ -79,6 +72,7 @@ unsigned int iio_buffer_poll(struct file *filp,
79void iio_buffer_init(struct iio_buffer *buffer) 72void iio_buffer_init(struct iio_buffer *buffer)
80{ 73{
81 INIT_LIST_HEAD(&buffer->demux_list); 74 INIT_LIST_HEAD(&buffer->demux_list);
75 INIT_LIST_HEAD(&buffer->buffer_list);
82 init_waitqueue_head(&buffer->pollq); 76 init_waitqueue_head(&buffer->pollq);
83} 77}
84EXPORT_SYMBOL(iio_buffer_init); 78EXPORT_SYMBOL(iio_buffer_init);
@@ -146,7 +140,7 @@ static ssize_t iio_scan_el_store(struct device *dev,
146 if (ret < 0) 140 if (ret < 0)
147 return ret; 141 return ret;
148 mutex_lock(&indio_dev->mlock); 142 mutex_lock(&indio_dev->mlock);
149 if (iio_buffer_is_active(indio_dev, indio_dev->buffer)) { 143 if (iio_buffer_is_active(indio_dev->buffer)) {
150 ret = -EBUSY; 144 ret = -EBUSY;
151 goto error_ret; 145 goto error_ret;
152 } 146 }
@@ -192,7 +186,7 @@ static ssize_t iio_scan_el_ts_store(struct device *dev,
192 return ret; 186 return ret;
193 187
194 mutex_lock(&indio_dev->mlock); 188 mutex_lock(&indio_dev->mlock);
195 if (iio_buffer_is_active(indio_dev, indio_dev->buffer)) { 189 if (iio_buffer_is_active(indio_dev->buffer)) {
196 ret = -EBUSY; 190 ret = -EBUSY;
197 goto error_ret; 191 goto error_ret;
198 } 192 }
@@ -214,7 +208,7 @@ static int iio_buffer_add_channel_sysfs(struct iio_dev *indio_dev,
214 &iio_show_scan_index, 208 &iio_show_scan_index,
215 NULL, 209 NULL,
216 0, 210 0,
217 0, 211 IIO_SEPARATE,
218 &indio_dev->dev, 212 &indio_dev->dev,
219 &buffer->scan_el_dev_attr_list); 213 &buffer->scan_el_dev_attr_list);
220 if (ret) 214 if (ret)
@@ -249,6 +243,8 @@ static int iio_buffer_add_channel_sysfs(struct iio_dev *indio_dev,
249 0, 243 0,
250 &indio_dev->dev, 244 &indio_dev->dev,
251 &buffer->scan_el_dev_attr_list); 245 &buffer->scan_el_dev_attr_list);
246 if (ret)
247 goto error_ret;
252 attrcount++; 248 attrcount++;
253 ret = attrcount; 249 ret = attrcount;
254error_ret: 250error_ret:
@@ -396,7 +392,7 @@ ssize_t iio_buffer_write_length(struct device *dev,
396 return len; 392 return len;
397 393
398 mutex_lock(&indio_dev->mlock); 394 mutex_lock(&indio_dev->mlock);
399 if (iio_buffer_is_active(indio_dev, indio_dev->buffer)) { 395 if (iio_buffer_is_active(indio_dev->buffer)) {
400 ret = -EBUSY; 396 ret = -EBUSY;
401 } else { 397 } else {
402 if (buffer->access->set_length) 398 if (buffer->access->set_length)
@@ -414,13 +410,11 @@ ssize_t iio_buffer_show_enable(struct device *dev,
414 char *buf) 410 char *buf)
415{ 411{
416 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 412 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
417 return sprintf(buf, "%d\n", 413 return sprintf(buf, "%d\n", iio_buffer_is_active(indio_dev->buffer));
418 iio_buffer_is_active(indio_dev,
419 indio_dev->buffer));
420} 414}
421EXPORT_SYMBOL(iio_buffer_show_enable); 415EXPORT_SYMBOL(iio_buffer_show_enable);
422 416
423/* note NULL used as error indicator as it doesn't make sense. */ 417/* Note NULL used as error indicator as it doesn't make sense. */
424static const unsigned long *iio_scan_mask_match(const unsigned long *av_masks, 418static const unsigned long *iio_scan_mask_match(const unsigned long *av_masks,
425 unsigned int masklength, 419 unsigned int masklength,
426 const unsigned long *mask) 420 const unsigned long *mask)
@@ -435,8 +429,8 @@ static const unsigned long *iio_scan_mask_match(const unsigned long *av_masks,
435 return NULL; 429 return NULL;
436} 430}
437 431
438static int iio_compute_scan_bytes(struct iio_dev *indio_dev, const long *mask, 432static int iio_compute_scan_bytes(struct iio_dev *indio_dev,
439 bool timestamp) 433 const unsigned long *mask, bool timestamp)
440{ 434{
441 const struct iio_chan_spec *ch; 435 const struct iio_chan_spec *ch;
442 unsigned bytes = 0; 436 unsigned bytes = 0;
@@ -490,7 +484,7 @@ int iio_update_buffers(struct iio_dev *indio_dev,
490 indio_dev->active_scan_mask = NULL; 484 indio_dev->active_scan_mask = NULL;
491 485
492 if (remove_buffer) 486 if (remove_buffer)
493 list_del(&remove_buffer->buffer_list); 487 list_del_init(&remove_buffer->buffer_list);
494 if (insert_buffer) 488 if (insert_buffer)
495 list_add(&insert_buffer->buffer_list, &indio_dev->buffer_list); 489 list_add(&insert_buffer->buffer_list, &indio_dev->buffer_list);
496 490
@@ -502,7 +496,7 @@ int iio_update_buffers(struct iio_dev *indio_dev,
502 return 0; 496 return 0;
503 } 497 }
504 498
505 /* What scan mask do we actually have ?*/ 499 /* What scan mask do we actually have? */
506 compound_mask = kcalloc(BITS_TO_LONGS(indio_dev->masklength), 500 compound_mask = kcalloc(BITS_TO_LONGS(indio_dev->masklength),
507 sizeof(long), GFP_KERNEL); 501 sizeof(long), GFP_KERNEL);
508 if (compound_mask == NULL) { 502 if (compound_mask == NULL) {
@@ -527,7 +521,7 @@ int iio_update_buffers(struct iio_dev *indio_dev,
527 * Roll back. 521 * Roll back.
528 * Note can only occur when adding a buffer. 522 * Note can only occur when adding a buffer.
529 */ 523 */
530 list_del(&insert_buffer->buffer_list); 524 list_del_init(&insert_buffer->buffer_list);
531 indio_dev->active_scan_mask = old_mask; 525 indio_dev->active_scan_mask = old_mask;
532 success = -EINVAL; 526 success = -EINVAL;
533 } 527 }
@@ -568,7 +562,7 @@ int iio_update_buffers(struct iio_dev *indio_dev,
568 goto error_run_postdisable; 562 goto error_run_postdisable;
569 } 563 }
570 } 564 }
571 /* Definitely possible for devices to support both of these.*/ 565 /* Definitely possible for devices to support both of these. */
572 if (indio_dev->modes & INDIO_BUFFER_TRIGGERED) { 566 if (indio_dev->modes & INDIO_BUFFER_TRIGGERED) {
573 if (!indio_dev->trig) { 567 if (!indio_dev->trig) {
574 printk(KERN_INFO "Buffer not started: no trigger\n"); 568 printk(KERN_INFO "Buffer not started: no trigger\n");
@@ -579,7 +573,7 @@ int iio_update_buffers(struct iio_dev *indio_dev,
579 indio_dev->currentmode = INDIO_BUFFER_TRIGGERED; 573 indio_dev->currentmode = INDIO_BUFFER_TRIGGERED;
580 } else if (indio_dev->modes & INDIO_BUFFER_HARDWARE) { 574 } else if (indio_dev->modes & INDIO_BUFFER_HARDWARE) {
581 indio_dev->currentmode = INDIO_BUFFER_HARDWARE; 575 indio_dev->currentmode = INDIO_BUFFER_HARDWARE;
582 } else { /* should never be reached */ 576 } else { /* Should never be reached */
583 ret = -EINVAL; 577 ret = -EINVAL;
584 goto error_run_postdisable; 578 goto error_run_postdisable;
585 } 579 }
@@ -611,7 +605,7 @@ error_run_postdisable:
611error_remove_inserted: 605error_remove_inserted:
612 606
613 if (insert_buffer) 607 if (insert_buffer)
614 list_del(&insert_buffer->buffer_list); 608 list_del_init(&insert_buffer->buffer_list);
615 indio_dev->active_scan_mask = old_mask; 609 indio_dev->active_scan_mask = old_mask;
616 kfree(compound_mask); 610 kfree(compound_mask);
617error_ret: 611error_ret:
@@ -628,7 +622,6 @@ ssize_t iio_buffer_store_enable(struct device *dev,
628 int ret; 622 int ret;
629 bool requested_state; 623 bool requested_state;
630 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 624 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
631 struct iio_buffer *pbuf = indio_dev->buffer;
632 bool inlist; 625 bool inlist;
633 626
634 ret = strtobool(buf, &requested_state); 627 ret = strtobool(buf, &requested_state);
@@ -638,7 +631,7 @@ ssize_t iio_buffer_store_enable(struct device *dev,
638 mutex_lock(&indio_dev->mlock); 631 mutex_lock(&indio_dev->mlock);
639 632
640 /* Find out if it is in the list */ 633 /* Find out if it is in the list */
641 inlist = iio_buffer_is_active(indio_dev, pbuf); 634 inlist = iio_buffer_is_active(indio_dev->buffer);
642 /* Already in desired state */ 635 /* Already in desired state */
643 if (inlist == requested_state) 636 if (inlist == requested_state)
644 goto done; 637 goto done;
@@ -703,6 +696,7 @@ static bool iio_validate_scan_mask(struct iio_dev *indio_dev,
703 696
704/** 697/**
705 * iio_scan_mask_set() - set particular bit in the scan mask 698 * iio_scan_mask_set() - set particular bit in the scan mask
699 * @indio_dev: the iio device
706 * @buffer: the buffer whose scan mask we are interested in 700 * @buffer: the buffer whose scan mask we are interested in
707 * @bit: the bit to be set. 701 * @bit: the bit to be set.
708 * 702 *
@@ -723,7 +717,7 @@ int iio_scan_mask_set(struct iio_dev *indio_dev,
723 if (trialmask == NULL) 717 if (trialmask == NULL)
724 return -ENOMEM; 718 return -ENOMEM;
725 if (!indio_dev->masklength) { 719 if (!indio_dev->masklength) {
726 WARN_ON("trying to set scanmask prior to registering buffer\n"); 720 WARN_ON("Trying to set scanmask prior to registering buffer\n");
727 goto err_invalid_mask; 721 goto err_invalid_mask;
728 } 722 }
729 bitmap_copy(trialmask, buffer->scan_mask, indio_dev->masklength); 723 bitmap_copy(trialmask, buffer->scan_mask, indio_dev->masklength);
@@ -778,8 +772,8 @@ struct iio_demux_table {
778 struct list_head l; 772 struct list_head l;
779}; 773};
780 774
781static unsigned char *iio_demux(struct iio_buffer *buffer, 775static const void *iio_demux(struct iio_buffer *buffer,
782 unsigned char *datain) 776 const void *datain)
783{ 777{
784 struct iio_demux_table *t; 778 struct iio_demux_table *t;
785 779
@@ -792,9 +786,9 @@ static unsigned char *iio_demux(struct iio_buffer *buffer,
792 return buffer->demux_bounce; 786 return buffer->demux_bounce;
793} 787}
794 788
795static int iio_push_to_buffer(struct iio_buffer *buffer, unsigned char *data) 789static int iio_push_to_buffer(struct iio_buffer *buffer, const void *data)
796{ 790{
797 unsigned char *dataout = iio_demux(buffer, data); 791 const void *dataout = iio_demux(buffer, data);
798 792
799 return buffer->access->store_to(buffer, dataout); 793 return buffer->access->store_to(buffer, dataout);
800} 794}
@@ -809,7 +803,7 @@ static void iio_buffer_demux_free(struct iio_buffer *buffer)
809} 803}
810 804
811 805
812int iio_push_to_buffers(struct iio_dev *indio_dev, unsigned char *data) 806int iio_push_to_buffers(struct iio_dev *indio_dev, const void *data)
813{ 807{
814 int ret; 808 int ret;
815 struct iio_buffer *buf; 809 struct iio_buffer *buf;
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index 97f0297b120f..24db1855dbab 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -101,6 +101,7 @@ static const char * const iio_chan_info_postfix[] = {
101 [IIO_CHAN_INFO_PHASE] = "phase", 101 [IIO_CHAN_INFO_PHASE] = "phase",
102 [IIO_CHAN_INFO_HARDWAREGAIN] = "hardwaregain", 102 [IIO_CHAN_INFO_HARDWAREGAIN] = "hardwaregain",
103 [IIO_CHAN_INFO_HYSTERESIS] = "hysteresis", 103 [IIO_CHAN_INFO_HYSTERESIS] = "hysteresis",
104 [IIO_CHAN_INFO_INT_TIME] = "integration_time",
104}; 105};
105 106
106const struct iio_chan_spec 107const struct iio_chan_spec
@@ -516,14 +517,15 @@ int __iio_device_attr_init(struct device_attribute *dev_attr,
516 struct device_attribute *attr, 517 struct device_attribute *attr,
517 const char *buf, 518 const char *buf,
518 size_t len), 519 size_t len),
519 bool generic) 520 enum iio_shared_by shared_by)
520{ 521{
521 int ret; 522 int ret = 0;
522 char *name_format, *full_postfix; 523 char *name_format = NULL;
524 char *full_postfix;
523 sysfs_attr_init(&dev_attr->attr); 525 sysfs_attr_init(&dev_attr->attr);
524 526
525 /* Build up postfix of <extend_name>_<modifier>_postfix */ 527 /* Build up postfix of <extend_name>_<modifier>_postfix */
526 if (chan->modified && !generic) { 528 if (chan->modified && (shared_by == IIO_SEPARATE)) {
527 if (chan->extend_name) 529 if (chan->extend_name)
528 full_postfix = kasprintf(GFP_KERNEL, "%s_%s_%s", 530 full_postfix = kasprintf(GFP_KERNEL, "%s_%s_%s",
529 iio_modifier_names[chan 531 iio_modifier_names[chan
@@ -544,53 +546,78 @@ int __iio_device_attr_init(struct device_attribute *dev_attr,
544 chan->extend_name, 546 chan->extend_name,
545 postfix); 547 postfix);
546 } 548 }
547 if (full_postfix == NULL) { 549 if (full_postfix == NULL)
548 ret = -ENOMEM; 550 return -ENOMEM;
549 goto error_ret;
550 }
551 551
552 if (chan->differential) { /* Differential can not have modifier */ 552 if (chan->differential) { /* Differential can not have modifier */
553 if (generic) 553 switch (shared_by) {
554 case IIO_SHARED_BY_ALL:
555 name_format = kasprintf(GFP_KERNEL, "%s", full_postfix);
556 break;
557 case IIO_SHARED_BY_DIR:
558 name_format = kasprintf(GFP_KERNEL, "%s_%s",
559 iio_direction[chan->output],
560 full_postfix);
561 break;
562 case IIO_SHARED_BY_TYPE:
554 name_format 563 name_format
555 = kasprintf(GFP_KERNEL, "%s_%s-%s_%s", 564 = kasprintf(GFP_KERNEL, "%s_%s-%s_%s",
556 iio_direction[chan->output], 565 iio_direction[chan->output],
557 iio_chan_type_name_spec[chan->type], 566 iio_chan_type_name_spec[chan->type],
558 iio_chan_type_name_spec[chan->type], 567 iio_chan_type_name_spec[chan->type],
559 full_postfix); 568 full_postfix);
560 else if (chan->indexed) 569 break;
570 case IIO_SEPARATE:
571 if (!chan->indexed) {
572 WARN_ON("Differential channels must be indexed\n");
573 ret = -EINVAL;
574 goto error_free_full_postfix;
575 }
561 name_format 576 name_format
562 = kasprintf(GFP_KERNEL, "%s_%s%d-%s%d_%s", 577 = kasprintf(GFP_KERNEL,
578 "%s_%s%d-%s%d_%s",
563 iio_direction[chan->output], 579 iio_direction[chan->output],
564 iio_chan_type_name_spec[chan->type], 580 iio_chan_type_name_spec[chan->type],
565 chan->channel, 581 chan->channel,
566 iio_chan_type_name_spec[chan->type], 582 iio_chan_type_name_spec[chan->type],
567 chan->channel2, 583 chan->channel2,
568 full_postfix); 584 full_postfix);
569 else { 585 break;
570 WARN_ON("Differential channels must be indexed\n");
571 ret = -EINVAL;
572 goto error_free_full_postfix;
573 } 586 }
574 } else { /* Single ended */ 587 } else { /* Single ended */
575 if (generic) 588 switch (shared_by) {
576 name_format 589 case IIO_SHARED_BY_ALL:
577 = kasprintf(GFP_KERNEL, "%s_%s_%s", 590 name_format = kasprintf(GFP_KERNEL, "%s", full_postfix);
578 iio_direction[chan->output], 591 break;
579 iio_chan_type_name_spec[chan->type], 592 case IIO_SHARED_BY_DIR:
580 full_postfix); 593 name_format = kasprintf(GFP_KERNEL, "%s_%s",
581 else if (chan->indexed) 594 iio_direction[chan->output],
582 name_format 595 full_postfix);
583 = kasprintf(GFP_KERNEL, "%s_%s%d_%s", 596 break;
584 iio_direction[chan->output], 597 case IIO_SHARED_BY_TYPE:
585 iio_chan_type_name_spec[chan->type],
586 chan->channel,
587 full_postfix);
588 else
589 name_format 598 name_format
590 = kasprintf(GFP_KERNEL, "%s_%s_%s", 599 = kasprintf(GFP_KERNEL, "%s_%s_%s",
591 iio_direction[chan->output], 600 iio_direction[chan->output],
592 iio_chan_type_name_spec[chan->type], 601 iio_chan_type_name_spec[chan->type],
593 full_postfix); 602 full_postfix);
603 break;
604
605 case IIO_SEPARATE:
606 if (chan->indexed)
607 name_format
608 = kasprintf(GFP_KERNEL, "%s_%s%d_%s",
609 iio_direction[chan->output],
610 iio_chan_type_name_spec[chan->type],
611 chan->channel,
612 full_postfix);
613 else
614 name_format
615 = kasprintf(GFP_KERNEL, "%s_%s_%s",
616 iio_direction[chan->output],
617 iio_chan_type_name_spec[chan->type],
618 full_postfix);
619 break;
620 }
594 } 621 }
595 if (name_format == NULL) { 622 if (name_format == NULL) {
596 ret = -ENOMEM; 623 ret = -ENOMEM;
@@ -614,16 +641,11 @@ int __iio_device_attr_init(struct device_attribute *dev_attr,
614 dev_attr->attr.mode |= S_IWUSR; 641 dev_attr->attr.mode |= S_IWUSR;
615 dev_attr->store = writefunc; 642 dev_attr->store = writefunc;
616 } 643 }
617 kfree(name_format);
618 kfree(full_postfix);
619
620 return 0;
621
622error_free_name_format: 644error_free_name_format:
623 kfree(name_format); 645 kfree(name_format);
624error_free_full_postfix: 646error_free_full_postfix:
625 kfree(full_postfix); 647 kfree(full_postfix);
626error_ret: 648
627 return ret; 649 return ret;
628} 650}
629 651
@@ -642,7 +664,7 @@ int __iio_add_chan_devattr(const char *postfix,
642 const char *buf, 664 const char *buf,
643 size_t len), 665 size_t len),
644 u64 mask, 666 u64 mask,
645 bool generic, 667 enum iio_shared_by shared_by,
646 struct device *dev, 668 struct device *dev,
647 struct list_head *attr_list) 669 struct list_head *attr_list)
648{ 670{
@@ -656,7 +678,7 @@ int __iio_add_chan_devattr(const char *postfix,
656 } 678 }
657 ret = __iio_device_attr_init(&iio_attr->dev_attr, 679 ret = __iio_device_attr_init(&iio_attr->dev_attr,
658 postfix, chan, 680 postfix, chan,
659 readfunc, writefunc, generic); 681 readfunc, writefunc, shared_by);
660 if (ret) 682 if (ret)
661 goto error_iio_dev_attr_free; 683 goto error_iio_dev_attr_free;
662 iio_attr->c = chan; 684 iio_attr->c = chan;
@@ -664,7 +686,7 @@ int __iio_add_chan_devattr(const char *postfix,
664 list_for_each_entry(t, attr_list, l) 686 list_for_each_entry(t, attr_list, l)
665 if (strcmp(t->dev_attr.attr.name, 687 if (strcmp(t->dev_attr.attr.name,
666 iio_attr->dev_attr.attr.name) == 0) { 688 iio_attr->dev_attr.attr.name) == 0) {
667 if (!generic) 689 if (shared_by == IIO_SEPARATE)
668 dev_err(dev, "tried to double register : %s\n", 690 dev_err(dev, "tried to double register : %s\n",
669 t->dev_attr.attr.name); 691 t->dev_attr.attr.name);
670 ret = -EBUSY; 692 ret = -EBUSY;
@@ -682,46 +704,68 @@ error_ret:
682 return ret; 704 return ret;
683} 705}
684 706
685static int iio_device_add_channel_sysfs(struct iio_dev *indio_dev, 707static int iio_device_add_info_mask_type(struct iio_dev *indio_dev,
686 struct iio_chan_spec const *chan) 708 struct iio_chan_spec const *chan,
709 enum iio_shared_by shared_by,
710 const long *infomask)
687{ 711{
688 int ret, attrcount = 0; 712 int i, ret, attrcount = 0;
689 int i;
690 const struct iio_chan_spec_ext_info *ext_info;
691 713
692 if (chan->channel < 0) 714 for_each_set_bit(i, infomask, sizeof(infomask)*8) {
693 return 0;
694 for_each_set_bit(i, &chan->info_mask_separate, sizeof(long)*8) {
695 ret = __iio_add_chan_devattr(iio_chan_info_postfix[i], 715 ret = __iio_add_chan_devattr(iio_chan_info_postfix[i],
696 chan, 716 chan,
697 &iio_read_channel_info, 717 &iio_read_channel_info,
698 &iio_write_channel_info, 718 &iio_write_channel_info,
699 i, 719 i,
700 0, 720 shared_by,
701 &indio_dev->dev, 721 &indio_dev->dev,
702 &indio_dev->channel_attr_list); 722 &indio_dev->channel_attr_list);
703 if (ret < 0) 723 if ((ret == -EBUSY) && (shared_by != IIO_SEPARATE))
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) {
717 ret = 0;
718 continue; 724 continue;
719 } else if (ret < 0) { 725 else if (ret < 0)
720 goto error_ret; 726 return ret;
721 }
722 attrcount++; 727 attrcount++;
723 } 728 }
724 729
730 return attrcount;
731}
732
733static int iio_device_add_channel_sysfs(struct iio_dev *indio_dev,
734 struct iio_chan_spec const *chan)
735{
736 int ret, attrcount = 0;
737 const struct iio_chan_spec_ext_info *ext_info;
738
739 if (chan->channel < 0)
740 return 0;
741 ret = iio_device_add_info_mask_type(indio_dev, chan,
742 IIO_SEPARATE,
743 &chan->info_mask_separate);
744 if (ret < 0)
745 return ret;
746 attrcount += ret;
747
748 ret = iio_device_add_info_mask_type(indio_dev, chan,
749 IIO_SHARED_BY_TYPE,
750 &chan->info_mask_shared_by_type);
751 if (ret < 0)
752 return ret;
753 attrcount += ret;
754
755 ret = iio_device_add_info_mask_type(indio_dev, chan,
756 IIO_SHARED_BY_DIR,
757 &chan->info_mask_shared_by_dir);
758 if (ret < 0)
759 return ret;
760 attrcount += ret;
761
762 ret = iio_device_add_info_mask_type(indio_dev, chan,
763 IIO_SHARED_BY_ALL,
764 &chan->info_mask_shared_by_all);
765 if (ret < 0)
766 return ret;
767 attrcount += ret;
768
725 if (chan->ext_info) { 769 if (chan->ext_info) {
726 unsigned int i = 0; 770 unsigned int i = 0;
727 for (ext_info = chan->ext_info; ext_info->name; ext_info++) { 771 for (ext_info = chan->ext_info; ext_info->name; ext_info++) {
@@ -740,15 +784,13 @@ static int iio_device_add_channel_sysfs(struct iio_dev *indio_dev,
740 continue; 784 continue;
741 785
742 if (ret) 786 if (ret)
743 goto error_ret; 787 return ret;
744 788
745 attrcount++; 789 attrcount++;
746 } 790 }
747 } 791 }
748 792
749 ret = attrcount; 793 return attrcount;
750error_ret:
751 return ret;
752} 794}
753 795
754static void iio_device_remove_and_free_read_attr(struct iio_dev *indio_dev, 796static void iio_device_remove_and_free_read_attr(struct iio_dev *indio_dev,
diff --git a/drivers/iio/industrialio-event.c b/drivers/iio/industrialio-event.c
index 10aa9ef86cec..2390e3d08e48 100644
--- a/drivers/iio/industrialio-event.c
+++ b/drivers/iio/industrialio-event.c
@@ -159,7 +159,7 @@ int iio_event_getfd(struct iio_dev *indio_dev)
159 } 159 }
160 spin_unlock_irq(&ev_int->wait.lock); 160 spin_unlock_irq(&ev_int->wait.lock);
161 fd = anon_inode_getfd("iio:event", 161 fd = anon_inode_getfd("iio:event",
162 &iio_event_chrdev_fileops, ev_int, O_RDONLY); 162 &iio_event_chrdev_fileops, ev_int, O_RDONLY | O_CLOEXEC);
163 if (fd < 0) { 163 if (fd < 0) {
164 spin_lock_irq(&ev_int->wait.lock); 164 spin_lock_irq(&ev_int->wait.lock);
165 __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags); 165 __clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags);
diff --git a/drivers/iio/kfifo_buf.c b/drivers/iio/kfifo_buf.c
index a923c78d5cb4..538d4616e48f 100644
--- a/drivers/iio/kfifo_buf.c
+++ b/drivers/iio/kfifo_buf.c
@@ -7,6 +7,7 @@
7#include <linux/mutex.h> 7#include <linux/mutex.h>
8#include <linux/iio/kfifo_buf.h> 8#include <linux/iio/kfifo_buf.h>
9#include <linux/sched.h> 9#include <linux/sched.h>
10#include <linux/poll.h>
10 11
11struct iio_kfifo { 12struct iio_kfifo {
12 struct iio_buffer buffer; 13 struct iio_buffer buffer;
@@ -94,7 +95,7 @@ static int iio_set_length_kfifo(struct iio_buffer *r, int length)
94} 95}
95 96
96static int iio_store_to_kfifo(struct iio_buffer *r, 97static int iio_store_to_kfifo(struct iio_buffer *r,
97 u8 *data) 98 const void *data)
98{ 99{
99 int ret; 100 int ret;
100 struct iio_kfifo *kf = iio_to_kfifo(r); 101 struct iio_kfifo *kf = iio_to_kfifo(r);
@@ -102,7 +103,7 @@ static int iio_store_to_kfifo(struct iio_buffer *r,
102 if (ret != 1) 103 if (ret != 1)
103 return -EBUSY; 104 return -EBUSY;
104 r->stufftoread = true; 105 r->stufftoread = true;
105 wake_up_interruptible(&r->pollq); 106 wake_up_interruptible_poll(&r->pollq, POLLIN | POLLRDNORM);
106 107
107 return 0; 108 return 0;
108} 109}
diff --git a/drivers/iio/light/Kconfig b/drivers/iio/light/Kconfig
index bf9fa0d7aff9..0a25ae6b132e 100644
--- a/drivers/iio/light/Kconfig
+++ b/drivers/iio/light/Kconfig
@@ -27,6 +27,18 @@ config APDS9300
27 To compile this driver as a module, choose M here: the 27 To compile this driver as a module, choose M here: the
28 module will be called apds9300. 28 module will be called apds9300.
29 29
30config GP2AP020A00F
31 tristate "Sharp GP2AP020A00F Proximity/ALS sensor"
32 depends on I2C
33 select IIO_BUFFER
34 select IIO_TRIGGERED_BUFFER
35 help
36 Say Y here if you have a Sharp GP2AP020A00F proximity/ALS combo-chip
37 hooked to an I2C bus.
38
39 To compile this driver as a module, choose M here: the
40 module will be called gp2ap020a00f.
41
30config HID_SENSOR_ALS 42config HID_SENSOR_ALS
31 depends on HID_SENSOR_HUB 43 depends on HID_SENSOR_HUB
32 select IIO_BUFFER 44 select IIO_BUFFER
@@ -55,6 +67,16 @@ config SENSORS_LM3533
55 changes. The ALS-control output values can be set per zone for the 67 changes. The ALS-control output values can be set per zone for the
56 three current output channels. 68 three current output channels.
57 69
70config TCS3472
71 tristate "TAOS TCS3472 color light-to-digital converter"
72 depends on I2C
73 help
74 If you say yes here you get support for the TAOS TCS3472
75 family of color light-to-digital converters with IR filter.
76
77 This driver can also be built as a module. If so, the module
78 will be called tcs3472.
79
58config SENSORS_TSL2563 80config SENSORS_TSL2563
59 tristate "TAOS TSL2560, TSL2561, TSL2562 and TSL2563 ambient light sensors" 81 tristate "TAOS TSL2560, TSL2561, TSL2562 and TSL2563 ambient light sensors"
60 depends on I2C 82 depends on I2C
@@ -65,6 +87,16 @@ config SENSORS_TSL2563
65 This driver can also be built as a module. If so, the module 87 This driver can also be built as a module. If so, the module
66 will be called tsl2563. 88 will be called tsl2563.
67 89
90config TSL4531
91 tristate "TAOS TSL4531 ambient light sensors"
92 depends on I2C
93 help
94 Say Y here if you want to build a driver for the TAOS TSL4531 family
95 of ambient light sensors with direct lux output.
96
97 To compile this driver as a module, choose M here: the
98 module will be called tsl4531.
99
68config VCNL4000 100config VCNL4000
69 tristate "VCNL4000 combined ALS and proximity sensor" 101 tristate "VCNL4000 combined ALS and proximity sensor"
70 depends on I2C 102 depends on I2C
diff --git a/drivers/iio/light/Makefile b/drivers/iio/light/Makefile
index 354ee9ab2379..cef590f2ff00 100644
--- a/drivers/iio/light/Makefile
+++ b/drivers/iio/light/Makefile
@@ -5,7 +5,10 @@
5# When adding new entries keep the list in alphabetical order 5# When adding new entries keep the list in alphabetical order
6obj-$(CONFIG_ADJD_S311) += adjd_s311.o 6obj-$(CONFIG_ADJD_S311) += adjd_s311.o
7obj-$(CONFIG_APDS9300) += apds9300.o 7obj-$(CONFIG_APDS9300) += apds9300.o
8obj-$(CONFIG_GP2AP020A00F) += gp2ap020a00f.o
8obj-$(CONFIG_HID_SENSOR_ALS) += hid-sensor-als.o 9obj-$(CONFIG_HID_SENSOR_ALS) += hid-sensor-als.o
9obj-$(CONFIG_SENSORS_LM3533) += lm3533-als.o 10obj-$(CONFIG_SENSORS_LM3533) += lm3533-als.o
10obj-$(CONFIG_SENSORS_TSL2563) += tsl2563.o 11obj-$(CONFIG_SENSORS_TSL2563) += tsl2563.o
12obj-$(CONFIG_TCS3472) += tcs3472.o
13obj-$(CONFIG_TSL4531) += tsl4531.o
11obj-$(CONFIG_VCNL4000) += vcnl4000.o 14obj-$(CONFIG_VCNL4000) += vcnl4000.o
diff --git a/drivers/iio/light/adjd_s311.c b/drivers/iio/light/adjd_s311.c
index 23cff798598a..83d15c5baf64 100644
--- a/drivers/iio/light/adjd_s311.c
+++ b/drivers/iio/light/adjd_s311.c
@@ -114,43 +114,6 @@ static int adjd_s311_read_data(struct iio_dev *indio_dev, u8 reg, int *val)
114 return 0; 114 return 0;
115} 115}
116 116
117static ssize_t adjd_s311_read_int_time(struct iio_dev *indio_dev,
118 uintptr_t private, const struct iio_chan_spec *chan, char *buf)
119{
120 struct adjd_s311_data *data = iio_priv(indio_dev);
121 s32 ret;
122
123 ret = i2c_smbus_read_word_data(data->client,
124 ADJD_S311_INT_REG(chan->address));
125 if (ret < 0)
126 return ret;
127
128 return sprintf(buf, "%d\n", ret & ADJD_S311_INT_MASK);
129}
130
131static ssize_t adjd_s311_write_int_time(struct iio_dev *indio_dev,
132 uintptr_t private, const struct iio_chan_spec *chan, const char *buf,
133 size_t len)
134{
135 struct adjd_s311_data *data = iio_priv(indio_dev);
136 unsigned long int_time;
137 int ret;
138
139 ret = kstrtoul(buf, 10, &int_time);
140 if (ret)
141 return ret;
142
143 if (int_time > ADJD_S311_INT_MASK)
144 return -EINVAL;
145
146 ret = i2c_smbus_write_word_data(data->client,
147 ADJD_S311_INT_REG(chan->address), int_time);
148 if (ret < 0)
149 return ret;
150
151 return len;
152}
153
154static irqreturn_t adjd_s311_trigger_handler(int irq, void *p) 117static irqreturn_t adjd_s311_trigger_handler(int irq, void *p)
155{ 118{
156 struct iio_poll_func *pf = p; 119 struct iio_poll_func *pf = p;
@@ -175,10 +138,7 @@ static irqreturn_t adjd_s311_trigger_handler(int irq, void *p)
175 len += 2; 138 len += 2;
176 } 139 }
177 140
178 if (indio_dev->scan_timestamp) 141 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, time_ns);
179 *(s64 *)((u8 *)data->buffer + ALIGN(len, sizeof(s64)))
180 = time_ns;
181 iio_push_to_buffers(indio_dev, (u8 *)data->buffer);
182 142
183done: 143done:
184 iio_trigger_notify_done(indio_dev->trig); 144 iio_trigger_notify_done(indio_dev->trig);
@@ -186,25 +146,16 @@ done:
186 return IRQ_HANDLED; 146 return IRQ_HANDLED;
187} 147}
188 148
189static const struct iio_chan_spec_ext_info adjd_s311_ext_info[] = {
190 {
191 .name = "integration_time",
192 .read = adjd_s311_read_int_time,
193 .write = adjd_s311_write_int_time,
194 },
195 { }
196};
197
198#define ADJD_S311_CHANNEL(_color, _scan_idx) { \ 149#define ADJD_S311_CHANNEL(_color, _scan_idx) { \
199 .type = IIO_INTENSITY, \ 150 .type = IIO_INTENSITY, \
200 .modified = 1, \ 151 .modified = 1, \
201 .address = (IDX_##_color), \ 152 .address = (IDX_##_color), \
202 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ 153 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
203 BIT(IIO_CHAN_INFO_HARDWAREGAIN), \ 154 BIT(IIO_CHAN_INFO_HARDWAREGAIN) | \
155 BIT(IIO_CHAN_INFO_INT_TIME), \
204 .channel2 = (IIO_MOD_LIGHT_##_color), \ 156 .channel2 = (IIO_MOD_LIGHT_##_color), \
205 .scan_index = (_scan_idx), \ 157 .scan_index = (_scan_idx), \
206 .scan_type = IIO_ST('u', 10, 16, 0), \ 158 .scan_type = IIO_ST('u', 10, 16, 0), \
207 .ext_info = adjd_s311_ext_info, \
208} 159}
209 160
210static const struct iio_chan_spec adjd_s311_channels[] = { 161static const struct iio_chan_spec adjd_s311_channels[] = {
@@ -236,6 +187,18 @@ static int adjd_s311_read_raw(struct iio_dev *indio_dev,
236 return ret; 187 return ret;
237 *val = ret & ADJD_S311_CAP_MASK; 188 *val = ret & ADJD_S311_CAP_MASK;
238 return IIO_VAL_INT; 189 return IIO_VAL_INT;
190 case IIO_CHAN_INFO_INT_TIME:
191 ret = i2c_smbus_read_word_data(data->client,
192 ADJD_S311_INT_REG(chan->address));
193 if (ret < 0)
194 return ret;
195 *val = 0;
196 /*
197 * not documented, based on measurement:
198 * 4095 LSBs correspond to roughly 4 ms
199 */
200 *val2 = ret & ADJD_S311_INT_MASK;
201 return IIO_VAL_INT_PLUS_MICRO;
239 } 202 }
240 return -EINVAL; 203 return -EINVAL;
241} 204}
@@ -245,16 +208,20 @@ static int adjd_s311_write_raw(struct iio_dev *indio_dev,
245 int val, int val2, long mask) 208 int val, int val2, long mask)
246{ 209{
247 struct adjd_s311_data *data = iio_priv(indio_dev); 210 struct adjd_s311_data *data = iio_priv(indio_dev);
248 int ret;
249 211
250 switch (mask) { 212 switch (mask) {
251 case IIO_CHAN_INFO_HARDWAREGAIN: 213 case IIO_CHAN_INFO_HARDWAREGAIN:
252 if (val < 0 || val > ADJD_S311_CAP_MASK) 214 if (val < 0 || val > ADJD_S311_CAP_MASK)
253 return -EINVAL; 215 return -EINVAL;
254 216
255 ret = i2c_smbus_write_byte_data(data->client, 217 return i2c_smbus_write_byte_data(data->client,
256 ADJD_S311_CAP_REG(chan->address), val); 218 ADJD_S311_CAP_REG(chan->address), val);
257 return ret; 219 case IIO_CHAN_INFO_INT_TIME:
220 if (val != 0 || val2 < 0 || val2 > ADJD_S311_INT_MASK)
221 return -EINVAL;
222
223 return i2c_smbus_write_word_data(data->client,
224 ADJD_S311_INT_REG(chan->address), val2);
258 } 225 }
259 return -EINVAL; 226 return -EINVAL;
260} 227}
diff --git a/drivers/iio/light/gp2ap020a00f.c b/drivers/iio/light/gp2ap020a00f.c
new file mode 100644
index 000000000000..b1e4615b87e8
--- /dev/null
+++ b/drivers/iio/light/gp2ap020a00f.c
@@ -0,0 +1,1617 @@
1/*
2 * Copyright (C) 2013 Samsung Electronics Co., Ltd.
3 * Author: Jacek Anaszewski <j.anaszewski@samsung.com>
4 *
5 * IIO features supported by the driver:
6 *
7 * Read-only raw channels:
8 * - illiminance_clear [lux]
9 * - illiminance_ir
10 * - proximity
11 *
12 * Triggered buffer:
13 * - illiminance_clear
14 * - illiminance_ir
15 * - proximity
16 *
17 * Events:
18 * - illuminance_clear (rising and falling)
19 * - proximity (rising and falling)
20 * - both falling and rising thresholds for the proximity events
21 * must be set to the values greater than 0.
22 *
23 * The driver supports triggered buffers for all the three
24 * channels as well as high and low threshold events for the
25 * illuminance_clear and proxmimity channels. Triggers
26 * can be enabled simultaneously with both illuminance_clear
27 * events. Proximity events cannot be enabled simultaneously
28 * with any triggers or illuminance events. Enabling/disabling
29 * one of the proximity events automatically enables/disables
30 * the other one.
31 *
32 * This program is free software; you can redistribute it and/or modify
33 * it under the terms of the GNU General Public License version 2, as
34 * published by the Free Software Foundation.
35 */
36
37#include <linux/debugfs.h>
38#include <linux/delay.h>
39#include <linux/i2c.h>
40#include <linux/interrupt.h>
41#include <linux/irq.h>
42#include <linux/irq_work.h>
43#include <linux/module.h>
44#include <linux/mutex.h>
45#include <linux/regmap.h>
46#include <linux/regulator/consumer.h>
47#include <linux/slab.h>
48#include <linux/iio/buffer.h>
49#include <linux/iio/events.h>
50#include <linux/iio/iio.h>
51#include <linux/iio/sysfs.h>
52#include <linux/iio/trigger.h>
53#include <linux/iio/trigger_consumer.h>
54#include <linux/iio/triggered_buffer.h>
55
56#define GP2A_I2C_NAME "gp2ap020a00f"
57
58/* Registers */
59#define GP2AP020A00F_OP_REG 0x00 /* Basic operations */
60#define GP2AP020A00F_ALS_REG 0x01 /* ALS related settings */
61#define GP2AP020A00F_PS_REG 0x02 /* PS related settings */
62#define GP2AP020A00F_LED_REG 0x03 /* LED reg */
63#define GP2AP020A00F_TL_L_REG 0x04 /* ALS: Threshold low LSB */
64#define GP2AP020A00F_TL_H_REG 0x05 /* ALS: Threshold low MSB */
65#define GP2AP020A00F_TH_L_REG 0x06 /* ALS: Threshold high LSB */
66#define GP2AP020A00F_TH_H_REG 0x07 /* ALS: Threshold high MSB */
67#define GP2AP020A00F_PL_L_REG 0x08 /* PS: Threshold low LSB */
68#define GP2AP020A00F_PL_H_REG 0x09 /* PS: Threshold low MSB */
69#define GP2AP020A00F_PH_L_REG 0x0a /* PS: Threshold high LSB */
70#define GP2AP020A00F_PH_H_REG 0x0b /* PS: Threshold high MSB */
71#define GP2AP020A00F_D0_L_REG 0x0c /* ALS result: Clear/Illuminance LSB */
72#define GP2AP020A00F_D0_H_REG 0x0d /* ALS result: Clear/Illuminance MSB */
73#define GP2AP020A00F_D1_L_REG 0x0e /* ALS result: IR LSB */
74#define GP2AP020A00F_D1_H_REG 0x0f /* ALS result: IR LSB */
75#define GP2AP020A00F_D2_L_REG 0x10 /* PS result LSB */
76#define GP2AP020A00F_D2_H_REG 0x11 /* PS result MSB */
77#define GP2AP020A00F_NUM_REGS 0x12 /* Number of registers */
78
79/* OP_REG bits */
80#define GP2AP020A00F_OP3_MASK 0x80 /* Software shutdown */
81#define GP2AP020A00F_OP3_SHUTDOWN 0x00
82#define GP2AP020A00F_OP3_OPERATION 0x80
83#define GP2AP020A00F_OP2_MASK 0x40 /* Auto shutdown/Continuous mode */
84#define GP2AP020A00F_OP2_AUTO_SHUTDOWN 0x00
85#define GP2AP020A00F_OP2_CONT_OPERATION 0x40
86#define GP2AP020A00F_OP_MASK 0x30 /* Operating mode selection */
87#define GP2AP020A00F_OP_ALS_AND_PS 0x00
88#define GP2AP020A00F_OP_ALS 0x10
89#define GP2AP020A00F_OP_PS 0x20
90#define GP2AP020A00F_OP_DEBUG 0x30
91#define GP2AP020A00F_PROX_MASK 0x08 /* PS: detection/non-detection */
92#define GP2AP020A00F_PROX_NON_DETECT 0x00
93#define GP2AP020A00F_PROX_DETECT 0x08
94#define GP2AP020A00F_FLAG_P 0x04 /* PS: interrupt result */
95#define GP2AP020A00F_FLAG_A 0x02 /* ALS: interrupt result */
96#define GP2AP020A00F_TYPE_MASK 0x01 /* Output data type selection */
97#define GP2AP020A00F_TYPE_MANUAL_CALC 0x00
98#define GP2AP020A00F_TYPE_AUTO_CALC 0x01
99
100/* ALS_REG bits */
101#define GP2AP020A00F_PRST_MASK 0xc0 /* Number of measurement cycles */
102#define GP2AP020A00F_PRST_ONCE 0x00
103#define GP2AP020A00F_PRST_4_CYCLES 0x40
104#define GP2AP020A00F_PRST_8_CYCLES 0x80
105#define GP2AP020A00F_PRST_16_CYCLES 0xc0
106#define GP2AP020A00F_RES_A_MASK 0x38 /* ALS: Resolution */
107#define GP2AP020A00F_RES_A_800ms 0x00
108#define GP2AP020A00F_RES_A_400ms 0x08
109#define GP2AP020A00F_RES_A_200ms 0x10
110#define GP2AP020A00F_RES_A_100ms 0x18
111#define GP2AP020A00F_RES_A_25ms 0x20
112#define GP2AP020A00F_RES_A_6_25ms 0x28
113#define GP2AP020A00F_RES_A_1_56ms 0x30
114#define GP2AP020A00F_RES_A_0_39ms 0x38
115#define GP2AP020A00F_RANGE_A_MASK 0x07 /* ALS: Max measurable range */
116#define GP2AP020A00F_RANGE_A_x1 0x00
117#define GP2AP020A00F_RANGE_A_x2 0x01
118#define GP2AP020A00F_RANGE_A_x4 0x02
119#define GP2AP020A00F_RANGE_A_x8 0x03
120#define GP2AP020A00F_RANGE_A_x16 0x04
121#define GP2AP020A00F_RANGE_A_x32 0x05
122#define GP2AP020A00F_RANGE_A_x64 0x06
123#define GP2AP020A00F_RANGE_A_x128 0x07
124
125/* PS_REG bits */
126#define GP2AP020A00F_ALC_MASK 0x80 /* Auto light cancel */
127#define GP2AP020A00F_ALC_ON 0x80
128#define GP2AP020A00F_ALC_OFF 0x00
129#define GP2AP020A00F_INTTYPE_MASK 0x40 /* Interrupt type setting */
130#define GP2AP020A00F_INTTYPE_LEVEL 0x00
131#define GP2AP020A00F_INTTYPE_PULSE 0x40
132#define GP2AP020A00F_RES_P_MASK 0x38 /* PS: Resolution */
133#define GP2AP020A00F_RES_P_800ms_x2 0x00
134#define GP2AP020A00F_RES_P_400ms_x2 0x08
135#define GP2AP020A00F_RES_P_200ms_x2 0x10
136#define GP2AP020A00F_RES_P_100ms_x2 0x18
137#define GP2AP020A00F_RES_P_25ms_x2 0x20
138#define GP2AP020A00F_RES_P_6_25ms_x2 0x28
139#define GP2AP020A00F_RES_P_1_56ms_x2 0x30
140#define GP2AP020A00F_RES_P_0_39ms_x2 0x38
141#define GP2AP020A00F_RANGE_P_MASK 0x07 /* PS: Max measurable range */
142#define GP2AP020A00F_RANGE_P_x1 0x00
143#define GP2AP020A00F_RANGE_P_x2 0x01
144#define GP2AP020A00F_RANGE_P_x4 0x02
145#define GP2AP020A00F_RANGE_P_x8 0x03
146#define GP2AP020A00F_RANGE_P_x16 0x04
147#define GP2AP020A00F_RANGE_P_x32 0x05
148#define GP2AP020A00F_RANGE_P_x64 0x06
149#define GP2AP020A00F_RANGE_P_x128 0x07
150
151/* LED reg bits */
152#define GP2AP020A00F_INTVAL_MASK 0xc0 /* Intermittent operating */
153#define GP2AP020A00F_INTVAL_0 0x00
154#define GP2AP020A00F_INTVAL_4 0x40
155#define GP2AP020A00F_INTVAL_8 0x80
156#define GP2AP020A00F_INTVAL_16 0xc0
157#define GP2AP020A00F_IS_MASK 0x30 /* ILED drive peak current */
158#define GP2AP020A00F_IS_13_8mA 0x00
159#define GP2AP020A00F_IS_27_5mA 0x10
160#define GP2AP020A00F_IS_55mA 0x20
161#define GP2AP020A00F_IS_110mA 0x30
162#define GP2AP020A00F_PIN_MASK 0x0c /* INT terminal setting */
163#define GP2AP020A00F_PIN_ALS_OR_PS 0x00
164#define GP2AP020A00F_PIN_ALS 0x04
165#define GP2AP020A00F_PIN_PS 0x08
166#define GP2AP020A00F_PIN_PS_DETECT 0x0c
167#define GP2AP020A00F_FREQ_MASK 0x02 /* LED modulation frequency */
168#define GP2AP020A00F_FREQ_327_5kHz 0x00
169#define GP2AP020A00F_FREQ_81_8kHz 0x02
170#define GP2AP020A00F_RST 0x01 /* Software reset */
171
172#define GP2AP020A00F_SCAN_MODE_LIGHT_CLEAR 0
173#define GP2AP020A00F_SCAN_MODE_LIGHT_IR 1
174#define GP2AP020A00F_SCAN_MODE_PROXIMITY 2
175#define GP2AP020A00F_CHAN_TIMESTAMP 3
176
177#define GP2AP020A00F_DATA_READY_TIMEOUT msecs_to_jiffies(1000)
178#define GP2AP020A00F_DATA_REG(chan) (GP2AP020A00F_D0_L_REG + \
179 (chan) * 2)
180#define GP2AP020A00F_THRESH_REG(th_val_id) (GP2AP020A00F_TL_L_REG + \
181 (th_val_id) * 2)
182#define GP2AP020A00F_THRESH_VAL_ID(reg_addr) ((reg_addr - 4) / 2)
183
184#define GP2AP020A00F_SUBTRACT_MODE 0
185#define GP2AP020A00F_ADD_MODE 1
186
187#define GP2AP020A00F_MAX_CHANNELS 3
188
189enum gp2ap020a00f_opmode {
190 GP2AP020A00F_OPMODE_READ_RAW_CLEAR,
191 GP2AP020A00F_OPMODE_READ_RAW_IR,
192 GP2AP020A00F_OPMODE_READ_RAW_PROXIMITY,
193 GP2AP020A00F_OPMODE_ALS,
194 GP2AP020A00F_OPMODE_PS,
195 GP2AP020A00F_OPMODE_ALS_AND_PS,
196 GP2AP020A00F_OPMODE_PROX_DETECT,
197 GP2AP020A00F_OPMODE_SHUTDOWN,
198 GP2AP020A00F_NUM_OPMODES,
199};
200
201enum gp2ap020a00f_cmd {
202 GP2AP020A00F_CMD_READ_RAW_CLEAR,
203 GP2AP020A00F_CMD_READ_RAW_IR,
204 GP2AP020A00F_CMD_READ_RAW_PROXIMITY,
205 GP2AP020A00F_CMD_TRIGGER_CLEAR_EN,
206 GP2AP020A00F_CMD_TRIGGER_CLEAR_DIS,
207 GP2AP020A00F_CMD_TRIGGER_IR_EN,
208 GP2AP020A00F_CMD_TRIGGER_IR_DIS,
209 GP2AP020A00F_CMD_TRIGGER_PROX_EN,
210 GP2AP020A00F_CMD_TRIGGER_PROX_DIS,
211 GP2AP020A00F_CMD_ALS_HIGH_EV_EN,
212 GP2AP020A00F_CMD_ALS_HIGH_EV_DIS,
213 GP2AP020A00F_CMD_ALS_LOW_EV_EN,
214 GP2AP020A00F_CMD_ALS_LOW_EV_DIS,
215 GP2AP020A00F_CMD_PROX_HIGH_EV_EN,
216 GP2AP020A00F_CMD_PROX_HIGH_EV_DIS,
217 GP2AP020A00F_CMD_PROX_LOW_EV_EN,
218 GP2AP020A00F_CMD_PROX_LOW_EV_DIS,
219};
220
221enum gp2ap020a00f_flags {
222 GP2AP020A00F_FLAG_ALS_CLEAR_TRIGGER,
223 GP2AP020A00F_FLAG_ALS_IR_TRIGGER,
224 GP2AP020A00F_FLAG_PROX_TRIGGER,
225 GP2AP020A00F_FLAG_PROX_RISING_EV,
226 GP2AP020A00F_FLAG_PROX_FALLING_EV,
227 GP2AP020A00F_FLAG_ALS_RISING_EV,
228 GP2AP020A00F_FLAG_ALS_FALLING_EV,
229 GP2AP020A00F_FLAG_LUX_MODE_HI,
230 GP2AP020A00F_FLAG_DATA_READY,
231};
232
233enum gp2ap020a00f_thresh_val_id {
234 GP2AP020A00F_THRESH_TL,
235 GP2AP020A00F_THRESH_TH,
236 GP2AP020A00F_THRESH_PL,
237 GP2AP020A00F_THRESH_PH,
238};
239
240struct gp2ap020a00f_data {
241 const struct gp2ap020a00f_platform_data *pdata;
242 struct i2c_client *client;
243 struct mutex lock;
244 char *buffer;
245 struct regulator *vled_reg;
246 unsigned long flags;
247 enum gp2ap020a00f_opmode cur_opmode;
248 struct iio_trigger *trig;
249 struct regmap *regmap;
250 unsigned int thresh_val[4];
251 u8 debug_reg_addr;
252 struct irq_work work;
253 wait_queue_head_t data_ready_queue;
254};
255
256static const u8 gp2ap020a00f_reg_init_tab[] = {
257 [GP2AP020A00F_OP_REG] = GP2AP020A00F_OP3_SHUTDOWN,
258 [GP2AP020A00F_ALS_REG] = GP2AP020A00F_RES_A_25ms |
259 GP2AP020A00F_RANGE_A_x8,
260 [GP2AP020A00F_PS_REG] = GP2AP020A00F_ALC_ON |
261 GP2AP020A00F_RES_P_1_56ms_x2 |
262 GP2AP020A00F_RANGE_P_x4,
263 [GP2AP020A00F_LED_REG] = GP2AP020A00F_INTVAL_0 |
264 GP2AP020A00F_IS_110mA |
265 GP2AP020A00F_FREQ_327_5kHz,
266 [GP2AP020A00F_TL_L_REG] = 0,
267 [GP2AP020A00F_TL_H_REG] = 0,
268 [GP2AP020A00F_TH_L_REG] = 0,
269 [GP2AP020A00F_TH_H_REG] = 0,
270 [GP2AP020A00F_PL_L_REG] = 0,
271 [GP2AP020A00F_PL_H_REG] = 0,
272 [GP2AP020A00F_PH_L_REG] = 0,
273 [GP2AP020A00F_PH_H_REG] = 0,
274};
275
276static bool gp2ap020a00f_is_volatile_reg(struct device *dev, unsigned int reg)
277{
278 switch (reg) {
279 case GP2AP020A00F_OP_REG:
280 case GP2AP020A00F_D0_L_REG:
281 case GP2AP020A00F_D0_H_REG:
282 case GP2AP020A00F_D1_L_REG:
283 case GP2AP020A00F_D1_H_REG:
284 case GP2AP020A00F_D2_L_REG:
285 case GP2AP020A00F_D2_H_REG:
286 return true;
287 default:
288 return false;
289 }
290}
291
292static const struct regmap_config gp2ap020a00f_regmap_config = {
293 .reg_bits = 8,
294 .val_bits = 8,
295
296 .max_register = GP2AP020A00F_D2_H_REG,
297 .cache_type = REGCACHE_RBTREE,
298
299 .volatile_reg = gp2ap020a00f_is_volatile_reg,
300};
301
302static const struct gp2ap020a00f_mutable_config_regs {
303 u8 op_reg;
304 u8 als_reg;
305 u8 ps_reg;
306 u8 led_reg;
307} opmode_regs_settings[GP2AP020A00F_NUM_OPMODES] = {
308 [GP2AP020A00F_OPMODE_READ_RAW_CLEAR] = {
309 GP2AP020A00F_OP_ALS | GP2AP020A00F_OP2_CONT_OPERATION
310 | GP2AP020A00F_OP3_OPERATION
311 | GP2AP020A00F_TYPE_AUTO_CALC,
312 GP2AP020A00F_PRST_ONCE,
313 GP2AP020A00F_INTTYPE_LEVEL,
314 GP2AP020A00F_PIN_ALS
315 },
316 [GP2AP020A00F_OPMODE_READ_RAW_IR] = {
317 GP2AP020A00F_OP_ALS | GP2AP020A00F_OP2_CONT_OPERATION
318 | GP2AP020A00F_OP3_OPERATION
319 | GP2AP020A00F_TYPE_MANUAL_CALC,
320 GP2AP020A00F_PRST_ONCE,
321 GP2AP020A00F_INTTYPE_LEVEL,
322 GP2AP020A00F_PIN_ALS
323 },
324 [GP2AP020A00F_OPMODE_READ_RAW_PROXIMITY] = {
325 GP2AP020A00F_OP_PS | GP2AP020A00F_OP2_CONT_OPERATION
326 | GP2AP020A00F_OP3_OPERATION
327 | GP2AP020A00F_TYPE_MANUAL_CALC,
328 GP2AP020A00F_PRST_ONCE,
329 GP2AP020A00F_INTTYPE_LEVEL,
330 GP2AP020A00F_PIN_PS
331 },
332 [GP2AP020A00F_OPMODE_PROX_DETECT] = {
333 GP2AP020A00F_OP_PS | GP2AP020A00F_OP2_CONT_OPERATION
334 | GP2AP020A00F_OP3_OPERATION
335 | GP2AP020A00F_TYPE_MANUAL_CALC,
336 GP2AP020A00F_PRST_4_CYCLES,
337 GP2AP020A00F_INTTYPE_PULSE,
338 GP2AP020A00F_PIN_PS_DETECT
339 },
340 [GP2AP020A00F_OPMODE_ALS] = {
341 GP2AP020A00F_OP_ALS | GP2AP020A00F_OP2_CONT_OPERATION
342 | GP2AP020A00F_OP3_OPERATION
343 | GP2AP020A00F_TYPE_AUTO_CALC,
344 GP2AP020A00F_PRST_ONCE,
345 GP2AP020A00F_INTTYPE_LEVEL,
346 GP2AP020A00F_PIN_ALS
347 },
348 [GP2AP020A00F_OPMODE_PS] = {
349 GP2AP020A00F_OP_PS | GP2AP020A00F_OP2_CONT_OPERATION
350 | GP2AP020A00F_OP3_OPERATION
351 | GP2AP020A00F_TYPE_MANUAL_CALC,
352 GP2AP020A00F_PRST_4_CYCLES,
353 GP2AP020A00F_INTTYPE_LEVEL,
354 GP2AP020A00F_PIN_PS
355 },
356 [GP2AP020A00F_OPMODE_ALS_AND_PS] = {
357 GP2AP020A00F_OP_ALS_AND_PS
358 | GP2AP020A00F_OP2_CONT_OPERATION
359 | GP2AP020A00F_OP3_OPERATION
360 | GP2AP020A00F_TYPE_AUTO_CALC,
361 GP2AP020A00F_PRST_4_CYCLES,
362 GP2AP020A00F_INTTYPE_LEVEL,
363 GP2AP020A00F_PIN_ALS_OR_PS
364 },
365 [GP2AP020A00F_OPMODE_SHUTDOWN] = { GP2AP020A00F_OP3_SHUTDOWN, },
366};
367
368static int gp2ap020a00f_set_operation_mode(struct gp2ap020a00f_data *data,
369 enum gp2ap020a00f_opmode op)
370{
371 unsigned int op_reg_val;
372 int err;
373
374 if (op != GP2AP020A00F_OPMODE_SHUTDOWN) {
375 err = regmap_read(data->regmap, GP2AP020A00F_OP_REG,
376 &op_reg_val);
377 if (err < 0)
378 return err;
379 /*
380 * Shutdown the device if the operation being executed entails
381 * mode transition.
382 */
383 if ((opmode_regs_settings[op].op_reg & GP2AP020A00F_OP_MASK) !=
384 (op_reg_val & GP2AP020A00F_OP_MASK)) {
385 /* set shutdown mode */
386 err = regmap_update_bits(data->regmap,
387 GP2AP020A00F_OP_REG, GP2AP020A00F_OP3_MASK,
388 GP2AP020A00F_OP3_SHUTDOWN);
389 if (err < 0)
390 return err;
391 }
392
393 err = regmap_update_bits(data->regmap, GP2AP020A00F_ALS_REG,
394 GP2AP020A00F_PRST_MASK, opmode_regs_settings[op]
395 .als_reg);
396 if (err < 0)
397 return err;
398
399 err = regmap_update_bits(data->regmap, GP2AP020A00F_PS_REG,
400 GP2AP020A00F_INTTYPE_MASK, opmode_regs_settings[op]
401 .ps_reg);
402 if (err < 0)
403 return err;
404
405 err = regmap_update_bits(data->regmap, GP2AP020A00F_LED_REG,
406 GP2AP020A00F_PIN_MASK, opmode_regs_settings[op]
407 .led_reg);
408 if (err < 0)
409 return err;
410 }
411
412 /* Set OP_REG and apply operation mode (power on / off) */
413 err = regmap_update_bits(data->regmap,
414 GP2AP020A00F_OP_REG,
415 GP2AP020A00F_OP_MASK | GP2AP020A00F_OP2_MASK |
416 GP2AP020A00F_OP3_MASK | GP2AP020A00F_TYPE_MASK,
417 opmode_regs_settings[op].op_reg);
418 if (err < 0)
419 return err;
420
421 data->cur_opmode = op;
422
423 return 0;
424}
425
426static bool gp2ap020a00f_als_enabled(struct gp2ap020a00f_data *data)
427{
428 return test_bit(GP2AP020A00F_FLAG_ALS_CLEAR_TRIGGER, &data->flags) ||
429 test_bit(GP2AP020A00F_FLAG_ALS_IR_TRIGGER, &data->flags) ||
430 test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags) ||
431 test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags);
432}
433
434static bool gp2ap020a00f_prox_detect_enabled(struct gp2ap020a00f_data *data)
435{
436 return test_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags) ||
437 test_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags);
438}
439
440static int gp2ap020a00f_write_event_threshold(struct gp2ap020a00f_data *data,
441 enum gp2ap020a00f_thresh_val_id th_val_id,
442 bool enable)
443{
444 __le16 thresh_buf = 0;
445 unsigned int thresh_reg_val;
446
447 if (!enable)
448 thresh_reg_val = 0;
449 else if (test_bit(GP2AP020A00F_FLAG_LUX_MODE_HI, &data->flags) &&
450 th_val_id != GP2AP020A00F_THRESH_PL &&
451 th_val_id != GP2AP020A00F_THRESH_PH)
452 /*
453 * For the high lux mode ALS threshold has to be scaled down
454 * to allow for proper comparison with the output value.
455 */
456 thresh_reg_val = data->thresh_val[th_val_id] / 16;
457 else
458 thresh_reg_val = data->thresh_val[th_val_id] > 16000 ?
459 16000 :
460 data->thresh_val[th_val_id];
461
462 thresh_buf = cpu_to_le16(thresh_reg_val);
463
464 return regmap_bulk_write(data->regmap,
465 GP2AP020A00F_THRESH_REG(th_val_id),
466 (u8 *)&thresh_buf, 2);
467}
468
469static int gp2ap020a00f_alter_opmode(struct gp2ap020a00f_data *data,
470 enum gp2ap020a00f_opmode diff_mode, int add_sub)
471{
472 enum gp2ap020a00f_opmode new_mode;
473
474 if (diff_mode != GP2AP020A00F_OPMODE_ALS &&
475 diff_mode != GP2AP020A00F_OPMODE_PS)
476 return -EINVAL;
477
478 if (add_sub == GP2AP020A00F_ADD_MODE) {
479 if (data->cur_opmode == GP2AP020A00F_OPMODE_SHUTDOWN)
480 new_mode = diff_mode;
481 else
482 new_mode = GP2AP020A00F_OPMODE_ALS_AND_PS;
483 } else {
484 if (data->cur_opmode == GP2AP020A00F_OPMODE_ALS_AND_PS)
485 new_mode = (diff_mode == GP2AP020A00F_OPMODE_ALS) ?
486 GP2AP020A00F_OPMODE_PS :
487 GP2AP020A00F_OPMODE_ALS;
488 else
489 new_mode = GP2AP020A00F_OPMODE_SHUTDOWN;
490 }
491
492 return gp2ap020a00f_set_operation_mode(data, new_mode);
493}
494
495static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_data *data,
496 enum gp2ap020a00f_cmd cmd)
497{
498 int err = 0;
499
500 switch (cmd) {
501 case GP2AP020A00F_CMD_READ_RAW_CLEAR:
502 if (data->cur_opmode != GP2AP020A00F_OPMODE_SHUTDOWN)
503 return -EBUSY;
504 err = gp2ap020a00f_set_operation_mode(data,
505 GP2AP020A00F_OPMODE_READ_RAW_CLEAR);
506 break;
507 case GP2AP020A00F_CMD_READ_RAW_IR:
508 if (data->cur_opmode != GP2AP020A00F_OPMODE_SHUTDOWN)
509 return -EBUSY;
510 err = gp2ap020a00f_set_operation_mode(data,
511 GP2AP020A00F_OPMODE_READ_RAW_IR);
512 break;
513 case GP2AP020A00F_CMD_READ_RAW_PROXIMITY:
514 if (data->cur_opmode != GP2AP020A00F_OPMODE_SHUTDOWN)
515 return -EBUSY;
516 err = gp2ap020a00f_set_operation_mode(data,
517 GP2AP020A00F_OPMODE_READ_RAW_PROXIMITY);
518 break;
519 case GP2AP020A00F_CMD_TRIGGER_CLEAR_EN:
520 if (data->cur_opmode == GP2AP020A00F_OPMODE_PROX_DETECT)
521 return -EBUSY;
522 if (!gp2ap020a00f_als_enabled(data))
523 err = gp2ap020a00f_alter_opmode(data,
524 GP2AP020A00F_OPMODE_ALS,
525 GP2AP020A00F_ADD_MODE);
526 set_bit(GP2AP020A00F_FLAG_ALS_CLEAR_TRIGGER, &data->flags);
527 break;
528 case GP2AP020A00F_CMD_TRIGGER_CLEAR_DIS:
529 clear_bit(GP2AP020A00F_FLAG_ALS_CLEAR_TRIGGER, &data->flags);
530 if (gp2ap020a00f_als_enabled(data))
531 break;
532 err = gp2ap020a00f_alter_opmode(data,
533 GP2AP020A00F_OPMODE_ALS,
534 GP2AP020A00F_SUBTRACT_MODE);
535 break;
536 case GP2AP020A00F_CMD_TRIGGER_IR_EN:
537 if (data->cur_opmode == GP2AP020A00F_OPMODE_PROX_DETECT)
538 return -EBUSY;
539 if (!gp2ap020a00f_als_enabled(data))
540 err = gp2ap020a00f_alter_opmode(data,
541 GP2AP020A00F_OPMODE_ALS,
542 GP2AP020A00F_ADD_MODE);
543 set_bit(GP2AP020A00F_FLAG_ALS_IR_TRIGGER, &data->flags);
544 break;
545 case GP2AP020A00F_CMD_TRIGGER_IR_DIS:
546 clear_bit(GP2AP020A00F_FLAG_ALS_IR_TRIGGER, &data->flags);
547 if (gp2ap020a00f_als_enabled(data))
548 break;
549 err = gp2ap020a00f_alter_opmode(data,
550 GP2AP020A00F_OPMODE_ALS,
551 GP2AP020A00F_SUBTRACT_MODE);
552 break;
553 case GP2AP020A00F_CMD_TRIGGER_PROX_EN:
554 if (data->cur_opmode == GP2AP020A00F_OPMODE_PROX_DETECT)
555 return -EBUSY;
556 err = gp2ap020a00f_alter_opmode(data,
557 GP2AP020A00F_OPMODE_PS,
558 GP2AP020A00F_ADD_MODE);
559 set_bit(GP2AP020A00F_FLAG_PROX_TRIGGER, &data->flags);
560 break;
561 case GP2AP020A00F_CMD_TRIGGER_PROX_DIS:
562 clear_bit(GP2AP020A00F_FLAG_PROX_TRIGGER, &data->flags);
563 err = gp2ap020a00f_alter_opmode(data,
564 GP2AP020A00F_OPMODE_PS,
565 GP2AP020A00F_SUBTRACT_MODE);
566 break;
567 case GP2AP020A00F_CMD_ALS_HIGH_EV_EN:
568 if (test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags))
569 return 0;
570 if (data->cur_opmode == GP2AP020A00F_OPMODE_PROX_DETECT)
571 return -EBUSY;
572 if (!gp2ap020a00f_als_enabled(data)) {
573 err = gp2ap020a00f_alter_opmode(data,
574 GP2AP020A00F_OPMODE_ALS,
575 GP2AP020A00F_ADD_MODE);
576 if (err < 0)
577 return err;
578 }
579 set_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags);
580 err = gp2ap020a00f_write_event_threshold(data,
581 GP2AP020A00F_THRESH_TH, true);
582 break;
583 case GP2AP020A00F_CMD_ALS_HIGH_EV_DIS:
584 if (!test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags))
585 return 0;
586 clear_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags);
587 if (!gp2ap020a00f_als_enabled(data)) {
588 err = gp2ap020a00f_alter_opmode(data,
589 GP2AP020A00F_OPMODE_ALS,
590 GP2AP020A00F_SUBTRACT_MODE);
591 if (err < 0)
592 return err;
593 }
594 err = gp2ap020a00f_write_event_threshold(data,
595 GP2AP020A00F_THRESH_TH, false);
596 break;
597 case GP2AP020A00F_CMD_ALS_LOW_EV_EN:
598 if (test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags))
599 return 0;
600 if (data->cur_opmode == GP2AP020A00F_OPMODE_PROX_DETECT)
601 return -EBUSY;
602 if (!gp2ap020a00f_als_enabled(data)) {
603 err = gp2ap020a00f_alter_opmode(data,
604 GP2AP020A00F_OPMODE_ALS,
605 GP2AP020A00F_ADD_MODE);
606 if (err < 0)
607 return err;
608 }
609 set_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags);
610 err = gp2ap020a00f_write_event_threshold(data,
611 GP2AP020A00F_THRESH_TL, true);
612 break;
613 case GP2AP020A00F_CMD_ALS_LOW_EV_DIS:
614 if (!test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags))
615 return 0;
616 clear_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags);
617 if (!gp2ap020a00f_als_enabled(data)) {
618 err = gp2ap020a00f_alter_opmode(data,
619 GP2AP020A00F_OPMODE_ALS,
620 GP2AP020A00F_SUBTRACT_MODE);
621 if (err < 0)
622 return err;
623 }
624 err = gp2ap020a00f_write_event_threshold(data,
625 GP2AP020A00F_THRESH_TL, false);
626 break;
627 case GP2AP020A00F_CMD_PROX_HIGH_EV_EN:
628 if (test_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags))
629 return 0;
630 if (gp2ap020a00f_als_enabled(data) ||
631 data->cur_opmode == GP2AP020A00F_OPMODE_PS)
632 return -EBUSY;
633 if (!gp2ap020a00f_prox_detect_enabled(data)) {
634 err = gp2ap020a00f_set_operation_mode(data,
635 GP2AP020A00F_OPMODE_PROX_DETECT);
636 if (err < 0)
637 return err;
638 }
639 set_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags);
640 err = gp2ap020a00f_write_event_threshold(data,
641 GP2AP020A00F_THRESH_PH, true);
642 break;
643 case GP2AP020A00F_CMD_PROX_HIGH_EV_DIS:
644 if (!test_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags))
645 return 0;
646 clear_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags);
647 err = gp2ap020a00f_set_operation_mode(data,
648 GP2AP020A00F_OPMODE_SHUTDOWN);
649 if (err < 0)
650 return err;
651 err = gp2ap020a00f_write_event_threshold(data,
652 GP2AP020A00F_THRESH_PH, false);
653 break;
654 case GP2AP020A00F_CMD_PROX_LOW_EV_EN:
655 if (test_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags))
656 return 0;
657 if (gp2ap020a00f_als_enabled(data) ||
658 data->cur_opmode == GP2AP020A00F_OPMODE_PS)
659 return -EBUSY;
660 if (!gp2ap020a00f_prox_detect_enabled(data)) {
661 err = gp2ap020a00f_set_operation_mode(data,
662 GP2AP020A00F_OPMODE_PROX_DETECT);
663 if (err < 0)
664 return err;
665 }
666 set_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags);
667 err = gp2ap020a00f_write_event_threshold(data,
668 GP2AP020A00F_THRESH_PL, true);
669 break;
670 case GP2AP020A00F_CMD_PROX_LOW_EV_DIS:
671 if (!test_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags))
672 return 0;
673 clear_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags);
674 err = gp2ap020a00f_set_operation_mode(data,
675 GP2AP020A00F_OPMODE_SHUTDOWN);
676 if (err < 0)
677 return err;
678 err = gp2ap020a00f_write_event_threshold(data,
679 GP2AP020A00F_THRESH_PL, false);
680 break;
681 }
682
683 return err;
684}
685
686static int wait_conversion_complete_irq(struct gp2ap020a00f_data *data)
687{
688 int ret;
689
690 ret = wait_event_timeout(data->data_ready_queue,
691 test_bit(GP2AP020A00F_FLAG_DATA_READY,
692 &data->flags),
693 GP2AP020A00F_DATA_READY_TIMEOUT);
694 clear_bit(GP2AP020A00F_FLAG_DATA_READY, &data->flags);
695
696 return ret > 0 ? 0 : -ETIME;
697}
698
699static int gp2ap020a00f_read_output(struct gp2ap020a00f_data *data,
700 unsigned int output_reg, int *val)
701{
702 u8 reg_buf[2];
703 int err;
704
705 err = wait_conversion_complete_irq(data);
706 if (err < 0)
707 dev_dbg(&data->client->dev, "data ready timeout\n");
708
709 err = regmap_bulk_read(data->regmap, output_reg, reg_buf, 2);
710 if (err < 0)
711 return err;
712
713 *val = le16_to_cpup((__le16 *)reg_buf);
714
715 return err;
716}
717
718static bool gp2ap020a00f_adjust_lux_mode(struct gp2ap020a00f_data *data,
719 int output_val)
720{
721 u8 new_range = 0xff;
722 int err;
723
724 if (!test_bit(GP2AP020A00F_FLAG_LUX_MODE_HI, &data->flags)) {
725 if (output_val > 16000) {
726 set_bit(GP2AP020A00F_FLAG_LUX_MODE_HI, &data->flags);
727 new_range = GP2AP020A00F_RANGE_A_x128;
728 }
729 } else {
730 if (output_val < 1000) {
731 clear_bit(GP2AP020A00F_FLAG_LUX_MODE_HI, &data->flags);
732 new_range = GP2AP020A00F_RANGE_A_x8;
733 }
734 }
735
736 if (new_range != 0xff) {
737 /* Clear als threshold registers to avoid spurious
738 * events caused by lux mode transition.
739 */
740 err = gp2ap020a00f_write_event_threshold(data,
741 GP2AP020A00F_THRESH_TH, false);
742 if (err < 0) {
743 dev_err(&data->client->dev,
744 "Clearing als threshold register failed.\n");
745 return false;
746 }
747
748 err = gp2ap020a00f_write_event_threshold(data,
749 GP2AP020A00F_THRESH_TL, false);
750 if (err < 0) {
751 dev_err(&data->client->dev,
752 "Clearing als threshold register failed.\n");
753 return false;
754 }
755
756 /* Change lux mode */
757 err = regmap_update_bits(data->regmap,
758 GP2AP020A00F_OP_REG,
759 GP2AP020A00F_OP3_MASK,
760 GP2AP020A00F_OP3_SHUTDOWN);
761
762 if (err < 0) {
763 dev_err(&data->client->dev,
764 "Shutting down the device failed.\n");
765 return false;
766 }
767
768 err = regmap_update_bits(data->regmap,
769 GP2AP020A00F_ALS_REG,
770 GP2AP020A00F_RANGE_A_MASK,
771 new_range);
772
773 if (err < 0) {
774 dev_err(&data->client->dev,
775 "Adjusting device lux mode failed.\n");
776 return false;
777 }
778
779 err = regmap_update_bits(data->regmap,
780 GP2AP020A00F_OP_REG,
781 GP2AP020A00F_OP3_MASK,
782 GP2AP020A00F_OP3_OPERATION);
783
784 if (err < 0) {
785 dev_err(&data->client->dev,
786 "Powering up the device failed.\n");
787 return false;
788 }
789
790 /* Adjust als threshold register values to the new lux mode */
791 if (test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags)) {
792 err = gp2ap020a00f_write_event_threshold(data,
793 GP2AP020A00F_THRESH_TH, true);
794 if (err < 0) {
795 dev_err(&data->client->dev,
796 "Adjusting als threshold value failed.\n");
797 return false;
798 }
799 }
800
801 if (test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags)) {
802 err = gp2ap020a00f_write_event_threshold(data,
803 GP2AP020A00F_THRESH_TL, true);
804 if (err < 0) {
805 dev_err(&data->client->dev,
806 "Adjusting als threshold value failed.\n");
807 return false;
808 }
809 }
810
811 return true;
812 }
813
814 return false;
815}
816
817static void gp2ap020a00f_output_to_lux(struct gp2ap020a00f_data *data,
818 int *output_val)
819{
820 if (test_bit(GP2AP020A00F_FLAG_LUX_MODE_HI, &data->flags))
821 *output_val *= 16;
822}
823
824static void gp2ap020a00f_iio_trigger_work(struct irq_work *work)
825{
826 struct gp2ap020a00f_data *data =
827 container_of(work, struct gp2ap020a00f_data, work);
828
829 iio_trigger_poll(data->trig, 0);
830}
831
832static irqreturn_t gp2ap020a00f_prox_sensing_handler(int irq, void *data)
833{
834 struct iio_dev *indio_dev = data;
835 struct gp2ap020a00f_data *priv = iio_priv(indio_dev);
836 unsigned int op_reg_val;
837 int ret;
838
839 /* Read interrupt flags */
840 ret = regmap_read(priv->regmap, GP2AP020A00F_OP_REG, &op_reg_val);
841 if (ret < 0)
842 return IRQ_HANDLED;
843
844 if (gp2ap020a00f_prox_detect_enabled(priv)) {
845 if (op_reg_val & GP2AP020A00F_PROX_DETECT) {
846 iio_push_event(indio_dev,
847 IIO_UNMOD_EVENT_CODE(
848 IIO_PROXIMITY,
849 GP2AP020A00F_SCAN_MODE_PROXIMITY,
850 IIO_EV_TYPE_ROC,
851 IIO_EV_DIR_RISING),
852 iio_get_time_ns());
853 } else {
854 iio_push_event(indio_dev,
855 IIO_UNMOD_EVENT_CODE(
856 IIO_PROXIMITY,
857 GP2AP020A00F_SCAN_MODE_PROXIMITY,
858 IIO_EV_TYPE_ROC,
859 IIO_EV_DIR_FALLING),
860 iio_get_time_ns());
861 }
862 }
863
864 return IRQ_HANDLED;
865}
866
867static irqreturn_t gp2ap020a00f_thresh_event_handler(int irq, void *data)
868{
869 struct iio_dev *indio_dev = data;
870 struct gp2ap020a00f_data *priv = iio_priv(indio_dev);
871 u8 op_reg_flags, d0_reg_buf[2];
872 unsigned int output_val, op_reg_val;
873 int thresh_val_id, ret;
874
875 /* Read interrupt flags */
876 ret = regmap_read(priv->regmap, GP2AP020A00F_OP_REG,
877 &op_reg_val);
878 if (ret < 0)
879 goto done;
880
881 op_reg_flags = op_reg_val & (GP2AP020A00F_FLAG_A | GP2AP020A00F_FLAG_P
882 | GP2AP020A00F_PROX_DETECT);
883
884 op_reg_val &= (~GP2AP020A00F_FLAG_A & ~GP2AP020A00F_FLAG_P
885 & ~GP2AP020A00F_PROX_DETECT);
886
887 /* Clear interrupt flags (if not in INTTYPE_PULSE mode) */
888 if (priv->cur_opmode != GP2AP020A00F_OPMODE_PROX_DETECT) {
889 ret = regmap_write(priv->regmap, GP2AP020A00F_OP_REG,
890 op_reg_val);
891 if (ret < 0)
892 goto done;
893 }
894
895 if (op_reg_flags & GP2AP020A00F_FLAG_A) {
896 /* Check D0 register to assess if the lux mode
897 * transition is required.
898 */
899 ret = regmap_bulk_read(priv->regmap, GP2AP020A00F_D0_L_REG,
900 d0_reg_buf, 2);
901 if (ret < 0)
902 goto done;
903
904 output_val = le16_to_cpup((__le16 *)d0_reg_buf);
905
906 if (gp2ap020a00f_adjust_lux_mode(priv, output_val))
907 goto done;
908
909 gp2ap020a00f_output_to_lux(priv, &output_val);
910
911 /*
912 * We need to check output value to distinguish
913 * between high and low ambient light threshold event.
914 */
915 if (test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &priv->flags)) {
916 thresh_val_id =
917 GP2AP020A00F_THRESH_VAL_ID(GP2AP020A00F_TH_L_REG);
918 if (output_val > priv->thresh_val[thresh_val_id])
919 iio_push_event(indio_dev,
920 IIO_MOD_EVENT_CODE(
921 IIO_LIGHT,
922 GP2AP020A00F_SCAN_MODE_LIGHT_CLEAR,
923 IIO_MOD_LIGHT_CLEAR,
924 IIO_EV_TYPE_THRESH,
925 IIO_EV_DIR_RISING),
926 iio_get_time_ns());
927 }
928
929 if (test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &priv->flags)) {
930 thresh_val_id =
931 GP2AP020A00F_THRESH_VAL_ID(GP2AP020A00F_TL_L_REG);
932 if (output_val < priv->thresh_val[thresh_val_id])
933 iio_push_event(indio_dev,
934 IIO_MOD_EVENT_CODE(
935 IIO_LIGHT,
936 GP2AP020A00F_SCAN_MODE_LIGHT_CLEAR,
937 IIO_MOD_LIGHT_CLEAR,
938 IIO_EV_TYPE_THRESH,
939 IIO_EV_DIR_FALLING),
940 iio_get_time_ns());
941 }
942 }
943
944 if (priv->cur_opmode == GP2AP020A00F_OPMODE_READ_RAW_CLEAR ||
945 priv->cur_opmode == GP2AP020A00F_OPMODE_READ_RAW_IR ||
946 priv->cur_opmode == GP2AP020A00F_OPMODE_READ_RAW_PROXIMITY) {
947 set_bit(GP2AP020A00F_FLAG_DATA_READY, &priv->flags);
948 wake_up(&priv->data_ready_queue);
949 goto done;
950 }
951
952 if (test_bit(GP2AP020A00F_FLAG_ALS_CLEAR_TRIGGER, &priv->flags) ||
953 test_bit(GP2AP020A00F_FLAG_ALS_IR_TRIGGER, &priv->flags) ||
954 test_bit(GP2AP020A00F_FLAG_PROX_TRIGGER, &priv->flags))
955 /* This fires off the trigger. */
956 irq_work_queue(&priv->work);
957
958done:
959 return IRQ_HANDLED;
960}
961
962static irqreturn_t gp2ap020a00f_trigger_handler(int irq, void *data)
963{
964 struct iio_poll_func *pf = data;
965 struct iio_dev *indio_dev = pf->indio_dev;
966 struct gp2ap020a00f_data *priv = iio_priv(indio_dev);
967 size_t d_size = 0;
968 __le32 light_lux;
969 int i, out_val, ret;
970
971 for_each_set_bit(i, indio_dev->active_scan_mask,
972 indio_dev->masklength) {
973 ret = regmap_bulk_read(priv->regmap,
974 GP2AP020A00F_DATA_REG(i),
975 &priv->buffer[d_size], 2);
976 if (ret < 0)
977 goto done;
978
979 if (i == GP2AP020A00F_SCAN_MODE_LIGHT_CLEAR ||
980 i == GP2AP020A00F_SCAN_MODE_LIGHT_IR) {
981 out_val = le16_to_cpup((__le16 *)&priv->buffer[d_size]);
982 gp2ap020a00f_output_to_lux(priv, &out_val);
983 light_lux = cpu_to_le32(out_val);
984 memcpy(&priv->buffer[d_size], (u8 *)&light_lux, 4);
985 d_size += 4;
986 } else {
987 d_size += 2;
988 }
989 }
990
991 iio_push_to_buffers_with_timestamp(indio_dev, priv->buffer,
992 pf->timestamp);
993done:
994 iio_trigger_notify_done(indio_dev->trig);
995
996 return IRQ_HANDLED;
997}
998
999static u8 gp2ap020a00f_get_reg_by_event_code(u64 event_code)
1000{
1001 int event_dir = IIO_EVENT_CODE_EXTRACT_DIR(event_code);
1002
1003 switch (IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(event_code)) {
1004 case IIO_PROXIMITY:
1005 if (event_dir == IIO_EV_DIR_RISING)
1006 return GP2AP020A00F_PH_L_REG;
1007 else
1008 return GP2AP020A00F_PL_L_REG;
1009 case IIO_LIGHT:
1010 if (event_dir == IIO_EV_DIR_RISING)
1011 return GP2AP020A00F_TH_L_REG;
1012 else
1013 return GP2AP020A00F_TL_L_REG;
1014 }
1015
1016 return -EINVAL;
1017}
1018
1019static int gp2ap020a00f_write_event_val(struct iio_dev *indio_dev,
1020 u64 event_code, int val)
1021{
1022 struct gp2ap020a00f_data *data = iio_priv(indio_dev);
1023 bool event_en = false;
1024 u8 thresh_val_id;
1025 u8 thresh_reg_l;
1026 int err = 0;
1027
1028 mutex_lock(&data->lock);
1029
1030 thresh_reg_l = gp2ap020a00f_get_reg_by_event_code(event_code);
1031 thresh_val_id = GP2AP020A00F_THRESH_VAL_ID(thresh_reg_l);
1032
1033 if (thresh_val_id > GP2AP020A00F_THRESH_PH) {
1034 err = -EINVAL;
1035 goto error_unlock;
1036 }
1037
1038 switch (thresh_reg_l) {
1039 case GP2AP020A00F_TH_L_REG:
1040 event_en = test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV,
1041 &data->flags);
1042 break;
1043 case GP2AP020A00F_TL_L_REG:
1044 event_en = test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV,
1045 &data->flags);
1046 break;
1047 case GP2AP020A00F_PH_L_REG:
1048 if (val == 0) {
1049 err = -EINVAL;
1050 goto error_unlock;
1051 }
1052 event_en = test_bit(GP2AP020A00F_FLAG_PROX_RISING_EV,
1053 &data->flags);
1054 break;
1055 case GP2AP020A00F_PL_L_REG:
1056 if (val == 0) {
1057 err = -EINVAL;
1058 goto error_unlock;
1059 }
1060 event_en = test_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV,
1061 &data->flags);
1062 break;
1063 }
1064
1065 data->thresh_val[thresh_val_id] = val;
1066 err = gp2ap020a00f_write_event_threshold(data, thresh_val_id,
1067 event_en);
1068error_unlock:
1069 mutex_unlock(&data->lock);
1070
1071 return err;
1072}
1073
1074static int gp2ap020a00f_read_event_val(struct iio_dev *indio_dev,
1075 u64 event_code, int *val)
1076{
1077 struct gp2ap020a00f_data *data = iio_priv(indio_dev);
1078 u8 thresh_reg_l;
1079 int err = 0;
1080
1081 mutex_lock(&data->lock);
1082
1083 thresh_reg_l = gp2ap020a00f_get_reg_by_event_code(event_code);
1084
1085 if (thresh_reg_l > GP2AP020A00F_PH_L_REG) {
1086 err = -EINVAL;
1087 goto error_unlock;
1088 }
1089
1090 *val = data->thresh_val[GP2AP020A00F_THRESH_VAL_ID(thresh_reg_l)];
1091
1092error_unlock:
1093 mutex_unlock(&data->lock);
1094
1095 return err;
1096}
1097
1098static int gp2ap020a00f_write_prox_event_config(struct iio_dev *indio_dev,
1099 u64 event_code, int state)
1100{
1101 struct gp2ap020a00f_data *data = iio_priv(indio_dev);
1102 enum gp2ap020a00f_cmd cmd_high_ev, cmd_low_ev;
1103 int err;
1104
1105 cmd_high_ev = state ? GP2AP020A00F_CMD_PROX_HIGH_EV_EN :
1106 GP2AP020A00F_CMD_PROX_HIGH_EV_DIS;
1107 cmd_low_ev = state ? GP2AP020A00F_CMD_PROX_LOW_EV_EN :
1108 GP2AP020A00F_CMD_PROX_LOW_EV_DIS;
1109
1110 /*
1111 * In order to enable proximity detection feature in the device
1112 * both high and low threshold registers have to be written
1113 * with different values, greater than zero.
1114 */
1115 if (state) {
1116 if (data->thresh_val[GP2AP020A00F_THRESH_PL] == 0)
1117 return -EINVAL;
1118
1119 if (data->thresh_val[GP2AP020A00F_THRESH_PH] == 0)
1120 return -EINVAL;
1121 }
1122
1123 err = gp2ap020a00f_exec_cmd(data, cmd_high_ev);
1124 if (err < 0)
1125 return err;
1126
1127 err = gp2ap020a00f_exec_cmd(data, cmd_low_ev);
1128 if (err < 0)
1129 return err;
1130
1131 free_irq(data->client->irq, indio_dev);
1132
1133 if (state)
1134 err = request_threaded_irq(data->client->irq, NULL,
1135 &gp2ap020a00f_prox_sensing_handler,
1136 IRQF_TRIGGER_RISING |
1137 IRQF_TRIGGER_FALLING |
1138 IRQF_ONESHOT,
1139 "gp2ap020a00f_prox_sensing",
1140 indio_dev);
1141 else {
1142 err = request_threaded_irq(data->client->irq, NULL,
1143 &gp2ap020a00f_thresh_event_handler,
1144 IRQF_TRIGGER_FALLING |
1145 IRQF_ONESHOT,
1146 "gp2ap020a00f_thresh_event",
1147 indio_dev);
1148 }
1149
1150 return err;
1151}
1152
1153static int gp2ap020a00f_write_event_config(struct iio_dev *indio_dev,
1154 u64 event_code, int state)
1155{
1156 struct gp2ap020a00f_data *data = iio_priv(indio_dev);
1157 enum gp2ap020a00f_cmd cmd;
1158 int err;
1159
1160 mutex_lock(&data->lock);
1161
1162 switch (IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(event_code)) {
1163 case IIO_PROXIMITY:
1164 err = gp2ap020a00f_write_prox_event_config(indio_dev,
1165 event_code, state);
1166 break;
1167 case IIO_LIGHT:
1168 if (IIO_EVENT_CODE_EXTRACT_DIR(event_code)
1169 == IIO_EV_DIR_RISING) {
1170 cmd = state ? GP2AP020A00F_CMD_ALS_HIGH_EV_EN :
1171 GP2AP020A00F_CMD_ALS_HIGH_EV_DIS;
1172 err = gp2ap020a00f_exec_cmd(data, cmd);
1173 } else {
1174 cmd = state ? GP2AP020A00F_CMD_ALS_LOW_EV_EN :
1175 GP2AP020A00F_CMD_ALS_LOW_EV_DIS;
1176 err = gp2ap020a00f_exec_cmd(data, cmd);
1177 }
1178 break;
1179 default:
1180 err = -EINVAL;
1181 }
1182
1183 mutex_unlock(&data->lock);
1184
1185 return err;
1186}
1187
1188static int gp2ap020a00f_read_event_config(struct iio_dev *indio_dev,
1189 u64 event_code)
1190{
1191 struct gp2ap020a00f_data *data = iio_priv(indio_dev);
1192 int event_en = 0;
1193
1194 mutex_lock(&data->lock);
1195
1196 switch (IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(event_code)) {
1197 case IIO_PROXIMITY:
1198 if (IIO_EVENT_CODE_EXTRACT_DIR(event_code)
1199 == IIO_EV_DIR_RISING)
1200 event_en = test_bit(GP2AP020A00F_FLAG_PROX_RISING_EV,
1201 &data->flags);
1202 else
1203 event_en = test_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV,
1204 &data->flags);
1205 break;
1206 case IIO_LIGHT:
1207 if (IIO_EVENT_CODE_EXTRACT_DIR(event_code)
1208 == IIO_EV_DIR_RISING)
1209 event_en = test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV,
1210 &data->flags);
1211 else
1212 event_en = test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV,
1213 &data->flags);
1214 break;
1215 }
1216
1217 mutex_unlock(&data->lock);
1218
1219 return event_en;
1220}
1221
1222static int gp2ap020a00f_read_channel(struct gp2ap020a00f_data *data,
1223 struct iio_chan_spec const *chan, int *val)
1224{
1225 enum gp2ap020a00f_cmd cmd;
1226 int err;
1227
1228 switch (chan->scan_index) {
1229 case GP2AP020A00F_SCAN_MODE_LIGHT_CLEAR:
1230 cmd = GP2AP020A00F_CMD_READ_RAW_CLEAR;
1231 break;
1232 case GP2AP020A00F_SCAN_MODE_LIGHT_IR:
1233 cmd = GP2AP020A00F_CMD_READ_RAW_IR;
1234 break;
1235 case GP2AP020A00F_SCAN_MODE_PROXIMITY:
1236 cmd = GP2AP020A00F_CMD_READ_RAW_PROXIMITY;
1237 break;
1238 default:
1239 return -EINVAL;
1240 }
1241
1242 err = gp2ap020a00f_exec_cmd(data, cmd);
1243 if (err < 0) {
1244 dev_err(&data->client->dev,
1245 "gp2ap020a00f_exec_cmd failed\n");
1246 goto error_ret;
1247 }
1248
1249 err = gp2ap020a00f_read_output(data, chan->address, val);
1250 if (err < 0)
1251 dev_err(&data->client->dev,
1252 "gp2ap020a00f_read_output failed\n");
1253
1254 err = gp2ap020a00f_set_operation_mode(data,
1255 GP2AP020A00F_OPMODE_SHUTDOWN);
1256 if (err < 0)
1257 dev_err(&data->client->dev,
1258 "Failed to shut down the device.\n");
1259
1260 if (cmd == GP2AP020A00F_CMD_READ_RAW_CLEAR ||
1261 cmd == GP2AP020A00F_CMD_READ_RAW_IR)
1262 gp2ap020a00f_output_to_lux(data, val);
1263
1264error_ret:
1265 return err;
1266}
1267
1268static int gp2ap020a00f_read_raw(struct iio_dev *indio_dev,
1269 struct iio_chan_spec const *chan,
1270 int *val, int *val2,
1271 long mask)
1272{
1273 struct gp2ap020a00f_data *data = iio_priv(indio_dev);
1274 int err = -EINVAL;
1275
1276 mutex_lock(&data->lock);
1277
1278 switch (mask) {
1279 case IIO_CHAN_INFO_RAW:
1280 if (iio_buffer_enabled(indio_dev)) {
1281 err = -EBUSY;
1282 goto error_unlock;
1283 }
1284
1285 err = gp2ap020a00f_read_channel(data, chan, val);
1286 break;
1287 }
1288
1289error_unlock:
1290 mutex_unlock(&data->lock);
1291
1292 return err < 0 ? err : IIO_VAL_INT;
1293}
1294
1295static const struct iio_chan_spec gp2ap020a00f_channels[] = {
1296 {
1297 .type = IIO_LIGHT,
1298 .channel2 = IIO_MOD_LIGHT_CLEAR,
1299 .modified = 1,
1300 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
1301 .scan_type = {
1302 .sign = 'u',
1303 .realbits = 24,
1304 .shift = 0,
1305 .storagebits = 32,
1306 .endianness = IIO_LE,
1307 },
1308 .scan_index = GP2AP020A00F_SCAN_MODE_LIGHT_CLEAR,
1309 .address = GP2AP020A00F_D0_L_REG,
1310 .event_mask = IIO_EV_BIT(IIO_EV_TYPE_THRESH,
1311 IIO_EV_DIR_RISING) |
1312 IIO_EV_BIT(IIO_EV_TYPE_THRESH,
1313 IIO_EV_DIR_FALLING),
1314 },
1315 {
1316 .type = IIO_LIGHT,
1317 .channel2 = IIO_MOD_LIGHT_IR,
1318 .modified = 1,
1319 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
1320 .scan_type = {
1321 .sign = 'u',
1322 .realbits = 24,
1323 .shift = 0,
1324 .storagebits = 32,
1325 .endianness = IIO_LE,
1326 },
1327 .scan_index = GP2AP020A00F_SCAN_MODE_LIGHT_IR,
1328 .address = GP2AP020A00F_D1_L_REG,
1329 },
1330 {
1331 .type = IIO_PROXIMITY,
1332 .modified = 0,
1333 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
1334 .scan_type = {
1335 .sign = 'u',
1336 .realbits = 16,
1337 .shift = 0,
1338 .storagebits = 16,
1339 .endianness = IIO_LE,
1340 },
1341 .scan_index = GP2AP020A00F_SCAN_MODE_PROXIMITY,
1342 .address = GP2AP020A00F_D2_L_REG,
1343 .event_mask = IIO_EV_BIT(IIO_EV_TYPE_ROC,
1344 IIO_EV_DIR_RISING) |
1345 IIO_EV_BIT(IIO_EV_TYPE_ROC,
1346 IIO_EV_DIR_FALLING),
1347 },
1348 IIO_CHAN_SOFT_TIMESTAMP(GP2AP020A00F_CHAN_TIMESTAMP),
1349};
1350
1351static const struct iio_info gp2ap020a00f_info = {
1352 .read_raw = &gp2ap020a00f_read_raw,
1353 .read_event_value = &gp2ap020a00f_read_event_val,
1354 .read_event_config = &gp2ap020a00f_read_event_config,
1355 .write_event_value = &gp2ap020a00f_write_event_val,
1356 .write_event_config = &gp2ap020a00f_write_event_config,
1357 .driver_module = THIS_MODULE,
1358};
1359
1360static int gp2ap020a00f_buffer_postenable(struct iio_dev *indio_dev)
1361{
1362 struct gp2ap020a00f_data *data = iio_priv(indio_dev);
1363 int i, err = 0;
1364
1365 mutex_lock(&data->lock);
1366
1367 /*
1368 * Enable triggers according to the scan_mask. Enabling either
1369 * LIGHT_CLEAR or LIGHT_IR scan mode results in enabling ALS
1370 * module in the device, which generates samples in both D0 (clear)
1371 * and D1 (ir) registers. As the two registers are bound to the
1372 * two separate IIO channels they are treated in the driver logic
1373 * as if they were controlled independently.
1374 */
1375 for_each_set_bit(i, indio_dev->active_scan_mask,
1376 indio_dev->masklength) {
1377 switch (i) {
1378 case GP2AP020A00F_SCAN_MODE_LIGHT_CLEAR:
1379 err = gp2ap020a00f_exec_cmd(data,
1380 GP2AP020A00F_CMD_TRIGGER_CLEAR_EN);
1381 break;
1382 case GP2AP020A00F_SCAN_MODE_LIGHT_IR:
1383 err = gp2ap020a00f_exec_cmd(data,
1384 GP2AP020A00F_CMD_TRIGGER_IR_EN);
1385 break;
1386 case GP2AP020A00F_SCAN_MODE_PROXIMITY:
1387 err = gp2ap020a00f_exec_cmd(data,
1388 GP2AP020A00F_CMD_TRIGGER_PROX_EN);
1389 break;
1390 }
1391 }
1392
1393 if (err < 0)
1394 goto error_unlock;
1395
1396 data->buffer = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
1397 if (!data->buffer) {
1398 err = -ENOMEM;
1399 goto error_unlock;
1400 }
1401
1402 err = iio_triggered_buffer_postenable(indio_dev);
1403
1404error_unlock:
1405 mutex_unlock(&data->lock);
1406
1407 return err;
1408}
1409
1410static int gp2ap020a00f_buffer_predisable(struct iio_dev *indio_dev)
1411{
1412 struct gp2ap020a00f_data *data = iio_priv(indio_dev);
1413 int i, err;
1414
1415 mutex_lock(&data->lock);
1416
1417 err = iio_triggered_buffer_predisable(indio_dev);
1418 if (err < 0)
1419 goto error_unlock;
1420
1421 for_each_set_bit(i, indio_dev->active_scan_mask,
1422 indio_dev->masklength) {
1423 switch (i) {
1424 case GP2AP020A00F_SCAN_MODE_LIGHT_CLEAR:
1425 err = gp2ap020a00f_exec_cmd(data,
1426 GP2AP020A00F_CMD_TRIGGER_CLEAR_DIS);
1427 break;
1428 case GP2AP020A00F_SCAN_MODE_LIGHT_IR:
1429 err = gp2ap020a00f_exec_cmd(data,
1430 GP2AP020A00F_CMD_TRIGGER_IR_DIS);
1431 break;
1432 case GP2AP020A00F_SCAN_MODE_PROXIMITY:
1433 err = gp2ap020a00f_exec_cmd(data,
1434 GP2AP020A00F_CMD_TRIGGER_PROX_DIS);
1435 break;
1436 }
1437 }
1438
1439 if (err == 0)
1440 kfree(data->buffer);
1441
1442error_unlock:
1443 mutex_unlock(&data->lock);
1444
1445 return err;
1446}
1447
1448static const struct iio_buffer_setup_ops gp2ap020a00f_buffer_setup_ops = {
1449 .preenable = &iio_sw_buffer_preenable,
1450 .postenable = &gp2ap020a00f_buffer_postenable,
1451 .predisable = &gp2ap020a00f_buffer_predisable,
1452};
1453
1454static const struct iio_trigger_ops gp2ap020a00f_trigger_ops = {
1455 .owner = THIS_MODULE,
1456};
1457
1458static int gp2ap020a00f_probe(struct i2c_client *client,
1459 const struct i2c_device_id *id)
1460{
1461 struct gp2ap020a00f_data *data;
1462 struct iio_dev *indio_dev;
1463 struct regmap *regmap;
1464 int err;
1465
1466 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
1467 if (!indio_dev)
1468 return -ENOMEM;
1469
1470 data = iio_priv(indio_dev);
1471
1472 data->vled_reg = devm_regulator_get(&client->dev, "vled");
1473 if (IS_ERR(data->vled_reg))
1474 return PTR_ERR(data->vled_reg);
1475
1476 err = regulator_enable(data->vled_reg);
1477 if (err)
1478 return err;
1479
1480 regmap = devm_regmap_init_i2c(client, &gp2ap020a00f_regmap_config);
1481 if (IS_ERR(regmap)) {
1482 dev_err(&client->dev, "Regmap initialization failed.\n");
1483 err = PTR_ERR(regmap);
1484 goto error_regulator_disable;
1485 }
1486
1487 /* Initialize device registers */
1488 err = regmap_bulk_write(regmap, GP2AP020A00F_OP_REG,
1489 gp2ap020a00f_reg_init_tab,
1490 ARRAY_SIZE(gp2ap020a00f_reg_init_tab));
1491
1492 if (err < 0) {
1493 dev_err(&client->dev, "Device initialization failed.\n");
1494 goto error_regulator_disable;
1495 }
1496
1497 i2c_set_clientdata(client, indio_dev);
1498
1499 data->client = client;
1500 data->cur_opmode = GP2AP020A00F_OPMODE_SHUTDOWN;
1501 data->regmap = regmap;
1502 init_waitqueue_head(&data->data_ready_queue);
1503
1504 mutex_init(&data->lock);
1505 indio_dev->dev.parent = &client->dev;
1506 indio_dev->channels = gp2ap020a00f_channels;
1507 indio_dev->num_channels = ARRAY_SIZE(gp2ap020a00f_channels);
1508 indio_dev->info = &gp2ap020a00f_info;
1509 indio_dev->name = id->name;
1510 indio_dev->modes = INDIO_DIRECT_MODE;
1511
1512 /* Allocate buffer */
1513 err = iio_triggered_buffer_setup(indio_dev, &iio_pollfunc_store_time,
1514 &gp2ap020a00f_trigger_handler, &gp2ap020a00f_buffer_setup_ops);
1515 if (err < 0)
1516 goto error_regulator_disable;
1517
1518 /* Allocate trigger */
1519 data->trig = devm_iio_trigger_alloc(&client->dev, "%s-trigger",
1520 indio_dev->name);
1521 if (data->trig == NULL) {
1522 err = -ENOMEM;
1523 dev_err(&indio_dev->dev, "Failed to allocate iio trigger.\n");
1524 goto error_uninit_buffer;
1525 }
1526
1527 /* This needs to be requested here for read_raw calls to work. */
1528 err = request_threaded_irq(client->irq, NULL,
1529 &gp2ap020a00f_thresh_event_handler,
1530 IRQF_TRIGGER_FALLING |
1531 IRQF_ONESHOT,
1532 "gp2ap020a00f_als_event",
1533 indio_dev);
1534 if (err < 0) {
1535 dev_err(&client->dev, "Irq request failed.\n");
1536 goto error_uninit_buffer;
1537 }
1538
1539 data->trig->ops = &gp2ap020a00f_trigger_ops;
1540 data->trig->dev.parent = &data->client->dev;
1541
1542 init_irq_work(&data->work, gp2ap020a00f_iio_trigger_work);
1543
1544 err = iio_trigger_register(data->trig);
1545 if (err < 0) {
1546 dev_err(&client->dev, "Failed to register iio trigger.\n");
1547 goto error_free_irq;
1548 }
1549
1550 err = iio_device_register(indio_dev);
1551 if (err < 0)
1552 goto error_trigger_unregister;
1553
1554 return 0;
1555
1556error_trigger_unregister:
1557 iio_trigger_unregister(data->trig);
1558error_free_irq:
1559 free_irq(client->irq, indio_dev);
1560error_uninit_buffer:
1561 iio_triggered_buffer_cleanup(indio_dev);
1562error_regulator_disable:
1563 regulator_disable(data->vled_reg);
1564
1565 return err;
1566}
1567
1568static int gp2ap020a00f_remove(struct i2c_client *client)
1569{
1570 struct iio_dev *indio_dev = i2c_get_clientdata(client);
1571 struct gp2ap020a00f_data *data = iio_priv(indio_dev);
1572 int err;
1573
1574 err = gp2ap020a00f_set_operation_mode(data,
1575 GP2AP020A00F_OPMODE_SHUTDOWN);
1576 if (err < 0)
1577 dev_err(&indio_dev->dev, "Failed to power off the device.\n");
1578
1579 iio_device_unregister(indio_dev);
1580 iio_trigger_unregister(data->trig);
1581 free_irq(client->irq, indio_dev);
1582 iio_triggered_buffer_cleanup(indio_dev);
1583 regulator_disable(data->vled_reg);
1584
1585 return 0;
1586}
1587
1588static const struct i2c_device_id gp2ap020a00f_id[] = {
1589 { GP2A_I2C_NAME, 0 },
1590 { }
1591};
1592
1593MODULE_DEVICE_TABLE(i2c, gp2ap020a00f_id);
1594
1595#ifdef CONFIG_OF
1596static const struct of_device_id gp2ap020a00f_of_match[] = {
1597 { .compatible = "sharp,gp2ap020a00f" },
1598 { }
1599};
1600#endif
1601
1602static struct i2c_driver gp2ap020a00f_driver = {
1603 .driver = {
1604 .name = GP2A_I2C_NAME,
1605 .of_match_table = of_match_ptr(gp2ap020a00f_of_match),
1606 .owner = THIS_MODULE,
1607 },
1608 .probe = gp2ap020a00f_probe,
1609 .remove = gp2ap020a00f_remove,
1610 .id_table = gp2ap020a00f_id,
1611};
1612
1613module_i2c_driver(gp2ap020a00f_driver);
1614
1615MODULE_AUTHOR("Jacek Anaszewski <j.anaszewski@samsung.com>");
1616MODULE_DESCRIPTION("Sharp GP2AP020A00F Proximity/ALS sensor driver");
1617MODULE_LICENSE("GPL v2");
diff --git a/drivers/iio/light/hid-sensor-als.c b/drivers/iio/light/hid-sensor-als.c
index e59d00c3139c..fa6ae8cf89ea 100644
--- a/drivers/iio/light/hid-sensor-als.c
+++ b/drivers/iio/light/hid-sensor-als.c
@@ -161,10 +161,11 @@ static const struct iio_info als_info = {
161}; 161};
162 162
163/* Function to push data to buffer */ 163/* Function to push data to buffer */
164static void hid_sensor_push_data(struct iio_dev *indio_dev, u8 *data, int len) 164static void hid_sensor_push_data(struct iio_dev *indio_dev, const void *data,
165 int len)
165{ 166{
166 dev_dbg(&indio_dev->dev, "hid_sensor_push_data\n"); 167 dev_dbg(&indio_dev->dev, "hid_sensor_push_data\n");
167 iio_push_to_buffers(indio_dev, (u8 *)data); 168 iio_push_to_buffers(indio_dev, data);
168} 169}
169 170
170/* Callback handler to send event after all samples are received and captured */ 171/* Callback handler to send event after all samples are received and captured */
@@ -179,7 +180,7 @@ static int als_proc_event(struct hid_sensor_hub_device *hsdev,
179 als_state->common_attributes.data_ready); 180 als_state->common_attributes.data_ready);
180 if (als_state->common_attributes.data_ready) 181 if (als_state->common_attributes.data_ready)
181 hid_sensor_push_data(indio_dev, 182 hid_sensor_push_data(indio_dev,
182 (u8 *)&als_state->illum, 183 &als_state->illum,
183 sizeof(als_state->illum)); 184 sizeof(als_state->illum));
184 185
185 return 0; 186 return 0;
diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c
new file mode 100644
index 000000000000..45df2204614a
--- /dev/null
+++ b/drivers/iio/light/tcs3472.c
@@ -0,0 +1,367 @@
1/*
2 * tcs3472.c - Support for TAOS TCS3472 color light-to-digital converter
3 *
4 * Copyright (c) 2013 Peter Meerwald <pmeerw@pmeerw.net>
5 *
6 * This file is subject to the terms and conditions of version 2 of
7 * the GNU General Public License. See the file COPYING in the main
8 * directory of this archive for more details.
9 *
10 * Color light sensor with 16-bit channels for red, green, blue, clear);
11 * 7-bit I2C slave address 0x39 (TCS34721, TCS34723) or 0x29 (TCS34725,
12 * TCS34727)
13 *
14 * TODO: interrupt support, thresholds, wait time
15 */
16
17#include <linux/module.h>
18#include <linux/i2c.h>
19#include <linux/delay.h>
20#include <linux/pm.h>
21
22#include <linux/iio/iio.h>
23#include <linux/iio/sysfs.h>
24#include <linux/iio/trigger_consumer.h>
25#include <linux/iio/buffer.h>
26#include <linux/iio/triggered_buffer.h>
27
28#define TCS3472_DRV_NAME "tcs3472"
29
30#define TCS3472_COMMAND BIT(7)
31#define TCS3472_AUTO_INCR BIT(5)
32
33#define TCS3472_ENABLE (TCS3472_COMMAND | 0x00)
34#define TCS3472_ATIME (TCS3472_COMMAND | 0x01)
35#define TCS3472_WTIME (TCS3472_COMMAND | 0x03)
36#define TCS3472_AILT (TCS3472_COMMAND | 0x04)
37#define TCS3472_AIHT (TCS3472_COMMAND | 0x06)
38#define TCS3472_PERS (TCS3472_COMMAND | 0x0c)
39#define TCS3472_CONFIG (TCS3472_COMMAND | 0x0d)
40#define TCS3472_CONTROL (TCS3472_COMMAND | 0x0f)
41#define TCS3472_ID (TCS3472_COMMAND | 0x12)
42#define TCS3472_STATUS (TCS3472_COMMAND | 0x13)
43#define TCS3472_CDATA (TCS3472_COMMAND | TCS3472_AUTO_INCR | 0x14)
44#define TCS3472_RDATA (TCS3472_COMMAND | TCS3472_AUTO_INCR | 0x16)
45#define TCS3472_GDATA (TCS3472_COMMAND | TCS3472_AUTO_INCR | 0x18)
46#define TCS3472_BDATA (TCS3472_COMMAND | TCS3472_AUTO_INCR | 0x1a)
47
48#define TCS3472_STATUS_AVALID BIT(0)
49#define TCS3472_ENABLE_AEN BIT(1)
50#define TCS3472_ENABLE_PON BIT(0)
51#define TCS3472_CONTROL_AGAIN_MASK (BIT(0) | BIT(1))
52
53struct tcs3472_data {
54 struct i2c_client *client;
55 u8 enable;
56 u8 control;
57 u8 atime;
58 u16 buffer[8]; /* 4 16-bit channels + 64-bit timestamp */
59};
60
61#define TCS3472_CHANNEL(_color, _si, _addr) { \
62 .type = IIO_INTENSITY, \
63 .modified = 1, \
64 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
65 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_CALIBSCALE) | \
66 BIT(IIO_CHAN_INFO_INT_TIME), \
67 .channel2 = IIO_MOD_LIGHT_##_color, \
68 .address = _addr, \
69 .scan_index = _si, \
70 .scan_type = IIO_ST('u', 16, 16, 0), \
71}
72
73static const int tcs3472_agains[] = { 1, 4, 16, 60 };
74
75static const struct iio_chan_spec tcs3472_channels[] = {
76 TCS3472_CHANNEL(CLEAR, 0, TCS3472_CDATA),
77 TCS3472_CHANNEL(RED, 1, TCS3472_RDATA),
78 TCS3472_CHANNEL(GREEN, 2, TCS3472_GDATA),
79 TCS3472_CHANNEL(BLUE, 3, TCS3472_BDATA),
80 IIO_CHAN_SOFT_TIMESTAMP(4),
81};
82
83static int tcs3472_req_data(struct tcs3472_data *data)
84{
85 int tries = 50;
86 int ret;
87
88 while (tries--) {
89 ret = i2c_smbus_read_byte_data(data->client, TCS3472_STATUS);
90 if (ret < 0)
91 return ret;
92 if (ret & TCS3472_STATUS_AVALID)
93 break;
94 msleep(20);
95 }
96
97 if (tries < 0) {
98 dev_err(&data->client->dev, "data not ready\n");
99 return -EIO;
100 }
101
102 return 0;
103}
104
105static int tcs3472_read_raw(struct iio_dev *indio_dev,
106 struct iio_chan_spec const *chan,
107 int *val, int *val2, long mask)
108{
109 struct tcs3472_data *data = iio_priv(indio_dev);
110 int ret;
111
112 switch (mask) {
113 case IIO_CHAN_INFO_RAW:
114 ret = tcs3472_req_data(data);
115 if (ret < 0)
116 return ret;
117 ret = i2c_smbus_read_word_data(data->client, chan->address);
118 if (ret < 0)
119 return ret;
120 *val = ret;
121 return IIO_VAL_INT;
122 case IIO_CHAN_INFO_CALIBSCALE:
123 *val = tcs3472_agains[data->control &
124 TCS3472_CONTROL_AGAIN_MASK];
125 return IIO_VAL_INT;
126 case IIO_CHAN_INFO_INT_TIME:
127 *val = 0;
128 *val2 = (256 - data->atime) * 2400;
129 return IIO_VAL_INT_PLUS_MICRO;
130 }
131 return -EINVAL;
132}
133
134static int tcs3472_write_raw(struct iio_dev *indio_dev,
135 struct iio_chan_spec const *chan,
136 int val, int val2, long mask)
137{
138 struct tcs3472_data *data = iio_priv(indio_dev);
139 int i;
140
141 switch (mask) {
142 case IIO_CHAN_INFO_CALIBSCALE:
143 if (val2 != 0)
144 return -EINVAL;
145 for (i = 0; i < ARRAY_SIZE(tcs3472_agains); i++) {
146 if (val == tcs3472_agains[i]) {
147 data->control &= ~TCS3472_CONTROL_AGAIN_MASK;
148 data->control |= i;
149 return i2c_smbus_write_byte_data(
150 data->client, TCS3472_CONTROL,
151 data->control);
152 }
153 }
154 return -EINVAL;
155 case IIO_CHAN_INFO_INT_TIME:
156 if (val != 0)
157 return -EINVAL;
158 for (i = 0; i < 256; i++) {
159 if (val2 == (256 - i) * 2400) {
160 data->atime = i;
161 return i2c_smbus_write_word_data(
162 data->client, TCS3472_ATIME,
163 data->atime);
164 }
165
166 }
167 return -EINVAL;
168 }
169 return -EINVAL;
170}
171
172static irqreturn_t tcs3472_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 tcs3472_data *data = iio_priv(indio_dev);
177 int len = 0;
178 int i, j = 0;
179
180 int ret = tcs3472_req_data(data);
181 if (ret < 0)
182 goto done;
183
184 for_each_set_bit(i, indio_dev->active_scan_mask,
185 indio_dev->masklength) {
186 ret = i2c_smbus_read_word_data(data->client,
187 TCS3472_CDATA + 2*i);
188 if (ret < 0)
189 goto done;
190
191 data->buffer[j++] = ret;
192 len += 2;
193 }
194
195 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
196 iio_get_time_ns());
197
198done:
199 iio_trigger_notify_done(indio_dev->trig);
200
201 return IRQ_HANDLED;
202}
203
204static ssize_t tcs3472_show_int_time_available(struct device *dev,
205 struct device_attribute *attr,
206 char *buf)
207{
208 size_t len = 0;
209 int i;
210
211 for (i = 1; i <= 256; i++)
212 len += scnprintf(buf + len, PAGE_SIZE - len, "0.%06d ",
213 2400 * i);
214
215 /* replace trailing space by newline */
216 buf[len - 1] = '\n';
217
218 return len;
219}
220
221static IIO_CONST_ATTR(calibscale_available, "1 4 16 60");
222static IIO_DEV_ATTR_INT_TIME_AVAIL(tcs3472_show_int_time_available);
223
224static struct attribute *tcs3472_attributes[] = {
225 &iio_const_attr_calibscale_available.dev_attr.attr,
226 &iio_dev_attr_integration_time_available.dev_attr.attr,
227 NULL
228};
229
230static const struct attribute_group tcs3472_attribute_group = {
231 .attrs = tcs3472_attributes,
232};
233
234static const struct iio_info tcs3472_info = {
235 .read_raw = tcs3472_read_raw,
236 .write_raw = tcs3472_write_raw,
237 .attrs = &tcs3472_attribute_group,
238 .driver_module = THIS_MODULE,
239};
240
241static int tcs3472_probe(struct i2c_client *client,
242 const struct i2c_device_id *id)
243{
244 struct tcs3472_data *data;
245 struct iio_dev *indio_dev;
246 int ret;
247
248 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
249 if (indio_dev == NULL)
250 return -ENOMEM;
251
252 data = iio_priv(indio_dev);
253 i2c_set_clientdata(client, indio_dev);
254 data->client = client;
255
256 indio_dev->dev.parent = &client->dev;
257 indio_dev->info = &tcs3472_info;
258 indio_dev->name = TCS3472_DRV_NAME;
259 indio_dev->channels = tcs3472_channels;
260 indio_dev->num_channels = ARRAY_SIZE(tcs3472_channels);
261 indio_dev->modes = INDIO_DIRECT_MODE;
262
263 ret = i2c_smbus_read_byte_data(data->client, TCS3472_ID);
264 if (ret < 0)
265 return ret;
266
267 if (ret == 0x44)
268 dev_info(&client->dev, "TCS34721/34725 found\n");
269 else if (ret == 0x4d)
270 dev_info(&client->dev, "TCS34723/34727 found\n");
271 else
272 return -ENODEV;
273
274 ret = i2c_smbus_read_byte_data(data->client, TCS3472_CONTROL);
275 if (ret < 0)
276 return ret;
277 data->control = ret;
278
279 ret = i2c_smbus_read_byte_data(data->client, TCS3472_ATIME);
280 if (ret < 0)
281 return ret;
282 data->atime = ret;
283
284 ret = i2c_smbus_read_byte_data(data->client, TCS3472_ENABLE);
285 if (ret < 0)
286 return ret;
287
288 /* enable device */
289 data->enable = ret | TCS3472_ENABLE_PON | TCS3472_ENABLE_AEN;
290 ret = i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE,
291 data->enable);
292 if (ret < 0)
293 return ret;
294
295 ret = iio_triggered_buffer_setup(indio_dev, NULL,
296 tcs3472_trigger_handler, NULL);
297 if (ret < 0)
298 return ret;
299
300 ret = iio_device_register(indio_dev);
301 if (ret < 0)
302 goto buffer_cleanup;
303
304 return 0;
305
306buffer_cleanup:
307 iio_triggered_buffer_cleanup(indio_dev);
308 return ret;
309}
310
311static int tcs3472_powerdown(struct tcs3472_data *data)
312{
313 return i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE,
314 data->enable & ~(TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON));
315}
316
317static int tcs3472_remove(struct i2c_client *client)
318{
319 struct iio_dev *indio_dev = i2c_get_clientdata(client);
320
321 iio_device_unregister(indio_dev);
322 iio_triggered_buffer_cleanup(indio_dev);
323 tcs3472_powerdown(iio_priv(indio_dev));
324
325 return 0;
326}
327
328#ifdef CONFIG_PM_SLEEP
329static int tcs3472_suspend(struct device *dev)
330{
331 struct tcs3472_data *data = iio_priv(i2c_get_clientdata(
332 to_i2c_client(dev)));
333 return tcs3472_powerdown(data);
334}
335
336static int tcs3472_resume(struct device *dev)
337{
338 struct tcs3472_data *data = iio_priv(i2c_get_clientdata(
339 to_i2c_client(dev)));
340 return i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE,
341 data->enable | (TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON));
342}
343#endif
344
345static SIMPLE_DEV_PM_OPS(tcs3472_pm_ops, tcs3472_suspend, tcs3472_resume);
346
347static const struct i2c_device_id tcs3472_id[] = {
348 { "tcs3472", 0 },
349 { }
350};
351MODULE_DEVICE_TABLE(i2c, tcs3472_id);
352
353static struct i2c_driver tcs3472_driver = {
354 .driver = {
355 .name = TCS3472_DRV_NAME,
356 .pm = &tcs3472_pm_ops,
357 .owner = THIS_MODULE,
358 },
359 .probe = tcs3472_probe,
360 .remove = tcs3472_remove,
361 .id_table = tcs3472_id,
362};
363module_i2c_driver(tcs3472_driver);
364
365MODULE_AUTHOR("Peter Meerwald <pmeerw@pmeerw.net>");
366MODULE_DESCRIPTION("TCS3472 color light sensors driver");
367MODULE_LICENSE("GPL");
diff --git a/drivers/iio/light/tsl4531.c b/drivers/iio/light/tsl4531.c
new file mode 100644
index 000000000000..a15006efa137
--- /dev/null
+++ b/drivers/iio/light/tsl4531.c
@@ -0,0 +1,258 @@
1/*
2 * tsl4531.c - Support for TAOS TSL4531 ambient light sensor
3 *
4 * Copyright 2013 Peter Meerwald <pmeerw@pmeerw.net>
5 *
6 * This file is subject to the terms and conditions of version 2 of
7 * the GNU General Public License. See the file COPYING in the main
8 * directory of this archive for more details.
9 *
10 * IIO driver for the TSL4531x family
11 * TSL45311/TSL45313: 7-bit I2C slave address 0x39
12 * TSL45315/TSL45317: 7-bit I2C slave address 0x29
13 *
14 * TODO: single cycle measurement
15 */
16
17#include <linux/module.h>
18#include <linux/i2c.h>
19#include <linux/err.h>
20#include <linux/delay.h>
21
22#include <linux/iio/iio.h>
23#include <linux/iio/sysfs.h>
24
25#define TSL4531_DRV_NAME "tsl4531"
26
27#define TCS3472_COMMAND BIT(7)
28
29#define TSL4531_CONTROL (TCS3472_COMMAND | 0x00)
30#define TSL4531_CONFIG (TCS3472_COMMAND | 0x01)
31#define TSL4531_DATA (TCS3472_COMMAND | 0x04)
32#define TSL4531_ID (TCS3472_COMMAND | 0x0a)
33
34/* operating modes in control register */
35#define TSL4531_MODE_POWERDOWN 0x00
36#define TSL4531_MODE_SINGLE_ADC 0x02
37#define TSL4531_MODE_NORMAL 0x03
38
39/* integration time control in config register */
40#define TSL4531_TCNTRL_400MS 0x00
41#define TSL4531_TCNTRL_200MS 0x01
42#define TSL4531_TCNTRL_100MS 0x02
43
44/* part number in id register */
45#define TSL45311_ID 0x8
46#define TSL45313_ID 0x9
47#define TSL45315_ID 0xa
48#define TSL45317_ID 0xb
49#define TSL4531_ID_SHIFT 4
50
51struct tsl4531_data {
52 struct i2c_client *client;
53 struct mutex lock;
54 int int_time;
55};
56
57static IIO_CONST_ATTR_INT_TIME_AVAIL("0.1 0.2 0.4");
58
59static struct attribute *tsl4531_attributes[] = {
60 &iio_const_attr_integration_time_available.dev_attr.attr,
61 NULL
62};
63
64static const struct attribute_group tsl4531_attribute_group = {
65 .attrs = tsl4531_attributes,
66};
67
68static const struct iio_chan_spec tsl4531_channels[] = {
69 {
70 .type = IIO_LIGHT,
71 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
72 BIT(IIO_CHAN_INFO_SCALE) |
73 BIT(IIO_CHAN_INFO_INT_TIME)
74 }
75};
76
77static int tsl4531_read_raw(struct iio_dev *indio_dev,
78 struct iio_chan_spec const *chan,
79 int *val, int *val2, long mask)
80{
81 struct tsl4531_data *data = iio_priv(indio_dev);
82 int ret;
83
84 switch (mask) {
85 case IIO_CHAN_INFO_RAW:
86 ret = i2c_smbus_read_word_data(data->client,
87 TSL4531_DATA);
88 if (ret < 0)
89 return ret;
90 *val = ret;
91 return IIO_VAL_INT;
92 case IIO_CHAN_INFO_SCALE:
93 /* 0.. 1x, 1 .. 2x, 2 .. 4x */
94 *val = 1 << data->int_time;
95 return IIO_VAL_INT;
96 case IIO_CHAN_INFO_INT_TIME:
97 if (data->int_time == 0)
98 *val2 = 400000;
99 else if (data->int_time == 1)
100 *val2 = 200000;
101 else if (data->int_time == 2)
102 *val2 = 100000;
103 else
104 return -EINVAL;
105 *val = 0;
106 return IIO_VAL_INT_PLUS_MICRO;
107 default:
108 return -EINVAL;
109 }
110}
111
112static int tsl4531_write_raw(struct iio_dev *indio_dev,
113 struct iio_chan_spec const *chan,
114 int val, int val2, long mask)
115{
116 struct tsl4531_data *data = iio_priv(indio_dev);
117 int int_time, ret;
118
119 switch (mask) {
120 case IIO_CHAN_INFO_INT_TIME:
121 if (val != 0)
122 return -EINVAL;
123 if (val2 == 400000)
124 int_time = 0;
125 else if (val2 == 200000)
126 int_time = 1;
127 else if (val2 == 100000)
128 int_time = 2;
129 else
130 return -EINVAL;
131 mutex_lock(&data->lock);
132 ret = i2c_smbus_write_byte_data(data->client,
133 TSL4531_CONFIG, int_time);
134 if (ret >= 0)
135 data->int_time = int_time;
136 mutex_unlock(&data->lock);
137 return ret;
138 default:
139 return -EINVAL;
140 }
141}
142
143static const struct iio_info tsl4531_info = {
144 .read_raw = tsl4531_read_raw,
145 .write_raw = tsl4531_write_raw,
146 .attrs = &tsl4531_attribute_group,
147 .driver_module = THIS_MODULE,
148};
149
150static int tsl4531_check_id(struct i2c_client *client)
151{
152 int ret = i2c_smbus_read_byte_data(client, TSL4531_ID);
153 if (ret < 0)
154 return ret;
155
156 switch (ret >> TSL4531_ID_SHIFT) {
157 case TSL45311_ID:
158 case TSL45313_ID:
159 case TSL45315_ID:
160 case TSL45317_ID:
161 return 1;
162 default:
163 return 0;
164 }
165}
166
167static int tsl4531_probe(struct i2c_client *client,
168 const struct i2c_device_id *id)
169{
170 struct tsl4531_data *data;
171 struct iio_dev *indio_dev;
172 int ret;
173
174 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
175 if (!indio_dev)
176 return -ENOMEM;
177
178 data = iio_priv(indio_dev);
179 i2c_set_clientdata(client, indio_dev);
180 data->client = client;
181 mutex_init(&data->lock);
182
183 if (!tsl4531_check_id(client)) {
184 dev_err(&client->dev, "no TSL4531 sensor\n");
185 return -ENODEV;
186 }
187
188 ret = i2c_smbus_write_byte_data(data->client, TSL4531_CONTROL,
189 TSL4531_MODE_NORMAL);
190 if (ret < 0)
191 return ret;
192
193 ret = i2c_smbus_write_byte_data(data->client, TSL4531_CONFIG,
194 TSL4531_TCNTRL_400MS);
195 if (ret < 0)
196 return ret;
197
198 indio_dev->dev.parent = &client->dev;
199 indio_dev->info = &tsl4531_info;
200 indio_dev->channels = tsl4531_channels;
201 indio_dev->num_channels = ARRAY_SIZE(tsl4531_channels);
202 indio_dev->name = TSL4531_DRV_NAME;
203 indio_dev->modes = INDIO_DIRECT_MODE;
204
205 return iio_device_register(indio_dev);
206}
207
208static int tsl4531_powerdown(struct i2c_client *client)
209{
210 return i2c_smbus_write_byte_data(client, TSL4531_CONTROL,
211 TSL4531_MODE_POWERDOWN);
212}
213
214static int tsl4531_remove(struct i2c_client *client)
215{
216 iio_device_unregister(i2c_get_clientdata(client));
217 tsl4531_powerdown(client);
218
219 return 0;
220}
221
222#ifdef CONFIG_PM_SLEEP
223static int tsl4531_suspend(struct device *dev)
224{
225 return tsl4531_powerdown(to_i2c_client(dev));
226}
227
228static int tsl4531_resume(struct device *dev)
229{
230 return i2c_smbus_write_byte_data(to_i2c_client(dev), TSL4531_CONTROL,
231 TSL4531_MODE_NORMAL);
232}
233#endif
234
235static SIMPLE_DEV_PM_OPS(tsl4531_pm_ops, tsl4531_suspend, tsl4531_resume);
236
237static const struct i2c_device_id tsl4531_id[] = {
238 { "tsl4531", 0 },
239 { }
240};
241MODULE_DEVICE_TABLE(i2c, tsl4531_id);
242
243static struct i2c_driver tsl4531_driver = {
244 .driver = {
245 .name = TSL4531_DRV_NAME,
246 .pm = &tsl4531_pm_ops,
247 .owner = THIS_MODULE,
248 },
249 .probe = tsl4531_probe,
250 .remove = tsl4531_remove,
251 .id_table = tsl4531_id,
252};
253
254module_i2c_driver(tsl4531_driver);
255
256MODULE_AUTHOR("Peter Meerwald <pmeerw@pmeerw.net>");
257MODULE_DESCRIPTION("TAOS TSL4531 ambient light sensors driver");
258MODULE_LICENSE("GPL");
diff --git a/drivers/iio/magnetometer/hid-sensor-magn-3d.c b/drivers/iio/magnetometer/hid-sensor-magn-3d.c
index a98460b15e4b..2634920562fb 100644
--- a/drivers/iio/magnetometer/hid-sensor-magn-3d.c
+++ b/drivers/iio/magnetometer/hid-sensor-magn-3d.c
@@ -183,10 +183,11 @@ static const struct iio_info magn_3d_info = {
183}; 183};
184 184
185/* Function to push data to buffer */ 185/* Function to push data to buffer */
186static void hid_sensor_push_data(struct iio_dev *indio_dev, u8 *data, int len) 186static void hid_sensor_push_data(struct iio_dev *indio_dev, const void *data,
187 int len)
187{ 188{
188 dev_dbg(&indio_dev->dev, "hid_sensor_push_data\n"); 189 dev_dbg(&indio_dev->dev, "hid_sensor_push_data\n");
189 iio_push_to_buffers(indio_dev, (u8 *)data); 190 iio_push_to_buffers(indio_dev, data);
190} 191}
191 192
192/* Callback handler to send event after all samples are received and captured */ 193/* Callback handler to send event after all samples are received and captured */
@@ -201,7 +202,7 @@ static int magn_3d_proc_event(struct hid_sensor_hub_device *hsdev,
201 magn_state->common_attributes.data_ready); 202 magn_state->common_attributes.data_ready);
202 if (magn_state->common_attributes.data_ready) 203 if (magn_state->common_attributes.data_ready)
203 hid_sensor_push_data(indio_dev, 204 hid_sensor_push_data(indio_dev,
204 (u8 *)magn_state->magn_val, 205 magn_state->magn_val,
205 sizeof(magn_state->magn_val)); 206 sizeof(magn_state->magn_val));
206 207
207 return 0; 208 return 0;
diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c
index e8d2849cc81d..82461eff995a 100644
--- a/drivers/iio/magnetometer/st_magn_core.c
+++ b/drivers/iio/magnetometer/st_magn_core.c
@@ -348,8 +348,9 @@ static const struct iio_info magn_info = {
348int st_magn_common_probe(struct iio_dev *indio_dev, 348int st_magn_common_probe(struct iio_dev *indio_dev,
349 struct st_sensors_platform_data *pdata) 349 struct st_sensors_platform_data *pdata)
350{ 350{
351 int err;
352 struct st_sensor_data *mdata = iio_priv(indio_dev); 351 struct st_sensor_data *mdata = iio_priv(indio_dev);
352 int irq = mdata->get_irq_data_ready(indio_dev);
353 int err;
353 354
354 indio_dev->modes = INDIO_DIRECT_MODE; 355 indio_dev->modes = INDIO_DIRECT_MODE;
355 indio_dev->info = &magn_info; 356 indio_dev->info = &magn_info;
@@ -357,7 +358,7 @@ int st_magn_common_probe(struct iio_dev *indio_dev,
357 err = st_sensors_check_device_support(indio_dev, 358 err = st_sensors_check_device_support(indio_dev,
358 ARRAY_SIZE(st_magn_sensors), st_magn_sensors); 359 ARRAY_SIZE(st_magn_sensors), st_magn_sensors);
359 if (err < 0) 360 if (err < 0)
360 goto st_magn_common_probe_error; 361 return err;
361 362
362 mdata->num_data_channels = ST_MAGN_NUMBER_DATA_CHANNELS; 363 mdata->num_data_channels = ST_MAGN_NUMBER_DATA_CHANNELS;
363 mdata->multiread_bit = mdata->sensor->multi_read_bit; 364 mdata->multiread_bit = mdata->sensor->multi_read_bit;
@@ -370,12 +371,13 @@ int st_magn_common_probe(struct iio_dev *indio_dev,
370 371
371 err = st_sensors_init_sensor(indio_dev, pdata); 372 err = st_sensors_init_sensor(indio_dev, pdata);
372 if (err < 0) 373 if (err < 0)
373 goto st_magn_common_probe_error; 374 return err;
374 375
375 if (mdata->get_irq_data_ready(indio_dev) > 0) { 376 err = st_magn_allocate_ring(indio_dev);
376 err = st_magn_allocate_ring(indio_dev); 377 if (err < 0)
377 if (err < 0) 378 return err;
378 goto st_magn_common_probe_error; 379
380 if (irq > 0) {
379 err = st_sensors_allocate_trigger(indio_dev, NULL); 381 err = st_sensors_allocate_trigger(indio_dev, NULL);
380 if (err < 0) 382 if (err < 0)
381 goto st_magn_probe_trigger_error; 383 goto st_magn_probe_trigger_error;
@@ -385,15 +387,14 @@ int st_magn_common_probe(struct iio_dev *indio_dev,
385 if (err) 387 if (err)
386 goto st_magn_device_register_error; 388 goto st_magn_device_register_error;
387 389
388 return err; 390 return 0;
389 391
390st_magn_device_register_error: 392st_magn_device_register_error:
391 if (mdata->get_irq_data_ready(indio_dev) > 0) 393 if (irq > 0)
392 st_sensors_deallocate_trigger(indio_dev); 394 st_sensors_deallocate_trigger(indio_dev);
393st_magn_probe_trigger_error: 395st_magn_probe_trigger_error:
394 if (mdata->get_irq_data_ready(indio_dev) > 0) 396 st_magn_deallocate_ring(indio_dev);
395 st_magn_deallocate_ring(indio_dev); 397
396st_magn_common_probe_error:
397 return err; 398 return err;
398} 399}
399EXPORT_SYMBOL(st_magn_common_probe); 400EXPORT_SYMBOL(st_magn_common_probe);
@@ -403,10 +404,10 @@ void st_magn_common_remove(struct iio_dev *indio_dev)
403 struct st_sensor_data *mdata = iio_priv(indio_dev); 404 struct st_sensor_data *mdata = iio_priv(indio_dev);
404 405
405 iio_device_unregister(indio_dev); 406 iio_device_unregister(indio_dev);
406 if (mdata->get_irq_data_ready(indio_dev) > 0) { 407 if (mdata->get_irq_data_ready(indio_dev) > 0)
407 st_sensors_deallocate_trigger(indio_dev); 408 st_sensors_deallocate_trigger(indio_dev);
408 st_magn_deallocate_ring(indio_dev); 409
409 } 410 st_magn_deallocate_ring(indio_dev);
410} 411}
411EXPORT_SYMBOL(st_magn_common_remove); 412EXPORT_SYMBOL(st_magn_common_remove);
412 413
diff --git a/drivers/iio/pressure/st_pressure.h b/drivers/iio/pressure/st_pressure.h
index b0b630688da6..049c21acf1f0 100644
--- a/drivers/iio/pressure/st_pressure.h
+++ b/drivers/iio/pressure/st_pressure.h
@@ -14,6 +14,7 @@
14#include <linux/types.h> 14#include <linux/types.h>
15#include <linux/iio/common/st_sensors.h> 15#include <linux/iio/common/st_sensors.h>
16 16
17#define LPS001WP_PRESS_DEV_NAME "lps001wp"
17#define LPS331AP_PRESS_DEV_NAME "lps331ap" 18#define LPS331AP_PRESS_DEV_NAME "lps331ap"
18 19
19/** 20/**
diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c
index ceebd3c27892..2da411b6925b 100644
--- a/drivers/iio/pressure/st_pressure_core.c
+++ b/drivers/iio/pressure/st_pressure_core.c
@@ -36,94 +36,200 @@
36 ST_PRESS_LSB_PER_CELSIUS) 36 ST_PRESS_LSB_PER_CELSIUS)
37#define ST_PRESS_NUMBER_DATA_CHANNELS 1 37#define ST_PRESS_NUMBER_DATA_CHANNELS 1
38 38
39/* DEFAULT VALUE FOR SENSORS */
40#define ST_PRESS_DEFAULT_OUT_XL_ADDR 0x28
41#define ST_TEMP_DEFAULT_OUT_L_ADDR 0x2b
42
43/* FULLSCALE */ 39/* FULLSCALE */
44#define ST_PRESS_FS_AVL_1260MB 1260 40#define ST_PRESS_FS_AVL_1260MB 1260
45 41
46/* CUSTOM VALUES FOR SENSOR 1 */ 42/* CUSTOM VALUES FOR LPS331AP SENSOR */
47#define ST_PRESS_1_WAI_EXP 0xbb 43#define ST_PRESS_LPS331AP_WAI_EXP 0xbb
48#define ST_PRESS_1_ODR_ADDR 0x20 44#define ST_PRESS_LPS331AP_ODR_ADDR 0x20
49#define ST_PRESS_1_ODR_MASK 0x70 45#define ST_PRESS_LPS331AP_ODR_MASK 0x70
50#define ST_PRESS_1_ODR_AVL_1HZ_VAL 0x01 46#define ST_PRESS_LPS331AP_ODR_AVL_1HZ_VAL 0x01
51#define ST_PRESS_1_ODR_AVL_7HZ_VAL 0x05 47#define ST_PRESS_LPS331AP_ODR_AVL_7HZ_VAL 0x05
52#define ST_PRESS_1_ODR_AVL_13HZ_VAL 0x06 48#define ST_PRESS_LPS331AP_ODR_AVL_13HZ_VAL 0x06
53#define ST_PRESS_1_ODR_AVL_25HZ_VAL 0x07 49#define ST_PRESS_LPS331AP_ODR_AVL_25HZ_VAL 0x07
54#define ST_PRESS_1_PW_ADDR 0x20 50#define ST_PRESS_LPS331AP_PW_ADDR 0x20
55#define ST_PRESS_1_PW_MASK 0x80 51#define ST_PRESS_LPS331AP_PW_MASK 0x80
56#define ST_PRESS_1_FS_ADDR 0x23 52#define ST_PRESS_LPS331AP_FS_ADDR 0x23
57#define ST_PRESS_1_FS_MASK 0x30 53#define ST_PRESS_LPS331AP_FS_MASK 0x30
58#define ST_PRESS_1_FS_AVL_1260_VAL 0x00 54#define ST_PRESS_LPS331AP_FS_AVL_1260_VAL 0x00
59#define ST_PRESS_1_FS_AVL_1260_GAIN ST_PRESS_KPASCAL_NANO_SCALE 55#define ST_PRESS_LPS331AP_FS_AVL_1260_GAIN ST_PRESS_KPASCAL_NANO_SCALE
60#define ST_PRESS_1_FS_AVL_TEMP_GAIN ST_PRESS_CELSIUS_NANO_SCALE 56#define ST_PRESS_LPS331AP_FS_AVL_TEMP_GAIN ST_PRESS_CELSIUS_NANO_SCALE
61#define ST_PRESS_1_BDU_ADDR 0x20 57#define ST_PRESS_LPS331AP_BDU_ADDR 0x20
62#define ST_PRESS_1_BDU_MASK 0x04 58#define ST_PRESS_LPS331AP_BDU_MASK 0x04
63#define ST_PRESS_1_DRDY_IRQ_ADDR 0x22 59#define ST_PRESS_LPS331AP_DRDY_IRQ_ADDR 0x22
64#define ST_PRESS_1_DRDY_IRQ_INT1_MASK 0x04 60#define ST_PRESS_LPS331AP_DRDY_IRQ_INT1_MASK 0x04
65#define ST_PRESS_1_DRDY_IRQ_INT2_MASK 0x20 61#define ST_PRESS_LPS331AP_DRDY_IRQ_INT2_MASK 0x20
66#define ST_PRESS_1_MULTIREAD_BIT true 62#define ST_PRESS_LPS331AP_MULTIREAD_BIT true
67#define ST_PRESS_1_TEMP_OFFSET 42500 63#define ST_PRESS_LPS331AP_TEMP_OFFSET 42500
68 64#define ST_PRESS_LPS331AP_OUT_XL_ADDR 0x28
69static const struct iio_chan_spec st_press_channels[] = { 65#define ST_TEMP_LPS331AP_OUT_L_ADDR 0x2b
70 ST_SENSORS_LSM_CHANNELS(IIO_PRESSURE, 66
67/* CUSTOM VALUES FOR LPS001WP SENSOR */
68#define ST_PRESS_LPS001WP_WAI_EXP 0xba
69#define ST_PRESS_LPS001WP_ODR_ADDR 0x20
70#define ST_PRESS_LPS001WP_ODR_MASK 0x30
71#define ST_PRESS_LPS001WP_ODR_AVL_1HZ_VAL 0x01
72#define ST_PRESS_LPS001WP_ODR_AVL_7HZ_VAL 0x02
73#define ST_PRESS_LPS001WP_ODR_AVL_13HZ_VAL 0x03
74#define ST_PRESS_LPS001WP_PW_ADDR 0x20
75#define ST_PRESS_LPS001WP_PW_MASK 0x40
76#define ST_PRESS_LPS001WP_BDU_ADDR 0x20
77#define ST_PRESS_LPS001WP_BDU_MASK 0x04
78#define ST_PRESS_LPS001WP_MULTIREAD_BIT true
79#define ST_PRESS_LPS001WP_OUT_L_ADDR 0x28
80#define ST_TEMP_LPS001WP_OUT_L_ADDR 0x2a
81
82static const struct iio_chan_spec st_press_lps331ap_channels[] = {
83 {
84 .type = IIO_PRESSURE,
85 .channel2 = IIO_NO_MOD,
86 .address = ST_PRESS_LPS331AP_OUT_XL_ADDR,
87 .scan_index = ST_SENSORS_SCAN_X,
88 .scan_type = {
89 .sign = 'u',
90 .realbits = 24,
91 .storagebits = 24,
92 .endianness = IIO_LE,
93 },
94 .info_mask_separate =
71 BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE), 95 BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
72 ST_SENSORS_SCAN_X, 0, IIO_NO_MOD, 'u', IIO_LE, 24, 24, 96 .modified = 0,
73 ST_PRESS_DEFAULT_OUT_XL_ADDR), 97 },
74 ST_SENSORS_LSM_CHANNELS(IIO_TEMP, 98 {
75 BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE) | 99 .type = IIO_TEMP,
76 BIT(IIO_CHAN_INFO_OFFSET), 100 .channel2 = IIO_NO_MOD,
77 -1, 0, IIO_NO_MOD, 's', IIO_LE, 16, 16, 101 .address = ST_TEMP_LPS331AP_OUT_L_ADDR,
78 ST_TEMP_DEFAULT_OUT_L_ADDR), 102 .scan_index = -1,
103 .scan_type = {
104 .sign = 'u',
105 .realbits = 16,
106 .storagebits = 16,
107 .endianness = IIO_LE,
108 },
109 .info_mask_separate =
110 BIT(IIO_CHAN_INFO_RAW) |
111 BIT(IIO_CHAN_INFO_SCALE) |
112 BIT(IIO_CHAN_INFO_OFFSET),
113 .modified = 0,
114 },
115 IIO_CHAN_SOFT_TIMESTAMP(1)
116};
117
118static const struct iio_chan_spec st_press_lps001wp_channels[] = {
119 {
120 .type = IIO_PRESSURE,
121 .channel2 = IIO_NO_MOD,
122 .address = ST_PRESS_LPS001WP_OUT_L_ADDR,
123 .scan_index = ST_SENSORS_SCAN_X,
124 .scan_type = {
125 .sign = 'u',
126 .realbits = 16,
127 .storagebits = 16,
128 .endianness = IIO_LE,
129 },
130 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
131 .modified = 0,
132 },
133 {
134 .type = IIO_TEMP,
135 .channel2 = IIO_NO_MOD,
136 .address = ST_TEMP_LPS001WP_OUT_L_ADDR,
137 .scan_index = -1,
138 .scan_type = {
139 .sign = 'u',
140 .realbits = 16,
141 .storagebits = 16,
142 .endianness = IIO_LE,
143 },
144 .info_mask_separate =
145 BIT(IIO_CHAN_INFO_RAW) |
146 BIT(IIO_CHAN_INFO_OFFSET),
147 .modified = 0,
148 },
79 IIO_CHAN_SOFT_TIMESTAMP(1) 149 IIO_CHAN_SOFT_TIMESTAMP(1)
80}; 150};
81 151
82static const struct st_sensors st_press_sensors[] = { 152static const struct st_sensors st_press_sensors[] = {
83 { 153 {
84 .wai = ST_PRESS_1_WAI_EXP, 154 .wai = ST_PRESS_LPS331AP_WAI_EXP,
85 .sensors_supported = { 155 .sensors_supported = {
86 [0] = LPS331AP_PRESS_DEV_NAME, 156 [0] = LPS331AP_PRESS_DEV_NAME,
87 }, 157 },
88 .ch = (struct iio_chan_spec *)st_press_channels, 158 .ch = (struct iio_chan_spec *)st_press_lps331ap_channels,
159 .num_ch = ARRAY_SIZE(st_press_lps331ap_channels),
89 .odr = { 160 .odr = {
90 .addr = ST_PRESS_1_ODR_ADDR, 161 .addr = ST_PRESS_LPS331AP_ODR_ADDR,
91 .mask = ST_PRESS_1_ODR_MASK, 162 .mask = ST_PRESS_LPS331AP_ODR_MASK,
92 .odr_avl = { 163 .odr_avl = {
93 { 1, ST_PRESS_1_ODR_AVL_1HZ_VAL, }, 164 { 1, ST_PRESS_LPS331AP_ODR_AVL_1HZ_VAL, },
94 { 7, ST_PRESS_1_ODR_AVL_7HZ_VAL, }, 165 { 7, ST_PRESS_LPS331AP_ODR_AVL_7HZ_VAL, },
95 { 13, ST_PRESS_1_ODR_AVL_13HZ_VAL, }, 166 { 13, ST_PRESS_LPS331AP_ODR_AVL_13HZ_VAL, },
96 { 25, ST_PRESS_1_ODR_AVL_25HZ_VAL, }, 167 { 25, ST_PRESS_LPS331AP_ODR_AVL_25HZ_VAL, },
97 }, 168 },
98 }, 169 },
99 .pw = { 170 .pw = {
100 .addr = ST_PRESS_1_PW_ADDR, 171 .addr = ST_PRESS_LPS331AP_PW_ADDR,
101 .mask = ST_PRESS_1_PW_MASK, 172 .mask = ST_PRESS_LPS331AP_PW_MASK,
102 .value_on = ST_SENSORS_DEFAULT_POWER_ON_VALUE, 173 .value_on = ST_SENSORS_DEFAULT_POWER_ON_VALUE,
103 .value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE, 174 .value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
104 }, 175 },
105 .fs = { 176 .fs = {
106 .addr = ST_PRESS_1_FS_ADDR, 177 .addr = ST_PRESS_LPS331AP_FS_ADDR,
107 .mask = ST_PRESS_1_FS_MASK, 178 .mask = ST_PRESS_LPS331AP_FS_MASK,
108 .fs_avl = { 179 .fs_avl = {
109 [0] = { 180 [0] = {
110 .num = ST_PRESS_FS_AVL_1260MB, 181 .num = ST_PRESS_FS_AVL_1260MB,
111 .value = ST_PRESS_1_FS_AVL_1260_VAL, 182 .value = ST_PRESS_LPS331AP_FS_AVL_1260_VAL,
112 .gain = ST_PRESS_1_FS_AVL_1260_GAIN, 183 .gain = ST_PRESS_LPS331AP_FS_AVL_1260_GAIN,
113 .gain2 = ST_PRESS_1_FS_AVL_TEMP_GAIN, 184 .gain2 = ST_PRESS_LPS331AP_FS_AVL_TEMP_GAIN,
114 }, 185 },
115 }, 186 },
116 }, 187 },
117 .bdu = { 188 .bdu = {
118 .addr = ST_PRESS_1_BDU_ADDR, 189 .addr = ST_PRESS_LPS331AP_BDU_ADDR,
119 .mask = ST_PRESS_1_BDU_MASK, 190 .mask = ST_PRESS_LPS331AP_BDU_MASK,
191 },
192 .drdy_irq = {
193 .addr = ST_PRESS_LPS331AP_DRDY_IRQ_ADDR,
194 .mask_int1 = ST_PRESS_LPS331AP_DRDY_IRQ_INT1_MASK,
195 .mask_int2 = ST_PRESS_LPS331AP_DRDY_IRQ_INT2_MASK,
196 },
197 .multi_read_bit = ST_PRESS_LPS331AP_MULTIREAD_BIT,
198 .bootime = 2,
199 },
200 {
201 .wai = ST_PRESS_LPS001WP_WAI_EXP,
202 .sensors_supported = {
203 [0] = LPS001WP_PRESS_DEV_NAME,
204 },
205 .ch = (struct iio_chan_spec *)st_press_lps001wp_channels,
206 .num_ch = ARRAY_SIZE(st_press_lps001wp_channels),
207 .odr = {
208 .addr = ST_PRESS_LPS001WP_ODR_ADDR,
209 .mask = ST_PRESS_LPS001WP_ODR_MASK,
210 .odr_avl = {
211 { 1, ST_PRESS_LPS001WP_ODR_AVL_1HZ_VAL, },
212 { 7, ST_PRESS_LPS001WP_ODR_AVL_7HZ_VAL, },
213 { 13, ST_PRESS_LPS001WP_ODR_AVL_13HZ_VAL, },
214 },
215 },
216 .pw = {
217 .addr = ST_PRESS_LPS001WP_PW_ADDR,
218 .mask = ST_PRESS_LPS001WP_PW_MASK,
219 .value_on = ST_SENSORS_DEFAULT_POWER_ON_VALUE,
220 .value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
221 },
222 .fs = {
223 .addr = 0,
224 },
225 .bdu = {
226 .addr = ST_PRESS_LPS001WP_BDU_ADDR,
227 .mask = ST_PRESS_LPS001WP_BDU_MASK,
120 }, 228 },
121 .drdy_irq = { 229 .drdy_irq = {
122 .addr = ST_PRESS_1_DRDY_IRQ_ADDR, 230 .addr = 0,
123 .mask_int1 = ST_PRESS_1_DRDY_IRQ_INT1_MASK,
124 .mask_int2 = ST_PRESS_1_DRDY_IRQ_INT2_MASK,
125 }, 231 },
126 .multi_read_bit = ST_PRESS_1_MULTIREAD_BIT, 232 .multi_read_bit = ST_PRESS_LPS001WP_MULTIREAD_BIT,
127 .bootime = 2, 233 .bootime = 2,
128 }, 234 },
129}; 235};
@@ -210,41 +316,46 @@ static const struct iio_trigger_ops st_press_trigger_ops = {
210int st_press_common_probe(struct iio_dev *indio_dev, 316int st_press_common_probe(struct iio_dev *indio_dev,
211 struct st_sensors_platform_data *plat_data) 317 struct st_sensors_platform_data *plat_data)
212{ 318{
213 int err;
214 struct st_sensor_data *pdata = iio_priv(indio_dev); 319 struct st_sensor_data *pdata = iio_priv(indio_dev);
320 int irq = pdata->get_irq_data_ready(indio_dev);
321 int err;
215 322
216 indio_dev->modes = INDIO_DIRECT_MODE; 323 indio_dev->modes = INDIO_DIRECT_MODE;
217 indio_dev->info = &press_info; 324 indio_dev->info = &press_info;
218 325
219 err = st_sensors_check_device_support(indio_dev, 326 err = st_sensors_check_device_support(indio_dev,
220 ARRAY_SIZE(st_press_sensors), st_press_sensors); 327 ARRAY_SIZE(st_press_sensors),
328 st_press_sensors);
221 if (err < 0) 329 if (err < 0)
222 goto st_press_common_probe_error; 330 return err;
223 331
224 pdata->num_data_channels = ST_PRESS_NUMBER_DATA_CHANNELS; 332 pdata->num_data_channels = ST_PRESS_NUMBER_DATA_CHANNELS;
225 pdata->multiread_bit = pdata->sensor->multi_read_bit; 333 pdata->multiread_bit = pdata->sensor->multi_read_bit;
226 indio_dev->channels = pdata->sensor->ch; 334 indio_dev->channels = pdata->sensor->ch;
227 indio_dev->num_channels = ARRAY_SIZE(st_press_channels); 335 indio_dev->num_channels = pdata->sensor->num_ch;
336
337 if (pdata->sensor->fs.addr != 0)
338 pdata->current_fullscale = (struct st_sensor_fullscale_avl *)
339 &pdata->sensor->fs.fs_avl[0];
228 340
229 pdata->current_fullscale = (struct st_sensor_fullscale_avl *)
230 &pdata->sensor->fs.fs_avl[0];
231 pdata->odr = pdata->sensor->odr.odr_avl[0].hz; 341 pdata->odr = pdata->sensor->odr.odr_avl[0].hz;
232 342
233 if (!plat_data) 343 /* Some devices don't support a data ready pin. */
344 if (!plat_data && pdata->sensor->drdy_irq.addr)
234 plat_data = 345 plat_data =
235 (struct st_sensors_platform_data *)&default_press_pdata; 346 (struct st_sensors_platform_data *)&default_press_pdata;
236 347
237 err = st_sensors_init_sensor(indio_dev, plat_data); 348 err = st_sensors_init_sensor(indio_dev, plat_data);
238 if (err < 0) 349 if (err < 0)
239 goto st_press_common_probe_error; 350 return err;
240 351
241 if (pdata->get_irq_data_ready(indio_dev) > 0) { 352 err = st_press_allocate_ring(indio_dev);
242 err = st_press_allocate_ring(indio_dev); 353 if (err < 0)
243 if (err < 0) 354 return err;
244 goto st_press_common_probe_error;
245 355
356 if (irq > 0) {
246 err = st_sensors_allocate_trigger(indio_dev, 357 err = st_sensors_allocate_trigger(indio_dev,
247 ST_PRESS_TRIGGER_OPS); 358 ST_PRESS_TRIGGER_OPS);
248 if (err < 0) 359 if (err < 0)
249 goto st_press_probe_trigger_error; 360 goto st_press_probe_trigger_error;
250 } 361 }
@@ -256,12 +367,11 @@ int st_press_common_probe(struct iio_dev *indio_dev,
256 return err; 367 return err;
257 368
258st_press_device_register_error: 369st_press_device_register_error:
259 if (pdata->get_irq_data_ready(indio_dev) > 0) 370 if (irq > 0)
260 st_sensors_deallocate_trigger(indio_dev); 371 st_sensors_deallocate_trigger(indio_dev);
261st_press_probe_trigger_error: 372st_press_probe_trigger_error:
262 if (pdata->get_irq_data_ready(indio_dev) > 0) 373 st_press_deallocate_ring(indio_dev);
263 st_press_deallocate_ring(indio_dev); 374
264st_press_common_probe_error:
265 return err; 375 return err;
266} 376}
267EXPORT_SYMBOL(st_press_common_probe); 377EXPORT_SYMBOL(st_press_common_probe);
@@ -271,10 +381,10 @@ void st_press_common_remove(struct iio_dev *indio_dev)
271 struct st_sensor_data *pdata = iio_priv(indio_dev); 381 struct st_sensor_data *pdata = iio_priv(indio_dev);
272 382
273 iio_device_unregister(indio_dev); 383 iio_device_unregister(indio_dev);
274 if (pdata->get_irq_data_ready(indio_dev) > 0) { 384 if (pdata->get_irq_data_ready(indio_dev) > 0)
275 st_sensors_deallocate_trigger(indio_dev); 385 st_sensors_deallocate_trigger(indio_dev);
276 st_press_deallocate_ring(indio_dev); 386
277 } 387 st_press_deallocate_ring(indio_dev);
278} 388}
279EXPORT_SYMBOL(st_press_common_remove); 389EXPORT_SYMBOL(st_press_common_remove);
280 390
diff --git a/drivers/iio/pressure/st_pressure_i2c.c b/drivers/iio/pressure/st_pressure_i2c.c
index 08aac5e6251d..51eab7fcb194 100644
--- a/drivers/iio/pressure/st_pressure_i2c.c
+++ b/drivers/iio/pressure/st_pressure_i2c.c
@@ -49,6 +49,7 @@ static int st_press_i2c_remove(struct i2c_client *client)
49} 49}
50 50
51static const struct i2c_device_id st_press_id_table[] = { 51static const struct i2c_device_id st_press_id_table[] = {
52 { LPS001WP_PRESS_DEV_NAME },
52 { LPS331AP_PRESS_DEV_NAME }, 53 { LPS331AP_PRESS_DEV_NAME },
53 {}, 54 {},
54}; 55};
diff --git a/drivers/iio/temperature/tmp006.c b/drivers/iio/temperature/tmp006.c
index 64ccde3f1f7a..4e950979f43e 100644
--- a/drivers/iio/temperature/tmp006.c
+++ b/drivers/iio/temperature/tmp006.c
@@ -70,12 +70,16 @@ static int tmp006_read_measurement(struct tmp006_data *data, u8 reg)
70 return i2c_smbus_read_word_swapped(data->client, reg); 70 return i2c_smbus_read_word_swapped(data->client, reg);
71} 71}
72 72
73static const int tmp006_freqs[5][2] = { {4, 0}, {2, 0}, {1, 0},
74 {0, 500000}, {0, 250000} };
75
73static int tmp006_read_raw(struct iio_dev *indio_dev, 76static int tmp006_read_raw(struct iio_dev *indio_dev,
74 struct iio_chan_spec const *channel, int *val, 77 struct iio_chan_spec const *channel, int *val,
75 int *val2, long mask) 78 int *val2, long mask)
76{ 79{
77 struct tmp006_data *data = iio_priv(indio_dev); 80 struct tmp006_data *data = iio_priv(indio_dev);
78 s32 ret; 81 s32 ret;
82 int cr;
79 83
80 switch (mask) { 84 switch (mask) {
81 case IIO_CHAN_INFO_RAW: 85 case IIO_CHAN_INFO_RAW:
@@ -106,6 +110,12 @@ static int tmp006_read_raw(struct iio_dev *indio_dev,
106 break; 110 break;
107 } 111 }
108 return IIO_VAL_INT_PLUS_MICRO; 112 return IIO_VAL_INT_PLUS_MICRO;
113 case IIO_CHAN_INFO_SAMP_FREQ:
114 cr = (data->config & TMP006_CONFIG_CR_MASK)
115 >> TMP006_CONFIG_CR_SHIFT;
116 *val = tmp006_freqs[cr][0];
117 *val2 = tmp006_freqs[cr][1];
118 return IIO_VAL_INT_PLUS_MICRO;
109 default: 119 default:
110 break; 120 break;
111 } 121 }
@@ -113,48 +123,32 @@ static int tmp006_read_raw(struct iio_dev *indio_dev,
113 return -EINVAL; 123 return -EINVAL;
114} 124}
115 125
116static const char * const tmp006_freqs[] = { "4", "2", "1", "0.5", "0.25" }; 126static int tmp006_write_raw(struct iio_dev *indio_dev,
117 127 struct iio_chan_spec const *chan,
118static ssize_t tmp006_show_freq(struct device *dev, 128 int val,
119 struct device_attribute *attr, char *buf) 129 int val2,
120{ 130 long mask)
121 struct tmp006_data *data = iio_priv(dev_to_iio_dev(dev));
122 int cr = (data->config & TMP006_CONFIG_CR_MASK)
123 >> TMP006_CONFIG_CR_SHIFT;
124 return sprintf(buf, "%s\n", tmp006_freqs[cr]);
125}
126
127static ssize_t tmp006_store_freq(struct device *dev,
128 struct device_attribute *attr,
129 const char *buf, size_t len)
130{ 131{
131 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
132 struct tmp006_data *data = iio_priv(indio_dev); 132 struct tmp006_data *data = iio_priv(indio_dev);
133 int i; 133 int i;
134 bool found = false;
135 134
136 for (i = 0; i < ARRAY_SIZE(tmp006_freqs); i++) 135 for (i = 0; i < ARRAY_SIZE(tmp006_freqs); i++)
137 if (sysfs_streq(buf, tmp006_freqs[i])) { 136 if ((val == tmp006_freqs[i][0]) &&
138 found = true; 137 (val2 == tmp006_freqs[i][1])) {
139 break; 138 data->config &= ~TMP006_CONFIG_CR_MASK;
140 } 139 data->config |= i << TMP006_CONFIG_CR_SHIFT;
141 if (!found)
142 return -EINVAL;
143 140
144 data->config &= ~TMP006_CONFIG_CR_MASK; 141 return i2c_smbus_write_word_swapped(data->client,
145 data->config |= i << TMP006_CONFIG_CR_SHIFT; 142 TMP006_CONFIG,
143 data->config);
146 144
147 return i2c_smbus_write_word_swapped(data->client, TMP006_CONFIG, 145 }
148 data->config); 146 return -EINVAL;
149} 147}
150 148
151static IIO_DEV_ATTR_SAMP_FREQ(S_IRUGO | S_IWUSR,
152 tmp006_show_freq, tmp006_store_freq);
153
154static IIO_CONST_ATTR(sampling_frequency_available, "4 2 1 0.5 0.25"); 149static IIO_CONST_ATTR(sampling_frequency_available, "4 2 1 0.5 0.25");
155 150
156static struct attribute *tmp006_attributes[] = { 151static struct attribute *tmp006_attributes[] = {
157 &iio_dev_attr_sampling_frequency.dev_attr.attr,
158 &iio_const_attr_sampling_frequency_available.dev_attr.attr, 152 &iio_const_attr_sampling_frequency_available.dev_attr.attr,
159 NULL 153 NULL
160}; 154};
@@ -168,16 +162,19 @@ static const struct iio_chan_spec tmp006_channels[] = {
168 .type = IIO_VOLTAGE, 162 .type = IIO_VOLTAGE,
169 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | 163 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
170 BIT(IIO_CHAN_INFO_SCALE), 164 BIT(IIO_CHAN_INFO_SCALE),
165 .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ),
171 }, 166 },
172 { 167 {
173 .type = IIO_TEMP, 168 .type = IIO_TEMP,
174 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | 169 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
175 BIT(IIO_CHAN_INFO_SCALE), 170 BIT(IIO_CHAN_INFO_SCALE),
171 .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ),
176 } 172 }
177}; 173};
178 174
179static const struct iio_info tmp006_info = { 175static const struct iio_info tmp006_info = {
180 .read_raw = tmp006_read_raw, 176 .read_raw = tmp006_read_raw,
177 .write_raw = tmp006_write_raw,
181 .attrs = &tmp006_attribute_group, 178 .attrs = &tmp006_attribute_group,
182 .driver_module = THIS_MODULE, 179 .driver_module = THIS_MODULE,
183}; 180};
diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c b/drivers/input/touchscreen/ti_am335x_tsc.c
index e1c5300cacfc..24e625c0b531 100644
--- a/drivers/input/touchscreen/ti_am335x_tsc.c
+++ b/drivers/input/touchscreen/ti_am335x_tsc.c
@@ -52,6 +52,7 @@ struct titsc {
52 u32 config_inp[4]; 52 u32 config_inp[4];
53 u32 bit_xp, bit_xn, bit_yp, bit_yn; 53 u32 bit_xp, bit_xn, bit_yp, bit_yn;
54 u32 inp_xp, inp_xn, inp_yp, inp_yn; 54 u32 inp_xp, inp_xn, inp_yp, inp_yn;
55 u32 step_mask;
55}; 56};
56 57
57static unsigned int titsc_readl(struct titsc *ts, unsigned int reg) 58static unsigned int titsc_readl(struct titsc *ts, unsigned int reg)
@@ -196,7 +197,8 @@ static void titsc_step_config(struct titsc *ts_dev)
196 197
197 /* The steps1 … end and bit 0 for TS_Charge */ 198 /* The steps1 … end and bit 0 for TS_Charge */
198 stepenable = (1 << (end_step + 2)) - 1; 199 stepenable = (1 << (end_step + 2)) - 1;
199 am335x_tsc_se_set(ts_dev->mfd_tscadc, stepenable); 200 ts_dev->step_mask = stepenable;
201 am335x_tsc_se_set(ts_dev->mfd_tscadc, ts_dev->step_mask);
200} 202}
201 203
202static void titsc_read_coordinates(struct titsc *ts_dev, 204static void titsc_read_coordinates(struct titsc *ts_dev,
@@ -260,6 +262,10 @@ static irqreturn_t titsc_irq(int irq, void *dev)
260 unsigned int fsm; 262 unsigned int fsm;
261 263
262 status = titsc_readl(ts_dev, REG_IRQSTATUS); 264 status = titsc_readl(ts_dev, REG_IRQSTATUS);
265 /*
266 * ADC and touchscreen share the IRQ line.
267 * FIFO1 interrupts are used by ADC. Handle FIFO0 IRQs here only
268 */
263 if (status & IRQENB_FIFO0THRES) { 269 if (status & IRQENB_FIFO0THRES) {
264 270
265 titsc_read_coordinates(ts_dev, &x, &y, &z1, &z2); 271 titsc_read_coordinates(ts_dev, &x, &y, &z1, &z2);
@@ -316,7 +322,7 @@ static irqreturn_t titsc_irq(int irq, void *dev)
316 322
317 if (irqclr) { 323 if (irqclr) {
318 titsc_writel(ts_dev, REG_IRQSTATUS, irqclr); 324 titsc_writel(ts_dev, REG_IRQSTATUS, irqclr);
319 am335x_tsc_se_update(ts_dev->mfd_tscadc); 325 am335x_tsc_se_set(ts_dev->mfd_tscadc, ts_dev->step_mask);
320 return IRQ_HANDLED; 326 return IRQ_HANDLED;
321 } 327 }
322 return IRQ_NONE; 328 return IRQ_NONE;
@@ -389,7 +395,7 @@ static int titsc_probe(struct platform_device *pdev)
389 } 395 }
390 396
391 err = request_irq(ts_dev->irq, titsc_irq, 397 err = request_irq(ts_dev->irq, titsc_irq,
392 0, pdev->dev.driver->name, ts_dev); 398 IRQF_SHARED, pdev->dev.driver->name, ts_dev);
393 if (err) { 399 if (err) {
394 dev_err(&pdev->dev, "failed to allocate irq.\n"); 400 dev_err(&pdev->dev, "failed to allocate irq.\n");
395 goto err_free_mem; 401 goto err_free_mem;
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index 5b8f0f6c9938..aae86ddd658b 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -146,11 +146,7 @@ static irqreturn_t lis3l02dq_trigger_handler(int irq, void *p)
146 if (!bitmap_empty(indio_dev->active_scan_mask, indio_dev->masklength)) 146 if (!bitmap_empty(indio_dev->active_scan_mask, indio_dev->masklength))
147 len = lis3l02dq_get_buffer_element(indio_dev, data); 147 len = lis3l02dq_get_buffer_element(indio_dev, data);
148 148
149 /* Guaranteed to be aligned with 8 byte boundary */ 149 iio_push_to_buffers_with_timestamp(indio_dev, data, pf->timestamp);
150 if (indio_dev->scan_timestamp)
151 *(s64 *)((u8 *)data + ALIGN(len, sizeof(s64)))
152 = pf->timestamp;
153 iio_push_to_buffers(indio_dev, (u8 *)data);
154 150
155 kfree(data); 151 kfree(data);
156done: 152done:
diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c
index 48a25ba290f5..6a9ca20ea22d 100644
--- a/drivers/staging/iio/accel/sca3000_core.c
+++ b/drivers/staging/iio/accel/sca3000_core.c
@@ -624,9 +624,9 @@ static ssize_t sca3000_set_frequency(struct device *dev,
624 struct sca3000_state *st = iio_priv(indio_dev); 624 struct sca3000_state *st = iio_priv(indio_dev);
625 int ret, base_freq = 0; 625 int ret, base_freq = 0;
626 int ctrlval; 626 int ctrlval;
627 long val; 627 int val;
628 628
629 ret = strict_strtol(buf, 10, &val); 629 ret = kstrtoint(buf, 10, &val);
630 if (ret) 630 if (ret)
631 return ret; 631 return ret;
632 632
@@ -931,12 +931,12 @@ static ssize_t sca3000_set_free_fall_mode(struct device *dev,
931{ 931{
932 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 932 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
933 struct sca3000_state *st = iio_priv(indio_dev); 933 struct sca3000_state *st = iio_priv(indio_dev);
934 long val; 934 u8 val;
935 int ret; 935 int ret;
936 u8 protect_mask = SCA3000_FREE_FALL_DETECT; 936 u8 protect_mask = SCA3000_FREE_FALL_DETECT;
937 937
938 mutex_lock(&st->lock); 938 mutex_lock(&st->lock);
939 ret = strict_strtol(buf, 10, &val); 939 ret = kstrtou8(buf, 10, &val);
940 if (ret) 940 if (ret)
941 goto error_ret; 941 goto error_ret;
942 942
diff --git a/drivers/staging/iio/accel/sca3000_ring.c b/drivers/staging/iio/accel/sca3000_ring.c
index 3e5e860aa38e..0f2ee3373d9a 100644
--- a/drivers/staging/iio/accel/sca3000_ring.c
+++ b/drivers/staging/iio/accel/sca3000_ring.c
@@ -177,11 +177,11 @@ static ssize_t sca3000_set_ring_int(struct device *dev,
177 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 177 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
178 struct sca3000_state *st = iio_priv(indio_dev); 178 struct sca3000_state *st = iio_priv(indio_dev);
179 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 179 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
180 long val; 180 u8 val;
181 int ret; 181 int ret;
182 182
183 mutex_lock(&st->lock); 183 mutex_lock(&st->lock);
184 ret = strict_strtol(buf, 10, &val); 184 ret = kstrtou8(buf, 10, &val);
185 if (ret) 185 if (ret)
186 goto error_ret; 186 goto error_ret;
187 ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_INT_MASK, 1); 187 ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_INT_MASK, 1);
diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
index 3283e2829536..83bb44b38152 100644
--- a/drivers/staging/iio/adc/ad7192.c
+++ b/drivers/staging/iio/adc/ad7192.c
@@ -623,17 +623,17 @@ static int ad7192_probe(struct spi_device *spi)
623 return -ENODEV; 623 return -ENODEV;
624 } 624 }
625 625
626 indio_dev = iio_device_alloc(sizeof(*st)); 626 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
627 if (indio_dev == NULL) 627 if (indio_dev == NULL)
628 return -ENOMEM; 628 return -ENOMEM;
629 629
630 st = iio_priv(indio_dev); 630 st = iio_priv(indio_dev);
631 631
632 st->reg = regulator_get(&spi->dev, "vcc"); 632 st->reg = devm_regulator_get(&spi->dev, "vcc");
633 if (!IS_ERR(st->reg)) { 633 if (!IS_ERR(st->reg)) {
634 ret = regulator_enable(st->reg); 634 ret = regulator_enable(st->reg);
635 if (ret) 635 if (ret)
636 goto error_put_reg; 636 return ret;
637 637
638 voltage_uv = regulator_get_voltage(st->reg); 638 voltage_uv = regulator_get_voltage(st->reg);
639 } 639 }
@@ -677,11 +677,6 @@ error_remove_trigger:
677error_disable_reg: 677error_disable_reg:
678 if (!IS_ERR(st->reg)) 678 if (!IS_ERR(st->reg))
679 regulator_disable(st->reg); 679 regulator_disable(st->reg);
680error_put_reg:
681 if (!IS_ERR(st->reg))
682 regulator_put(st->reg);
683
684 iio_device_free(indio_dev);
685 680
686 return ret; 681 return ret;
687} 682}
@@ -694,10 +689,8 @@ static int ad7192_remove(struct spi_device *spi)
694 iio_device_unregister(indio_dev); 689 iio_device_unregister(indio_dev);
695 ad_sd_cleanup_buffer_and_trigger(indio_dev); 690 ad_sd_cleanup_buffer_and_trigger(indio_dev);
696 691
697 if (!IS_ERR(st->reg)) { 692 if (!IS_ERR(st->reg))
698 regulator_disable(st->reg); 693 regulator_disable(st->reg);
699 regulator_put(st->reg);
700 }
701 694
702 return 0; 695 return 0;
703} 696}
diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c
index c19618bc37c4..e7191e44a970 100644
--- a/drivers/staging/iio/adc/ad7280a.c
+++ b/drivers/staging/iio/adc/ad7280a.c
@@ -835,8 +835,9 @@ static int ad7280_probe(struct spi_device *spi)
835 int ret; 835 int ret;
836 const unsigned short tACQ_ns[4] = {465, 1010, 1460, 1890}; 836 const unsigned short tACQ_ns[4] = {465, 1010, 1460, 1890};
837 const unsigned short nAVG[4] = {1, 2, 4, 8}; 837 const unsigned short nAVG[4] = {1, 2, 4, 8};
838 struct iio_dev *indio_dev = iio_device_alloc(sizeof(*st)); 838 struct iio_dev *indio_dev;
839 839
840 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
840 if (indio_dev == NULL) 841 if (indio_dev == NULL)
841 return -ENOMEM; 842 return -ENOMEM;
842 843
@@ -860,7 +861,7 @@ static int ad7280_probe(struct spi_device *spi)
860 861
861 ret = ad7280_chain_setup(st); 862 ret = ad7280_chain_setup(st);
862 if (ret < 0) 863 if (ret < 0)
863 goto error_free_device; 864 return ret;
864 865
865 st->slave_num = ret; 866 st->slave_num = ret;
866 st->scan_cnt = (st->slave_num + 1) * AD7280A_NUM_CH; 867 st->scan_cnt = (st->slave_num + 1) * AD7280A_NUM_CH;
@@ -891,7 +892,7 @@ static int ad7280_probe(struct spi_device *spi)
891 892
892 ret = ad7280_channel_init(st); 893 ret = ad7280_channel_init(st);
893 if (ret < 0) 894 if (ret < 0)
894 goto error_free_device; 895 return ret;
895 896
896 indio_dev->num_channels = ret; 897 indio_dev->num_channels = ret;
897 indio_dev->channels = st->channels; 898 indio_dev->channels = st->channels;
@@ -940,9 +941,6 @@ error_free_attr:
940error_free_channels: 941error_free_channels:
941 kfree(st->channels); 942 kfree(st->channels);
942 943
943error_free_device:
944 iio_device_free(indio_dev);
945
946 return ret; 944 return ret;
947} 945}
948 946
@@ -960,7 +958,6 @@ static int ad7280_remove(struct spi_device *spi)
960 958
961 kfree(st->channels); 959 kfree(st->channels);
962 kfree(st->iio_attr); 960 kfree(st->iio_attr);
963 iio_device_free(indio_dev);
964 961
965 return 0; 962 return 0;
966} 963}
diff --git a/drivers/staging/iio/adc/ad7291.c b/drivers/staging/iio/adc/ad7291.c
index a2e61c2fc8d1..1dae1efe41c7 100644
--- a/drivers/staging/iio/adc/ad7291.c
+++ b/drivers/staging/iio/adc/ad7291.c
@@ -528,21 +528,19 @@ static int ad7291_probe(struct i2c_client *client,
528 struct iio_dev *indio_dev; 528 struct iio_dev *indio_dev;
529 int ret = 0; 529 int ret = 0;
530 530
531 indio_dev = iio_device_alloc(sizeof(*chip)); 531 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip));
532 if (indio_dev == NULL) { 532 if (!indio_dev)
533 ret = -ENOMEM; 533 return -ENOMEM;
534 goto error_ret;
535 }
536 chip = iio_priv(indio_dev); 534 chip = iio_priv(indio_dev);
537 535
538 if (pdata && pdata->use_external_ref) { 536 if (pdata && pdata->use_external_ref) {
539 chip->reg = regulator_get(&client->dev, "vref"); 537 chip->reg = devm_regulator_get(&client->dev, "vref");
540 if (IS_ERR(chip->reg)) 538 if (IS_ERR(chip->reg))
541 goto error_free; 539 return ret;
542 540
543 ret = regulator_enable(chip->reg); 541 ret = regulator_enable(chip->reg);
544 if (ret) 542 if (ret)
545 goto error_put_reg; 543 return ret;
546 } 544 }
547 545
548 mutex_init(&chip->state_lock); 546 mutex_init(&chip->state_lock);
@@ -601,12 +599,7 @@ error_unreg_irq:
601error_disable_reg: 599error_disable_reg:
602 if (chip->reg) 600 if (chip->reg)
603 regulator_disable(chip->reg); 601 regulator_disable(chip->reg);
604error_put_reg: 602
605 if (chip->reg)
606 regulator_put(chip->reg);
607error_free:
608 iio_device_free(indio_dev);
609error_ret:
610 return ret; 603 return ret;
611} 604}
612 605
@@ -620,12 +613,8 @@ static int ad7291_remove(struct i2c_client *client)
620 if (client->irq) 613 if (client->irq)
621 free_irq(client->irq, indio_dev); 614 free_irq(client->irq, indio_dev);
622 615
623 if (chip->reg) { 616 if (chip->reg)
624 regulator_disable(chip->reg); 617 regulator_disable(chip->reg);
625 regulator_put(chip->reg);
626 }
627
628 iio_device_free(indio_dev);
629 618
630 return 0; 619 return 0;
631} 620}
diff --git a/drivers/staging/iio/adc/ad7606_core.c b/drivers/staging/iio/adc/ad7606_core.c
index 72868ceda360..f042027b5291 100644
--- a/drivers/staging/iio/adc/ad7606_core.c
+++ b/drivers/staging/iio/adc/ad7606_core.c
@@ -425,8 +425,7 @@ static irqreturn_t ad7606_interrupt(int irq, void *dev_id)
425 struct ad7606_state *st = iio_priv(indio_dev); 425 struct ad7606_state *st = iio_priv(indio_dev);
426 426
427 if (iio_buffer_enabled(indio_dev)) { 427 if (iio_buffer_enabled(indio_dev)) {
428 if (!work_pending(&st->poll_work)) 428 schedule_work(&st->poll_work);
429 schedule_work(&st->poll_work);
430 } else { 429 } else {
431 st->done = true; 430 st->done = true;
432 wake_up_interruptible(&st->wq_data_avail); 431 wake_up_interruptible(&st->wq_data_avail);
@@ -466,12 +465,11 @@ struct iio_dev *ad7606_probe(struct device *dev, int irq,
466 struct ad7606_platform_data *pdata = dev->platform_data; 465 struct ad7606_platform_data *pdata = dev->platform_data;
467 struct ad7606_state *st; 466 struct ad7606_state *st;
468 int ret; 467 int ret;
469 struct iio_dev *indio_dev = iio_device_alloc(sizeof(*st)); 468 struct iio_dev *indio_dev;
470 469
471 if (indio_dev == NULL) { 470 indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
472 ret = -ENOMEM; 471 if (!indio_dev)
473 goto error_ret; 472 return ERR_PTR(-ENOMEM);
474 }
475 473
476 st = iio_priv(indio_dev); 474 st = iio_priv(indio_dev);
477 475
@@ -489,11 +487,11 @@ struct iio_dev *ad7606_probe(struct device *dev, int irq,
489 st->oversampling = pdata->default_os; 487 st->oversampling = pdata->default_os;
490 } 488 }
491 489
492 st->reg = regulator_get(dev, "vcc"); 490 st->reg = devm_regulator_get(dev, "vcc");
493 if (!IS_ERR(st->reg)) { 491 if (!IS_ERR(st->reg)) {
494 ret = regulator_enable(st->reg); 492 ret = regulator_enable(st->reg);
495 if (ret) 493 if (ret)
496 goto error_put_reg; 494 return ERR_PTR(ret);
497 } 495 }
498 496
499 st->pdata = pdata; 497 st->pdata = pdata;
@@ -554,11 +552,6 @@ error_free_gpios:
554error_disable_reg: 552error_disable_reg:
555 if (!IS_ERR(st->reg)) 553 if (!IS_ERR(st->reg))
556 regulator_disable(st->reg); 554 regulator_disable(st->reg);
557error_put_reg:
558 if (!IS_ERR(st->reg))
559 regulator_put(st->reg);
560 iio_device_free(indio_dev);
561error_ret:
562 return ERR_PTR(ret); 555 return ERR_PTR(ret);
563} 556}
564 557
@@ -570,13 +563,10 @@ int ad7606_remove(struct iio_dev *indio_dev, int irq)
570 ad7606_ring_cleanup(indio_dev); 563 ad7606_ring_cleanup(indio_dev);
571 564
572 free_irq(irq, indio_dev); 565 free_irq(irq, indio_dev);
573 if (!IS_ERR(st->reg)) { 566 if (!IS_ERR(st->reg))
574 regulator_disable(st->reg); 567 regulator_disable(st->reg);
575 regulator_put(st->reg);
576 }
577 568
578 ad7606_free_gpios(st); 569 ad7606_free_gpios(st);
579 iio_device_free(indio_dev);
580 570
581 return 0; 571 return 0;
582} 572}
diff --git a/drivers/staging/iio/adc/ad7606_ring.c b/drivers/staging/iio/adc/ad7606_ring.c
index 2b25cb07fe41..3bf174cb19b1 100644
--- a/drivers/staging/iio/adc/ad7606_ring.c
+++ b/drivers/staging/iio/adc/ad7606_ring.c
@@ -46,7 +46,6 @@ static void ad7606_poll_bh_to_ring(struct work_struct *work_s)
46 struct ad7606_state *st = container_of(work_s, struct ad7606_state, 46 struct ad7606_state *st = container_of(work_s, struct ad7606_state,
47 poll_work); 47 poll_work);
48 struct iio_dev *indio_dev = iio_priv_to_dev(st); 48 struct iio_dev *indio_dev = iio_priv_to_dev(st);
49 s64 time_ns;
50 __u8 *buf; 49 __u8 *buf;
51 int ret; 50 int ret;
52 51
@@ -78,12 +77,7 @@ static void ad7606_poll_bh_to_ring(struct work_struct *work_s)
78 goto done; 77 goto done;
79 } 78 }
80 79
81 time_ns = iio_get_time_ns(); 80 iio_push_to_buffers_with_timestamp(indio_dev, buf, iio_get_time_ns());
82
83 if (indio_dev->scan_timestamp)
84 *((s64 *)(buf + indio_dev->scan_bytes - sizeof(s64))) = time_ns;
85
86 iio_push_to_buffers(indio_dev, buf);
87done: 81done:
88 gpio_set_value(st->pdata->gpio_convst, 0); 82 gpio_set_value(st->pdata->gpio_convst, 0);
89 iio_trigger_notify_done(indio_dev->trig); 83 iio_trigger_notify_done(indio_dev->trig);
diff --git a/drivers/staging/iio/adc/ad7780.c b/drivers/staging/iio/adc/ad7780.c
index e1f88603d7e0..4f2522a9edfb 100644
--- a/drivers/staging/iio/adc/ad7780.c
+++ b/drivers/staging/iio/adc/ad7780.c
@@ -171,7 +171,7 @@ static int ad7780_probe(struct spi_device *spi)
171 struct iio_dev *indio_dev; 171 struct iio_dev *indio_dev;
172 int ret, voltage_uv = 0; 172 int ret, voltage_uv = 0;
173 173
174 indio_dev = iio_device_alloc(sizeof(*st)); 174 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
175 if (indio_dev == NULL) 175 if (indio_dev == NULL)
176 return -ENOMEM; 176 return -ENOMEM;
177 177
@@ -180,11 +180,11 @@ static int ad7780_probe(struct spi_device *spi)
180 180
181 ad_sd_init(&st->sd, indio_dev, spi, &ad7780_sigma_delta_info); 181 ad_sd_init(&st->sd, indio_dev, spi, &ad7780_sigma_delta_info);
182 182
183 st->reg = regulator_get(&spi->dev, "vcc"); 183 st->reg = devm_regulator_get(&spi->dev, "vcc");
184 if (!IS_ERR(st->reg)) { 184 if (!IS_ERR(st->reg)) {
185 ret = regulator_enable(st->reg); 185 ret = regulator_enable(st->reg);
186 if (ret) 186 if (ret)
187 goto error_put_reg; 187 return ret;
188 188
189 voltage_uv = regulator_get_voltage(st->reg); 189 voltage_uv = regulator_get_voltage(st->reg);
190 } 190 }
@@ -210,8 +210,8 @@ static int ad7780_probe(struct spi_device *spi)
210 210
211 if (pdata && gpio_is_valid(pdata->gpio_pdrst)) { 211 if (pdata && gpio_is_valid(pdata->gpio_pdrst)) {
212 212
213 ret = gpio_request_one(pdata->gpio_pdrst, GPIOF_OUT_INIT_LOW, 213 ret = devm_gpio_request_one(&spi->dev, pdata->gpio_pdrst,
214 "AD7780 /PDRST"); 214 GPIOF_OUT_INIT_LOW, "AD7780 /PDRST");
215 if (ret) { 215 if (ret) {
216 dev_err(&spi->dev, "failed to request GPIO PDRST\n"); 216 dev_err(&spi->dev, "failed to request GPIO PDRST\n");
217 goto error_disable_reg; 217 goto error_disable_reg;
@@ -223,7 +223,7 @@ static int ad7780_probe(struct spi_device *spi)
223 223
224 ret = ad_sd_setup_buffer_and_trigger(indio_dev); 224 ret = ad_sd_setup_buffer_and_trigger(indio_dev);
225 if (ret) 225 if (ret)
226 goto error_free_gpio; 226 goto error_disable_reg;
227 227
228 ret = iio_device_register(indio_dev); 228 ret = iio_device_register(indio_dev);
229 if (ret) 229 if (ret)
@@ -233,17 +233,9 @@ static int ad7780_probe(struct spi_device *spi)
233 233
234error_cleanup_buffer_and_trigger: 234error_cleanup_buffer_and_trigger:
235 ad_sd_cleanup_buffer_and_trigger(indio_dev); 235 ad_sd_cleanup_buffer_and_trigger(indio_dev);
236error_free_gpio:
237 if (pdata && gpio_is_valid(pdata->gpio_pdrst))
238 gpio_free(pdata->gpio_pdrst);
239error_disable_reg: 236error_disable_reg:
240 if (!IS_ERR(st->reg)) 237 if (!IS_ERR(st->reg))
241 regulator_disable(st->reg); 238 regulator_disable(st->reg);
242error_put_reg:
243 if (!IS_ERR(st->reg))
244 regulator_put(st->reg);
245
246 iio_device_free(indio_dev);
247 239
248 return ret; 240 return ret;
249} 241}
@@ -256,14 +248,8 @@ static int ad7780_remove(struct spi_device *spi)
256 iio_device_unregister(indio_dev); 248 iio_device_unregister(indio_dev);
257 ad_sd_cleanup_buffer_and_trigger(indio_dev); 249 ad_sd_cleanup_buffer_and_trigger(indio_dev);
258 250
259 if (gpio_is_valid(st->powerdown_gpio)) 251 if (!IS_ERR(st->reg))
260 gpio_free(st->powerdown_gpio);
261
262 if (!IS_ERR(st->reg)) {
263 regulator_disable(st->reg); 252 regulator_disable(st->reg);
264 regulator_put(st->reg);
265 }
266 iio_device_free(indio_dev);
267 253
268 return 0; 254 return 0;
269} 255}
diff --git a/drivers/staging/iio/adc/ad7816.c b/drivers/staging/iio/adc/ad7816.c
index 8470036a3378..9f48e5c74eed 100644
--- a/drivers/staging/iio/adc/ad7816.c
+++ b/drivers/staging/iio/adc/ad7816.c
@@ -356,11 +356,9 @@ static int ad7816_probe(struct spi_device *spi_dev)
356 return -EINVAL; 356 return -EINVAL;
357 } 357 }
358 358
359 indio_dev = iio_device_alloc(sizeof(*chip)); 359 indio_dev = devm_iio_device_alloc(&spi_dev->dev, sizeof(*chip));
360 if (indio_dev == NULL) { 360 if (!indio_dev)
361 ret = -ENOMEM; 361 return -ENOMEM;
362 goto error_ret;
363 }
364 chip = iio_priv(indio_dev); 362 chip = iio_priv(indio_dev);
365 /* this is only used for device removal purposes */ 363 /* this is only used for device removal purposes */
366 dev_set_drvdata(&spi_dev->dev, indio_dev); 364 dev_set_drvdata(&spi_dev->dev, indio_dev);
@@ -372,25 +370,28 @@ static int ad7816_probe(struct spi_device *spi_dev)
372 chip->convert_pin = pins[1]; 370 chip->convert_pin = pins[1];
373 chip->busy_pin = pins[2]; 371 chip->busy_pin = pins[2];
374 372
375 ret = gpio_request(chip->rdwr_pin, spi_get_device_id(spi_dev)->name); 373 ret = devm_gpio_request(&spi_dev->dev, chip->rdwr_pin,
374 spi_get_device_id(spi_dev)->name);
376 if (ret) { 375 if (ret) {
377 dev_err(&spi_dev->dev, "Fail to request rdwr gpio PIN %d.\n", 376 dev_err(&spi_dev->dev, "Fail to request rdwr gpio PIN %d.\n",
378 chip->rdwr_pin); 377 chip->rdwr_pin);
379 goto error_free_device; 378 return ret;
380 } 379 }
381 gpio_direction_input(chip->rdwr_pin); 380 gpio_direction_input(chip->rdwr_pin);
382 ret = gpio_request(chip->convert_pin, spi_get_device_id(spi_dev)->name); 381 ret = devm_gpio_request(&spi_dev->dev, chip->convert_pin,
382 spi_get_device_id(spi_dev)->name);
383 if (ret) { 383 if (ret) {
384 dev_err(&spi_dev->dev, "Fail to request convert gpio PIN %d.\n", 384 dev_err(&spi_dev->dev, "Fail to request convert gpio PIN %d.\n",
385 chip->convert_pin); 385 chip->convert_pin);
386 goto error_free_gpio_rdwr; 386 return ret;
387 } 387 }
388 gpio_direction_input(chip->convert_pin); 388 gpio_direction_input(chip->convert_pin);
389 ret = gpio_request(chip->busy_pin, spi_get_device_id(spi_dev)->name); 389 ret = devm_gpio_request(&spi_dev->dev, chip->busy_pin,
390 spi_get_device_id(spi_dev)->name);
390 if (ret) { 391 if (ret) {
391 dev_err(&spi_dev->dev, "Fail to request busy gpio PIN %d.\n", 392 dev_err(&spi_dev->dev, "Fail to request busy gpio PIN %d.\n",
392 chip->busy_pin); 393 chip->busy_pin);
393 goto error_free_gpio_convert; 394 return ret;
394 } 395 }
395 gpio_direction_input(chip->busy_pin); 396 gpio_direction_input(chip->busy_pin);
396 397
@@ -401,51 +402,31 @@ static int ad7816_probe(struct spi_device *spi_dev)
401 402
402 if (spi_dev->irq) { 403 if (spi_dev->irq) {
403 /* Only low trigger is supported in ad7816/7/8 */ 404 /* Only low trigger is supported in ad7816/7/8 */
404 ret = request_threaded_irq(spi_dev->irq, 405 ret = devm_request_threaded_irq(&spi_dev->dev, spi_dev->irq,
405 NULL, 406 NULL,
406 &ad7816_event_handler, 407 &ad7816_event_handler,
407 IRQF_TRIGGER_LOW | IRQF_ONESHOT, 408 IRQF_TRIGGER_LOW | IRQF_ONESHOT,
408 indio_dev->name, 409 indio_dev->name,
409 indio_dev); 410 indio_dev);
410 if (ret) 411 if (ret)
411 goto error_free_gpio; 412 return ret;
412 } 413 }
413 414
414 ret = iio_device_register(indio_dev); 415 ret = iio_device_register(indio_dev);
415 if (ret) 416 if (ret)
416 goto error_free_irq; 417 return ret;
417 418
418 dev_info(&spi_dev->dev, "%s temperature sensor and ADC registered.\n", 419 dev_info(&spi_dev->dev, "%s temperature sensor and ADC registered.\n",
419 indio_dev->name); 420 indio_dev->name);
420 421
421 return 0; 422 return 0;
422error_free_irq:
423 free_irq(spi_dev->irq, indio_dev);
424error_free_gpio:
425 gpio_free(chip->busy_pin);
426error_free_gpio_convert:
427 gpio_free(chip->convert_pin);
428error_free_gpio_rdwr:
429 gpio_free(chip->rdwr_pin);
430error_free_device:
431 iio_device_free(indio_dev);
432error_ret:
433 return ret;
434} 423}
435 424
436static int ad7816_remove(struct spi_device *spi_dev) 425static int ad7816_remove(struct spi_device *spi_dev)
437{ 426{
438 struct iio_dev *indio_dev = dev_get_drvdata(&spi_dev->dev); 427 struct iio_dev *indio_dev = dev_get_drvdata(&spi_dev->dev);
439 struct ad7816_chip_info *chip = iio_priv(indio_dev);
440 428
441 iio_device_unregister(indio_dev); 429 iio_device_unregister(indio_dev);
442 dev_set_drvdata(&spi_dev->dev, NULL);
443 if (spi_dev->irq)
444 free_irq(spi_dev->irq, indio_dev);
445 gpio_free(chip->busy_pin);
446 gpio_free(chip->convert_pin);
447 gpio_free(chip->rdwr_pin);
448 iio_device_free(indio_dev);
449 430
450 return 0; 431 return 0;
451} 432}
diff --git a/drivers/staging/iio/adc/ad799x_core.c b/drivers/staging/iio/adc/ad799x_core.c
index 2b2049c8bc6b..3f5142b284d1 100644
--- a/drivers/staging/iio/adc/ad799x_core.c
+++ b/drivers/staging/iio/adc/ad799x_core.c
@@ -586,8 +586,9 @@ static int ad799x_probe(struct i2c_client *client,
586 int ret; 586 int ret;
587 struct ad799x_platform_data *pdata = client->dev.platform_data; 587 struct ad799x_platform_data *pdata = client->dev.platform_data;
588 struct ad799x_state *st; 588 struct ad799x_state *st;
589 struct iio_dev *indio_dev = iio_device_alloc(sizeof(*st)); 589 struct iio_dev *indio_dev;
590 590
591 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*st));
591 if (indio_dev == NULL) 592 if (indio_dev == NULL)
592 return -ENOMEM; 593 return -ENOMEM;
593 594
@@ -606,11 +607,11 @@ static int ad799x_probe(struct i2c_client *client,
606 607
607 st->int_vref_mv = pdata->vref_mv; 608 st->int_vref_mv = pdata->vref_mv;
608 609
609 st->reg = regulator_get(&client->dev, "vcc"); 610 st->reg = devm_regulator_get(&client->dev, "vcc");
610 if (!IS_ERR(st->reg)) { 611 if (!IS_ERR(st->reg)) {
611 ret = regulator_enable(st->reg); 612 ret = regulator_enable(st->reg);
612 if (ret) 613 if (ret)
613 goto error_put_reg; 614 return ret;
614 } 615 }
615 st->client = client; 616 st->client = client;
616 617
@@ -650,10 +651,6 @@ error_cleanup_ring:
650error_disable_reg: 651error_disable_reg:
651 if (!IS_ERR(st->reg)) 652 if (!IS_ERR(st->reg))
652 regulator_disable(st->reg); 653 regulator_disable(st->reg);
653error_put_reg:
654 if (!IS_ERR(st->reg))
655 regulator_put(st->reg);
656 iio_device_free(indio_dev);
657 654
658 return ret; 655 return ret;
659} 656}
@@ -668,12 +665,9 @@ static int ad799x_remove(struct i2c_client *client)
668 free_irq(client->irq, indio_dev); 665 free_irq(client->irq, indio_dev);
669 666
670 ad799x_ring_cleanup(indio_dev); 667 ad799x_ring_cleanup(indio_dev);
671 if (!IS_ERR(st->reg)) { 668 if (!IS_ERR(st->reg))
672 regulator_disable(st->reg); 669 regulator_disable(st->reg);
673 regulator_put(st->reg);
674 }
675 kfree(st->rx_buf); 670 kfree(st->rx_buf);
676 iio_device_free(indio_dev);
677 671
678 return 0; 672 return 0;
679} 673}
diff --git a/drivers/staging/iio/adc/ad799x_ring.c b/drivers/staging/iio/adc/ad799x_ring.c
index c2ebae12ee19..0ff6c03a483e 100644
--- a/drivers/staging/iio/adc/ad799x_ring.c
+++ b/drivers/staging/iio/adc/ad799x_ring.c
@@ -35,7 +35,6 @@ static irqreturn_t ad799x_trigger_handler(int irq, void *p)
35 struct iio_poll_func *pf = p; 35 struct iio_poll_func *pf = p;
36 struct iio_dev *indio_dev = pf->indio_dev; 36 struct iio_dev *indio_dev = pf->indio_dev;
37 struct ad799x_state *st = iio_priv(indio_dev); 37 struct ad799x_state *st = iio_priv(indio_dev);
38 s64 time_ns;
39 int b_sent; 38 int b_sent;
40 u8 cmd; 39 u8 cmd;
41 40
@@ -65,13 +64,8 @@ static irqreturn_t ad799x_trigger_handler(int irq, void *p)
65 if (b_sent < 0) 64 if (b_sent < 0)
66 goto out; 65 goto out;
67 66
68 time_ns = iio_get_time_ns(); 67 iio_push_to_buffers_with_timestamp(indio_dev, st->rx_buf,
69 68 iio_get_time_ns());
70 if (indio_dev->scan_timestamp)
71 memcpy(st->rx_buf + indio_dev->scan_bytes - sizeof(s64),
72 &time_ns, sizeof(time_ns));
73
74 iio_push_to_buffers(indio_dev, st->rx_buf);
75out: 69out:
76 iio_trigger_notify_done(indio_dev->trig); 70 iio_trigger_notify_done(indio_dev->trig);
77 71
diff --git a/drivers/staging/iio/adc/lpc32xx_adc.c b/drivers/staging/iio/adc/lpc32xx_adc.c
index 9a4bb0999b51..ce7ff3e6cd21 100644
--- a/drivers/staging/iio/adc/lpc32xx_adc.c
+++ b/drivers/staging/iio/adc/lpc32xx_adc.c
@@ -137,43 +137,39 @@ static int lpc32xx_adc_probe(struct platform_device *pdev)
137 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 137 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
138 if (!res) { 138 if (!res) {
139 dev_err(&pdev->dev, "failed to get platform I/O memory\n"); 139 dev_err(&pdev->dev, "failed to get platform I/O memory\n");
140 retval = -EBUSY; 140 return -EBUSY;
141 goto errout1;
142 } 141 }
143 142
144 iodev = iio_device_alloc(sizeof(struct lpc32xx_adc_info)); 143 iodev = devm_iio_device_alloc(&pdev->dev, sizeof(*info));
145 if (!iodev) { 144 if (!iodev)
146 dev_err(&pdev->dev, "failed allocating iio device\n"); 145 return -ENOMEM;
147 retval = -ENOMEM;
148 goto errout1;
149 }
150 146
151 info = iio_priv(iodev); 147 info = iio_priv(iodev);
152 148
153 info->adc_base = ioremap(res->start, resource_size(res)); 149 info->adc_base = devm_ioremap(&pdev->dev, res->start,
150 resource_size(res));
154 if (!info->adc_base) { 151 if (!info->adc_base) {
155 dev_err(&pdev->dev, "failed mapping memory\n"); 152 dev_err(&pdev->dev, "failed mapping memory\n");
156 retval = -EBUSY; 153 return -EBUSY;
157 goto errout2;
158 } 154 }
159 155
160 info->clk = clk_get(&pdev->dev, NULL); 156 info->clk = devm_clk_get(&pdev->dev, NULL);
161 if (IS_ERR(info->clk)) { 157 if (IS_ERR(info->clk)) {
162 dev_err(&pdev->dev, "failed getting clock\n"); 158 dev_err(&pdev->dev, "failed getting clock\n");
163 goto errout3; 159 return PTR_ERR(info->clk);
164 } 160 }
165 161
166 irq = platform_get_irq(pdev, 0); 162 irq = platform_get_irq(pdev, 0);
167 if ((irq < 0) || (irq >= NR_IRQS)) { 163 if ((irq < 0) || (irq >= NR_IRQS)) {
168 dev_err(&pdev->dev, "failed getting interrupt resource\n"); 164 dev_err(&pdev->dev, "failed getting interrupt resource\n");
169 retval = -EINVAL; 165 return -EINVAL;
170 goto errout4;
171 } 166 }
172 167
173 retval = request_irq(irq, lpc32xx_adc_isr, 0, MOD_NAME, info); 168 retval = devm_request_irq(&pdev->dev, irq, lpc32xx_adc_isr, 0,
169 MOD_NAME, info);
174 if (retval < 0) { 170 if (retval < 0) {
175 dev_err(&pdev->dev, "failed requesting interrupt\n"); 171 dev_err(&pdev->dev, "failed requesting interrupt\n");
176 goto errout4; 172 return retval;
177 } 173 }
178 174
179 platform_set_drvdata(pdev, iodev); 175 platform_set_drvdata(pdev, iodev);
@@ -189,35 +185,18 @@ static int lpc32xx_adc_probe(struct platform_device *pdev)
189 185
190 retval = iio_device_register(iodev); 186 retval = iio_device_register(iodev);
191 if (retval) 187 if (retval)
192 goto errout5; 188 return retval;
193 189
194 dev_info(&pdev->dev, "LPC32XX ADC driver loaded, IRQ %d\n", irq); 190 dev_info(&pdev->dev, "LPC32XX ADC driver loaded, IRQ %d\n", irq);
195 191
196 return 0; 192 return 0;
197
198errout5:
199 free_irq(irq, info);
200errout4:
201 clk_put(info->clk);
202errout3:
203 iounmap(info->adc_base);
204errout2:
205 iio_device_free(iodev);
206errout1:
207 return retval;
208} 193}
209 194
210static int lpc32xx_adc_remove(struct platform_device *pdev) 195static int lpc32xx_adc_remove(struct platform_device *pdev)
211{ 196{
212 struct iio_dev *iodev = platform_get_drvdata(pdev); 197 struct iio_dev *iodev = platform_get_drvdata(pdev);
213 struct lpc32xx_adc_info *info = iio_priv(iodev);
214 int irq = platform_get_irq(pdev, 0);
215 198
216 iio_device_unregister(iodev); 199 iio_device_unregister(iodev);
217 free_irq(irq, info);
218 clk_put(info->clk);
219 iounmap(info->adc_base);
220 iio_device_free(iodev);
221 200
222 return 0; 201 return 0;
223} 202}
diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c
index a08c1736458b..9da64bf00039 100644
--- a/drivers/staging/iio/adc/mxs-lradc.c
+++ b/drivers/staging/iio/adc/mxs-lradc.c
@@ -625,13 +625,7 @@ static irqreturn_t mxs_lradc_trigger_handler(int irq, void *p)
625 j++; 625 j++;
626 } 626 }
627 627
628 if (iio->scan_timestamp) { 628 iio_push_to_buffers_with_timestamp(iio, lradc->buffer, pf->timestamp);
629 s64 *timestamp = (s64 *)((u8 *)lradc->buffer +
630 ALIGN(j, sizeof(s64)));
631 *timestamp = pf->timestamp;
632 }
633
634 iio_push_to_buffers(iio, (u8 *)lradc->buffer);
635 629
636 iio_trigger_notify_done(iio->trig); 630 iio_trigger_notify_done(iio->trig);
637 631
@@ -987,7 +981,7 @@ static int mxs_lradc_probe(struct platform_device *pdev)
987 /* Register the touchscreen input device. */ 981 /* Register the touchscreen input device. */
988 ret = mxs_lradc_ts_register(lradc); 982 ret = mxs_lradc_ts_register(lradc);
989 if (ret) 983 if (ret)
990 goto err_dev; 984 goto err_ts_register;
991 985
992 /* Register IIO device. */ 986 /* Register IIO device. */
993 ret = iio_device_register(iio); 987 ret = iio_device_register(iio);
@@ -1000,6 +994,8 @@ static int mxs_lradc_probe(struct platform_device *pdev)
1000 994
1001err_ts: 995err_ts:
1002 mxs_lradc_ts_unregister(lradc); 996 mxs_lradc_ts_unregister(lradc);
997err_ts_register:
998 mxs_lradc_hw_stop(lradc);
1003err_dev: 999err_dev:
1004 mxs_lradc_trigger_remove(iio); 1000 mxs_lradc_trigger_remove(iio);
1005err_trig: 1001err_trig:
@@ -1012,13 +1008,11 @@ static int mxs_lradc_remove(struct platform_device *pdev)
1012 struct iio_dev *iio = platform_get_drvdata(pdev); 1008 struct iio_dev *iio = platform_get_drvdata(pdev);
1013 struct mxs_lradc *lradc = iio_priv(iio); 1009 struct mxs_lradc *lradc = iio_priv(iio);
1014 1010
1011 iio_device_unregister(iio);
1015 mxs_lradc_ts_unregister(lradc); 1012 mxs_lradc_ts_unregister(lradc);
1016
1017 mxs_lradc_hw_stop(lradc); 1013 mxs_lradc_hw_stop(lradc);
1018
1019 iio_device_unregister(iio);
1020 iio_triggered_buffer_cleanup(iio);
1021 mxs_lradc_trigger_remove(iio); 1014 mxs_lradc_trigger_remove(iio);
1015 iio_triggered_buffer_cleanup(iio);
1022 1016
1023 return 0; 1017 return 0;
1024} 1018}
@@ -1038,3 +1032,4 @@ module_platform_driver(mxs_lradc_driver);
1038MODULE_AUTHOR("Marek Vasut <marex@denx.de>"); 1032MODULE_AUTHOR("Marek Vasut <marex@denx.de>");
1039MODULE_DESCRIPTION("Freescale i.MX28 LRADC driver"); 1033MODULE_DESCRIPTION("Freescale i.MX28 LRADC driver");
1040MODULE_LICENSE("GPL v2"); 1034MODULE_LICENSE("GPL v2");
1035MODULE_ALIAS("platform:" DRIVER_NAME);
diff --git a/drivers/staging/iio/addac/adt7316.c b/drivers/staging/iio/addac/adt7316.c
index 1e1356825d6d..80266e801d56 100644
--- a/drivers/staging/iio/addac/adt7316.c
+++ b/drivers/staging/iio/addac/adt7316.c
@@ -412,13 +412,13 @@ static ssize_t adt7316_store_ad_channel(struct device *dev,
412 struct iio_dev *dev_info = dev_to_iio_dev(dev); 412 struct iio_dev *dev_info = dev_to_iio_dev(dev);
413 struct adt7316_chip_info *chip = iio_priv(dev_info); 413 struct adt7316_chip_info *chip = iio_priv(dev_info);
414 u8 config2; 414 u8 config2;
415 unsigned long data = 0; 415 u8 data;
416 int ret; 416 int ret;
417 417
418 if (!(chip->config2 & ADT7316_AD_SINGLE_CH_MODE)) 418 if (!(chip->config2 & ADT7316_AD_SINGLE_CH_MODE))
419 return -EPERM; 419 return -EPERM;
420 420
421 ret = strict_strtoul(buf, 10, &data); 421 ret = kstrtou8(buf, 10, &data);
422 if (ret) 422 if (ret)
423 return -EINVAL; 423 return -EINVAL;
424 424
@@ -823,10 +823,10 @@ static ssize_t adt7316_store_DAC_2Vref_ch_mask(struct device *dev,
823 struct iio_dev *dev_info = dev_to_iio_dev(dev); 823 struct iio_dev *dev_info = dev_to_iio_dev(dev);
824 struct adt7316_chip_info *chip = iio_priv(dev_info); 824 struct adt7316_chip_info *chip = iio_priv(dev_info);
825 u8 dac_config; 825 u8 dac_config;
826 unsigned long data = 0; 826 u8 data;
827 int ret; 827 int ret;
828 828
829 ret = strict_strtoul(buf, 16, &data); 829 ret = kstrtou8(buf, 16, &data);
830 if (ret || data > ADT7316_DA_2VREF_CH_MASK) 830 if (ret || data > ADT7316_DA_2VREF_CH_MASK)
831 return -EINVAL; 831 return -EINVAL;
832 832
@@ -878,13 +878,13 @@ static ssize_t adt7316_store_DAC_update_mode(struct device *dev,
878 struct iio_dev *dev_info = dev_to_iio_dev(dev); 878 struct iio_dev *dev_info = dev_to_iio_dev(dev);
879 struct adt7316_chip_info *chip = iio_priv(dev_info); 879 struct adt7316_chip_info *chip = iio_priv(dev_info);
880 u8 dac_config; 880 u8 dac_config;
881 unsigned long data; 881 u8 data;
882 int ret; 882 int ret;
883 883
884 if (!(chip->config3 & ADT7316_DA_EN_VIA_DAC_LDCA)) 884 if (!(chip->config3 & ADT7316_DA_EN_VIA_DAC_LDCA))
885 return -EPERM; 885 return -EPERM;
886 886
887 ret = strict_strtoul(buf, 10, &data); 887 ret = kstrtou8(buf, 10, &data);
888 if (ret || data > ADT7316_DA_EN_MODE_MASK) 888 if (ret || data > ADT7316_DA_EN_MODE_MASK)
889 return -EINVAL; 889 return -EINVAL;
890 890
@@ -933,7 +933,7 @@ static ssize_t adt7316_store_update_DAC(struct device *dev,
933 struct iio_dev *dev_info = dev_to_iio_dev(dev); 933 struct iio_dev *dev_info = dev_to_iio_dev(dev);
934 struct adt7316_chip_info *chip = iio_priv(dev_info); 934 struct adt7316_chip_info *chip = iio_priv(dev_info);
935 u8 ldac_config; 935 u8 ldac_config;
936 unsigned long data; 936 u8 data;
937 int ret; 937 int ret;
938 938
939 if (chip->config3 & ADT7316_DA_EN_VIA_DAC_LDCA) { 939 if (chip->config3 & ADT7316_DA_EN_VIA_DAC_LDCA) {
@@ -941,7 +941,7 @@ static ssize_t adt7316_store_update_DAC(struct device *dev,
941 ADT7316_DA_EN_MODE_LDAC) 941 ADT7316_DA_EN_MODE_LDAC)
942 return -EPERM; 942 return -EPERM;
943 943
944 ret = strict_strtoul(buf, 16, &data); 944 ret = kstrtou8(buf, 16, &data);
945 if (ret || data > ADT7316_LDAC_EN_DA_MASK) 945 if (ret || data > ADT7316_LDAC_EN_DA_MASK)
946 return -EINVAL; 946 return -EINVAL;
947 947
@@ -1079,11 +1079,11 @@ static ssize_t adt7316_store_DAC_internal_Vref(struct device *dev,
1079 struct iio_dev *dev_info = dev_to_iio_dev(dev); 1079 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1080 struct adt7316_chip_info *chip = iio_priv(dev_info); 1080 struct adt7316_chip_info *chip = iio_priv(dev_info);
1081 u8 ldac_config; 1081 u8 ldac_config;
1082 unsigned long data; 1082 u8 data;
1083 int ret; 1083 int ret;
1084 1084
1085 if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX) { 1085 if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX) {
1086 ret = strict_strtoul(buf, 16, &data); 1086 ret = kstrtou8(buf, 16, &data);
1087 if (ret || data > 3) 1087 if (ret || data > 3)
1088 return -EINVAL; 1088 return -EINVAL;
1089 1089
@@ -1093,7 +1093,7 @@ static ssize_t adt7316_store_DAC_internal_Vref(struct device *dev,
1093 else if (data & 0x2) 1093 else if (data & 0x2)
1094 ldac_config |= ADT7516_DAC_CD_IN_VREF; 1094 ldac_config |= ADT7516_DAC_CD_IN_VREF;
1095 } else { 1095 } else {
1096 ret = strict_strtoul(buf, 16, &data); 1096 ret = kstrtou8(buf, 16, &data);
1097 if (ret) 1097 if (ret)
1098 return -EINVAL; 1098 return -EINVAL;
1099 1099
@@ -1281,11 +1281,11 @@ static ssize_t adt7316_show_temp_offset(struct adt7316_chip_info *chip,
1281static ssize_t adt7316_store_temp_offset(struct adt7316_chip_info *chip, 1281static ssize_t adt7316_store_temp_offset(struct adt7316_chip_info *chip,
1282 int offset_addr, const char *buf, size_t len) 1282 int offset_addr, const char *buf, size_t len)
1283{ 1283{
1284 long data; 1284 int data;
1285 u8 val; 1285 u8 val;
1286 int ret; 1286 int ret;
1287 1287
1288 ret = strict_strtol(buf, 10, &data); 1288 ret = kstrtoint(buf, 10, &data);
1289 if (ret || data > 127 || data < -128) 1289 if (ret || data > 127 || data < -128)
1290 return -EINVAL; 1290 return -EINVAL;
1291 1291
@@ -1442,7 +1442,7 @@ static ssize_t adt7316_store_DAC(struct adt7316_chip_info *chip,
1442 int channel, const char *buf, size_t len) 1442 int channel, const char *buf, size_t len)
1443{ 1443{
1444 u8 msb, lsb, offset; 1444 u8 msb, lsb, offset;
1445 unsigned long data; 1445 u16 data;
1446 int ret; 1446 int ret;
1447 1447
1448 if (channel >= ADT7316_DA_MSB_DATA_REGS || 1448 if (channel >= ADT7316_DA_MSB_DATA_REGS ||
@@ -1454,7 +1454,7 @@ static ssize_t adt7316_store_DAC(struct adt7316_chip_info *chip,
1454 1454
1455 offset = chip->dac_bits - 8; 1455 offset = chip->dac_bits - 8;
1456 1456
1457 ret = strict_strtoul(buf, 10, &data); 1457 ret = kstrtou16(buf, 10, &data);
1458 if (ret || data >= (1 << chip->dac_bits)) 1458 if (ret || data >= (1 << chip->dac_bits))
1459 return -EINVAL; 1459 return -EINVAL;
1460 1460
@@ -1830,11 +1830,11 @@ static ssize_t adt7316_set_int_mask(struct device *dev,
1830{ 1830{
1831 struct iio_dev *dev_info = dev_to_iio_dev(dev); 1831 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1832 struct adt7316_chip_info *chip = iio_priv(dev_info); 1832 struct adt7316_chip_info *chip = iio_priv(dev_info);
1833 unsigned long data; 1833 u16 data;
1834 int ret; 1834 int ret;
1835 u8 mask; 1835 u8 mask;
1836 1836
1837 ret = strict_strtoul(buf, 16, &data); 1837 ret = kstrtou16(buf, 16, &data);
1838 if (ret || data >= ADT7316_VDD_INT_MASK + 1) 1838 if (ret || data >= ADT7316_VDD_INT_MASK + 1)
1839 return -EINVAL; 1839 return -EINVAL;
1840 1840
@@ -1901,7 +1901,7 @@ static inline ssize_t adt7316_set_ad_bound(struct device *dev,
1901 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 1901 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
1902 struct iio_dev *dev_info = dev_to_iio_dev(dev); 1902 struct iio_dev *dev_info = dev_to_iio_dev(dev);
1903 struct adt7316_chip_info *chip = iio_priv(dev_info); 1903 struct adt7316_chip_info *chip = iio_priv(dev_info);
1904 long data; 1904 int data;
1905 u8 val; 1905 u8 val;
1906 int ret; 1906 int ret;
1907 1907
@@ -1909,7 +1909,7 @@ static inline ssize_t adt7316_set_ad_bound(struct device *dev,
1909 this_attr->address > ADT7316_EX_TEMP_LOW) 1909 this_attr->address > ADT7316_EX_TEMP_LOW)
1910 return -EPERM; 1910 return -EPERM;
1911 1911
1912 ret = strict_strtol(buf, 10, &data); 1912 ret = kstrtoint(buf, 10, &data);
1913 if (ret) 1913 if (ret)
1914 return -EINVAL; 1914 return -EINVAL;
1915 1915
@@ -2106,11 +2106,9 @@ int adt7316_probe(struct device *dev, struct adt7316_bus *bus,
2106 unsigned short *adt7316_platform_data = dev->platform_data; 2106 unsigned short *adt7316_platform_data = dev->platform_data;
2107 int ret = 0; 2107 int ret = 0;
2108 2108
2109 indio_dev = iio_device_alloc(sizeof(*chip)); 2109 indio_dev = devm_iio_device_alloc(dev, sizeof(*chip));
2110 if (indio_dev == NULL) { 2110 if (!indio_dev)
2111 ret = -ENOMEM; 2111 return -ENOMEM;
2112 goto error_ret;
2113 }
2114 chip = iio_priv(indio_dev); 2112 chip = iio_priv(indio_dev);
2115 /* this is only used for device removal purposes */ 2113 /* this is only used for device removal purposes */
2116 dev_set_drvdata(dev, indio_dev); 2114 dev_set_drvdata(dev, indio_dev);
@@ -2146,58 +2144,44 @@ int adt7316_probe(struct device *dev, struct adt7316_bus *bus,
2146 if (adt7316_platform_data[0]) 2144 if (adt7316_platform_data[0])
2147 chip->bus.irq_flags = adt7316_platform_data[0]; 2145 chip->bus.irq_flags = adt7316_platform_data[0];
2148 2146
2149 ret = request_threaded_irq(chip->bus.irq, 2147 ret = devm_request_threaded_irq(dev, chip->bus.irq,
2150 NULL, 2148 NULL,
2151 &adt7316_event_handler, 2149 &adt7316_event_handler,
2152 chip->bus.irq_flags | IRQF_ONESHOT, 2150 chip->bus.irq_flags |
2153 indio_dev->name, 2151 IRQF_ONESHOT,
2154 indio_dev); 2152 indio_dev->name,
2153 indio_dev);
2155 if (ret) 2154 if (ret)
2156 goto error_free_dev; 2155 return ret;
2157 2156
2158 if (chip->bus.irq_flags & IRQF_TRIGGER_HIGH) 2157 if (chip->bus.irq_flags & IRQF_TRIGGER_HIGH)
2159 chip->config1 |= ADT7316_INT_POLARITY; 2158 chip->config1 |= ADT7316_INT_POLARITY;
2160 } 2159 }
2161 2160
2162 ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, chip->config1); 2161 ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, chip->config1);
2163 if (ret) { 2162 if (ret)
2164 ret = -EIO; 2163 return -EIO;
2165 goto error_unreg_irq;
2166 }
2167 2164
2168 ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, chip->config3); 2165 ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, chip->config3);
2169 if (ret) { 2166 if (ret)
2170 ret = -EIO; 2167 return -EIO;
2171 goto error_unreg_irq;
2172 }
2173 2168
2174 ret = iio_device_register(indio_dev); 2169 ret = iio_device_register(indio_dev);
2175 if (ret) 2170 if (ret)
2176 goto error_unreg_irq; 2171 return ret;
2177 2172
2178 dev_info(dev, "%s temperature sensor, ADC and DAC registered.\n", 2173 dev_info(dev, "%s temperature sensor, ADC and DAC registered.\n",
2179 indio_dev->name); 2174 indio_dev->name);
2180 2175
2181 return 0; 2176 return 0;
2182
2183error_unreg_irq:
2184 free_irq(chip->bus.irq, indio_dev);
2185error_free_dev:
2186 iio_device_free(indio_dev);
2187error_ret:
2188 return ret;
2189} 2177}
2190EXPORT_SYMBOL(adt7316_probe); 2178EXPORT_SYMBOL(adt7316_probe);
2191 2179
2192int adt7316_remove(struct device *dev) 2180int adt7316_remove(struct device *dev)
2193{ 2181{
2194 struct iio_dev *indio_dev = dev_get_drvdata(dev); 2182 struct iio_dev *indio_dev = dev_get_drvdata(dev);
2195 struct adt7316_chip_info *chip = iio_priv(indio_dev);
2196 2183
2197 iio_device_unregister(indio_dev); 2184 iio_device_unregister(indio_dev);
2198 if (chip->bus.irq)
2199 free_irq(chip->bus.irq, indio_dev);
2200 iio_device_free(indio_dev);
2201 2185
2202 return 0; 2186 return 0;
2203} 2187}
diff --git a/drivers/staging/iio/frequency/ad5930.c b/drivers/staging/iio/frequency/ad5930.c
index 69e90e9e60ea..a4aeee6ffdf2 100644
--- a/drivers/staging/iio/frequency/ad5930.c
+++ b/drivers/staging/iio/frequency/ad5930.c
@@ -94,11 +94,9 @@ static int ad5930_probe(struct spi_device *spi)
94 struct iio_dev *idev; 94 struct iio_dev *idev;
95 int ret = 0; 95 int ret = 0;
96 96
97 idev = iio_device_alloc(sizeof(*st)); 97 idev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
98 if (idev == NULL) { 98 if (!idev)
99 ret = -ENOMEM; 99 return -ENOMEM;
100 goto error_ret;
101 }
102 spi_set_drvdata(spi, idev); 100 spi_set_drvdata(spi, idev);
103 st = iio_priv(idev); 101 st = iio_priv(idev);
104 102
@@ -110,24 +108,18 @@ static int ad5930_probe(struct spi_device *spi)
110 108
111 ret = iio_device_register(idev); 109 ret = iio_device_register(idev);
112 if (ret) 110 if (ret)
113 goto error_free_dev; 111 return ret;
114 spi->max_speed_hz = 2000000; 112 spi->max_speed_hz = 2000000;
115 spi->mode = SPI_MODE_3; 113 spi->mode = SPI_MODE_3;
116 spi->bits_per_word = 16; 114 spi->bits_per_word = 16;
117 spi_setup(spi); 115 spi_setup(spi);
118 116
119 return 0; 117 return 0;
120
121error_free_dev:
122 iio_device_free(idev);
123error_ret:
124 return ret;
125} 118}
126 119
127static int ad5930_remove(struct spi_device *spi) 120static int ad5930_remove(struct spi_device *spi)
128{ 121{
129 iio_device_unregister(spi_get_drvdata(spi)); 122 iio_device_unregister(spi_get_drvdata(spi));
130 iio_device_free(spi_get_drvdata(spi));
131 123
132 return 0; 124 return 0;
133} 125}
diff --git a/drivers/staging/iio/frequency/ad9832.c b/drivers/staging/iio/frequency/ad9832.c
index 4e18380c5141..c7d0307c8e76 100644
--- a/drivers/staging/iio/frequency/ad9832.c
+++ b/drivers/staging/iio/frequency/ad9832.c
@@ -81,9 +81,9 @@ static ssize_t ad9832_write(struct device *dev,
81 struct ad9832_state *st = iio_priv(indio_dev); 81 struct ad9832_state *st = iio_priv(indio_dev);
82 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 82 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
83 int ret; 83 int ret;
84 long val; 84 unsigned long val;
85 85
86 ret = strict_strtoul(buf, 10, &val); 86 ret = kstrtoul(buf, 10, &val);
87 if (ret) 87 if (ret)
88 goto error_ret; 88 goto error_ret;
89 89
@@ -214,14 +214,14 @@ static int ad9832_probe(struct spi_device *spi)
214 return -ENODEV; 214 return -ENODEV;
215 } 215 }
216 216
217 reg = regulator_get(&spi->dev, "vcc"); 217 reg = devm_regulator_get(&spi->dev, "vcc");
218 if (!IS_ERR(reg)) { 218 if (!IS_ERR(reg)) {
219 ret = regulator_enable(reg); 219 ret = regulator_enable(reg);
220 if (ret) 220 if (ret)
221 goto error_put_reg; 221 return ret;
222 } 222 }
223 223
224 indio_dev = iio_device_alloc(sizeof(*st)); 224 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
225 if (indio_dev == NULL) { 225 if (indio_dev == NULL) {
226 ret = -ENOMEM; 226 ret = -ENOMEM;
227 goto error_disable_reg; 227 goto error_disable_reg;
@@ -279,47 +279,42 @@ static int ad9832_probe(struct spi_device *spi)
279 ret = spi_sync(st->spi, &st->msg); 279 ret = spi_sync(st->spi, &st->msg);
280 if (ret) { 280 if (ret) {
281 dev_err(&spi->dev, "device init failed\n"); 281 dev_err(&spi->dev, "device init failed\n");
282 goto error_free_device; 282 goto error_disable_reg;
283 } 283 }
284 284
285 ret = ad9832_write_frequency(st, AD9832_FREQ0HM, pdata->freq0); 285 ret = ad9832_write_frequency(st, AD9832_FREQ0HM, pdata->freq0);
286 if (ret) 286 if (ret)
287 goto error_free_device; 287 goto error_disable_reg;
288 288
289 ret = ad9832_write_frequency(st, AD9832_FREQ1HM, pdata->freq1); 289 ret = ad9832_write_frequency(st, AD9832_FREQ1HM, pdata->freq1);
290 if (ret) 290 if (ret)
291 goto error_free_device; 291 goto error_disable_reg;
292 292
293 ret = ad9832_write_phase(st, AD9832_PHASE0H, pdata->phase0); 293 ret = ad9832_write_phase(st, AD9832_PHASE0H, pdata->phase0);
294 if (ret) 294 if (ret)
295 goto error_free_device; 295 goto error_disable_reg;
296 296
297 ret = ad9832_write_phase(st, AD9832_PHASE1H, pdata->phase1); 297 ret = ad9832_write_phase(st, AD9832_PHASE1H, pdata->phase1);
298 if (ret) 298 if (ret)
299 goto error_free_device; 299 goto error_disable_reg;
300 300
301 ret = ad9832_write_phase(st, AD9832_PHASE2H, pdata->phase2); 301 ret = ad9832_write_phase(st, AD9832_PHASE2H, pdata->phase2);
302 if (ret) 302 if (ret)
303 goto error_free_device; 303 goto error_disable_reg;
304 304
305 ret = ad9832_write_phase(st, AD9832_PHASE3H, pdata->phase3); 305 ret = ad9832_write_phase(st, AD9832_PHASE3H, pdata->phase3);
306 if (ret) 306 if (ret)
307 goto error_free_device; 307 goto error_disable_reg;
308 308
309 ret = iio_device_register(indio_dev); 309 ret = iio_device_register(indio_dev);
310 if (ret) 310 if (ret)
311 goto error_free_device; 311 goto error_disable_reg;
312 312
313 return 0; 313 return 0;
314 314
315error_free_device:
316 iio_device_free(indio_dev);
317error_disable_reg: 315error_disable_reg:
318 if (!IS_ERR(reg)) 316 if (!IS_ERR(reg))
319 regulator_disable(reg); 317 regulator_disable(reg);
320error_put_reg:
321 if (!IS_ERR(reg))
322 regulator_put(reg);
323 318
324 return ret; 319 return ret;
325} 320}
@@ -330,11 +325,8 @@ static int ad9832_remove(struct spi_device *spi)
330 struct ad9832_state *st = iio_priv(indio_dev); 325 struct ad9832_state *st = iio_priv(indio_dev);
331 326
332 iio_device_unregister(indio_dev); 327 iio_device_unregister(indio_dev);
333 if (!IS_ERR(st->reg)) { 328 if (!IS_ERR(st->reg))
334 regulator_disable(st->reg); 329 regulator_disable(st->reg);
335 regulator_put(st->reg);
336 }
337 iio_device_free(indio_dev);
338 330
339 return 0; 331 return 0;
340} 332}
diff --git a/drivers/staging/iio/frequency/ad9834.c b/drivers/staging/iio/frequency/ad9834.c
index 5cba3c01f417..86cda6176093 100644
--- a/drivers/staging/iio/frequency/ad9834.c
+++ b/drivers/staging/iio/frequency/ad9834.c
@@ -70,9 +70,9 @@ static ssize_t ad9834_write(struct device *dev,
70 struct ad9834_state *st = iio_priv(indio_dev); 70 struct ad9834_state *st = iio_priv(indio_dev);
71 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 71 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
72 int ret; 72 int ret;
73 long val; 73 unsigned long val;
74 74
75 ret = strict_strtoul(buf, 10, &val); 75 ret = kstrtoul(buf, 10, &val);
76 if (ret) 76 if (ret)
77 goto error_ret; 77 goto error_ret;
78 78
@@ -327,14 +327,14 @@ static int ad9834_probe(struct spi_device *spi)
327 return -ENODEV; 327 return -ENODEV;
328 } 328 }
329 329
330 reg = regulator_get(&spi->dev, "vcc"); 330 reg = devm_regulator_get(&spi->dev, "vcc");
331 if (!IS_ERR(reg)) { 331 if (!IS_ERR(reg)) {
332 ret = regulator_enable(reg); 332 ret = regulator_enable(reg);
333 if (ret) 333 if (ret)
334 goto error_put_reg; 334 return ret;
335 } 335 }
336 336
337 indio_dev = iio_device_alloc(sizeof(*st)); 337 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
338 if (indio_dev == NULL) { 338 if (indio_dev == NULL) {
339 ret = -ENOMEM; 339 ret = -ENOMEM;
340 goto error_disable_reg; 340 goto error_disable_reg;
@@ -388,39 +388,35 @@ static int ad9834_probe(struct spi_device *spi)
388 ret = spi_sync(st->spi, &st->msg); 388 ret = spi_sync(st->spi, &st->msg);
389 if (ret) { 389 if (ret) {
390 dev_err(&spi->dev, "device init failed\n"); 390 dev_err(&spi->dev, "device init failed\n");
391 goto error_free_device; 391 goto error_disable_reg;
392 } 392 }
393 393
394 ret = ad9834_write_frequency(st, AD9834_REG_FREQ0, pdata->freq0); 394 ret = ad9834_write_frequency(st, AD9834_REG_FREQ0, pdata->freq0);
395 if (ret) 395 if (ret)
396 goto error_free_device; 396 goto error_disable_reg;
397 397
398 ret = ad9834_write_frequency(st, AD9834_REG_FREQ1, pdata->freq1); 398 ret = ad9834_write_frequency(st, AD9834_REG_FREQ1, pdata->freq1);
399 if (ret) 399 if (ret)
400 goto error_free_device; 400 goto error_disable_reg;
401 401
402 ret = ad9834_write_phase(st, AD9834_REG_PHASE0, pdata->phase0); 402 ret = ad9834_write_phase(st, AD9834_REG_PHASE0, pdata->phase0);
403 if (ret) 403 if (ret)
404 goto error_free_device; 404 goto error_disable_reg;
405 405
406 ret = ad9834_write_phase(st, AD9834_REG_PHASE1, pdata->phase1); 406 ret = ad9834_write_phase(st, AD9834_REG_PHASE1, pdata->phase1);
407 if (ret) 407 if (ret)
408 goto error_free_device; 408 goto error_disable_reg;
409 409
410 ret = iio_device_register(indio_dev); 410 ret = iio_device_register(indio_dev);
411 if (ret) 411 if (ret)
412 goto error_free_device; 412 goto error_disable_reg;
413 413
414 return 0; 414 return 0;
415 415
416error_free_device:
417 iio_device_free(indio_dev);
418error_disable_reg: 416error_disable_reg:
419 if (!IS_ERR(reg)) 417 if (!IS_ERR(reg))
420 regulator_disable(reg); 418 regulator_disable(reg);
421error_put_reg: 419
422 if (!IS_ERR(reg))
423 regulator_put(reg);
424 return ret; 420 return ret;
425} 421}
426 422
@@ -430,11 +426,8 @@ static int ad9834_remove(struct spi_device *spi)
430 struct ad9834_state *st = iio_priv(indio_dev); 426 struct ad9834_state *st = iio_priv(indio_dev);
431 427
432 iio_device_unregister(indio_dev); 428 iio_device_unregister(indio_dev);
433 if (!IS_ERR(st->reg)) { 429 if (!IS_ERR(st->reg))
434 regulator_disable(st->reg); 430 regulator_disable(st->reg);
435 regulator_put(st->reg);
436 }
437 iio_device_free(indio_dev);
438 431
439 return 0; 432 return 0;
440} 433}
diff --git a/drivers/staging/iio/frequency/ad9850.c b/drivers/staging/iio/frequency/ad9850.c
index 01a8a93031f5..af877ff680e9 100644
--- a/drivers/staging/iio/frequency/ad9850.c
+++ b/drivers/staging/iio/frequency/ad9850.c
@@ -80,11 +80,9 @@ static int ad9850_probe(struct spi_device *spi)
80 struct iio_dev *idev; 80 struct iio_dev *idev;
81 int ret = 0; 81 int ret = 0;
82 82
83 idev = iio_device_alloc(sizeof(*st)); 83 idev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
84 if (idev == NULL) { 84 if (!idev)
85 ret = -ENOMEM; 85 return -ENOMEM;
86 goto error_ret;
87 }
88 spi_set_drvdata(spi, idev); 86 spi_set_drvdata(spi, idev);
89 st = iio_priv(idev); 87 st = iio_priv(idev);
90 mutex_init(&st->lock); 88 mutex_init(&st->lock);
@@ -96,24 +94,18 @@ static int ad9850_probe(struct spi_device *spi)
96 94
97 ret = iio_device_register(idev); 95 ret = iio_device_register(idev);
98 if (ret) 96 if (ret)
99 goto error_free_dev; 97 return ret;
100 spi->max_speed_hz = 2000000; 98 spi->max_speed_hz = 2000000;
101 spi->mode = SPI_MODE_3; 99 spi->mode = SPI_MODE_3;
102 spi->bits_per_word = 16; 100 spi->bits_per_word = 16;
103 spi_setup(spi); 101 spi_setup(spi);
104 102
105 return 0; 103 return 0;
106
107error_free_dev:
108 iio_device_free(idev);
109error_ret:
110 return ret;
111} 104}
112 105
113static int ad9850_remove(struct spi_device *spi) 106static int ad9850_remove(struct spi_device *spi)
114{ 107{
115 iio_device_unregister(spi_get_drvdata(spi)); 108 iio_device_unregister(spi_get_drvdata(spi));
116 iio_device_free(spi_get_drvdata(spi));
117 109
118 return 0; 110 return 0;
119} 111}
diff --git a/drivers/staging/iio/frequency/ad9852.c b/drivers/staging/iio/frequency/ad9852.c
index 1344031232bc..4be2cf8c2ab6 100644
--- a/drivers/staging/iio/frequency/ad9852.c
+++ b/drivers/staging/iio/frequency/ad9852.c
@@ -229,11 +229,9 @@ static int ad9852_probe(struct spi_device *spi)
229 struct iio_dev *idev; 229 struct iio_dev *idev;
230 int ret = 0; 230 int ret = 0;
231 231
232 idev = iio_device_alloc(sizeof(*st)); 232 idev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
233 if (idev == NULL) { 233 if (!idev)
234 ret = -ENOMEM; 234 return -ENOMEM;
235 goto error_ret;
236 }
237 st = iio_priv(idev); 235 st = iio_priv(idev);
238 spi_set_drvdata(spi, idev); 236 spi_set_drvdata(spi, idev);
239 mutex_init(&st->lock); 237 mutex_init(&st->lock);
@@ -245,7 +243,7 @@ static int ad9852_probe(struct spi_device *spi)
245 243
246 ret = iio_device_register(idev); 244 ret = iio_device_register(idev);
247 if (ret) 245 if (ret)
248 goto error_free_dev; 246 return ret;
249 spi->max_speed_hz = 2000000; 247 spi->max_speed_hz = 2000000;
250 spi->mode = SPI_MODE_3; 248 spi->mode = SPI_MODE_3;
251 spi->bits_per_word = 8; 249 spi->bits_per_word = 8;
@@ -253,18 +251,11 @@ static int ad9852_probe(struct spi_device *spi)
253 ad9852_init(st); 251 ad9852_init(st);
254 252
255 return 0; 253 return 0;
256
257error_free_dev:
258 iio_device_free(idev);
259
260error_ret:
261 return ret;
262} 254}
263 255
264static int ad9852_remove(struct spi_device *spi) 256static int ad9852_remove(struct spi_device *spi)
265{ 257{
266 iio_device_unregister(spi_get_drvdata(spi)); 258 iio_device_unregister(spi_get_drvdata(spi));
267 iio_device_free(spi_get_drvdata(spi));
268 259
269 return 0; 260 return 0;
270} 261}
diff --git a/drivers/staging/iio/frequency/ad9910.c b/drivers/staging/iio/frequency/ad9910.c
index e48f874c1fc2..a7d528ef620c 100644
--- a/drivers/staging/iio/frequency/ad9910.c
+++ b/drivers/staging/iio/frequency/ad9910.c
@@ -367,11 +367,9 @@ static int ad9910_probe(struct spi_device *spi)
367 struct iio_dev *idev; 367 struct iio_dev *idev;
368 int ret = 0; 368 int ret = 0;
369 369
370 idev = iio_device_alloc(sizeof(*st)); 370 idev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
371 if (idev == NULL) { 371 if (!idev)
372 ret = -ENOMEM; 372 return -ENOMEM;
373 goto error_ret;
374 }
375 spi_set_drvdata(spi, idev); 373 spi_set_drvdata(spi, idev);
376 st = iio_priv(idev); 374 st = iio_priv(idev);
377 mutex_init(&st->lock); 375 mutex_init(&st->lock);
@@ -383,24 +381,18 @@ static int ad9910_probe(struct spi_device *spi)
383 381
384 ret = iio_device_register(idev); 382 ret = iio_device_register(idev);
385 if (ret) 383 if (ret)
386 goto error_free_dev; 384 return ret;
387 spi->max_speed_hz = 2000000; 385 spi->max_speed_hz = 2000000;
388 spi->mode = SPI_MODE_3; 386 spi->mode = SPI_MODE_3;
389 spi->bits_per_word = 8; 387 spi->bits_per_word = 8;
390 spi_setup(spi); 388 spi_setup(spi);
391 ad9910_init(st); 389 ad9910_init(st);
392 return 0; 390 return 0;
393
394error_free_dev:
395 iio_device_free(idev);
396error_ret:
397 return ret;
398} 391}
399 392
400static int ad9910_remove(struct spi_device *spi) 393static int ad9910_remove(struct spi_device *spi)
401{ 394{
402 iio_device_unregister(spi_get_drvdata(spi)); 395 iio_device_unregister(spi_get_drvdata(spi));
403 iio_device_free(spi_get_drvdata(spi));
404 396
405 return 0; 397 return 0;
406} 398}
diff --git a/drivers/staging/iio/frequency/ad9951.c b/drivers/staging/iio/frequency/ad9951.c
index 8234e3c915c4..0094c2f392ad 100644
--- a/drivers/staging/iio/frequency/ad9951.c
+++ b/drivers/staging/iio/frequency/ad9951.c
@@ -176,11 +176,9 @@ static int ad9951_probe(struct spi_device *spi)
176 struct iio_dev *idev; 176 struct iio_dev *idev;
177 int ret = 0; 177 int ret = 0;
178 178
179 idev = iio_device_alloc(sizeof(*st)); 179 idev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
180 if (idev == NULL) { 180 if (!idev)
181 ret = -ENOMEM; 181 return -ENOMEM;
182 goto error_ret;
183 }
184 spi_set_drvdata(spi, idev); 182 spi_set_drvdata(spi, idev);
185 st = iio_priv(idev); 183 st = iio_priv(idev);
186 mutex_init(&st->lock); 184 mutex_init(&st->lock);
@@ -193,25 +191,18 @@ static int ad9951_probe(struct spi_device *spi)
193 191
194 ret = iio_device_register(idev); 192 ret = iio_device_register(idev);
195 if (ret) 193 if (ret)
196 goto error_free_dev; 194 return ret;
197 spi->max_speed_hz = 2000000; 195 spi->max_speed_hz = 2000000;
198 spi->mode = SPI_MODE_3; 196 spi->mode = SPI_MODE_3;
199 spi->bits_per_word = 8; 197 spi->bits_per_word = 8;
200 spi_setup(spi); 198 spi_setup(spi);
201 ad9951_init(st); 199 ad9951_init(st);
202 return 0; 200 return 0;
203
204error_free_dev:
205 iio_device_free(idev);
206
207error_ret:
208 return ret;
209} 201}
210 202
211static int ad9951_remove(struct spi_device *spi) 203static int ad9951_remove(struct spi_device *spi)
212{ 204{
213 iio_device_unregister(spi_get_drvdata(spi)); 205 iio_device_unregister(spi_get_drvdata(spi));
214 iio_device_free(spi_get_drvdata(spi));
215 206
216 return 0; 207 return 0;
217} 208}
diff --git a/drivers/staging/iio/iio_simple_dummy.c b/drivers/staging/iio/iio_simple_dummy.c
index 0e8e02a3cf5b..141ec6188dea 100644
--- a/drivers/staging/iio/iio_simple_dummy.c
+++ b/drivers/staging/iio/iio_simple_dummy.c
@@ -90,6 +90,11 @@ static const struct iio_chan_spec iio_dummy_channels[] = {
90 * when converting to standard units (microvolts) 90 * when converting to standard units (microvolts)
91 */ 91 */
92 BIT(IIO_CHAN_INFO_SCALE), 92 BIT(IIO_CHAN_INFO_SCALE),
93 /*
94 * sampling_frequency
95 * The frequency in Hz at which the channels are sampled
96 */
97 .info_mask_shared_by_dir = BIT(IIO_CHAN_INFO_SAMP_FREQ),
93 /* The ordering of elements in the buffer via an enum */ 98 /* The ordering of elements in the buffer via an enum */
94 .scan_index = voltage0, 99 .scan_index = voltage0,
95 .scan_type = { /* Description of storage in buffer */ 100 .scan_type = { /* Description of storage in buffer */
@@ -130,6 +135,10 @@ static const struct iio_chan_spec iio_dummy_channels[] = {
130 * input channels of type IIO_VOLTAGE. 135 * input channels of type IIO_VOLTAGE.
131 */ 136 */
132 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), 137 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
138 /*
139 * sampling_frequency
140 * The frequency in Hz at which the channels are sampled
141 */
133 .scan_index = diffvoltage1m2, 142 .scan_index = diffvoltage1m2,
134 .scan_type = { /* Description of storage in buffer */ 143 .scan_type = { /* Description of storage in buffer */
135 .sign = 's', /* signed */ 144 .sign = 's', /* signed */
@@ -147,6 +156,7 @@ static const struct iio_chan_spec iio_dummy_channels[] = {
147 .channel2 = 4, 156 .channel2 = 4,
148 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), 157 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
149 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), 158 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
159 .info_mask_shared_by_dir = BIT(IIO_CHAN_INFO_SAMP_FREQ),
150 .scan_index = diffvoltage3m4, 160 .scan_index = diffvoltage3m4,
151 .scan_type = { 161 .scan_type = {
152 .sign = 's', 162 .sign = 's',
@@ -173,6 +183,7 @@ static const struct iio_chan_spec iio_dummy_channels[] = {
173 */ 183 */
174 BIT(IIO_CHAN_INFO_CALIBSCALE) | 184 BIT(IIO_CHAN_INFO_CALIBSCALE) |
175 BIT(IIO_CHAN_INFO_CALIBBIAS), 185 BIT(IIO_CHAN_INFO_CALIBBIAS),
186 .info_mask_shared_by_dir = BIT(IIO_CHAN_INFO_SAMP_FREQ),
176 .scan_index = accelx, 187 .scan_index = accelx,
177 .scan_type = { /* Description of storage in buffer */ 188 .scan_type = { /* Description of storage in buffer */
178 .sign = 's', /* signed */ 189 .sign = 's', /* signed */
@@ -272,6 +283,11 @@ static int iio_dummy_read_raw(struct iio_dev *indio_dev,
272 *val2 = st->accel_calibscale->val2; 283 *val2 = st->accel_calibscale->val2;
273 ret = IIO_VAL_INT_PLUS_MICRO; 284 ret = IIO_VAL_INT_PLUS_MICRO;
274 break; 285 break;
286 case IIO_CHAN_INFO_SAMP_FREQ:
287 *val = 3;
288 *val2 = 33;
289 ret = IIO_VAL_INT_PLUS_NANO;
290 break;
275 default: 291 default:
276 break; 292 break;
277 } 293 }
diff --git a/drivers/staging/iio/iio_simple_dummy_buffer.c b/drivers/staging/iio/iio_simple_dummy_buffer.c
index 72f400c3cbcb..09c93ac7351a 100644
--- a/drivers/staging/iio/iio_simple_dummy_buffer.c
+++ b/drivers/staging/iio/iio_simple_dummy_buffer.c
@@ -82,11 +82,8 @@ static irqreturn_t iio_simple_dummy_trigger_h(int irq, void *p)
82 len += 2; 82 len += 2;
83 } 83 }
84 } 84 }
85 /* Store the timestamp at an 8 byte aligned offset */ 85
86 if (indio_dev->scan_timestamp) 86 iio_push_to_buffers_with_timestamp(indio_dev, data, iio_get_time_ns());
87 *(s64 *)((u8 *)data + ALIGN(len, sizeof(s64)))
88 = iio_get_time_ns();
89 iio_push_to_buffers(indio_dev, (u8 *)data);
90 87
91 kfree(data); 88 kfree(data);
92 89
diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
index 6330af656a0f..712f3c22ce64 100644
--- a/drivers/staging/iio/impedance-analyzer/ad5933.c
+++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
@@ -323,10 +323,10 @@ static ssize_t ad5933_store_frequency(struct device *dev,
323 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 323 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
324 struct ad5933_state *st = iio_priv(indio_dev); 324 struct ad5933_state *st = iio_priv(indio_dev);
325 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 325 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
326 long val; 326 unsigned long val;
327 int ret; 327 int ret;
328 328
329 ret = strict_strtoul(buf, 10, &val); 329 ret = kstrtoul(buf, 10, &val);
330 if (ret) 330 if (ret)
331 return ret; 331 return ret;
332 332
@@ -400,12 +400,12 @@ static ssize_t ad5933_store(struct device *dev,
400 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 400 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
401 struct ad5933_state *st = iio_priv(indio_dev); 401 struct ad5933_state *st = iio_priv(indio_dev);
402 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 402 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
403 long val; 403 u16 val;
404 int i, ret = 0; 404 int i, ret = 0;
405 unsigned short dat; 405 unsigned short dat;
406 406
407 if (this_attr->address != AD5933_IN_PGA_GAIN) { 407 if (this_attr->address != AD5933_IN_PGA_GAIN) {
408 ret = strict_strtol(buf, 10, &val); 408 ret = kstrtou16(buf, 10, &val);
409 if (ret) 409 if (ret)
410 return ret; 410 return ret;
411 } 411 }
@@ -434,7 +434,7 @@ static ssize_t ad5933_store(struct device *dev,
434 ret = ad5933_cmd(st, 0); 434 ret = ad5933_cmd(st, 0);
435 break; 435 break;
436 case AD5933_OUT_SETTLING_CYCLES: 436 case AD5933_OUT_SETTLING_CYCLES:
437 val = clamp(val, 0L, 0x7FFL); 437 val = clamp(val, (u16)0, (u16)0x7FF);
438 st->settling_cycles = val; 438 st->settling_cycles = val;
439 439
440 /* 2x, 4x handling, see datasheet */ 440 /* 2x, 4x handling, see datasheet */
@@ -448,7 +448,7 @@ static ssize_t ad5933_store(struct device *dev,
448 AD5933_REG_SETTLING_CYCLES, 2, (u8 *)&dat); 448 AD5933_REG_SETTLING_CYCLES, 2, (u8 *)&dat);
449 break; 449 break;
450 case AD5933_FREQ_POINTS: 450 case AD5933_FREQ_POINTS:
451 val = clamp(val, 0L, 511L); 451 val = clamp(val, (u16)0, (u16)511);
452 st->freq_points = val; 452 st->freq_points = val;
453 453
454 dat = cpu_to_be16(val); 454 dat = cpu_to_be16(val);
@@ -676,7 +676,7 @@ static void ad5933_work(struct work_struct *work)
676 } else { 676 } else {
677 buf[0] = be16_to_cpu(buf[0]); 677 buf[0] = be16_to_cpu(buf[0]);
678 } 678 }
679 iio_push_to_buffers(indio_dev, (u8 *)buf); 679 iio_push_to_buffers(indio_dev, buf);
680 } else { 680 } else {
681 /* no data available - try again later */ 681 /* no data available - try again later */
682 schedule_delayed_work(&st->work, st->poll_time_jiffies); 682 schedule_delayed_work(&st->work, st->poll_time_jiffies);
@@ -703,7 +703,9 @@ static int ad5933_probe(struct i2c_client *client,
703 int ret, voltage_uv = 0; 703 int ret, voltage_uv = 0;
704 struct ad5933_platform_data *pdata = client->dev.platform_data; 704 struct ad5933_platform_data *pdata = client->dev.platform_data;
705 struct ad5933_state *st; 705 struct ad5933_state *st;
706 struct iio_dev *indio_dev = iio_device_alloc(sizeof(*st)); 706 struct iio_dev *indio_dev;
707
708 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*st));
707 if (indio_dev == NULL) 709 if (indio_dev == NULL)
708 return -ENOMEM; 710 return -ENOMEM;
709 711
@@ -716,11 +718,11 @@ static int ad5933_probe(struct i2c_client *client,
716 else 718 else
717 st->pdata = pdata; 719 st->pdata = pdata;
718 720
719 st->reg = regulator_get(&client->dev, "vcc"); 721 st->reg = devm_regulator_get(&client->dev, "vcc");
720 if (!IS_ERR(st->reg)) { 722 if (!IS_ERR(st->reg)) {
721 ret = regulator_enable(st->reg); 723 ret = regulator_enable(st->reg);
722 if (ret) 724 if (ret)
723 goto error_put_reg; 725 return ret;
724 voltage_uv = regulator_get_voltage(st->reg); 726 voltage_uv = regulator_get_voltage(st->reg);
725 } 727 }
726 728
@@ -778,11 +780,6 @@ error_unreg_ring:
778error_disable_reg: 780error_disable_reg:
779 if (!IS_ERR(st->reg)) 781 if (!IS_ERR(st->reg))
780 regulator_disable(st->reg); 782 regulator_disable(st->reg);
781error_put_reg:
782 if (!IS_ERR(st->reg))
783 regulator_put(st->reg);
784
785 iio_device_free(indio_dev);
786 783
787 return ret; 784 return ret;
788} 785}
@@ -795,11 +792,8 @@ static int ad5933_remove(struct i2c_client *client)
795 iio_device_unregister(indio_dev); 792 iio_device_unregister(indio_dev);
796 iio_buffer_unregister(indio_dev); 793 iio_buffer_unregister(indio_dev);
797 iio_kfifo_free(indio_dev->buffer); 794 iio_kfifo_free(indio_dev->buffer);
798 if (!IS_ERR(st->reg)) { 795 if (!IS_ERR(st->reg))
799 regulator_disable(st->reg); 796 regulator_disable(st->reg);
800 regulator_put(st->reg);
801 }
802 iio_device_free(indio_dev);
803 797
804 return 0; 798 return 0;
805} 799}
diff --git a/drivers/staging/iio/light/isl29018.c b/drivers/staging/iio/light/isl29018.c
index 351936c3efd6..e314d7ee29dd 100644
--- a/drivers/staging/iio/light/isl29018.c
+++ b/drivers/staging/iio/light/isl29018.c
@@ -240,7 +240,7 @@ static ssize_t store_range(struct device *dev,
240 unsigned long lval; 240 unsigned long lval;
241 unsigned int new_range; 241 unsigned int new_range;
242 242
243 if (strict_strtoul(buf, 10, &lval)) 243 if (kstrtoul(buf, 10, &lval))
244 return -EINVAL; 244 return -EINVAL;
245 245
246 if (!(lval == 1000UL || lval == 4000UL || 246 if (!(lval == 1000UL || lval == 4000UL ||
@@ -279,18 +279,18 @@ static ssize_t store_resolution(struct device *dev,
279 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 279 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
280 struct isl29018_chip *chip = iio_priv(indio_dev); 280 struct isl29018_chip *chip = iio_priv(indio_dev);
281 int status; 281 int status;
282 unsigned long lval; 282 unsigned int val;
283 unsigned int new_adc_bit; 283 unsigned int new_adc_bit;
284 284
285 if (strict_strtoul(buf, 10, &lval)) 285 if (kstrtouint(buf, 10, &val))
286 return -EINVAL; 286 return -EINVAL;
287 if (!(lval == 4 || lval == 8 || lval == 12 || lval == 16)) { 287 if (!(val == 4 || val == 8 || val == 12 || val == 16)) {
288 dev_err(dev, "The resolution is not supported\n"); 288 dev_err(dev, "The resolution is not supported\n");
289 return -EINVAL; 289 return -EINVAL;
290 } 290 }
291 291
292 mutex_lock(&chip->lock); 292 mutex_lock(&chip->lock);
293 status = isl29018_set_resolution(chip, lval, &new_adc_bit); 293 status = isl29018_set_resolution(chip, val, &new_adc_bit);
294 if (status < 0) { 294 if (status < 0) {
295 mutex_unlock(&chip->lock); 295 mutex_unlock(&chip->lock);
296 dev_err(dev, "Error in setting resolution\n"); 296 dev_err(dev, "Error in setting resolution\n");
@@ -319,11 +319,11 @@ static ssize_t store_prox_infrared_suppression(struct device *dev,
319{ 319{
320 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 320 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
321 struct isl29018_chip *chip = iio_priv(indio_dev); 321 struct isl29018_chip *chip = iio_priv(indio_dev);
322 unsigned long lval; 322 int val;
323 323
324 if (strict_strtoul(buf, 10, &lval)) 324 if (kstrtoint(buf, 10, &val))
325 return -EINVAL; 325 return -EINVAL;
326 if (!(lval == 0UL || lval == 1UL)) { 326 if (!(val == 0 || val == 1)) {
327 dev_err(dev, "The mode is not supported\n"); 327 dev_err(dev, "The mode is not supported\n");
328 return -EINVAL; 328 return -EINVAL;
329 } 329 }
@@ -331,7 +331,7 @@ static ssize_t store_prox_infrared_suppression(struct device *dev,
331 /* get the "proximity scheme" i.e. if the chip does on chip 331 /* get the "proximity scheme" i.e. if the chip does on chip
332 infrared suppression (1 means perform on chip suppression) */ 332 infrared suppression (1 means perform on chip suppression) */
333 mutex_lock(&chip->lock); 333 mutex_lock(&chip->lock);
334 chip->prox_scheme = (int)lval; 334 chip->prox_scheme = val;
335 mutex_unlock(&chip->lock); 335 mutex_unlock(&chip->lock);
336 336
337 return count; 337 return count;
diff --git a/drivers/staging/iio/light/tsl2583.c b/drivers/staging/iio/light/tsl2583.c
index b377dd3b76ad..f8c659568c38 100644
--- a/drivers/staging/iio/light/tsl2583.c
+++ b/drivers/staging/iio/light/tsl2583.c
@@ -493,9 +493,9 @@ static ssize_t taos_power_state_store(struct device *dev,
493 struct device_attribute *attr, const char *buf, size_t len) 493 struct device_attribute *attr, const char *buf, size_t len)
494{ 494{
495 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 495 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
496 unsigned long value; 496 int value;
497 497
498 if (strict_strtoul(buf, 0, &value)) 498 if (kstrtoint(buf, 0, &value))
499 return -EINVAL; 499 return -EINVAL;
500 500
501 if (value == 0) 501 if (value == 0)
@@ -536,9 +536,9 @@ static ssize_t taos_gain_store(struct device *dev,
536{ 536{
537 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 537 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
538 struct tsl2583_chip *chip = iio_priv(indio_dev); 538 struct tsl2583_chip *chip = iio_priv(indio_dev);
539 unsigned long value; 539 int value;
540 540
541 if (strict_strtoul(buf, 0, &value)) 541 if (kstrtoint(buf, 0, &value))
542 return -EINVAL; 542 return -EINVAL;
543 543
544 switch (value) { 544 switch (value) {
@@ -582,9 +582,9 @@ static ssize_t taos_als_time_store(struct device *dev,
582{ 582{
583 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 583 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
584 struct tsl2583_chip *chip = iio_priv(indio_dev); 584 struct tsl2583_chip *chip = iio_priv(indio_dev);
585 unsigned long value; 585 int value;
586 586
587 if (strict_strtoul(buf, 0, &value)) 587 if (kstrtoint(buf, 0, &value))
588 return -EINVAL; 588 return -EINVAL;
589 589
590 if ((value < 50) || (value > 650)) 590 if ((value < 50) || (value > 650))
@@ -619,9 +619,9 @@ static ssize_t taos_als_trim_store(struct device *dev,
619{ 619{
620 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 620 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
621 struct tsl2583_chip *chip = iio_priv(indio_dev); 621 struct tsl2583_chip *chip = iio_priv(indio_dev);
622 unsigned long value; 622 int value;
623 623
624 if (strict_strtoul(buf, 0, &value)) 624 if (kstrtoint(buf, 0, &value))
625 return -EINVAL; 625 return -EINVAL;
626 626
627 if (value) 627 if (value)
@@ -644,9 +644,9 @@ static ssize_t taos_als_cal_target_store(struct device *dev,
644{ 644{
645 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 645 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
646 struct tsl2583_chip *chip = iio_priv(indio_dev); 646 struct tsl2583_chip *chip = iio_priv(indio_dev);
647 unsigned long value; 647 int value;
648 648
649 if (strict_strtoul(buf, 0, &value)) 649 if (kstrtoint(buf, 0, &value))
650 return -EINVAL; 650 return -EINVAL;
651 651
652 if (value) 652 if (value)
@@ -671,9 +671,9 @@ static ssize_t taos_do_calibrate(struct device *dev,
671 struct device_attribute *attr, const char *buf, size_t len) 671 struct device_attribute *attr, const char *buf, size_t len)
672{ 672{
673 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 673 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
674 unsigned long value; 674 int value;
675 675
676 if (strict_strtoul(buf, 0, &value)) 676 if (kstrtoint(buf, 0, &value))
677 return -EINVAL; 677 return -EINVAL;
678 678
679 if (value == 1) 679 if (value == 1)
@@ -815,12 +815,9 @@ static int taos_probe(struct i2c_client *clientp,
815 return -EOPNOTSUPP; 815 return -EOPNOTSUPP;
816 } 816 }
817 817
818 indio_dev = iio_device_alloc(sizeof(*chip)); 818 indio_dev = devm_iio_device_alloc(&clientp->dev, sizeof(*chip));
819 if (indio_dev == NULL) { 819 if (!indio_dev)
820 ret = -ENOMEM; 820 return -ENOMEM;
821 dev_err(&clientp->dev, "iio allocation failed\n");
822 goto fail1;
823 }
824 chip = iio_priv(indio_dev); 821 chip = iio_priv(indio_dev);
825 chip->client = clientp; 822 chip->client = clientp;
826 i2c_set_clientdata(clientp, indio_dev); 823 i2c_set_clientdata(clientp, indio_dev);
@@ -835,14 +832,14 @@ static int taos_probe(struct i2c_client *clientp,
835 if (ret < 0) { 832 if (ret < 0) {
836 dev_err(&clientp->dev, "i2c_smbus_write_bytes() to cmd " 833 dev_err(&clientp->dev, "i2c_smbus_write_bytes() to cmd "
837 "reg failed in taos_probe(), err = %d\n", ret); 834 "reg failed in taos_probe(), err = %d\n", ret);
838 goto fail2; 835 return ret;
839 } 836 }
840 ret = i2c_smbus_read_byte(clientp); 837 ret = i2c_smbus_read_byte(clientp);
841 if (ret < 0) { 838 if (ret < 0) {
842 dev_err(&clientp->dev, "i2c_smbus_read_byte from " 839 dev_err(&clientp->dev, "i2c_smbus_read_byte from "
843 "reg failed in taos_probe(), err = %d\n", ret); 840 "reg failed in taos_probe(), err = %d\n", ret);
844 841
845 goto fail2; 842 return ret;
846 } 843 }
847 buf[i] = ret; 844 buf[i] = ret;
848 } 845 }
@@ -850,14 +847,14 @@ static int taos_probe(struct i2c_client *clientp,
850 if (!taos_tsl258x_device(buf)) { 847 if (!taos_tsl258x_device(buf)) {
851 dev_info(&clientp->dev, "i2c device found but does not match " 848 dev_info(&clientp->dev, "i2c device found but does not match "
852 "expected id in taos_probe()\n"); 849 "expected id in taos_probe()\n");
853 goto fail2; 850 return -EINVAL;
854 } 851 }
855 852
856 ret = i2c_smbus_write_byte(clientp, (TSL258X_CMD_REG | TSL258X_CNTRL)); 853 ret = i2c_smbus_write_byte(clientp, (TSL258X_CMD_REG | TSL258X_CNTRL));
857 if (ret < 0) { 854 if (ret < 0) {
858 dev_err(&clientp->dev, "i2c_smbus_write_byte() to cmd reg " 855 dev_err(&clientp->dev, "i2c_smbus_write_byte() to cmd reg "
859 "failed in taos_probe(), err = %d\n", ret); 856 "failed in taos_probe(), err = %d\n", ret);
860 goto fail2; 857 return ret;
861 } 858 }
862 859
863 indio_dev->info = &tsl2583_info; 860 indio_dev->info = &tsl2583_info;
@@ -867,7 +864,7 @@ static int taos_probe(struct i2c_client *clientp,
867 ret = iio_device_register(indio_dev); 864 ret = iio_device_register(indio_dev);
868 if (ret) { 865 if (ret) {
869 dev_err(&clientp->dev, "iio registration failed\n"); 866 dev_err(&clientp->dev, "iio registration failed\n");
870 goto fail2; 867 return ret;
871 } 868 }
872 869
873 /* Load up the V2 defaults (these are hard coded defaults for now) */ 870 /* Load up the V2 defaults (these are hard coded defaults for now) */
@@ -878,10 +875,6 @@ static int taos_probe(struct i2c_client *clientp,
878 875
879 dev_info(&clientp->dev, "Light sensor found.\n"); 876 dev_info(&clientp->dev, "Light sensor found.\n");
880 return 0; 877 return 0;
881fail1:
882 iio_device_free(indio_dev);
883fail2:
884 return ret;
885} 878}
886 879
887#ifdef CONFIG_PM_SLEEP 880#ifdef CONFIG_PM_SLEEP
@@ -926,7 +919,6 @@ static SIMPLE_DEV_PM_OPS(taos_pm_ops, taos_suspend, taos_resume);
926static int taos_remove(struct i2c_client *client) 919static int taos_remove(struct i2c_client *client)
927{ 920{
928 iio_device_unregister(i2c_get_clientdata(client)); 921 iio_device_unregister(i2c_get_clientdata(client));
929 iio_device_free(i2c_get_clientdata(client));
930 922
931 return 0; 923 return 0;
932} 924}
diff --git a/drivers/staging/iio/light/tsl2x7x_core.c b/drivers/staging/iio/light/tsl2x7x_core.c
index c99f890cc6c6..9c43dcf444c2 100644
--- a/drivers/staging/iio/light/tsl2x7x_core.c
+++ b/drivers/staging/iio/light/tsl2x7x_core.c
@@ -550,7 +550,7 @@ prox_poll_err:
550static void tsl2x7x_defaults(struct tsl2X7X_chip *chip) 550static void tsl2x7x_defaults(struct tsl2X7X_chip *chip)
551{ 551{
552 /* If Operational settings defined elsewhere.. */ 552 /* If Operational settings defined elsewhere.. */
553 if (chip->pdata && chip->pdata->platform_default_settings != 0) 553 if (chip->pdata && chip->pdata->platform_default_settings)
554 memcpy(&(chip->tsl2x7x_settings), 554 memcpy(&(chip->tsl2x7x_settings),
555 chip->pdata->platform_default_settings, 555 chip->pdata->platform_default_settings,
556 sizeof(tsl2x7x_default_settings)); 556 sizeof(tsl2x7x_default_settings));
@@ -951,7 +951,6 @@ static ssize_t tsl2x7x_gain_available_show(struct device *dev,
951 case tsl2771: 951 case tsl2771:
952 case tmd2771: 952 case tmd2771:
953 return snprintf(buf, PAGE_SIZE, "%s\n", "1 8 16 128"); 953 return snprintf(buf, PAGE_SIZE, "%s\n", "1 8 16 128");
954 break;
955 } 954 }
956 955
957 return snprintf(buf, PAGE_SIZE, "%s\n", "1 8 16 120"); 956 return snprintf(buf, PAGE_SIZE, "%s\n", "1 8 16 120");
@@ -1346,7 +1345,6 @@ static int tsl2x7x_read_raw(struct iio_dev *indio_dev,
1346 break; 1345 break;
1347 default: 1346 default:
1348 return -EINVAL; 1347 return -EINVAL;
1349 break;
1350 } 1348 }
1351 break; 1349 break;
1352 case IIO_CHAN_INFO_RAW: 1350 case IIO_CHAN_INFO_RAW:
@@ -1366,7 +1364,6 @@ static int tsl2x7x_read_raw(struct iio_dev *indio_dev,
1366 break; 1364 break;
1367 default: 1365 default:
1368 return -EINVAL; 1366 return -EINVAL;
1369 break;
1370 } 1367 }
1371 break; 1368 break;
1372 case IIO_CHAN_INFO_CALIBSCALE: 1369 case IIO_CHAN_INFO_CALIBSCALE:
@@ -1419,7 +1416,6 @@ static int tsl2x7x_write_raw(struct iio_dev *indio_dev,
1419 case tsl2772: 1416 case tsl2772:
1420 case tmd2772: 1417 case tmd2772:
1421 return -EINVAL; 1418 return -EINVAL;
1422 break;
1423 } 1419 }
1424 chip->tsl2x7x_settings.als_gain = 3; 1420 chip->tsl2x7x_settings.als_gain = 3;
1425 break; 1421 break;
@@ -1431,7 +1427,6 @@ static int tsl2x7x_write_raw(struct iio_dev *indio_dev,
1431 case tsl2771: 1427 case tsl2771:
1432 case tmd2771: 1428 case tmd2771:
1433 return -EINVAL; 1429 return -EINVAL;
1434 break;
1435 } 1430 }
1436 chip->tsl2x7x_settings.als_gain = 3; 1431 chip->tsl2x7x_settings.als_gain = 3;
1437 break; 1432 break;
@@ -1508,18 +1503,15 @@ static int tsl2x7x_device_id(unsigned char *id, int target)
1508 case tsl2671: 1503 case tsl2671:
1509 case tsl2771: 1504 case tsl2771:
1510 return ((*id & 0xf0) == TRITON_ID); 1505 return ((*id & 0xf0) == TRITON_ID);
1511 break;
1512 case tmd2671: 1506 case tmd2671:
1513 case tmd2771: 1507 case tmd2771:
1514 return ((*id & 0xf0) == HALIBUT_ID); 1508 return ((*id & 0xf0) == HALIBUT_ID);
1515 break;
1516 case tsl2572: 1509 case tsl2572:
1517 case tsl2672: 1510 case tsl2672:
1518 case tmd2672: 1511 case tmd2672:
1519 case tsl2772: 1512 case tsl2772:
1520 case tmd2772: 1513 case tmd2772:
1521 return ((*id & 0xf0) == SWORDFISH_ID); 1514 return ((*id & 0xf0) == SWORDFISH_ID);
1522 break;
1523 } 1515 }
1524 1516
1525 return -EINVAL; 1517 return -EINVAL;
@@ -1851,7 +1843,7 @@ static int tsl2x7x_probe(struct i2c_client *clientp,
1851 struct iio_dev *indio_dev; 1843 struct iio_dev *indio_dev;
1852 struct tsl2X7X_chip *chip; 1844 struct tsl2X7X_chip *chip;
1853 1845
1854 indio_dev = iio_device_alloc(sizeof(*chip)); 1846 indio_dev = devm_iio_device_alloc(&clientp->dev, sizeof(*chip));
1855 if (!indio_dev) 1847 if (!indio_dev)
1856 return -ENOMEM; 1848 return -ENOMEM;
1857 1849
@@ -1862,22 +1854,21 @@ static int tsl2x7x_probe(struct i2c_client *clientp,
1862 ret = tsl2x7x_i2c_read(chip->client, 1854 ret = tsl2x7x_i2c_read(chip->client,
1863 TSL2X7X_CHIPID, &device_id); 1855 TSL2X7X_CHIPID, &device_id);
1864 if (ret < 0) 1856 if (ret < 0)
1865 goto fail1; 1857 return ret;
1866 1858
1867 if ((!tsl2x7x_device_id(&device_id, id->driver_data)) || 1859 if ((!tsl2x7x_device_id(&device_id, id->driver_data)) ||
1868 (tsl2x7x_device_id(&device_id, id->driver_data) == -EINVAL)) { 1860 (tsl2x7x_device_id(&device_id, id->driver_data) == -EINVAL)) {
1869 dev_info(&chip->client->dev, 1861 dev_info(&chip->client->dev,
1870 "%s: i2c device found does not match expected id\n", 1862 "%s: i2c device found does not match expected id\n",
1871 __func__); 1863 __func__);
1872 ret = -EINVAL; 1864 return -EINVAL;
1873 goto fail1;
1874 } 1865 }
1875 1866
1876 ret = i2c_smbus_write_byte(clientp, (TSL2X7X_CMD_REG | TSL2X7X_CNTRL)); 1867 ret = i2c_smbus_write_byte(clientp, (TSL2X7X_CMD_REG | TSL2X7X_CNTRL));
1877 if (ret < 0) { 1868 if (ret < 0) {
1878 dev_err(&clientp->dev, "%s: write to cmd reg failed. err = %d\n", 1869 dev_err(&clientp->dev, "%s: write to cmd reg failed. err = %d\n",
1879 __func__, ret); 1870 __func__, ret);
1880 goto fail1; 1871 return ret;
1881 } 1872 }
1882 1873
1883 /* ALS and PROX functions can be invoked via user space poll 1874 /* ALS and PROX functions can be invoked via user space poll
@@ -1899,16 +1890,17 @@ static int tsl2x7x_probe(struct i2c_client *clientp,
1899 indio_dev->num_channels = chip->chip_info->chan_table_elements; 1890 indio_dev->num_channels = chip->chip_info->chan_table_elements;
1900 1891
1901 if (clientp->irq) { 1892 if (clientp->irq) {
1902 ret = request_threaded_irq(clientp->irq, 1893 ret = devm_request_threaded_irq(&clientp->dev, clientp->irq,
1903 NULL, 1894 NULL,
1904 &tsl2x7x_event_handler, 1895 &tsl2x7x_event_handler,
1905 IRQF_TRIGGER_RISING | IRQF_ONESHOT, 1896 IRQF_TRIGGER_RISING |
1906 "TSL2X7X_event", 1897 IRQF_ONESHOT,
1907 indio_dev); 1898 "TSL2X7X_event",
1899 indio_dev);
1908 if (ret) { 1900 if (ret) {
1909 dev_err(&clientp->dev, 1901 dev_err(&clientp->dev,
1910 "%s: irq request failed", __func__); 1902 "%s: irq request failed", __func__);
1911 goto fail1; 1903 return ret;
1912 } 1904 }
1913 } 1905 }
1914 1906
@@ -1921,20 +1913,12 @@ static int tsl2x7x_probe(struct i2c_client *clientp,
1921 if (ret) { 1913 if (ret) {
1922 dev_err(&clientp->dev, 1914 dev_err(&clientp->dev,
1923 "%s: iio registration failed\n", __func__); 1915 "%s: iio registration failed\n", __func__);
1924 goto fail2; 1916 return ret;
1925 } 1917 }
1926 1918
1927 dev_info(&clientp->dev, "%s Light sensor found.\n", id->name); 1919 dev_info(&clientp->dev, "%s Light sensor found.\n", id->name);
1928 1920
1929 return 0; 1921 return 0;
1930
1931fail2:
1932 if (clientp->irq)
1933 free_irq(clientp->irq, indio_dev);
1934fail1:
1935 iio_device_free(indio_dev);
1936
1937 return ret;
1938} 1922}
1939 1923
1940static int tsl2x7x_suspend(struct device *dev) 1924static int tsl2x7x_suspend(struct device *dev)
@@ -1980,10 +1964,6 @@ static int tsl2x7x_remove(struct i2c_client *client)
1980 tsl2x7x_chip_off(indio_dev); 1964 tsl2x7x_chip_off(indio_dev);
1981 1965
1982 iio_device_unregister(indio_dev); 1966 iio_device_unregister(indio_dev);
1983 if (client->irq)
1984 free_irq(client->irq, indio_dev);
1985
1986 iio_device_free(indio_dev);
1987 1967
1988 return 0; 1968 return 0;
1989} 1969}
diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c
index d2748c329eae..c7c5e82bcf31 100644
--- a/drivers/staging/iio/magnetometer/hmc5843.c
+++ b/drivers/staging/iio/magnetometer/hmc5843.c
@@ -643,11 +643,9 @@ static int hmc5843_probe(struct i2c_client *client,
643 struct iio_dev *indio_dev; 643 struct iio_dev *indio_dev;
644 int err = 0; 644 int err = 0;
645 645
646 indio_dev = iio_device_alloc(sizeof(*data)); 646 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
647 if (indio_dev == NULL) { 647 if (indio_dev == NULL)
648 err = -ENOMEM; 648 return -ENOMEM;
649 goto exit;
650 }
651 649
652 /* default settings at probe */ 650 /* default settings at probe */
653 data = iio_priv(indio_dev); 651 data = iio_priv(indio_dev);
@@ -665,24 +663,16 @@ static int hmc5843_probe(struct i2c_client *client,
665 663
666 err = iio_device_register(indio_dev); 664 err = iio_device_register(indio_dev);
667 if (err) 665 if (err)
668 goto exit_free2; 666 return err;
669 667
670 return 0; 668 return 0;
671
672exit_free2:
673 iio_device_free(indio_dev);
674exit:
675 return err;
676} 669}
677 670
678static int hmc5843_remove(struct i2c_client *client) 671static int hmc5843_remove(struct i2c_client *client)
679{ 672{
680 struct iio_dev *indio_dev = i2c_get_clientdata(client); 673 iio_device_unregister(i2c_get_clientdata(client));
681
682 iio_device_unregister(indio_dev);
683 /* sleep mode to save power */ 674 /* sleep mode to save power */
684 hmc5843_configure(client, HMC5843_MODE_SLEEP); 675 hmc5843_configure(client, HMC5843_MODE_SLEEP);
685 iio_device_free(indio_dev);
686 676
687 return 0; 677 return 0;
688} 678}
@@ -691,14 +681,14 @@ static int hmc5843_remove(struct i2c_client *client)
691static int hmc5843_suspend(struct device *dev) 681static int hmc5843_suspend(struct device *dev)
692{ 682{
693 hmc5843_configure(to_i2c_client(dev), HMC5843_MODE_SLEEP); 683 hmc5843_configure(to_i2c_client(dev), HMC5843_MODE_SLEEP);
684
694 return 0; 685 return 0;
695} 686}
696 687
697static int hmc5843_resume(struct device *dev) 688static int hmc5843_resume(struct device *dev)
698{ 689{
699 struct i2c_client *client = to_i2c_client(dev); 690 struct i2c_client *client = to_i2c_client(dev);
700 struct iio_dev *indio_dev = i2c_get_clientdata(client); 691 struct hmc5843_data *data = iio_priv(i2c_get_clientdata(client));
701 struct hmc5843_data *data = iio_priv(indio_dev);
702 692
703 hmc5843_configure(client, data->operating_mode); 693 hmc5843_configure(client, data->operating_mode);
704 694
@@ -730,6 +720,6 @@ static struct i2c_driver hmc5843_driver = {
730}; 720};
731module_i2c_driver(hmc5843_driver); 721module_i2c_driver(hmc5843_driver);
732 722
733MODULE_AUTHOR("Shubhrajyoti Datta <shubhrajyoti@ti.com"); 723MODULE_AUTHOR("Shubhrajyoti Datta <shubhrajyoti@ti.com>");
734MODULE_DESCRIPTION("HMC5843/5883/5883L driver"); 724MODULE_DESCRIPTION("HMC5843/5883/5883L driver");
735MODULE_LICENSE("GPL"); 725MODULE_LICENSE("GPL");
diff --git a/drivers/staging/iio/meter/ade7753.c b/drivers/staging/iio/meter/ade7753.c
index 74025fbae679..6200335d12f7 100644
--- a/drivers/staging/iio/meter/ade7753.c
+++ b/drivers/staging/iio/meter/ade7753.c
@@ -186,9 +186,9 @@ static ssize_t ade7753_write_8bit(struct device *dev,
186{ 186{
187 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 187 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
188 int ret; 188 int ret;
189 long val; 189 u8 val;
190 190
191 ret = strict_strtol(buf, 10, &val); 191 ret = kstrtou8(buf, 10, &val);
192 if (ret) 192 if (ret)
193 goto error_ret; 193 goto error_ret;
194 ret = ade7753_spi_write_reg_8(dev, this_attr->address, val); 194 ret = ade7753_spi_write_reg_8(dev, this_attr->address, val);
@@ -204,9 +204,9 @@ static ssize_t ade7753_write_16bit(struct device *dev,
204{ 204{
205 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 205 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
206 int ret; 206 int ret;
207 long val; 207 u16 val;
208 208
209 ret = strict_strtol(buf, 10, &val); 209 ret = kstrtou16(buf, 10, &val);
210 if (ret) 210 if (ret)
211 goto error_ret; 211 goto error_ret;
212 ret = ade7753_spi_write_reg_16(dev, this_attr->address, val); 212 ret = ade7753_spi_write_reg_16(dev, this_attr->address, val);
@@ -399,11 +399,11 @@ static ssize_t ade7753_write_frequency(struct device *dev,
399{ 399{
400 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 400 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
401 struct ade7753_state *st = iio_priv(indio_dev); 401 struct ade7753_state *st = iio_priv(indio_dev);
402 unsigned long val; 402 u16 val;
403 int ret; 403 int ret;
404 u16 reg, t; 404 u16 reg, t;
405 405
406 ret = strict_strtol(buf, 10, &val); 406 ret = kstrtou16(buf, 10, &val);
407 if (ret) 407 if (ret)
408 return ret; 408 return ret;
409 if (val == 0) 409 if (val == 0)
@@ -497,11 +497,9 @@ static int ade7753_probe(struct spi_device *spi)
497 struct iio_dev *indio_dev; 497 struct iio_dev *indio_dev;
498 498
499 /* setup the industrialio driver allocated elements */ 499 /* setup the industrialio driver allocated elements */
500 indio_dev = iio_device_alloc(sizeof(*st)); 500 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
501 if (indio_dev == NULL) { 501 if (!indio_dev)
502 ret = -ENOMEM; 502 return -ENOMEM;
503 goto error_ret;
504 }
505 /* this is only used for removal purposes */ 503 /* this is only used for removal purposes */
506 spi_set_drvdata(spi, indio_dev); 504 spi_set_drvdata(spi, indio_dev);
507 505
@@ -517,19 +515,13 @@ static int ade7753_probe(struct spi_device *spi)
517 /* Get the device into a sane initial state */ 515 /* Get the device into a sane initial state */
518 ret = ade7753_initial_setup(indio_dev); 516 ret = ade7753_initial_setup(indio_dev);
519 if (ret) 517 if (ret)
520 goto error_free_dev; 518 return ret;
521 519
522 ret = iio_device_register(indio_dev); 520 ret = iio_device_register(indio_dev);
523 if (ret) 521 if (ret)
524 goto error_free_dev; 522 return ret;
525 523
526 return 0; 524 return 0;
527
528error_free_dev:
529 iio_device_free(indio_dev);
530
531error_ret:
532 return ret;
533} 525}
534 526
535/* fixme, confirm ordering in this function */ 527/* fixme, confirm ordering in this function */
@@ -539,7 +531,6 @@ static int ade7753_remove(struct spi_device *spi)
539 531
540 iio_device_unregister(indio_dev); 532 iio_device_unregister(indio_dev);
541 ade7753_stop_device(&indio_dev->dev); 533 ade7753_stop_device(&indio_dev->dev);
542 iio_device_free(indio_dev);
543 534
544 return 0; 535 return 0;
545} 536}
diff --git a/drivers/staging/iio/meter/ade7754.c b/drivers/staging/iio/meter/ade7754.c
index f649ebe55a04..2e046f6e4fb4 100644
--- a/drivers/staging/iio/meter/ade7754.c
+++ b/drivers/staging/iio/meter/ade7754.c
@@ -186,9 +186,9 @@ static ssize_t ade7754_write_8bit(struct device *dev,
186{ 186{
187 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 187 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
188 int ret; 188 int ret;
189 long val; 189 u8 val;
190 190
191 ret = strict_strtol(buf, 10, &val); 191 ret = kstrtou8(buf, 10, &val);
192 if (ret) 192 if (ret)
193 goto error_ret; 193 goto error_ret;
194 ret = ade7754_spi_write_reg_8(dev, this_attr->address, val); 194 ret = ade7754_spi_write_reg_8(dev, this_attr->address, val);
@@ -204,9 +204,9 @@ static ssize_t ade7754_write_16bit(struct device *dev,
204{ 204{
205 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 205 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
206 int ret; 206 int ret;
207 long val; 207 u16 val;
208 208
209 ret = strict_strtol(buf, 10, &val); 209 ret = kstrtou16(buf, 10, &val);
210 if (ret) 210 if (ret)
211 goto error_ret; 211 goto error_ret;
212 ret = ade7754_spi_write_reg_16(dev, this_attr->address, val); 212 ret = ade7754_spi_write_reg_16(dev, this_attr->address, val);
@@ -419,11 +419,11 @@ static ssize_t ade7754_write_frequency(struct device *dev,
419{ 419{
420 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 420 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
421 struct ade7754_state *st = iio_priv(indio_dev); 421 struct ade7754_state *st = iio_priv(indio_dev);
422 unsigned long val; 422 u16 val;
423 int ret; 423 int ret;
424 u8 reg, t; 424 u8 reg, t;
425 425
426 ret = strict_strtol(buf, 10, &val); 426 ret = kstrtou16(buf, 10, &val);
427 if (ret) 427 if (ret)
428 return ret; 428 return ret;
429 if (val == 0) 429 if (val == 0)
@@ -520,11 +520,9 @@ static int ade7754_probe(struct spi_device *spi)
520 struct iio_dev *indio_dev; 520 struct iio_dev *indio_dev;
521 521
522 /* setup the industrialio driver allocated elements */ 522 /* setup the industrialio driver allocated elements */
523 indio_dev = iio_device_alloc(sizeof(*st)); 523 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
524 if (indio_dev == NULL) { 524 if (!indio_dev)
525 ret = -ENOMEM; 525 return -ENOMEM;
526 goto error_ret;
527 }
528 /* this is only used for removal purposes */ 526 /* this is only used for removal purposes */
529 spi_set_drvdata(spi, indio_dev); 527 spi_set_drvdata(spi, indio_dev);
530 528
@@ -540,18 +538,12 @@ static int ade7754_probe(struct spi_device *spi)
540 /* Get the device into a sane initial state */ 538 /* Get the device into a sane initial state */
541 ret = ade7754_initial_setup(indio_dev); 539 ret = ade7754_initial_setup(indio_dev);
542 if (ret) 540 if (ret)
543 goto error_free_dev; 541 return ret;
544 ret = iio_device_register(indio_dev); 542 ret = iio_device_register(indio_dev);
545 if (ret) 543 if (ret)
546 goto error_free_dev; 544 return ret;
547 545
548 return 0; 546 return 0;
549
550error_free_dev:
551 iio_device_free(indio_dev);
552
553error_ret:
554 return ret;
555} 547}
556 548
557/* fixme, confirm ordering in this function */ 549/* fixme, confirm ordering in this function */
@@ -561,7 +553,6 @@ static int ade7754_remove(struct spi_device *spi)
561 553
562 iio_device_unregister(indio_dev); 554 iio_device_unregister(indio_dev);
563 ade7754_stop_device(&indio_dev->dev); 555 ade7754_stop_device(&indio_dev->dev);
564 iio_device_free(indio_dev);
565 556
566 return 0; 557 return 0;
567} 558}
diff --git a/drivers/staging/iio/meter/ade7758_core.c b/drivers/staging/iio/meter/ade7758_core.c
index 6005d4aab0c3..cba183e24838 100644
--- a/drivers/staging/iio/meter/ade7758_core.c
+++ b/drivers/staging/iio/meter/ade7758_core.c
@@ -269,9 +269,9 @@ static ssize_t ade7758_write_8bit(struct device *dev,
269{ 269{
270 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 270 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
271 int ret; 271 int ret;
272 long val; 272 u8 val;
273 273
274 ret = strict_strtol(buf, 10, &val); 274 ret = kstrtou8(buf, 10, &val);
275 if (ret) 275 if (ret)
276 goto error_ret; 276 goto error_ret;
277 ret = ade7758_spi_write_reg_8(dev, this_attr->address, val); 277 ret = ade7758_spi_write_reg_8(dev, this_attr->address, val);
@@ -287,9 +287,9 @@ static ssize_t ade7758_write_16bit(struct device *dev,
287{ 287{
288 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 288 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
289 int ret; 289 int ret;
290 long val; 290 u16 val;
291 291
292 ret = strict_strtol(buf, 10, &val); 292 ret = kstrtou16(buf, 10, &val);
293 if (ret) 293 if (ret)
294 goto error_ret; 294 goto error_ret;
295 ret = ade7758_spi_write_reg_16(dev, this_attr->address, val); 295 ret = ade7758_spi_write_reg_16(dev, this_attr->address, val);
@@ -502,11 +502,11 @@ static ssize_t ade7758_write_frequency(struct device *dev,
502 size_t len) 502 size_t len)
503{ 503{
504 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 504 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
505 unsigned long val; 505 u16 val;
506 int ret; 506 int ret;
507 u8 reg, t; 507 u8 reg, t;
508 508
509 ret = strict_strtol(buf, 10, &val); 509 ret = kstrtou16(buf, 10, &val);
510 if (ret) 510 if (ret)
511 return ret; 511 return ret;
512 512
@@ -849,12 +849,11 @@ static int ade7758_probe(struct spi_device *spi)
849{ 849{
850 int ret; 850 int ret;
851 struct ade7758_state *st; 851 struct ade7758_state *st;
852 struct iio_dev *indio_dev = iio_device_alloc(sizeof(*st)); 852 struct iio_dev *indio_dev;
853 853
854 if (indio_dev == NULL) { 854 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
855 ret = -ENOMEM; 855 if (!indio_dev)
856 goto error_ret; 856 return -ENOMEM;
857 }
858 857
859 st = iio_priv(indio_dev); 858 st = iio_priv(indio_dev);
860 /* this is only used for removal purposes */ 859 /* this is only used for removal purposes */
@@ -862,10 +861,8 @@ static int ade7758_probe(struct spi_device *spi)
862 861
863 /* Allocate the comms buffers */ 862 /* Allocate the comms buffers */
864 st->rx = kcalloc(ADE7758_MAX_RX, sizeof(*st->rx), GFP_KERNEL); 863 st->rx = kcalloc(ADE7758_MAX_RX, sizeof(*st->rx), GFP_KERNEL);
865 if (st->rx == NULL) { 864 if (!st->rx)
866 ret = -ENOMEM; 865 return -ENOMEM;
867 goto error_free_dev;
868 }
869 st->tx = kcalloc(ADE7758_MAX_TX, sizeof(*st->tx), GFP_KERNEL); 866 st->tx = kcalloc(ADE7758_MAX_TX, sizeof(*st->tx), GFP_KERNEL);
870 if (st->tx == NULL) { 867 if (st->tx == NULL) {
871 ret = -ENOMEM; 868 ret = -ENOMEM;
@@ -920,9 +917,6 @@ error_free_tx:
920 kfree(st->tx); 917 kfree(st->tx);
921error_free_rx: 918error_free_rx:
922 kfree(st->rx); 919 kfree(st->rx);
923error_free_dev:
924 iio_device_free(indio_dev);
925error_ret:
926 return ret; 920 return ret;
927} 921}
928 922
@@ -939,8 +933,6 @@ static int ade7758_remove(struct spi_device *spi)
939 kfree(st->tx); 933 kfree(st->tx);
940 kfree(st->rx); 934 kfree(st->rx);
941 935
942 iio_device_free(indio_dev);
943
944 return 0; 936 return 0;
945} 937}
946 938
diff --git a/drivers/staging/iio/meter/ade7758_ring.c b/drivers/staging/iio/meter/ade7758_ring.c
index 7d5db7175578..4080995c99b6 100644
--- a/drivers/staging/iio/meter/ade7758_ring.c
+++ b/drivers/staging/iio/meter/ade7758_ring.c
@@ -69,11 +69,7 @@ static irqreturn_t ade7758_trigger_handler(int irq, void *p)
69 if (ade7758_spi_read_burst(indio_dev) >= 0) 69 if (ade7758_spi_read_burst(indio_dev) >= 0)
70 *dat32 = get_unaligned_be32(&st->rx_buf[5]) & 0xFFFFFF; 70 *dat32 = get_unaligned_be32(&st->rx_buf[5]) & 0xFFFFFF;
71 71
72 /* Guaranteed to be aligned with 8 byte boundary */ 72 iio_push_to_buffers_with_timestamp(indio_dev, dat64, pf->timestamp);
73 if (indio_dev->scan_timestamp)
74 dat64[1] = pf->timestamp;
75
76 iio_push_to_buffers(indio_dev, (u8 *)dat64);
77 73
78 iio_trigger_notify_done(indio_dev->trig); 74 iio_trigger_notify_done(indio_dev->trig);
79 75
diff --git a/drivers/staging/iio/meter/ade7759.c b/drivers/staging/iio/meter/ade7759.c
index d214ac4932cb..145f896aae2b 100644
--- a/drivers/staging/iio/meter/ade7759.c
+++ b/drivers/staging/iio/meter/ade7759.c
@@ -185,9 +185,9 @@ static ssize_t ade7759_write_8bit(struct device *dev,
185{ 185{
186 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 186 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
187 int ret; 187 int ret;
188 long val; 188 u8 val;
189 189
190 ret = strict_strtol(buf, 10, &val); 190 ret = kstrtou8(buf, 10, &val);
191 if (ret) 191 if (ret)
192 goto error_ret; 192 goto error_ret;
193 ret = ade7759_spi_write_reg_8(dev, this_attr->address, val); 193 ret = ade7759_spi_write_reg_8(dev, this_attr->address, val);
@@ -203,9 +203,9 @@ static ssize_t ade7759_write_16bit(struct device *dev,
203{ 203{
204 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 204 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
205 int ret; 205 int ret;
206 long val; 206 u16 val;
207 207
208 ret = strict_strtol(buf, 10, &val); 208 ret = kstrtou16(buf, 10, &val);
209 if (ret) 209 if (ret)
210 goto error_ret; 210 goto error_ret;
211 ret = ade7759_spi_write_reg_16(dev, this_attr->address, val); 211 ret = ade7759_spi_write_reg_16(dev, this_attr->address, val);
@@ -360,11 +360,11 @@ static ssize_t ade7759_write_frequency(struct device *dev,
360{ 360{
361 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 361 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
362 struct ade7759_state *st = iio_priv(indio_dev); 362 struct ade7759_state *st = iio_priv(indio_dev);
363 unsigned long val; 363 u16 val;
364 int ret; 364 int ret;
365 u16 reg, t; 365 u16 reg, t;
366 366
367 ret = strict_strtol(buf, 10, &val); 367 ret = kstrtou16(buf, 10, &val);
368 if (ret) 368 if (ret)
369 return ret; 369 return ret;
370 if (val == 0) 370 if (val == 0)
@@ -444,11 +444,9 @@ static int ade7759_probe(struct spi_device *spi)
444 struct iio_dev *indio_dev; 444 struct iio_dev *indio_dev;
445 445
446 /* setup the industrialio driver allocated elements */ 446 /* setup the industrialio driver allocated elements */
447 indio_dev = iio_device_alloc(sizeof(*st)); 447 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
448 if (indio_dev == NULL) { 448 if (!indio_dev)
449 ret = -ENOMEM; 449 return -ENOMEM;
450 goto error_ret;
451 }
452 /* this is only used for removal purposes */ 450 /* this is only used for removal purposes */
453 spi_set_drvdata(spi, indio_dev); 451 spi_set_drvdata(spi, indio_dev);
454 452
@@ -463,18 +461,13 @@ static int ade7759_probe(struct spi_device *spi)
463 /* Get the device into a sane initial state */ 461 /* Get the device into a sane initial state */
464 ret = ade7759_initial_setup(indio_dev); 462 ret = ade7759_initial_setup(indio_dev);
465 if (ret) 463 if (ret)
466 goto error_free_dev; 464 return ret;
467 465
468 ret = iio_device_register(indio_dev); 466 ret = iio_device_register(indio_dev);
469 if (ret) 467 if (ret)
470 goto error_free_dev; 468 return ret;
471 469
472 return 0; 470 return 0;
473
474error_free_dev:
475 iio_device_free(indio_dev);
476error_ret:
477 return ret;
478} 471}
479 472
480/* fixme, confirm ordering in this function */ 473/* fixme, confirm ordering in this function */
@@ -484,7 +477,6 @@ static int ade7759_remove(struct spi_device *spi)
484 477
485 iio_device_unregister(indio_dev); 478 iio_device_unregister(indio_dev);
486 ade7759_stop_device(&indio_dev->dev); 479 ade7759_stop_device(&indio_dev->dev);
487 iio_device_free(indio_dev);
488 480
489 return 0; 481 return 0;
490} 482}
diff --git a/drivers/staging/iio/meter/ade7854-i2c.c b/drivers/staging/iio/meter/ade7854-i2c.c
index db9ef6c86c1e..5b33c7f1aa91 100644
--- a/drivers/staging/iio/meter/ade7854-i2c.c
+++ b/drivers/staging/iio/meter/ade7854-i2c.c
@@ -208,7 +208,7 @@ static int ade7854_i2c_probe(struct i2c_client *client,
208 struct ade7854_state *st; 208 struct ade7854_state *st;
209 struct iio_dev *indio_dev; 209 struct iio_dev *indio_dev;
210 210
211 indio_dev = iio_device_alloc(sizeof(*st)); 211 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*st));
212 if (indio_dev == NULL) 212 if (indio_dev == NULL)
213 return -ENOMEM; 213 return -ENOMEM;
214 st = iio_priv(indio_dev); 214 st = iio_priv(indio_dev);
@@ -225,8 +225,6 @@ static int ade7854_i2c_probe(struct i2c_client *client,
225 st->irq = client->irq; 225 st->irq = client->irq;
226 226
227 ret = ade7854_probe(indio_dev, &client->dev); 227 ret = ade7854_probe(indio_dev, &client->dev);
228 if (ret)
229 iio_device_free(indio_dev);
230 228
231 return ret; 229 return ret;
232} 230}
diff --git a/drivers/staging/iio/meter/ade7854-spi.c b/drivers/staging/iio/meter/ade7854-spi.c
index a802cf2491d6..7cb8d931625c 100644
--- a/drivers/staging/iio/meter/ade7854-spi.c
+++ b/drivers/staging/iio/meter/ade7854-spi.c
@@ -278,7 +278,7 @@ static int ade7854_spi_probe(struct spi_device *spi)
278 struct ade7854_state *st; 278 struct ade7854_state *st;
279 struct iio_dev *indio_dev; 279 struct iio_dev *indio_dev;
280 280
281 indio_dev = iio_device_alloc(sizeof(*st)); 281 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
282 if (indio_dev == NULL) 282 if (indio_dev == NULL)
283 return -ENOMEM; 283 return -ENOMEM;
284 st = iio_priv(indio_dev); 284 st = iio_priv(indio_dev);
@@ -296,8 +296,6 @@ static int ade7854_spi_probe(struct spi_device *spi)
296 296
297 297
298 ret = ade7854_probe(indio_dev, &spi->dev); 298 ret = ade7854_probe(indio_dev, &spi->dev);
299 if (ret)
300 iio_device_free(indio_dev);
301 299
302 return 0; 300 return 0;
303} 301}
diff --git a/drivers/staging/iio/meter/ade7854.c b/drivers/staging/iio/meter/ade7854.c
index e8379c0f1173..d620bbd603a3 100644
--- a/drivers/staging/iio/meter/ade7854.c
+++ b/drivers/staging/iio/meter/ade7854.c
@@ -100,9 +100,9 @@ static ssize_t ade7854_write_8bit(struct device *dev,
100 struct ade7854_state *st = iio_priv(indio_dev); 100 struct ade7854_state *st = iio_priv(indio_dev);
101 101
102 int ret; 102 int ret;
103 long val; 103 u8 val;
104 104
105 ret = strict_strtol(buf, 10, &val); 105 ret = kstrtou8(buf, 10, &val);
106 if (ret) 106 if (ret)
107 goto error_ret; 107 goto error_ret;
108 ret = st->write_reg_8(dev, this_attr->address, val); 108 ret = st->write_reg_8(dev, this_attr->address, val);
@@ -121,9 +121,9 @@ static ssize_t ade7854_write_16bit(struct device *dev,
121 struct ade7854_state *st = iio_priv(indio_dev); 121 struct ade7854_state *st = iio_priv(indio_dev);
122 122
123 int ret; 123 int ret;
124 long val; 124 u16 val;
125 125
126 ret = strict_strtol(buf, 10, &val); 126 ret = kstrtou16(buf, 10, &val);
127 if (ret) 127 if (ret)
128 goto error_ret; 128 goto error_ret;
129 ret = st->write_reg_16(dev, this_attr->address, val); 129 ret = st->write_reg_16(dev, this_attr->address, val);
@@ -142,9 +142,9 @@ static ssize_t ade7854_write_24bit(struct device *dev,
142 struct ade7854_state *st = iio_priv(indio_dev); 142 struct ade7854_state *st = iio_priv(indio_dev);
143 143
144 int ret; 144 int ret;
145 long val; 145 u32 val;
146 146
147 ret = strict_strtol(buf, 10, &val); 147 ret = kstrtou32(buf, 10, &val);
148 if (ret) 148 if (ret)
149 goto error_ret; 149 goto error_ret;
150 ret = st->write_reg_24(dev, this_attr->address, val); 150 ret = st->write_reg_24(dev, this_attr->address, val);
@@ -163,9 +163,9 @@ static ssize_t ade7854_write_32bit(struct device *dev,
163 struct ade7854_state *st = iio_priv(indio_dev); 163 struct ade7854_state *st = iio_priv(indio_dev);
164 164
165 int ret; 165 int ret;
166 long val; 166 u32 val;
167 167
168 ret = strict_strtol(buf, 10, &val); 168 ret = kstrtou32(buf, 10, &val);
169 if (ret) 169 if (ret)
170 goto error_ret; 170 goto error_ret;
171 ret = st->write_reg_32(dev, this_attr->address, val); 171 ret = st->write_reg_32(dev, this_attr->address, val);
@@ -550,7 +550,7 @@ int ade7854_probe(struct iio_dev *indio_dev, struct device *dev)
550 550
551 ret = iio_device_register(indio_dev); 551 ret = iio_device_register(indio_dev);
552 if (ret) 552 if (ret)
553 goto error_free_dev; 553 return ret;
554 554
555 /* Get the device into a sane initial state */ 555 /* Get the device into a sane initial state */
556 ret = ade7854_initial_setup(indio_dev); 556 ret = ade7854_initial_setup(indio_dev);
@@ -561,9 +561,6 @@ int ade7854_probe(struct iio_dev *indio_dev, struct device *dev)
561 561
562error_unreg_dev: 562error_unreg_dev:
563 iio_device_unregister(indio_dev); 563 iio_device_unregister(indio_dev);
564error_free_dev:
565 iio_device_free(indio_dev);
566
567 return ret; 564 return ret;
568} 565}
569EXPORT_SYMBOL(ade7854_probe); 566EXPORT_SYMBOL(ade7854_probe);
@@ -571,7 +568,6 @@ EXPORT_SYMBOL(ade7854_probe);
571int ade7854_remove(struct iio_dev *indio_dev) 568int ade7854_remove(struct iio_dev *indio_dev)
572{ 569{
573 iio_device_unregister(indio_dev); 570 iio_device_unregister(indio_dev);
574 iio_device_free(indio_dev);
575 571
576 return 0; 572 return 0;
577} 573}
diff --git a/drivers/staging/iio/resolver/ad2s1200.c b/drivers/staging/iio/resolver/ad2s1200.c
index 71221161aa6b..62d30179301f 100644
--- a/drivers/staging/iio/resolver/ad2s1200.c
+++ b/drivers/staging/iio/resolver/ad2s1200.c
@@ -107,16 +107,16 @@ static int ad2s1200_probe(struct spi_device *spi)
107 unsigned short *pins = spi->dev.platform_data; 107 unsigned short *pins = spi->dev.platform_data;
108 108
109 for (pn = 0; pn < AD2S1200_PN; pn++) 109 for (pn = 0; pn < AD2S1200_PN; pn++)
110 if (gpio_request_one(pins[pn], GPIOF_DIR_OUT, DRV_NAME)) { 110 ret = devm_gpio_request_one(&spi->dev, pins[pn], GPIOF_DIR_OUT,
111 pr_err("%s: request gpio pin %d failed\n", 111 DRV_NAME);
112 DRV_NAME, pins[pn]); 112 if (ret) {
113 goto error_ret; 113 dev_err(&spi->dev, "request gpio pin %d failed\n",
114 pins[pn]);
115 return ret;
114 } 116 }
115 indio_dev = iio_device_alloc(sizeof(*st)); 117 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
116 if (indio_dev == NULL) { 118 if (!indio_dev)
117 ret = -ENOMEM; 119 return -ENOMEM;
118 goto error_ret;
119 }
120 spi_set_drvdata(spi, indio_dev); 120 spi_set_drvdata(spi, indio_dev);
121 st = iio_priv(indio_dev); 121 st = iio_priv(indio_dev);
122 mutex_init(&st->lock); 122 mutex_init(&st->lock);
@@ -133,26 +133,18 @@ static int ad2s1200_probe(struct spi_device *spi)
133 133
134 ret = iio_device_register(indio_dev); 134 ret = iio_device_register(indio_dev);
135 if (ret) 135 if (ret)
136 goto error_free_dev; 136 return ret;
137 137
138 spi->max_speed_hz = AD2S1200_HZ; 138 spi->max_speed_hz = AD2S1200_HZ;
139 spi->mode = SPI_MODE_3; 139 spi->mode = SPI_MODE_3;
140 spi_setup(spi); 140 spi_setup(spi);
141 141
142 return 0; 142 return 0;
143
144error_free_dev:
145 iio_device_free(indio_dev);
146error_ret:
147 for (--pn; pn >= 0; pn--)
148 gpio_free(pins[pn]);
149 return ret;
150} 143}
151 144
152static int ad2s1200_remove(struct spi_device *spi) 145static int ad2s1200_remove(struct spi_device *spi)
153{ 146{
154 iio_device_unregister(spi_get_drvdata(spi)); 147 iio_device_unregister(spi_get_drvdata(spi));
155 iio_device_free(spi_get_drvdata(spi));
156 148
157 return 0; 149 return 0;
158} 150}
diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
index dcdadbbcf7e8..6966d5f76648 100644
--- a/drivers/staging/iio/resolver/ad2s1210.c
+++ b/drivers/staging/iio/resolver/ad2s1210.c
@@ -206,10 +206,10 @@ static ssize_t ad2s1210_store_fclkin(struct device *dev,
206 size_t len) 206 size_t len)
207{ 207{
208 struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev)); 208 struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
209 unsigned long fclkin; 209 unsigned int fclkin;
210 int ret; 210 int ret;
211 211
212 ret = strict_strtoul(buf, 10, &fclkin); 212 ret = kstrtouint(buf, 10, &fclkin);
213 if (ret) 213 if (ret)
214 return ret; 214 return ret;
215 if (fclkin < AD2S1210_MIN_CLKIN || fclkin > AD2S1210_MAX_CLKIN) { 215 if (fclkin < AD2S1210_MIN_CLKIN || fclkin > AD2S1210_MAX_CLKIN) {
@@ -243,10 +243,10 @@ static ssize_t ad2s1210_store_fexcit(struct device *dev,
243 const char *buf, size_t len) 243 const char *buf, size_t len)
244{ 244{
245 struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev)); 245 struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
246 unsigned long fexcit; 246 unsigned int fexcit;
247 int ret; 247 int ret;
248 248
249 ret = strict_strtoul(buf, 10, &fexcit); 249 ret = kstrtouint(buf, 10, &fexcit);
250 if (ret < 0) 250 if (ret < 0)
251 return ret; 251 return ret;
252 if (fexcit < AD2S1210_MIN_EXCIT || fexcit > AD2S1210_MAX_EXCIT) { 252 if (fexcit < AD2S1210_MIN_EXCIT || fexcit > AD2S1210_MAX_EXCIT) {
@@ -282,11 +282,11 @@ static ssize_t ad2s1210_store_control(struct device *dev,
282 const char *buf, size_t len) 282 const char *buf, size_t len)
283{ 283{
284 struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev)); 284 struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
285 unsigned long udata; 285 unsigned char udata;
286 unsigned char data; 286 unsigned char data;
287 int ret; 287 int ret;
288 288
289 ret = strict_strtoul(buf, 16, &udata); 289 ret = kstrtou8(buf, 16, &udata);
290 if (ret) 290 if (ret)
291 return -EINVAL; 291 return -EINVAL;
292 292
@@ -337,10 +337,10 @@ static ssize_t ad2s1210_store_resolution(struct device *dev,
337{ 337{
338 struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev)); 338 struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
339 unsigned char data; 339 unsigned char data;
340 unsigned long udata; 340 unsigned char udata;
341 int ret; 341 int ret;
342 342
343 ret = strict_strtoul(buf, 10, &udata); 343 ret = kstrtou8(buf, 10, &udata);
344 if (ret || udata < 10 || udata > 16) { 344 if (ret || udata < 10 || udata > 16) {
345 pr_err("ad2s1210: resolution out of range\n"); 345 pr_err("ad2s1210: resolution out of range\n");
346 return -EINVAL; 346 return -EINVAL;
@@ -438,11 +438,11 @@ static ssize_t ad2s1210_store_reg(struct device *dev,
438 struct device_attribute *attr, const char *buf, size_t len) 438 struct device_attribute *attr, const char *buf, size_t len)
439{ 439{
440 struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev)); 440 struct ad2s1210_state *st = iio_priv(dev_to_iio_dev(dev));
441 unsigned long data; 441 unsigned char data;
442 int ret; 442 int ret;
443 struct iio_dev_attr *iattr = to_iio_dev_attr(attr); 443 struct iio_dev_attr *iattr = to_iio_dev_attr(attr);
444 444
445 ret = strict_strtoul(buf, 10, &data); 445 ret = kstrtou8(buf, 10, &data);
446 if (ret) 446 if (ret)
447 return -EINVAL; 447 return -EINVAL;
448 mutex_lock(&st->lock); 448 mutex_lock(&st->lock);
@@ -669,16 +669,14 @@ static int ad2s1210_probe(struct spi_device *spi)
669 if (spi->dev.platform_data == NULL) 669 if (spi->dev.platform_data == NULL)
670 return -EINVAL; 670 return -EINVAL;
671 671
672 indio_dev = iio_device_alloc(sizeof(*st)); 672 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
673 if (indio_dev == NULL) { 673 if (!indio_dev)
674 ret = -ENOMEM; 674 return -ENOMEM;
675 goto error_ret;
676 }
677 st = iio_priv(indio_dev); 675 st = iio_priv(indio_dev);
678 st->pdata = spi->dev.platform_data; 676 st->pdata = spi->dev.platform_data;
679 ret = ad2s1210_setup_gpios(st); 677 ret = ad2s1210_setup_gpios(st);
680 if (ret < 0) 678 if (ret < 0)
681 goto error_free_dev; 679 return ret;
682 680
683 spi_set_drvdata(spi, indio_dev); 681 spi_set_drvdata(spi, indio_dev);
684 682
@@ -709,9 +707,6 @@ static int ad2s1210_probe(struct spi_device *spi)
709 707
710error_free_gpios: 708error_free_gpios:
711 ad2s1210_free_gpios(st); 709 ad2s1210_free_gpios(st);
712error_free_dev:
713 iio_device_free(indio_dev);
714error_ret:
715 return ret; 710 return ret;
716} 711}
717 712
@@ -721,7 +716,6 @@ static int ad2s1210_remove(struct spi_device *spi)
721 716
722 iio_device_unregister(indio_dev); 717 iio_device_unregister(indio_dev);
723 ad2s1210_free_gpios(iio_priv(indio_dev)); 718 ad2s1210_free_gpios(iio_priv(indio_dev));
724 iio_device_free(indio_dev);
725 719
726 return 0; 720 return 0;
727} 721}
diff --git a/drivers/staging/iio/resolver/ad2s90.c b/drivers/staging/iio/resolver/ad2s90.c
index 40b825286d4a..e24c5890652f 100644
--- a/drivers/staging/iio/resolver/ad2s90.c
+++ b/drivers/staging/iio/resolver/ad2s90.c
@@ -64,11 +64,9 @@ static int ad2s90_probe(struct spi_device *spi)
64 struct ad2s90_state *st; 64 struct ad2s90_state *st;
65 int ret = 0; 65 int ret = 0;
66 66
67 indio_dev = iio_device_alloc(sizeof(*st)); 67 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
68 if (indio_dev == NULL) { 68 if (!indio_dev)
69 ret = -ENOMEM; 69 return -ENOMEM;
70 goto error_ret;
71 }
72 st = iio_priv(indio_dev); 70 st = iio_priv(indio_dev);
73 spi_set_drvdata(spi, indio_dev); 71 spi_set_drvdata(spi, indio_dev);
74 72
@@ -83,7 +81,7 @@ static int ad2s90_probe(struct spi_device *spi)
83 81
84 ret = iio_device_register(indio_dev); 82 ret = iio_device_register(indio_dev);
85 if (ret) 83 if (ret)
86 goto error_free_dev; 84 return ret;
87 85
88 /* need 600ns between CS and the first falling edge of SCLK */ 86 /* need 600ns between CS and the first falling edge of SCLK */
89 spi->max_speed_hz = 830000; 87 spi->max_speed_hz = 830000;
@@ -91,17 +89,11 @@ static int ad2s90_probe(struct spi_device *spi)
91 spi_setup(spi); 89 spi_setup(spi);
92 90
93 return 0; 91 return 0;
94
95error_free_dev:
96 iio_device_free(indio_dev);
97error_ret:
98 return ret;
99} 92}
100 93
101static int ad2s90_remove(struct spi_device *spi) 94static int ad2s90_remove(struct spi_device *spi)
102{ 95{
103 iio_device_unregister(spi_get_drvdata(spi)); 96 iio_device_unregister(spi_get_drvdata(spi));
104 iio_device_free(spi_get_drvdata(spi));
105 97
106 return 0; 98 return 0;
107} 99}
diff --git a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
index 38a158b77b1d..ebb189c68d88 100644
--- a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
+++ b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
@@ -83,32 +83,28 @@ static ssize_t iio_bfin_tmr_frequency_store(struct device *dev,
83{ 83{
84 struct iio_trigger *trig = to_iio_trigger(dev); 84 struct iio_trigger *trig = to_iio_trigger(dev);
85 struct bfin_tmr_state *st = iio_trigger_get_drvdata(trig); 85 struct bfin_tmr_state *st = iio_trigger_get_drvdata(trig);
86 unsigned long val; 86 unsigned int val;
87 bool enabled; 87 bool enabled;
88 int ret; 88 int ret;
89 89
90 ret = strict_strtoul(buf, 10, &val); 90 ret = kstrtouint(buf, 10, &val);
91 if (ret) 91 if (ret)
92 goto error_ret; 92 return ret;
93 93
94 if (val > 100000) { 94 if (val > 100000) {
95 ret = -EINVAL; 95 return -EINVAL;
96 goto error_ret;
97 }
98 96
99 enabled = get_enabled_gptimers() & st->t->bit; 97 enabled = get_enabled_gptimers() & st->t->bit;
100 98
101 if (enabled) 99 if (enabled)
102 disable_gptimers(st->t->bit); 100 disable_gptimers(st->t->bit);
103 101
104 if (!val) 102 if (val == 0)
105 goto error_ret; 103 return count;
106 104
107 val = get_sclk() / val; 105 val = get_sclk() / val;
108 if (val <= 4 || val <= st->duty) { 106 if (val <= 4 || val <= st->duty)
109 ret = -EINVAL; 107 return -EINVAL;
110 goto error_ret;
111 }
112 108
113 set_gptimer_period(st->t->id, val); 109 set_gptimer_period(st->t->id, val);
114 set_gptimer_pwidth(st->t->id, val - st->duty); 110 set_gptimer_pwidth(st->t->id, val - st->duty);
@@ -116,8 +112,7 @@ static ssize_t iio_bfin_tmr_frequency_store(struct device *dev,
116 if (enabled) 112 if (enabled)
117 enable_gptimers(st->t->bit); 113 enable_gptimers(st->t->bit);
118 114
119error_ret: 115 return count;
120 return ret ? ret : count;
121} 116}
122 117
123static ssize_t iio_bfin_tmr_frequency_show(struct device *dev, 118static ssize_t iio_bfin_tmr_frequency_show(struct device *dev,
diff --git a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
index 79695974b1d4..48a6afa84088 100644
--- a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
+++ b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
@@ -53,10 +53,10 @@ static ssize_t iio_trig_periodic_write_freq(struct device *dev,
53{ 53{
54 struct iio_trigger *trig = to_iio_trigger(dev); 54 struct iio_trigger *trig = to_iio_trigger(dev);
55 struct iio_prtc_trigger_info *trig_info = iio_trigger_get_drvdata(trig); 55 struct iio_prtc_trigger_info *trig_info = iio_trigger_get_drvdata(trig);
56 unsigned long val; 56 int val;
57 int ret; 57 int ret;
58 58
59 ret = strict_strtoul(buf, 10, &val); 59 ret = kstrtoint(buf, 10, &val);
60 if (ret) 60 if (ret)
61 goto error_ret; 61 goto error_ret;
62 62
diff --git a/include/linux/iio/buffer.h b/include/linux/iio/buffer.h
index 2bac0eb8948d..a1124bdc4cac 100644
--- a/include/linux/iio/buffer.h
+++ b/include/linux/iio/buffer.h
@@ -36,7 +36,7 @@ struct iio_buffer;
36 * any of them not existing. 36 * any of them not existing.
37 **/ 37 **/
38struct iio_buffer_access_funcs { 38struct iio_buffer_access_funcs {
39 int (*store_to)(struct iio_buffer *buffer, u8 *data); 39 int (*store_to)(struct iio_buffer *buffer, const void *data);
40 int (*read_first_n)(struct iio_buffer *buffer, 40 int (*read_first_n)(struct iio_buffer *buffer,
41 size_t n, 41 size_t n,
42 char __user *buf); 42 char __user *buf);
@@ -81,7 +81,7 @@ struct iio_buffer {
81 bool stufftoread; 81 bool stufftoread;
82 const struct attribute_group *attrs; 82 const struct attribute_group *attrs;
83 struct list_head demux_list; 83 struct list_head demux_list;
84 unsigned char *demux_bounce; 84 void *demux_bounce;
85 struct list_head buffer_list; 85 struct list_head buffer_list;
86}; 86};
87 87
@@ -120,7 +120,32 @@ int iio_scan_mask_set(struct iio_dev *indio_dev,
120 * @indio_dev: iio_dev structure for device. 120 * @indio_dev: iio_dev structure for device.
121 * @data: Full scan. 121 * @data: Full scan.
122 */ 122 */
123int iio_push_to_buffers(struct iio_dev *indio_dev, unsigned char *data); 123int iio_push_to_buffers(struct iio_dev *indio_dev, const void *data);
124
125/*
126 * iio_push_to_buffers_with_timestamp() - push data and timestamp to buffers
127 * @indio_dev: iio_dev structure for device.
128 * @data: sample data
129 * @timestamp: timestamp for the sample data
130 *
131 * Pushes data to the IIO device's buffers. If timestamps are enabled for the
132 * device the function will store the supplied timestamp as the last element in
133 * the sample data buffer before pushing it to the device buffers. The sample
134 * data buffer needs to be large enough to hold the additional timestamp
135 * (usually the buffer should be indio->scan_bytes bytes large).
136 *
137 * Returns 0 on success, a negative error code otherwise.
138 */
139static inline int iio_push_to_buffers_with_timestamp(struct iio_dev *indio_dev,
140 void *data, int64_t timestamp)
141{
142 if (indio_dev->scan_timestamp) {
143 size_t ts_offset = indio_dev->scan_bytes / sizeof(int64_t) - 1;
144 ((int64_t *)data)[ts_offset] = timestamp;
145 }
146
147 return iio_push_to_buffers(indio_dev, data);
148}
124 149
125int iio_update_demux(struct iio_dev *indio_dev); 150int iio_update_demux(struct iio_dev *indio_dev);
126 151
diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h
index e51f65480ea5..e732fda6c8e6 100644
--- a/include/linux/iio/common/st_sensors.h
+++ b/include/linux/iio/common/st_sensors.h
@@ -184,6 +184,7 @@ struct st_sensors {
184 u8 wai; 184 u8 wai;
185 char sensors_supported[ST_SENSORS_MAX_4WAI][ST_SENSORS_MAX_NAME]; 185 char sensors_supported[ST_SENSORS_MAX_4WAI][ST_SENSORS_MAX_NAME];
186 struct iio_chan_spec *ch; 186 struct iio_chan_spec *ch;
187 int num_ch;
187 struct st_sensor_odr odr; 188 struct st_sensor_odr odr;
188 struct st_sensor_power pw; 189 struct st_sensor_power pw;
189 struct st_sensor_axis enable_axis; 190 struct st_sensor_axis enable_axis;
diff --git a/include/linux/iio/consumer.h b/include/linux/iio/consumer.h
index 833926c91aa8..2752b1fd12be 100644
--- a/include/linux/iio/consumer.h
+++ b/include/linux/iio/consumer.h
@@ -77,7 +77,7 @@ struct iio_cb_buffer;
77 * fail. 77 * fail.
78 */ 78 */
79struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev, 79struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev,
80 int (*cb)(u8 *data, 80 int (*cb)(const void *data,
81 void *private), 81 void *private),
82 void *private); 82 void *private);
83/** 83/**
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
index 2103cc32a5fb..ac1cb8f1858c 100644
--- a/include/linux/iio/iio.h
+++ b/include/linux/iio/iio.h
@@ -36,6 +36,14 @@ enum iio_chan_info_enum {
36 IIO_CHAN_INFO_PHASE, 36 IIO_CHAN_INFO_PHASE,
37 IIO_CHAN_INFO_HARDWAREGAIN, 37 IIO_CHAN_INFO_HARDWAREGAIN,
38 IIO_CHAN_INFO_HYSTERESIS, 38 IIO_CHAN_INFO_HYSTERESIS,
39 IIO_CHAN_INFO_INT_TIME,
40};
41
42enum iio_shared_by {
43 IIO_SEPARATE,
44 IIO_SHARED_BY_TYPE,
45 IIO_SHARED_BY_DIR,
46 IIO_SHARED_BY_ALL
39}; 47};
40 48
41enum iio_endian { 49enum iio_endian {
@@ -57,7 +65,7 @@ struct iio_dev;
57 */ 65 */
58struct iio_chan_spec_ext_info { 66struct iio_chan_spec_ext_info {
59 const char *name; 67 const char *name;
60 bool shared; 68 enum iio_shared_by shared;
61 ssize_t (*read)(struct iio_dev *, uintptr_t private, 69 ssize_t (*read)(struct iio_dev *, uintptr_t private,
62 struct iio_chan_spec const *, char *buf); 70 struct iio_chan_spec const *, char *buf);
63 ssize_t (*write)(struct iio_dev *, uintptr_t private, 71 ssize_t (*write)(struct iio_dev *, uintptr_t private,
@@ -125,7 +133,7 @@ ssize_t iio_enum_write(struct iio_dev *indio_dev,
125#define IIO_ENUM_AVAILABLE(_name, _e) \ 133#define IIO_ENUM_AVAILABLE(_name, _e) \
126{ \ 134{ \
127 .name = (_name "_available"), \ 135 .name = (_name "_available"), \
128 .shared = true, \ 136 .shared = IIO_SHARED_BY_TYPE, \
129 .read = iio_enum_available_read, \ 137 .read = iio_enum_available_read, \
130 .private = (uintptr_t)(_e), \ 138 .private = (uintptr_t)(_e), \
131} 139}
@@ -146,12 +154,14 @@ ssize_t iio_enum_write(struct iio_dev *indio_dev,
146 * shift: Shift right by this before masking out 154 * shift: Shift right by this before masking out
147 * realbits. 155 * realbits.
148 * endianness: little or big endian 156 * endianness: little or big endian
149 * @info_mask: What information is to be exported about this channel.
150 * This includes calibbias, scale etc.
151 * @info_mask_separate: What information is to be exported that is specific to 157 * @info_mask_separate: What information is to be exported that is specific to
152 * this channel. 158 * this channel.
153 * @info_mask_shared_by_type: What information is to be exported that is shared 159 * @info_mask_shared_by_type: What information is to be exported that is shared
154* by all channels of the same type. 160 * by all channels of the same type.
161 * @info_mask_shared_by_dir: What information is to be exported that is shared
162 * by all channels of the same direction.
163 * @info_mask_shared_by_all: What information is to be exported that is shared
164 * by all channels.
155 * @event_mask: What events can this channel produce. 165 * @event_mask: What events can this channel produce.
156 * @ext_info: Array of extended info attributes for this channel. 166 * @ext_info: Array of extended info attributes for this channel.
157 * The array is NULL terminated, the last element should 167 * The array is NULL terminated, the last element should
@@ -186,9 +196,10 @@ struct iio_chan_spec {
186 u8 shift; 196 u8 shift;
187 enum iio_endian endianness; 197 enum iio_endian endianness;
188 } scan_type; 198 } scan_type;
189 long info_mask;
190 long info_mask_separate; 199 long info_mask_separate;
191 long info_mask_shared_by_type; 200 long info_mask_shared_by_type;
201 long info_mask_shared_by_dir;
202 long info_mask_shared_by_all;
192 long event_mask; 203 long event_mask;
193 const struct iio_chan_spec_ext_info *ext_info; 204 const struct iio_chan_spec_ext_info *ext_info;
194 const char *extend_name; 205 const char *extend_name;
@@ -212,7 +223,9 @@ static inline bool iio_channel_has_info(const struct iio_chan_spec *chan,
212 enum iio_chan_info_enum type) 223 enum iio_chan_info_enum type)
213{ 224{
214 return (chan->info_mask_separate & BIT(type)) | 225 return (chan->info_mask_separate & BIT(type)) |
215 (chan->info_mask_shared_by_type & BIT(type)); 226 (chan->info_mask_shared_by_type & BIT(type)) |
227 (chan->info_mask_shared_by_dir & BIT(type)) |
228 (chan->info_mask_shared_by_all & BIT(type));
216} 229}
217 230
218#define IIO_ST(si, rb, sb, sh) \ 231#define IIO_ST(si, rb, sb, sh) \
@@ -457,7 +470,7 @@ static inline void iio_device_put(struct iio_dev *indio_dev)
457{ 470{
458 if (indio_dev) 471 if (indio_dev)
459 put_device(&indio_dev->dev); 472 put_device(&indio_dev->dev);
460}; 473}
461 474
462/** 475/**
463 * dev_to_iio_dev() - Get IIO device struct from a device struct 476 * dev_to_iio_dev() - Get IIO device struct from a device struct
@@ -593,7 +606,7 @@ static inline bool iio_buffer_enabled(struct iio_dev *indio_dev)
593{ 606{
594 return indio_dev->currentmode 607 return indio_dev->currentmode
595 & (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE); 608 & (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE);
596}; 609}
597 610
598/** 611/**
599 * iio_get_debugfs_dentry() - helper function to get the debugfs_dentry 612 * iio_get_debugfs_dentry() - helper function to get the debugfs_dentry
@@ -603,12 +616,12 @@ static inline bool iio_buffer_enabled(struct iio_dev *indio_dev)
603static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev) 616static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
604{ 617{
605 return indio_dev->debugfs_dentry; 618 return indio_dev->debugfs_dentry;
606}; 619}
607#else 620#else
608static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev) 621static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
609{ 622{
610 return NULL; 623 return NULL;
611}; 624}
612#endif 625#endif
613 626
614int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer, 627int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer,
diff --git a/include/linux/iio/sysfs.h b/include/linux/iio/sysfs.h
index 2958c960003a..8a1d18640ab9 100644
--- a/include/linux/iio/sysfs.h
+++ b/include/linux/iio/sysfs.h
@@ -100,6 +100,21 @@ struct iio_const_attr {
100#define IIO_CONST_ATTR_SAMP_FREQ_AVAIL(_string) \ 100#define IIO_CONST_ATTR_SAMP_FREQ_AVAIL(_string) \
101 IIO_CONST_ATTR(sampling_frequency_available, _string) 101 IIO_CONST_ATTR(sampling_frequency_available, _string)
102 102
103/**
104 * IIO_DEV_ATTR_INT_TIME_AVAIL - list available integration times
105 * @_show: output method for the attribute
106 **/
107#define IIO_DEV_ATTR_INT_TIME_AVAIL(_show) \
108 IIO_DEVICE_ATTR(integration_time_available, S_IRUGO, _show, NULL, 0)
109/**
110 * IIO_CONST_ATTR_INT_TIME_AVAIL - list available integration times
111 * @_string: frequency string for the attribute
112 *
113 * Constant version
114 **/
115#define IIO_CONST_ATTR_INT_TIME_AVAIL(_string) \
116 IIO_CONST_ATTR(integration_time_available, _string)
117
103#define IIO_DEV_ATTR_TEMP_RAW(_show) \ 118#define IIO_DEV_ATTR_TEMP_RAW(_show) \
104 IIO_DEVICE_ATTR(in_temp_raw, S_IRUGO, _show, NULL, 0) 119 IIO_DEVICE_ATTR(in_temp_raw, S_IRUGO, _show, NULL, 0)
105 120
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index 25f2c611ab01..08cce7f96ab9 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -46,16 +46,24 @@
46/* Step Enable */ 46/* Step Enable */
47#define STEPENB_MASK (0x1FFFF << 0) 47#define STEPENB_MASK (0x1FFFF << 0)
48#define STEPENB(val) ((val) << 0) 48#define STEPENB(val) ((val) << 0)
49#define ENB(val) (1 << (val))
50#define STPENB_STEPENB STEPENB(0x1FFFF)
51#define STPENB_STEPENB_TC STEPENB(0x1FFF)
49 52
50/* IRQ enable */ 53/* IRQ enable */
51#define IRQENB_HW_PEN BIT(0) 54#define IRQENB_HW_PEN BIT(0)
52#define IRQENB_FIFO0THRES BIT(2) 55#define IRQENB_FIFO0THRES BIT(2)
56#define IRQENB_FIFO0OVRRUN BIT(3)
57#define IRQENB_FIFO0UNDRFLW BIT(4)
53#define IRQENB_FIFO1THRES BIT(5) 58#define IRQENB_FIFO1THRES BIT(5)
59#define IRQENB_FIFO1OVRRUN BIT(6)
60#define IRQENB_FIFO1UNDRFLW BIT(7)
54#define IRQENB_PENUP BIT(9) 61#define IRQENB_PENUP BIT(9)
55 62
56/* Step Configuration */ 63/* Step Configuration */
57#define STEPCONFIG_MODE_MASK (3 << 0) 64#define STEPCONFIG_MODE_MASK (3 << 0)
58#define STEPCONFIG_MODE(val) ((val) << 0) 65#define STEPCONFIG_MODE(val) ((val) << 0)
66#define STEPCONFIG_MODE_SWCNT STEPCONFIG_MODE(1)
59#define STEPCONFIG_MODE_HWSYNC STEPCONFIG_MODE(2) 67#define STEPCONFIG_MODE_HWSYNC STEPCONFIG_MODE(2)
60#define STEPCONFIG_AVG_MASK (7 << 2) 68#define STEPCONFIG_AVG_MASK (7 << 2)
61#define STEPCONFIG_AVG(val) ((val) << 2) 69#define STEPCONFIG_AVG(val) ((val) << 2)
@@ -123,6 +131,7 @@
123#define ADC_CLK 3000000 131#define ADC_CLK 3000000
124#define TOTAL_STEPS 16 132#define TOTAL_STEPS 16
125#define TOTAL_CHANNELS 8 133#define TOTAL_CHANNELS 8
134#define FIFO1_THRESHOLD 19
126 135
127/* 136/*
128* ADC runs at 3MHz, and it takes 137* ADC runs at 3MHz, and it takes