Re: [PATCH] iio: accel: kxcjk1013: allow using an external trigger

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Apr 09, 2015 at 02:21:03PM +0100, Jonathan Cameron wrote:
> On 06/04/15 08:24, Daniel Baluta wrote:
> > On Fri, Apr 3, 2015 at 3:03 PM, Vlad Dogaru <vlad.dogaru@xxxxxxxxx> wrote:
> >> In its present state, the driver mandates that its buffer only be
> >> triggered by one of the device's own triggers (data ready or any
> >> motion).  This is not always desirable, for example because the
> >> interrupt pins may not be wired in.
> >>
> >> Patch the driver to be able to accept using an external trigger, such as
> >> one based on hrtimer.  When using such a trigger, we need to ensure that
> >> the device is powered on when the buffer is started.  We do that by
> >> setting setup_ops for the buffer.
> >>
> >> Signed-off-by: Vlad Dogaru <vlad.dogaru@xxxxxxxxx>
> > 
> > Reviewed-by: Daniel Baluta <daniel.baluta@xxxxxxxxx>
> Applied to the togreg branch of iio.git.  Initially pushed out as testing
> for the autobuilders to play with it.
> 
> Thanks,
> 
> Jonathan
> > 
> >> ---
> >>
> >> I used the hrtimer-based trigger patches that Daniel sent earlier this week to
> >> test these changes.
> Feel free to add a tested-by to that patch then if you haven't already!

I'm reluctant to do that since Daniel has posted a v3 for the hrtimer
patchset and I've been using the v2 ones.  Sure, the core functionality
is the same, but the userspace interface differs.

> >>
> >>  drivers/iio/accel/kxcjk-1013.c | 38 +++++++++++++++++++++++---------------
> >>  1 file changed, 23 insertions(+), 15 deletions(-)
> >>
> >> diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c
> >> index a98b5d2..7ae1bdb 100644
> >> --- a/drivers/iio/accel/kxcjk-1013.c
> >> +++ b/drivers/iio/accel/kxcjk-1013.c
> >> @@ -875,15 +875,18 @@ static int kxcjk1013_write_event_config(struct iio_dev *indio_dev,
> >>         return 0;
> >>  }
> >>
> >> -static int kxcjk1013_validate_trigger(struct iio_dev *indio_dev,
> >> -                                     struct iio_trigger *trig)
> >> +static int kxcjk1013_buffer_preenable(struct iio_dev *indio_dev)
> >>  {
> >>         struct kxcjk1013_data *data = iio_priv(indio_dev);
> >>
> >> -       if (data->dready_trig != trig && data->motion_trig != trig)
> >> -               return -EINVAL;
> >> +       return kxcjk1013_set_power_state(data, true);
> >> +}
> >>
> >> -       return 0;
> >> +static int kxcjk1013_buffer_postdisable(struct iio_dev *indio_dev)
> >> +{
> >> +       struct kxcjk1013_data *data = iio_priv(indio_dev);
> >> +
> >> +       return kxcjk1013_set_power_state(data, false);
> >>  }
> >>
> >>  static IIO_CONST_ATTR_SAMP_FREQ_AVAIL(
> >> @@ -935,6 +938,13 @@ static const struct iio_chan_spec kxcjk1013_channels[] = {
> >>         IIO_CHAN_SOFT_TIMESTAMP(3),
> >>  };
> >>
> >> +static const struct iio_buffer_setup_ops kxcjk1013_buffer_setup_ops = {
> >> +       .preenable              = kxcjk1013_buffer_preenable,
> >> +       .postenable             = iio_triggered_buffer_postenable,
> >> +       .postdisable            = kxcjk1013_buffer_postdisable,
> >> +       .predisable             = iio_triggered_buffer_predisable,
> >> +};
> >> +
> >>  static const struct iio_info kxcjk1013_info = {
> >>         .attrs                  = &kxcjk1013_attrs_group,
> >>         .read_raw               = kxcjk1013_read_raw,
> >> @@ -943,7 +953,6 @@ static const struct iio_info kxcjk1013_info = {
> >>         .write_event_value      = kxcjk1013_write_event,
> >>         .write_event_config     = kxcjk1013_write_event_config,
> >>         .read_event_config      = kxcjk1013_read_event_config,
> >> -       .validate_trigger       = kxcjk1013_validate_trigger,
> >>         .driver_module          = THIS_MODULE,
> >>  };
> >>
> >> @@ -1276,16 +1285,15 @@ static int kxcjk1013_probe(struct i2c_client *client,
> >>                         data->motion_trig = NULL;
> >>                         goto err_trigger_unregister;Reviewed-by: Daniel Baluta <daniel.baluta@xxxxxxxxx>
> >>                 }
> >> +       }
> >>
> >> -               ret = iio_triggered_buffer_setup(indio_dev,
> >> -                                               &iio_pollfunc_store_time,
> >> -                                               kxcjk1013_trigger_handler,
> >> -                                               NULL);
> >> -               if (ret < 0) {
> >> -                       dev_err(&client->dev,
> >> -                                       "iio triggered buffer setup failed\n");
> >> -                       goto err_trigger_unregister;
> >> -               }
> >> +       ret = iio_triggered_buffer_setup(indio_dev,
> >> +                                        &iio_pollfunc_store_time,
> >> +                                        kxcjk1013_trigger_handler,
> >> +                                        &kxcjk1013_buffer_setup_ops);
> >> +       if (ret < 0) {
> >> +               dev_err(&client->dev, "iio triggered buffer setup failed\n");
> >> +               goto err_trigger_unregister;
> >>         }
> >>
> >>         ret = iio_device_register(indio_dev);
> >> --
> >> 1.9.1
> >>
> >> --
> >> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> >> the body of a message to majordomo@xxxxxxxxxxxxxxx
> >> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > 
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux