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

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

 



On 09/04/15 14:36, Vlad Dogaru wrote:
> 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.
fair enough!
> 
>>>>
>>>>  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