mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-26 15:45:22 +07:00
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. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iQIcBAABAgAGBQJRVWQ/AAoJEFSFNJnE9BaIPY4P/1Z8Vgv0WEdMTrak8VBkzwUj 09uzZNizxs01F1Oe2bdVuPg73UOAZV4U04SwYvB/6fcFUDmtc0L1olh5znxFopW2 GnO+Qq4xXhNRDrXfR4auEiz9Ua0BPnFlOaLdnpdbuXgFyLocuerFtC4ewmw3uVoa Y4fRoGX1p2oSrZLvAPjaWMSyWKeSuk5xZHOD7VuIWEmBFfF55kk1qyE8qprewiwE Jx4tqX1QJ6hWT/7wZc1EP5riUbyXKYBT4Qq0tHE+eF40F+JUL/Fa2C2NVyjlcYuJ 9rwS6mri22sMeEjup/Aqba7QJNeQRcmRlbKZdFVLuNwJj12XEALh02KxjVjKY0Ay N4HxIuM2c4Fab+9nQmv5R8gSYXsBUmCxIuWWbuvksH319KtxBckwPZnu8DDxEjMT nE7pc0EHRILywtQ1dMPvZTHu5Ecu8MZcyNRWLE9CYgmuxuzpm9a4RHD3s4TLa8Lp 9buhoVcbEH1ZKhIhPfyhgtDiTrZgnO4wJ/GwEmZtsmooTXJZyyGNQSoYKs1v2BEs tW+0e78636X82yuJwvZv1LFTQPCIDdfYrVptE9lgqRzu+MB3GwU6iwq6z3N829Js yB6t11SCZCoH4rv7YnJyZ47fdTHcdjDR7372fSRkc2bxP7xJq+iSfZ/eeG7kety8 9kPVP4kKbL6WgprToUGz =20Ps -----END PGP SIGNATURE----- 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.
This commit is contained in:
commit
f7046bf085
@ -1,6 +1,6 @@
|
|||||||
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:
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
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 @@
|
|||||||
|
|
||||||
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)
|
|||||||
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,
|
|||||||
|
|
||||||
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,
|
|||||||
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 = {
|
|||||||
.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 @@
|
|||||||
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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
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 @@
|
|||||||
|
|
||||||
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 @@
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
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>", ...);
|
|||||||
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)
|
|||||||
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,
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
|
|
||||||
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;
|
|||||||
* 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;
|
|||||||
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 {
|
|||||||
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;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -48,13 +48,13 @@ static int ad799x_i2c_read16(struct ad799x_state *st, u8 reg, u16 *data)
|
|||||||
struct i2c_client *client = st->client;
|
struct i2c_client *client = st->client;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
ret = i2c_smbus_read_word_data(client, reg);
|
ret = i2c_smbus_read_word_swapped(client, reg);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(&client->dev, "I2C read error\n");
|
dev_err(&client->dev, "I2C read error\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
*data = swab16((u16)ret);
|
*data = (u16)ret;
|
||||||
|
|
||||||
return 0;
|
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;
|
struct i2c_client *client = st->client;
|
||||||
int ret = 0;
|
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)
|
if (ret < 0)
|
||||||
dev_err(&client->dev, "I2C write error\n");
|
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);
|
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) {
|
switch (st->id) {
|
||||||
case ad7997:
|
case ad7997:
|
||||||
case ad7998:
|
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) | \
|
#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))
|
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[] = {
|
static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
|
||||||
[ad7991] = {
|
[ad7991] = {
|
||||||
.channel = {
|
.channel = {
|
||||||
[0] = {
|
AD799X_CHANNEL(0, 12, 0),
|
||||||
.type = IIO_VOLTAGE,
|
AD799X_CHANNEL(1, 12, 0),
|
||||||
.indexed = 1,
|
AD799X_CHANNEL(2, 12, 0),
|
||||||
.channel = 0,
|
AD799X_CHANNEL(3, 12, 0),
|
||||||
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
|
IIO_CHAN_SOFT_TIMESTAMP(4),
|
||||||
.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),
|
|
||||||
},
|
},
|
||||||
.num_channels = 5,
|
.num_channels = 5,
|
||||||
.int_vref_mv = 4096,
|
|
||||||
.info = &ad7991_info,
|
.info = &ad7991_info,
|
||||||
},
|
},
|
||||||
[ad7995] = {
|
[ad7995] = {
|
||||||
.channel = {
|
.channel = {
|
||||||
[0] = {
|
AD799X_CHANNEL(0, 10, 0),
|
||||||
.type = IIO_VOLTAGE,
|
AD799X_CHANNEL(1, 10, 0),
|
||||||
.indexed = 1,
|
AD799X_CHANNEL(2, 10, 0),
|
||||||
.channel = 0,
|
AD799X_CHANNEL(3, 10, 0),
|
||||||
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
|
IIO_CHAN_SOFT_TIMESTAMP(4),
|
||||||
.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),
|
|
||||||
},
|
},
|
||||||
.num_channels = 5,
|
.num_channels = 5,
|
||||||
.int_vref_mv = 1024,
|
|
||||||
.info = &ad7991_info,
|
.info = &ad7991_info,
|
||||||
},
|
},
|
||||||
[ad7999] = {
|
[ad7999] = {
|
||||||
.channel = {
|
.channel = {
|
||||||
[0] = {
|
AD799X_CHANNEL(0, 8, 0),
|
||||||
.type = IIO_VOLTAGE,
|
AD799X_CHANNEL(1, 8, 0),
|
||||||
.indexed = 1,
|
AD799X_CHANNEL(2, 8, 0),
|
||||||
.channel = 0,
|
AD799X_CHANNEL(3, 8, 0),
|
||||||
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
|
IIO_CHAN_SOFT_TIMESTAMP(4),
|
||||||
.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),
|
|
||||||
},
|
},
|
||||||
.num_channels = 5,
|
.num_channels = 5,
|
||||||
.int_vref_mv = 1024,
|
|
||||||
.info = &ad7991_info,
|
.info = &ad7991_info,
|
||||||
},
|
},
|
||||||
[ad7992] = {
|
[ad7992] = {
|
||||||
.channel = {
|
.channel = {
|
||||||
[0] = {
|
AD799X_CHANNEL(0, 12, AD799X_EV_MASK),
|
||||||
.type = IIO_VOLTAGE,
|
AD799X_CHANNEL(1, 12, AD799X_EV_MASK),
|
||||||
.indexed = 1,
|
IIO_CHAN_SOFT_TIMESTAMP(3),
|
||||||
.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),
|
|
||||||
},
|
},
|
||||||
.num_channels = 3,
|
.num_channels = 3,
|
||||||
.int_vref_mv = 4096,
|
|
||||||
.default_config = AD7998_ALERT_EN,
|
.default_config = AD7998_ALERT_EN,
|
||||||
.info = &ad7992_info,
|
.info = &ad7992_info,
|
||||||
},
|
},
|
||||||
[ad7993] = {
|
[ad7993] = {
|
||||||
.channel = {
|
.channel = {
|
||||||
[0] = {
|
AD799X_CHANNEL(0, 10, AD799X_EV_MASK),
|
||||||
.type = IIO_VOLTAGE,
|
AD799X_CHANNEL(1, 10, AD799X_EV_MASK),
|
||||||
.indexed = 1,
|
AD799X_CHANNEL(2, 10, AD799X_EV_MASK),
|
||||||
.channel = 0,
|
AD799X_CHANNEL(3, 10, AD799X_EV_MASK),
|
||||||
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
|
IIO_CHAN_SOFT_TIMESTAMP(4),
|
||||||
.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),
|
|
||||||
},
|
},
|
||||||
.num_channels = 5,
|
.num_channels = 5,
|
||||||
.int_vref_mv = 1024,
|
|
||||||
.default_config = AD7998_ALERT_EN,
|
.default_config = AD7998_ALERT_EN,
|
||||||
.info = &ad7993_4_7_8_info,
|
.info = &ad7993_4_7_8_info,
|
||||||
},
|
},
|
||||||
[ad7994] = {
|
[ad7994] = {
|
||||||
.channel = {
|
.channel = {
|
||||||
[0] = {
|
AD799X_CHANNEL(0, 12, AD799X_EV_MASK),
|
||||||
.type = IIO_VOLTAGE,
|
AD799X_CHANNEL(1, 12, AD799X_EV_MASK),
|
||||||
.indexed = 1,
|
AD799X_CHANNEL(2, 12, AD799X_EV_MASK),
|
||||||
.channel = 0,
|
AD799X_CHANNEL(3, 12, AD799X_EV_MASK),
|
||||||
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
|
IIO_CHAN_SOFT_TIMESTAMP(4),
|
||||||
.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),
|
|
||||||
},
|
},
|
||||||
.num_channels = 5,
|
.num_channels = 5,
|
||||||
.int_vref_mv = 4096,
|
|
||||||
.default_config = AD7998_ALERT_EN,
|
.default_config = AD7998_ALERT_EN,
|
||||||
.info = &ad7993_4_7_8_info,
|
.info = &ad7993_4_7_8_info,
|
||||||
},
|
},
|
||||||
[ad7997] = {
|
[ad7997] = {
|
||||||
.channel = {
|
.channel = {
|
||||||
[0] = {
|
AD799X_CHANNEL(0, 10, AD799X_EV_MASK),
|
||||||
.type = IIO_VOLTAGE,
|
AD799X_CHANNEL(1, 10, AD799X_EV_MASK),
|
||||||
.indexed = 1,
|
AD799X_CHANNEL(2, 10, AD799X_EV_MASK),
|
||||||
.channel = 0,
|
AD799X_CHANNEL(3, 10, AD799X_EV_MASK),
|
||||||
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
|
AD799X_CHANNEL(4, 10, 0),
|
||||||
.scan_index = 0,
|
AD799X_CHANNEL(5, 10, 0),
|
||||||
.scan_type = IIO_ST('u', 10, 16, 2),
|
AD799X_CHANNEL(6, 10, 0),
|
||||||
.event_mask = AD799X_EV_MASK,
|
AD799X_CHANNEL(7, 10, 0),
|
||||||
},
|
IIO_CHAN_SOFT_TIMESTAMP(8),
|
||||||
[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),
|
|
||||||
},
|
},
|
||||||
.num_channels = 9,
|
.num_channels = 9,
|
||||||
.int_vref_mv = 1024,
|
|
||||||
.default_config = AD7998_ALERT_EN,
|
.default_config = AD7998_ALERT_EN,
|
||||||
.info = &ad7993_4_7_8_info,
|
.info = &ad7993_4_7_8_info,
|
||||||
},
|
},
|
||||||
[ad7998] = {
|
[ad7998] = {
|
||||||
.channel = {
|
.channel = {
|
||||||
[0] = {
|
AD799X_CHANNEL(0, 12, AD799X_EV_MASK),
|
||||||
.type = IIO_VOLTAGE,
|
AD799X_CHANNEL(1, 12, AD799X_EV_MASK),
|
||||||
.indexed = 1,
|
AD799X_CHANNEL(2, 12, AD799X_EV_MASK),
|
||||||
.channel = 0,
|
AD799X_CHANNEL(3, 12, AD799X_EV_MASK),
|
||||||
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
|
AD799X_CHANNEL(4, 12, 0),
|
||||||
.scan_index = 0,
|
AD799X_CHANNEL(5, 12, 0),
|
||||||
.scan_type = IIO_ST('u', 12, 16, 0),
|
AD799X_CHANNEL(6, 12, 0),
|
||||||
.event_mask = AD799X_EV_MASK,
|
AD799X_CHANNEL(7, 12, 0),
|
||||||
},
|
IIO_CHAN_SOFT_TIMESTAMP(8),
|
||||||
[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),
|
|
||||||
},
|
},
|
||||||
.num_channels = 9,
|
.num_channels = 9,
|
||||||
.int_vref_mv = 4096,
|
|
||||||
.default_config = AD7998_ALERT_EN,
|
.default_config = AD7998_ALERT_EN,
|
||||||
.info = &ad7993_4_7_8_info,
|
.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 */
|
/* TODO: Add pdata options for filtering and bit delay */
|
||||||
|
|
||||||
if (pdata)
|
if (!pdata)
|
||||||
st->int_vref_mv = pdata->vref_mv;
|
return -EINVAL;
|
||||||
else
|
|
||||||
st->int_vref_mv = st->chip_info->int_vref_mv;
|
st->int_vref_mv = pdata->vref_mv;
|
||||||
|
|
||||||
st->reg = regulator_get(&client->dev, "vcc");
|
st->reg = regulator_get(&client->dev, "vcc");
|
||||||
if (!IS_ERR(st->reg)) {
|
if (!IS_ERR(st->reg)) {
|
||||||
@ -946,6 +672,7 @@ static int ad799x_remove(struct i2c_client *client)
|
|||||||
regulator_disable(st->reg);
|
regulator_disable(st->reg);
|
||||||
regulator_put(st->reg);
|
regulator_put(st->reg);
|
||||||
}
|
}
|
||||||
|
kfree(st->rx_buf);
|
||||||
iio_device_free(indio_dev);
|
iio_device_free(indio_dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
**/
|
**/
|
||||||
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)
|
|||||||
|
|
||||||
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 {
|
|||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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 {
|
|||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
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)
|
|||||||
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 {
|
|||||||
* @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 {
|
|||||||
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)
|
|||||||
__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
|
||||||
|
Loading…
Reference in New Issue
Block a user