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

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

 



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!
>>
>>  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