Skip to content

Commit

Permalink
iio: chemical: atlas-sensor: allow probe without interrupt line
Browse files Browse the repository at this point in the history
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.

Signed-off-by: Matt Ranostay <[email protected]>
Signed-off-by: Jonathan Cameron <[email protected]>
  • Loading branch information
mranostay authored and jic23 committed Mar 8, 2020
1 parent 74a40e1 commit d4578dc
Showing 1 changed file with 18 additions and 15 deletions.
33 changes: 18 additions & 15 deletions drivers/iio/chemical/atlas-sensor.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ struct atlas_data {
struct atlas_device *chip;
struct regmap *regmap;
struct irq_work work;
unsigned int interrupt_enabled;

__be32 buffer[6]; /* 96-bit data + 32-bit pad + 64-bit timestamp */
};
Expand Down Expand Up @@ -304,6 +305,9 @@ static int atlas_set_powermode(struct atlas_data *data, int on)

static int atlas_set_interrupt(struct atlas_data *data, bool state)
{
if (!data->interrupt_enabled)
return 0;

return regmap_update_bits(data->regmap, ATLAS_REG_INT_CONTROL,
ATLAS_REG_INT_CONTROL_EN,
state ? ATLAS_REG_INT_CONTROL_EN : 0);
Expand Down Expand Up @@ -572,11 +576,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;
Expand All @@ -596,16 +595,20 @@ 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);
else
data->interrupt_enabled = 1;
}

ret = atlas_set_powermode(data, 1);
Expand Down

0 comments on commit d4578dc

Please sign in to comment.