summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-03-29 08:37:58 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-03-29 08:37:58 -0700
commitf7046bf08549a39dfc8365f8013e6ab43f42995a (patch)
treef28057b1f462a21a1398fb078b0b72a754623999 /drivers
parent698f57f48a3b0b2caad20c560b2ba44932c2c76f (diff)
parent2b684024b59c4b1a1440e8c7499b7060a22d1ec1 (diff)
Merge tag 'iio-for-3.10b' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-next
Jonathan writes: Second round of IIO cleanups for the 3.10 cycle 1) A nice little removal of the unwanted private pointer from struct iio_trigger. 2) Some clean up of the ad799x driver. 3) Couple of cleanups for the exynos_adc driver and some documentation. 4) Move the mxs-lradc initialization a little earlier in the driver to avoid wiping out the configuration just after setting it. A nice small set of worthy bits and bobs.
Diffstat (limited to 'drivers')
-rw-r--r--drivers/iio/accel/st_accel_buffer.c2
-rw-r--r--drivers/iio/adc/ad_sigma_delta.c2
-rw-r--r--drivers/iio/adc/at91_adc.c4
-rw-r--r--drivers/iio/adc/exynos_adc.c2
-rw-r--r--drivers/iio/common/hid-sensors/hid-sensor-trigger.c4
-rw-r--r--drivers/iio/common/st_sensors/st_sensors_trigger.c2
-rw-r--r--drivers/iio/gyro/itg3200_buffer.c4
-rw-r--r--drivers/iio/gyro/st_gyro_buffer.c2
-rw-r--r--drivers/iio/imu/adis_trigger.c4
-rw-r--r--drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c4
-rw-r--r--drivers/staging/iio/Documentation/trigger.txt3
-rw-r--r--drivers/staging/iio/accel/lis3l02dq_ring.c6
-rw-r--r--drivers/staging/iio/adc/ad799x.h7
-rw-r--r--drivers/staging/iio/adc/ad799x_core.c417
-rw-r--r--drivers/staging/iio/adc/ad799x_ring.c16
-rw-r--r--drivers/staging/iio/adc/mxs-lradc.c10
-rw-r--r--drivers/staging/iio/meter/ade7758_trigger.c6
-rw-r--r--drivers/staging/iio/trigger/iio-trig-bfin-timer.c8
-rw-r--r--drivers/staging/iio/trigger/iio-trig-gpio.c6
-rw-r--r--drivers/staging/iio/trigger/iio-trig-periodic-rtc.c12
-rw-r--r--drivers/staging/iio/trigger/iio-trig-sysfs.c4
21 files changed, 120 insertions, 405 deletions
diff --git a/drivers/iio/accel/st_accel_buffer.c b/drivers/iio/accel/st_accel_buffer.c
index 6bd82c7f769c..d9b350756f90 100644
--- a/drivers/iio/accel/st_accel_buffer.c
+++ b/drivers/iio/accel/st_accel_buffer.c
@@ -25,7 +25,7 @@
int st_accel_trig_set_state(struct iio_trigger *trig, bool state)
{
- struct iio_dev *indio_dev = trig->private_data;
+ struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
return st_sensors_set_dataready_irq(indio_dev, state);
}
diff --git a/drivers/iio/adc/ad_sigma_delta.c b/drivers/iio/adc/ad_sigma_delta.c
index afe6d78c8ff0..f0d6335ae087 100644
--- a/drivers/iio/adc/ad_sigma_delta.c
+++ b/drivers/iio/adc/ad_sigma_delta.c
@@ -470,7 +470,7 @@ static int ad_sd_probe_trigger(struct iio_dev *indio_dev)
disable_irq_nosync(sigma_delta->spi->irq);
}
sigma_delta->trig->dev.parent = &sigma_delta->spi->dev;
- sigma_delta->trig->private_data = sigma_delta;
+ iio_trigger_set_drvdata(sigma_delta->trig, sigma_delta);
ret = iio_trigger_register(sigma_delta->trig);
if (ret)
diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c
index 92eb6a5b9e72..6fc43c15f028 100644
--- a/drivers/iio/adc/at91_adc.c
+++ b/drivers/iio/adc/at91_adc.c
@@ -188,7 +188,7 @@ static u8 at91_adc_get_trigger_value_by_name(struct iio_dev *idev,
static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state)
{
- struct iio_dev *idev = trig->private_data;
+ struct iio_dev *idev = iio_trigger_get_drvdata(trig);
struct at91_adc_state *st = iio_priv(idev);
struct iio_buffer *buffer = idev->buffer;
struct at91_adc_reg_desc *reg = st->registers;
@@ -254,7 +254,7 @@ static struct iio_trigger *at91_adc_allocate_trigger(struct iio_dev *idev,
return NULL;
trig->dev.parent = idev->dev.parent;
- trig->private_data = idev;
+ iio_trigger_set_drvdata(trig, idev);
trig->ops = &at91_adc_trigger_ops;
ret = iio_trigger_register(trig);
diff --git a/drivers/iio/adc/exynos_adc.c b/drivers/iio/adc/exynos_adc.c
index 4a8a9a34228f..9f3a8ef1fb3e 100644
--- a/drivers/iio/adc/exynos_adc.c
+++ b/drivers/iio/adc/exynos_adc.c
@@ -440,7 +440,7 @@ static struct platform_driver exynos_adc_driver = {
.driver = {
.name = "exynos-adc",
.owner = THIS_MODULE,
- .of_match_table = of_match_ptr(exynos_adc_match),
+ .of_match_table = exynos_adc_match,
.pm = &exynos_adc_pm_ops,
},
};
diff --git a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
index 7a525a91105d..87419c41b991 100644
--- a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
+++ b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
@@ -31,7 +31,7 @@
static int hid_sensor_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state)
{
- struct hid_sensor_common *st = trig->private_data;
+ struct hid_sensor_common *st = iio_trigger_get_drvdata(trig);
int state_val;
state_val = state ? 1 : 0;
@@ -76,7 +76,7 @@ int hid_sensor_setup_trigger(struct iio_dev *indio_dev, const char *name,
}
trig->dev.parent = indio_dev->dev.parent;
- trig->private_data = attrb;
+ iio_trigger_set_drvdata(trig, attrb);
trig->ops = &hid_sensor_trigger_ops;
ret = iio_trigger_register(trig);
diff --git a/drivers/iio/common/st_sensors/st_sensors_trigger.c b/drivers/iio/common/st_sensors/st_sensors_trigger.c
index 139ed030abb0..8fc3a97eb266 100644
--- a/drivers/iio/common/st_sensors/st_sensors_trigger.c
+++ b/drivers/iio/common/st_sensors/st_sensors_trigger.c
@@ -40,7 +40,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
if (err)
goto request_irq_error;
- sdata->trig->private_data = indio_dev;
+ iio_trigger_set_drvdata(sdata->trig, indio_dev);
sdata->trig->ops = trigger_ops;
sdata->trig->dev.parent = sdata->dev;
diff --git a/drivers/iio/gyro/itg3200_buffer.c b/drivers/iio/gyro/itg3200_buffer.c
index f667d2c8c00f..6c43af9bb0a4 100644
--- a/drivers/iio/gyro/itg3200_buffer.c
+++ b/drivers/iio/gyro/itg3200_buffer.c
@@ -81,7 +81,7 @@ void itg3200_buffer_unconfigure(struct iio_dev *indio_dev)
static int itg3200_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state)
{
- struct iio_dev *indio_dev = trig->private_data;
+ struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
int ret;
u8 msc;
@@ -129,7 +129,7 @@ int itg3200_probe_trigger(struct iio_dev *indio_dev)
st->trig->dev.parent = &st->i2c->dev;
st->trig->ops = &itg3200_trigger_ops;
- st->trig->private_data = indio_dev;
+ iio_trigger_set_drvdata(st->trig, indio_dev);
ret = iio_trigger_register(st->trig);
if (ret)
goto error_free_irq;
diff --git a/drivers/iio/gyro/st_gyro_buffer.c b/drivers/iio/gyro/st_gyro_buffer.c
index da4d122ec7dc..69017c7ec302 100644
--- a/drivers/iio/gyro/st_gyro_buffer.c
+++ b/drivers/iio/gyro/st_gyro_buffer.c
@@ -25,7 +25,7 @@
int st_gyro_trig_set_state(struct iio_trigger *trig, bool state)
{
- struct iio_dev *indio_dev = trig->private_data;
+ struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
return st_sensors_set_dataready_irq(indio_dev, state);
}
diff --git a/drivers/iio/imu/adis_trigger.c b/drivers/iio/imu/adis_trigger.c
index 5a24c9cac343..e0017c22bb9c 100644
--- a/drivers/iio/imu/adis_trigger.c
+++ b/drivers/iio/imu/adis_trigger.c
@@ -19,7 +19,7 @@
static int adis_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state)
{
- struct adis *adis = trig->private_data;
+ struct adis *adis = iio_trigger_get_drvdata(trig);
return adis_enable_irq(adis, state);
}
@@ -57,7 +57,7 @@ int adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev)
adis->trig->dev.parent = &adis->spi->dev;
adis->trig->ops = &adis_trigger_ops;
- adis->trig->private_data = adis;
+ iio_trigger_set_drvdata(adis->trig, adis);
ret = iio_trigger_register(adis->trig);
indio_dev->trig = adis->trig;
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
index e1d0869e0ad1..03b9372c1212 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
@@ -103,7 +103,7 @@ static int inv_mpu6050_set_enable(struct iio_dev *indio_dev, bool enable)
static int inv_mpu_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state)
{
- return inv_mpu6050_set_enable(trig->private_data, state);
+ return inv_mpu6050_set_enable(iio_trigger_get_drvdata(trig), state);
}
static const struct iio_trigger_ops inv_mpu_trigger_ops = {
@@ -130,8 +130,8 @@ int inv_mpu6050_probe_trigger(struct iio_dev *indio_dev)
if (ret)
goto error_free_trig;
st->trig->dev.parent = &st->client->dev;
- st->trig->private_data = indio_dev;
st->trig->ops = &inv_mpu_trigger_ops;
+ iio_trigger_set_drvdata(st->trig, indio_dev);
ret = iio_trigger_register(st->trig);
if (ret)
goto error_free_irq;
diff --git a/drivers/staging/iio/Documentation/trigger.txt b/drivers/staging/iio/Documentation/trigger.txt
index 75cc37ff1ed0..64e2e08fb4d0 100644
--- a/drivers/staging/iio/Documentation/trigger.txt
+++ b/drivers/staging/iio/Documentation/trigger.txt
@@ -10,9 +10,6 @@ struct iio_trig *trig = iio_trigger_alloc("<trigger format string>", ...);
allocates a trigger structure. The key elements to then fill in within
a driver are:
-trig->private_data
- Device specific private data.
-
trig->owner
Typically set to THIS_MODULE. Used to ensure correct
ownership of core allocated resources.
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index e676403ea3ea..5b8f0f6c9938 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -228,7 +228,7 @@ error_ret:
static int lis3l02dq_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state)
{
- struct iio_dev *indio_dev = trig->private_data;
+ struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
int ret = 0;
u8 t;
@@ -252,7 +252,7 @@ static int lis3l02dq_data_rdy_trigger_set_state(struct iio_trigger *trig,
*/
static int lis3l02dq_trig_try_reen(struct iio_trigger *trig)
{
- struct iio_dev *indio_dev = trig->private_data;
+ struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
struct lis3l02dq_state *st = iio_priv(indio_dev);
int i;
@@ -290,7 +290,7 @@ int lis3l02dq_probe_trigger(struct iio_dev *indio_dev)
st->trig->dev.parent = &st->us->dev;
st->trig->ops = &lis3l02dq_trigger_ops;
- st->trig->private_data = indio_dev;
+ iio_trigger_set_drvdata(st->trig, indio_dev);
ret = iio_trigger_register(st->trig);
if (ret)
goto error_free_trig;
diff --git a/drivers/staging/iio/adc/ad799x.h b/drivers/staging/iio/adc/ad799x.h
index 3e363c4ba211..b51680c1c331 100644
--- a/drivers/staging/iio/adc/ad799x.h
+++ b/drivers/staging/iio/adc/ad799x.h
@@ -87,7 +87,6 @@ struct ad799x_state;
* struct ad799x_chip_info - chip specifc information
* @channel: channel specification
* @num_channels: number of channels
- * @int_vref_mv: the internal reference voltage
* @monitor_mode: whether the chip supports monitor interrupts
* @default_config: device default configuration
* @event_attrs: pointer to the monitor event attribute group
@@ -96,7 +95,6 @@ struct ad799x_state;
struct ad799x_chip_info {
struct iio_chan_spec channel[9];
int num_channels;
- u16 int_vref_mv;
u16 default_config;
const struct iio_info *info;
};
@@ -104,12 +102,13 @@ struct ad799x_chip_info {
struct ad799x_state {
struct i2c_client *client;
const struct ad799x_chip_info *chip_info;
- struct iio_trigger *trig;
struct regulator *reg;
u16 int_vref_mv;
unsigned id;
- char *name;
u16 config;
+
+ u8 *rx_buf;
+ unsigned int transfer_size;
};
/*
diff --git a/drivers/staging/iio/adc/ad799x_core.c b/drivers/staging/iio/adc/ad799x_core.c
index 40cc89abe3c3..8dc97b36e05a 100644
--- a/drivers/staging/iio/adc/ad799x_core.c
+++ b/drivers/staging/iio/adc/ad799x_core.c
@@ -48,13 +48,13 @@ static int ad799x_i2c_read16(struct ad799x_state *st, u8 reg, u16 *data)
struct i2c_client *client = st->client;
int ret = 0;
- ret = i2c_smbus_read_word_data(client, reg);
+ ret = i2c_smbus_read_word_swapped(client, reg);
if (ret < 0) {
dev_err(&client->dev, "I2C read error\n");
return ret;
}
- *data = swab16((u16)ret);
+ *data = (u16)ret;
return 0;
}
@@ -80,7 +80,7 @@ static int ad799x_i2c_write16(struct ad799x_state *st, u8 reg, u16 data)
struct i2c_client *client = st->client;
int ret = 0;
- ret = i2c_smbus_write_word_data(client, reg, swab16(data));
+ ret = i2c_smbus_write_word_swapped(client, reg, data);
if (ret < 0)
dev_err(&client->dev, "I2C write error\n");
@@ -104,6 +104,13 @@ static int ad7997_8_update_scan_mode(struct iio_dev *indio_dev,
{
struct ad799x_state *st = iio_priv(indio_dev);
+ kfree(st->rx_buf);
+ st->rx_buf = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
+ if (!st->rx_buf)
+ return -ENOMEM;
+
+ st->transfer_size = bitmap_weight(scan_mask, indio_dev->masklength) * 2;
+
switch (st->id) {
case ad7997:
case ad7998:
@@ -460,395 +467,114 @@ static const struct iio_info ad7993_4_7_8_info = {
#define AD799X_EV_MASK (IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING) | \
IIO_EV_BIT(IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING))
+#define AD799X_CHANNEL(_index, _realbits, _evmask) { \
+ .type = IIO_VOLTAGE, \
+ .indexed = 1, \
+ .channel = (_index), \
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
+ .scan_index = (_index), \
+ .scan_type = IIO_ST('u', _realbits, 16, 12 - (_realbits)), \
+ .event_mask = (_evmask), \
+}
+
static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
[ad7991] = {
.channel = {
- [0] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 0,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 0,
- .scan_type = IIO_ST('u', 12, 16, 0),
- },
- [1] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 1,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 1,
- .scan_type = IIO_ST('u', 12, 16, 0),
- },
- [2] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 2,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 2,
- .scan_type = IIO_ST('u', 12, 16, 0),
- },
- [3] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 3,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 3,
- .scan_type = IIO_ST('u', 12, 16, 0),
- },
- [4] = IIO_CHAN_SOFT_TIMESTAMP(4),
+ AD799X_CHANNEL(0, 12, 0),
+ AD799X_CHANNEL(1, 12, 0),
+ AD799X_CHANNEL(2, 12, 0),
+ AD799X_CHANNEL(3, 12, 0),
+ IIO_CHAN_SOFT_TIMESTAMP(4),
},
.num_channels = 5,
- .int_vref_mv = 4096,
.info = &ad7991_info,
},
[ad7995] = {
.channel = {
- [0] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 0,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 0,
- .scan_type = IIO_ST('u', 10, 16, 2),
- },
- [1] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 1,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 1,
- .scan_type = IIO_ST('u', 10, 16, 2),
- },
- [2] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 2,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 2,
- .scan_type = IIO_ST('u', 10, 16, 2),
- },
- [3] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 3,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 3,
- .scan_type = IIO_ST('u', 10, 16, 2),
- },
- [4] = IIO_CHAN_SOFT_TIMESTAMP(4),
+ AD799X_CHANNEL(0, 10, 0),
+ AD799X_CHANNEL(1, 10, 0),
+ AD799X_CHANNEL(2, 10, 0),
+ AD799X_CHANNEL(3, 10, 0),
+ IIO_CHAN_SOFT_TIMESTAMP(4),
},
.num_channels = 5,
- .int_vref_mv = 1024,
.info = &ad7991_info,
},
[ad7999] = {
.channel = {
- [0] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 0,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 0,
- .scan_type = IIO_ST('u', 8, 16, 4),
- },
- [1] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 1,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 1,
- .scan_type = IIO_ST('u', 8, 16, 4),
- },
- [2] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 2,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 2,
- .scan_type = IIO_ST('u', 8, 16, 4),
- },
- [3] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 3,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 3,
- .scan_type = IIO_ST('u', 8, 16, 4),
- },
- [4] = IIO_CHAN_SOFT_TIMESTAMP(4),
+ AD799X_CHANNEL(0, 8, 0),
+ AD799X_CHANNEL(1, 8, 0),
+ AD799X_CHANNEL(2, 8, 0),
+ AD799X_CHANNEL(3, 8, 0),
+ IIO_CHAN_SOFT_TIMESTAMP(4),
},
.num_channels = 5,
- .int_vref_mv = 1024,
.info = &ad7991_info,
},
[ad7992] = {
.channel = {
- [0] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 0,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 0,
- .scan_type = IIO_ST('u', 12, 16, 0),
- .event_mask = AD799X_EV_MASK,
- },
- [1] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 1,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 1,
- .scan_type = IIO_ST('u', 12, 16, 0),
- .event_mask = AD799X_EV_MASK,
- },
- [2] = IIO_CHAN_SOFT_TIMESTAMP(2),
+ AD799X_CHANNEL(0, 12, AD799X_EV_MASK),
+ AD799X_CHANNEL(1, 12, AD799X_EV_MASK),
+ IIO_CHAN_SOFT_TIMESTAMP(3),
},
.num_channels = 3,
- .int_vref_mv = 4096,
.default_config = AD7998_ALERT_EN,
.info = &ad7992_info,
},
[ad7993] = {
.channel = {
- [0] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 0,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 0,
- .scan_type = IIO_ST('u', 10, 16, 2),
- .event_mask = AD799X_EV_MASK,
- },
- [1] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 1,
- .scan_index = 1,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_type = IIO_ST('u', 10, 16, 2),
- .event_mask = AD799X_EV_MASK,
- },
- [2] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 2,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 2,
- .scan_type = IIO_ST('u', 10, 16, 2),
- .event_mask = AD799X_EV_MASK,
- },
- [3] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 3,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 3,
- .scan_type = IIO_ST('u', 10, 16, 2),
- .event_mask = AD799X_EV_MASK,
- },
- [4] = IIO_CHAN_SOFT_TIMESTAMP(4),
+ AD799X_CHANNEL(0, 10, AD799X_EV_MASK),
+ AD799X_CHANNEL(1, 10, AD799X_EV_MASK),
+ AD799X_CHANNEL(2, 10, AD799X_EV_MASK),
+ AD799X_CHANNEL(3, 10, AD799X_EV_MASK),
+ IIO_CHAN_SOFT_TIMESTAMP(4),
},
.num_channels = 5,
- .int_vref_mv = 1024,
.default_config = AD7998_ALERT_EN,
.info = &ad7993_4_7_8_info,
},
[ad7994] = {
.channel = {
- [0] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 0,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 0,
- .scan_type = IIO_ST('u', 12, 16, 0),
- .event_mask = AD799X_EV_MASK,
- },
- [1] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 1,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 1,
- .scan_type = IIO_ST('u', 12, 16, 0),
- .event_mask = AD799X_EV_MASK,
- },
- [2] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 2,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 2,
- .scan_type = IIO_ST('u', 12, 16, 0),
- .event_mask = AD799X_EV_MASK,
- },
- [3] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 3,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 3,
- .scan_type = IIO_ST('u', 12, 16, 0),
- .event_mask = AD799X_EV_MASK,
- },
- [4] = IIO_CHAN_SOFT_TIMESTAMP(4),
+ AD799X_CHANNEL(0, 12, AD799X_EV_MASK),
+ AD799X_CHANNEL(1, 12, AD799X_EV_MASK),
+ AD799X_CHANNEL(2, 12, AD799X_EV_MASK),
+ AD799X_CHANNEL(3, 12, AD799X_EV_MASK),
+ IIO_CHAN_SOFT_TIMESTAMP(4),
},
.num_channels = 5,
- .int_vref_mv = 4096,
.default_config = AD7998_ALERT_EN,
.info = &ad7993_4_7_8_info,
},
[ad7997] = {
.channel = {
- [0] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 0,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 0,
- .scan_type = IIO_ST('u', 10, 16, 2),
- .event_mask = AD799X_EV_MASK,
- },
- [1] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 1,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 1,
- .scan_type = IIO_ST('u', 10, 16, 2),
- .event_mask = AD799X_EV_MASK,
- },
- [2] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 2,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 2,
- .scan_type = IIO_ST('u', 10, 16, 2),
- .event_mask = AD799X_EV_MASK,
- },
- [3] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 3,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 3,
- .scan_type = IIO_ST('u', 10, 16, 2),
- .event_mask = AD799X_EV_MASK,
- },
- [4] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 4,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 4,
- .scan_type = IIO_ST('u', 10, 16, 2),
- },
- [5] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 5,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 5,
- .scan_type = IIO_ST('u', 10, 16, 2),
- },
- [6] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 6,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 6,
- .scan_type = IIO_ST('u', 10, 16, 2),
- },
- [7] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 7,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 7,
- .scan_type = IIO_ST('u', 10, 16, 2),
- },
- [8] = IIO_CHAN_SOFT_TIMESTAMP(8),
+ AD799X_CHANNEL(0, 10, AD799X_EV_MASK),
+ AD799X_CHANNEL(1, 10, AD799X_EV_MASK),
+ AD799X_CHANNEL(2, 10, AD799X_EV_MASK),
+ AD799X_CHANNEL(3, 10, AD799X_EV_MASK),
+ AD799X_CHANNEL(4, 10, 0),
+ AD799X_CHANNEL(5, 10, 0),
+ AD799X_CHANNEL(6, 10, 0),
+ AD799X_CHANNEL(7, 10, 0),
+ IIO_CHAN_SOFT_TIMESTAMP(8),
},
.num_channels = 9,
- .int_vref_mv = 1024,
.default_config = AD7998_ALERT_EN,
.info = &ad7993_4_7_8_info,
},
[ad7998] = {
.channel = {
- [0] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 0,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 0,
- .scan_type = IIO_ST('u', 12, 16, 0),
- .event_mask = AD799X_EV_MASK,
- },
- [1] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 1,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 1,
- .scan_type = IIO_ST('u', 12, 16, 0),
- .event_mask = AD799X_EV_MASK,
- },
- [2] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 2,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 2,
- .scan_type = IIO_ST('u', 12, 16, 0),
- .event_mask = AD799X_EV_MASK,
- },
- [3] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 3,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 3,
- .scan_type = IIO_ST('u', 12, 16, 0),
- .event_mask = AD799X_EV_MASK,
- },
- [4] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 4,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 4,
- .scan_type = IIO_ST('u', 12, 16, 0),
- },
- [5] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 5,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 5,
- .scan_type = IIO_ST('u', 12, 16, 0),
- },
- [6] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 6,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 6,
- .scan_type = IIO_ST('u', 12, 16, 0),
- },
- [7] = {
- .type = IIO_VOLTAGE,
- .indexed = 1,
- .channel = 7,
- .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
- .scan_index = 7,
- .scan_type = IIO_ST('u', 12, 16, 0),
- },
- [8] = IIO_CHAN_SOFT_TIMESTAMP(8),
+ AD799X_CHANNEL(0, 12, AD799X_EV_MASK),
+ AD799X_CHANNEL(1, 12, AD799X_EV_MASK),
+ AD799X_CHANNEL(2, 12, AD799X_EV_MASK),
+ AD799X_CHANNEL(3, 12, AD799X_EV_MASK),
+ AD799X_CHANNEL(4, 12, 0),
+ AD799X_CHANNEL(5, 12, 0),
+ AD799X_CHANNEL(6, 12, 0),
+ AD799X_CHANNEL(7, 12, 0),
+ IIO_CHAN_SOFT_TIMESTAMP(8),
},
.num_channels = 9,
- .int_vref_mv = 4096,
.default_config = AD7998_ALERT_EN,
.info = &ad7993_4_7_8_info,
},
@@ -875,10 +601,10 @@ static int ad799x_probe(struct i2c_client *client,
/* TODO: Add pdata options for filtering and bit delay */
- if (pdata)
- st->int_vref_mv = pdata->vref_mv;
- else
- st->int_vref_mv = st->chip_info->int_vref_mv;
+ if (!pdata)
+ return -EINVAL;
+
+ st->int_vref_mv = pdata->vref_mv;
st->reg = regulator_get(&client->dev, "vcc");
if (!IS_ERR(st->reg)) {
@@ -946,6 +672,7 @@ static int ad799x_remove(struct i2c_client *client)
regulator_disable(st->reg);
regulator_put(st->reg);
}
+ kfree(st->rx_buf);
iio_device_free(indio_dev);
return 0;
diff --git a/drivers/staging/iio/adc/ad799x_ring.c b/drivers/staging/iio/adc/ad799x_ring.c
index 2c5f38475a8e..c2ebae12ee19 100644
--- a/drivers/staging/iio/adc/ad799x_ring.c
+++ b/drivers/staging/iio/adc/ad799x_ring.c
@@ -36,14 +36,9 @@ static irqreturn_t ad799x_trigger_handler(int irq, void *p)
struct iio_dev *indio_dev = pf->indio_dev;
struct ad799x_state *st = iio_priv(indio_dev);
s64 time_ns;
- __u8 *rxbuf;
int b_sent;
u8 cmd;
- rxbuf = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
- if (rxbuf == NULL)
- goto out;
-
switch (st->id) {
case ad7991:
case ad7995:
@@ -66,20 +61,17 @@ static irqreturn_t ad799x_trigger_handler(int irq, void *p)
}
b_sent = i2c_smbus_read_i2c_block_data(st->client,
- cmd, bitmap_weight(indio_dev->active_scan_mask,
- indio_dev->masklength) * 2, rxbuf);
+ cmd, st->transfer_size, st->rx_buf);
if (b_sent < 0)
- goto done;
+ goto out;
time_ns = iio_get_time_ns();
if (indio_dev->scan_timestamp)
- memcpy(rxbuf + indio_dev->scan_bytes - sizeof(s64),
+ memcpy(st->rx_buf + indio_dev->scan_bytes - sizeof(s64),
&time_ns, sizeof(time_ns));
- iio_push_to_buffers(indio_dev, rxbuf);
-done:
- kfree(rxbuf);
+ iio_push_to_buffers(indio_dev, st->rx_buf);
out:
iio_trigger_notify_done(indio_dev->trig);
diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c
index 25a4359a92db..6044e1717b20 100644
--- a/drivers/staging/iio/adc/mxs-lradc.c
+++ b/drivers/staging/iio/adc/mxs-lradc.c
@@ -646,7 +646,7 @@ static irqreturn_t mxs_lradc_trigger_handler(int irq, void *p)
static int mxs_lradc_configure_trigger(struct iio_trigger *trig, bool state)
{
- struct iio_dev *iio = trig->private_data;
+ struct iio_dev *iio = iio_trigger_get_drvdata(trig);
struct mxs_lradc *lradc = iio_priv(iio);
const uint32_t st = state ? STMP_OFFSET_REG_SET : STMP_OFFSET_REG_CLR;
@@ -670,7 +670,7 @@ static int mxs_lradc_trigger_init(struct iio_dev *iio)
return -ENOMEM;
trig->dev.parent = iio->dev.parent;
- trig->private_data = iio;
+ iio_trigger_set_drvdata(trig, iio);
trig->ops = &mxs_lradc_trigger_ops;
ret = iio_trigger_register(trig);
@@ -983,6 +983,9 @@ static int mxs_lradc_probe(struct platform_device *pdev)
if (ret)
goto err_trig;
+ /* Configure the hardware. */
+ mxs_lradc_hw_init(lradc);
+
/* Register the touchscreen input device. */
ret = mxs_lradc_ts_register(lradc);
if (ret)
@@ -995,9 +998,6 @@ static int mxs_lradc_probe(struct platform_device *pdev)
goto err_ts;
}
- /* Configure the hardware. */
- mxs_lradc_hw_init(lradc);
-
return 0;
err_ts:
diff --git a/drivers/staging/iio/meter/ade7758_trigger.c b/drivers/staging/iio/meter/ade7758_trigger.c
index f9c6a340092b..7a94ddd42f59 100644
--- a/drivers/staging/iio/meter/ade7758_trigger.c
+++ b/drivers/staging/iio/meter/ade7758_trigger.c
@@ -32,7 +32,7 @@ static irqreturn_t ade7758_data_rdy_trig_poll(int irq, void *private)
static int ade7758_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state)
{
- struct iio_dev *indio_dev = trig->private_data;
+ struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
dev_dbg(&indio_dev->dev, "%s (%d)\n", __func__, state);
return ade7758_set_irq(&indio_dev->dev, state);
@@ -44,7 +44,7 @@ static int ade7758_data_rdy_trigger_set_state(struct iio_trigger *trig,
**/
static int ade7758_trig_try_reen(struct iio_trigger *trig)
{
- struct iio_dev *indio_dev = trig->private_data;
+ struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
struct ade7758_state *st = iio_priv(indio_dev);
enable_irq(st->us->irq);
@@ -81,7 +81,7 @@ int ade7758_probe_trigger(struct iio_dev *indio_dev)
st->trig->dev.parent = &st->us->dev;
st->trig->ops = &ade7758_trigger_ops;
- st->trig->private_data = indio_dev;
+ iio_trigger_set_drvdata(st->trig, indio_dev);
ret = iio_trigger_register(st->trig);
/* select default trigger */
diff --git a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
index 42798da575c0..38a158b77b1d 100644
--- a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
+++ b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
@@ -65,7 +65,7 @@ struct bfin_tmr_state {
static int iio_bfin_tmr_set_state(struct iio_trigger *trig, bool state)
{
- struct bfin_tmr_state *st = trig->private_data;
+ struct bfin_tmr_state *st = iio_trigger_get_drvdata(trig);
if (get_gptimer_period(st->t->id) == 0)
return -EINVAL;
@@ -82,7 +82,7 @@ static ssize_t iio_bfin_tmr_frequency_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t count)
{
struct iio_trigger *trig = to_iio_trigger(dev);
- struct bfin_tmr_state *st = trig->private_data;
+ struct bfin_tmr_state *st = iio_trigger_get_drvdata(trig);
unsigned long val;
bool enabled;
int ret;
@@ -125,7 +125,7 @@ static ssize_t iio_bfin_tmr_frequency_show(struct device *dev,
char *buf)
{
struct iio_trigger *trig = to_iio_trigger(dev);
- struct bfin_tmr_state *st = trig->private_data;
+ struct bfin_tmr_state *st = iio_trigger_get_drvdata(trig);
unsigned int period = get_gptimer_period(st->t->id);
unsigned long val;
@@ -213,9 +213,9 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
goto out1;
}
- st->trig->private_data = st;
st->trig->ops = &iio_bfin_tmr_trigger_ops;
st->trig->dev.groups = iio_bfin_tmr_trigger_attr_groups;
+ iio_trigger_set_drvdata(st->trig, st);
ret = iio_trigger_register(st->trig);
if (ret)
goto out2;
diff --git a/drivers/staging/iio/trigger/iio-trig-gpio.c b/drivers/staging/iio/trigger/iio-trig-gpio.c
index fcc4cb048c9a..7c593d18a910 100644
--- a/drivers/staging/iio/trigger/iio-trig-gpio.c
+++ b/drivers/staging/iio/trigger/iio-trig-gpio.c
@@ -83,7 +83,7 @@ static int iio_gpio_trigger_probe(struct platform_device *pdev)
ret = -ENOMEM;
goto error_put_trigger;
}
- trig->private_data = trig_info;
+ iio_trigger_set_drvdata(trig, trig_info);
trig_info->irq = irq;
trig->ops = &iio_gpio_trigger_ops;
ret = request_irq(irq, iio_gpio_trigger_poll,
@@ -121,7 +121,7 @@ error_free_completed_registrations:
trig2,
&iio_gpio_trigger_list,
alloc_list) {
- trig_info = trig->private_data;
+ trig_info = iio_trigger_get_drvdata(trig);
free_irq(gpio_to_irq(trig_info->irq), trig);
kfree(trig_info);
iio_trigger_unregister(trig);
@@ -140,7 +140,7 @@ static int iio_gpio_trigger_remove(struct platform_device *pdev)
trig2,
&iio_gpio_trigger_list,
alloc_list) {
- trig_info = trig->private_data;
+ trig_info = iio_trigger_get_drvdata(trig);
iio_trigger_unregister(trig);
free_irq(trig_info->irq, trig);
kfree(trig_info);
diff --git a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
index 9102b1ba2530..79695974b1d4 100644
--- a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
+++ b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
@@ -30,7 +30,7 @@ struct iio_prtc_trigger_info {
static int iio_trig_periodic_rtc_set_state(struct iio_trigger *trig, bool state)
{
- struct iio_prtc_trigger_info *trig_info = trig->private_data;
+ struct iio_prtc_trigger_info *trig_info = iio_trigger_get_drvdata(trig);
if (trig_info->frequency == 0)
return -EINVAL;
printk(KERN_INFO "trigger frequency is %d\n", trig_info->frequency);
@@ -42,7 +42,7 @@ static ssize_t iio_trig_periodic_read_freq(struct device *dev,
char *buf)
{
struct iio_trigger *trig = to_iio_trigger(dev);
- struct iio_prtc_trigger_info *trig_info = trig->private_data;
+ struct iio_prtc_trigger_info *trig_info = iio_trigger_get_drvdata(trig);
return sprintf(buf, "%u\n", trig_info->frequency);
}
@@ -52,7 +52,7 @@ static ssize_t iio_trig_periodic_write_freq(struct device *dev,
size_t len)
{
struct iio_trigger *trig = to_iio_trigger(dev);
- struct iio_prtc_trigger_info *trig_info = trig->private_data;
+ struct iio_prtc_trigger_info *trig_info = iio_trigger_get_drvdata(trig);
unsigned long val;
int ret;
@@ -124,7 +124,7 @@ static int iio_trig_periodic_rtc_probe(struct platform_device *dev)
ret = -ENOMEM;
goto error_put_trigger_and_remove_from_list;
}
- trig->private_data = trig_info;
+ iio_trigger_set_drvdata(trig, trig_info);
trig->ops = &iio_prtc_trigger_ops;
/* RTC access */
trig_info->rtc
@@ -158,7 +158,7 @@ error_free_completed_registrations:
trig2,
&iio_prtc_trigger_list,
alloc_list) {
- trig_info = trig->private_data;
+ trig_info = iio_trigger_get_drvdata(trig);
rtc_irq_unregister(trig_info->rtc, &trig_info->task);
rtc_class_close(trig_info->rtc);
kfree(trig_info);
@@ -176,7 +176,7 @@ static int iio_trig_periodic_rtc_remove(struct platform_device *dev)
trig2,
&iio_prtc_trigger_list,
alloc_list) {
- trig_info = trig->private_data;
+ trig_info = iio_trigger_get_drvdata(trig);
rtc_irq_unregister(trig_info->rtc, &trig_info->task);
rtc_class_close(trig_info->rtc);
kfree(trig_info);
diff --git a/drivers/staging/iio/trigger/iio-trig-sysfs.c b/drivers/staging/iio/trigger/iio-trig-sysfs.c
index 3bac97224bf4..b727bde8b7fe 100644
--- a/drivers/staging/iio/trigger/iio-trig-sysfs.c
+++ b/drivers/staging/iio/trigger/iio-trig-sysfs.c
@@ -103,7 +103,7 @@ static ssize_t iio_sysfs_trigger_poll(struct device *dev,
struct device_attribute *attr, const char *buf, size_t count)
{
struct iio_trigger *trig = to_iio_trigger(dev);
- struct iio_sysfs_trig *sysfs_trig = trig->private_data;
+ struct iio_sysfs_trig *sysfs_trig = iio_trigger_get_drvdata(trig);
irq_work_queue(&sysfs_trig->work);
@@ -160,7 +160,7 @@ static int iio_sysfs_trigger_probe(int id)
t->trig->dev.groups = iio_sysfs_trigger_attr_groups;
t->trig->ops = &iio_sysfs_trigger_ops;
t->trig->dev.parent = &iio_sysfs_trig_dev;
- t->trig->private_data = t;
+ iio_trigger_set_drvdata(t->trig, t);
init_irq_work(&t->work, iio_sysfs_trigger_work);