Re: [PATCH v4 1/3] iio: chemical: atlas-sensor: allow probe without interrupt line

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

 




> On Feb 8, 2020, at 18:12, Matt Ranostay <matt.ranostay@xxxxxxxxxxxx> wrote:
> 
> 
> 
>>> On Feb 8, 2020, at 08:39, Jonathan Cameron <jic23@xxxxxxxxxx> wrote:
>>> 
>>> On Wed,  5 Feb 2020 22:13:30 -0800
>>> Matt Ranostay <matt.ranostay@xxxxxxxxxxxx> wrote:
>>> 
>>> Sensors don't actually need a interrupt line to give valid readings,
>>> and can triggered with CONFIG_IIO_HRTIMER_TRIGGER as well. Remove
>>> the required check for interrupt, and continue along in the probe
>>> function.
>> 
>> Basic aim is good, but if you don't have an interrupt doesn't make
>> sense to register the trigger either.
>> 
>> The interrupt enable / disable is also tied up with the buffer whereas
>> it should probably be done via the trigger enable callback or am I
>> missing something?
> 
> It was for allowing sysfs and hrtimer triggers. But just remembered most these sensors have a low refresh rate. I can go either way on having it or not. Thoughts?
> 
> - Matt
> 
 
Also issue one issue was fixed in v5 related to this.

- Matt
> 
>> 
>> Jonathan
>> 
>>> 
>>> Signed-off-by: Matt Ranostay <matt.ranostay@xxxxxxxxxxxx>
>>> ---
>>> drivers/iio/chemical/atlas-sensor.c | 27 ++++++++++++---------------
>>> 1 file changed, 12 insertions(+), 15 deletions(-)
>>> 
>>> diff --git a/drivers/iio/chemical/atlas-sensor.c b/drivers/iio/chemical/atlas-sensor.c
>>> index 2f0a6fed2589..2e34c82cb65d 100644
>>> --- a/drivers/iio/chemical/atlas-sensor.c
>>> +++ b/drivers/iio/chemical/atlas-sensor.c
>>> @@ -572,11 +572,6 @@ static int atlas_probe(struct i2c_client *client,
>>>   if (ret)
>>>       return ret;
>>> 
>>> -    if (client->irq <= 0) {
>>> -        dev_err(&client->dev, "no valid irq defined\n");
>>> -        return -EINVAL;
>>> -    }
>>> -
>>>   ret = chip->calibration(data);
>>>   if (ret)
>>>       return ret;
>>> @@ -596,16 +591,18 @@ static int atlas_probe(struct i2c_client *client,
>>> 
>>>   init_irq_work(&data->work, atlas_work_handler);
>>> 
>>> -    /* interrupt pin toggles on new conversion */
>>> -    ret = devm_request_threaded_irq(&client->dev, client->irq,
>>> -                    NULL, atlas_interrupt_handler,
>>> -                    IRQF_TRIGGER_RISING |
>>> -                    IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
>>> -                    "atlas_irq",
>>> -                    indio_dev);
>>> -    if (ret) {
>>> -        dev_err(&client->dev, "request irq (%d) failed\n", client->irq);
>>> -        goto unregister_buffer;
>>> +    if (client->irq <= 0) {
>>> +        /* interrupt pin toggles on new conversion */
>>> +        ret = devm_request_threaded_irq(&client->dev, client->irq,
>>> +                NULL, atlas_interrupt_handler,
>>> +                IRQF_TRIGGER_RISING |
>>> +                IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
>>> +                "atlas_irq",
>>> +                indio_dev);
>>> +
>>> +        if (ret)
>>> +            dev_warn(&client->dev,
>>> +                "request irq (%d) failed\n", client->irq);
>>>   }
>>> 
>>>   ret = atlas_set_powermode(data, 1);
>> 




[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