All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Hennerich <michael.hennerich@analog.com>
To: Jonathan Cameron <jic23@cam.ac.uk>
Cc: "linux-iio@vger.kernel.org" <linux-iio@vger.kernel.org>,
	"device-drivers-devel@blackfin.uclinux.org"
	<device-drivers-devel@blackfin.uclinux.org>,
	Drivers <Drivers@analog.com>
Subject: Re: [PATCH] iio: trigger: Add filter callbac
Date: Tue, 7 Jun 2011 11:51:55 +0200	[thread overview]
Message-ID: <4DEDF4BB.3040900@analog.com> (raw)
In-Reply-To: <4DEDE5C5.6080309@cam.ac.uk>

On 06/07/2011 10:48 AM, Jonathan Cameron wrote:
> On 06/06/11 20:52, michael.hennerich@analog.com wrote:
>> From: Michael Hennerich<michael.hennerich@analog.com>
>>
>> Allow devices to reject triggers and vice versa.
>>
>> Changes since V1:
>> Added kernel-doc
>> Moved callback into iio_info
>> Changed function naming
>> Revised return value passing
>> Included trigger.h to avoid warnings
>> Moved definition of struct iio_poll_func to avoid warnings
> This last change should be a separate patch.  If nothing else
> it ought to go into mainline asap, whereas the rest of this
> isn't quite so obviously a fix.  Also, what is the warning?
> (nought showing up here)
The warnings started with putting the callback into iio_info while it=20
didn't warn in iio_dev.

drivers/staging/iio/adc/../iio.h:263: warning: =91struct iio_trigger=92=20
declared inside parameter list
drivers/staging/iio/adc/../iio.h:263: warning: its scope is only this=20
definition or declaration, which is probably not what you want
In file included from drivers/staging/iio/industrialio-trigger.c:19:

So I included trigger.g in iio.h

Then these warnings appeared -
The question is not why those appear - this is quite obvious..
However why haven't we seen these before???


In file included from drivers/staging/iio/iio.h:18,
from drivers/staging/iio/industrialio-core.c:24:
drivers/staging/iio/trigger.h:101: warning: =91struct iio_poll_func=92=20
declared inside parameter list
drivers/staging/iio/trigger.h:101: warning: its scope is only this=20
definition or declaration, which is probably not what you want
drivers/staging/iio/trigger.h:110: warning: =91struct iio_poll_func=92=20
declared inside parameter list

In file included from drivers/staging/iio/iio.h:18,
from drivers/staging/iio/industrialio-trigger.c:19:
drivers/staging/iio/trigger.h:101: warning: =91struct iio_poll_func=92=20
declared inside parameter list
drivers/staging/iio/trigger.h:101: warning: its scope is only this=20
definition or declaration, which is probably not what you want
drivers/staging/iio/trigger.h:110: warning: =91struct iio_poll_func=92=20
declared inside parameter list
drivers/staging/iio/industrialio-trigger.c:226: error: conflicting types=20
for =91iio_trigger_attach_poll_func=92
drivers/staging/iio/trigger.h:100: error: previous declaration of=20
=91iio_trigger_attach_poll_func=92 was here
drivers/staging/iio/industrialio-trigger.c:242: error: conflicting types=20
for =91iio_trigger_attach_poll_func=92
drivers/staging/iio/trigger.h:100: error: previous declaration of=20
=91iio_trigger_attach_poll_func=92 was here
drivers/staging/iio/industrialio-trigger.c:244: error: conflicting types=20
for =91iio_trigger_dettach_poll_func=92
drivers/staging/iio/trigger.h:109: error: previous declaration of=20
=91iio_trigger_dettach_poll_func=92 was here
drivers/staging/iio/industrialio-trigger.c:263: error: conflicting types=20
for =91iio_trigger_dettach_poll_func=92
drivers/staging/iio/trigger.h:109: error: previous declaration of=20
=91iio_trigger_dettach_poll_func=92 was here
make[4]: *** [drivers/staging/iio/industrialio-trigger.o] Error 1



> Hence, if you have time please break that bit out.  Ack is
> for both patches if you do this.
>
> Otherwise, all looks good to me - I'll pull into my local
> tree to rebase the trigger cleanups on top, but feel free
> to push to Greg as well.  I'm waiting on a few tests of non
> ADI parts before pushing out the dev_data removal set.
>
> The addition of these functions would also be slightly nicer
> if in a set with a patch that actually uses them.
Well - AD7793 driver I'm going to send out for another round of review=20
will use them.

> Thanks,
>
> Jonathan
>> Signed-off-by: Michael Hennerich<michael.hennerich@analog.com>
> Acked-by: Jonathan Cameron<jic23@cam.ac.uk>
>> ---
>>   drivers/staging/iio/iio.h                  |    6 +++
>>   drivers/staging/iio/industrialio-trigger.c |   20 ++++++++++-
>>   drivers/staging/iio/trigger.h              |   52 +++++++++++++++---=
----------
>>   3 files changed, 53 insertions(+), 25 deletions(-)
>>
>> diff --git a/drivers/staging/iio/iio.h b/drivers/staging/iio/iio.h
>> index 78a0927..9bf8b11 100644
>> --- a/drivers/staging/iio/iio.h
>> +++ b/drivers/staging/iio/iio.h
>> @@ -15,6 +15,7 @@
>>   #include<linux/irq.h>
>>   #include "sysfs.h"
>>   #include "chrdev.h"
>> +#include "trigger.h"
>>
>>   /* IIO TODO LIST */
>>   /*
>> @@ -224,6 +225,8 @@ static inline s64 iio_get_time_ns(void)
>>    *                   is event dependant. event_code specifies which =
event.
>>    * @write_event_value:       write the value associate with the even=
t.
>>    *                   Meaning is event dependent.
>> + * @validate_trigger:        function to validate the trigger when th=
e
>> + *                   current trigger gets changed.
>>    **/
>>   struct iio_info {
>>        struct module                   *driver_module;
>> @@ -256,6 +259,9 @@ struct iio_info {
>>        int (*write_event_value)(struct iio_dev *indio_dev,
>>                                 int event_code,
>>                                 int val);
>> +     int (*validate_trigger)(struct iio_dev *indio_dev,
>> +                             struct iio_trigger *trig);
>> +
>>   };
>>
>>   /**
>> diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/stag=
ing/iio/industrialio-trigger.c
>> index d504aa2..90ca2df 100644
>> --- a/drivers/staging/iio/industrialio-trigger.c
>> +++ b/drivers/staging/iio/industrialio-trigger.c
>> @@ -340,6 +340,9 @@ static ssize_t iio_trigger_write_current(struct de=
vice *dev,
>>   {
>>        struct iio_dev *dev_info =3D dev_get_drvdata(dev);
>>        struct iio_trigger *oldtrig =3D dev_info->trig;
>> +     struct iio_trigger *trig;
>> +     int ret;
>> +
>>        mutex_lock(&dev_info->mlock);
>>        if (dev_info->currentmode =3D=3D INDIO_RING_TRIGGERED) {
>>                mutex_unlock(&dev_info->mlock);
>> @@ -347,7 +350,22 @@ static ssize_t iio_trigger_write_current(struct d=
evice *dev,
>>        }
>>        mutex_unlock(&dev_info->mlock);
>>
>> -     dev_info->trig =3D iio_trigger_find_by_name(buf, len);
>> +     trig =3D iio_trigger_find_by_name(buf, len);
>> +
>> +     if (trig&&  dev_info->info->validate_trigger) {
>> +             ret =3D dev_info->info->validate_trigger(dev_info, trig)=
;
>> +             if (ret)
>> +                     return ret;
>> +     }
>> +
>> +     if (trig&&  trig->validate_device) {
>> +             ret =3D trig->validate_device(trig, dev_info);
>> +             if (ret)
>> +                     return ret;
>> +     }
>> +
>> +     dev_info->trig =3D trig;
>> +
>>        if (oldtrig&&  dev_info->trig !=3D oldtrig)
>>                iio_put_trigger(oldtrig);
>>        if (dev_info->trig)
>> diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigg=
er.h
>> index f329fe1..e0b58ed 100644
>> --- a/drivers/staging/iio/trigger.h
>> +++ b/drivers/staging/iio/trigger.h
>> @@ -29,6 +29,8 @@ struct iio_subirq {
>>    * @set_trigger_state:       [DRIVER] switch on/off the trigger on d=
emand
>>    * @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 trigg=
er.
>>    * @subirqs:         [INTERN] information about the 'child' irqs.
>> @@ -48,6 +50,8 @@ struct iio_trigger {
>>
>>        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;
>> @@ -57,6 +61,30 @@ struct iio_trigger {
>>        struct mutex                    pool_lock;
>>   };
>>
>> +/**
>> + * struct iio_poll_func - poll function pair
>> + *
>> + * @private_data:            data specific to device (passed into pol=
l func)
>> + * @h:                               the function that is actually ru=
n on trigger
>> + * @thread:                  threaded interrupt part
>> + * @type:                    the type of interrupt (basically if ones=
hot)
>> + * @name:                    name used to identify the trigger consum=
er.
>> + * @irq:                     the corresponding irq as allocated from =
the
>> + *                           trigger pool
>> + * @timestamp:                       some devices need a timestamp gr=
abbed as soon
>> + *                           as possible after the trigger - hence ha=
ndler
>> + *                           passes it via here.
>> + **/
>> +struct iio_poll_func {
>> +     void                            *private_data;
>> +     irqreturn_t (*h)(int irq, void *p);
>> +     irqreturn_t (*thread)(int irq, void *p);
>> +     int type;
>> +     char *name;
>> +     int irq;
>> +     s64 timestamp;
>> +};
>> +
>>   static inline struct iio_trigger *to_iio_trigger(struct device *d)
>>   {
>>        return container_of(d, struct iio_trigger, dev);
>> @@ -136,30 +164,6 @@ static inline void iio_trigger_put_irq(struct iio=
_trigger *trig, int irq)
>>        mutex_unlock(&trig->pool_lock);
>>   };
>>
>> -/**
>> - * struct iio_poll_func - poll function pair
>> - *
>> - * @private_data:            data specific to device (passed into pol=
l func)
>> - * @h:                               the function that is actually ru=
n on trigger
>> - * @thread:                  threaded interrupt part
>> - * @type:                    the type of interrupt (basically if ones=
hot)
>> - * @name:                    name used to identify the trigger consum=
er.
>> - * @irq:                     the corresponding irq as allocated from =
the
>> - *                           trigger pool
>> - * @timestamp:                       some devices need a timestamp gr=
abbed as soon
>> - *                           as possible after the trigger - hence ha=
ndler
>> - *                           passes it via here.
>> - **/
>> -struct iio_poll_func {
>> -     void                            *private_data;
>> -     irqreturn_t (*h)(int irq, void *p);
>> -     irqreturn_t (*thread)(int irq, void *p);
>> -     int type;
>> -     char *name;
>> -     int irq;
>> -     s64 timestamp;
>> -};
>> -
>>   struct iio_poll_func
>>   *iio_alloc_pollfunc(irqreturn_t (*h)(int irq, void *p),
>>                    irqreturn_t (*thread)(int irq, void *p),
>


--=20
Greetings,
Michael

--
Analog Devices GmbH      Wilhelm-Wagenfeld-Str. 6      80807 Muenchen
Sitz der Gesellschaft: Muenchen; Registergericht: Muenchen HRB 40368;
Geschaeftsfuehrer:Dr.Carsten Suckrow, Thomas Wessel, William A. Martin,
Margaret Seif

  reply	other threads:[~2011-06-07  9:51 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-06 19:52 [PATCH] iio: trigger: Add filter callbac michael.hennerich
2011-06-07  8:48 ` Jonathan Cameron
2011-06-07  9:51   ` Michael Hennerich [this message]
2011-06-07 16:25     ` Jonathan Cameron
2011-06-08  7:41       ` Michael Hennerich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4DEDF4BB.3040900@analog.com \
    --to=michael.hennerich@analog.com \
    --cc=Drivers@analog.com \
    --cc=device-drivers-devel@blackfin.uclinux.org \
    --cc=jic23@cam.ac.uk \
    --cc=linux-iio@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.