Commit f7046bf0 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge tag 'iio-for-3.10b' of...

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.
parents 698f57f4 2b684024
Samsung Exynos Analog to Digital Converter bindings Samsung Exynos Analog to Digital Converter bindings
This devicetree binding are for the new adc driver written fori The devicetree bindings are for the new ADC driver written for
Exynos4 and upward SoCs from Samsung. Exynos4 and upward SoCs from Samsung.
New driver handles the following New driver handles the following
...@@ -20,6 +20,9 @@ Required properties: ...@@ -20,6 +20,9 @@ Required properties:
format is being dependent on which interrupt controller format is being dependent on which interrupt controller
the Samsung device uses. the Samsung device uses.
- #io-channel-cells = <1>; As ADC has multiple outputs - #io-channel-cells = <1>; As ADC has multiple outputs
- clocks From common clock binding: handle to adc clock.
- clock-names From common clock binding: Shall be "adc".
- vdd-supply VDD input supply.
Note: child nodes can be added for auto probing from device tree. Note: child nodes can be added for auto probing from device tree.
...@@ -31,6 +34,11 @@ adc: adc@12D10000 { ...@@ -31,6 +34,11 @@ adc: adc@12D10000 {
interrupts = <0 106 0>; interrupts = <0 106 0>;
#io-channel-cells = <1>; #io-channel-cells = <1>;
io-channel-ranges; io-channel-ranges;
clocks = <&clock 303>;
clock-names = "adc";
vdd-supply = <&buck5_reg>;
}; };
...@@ -49,4 +57,4 @@ adc@12D10000 { ...@@ -49,4 +57,4 @@ adc@12D10000 {
}; };
Note: Does not apply to ADC driver under arch/arm/plat-samsung/ Note: Does not apply to ADC driver under arch/arm/plat-samsung/
Note: The child node can be added under the adc node or seperately. Note: The child node can be added under the adc node or separately.
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
int st_accel_trig_set_state(struct iio_trigger *trig, bool state) 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); return st_sensors_set_dataready_irq(indio_dev, state);
} }
......
...@@ -470,7 +470,7 @@ static int ad_sd_probe_trigger(struct iio_dev *indio_dev) ...@@ -470,7 +470,7 @@ static int ad_sd_probe_trigger(struct iio_dev *indio_dev)
disable_irq_nosync(sigma_delta->spi->irq); disable_irq_nosync(sigma_delta->spi->irq);
} }
sigma_delta->trig->dev.parent = &sigma_delta->spi->dev; 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); ret = iio_trigger_register(sigma_delta->trig);
if (ret) if (ret)
......
...@@ -188,7 +188,7 @@ static u8 at91_adc_get_trigger_value_by_name(struct iio_dev *idev, ...@@ -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) 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 at91_adc_state *st = iio_priv(idev);
struct iio_buffer *buffer = idev->buffer; struct iio_buffer *buffer = idev->buffer;
struct at91_adc_reg_desc *reg = st->registers; struct at91_adc_reg_desc *reg = st->registers;
...@@ -254,7 +254,7 @@ static struct iio_trigger *at91_adc_allocate_trigger(struct iio_dev *idev, ...@@ -254,7 +254,7 @@ static struct iio_trigger *at91_adc_allocate_trigger(struct iio_dev *idev,
return NULL; return NULL;
trig->dev.parent = idev->dev.parent; trig->dev.parent = idev->dev.parent;
trig->private_data = idev; iio_trigger_set_drvdata(trig, idev);
trig->ops = &at91_adc_trigger_ops; trig->ops = &at91_adc_trigger_ops;
ret = iio_trigger_register(trig); ret = iio_trigger_register(trig);
......
...@@ -440,7 +440,7 @@ static struct platform_driver exynos_adc_driver = { ...@@ -440,7 +440,7 @@ static struct platform_driver exynos_adc_driver = {
.driver = { .driver = {
.name = "exynos-adc", .name = "exynos-adc",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.of_match_table = of_match_ptr(exynos_adc_match), .of_match_table = exynos_adc_match,
.pm = &exynos_adc_pm_ops, .pm = &exynos_adc_pm_ops,
}, },
}; };
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
static int hid_sensor_data_rdy_trigger_set_state(struct iio_trigger *trig, static int hid_sensor_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state) bool state)
{ {
struct hid_sensor_common *st = trig->private_data; struct hid_sensor_common *st = iio_trigger_get_drvdata(trig);
int state_val; int state_val;
state_val = state ? 1 : 0; state_val = state ? 1 : 0;
...@@ -76,7 +76,7 @@ int hid_sensor_setup_trigger(struct iio_dev *indio_dev, const char *name, ...@@ -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->dev.parent = indio_dev->dev.parent;
trig->private_data = attrb; iio_trigger_set_drvdata(trig, attrb);
trig->ops = &hid_sensor_trigger_ops; trig->ops = &hid_sensor_trigger_ops;
ret = iio_trigger_register(trig); ret = iio_trigger_register(trig);
......
...@@ -40,7 +40,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev, ...@@ -40,7 +40,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
if (err) if (err)
goto request_irq_error; 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->ops = trigger_ops;
sdata->trig->dev.parent = sdata->dev; sdata->trig->dev.parent = sdata->dev;
......
...@@ -81,7 +81,7 @@ void itg3200_buffer_unconfigure(struct iio_dev *indio_dev) ...@@ -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, static int itg3200_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state) bool state)
{ {
struct iio_dev *indio_dev = trig->private_data; struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
int ret; int ret;
u8 msc; u8 msc;
...@@ -129,7 +129,7 @@ int itg3200_probe_trigger(struct iio_dev *indio_dev) ...@@ -129,7 +129,7 @@ int itg3200_probe_trigger(struct iio_dev *indio_dev)
st->trig->dev.parent = &st->i2c->dev; st->trig->dev.parent = &st->i2c->dev;
st->trig->ops = &itg3200_trigger_ops; 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); ret = iio_trigger_register(st->trig);
if (ret) if (ret)
goto error_free_irq; goto error_free_irq;
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
int st_gyro_trig_set_state(struct iio_trigger *trig, bool state) 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); return st_sensors_set_dataready_irq(indio_dev, state);
} }
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
static int adis_data_rdy_trigger_set_state(struct iio_trigger *trig, static int adis_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state) bool state)
{ {
struct adis *adis = trig->private_data; struct adis *adis = iio_trigger_get_drvdata(trig);
return adis_enable_irq(adis, state); return adis_enable_irq(adis, state);
} }
...@@ -57,7 +57,7 @@ int adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev) ...@@ -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->dev.parent = &adis->spi->dev;
adis->trig->ops = &adis_trigger_ops; adis->trig->ops = &adis_trigger_ops;
adis->trig->private_data = adis; iio_trigger_set_drvdata(adis->trig, adis);
ret = iio_trigger_register(adis->trig); ret = iio_trigger_register(adis->trig);
indio_dev->trig = adis->trig; indio_dev->trig = adis->trig;
......
...@@ -103,7 +103,7 @@ static int inv_mpu6050_set_enable(struct iio_dev *indio_dev, bool enable) ...@@ -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, static int inv_mpu_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state) 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 = { static const struct iio_trigger_ops inv_mpu_trigger_ops = {
...@@ -130,8 +130,8 @@ int inv_mpu6050_probe_trigger(struct iio_dev *indio_dev) ...@@ -130,8 +130,8 @@ int inv_mpu6050_probe_trigger(struct iio_dev *indio_dev)
if (ret) if (ret)
goto error_free_trig; goto error_free_trig;
st->trig->dev.parent = &st->client->dev; st->trig->dev.parent = &st->client->dev;
st->trig->private_data = indio_dev;
st->trig->ops = &inv_mpu_trigger_ops; st->trig->ops = &inv_mpu_trigger_ops;
iio_trigger_set_drvdata(st->trig, indio_dev);
ret = iio_trigger_register(st->trig); ret = iio_trigger_register(st->trig);
if (ret) if (ret)
goto error_free_irq; goto error_free_irq;
......
...@@ -10,9 +10,6 @@ struct iio_trig *trig = iio_trigger_alloc("<trigger format string>", ...); ...@@ -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 allocates a trigger structure. The key elements to then fill in within
a driver are: a driver are:
trig->private_data
Device specific private data.
trig->owner trig->owner
Typically set to THIS_MODULE. Used to ensure correct Typically set to THIS_MODULE. Used to ensure correct
ownership of core allocated resources. ownership of core allocated resources.
......
...@@ -228,7 +228,7 @@ __lis3l02dq_write_data_ready_config(struct iio_dev *indio_dev, bool state) ...@@ -228,7 +228,7 @@ __lis3l02dq_write_data_ready_config(struct iio_dev *indio_dev, bool state)
static int lis3l02dq_data_rdy_trigger_set_state(struct iio_trigger *trig, static int lis3l02dq_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state) bool state)
{ {
struct iio_dev *indio_dev = trig->private_data; struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
int ret = 0; int ret = 0;
u8 t; u8 t;
...@@ -252,7 +252,7 @@ static int lis3l02dq_data_rdy_trigger_set_state(struct iio_trigger *trig, ...@@ -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) 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); struct lis3l02dq_state *st = iio_priv(indio_dev);
int i; int i;
...@@ -290,7 +290,7 @@ int lis3l02dq_probe_trigger(struct iio_dev *indio_dev) ...@@ -290,7 +290,7 @@ int lis3l02dq_probe_trigger(struct iio_dev *indio_dev)
st->trig->dev.parent = &st->us->dev; st->trig->dev.parent = &st->us->dev;
st->trig->ops = &lis3l02dq_trigger_ops; 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); ret = iio_trigger_register(st->trig);
if (ret) if (ret)
goto error_free_trig; goto error_free_trig;
......
...@@ -87,7 +87,6 @@ struct ad799x_state; ...@@ -87,7 +87,6 @@ struct ad799x_state;
* struct ad799x_chip_info - chip specifc information * struct ad799x_chip_info - chip specifc information
* @channel: channel specification * @channel: channel specification
* @num_channels: number of channels * @num_channels: number of channels
* @int_vref_mv: the internal reference voltage
* @monitor_mode: whether the chip supports monitor interrupts * @monitor_mode: whether the chip supports monitor interrupts
* @default_config: device default configuration * @default_config: device default configuration
* @event_attrs: pointer to the monitor event attribute group * @event_attrs: pointer to the monitor event attribute group
...@@ -96,7 +95,6 @@ struct ad799x_state; ...@@ -96,7 +95,6 @@ struct ad799x_state;
struct ad799x_chip_info { struct ad799x_chip_info {
struct iio_chan_spec channel[9]; struct iio_chan_spec channel[9];
int num_channels; int num_channels;
u16 int_vref_mv;
u16 default_config; u16 default_config;
const struct iio_info *info; const struct iio_info *info;
}; };
...@@ -104,12 +102,13 @@ struct ad799x_chip_info { ...@@ -104,12 +102,13 @@ struct ad799x_chip_info {
struct ad799x_state { struct ad799x_state {
struct i2c_client *client; struct i2c_client *client;
const struct ad799x_chip_info *chip_info; const struct ad799x_chip_info *chip_info;
struct iio_trigger *trig;
struct regulator *reg; struct regulator *reg;
u16 int_vref_mv; u16 int_vref_mv;
unsigned id; unsigned id;
char *name;
u16 config; u16 config;
u8 *rx_buf;
unsigned int transfer_size;
}; };
/* /*
......
This diff is collapsed.
...@@ -36,14 +36,9 @@ static irqreturn_t ad799x_trigger_handler(int irq, void *p) ...@@ -36,14 +36,9 @@ static irqreturn_t ad799x_trigger_handler(int irq, void *p)
struct iio_dev *indio_dev = pf->indio_dev; struct iio_dev *indio_dev = pf->indio_dev;
struct ad799x_state *st = iio_priv(indio_dev); struct ad799x_state *st = iio_priv(indio_dev);
s64 time_ns; s64 time_ns;
__u8 *rxbuf;
int b_sent; int b_sent;
u8 cmd; u8 cmd;
rxbuf = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
if (rxbuf == NULL)
goto out;
switch (st->id) { switch (st->id) {
case ad7991: case ad7991:
case ad7995: case ad7995:
...@@ -66,20 +61,17 @@ static irqreturn_t ad799x_trigger_handler(int irq, void *p) ...@@ -66,20 +61,17 @@ static irqreturn_t ad799x_trigger_handler(int irq, void *p)
} }
b_sent = i2c_smbus_read_i2c_block_data(st->client, b_sent = i2c_smbus_read_i2c_block_data(st->client,
cmd, bitmap_weight(indio_dev->active_scan_mask, cmd, st->transfer_size, st->rx_buf);
indio_dev->masklength) * 2, rxbuf);
if (b_sent < 0) if (b_sent < 0)
goto done; goto out;
time_ns = iio_get_time_ns(); time_ns = iio_get_time_ns();
if (indio_dev->scan_timestamp) 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)); &time_ns, sizeof(time_ns));
iio_push_to_buffers(indio_dev, rxbuf); iio_push_to_buffers(indio_dev, st->rx_buf);
done:
kfree(rxbuf);
out: out:
iio_trigger_notify_done(indio_dev->trig); iio_trigger_notify_done(indio_dev->trig);
......
...@@ -646,7 +646,7 @@ static irqreturn_t mxs_lradc_trigger_handler(int irq, void *p) ...@@ -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) 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); struct mxs_lradc *lradc = iio_priv(iio);
const uint32_t st = state ? STMP_OFFSET_REG_SET : STMP_OFFSET_REG_CLR; 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) ...@@ -670,7 +670,7 @@ static int mxs_lradc_trigger_init(struct iio_dev *iio)
return -ENOMEM; return -ENOMEM;
trig->dev.parent = iio->dev.parent; trig->dev.parent = iio->dev.parent;
trig->private_data = iio; iio_trigger_set_drvdata(trig, iio);
trig->ops = &mxs_lradc_trigger_ops; trig->ops = &mxs_lradc_trigger_ops;
ret = iio_trigger_register(trig); ret = iio_trigger_register(trig);
...@@ -983,6 +983,9 @@ static int mxs_lradc_probe(struct platform_device *pdev) ...@@ -983,6 +983,9 @@ static int mxs_lradc_probe(struct platform_device *pdev)
if (ret) if (ret)
goto err_trig; goto err_trig;
/* Configure the hardware. */
mxs_lradc_hw_init(lradc);
/* Register the touchscreen input device. */ /* Register the touchscreen input device. */
ret = mxs_lradc_ts_register(lradc); ret = mxs_lradc_ts_register(lradc);
if (ret) if (ret)
...@@ -995,9 +998,6 @@ static int mxs_lradc_probe(struct platform_device *pdev) ...@@ -995,9 +998,6 @@ static int mxs_lradc_probe(struct platform_device *pdev)
goto err_ts; goto err_ts;
} }
/* Configure the hardware. */
mxs_lradc_hw_init(lradc);
return 0; return 0;
err_ts: err_ts:
......
...@@ -32,7 +32,7 @@ static irqreturn_t ade7758_data_rdy_trig_poll(int irq, void *private) ...@@ -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, static int ade7758_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state) 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); dev_dbg(&indio_dev->dev, "%s (%d)\n", __func__, state);
return ade7758_set_irq(&indio_dev->dev, 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, ...@@ -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) 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); struct ade7758_state *st = iio_priv(indio_dev);
enable_irq(st->us->irq); enable_irq(st->us->irq);
...@@ -81,7 +81,7 @@ int ade7758_probe_trigger(struct iio_dev *indio_dev) ...@@ -81,7 +81,7 @@ int ade7758_probe_trigger(struct iio_dev *indio_dev)
st->trig->dev.parent = &st->us->dev; st->trig->dev.parent = &st->us->dev;
st->trig->ops = &ade7758_trigger_ops; 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); ret = iio_trigger_register(st->trig);
/* select default trigger */ /* select default trigger */
......
...@@ -65,7 +65,7 @@ struct bfin_tmr_state { ...@@ -65,7 +65,7 @@ struct bfin_tmr_state {
static int iio_bfin_tmr_set_state(struct iio_trigger *trig, bool 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) if (get_gptimer_period(st->t->id) == 0)
return -EINVAL; return -EINVAL;
...@@ -82,7 +82,7 @@ static ssize_t iio_bfin_tmr_frequency_store(struct device *dev, ...@@ -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 device_attribute *attr, const char *buf, size_t count)
{ {
struct iio_trigger *trig = to_iio_trigger(dev); 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; unsigned long val;
bool enabled; bool enabled;
int ret; int ret;
...@@ -125,7 +125,7 @@ static ssize_t iio_bfin_tmr_frequency_show(struct device *dev, ...@@ -125,7 +125,7 @@ static ssize_t iio_bfin_tmr_frequency_show(struct device *dev,
char *buf) char *buf)
{ {
struct iio_trigger *trig = to_iio_trigger(dev); 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 int period = get_gptimer_period(st->t->id);
unsigned long val; unsigned long val;
...@@ -213,9 +213,9 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev) ...@@ -213,9 +213,9 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
goto out1; goto out1;
} }
st->trig->private_data = st;
st->trig->ops = &iio_bfin_tmr_trigger_ops; st->trig->ops = &iio_bfin_tmr_trigger_ops;
st->trig->dev.groups = iio_bfin_tmr_trigger_attr_groups; st->trig->dev.groups = iio_bfin_tmr_trigger_attr_groups;
iio_trigger_set_drvdata(st->trig, st);
ret = iio_trigger_register(st->trig); ret = iio_trigger_register(st->trig);
if (ret) if (ret)
goto out2; goto out2;
......
...@@ -83,7 +83,7 @@ static int iio_gpio_trigger_probe(struct platform_device *pdev) ...@@ -83,7 +83,7 @@ static int iio_gpio_trigger_probe(struct platform_device *pdev)
ret = -ENOMEM; ret = -ENOMEM;
goto error_put_trigger; goto error_put_trigger;
} }
trig->private_data = trig_info; iio_trigger_set_drvdata(trig, trig_info);
trig_info->irq = irq; trig_info->irq = irq;
trig->ops = &iio_gpio_trigger_ops; trig->ops = &iio_gpio_trigger_ops;
ret = request_irq(irq, iio_gpio_trigger_poll, ret = request_irq(irq, iio_gpio_trigger_poll,
...@@ -121,7 +121,7 @@ static int iio_gpio_trigger_probe(struct platform_device *pdev) ...@@ -121,7 +121,7 @@ static int iio_gpio_trigger_probe(struct platform_device *pdev)
trig2, trig2,
&iio_gpio_trigger_list, &iio_gpio_trigger_list,
alloc_list) { alloc_list) {
trig_info = trig->private_data; trig_info = iio_trigger_get_drvdata(trig);
free_irq(gpio_to_irq(trig_info->irq), trig); free_irq(gpio_to_irq(trig_info->irq), trig);
kfree(trig_info); kfree(trig_info);
iio_trigger_unregister(trig); iio_trigger_unregister(trig);
...@@ -140,7 +140,7 @@ static int iio_gpio_trigger_remove(struct platform_device *pdev) ...@@ -140,7 +140,7 @@ static int iio_gpio_trigger_remove(struct platform_device *pdev)
trig2, trig2,
&iio_gpio_trigger_list, &iio_gpio_trigger_list,
alloc_list) { alloc_list) {
trig_info = trig->private_data; trig_info = iio_trigger_get_drvdata(trig);
iio_trigger_unregister(trig); iio_trigger_unregister(trig);
free_irq(trig_info->irq, trig); free_irq(trig_info->irq, trig);
kfree(trig_info); kfree(trig_info);
......
...@@ -30,7 +30,7 @@ struct iio_prtc_trigger_info { ...@@ -30,7 +30,7 @@ struct iio_prtc_trigger_info {
static int iio_trig_periodic_rtc_set_state(struct iio_trigger *trig, bool state) 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) if (trig_info->frequency == 0)
return -EINVAL; return -EINVAL;
printk(KERN_INFO "trigger frequency is %d\n", trig_info->frequency); 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, ...@@ -42,7 +42,7 @@ static ssize_t iio_trig_periodic_read_freq(struct device *dev,
char *buf) char *buf)
{ {
struct iio_trigger *trig = to_iio_trigger(dev); 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); return sprintf(buf, "%u\n", trig_info->frequency);
} }
...@@ -52,7 +52,7 @@ static ssize_t iio_trig_periodic_write_freq(struct device *dev, ...@@ -52,7 +52,7 @@ static ssize_t iio_trig_periodic_write_freq(struct device *dev,
size_t len) size_t len)
{ {
struct iio_trigger *trig = to_iio_trigger(dev); 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; unsigned long val;
int ret; int ret;
...@@ -124,7 +124,7 @@ static int iio_trig_periodic_rtc_probe(struct platform_device *dev) ...@@ -124,7 +124,7 @@ static int iio_trig_periodic_rtc_probe(struct platform_device *dev)
ret = -ENOMEM; ret = -ENOMEM;
goto error_put_trigger_and_remove_from_list; 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; trig->ops = &iio_prtc_trigger_ops;
/* RTC access */ /* RTC access */
trig_info->rtc trig_info->rtc
...@@ -158,7 +158,7 @@ static int iio_trig_periodic_rtc_probe(struct platform_device *dev) ...@@ -158,7 +158,7 @@ static int iio_trig_periodic_rtc_probe(struct platform_device *dev)
trig2, trig2,
&iio_prtc_trigger_list, &iio_prtc_trigger_list,
alloc_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_irq_unregister(trig_info->rtc, &trig_info->task);
rtc_class_close(trig_info->rtc); rtc_class_close(trig_info->rtc);
kfree(trig_info); kfree(trig_info);
...@@ -176,7 +176,7 @@ static int iio_trig_periodic_rtc_remove(struct platform_device *dev) ...@@ -176,7 +176,7 @@ static int iio_trig_periodic_rtc_remove(struct platform_device *dev)
trig2, trig2,
&iio_prtc_trigger_list, &iio_prtc_trigger_list,
alloc_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_irq_unregister(trig_info->rtc, &trig_info->task);
rtc_class_close(trig_info->rtc); rtc_class_close(trig_info->rtc);
kfree(trig_info); kfree(trig_info);
......
...@@ -103,7 +103,7 @@ static ssize_t iio_sysfs_trigger_poll(struct device *dev, ...@@ -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 device_attribute *attr, const char *buf, size_t count)
{ {
struct iio_trigger *trig = to_iio_trigger(dev); 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); irq_work_queue(&sysfs_trig->work);
...@@ -160,7 +160,7 @@ static int iio_sysfs_trigger_probe(int id) ...@@ -160,7 +160,7 @@ static int iio_sysfs_trigger_probe(int id)
t->trig->dev.groups = iio_sysfs_trigger_attr_groups; t->trig->dev.groups = iio_sysfs_trigger_attr_groups;
t->trig->ops = &iio_sysfs_trigger_ops; t->trig->ops = &iio_sysfs_trigger_ops;
t->trig->dev.parent = &iio_sysfs_trig_dev; 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); init_irq_work(&t->work, iio_sysfs_trigger_work);
......
...@@ -44,7 +44,6 @@ struct iio_trigger_ops { ...@@ -44,7 +44,6 @@ struct iio_trigger_ops {
* @id: [INTERN] unique id number * @id: [INTERN] unique id number
* @name: [DRIVER] unique name * @name: [DRIVER] unique name
* @dev: [DRIVER] associated device (if relevant) * @dev: [DRIVER] associated device (if relevant)
* @private_data: [DRIVER] device specific data
* @list: [INTERN] used in maintenance of global trigger list * @list: [INTERN] used in maintenance of global trigger list
* @alloc_list: [DRIVER] used for driver specific trigger list * @alloc_list: [DRIVER] used for driver specific trigger list
* @use_count: use count for the trigger * @use_count: use count for the trigger
...@@ -60,7 +59,6 @@ struct iio_trigger { ...@@ -60,7 +59,6 @@ struct iio_trigger {
const char *name; const char *name;
struct device dev; struct device dev;
void *private_data;
struct list_head list; struct list_head list;
struct list_head alloc_list; struct list_head alloc_list;
int use_count; int use_count;
...@@ -91,6 +89,30 @@ static inline void iio_trigger_get(struct iio_trigger *trig) ...@@ -91,6 +89,30 @@ static inline void iio_trigger_get(struct iio_trigger *trig)
__module_get(trig->ops->owner); __module_get(trig->ops->owner);
} }
/**
* iio_device_set_drvdata() - Set trigger driver data
* @trig: IIO trigger structure
* @data: Driver specific data
*
* Allows to attach an arbitrary pointer to an IIO trigger, which can later be
* retrieved by iio_trigger_get_drvdata().
*/
static inline void iio_trigger_set_drvdata(struct iio_trigger *trig, void *data)
{
dev_set_drvdata(&trig->dev, data);
}
/**
* iio_trigger_get_drvdata() - Get trigger driver data
* @trig: IIO trigger structure
*
* Returns the data previously set with iio_trigger_set_drvdata()
*/
static inline void *iio_trigger_get_drvdata(struct iio_trigger *trig)
{
return dev_get_drvdata(&trig->dev);
}
/** /**
* iio_trigger_register() - register a trigger with the IIO core * iio_trigger_register() - register a trigger with the IIO core
* @trig_info: trigger to be registered * @trig_info: trigger to be registered
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment