Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 267526
b: refs/heads/master
c: d29f73d
h: refs/heads/master
v: v3
  • Loading branch information
Jonathan Cameron authored and Greg Kroah-Hartman committed Aug 23, 2011
1 parent 1b40014 commit a7d1b51
Show file tree
Hide file tree
Showing 16 changed files with 110 additions and 45 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 214320b6ec0de0f98b5f929a1738363872b0178d
refs/heads/master: d29f73db791098179af90e6a5b1df41f941b32cd
8 changes: 6 additions & 2 deletions trunk/drivers/staging/iio/accel/adis16201_trigger.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ static int adis16201_data_rdy_trigger_set_state(struct iio_trigger *trig,
return adis16201_set_irq(indio_dev, state);
}

static const struct iio_trigger_ops adis16201_trigger_ops = {
.owner = THIS_MODULE,
.set_trigger_state = &adis16201_data_rdy_trigger_set_state,
};

int adis16201_probe_trigger(struct iio_dev *indio_dev)
{
int ret;
Expand All @@ -41,9 +46,8 @@ int adis16201_probe_trigger(struct iio_dev *indio_dev)
if (ret)
goto error_free_trig;
st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->ops = &adis16201_trigger_ops;
st->trig->private_data = indio_dev;
st->trig->set_trigger_state = &adis16201_data_rdy_trigger_set_state;
ret = iio_trigger_register(st->trig);

/* select default trigger */
Expand Down
8 changes: 6 additions & 2 deletions trunk/drivers/staging/iio/accel/adis16203_trigger.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ static int adis16203_data_rdy_trigger_set_state(struct iio_trigger *trig,
return adis16203_set_irq(indio_dev, state);
}

static const struct iio_trigger_ops adis16203_trigger_ops = {
.owner = THIS_MODULE,
.set_trigger_state = &adis16203_data_rdy_trigger_set_state,
};

int adis16203_probe_trigger(struct iio_dev *indio_dev)
{
int ret;
Expand All @@ -44,9 +49,8 @@ int adis16203_probe_trigger(struct iio_dev *indio_dev)
goto error_free_trig;

st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->ops = &adis16203_trigger_ops;
st->trig->private_data = indio_dev;
st->trig->set_trigger_state = &adis16203_data_rdy_trigger_set_state;
ret = iio_trigger_register(st->trig);

/* select default trigger */
Expand Down
8 changes: 6 additions & 2 deletions trunk/drivers/staging/iio/accel/adis16204_trigger.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ static int adis16204_data_rdy_trigger_set_state(struct iio_trigger *trig,
return adis16204_set_irq(indio_dev, state);
}

static const struct iio_trigger_ops adis16204_trigger_ops = {
.owner = THIS_MODULE,
.set_trigger_state = &adis16204_data_rdy_trigger_set_state,
};

int adis16204_probe_trigger(struct iio_dev *indio_dev)
{
int ret;
Expand All @@ -44,9 +49,8 @@ int adis16204_probe_trigger(struct iio_dev *indio_dev)
goto error_free_trig;

st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->ops = &adis16204_trigger_ops;
st->trig->private_data = indio_dev;
st->trig->set_trigger_state = &adis16204_data_rdy_trigger_set_state;
ret = iio_trigger_register(st->trig);

/* select default trigger */
Expand Down
8 changes: 6 additions & 2 deletions trunk/drivers/staging/iio/accel/adis16209_trigger.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ static int adis16209_data_rdy_trigger_set_state(struct iio_trigger *trig,
return adis16209_set_irq(indio_dev, state);
}

static const struct iio_trigger_ops adis16209_trigger_ops = {
.owner = THIS_MODULE,
.set_trigger_state = &adis16209_data_rdy_trigger_set_state,
};

int adis16209_probe_trigger(struct iio_dev *indio_dev)
{
int ret;
Expand All @@ -52,9 +57,8 @@ int adis16209_probe_trigger(struct iio_dev *indio_dev)
if (ret)
goto error_free_trig;
st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->ops = &adis16209_trigger_ops;
st->trig->private_data = indio_dev;
st->trig->set_trigger_state = &adis16209_data_rdy_trigger_set_state;
ret = iio_trigger_register(st->trig);

/* select default trigger */
Expand Down
8 changes: 6 additions & 2 deletions trunk/drivers/staging/iio/accel/adis16240_trigger.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ static int adis16240_data_rdy_trigger_set_state(struct iio_trigger *trig,
return adis16240_set_irq(indio_dev, state);
}

static const struct iio_trigger_ops adis16240_trigger_ops = {
.owner = THIS_MODULE,
.set_trigger_state = &adis16240_data_rdy_trigger_set_state,
};

int adis16240_probe_trigger(struct iio_dev *indio_dev)
{
int ret;
Expand All @@ -53,9 +58,8 @@ int adis16240_probe_trigger(struct iio_dev *indio_dev)
goto error_free_trig;

st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->ops = &adis16240_trigger_ops;
st->trig->private_data = indio_dev;
st->trig->set_trigger_state = &adis16240_data_rdy_trigger_set_state;
ret = iio_trigger_register(st->trig);

/* select default trigger */
Expand Down
10 changes: 7 additions & 3 deletions trunk/drivers/staging/iio/accel/lis3l02dq_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,12 @@ static int lis3l02dq_trig_try_reen(struct iio_trigger *trig)
return 0;
}

static const struct iio_trigger_ops lis3l02dq_trigger_ops = {
.owner = THIS_MODULE,
.set_trigger_state = &lis3l02dq_data_rdy_trigger_set_state,
.try_reenable = &lis3l02dq_trig_try_reen,
};

int lis3l02dq_probe_trigger(struct iio_dev *indio_dev)
{
int ret;
Expand All @@ -318,10 +324,8 @@ int lis3l02dq_probe_trigger(struct iio_dev *indio_dev)
}

st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->ops = &lis3l02dq_trigger_ops;
st->trig->private_data = indio_dev;
st->trig->set_trigger_state = &lis3l02dq_data_rdy_trigger_set_state;
st->trig->try_reenable = &lis3l02dq_trig_try_reen;
ret = iio_trigger_register(st->trig);
if (ret)
goto error_free_trig;
Expand Down
8 changes: 6 additions & 2 deletions trunk/drivers/staging/iio/gyro/adis16260_trigger.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ static int adis16260_data_rdy_trigger_set_state(struct iio_trigger *trig,
return adis16260_set_irq(indio_dev, state);
}

static const struct iio_trigger_ops adis16260_trigger_ops = {
.owner = THIS_MODULE,
.set_trigger_state = &adis16260_data_rdy_trigger_set_state,
};

int adis16260_probe_trigger(struct iio_dev *indio_dev)
{
int ret;
Expand All @@ -46,9 +51,8 @@ int adis16260_probe_trigger(struct iio_dev *indio_dev)
goto error_free_trig;

st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->ops = &adis16260_trigger_ops;
st->trig->private_data = indio_dev;
st->trig->set_trigger_state = &adis16260_data_rdy_trigger_set_state;
ret = iio_trigger_register(st->trig);

/* select default trigger */
Expand Down
8 changes: 6 additions & 2 deletions trunk/drivers/staging/iio/imu/adis16400_trigger.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ static int adis16400_data_rdy_trigger_set_state(struct iio_trigger *trig,
return adis16400_set_irq(indio_dev, state);
}

static const struct iio_trigger_ops adis16400_trigger_ops = {
.owner = THIS_MODULE,
.set_trigger_state = &adis16400_data_rdy_trigger_set_state,
};

int adis16400_probe_trigger(struct iio_dev *indio_dev)
{
int ret;
Expand All @@ -39,9 +44,8 @@ int adis16400_probe_trigger(struct iio_dev *indio_dev)
if (ret)
goto error_free_trig;
st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->private_data = indio_dev;
st->trig->set_trigger_state = &adis16400_data_rdy_trigger_set_state;
st->trig->ops = &adis16400_trigger_ops;
ret = iio_trigger_register(st->trig);

/* select default trigger */
Expand Down
16 changes: 8 additions & 8 deletions trunk/drivers/staging/iio/industrialio-trigger.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,8 +206,8 @@ EXPORT_SYMBOL(iio_trigger_poll_chained);
void iio_trigger_notify_done(struct iio_trigger *trig)
{
trig->use_count--;
if (trig->use_count == 0 && trig->try_reenable)
if (trig->try_reenable(trig)) {
if (trig->use_count == 0 && trig->ops && trig->ops->try_reenable)
if (trig->ops->try_reenable(trig)) {
/* Missed and interrupt so launch new poll now */
iio_trigger_poll(trig, 0);
}
Expand All @@ -234,8 +234,8 @@ int iio_trigger_attach_poll_func(struct iio_trigger *trig,
ret = request_threaded_irq(pf->irq, pf->h, pf->thread,
pf->type, pf->name,
pf);
if (trig->set_trigger_state && notinuse)
ret = trig->set_trigger_state(trig, true);
if (trig->ops && trig->ops->set_trigger_state && notinuse)
ret = trig->ops->set_trigger_state(trig, true);

return ret;
}
Expand All @@ -249,8 +249,8 @@ int iio_trigger_dettach_poll_func(struct iio_trigger *trig,
= (bitmap_weight(trig->pool,
CONFIG_IIO_CONSUMERS_PER_TRIGGER)
== 1);
if (trig->set_trigger_state && no_other_users) {
ret = trig->set_trigger_state(trig, false);
if (trig->ops && trig->ops->set_trigger_state && no_other_users) {
ret = trig->ops->set_trigger_state(trig, false);
if (ret)
goto error_ret;
}
Expand Down Expand Up @@ -358,8 +358,8 @@ static ssize_t iio_trigger_write_current(struct device *dev,
return ret;
}

if (trig && trig->validate_device) {
ret = trig->validate_device(trig, dev_info);
if (trig && trig->ops && trig->ops->validate_device) {
ret = trig->ops->validate_device(trig, dev_info);
if (ret)
return ret;
}
Expand Down
10 changes: 7 additions & 3 deletions trunk/drivers/staging/iio/meter/ade7758_trigger.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@ static int ade7758_trig_try_reen(struct iio_trigger *trig)
return 0;
}

static const struct iio_trigger_ops ade7758_trigger_ops = {
.owner = THIS_MODULE,
.set_trigger_state = &ade7758_data_rdy_trigger_set_state,
.try_reenable = &ade7758_trig_try_reen,
};

int ade7758_probe_trigger(struct iio_dev *indio_dev)
{
struct ade7758_state *st = iio_priv(indio_dev);
Expand All @@ -79,10 +85,8 @@ int ade7758_probe_trigger(struct iio_dev *indio_dev)
goto error_free_trig;

st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->ops = &ade7758_trigger_ops;
st->trig->private_data = indio_dev;
st->trig->set_trigger_state = &ade7758_data_rdy_trigger_set_state;
st->trig->try_reenable = &ade7758_trig_try_reen;
ret = iio_trigger_register(st->trig);

/* select default trigger */
Expand Down
36 changes: 24 additions & 12 deletions trunk/drivers/staging/iio/trigger.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,27 @@ struct iio_subirq {
bool enabled;
};

/**
* struct iio_trigger_ops - operations structure for an iio_trigger.
* @owner: used to monitor usage count of the trigger.
* @set_trigger_state: switch on/off the trigger on demand
* @try_reenable: function to reenable the trigger when the
* use count is zero (may be NULL)
* @validate_device: function to validate the device when the
* current trigger gets changed.
*
* This is typically static const within a driver and shared by
* instances of a given device.
**/
struct iio_trigger_ops {
struct module *owner;
int (*set_trigger_state)(struct iio_trigger *trig, bool state);
int (*try_reenable)(struct iio_trigger *trig);
int (*validate_device)(struct iio_trigger *trig,
struct iio_dev *indio_dev);
};


/**
* struct iio_trigger - industrial I/O trigger device
*
Expand All @@ -26,18 +47,14 @@ struct iio_subirq {
* @alloc_list: [DRIVER] used for driver specific trigger list
* @owner: [DRIVER] used to monitor usage count of the trigger.
* @use_count: use count for the trigger
* @set_trigger_state: [DRIVER] switch on/off the trigger on demand
* @try_reenable: function to reenable the trigger when the
* use count is zero (may be NULL)
* @validate_device: function to validate the device when the
* current trigger gets changed.
* @subirq_chip: [INTERN] associate 'virtual' irq chip.
* @subirq_base: [INTERN] base number for irqs provided by trigger.
* @subirqs: [INTERN] information about the 'child' irqs.
* @pool: [INTERN] bitmap of irqs currently in use.
* @pool_lock: [INTERN] protection of the irq pool.
**/
struct iio_trigger {
const struct iio_trigger_ops *ops;
int id;
const char *name;
struct device dev;
Expand All @@ -48,11 +65,6 @@ struct iio_trigger {
struct module *owner;
int use_count;

int (*set_trigger_state)(struct iio_trigger *trig, bool state);
int (*try_reenable)(struct iio_trigger *trig);
int (*validate_device)(struct iio_trigger *trig,
struct iio_dev *indio_dev);

struct irq_chip subirq_chip;
int subirq_base;

Expand Down Expand Up @@ -93,12 +105,12 @@ static inline struct iio_trigger *to_iio_trigger(struct device *d)
static inline void iio_put_trigger(struct iio_trigger *trig)
{
put_device(&trig->dev);
module_put(trig->owner);
module_put(trig->ops->owner);
};

static inline void iio_get_trigger(struct iio_trigger *trig)
{
__module_get(trig->owner);
__module_get(trig->ops->owner);
get_device(&trig->dev);
};

Expand Down
6 changes: 5 additions & 1 deletion trunk/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,10 @@ static int iio_bfin_tmr_get_number(int irq)
return -ENODEV;
}

static const struct iio_trigger_ops iio_bfin_tmr_trigger_ops = {
owner = THIS_MODULE,
};

static int __devinit iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
{
struct bfin_tmr_state *st;
Expand Down Expand Up @@ -175,7 +179,7 @@ static int __devinit iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
}

st->trig->private_data = st;
st->trig->owner = THIS_MODULE;
st->trig->ops = &iio_bfin_tmr_trigger_ops;
st->trig->dev.groups = iio_bfin_tmr_trigger_attr_groups;
ret = iio_trigger_register(st->trig);
if (ret)
Expand Down
6 changes: 5 additions & 1 deletion trunk/drivers/staging/iio/trigger/iio-trig-gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ static irqreturn_t iio_gpio_trigger_poll(int irq, void *private)
return IRQ_HANDLED;
}

static const struct iio_trigger_ops iio_gpio_trigger_ops = {
.owner = THIS_MODULE,
};

static int iio_gpio_trigger_probe(struct platform_device *pdev)
{
struct iio_gpio_trigger_info *trig_info;
Expand Down Expand Up @@ -81,7 +85,7 @@ static int iio_gpio_trigger_probe(struct platform_device *pdev)
}
trig->private_data = trig_info;
trig_info->irq = irq;
trig->owner = THIS_MODULE;
trig->ops = &iio_gpio_trigger_ops;
ret = request_irq(irq, iio_gpio_trigger_poll,
irqflags, trig->name, trig);
if (ret) {
Expand Down
7 changes: 6 additions & 1 deletion trunk/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,11 @@ static void iio_prtc_trigger_poll(void *private_data)
iio_trigger_poll(private_data, 0);
}

static const struct iio_trigger_ops iio_prtc_trigger_ops = {
.owner = THIS_MODULE,
.set_trigger_state = &iio_trig_periodic_rtc_set_state,
};

static int iio_trig_periodic_rtc_probe(struct platform_device *dev)
{
char **pdata = dev->dev.platform_data;
Expand All @@ -121,7 +126,7 @@ static int iio_trig_periodic_rtc_probe(struct platform_device *dev)
}
trig->private_data = trig_info;
trig->owner = THIS_MODULE;
trig->set_trigger_state = &iio_trig_periodic_rtc_set_state;
trig->ops = &iio_prtc_trigger_ops;
/* RTC access */
trig_info->rtc
= rtc_class_open(pdata[i]);
Expand Down
Loading

0 comments on commit a7d1b51

Please sign in to comment.