> 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); >>