iio: Replace IRQF_ONESHOT with IRQF_NO_THREAD
Passing IRQF_ONESHOT ensures that the interrupt source is masked until the secondary (threaded) handler is done. If only a primary handler is used then the flag makes no sense because the interrupt can not fire (again) while its handler is running. The flag also disallows force-threading of the primary handler and the irq-core will warn about this. The intention here was probably not allowing forced-threading for handlers such as iio_trigger_generic_data_rdy_poll() will intends to invoke hard-interrupt handlers. Replace IRQF_ONESHOT with IRQF_NO_THREAD. Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com> Reviewed-by: Marcus Folkesson <marcus.folkesson@gmail.com> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
04d390af97
commit
ac9fabd578
|
|
@ -768,9 +768,8 @@ static int adxl355_probe_trigger(struct iio_dev *indio_dev, int irq)
|
|||
data->dready_trig->ops = &adxl355_trigger_ops;
|
||||
iio_trigger_set_drvdata(data->dready_trig, indio_dev);
|
||||
|
||||
ret = devm_request_irq(data->dev, irq,
|
||||
&iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_ONESHOT, "adxl355_irq", data->dready_trig);
|
||||
ret = devm_request_irq(data->dev, irq, &iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_NO_THREAD, "adxl355_irq", data->dready_trig);
|
||||
if (ret)
|
||||
return dev_err_probe(data->dev, ret, "request irq %d failed\n",
|
||||
irq);
|
||||
|
|
|
|||
|
|
@ -1247,11 +1247,10 @@ int adxl372_probe(struct device *dev, struct regmap *regmap,
|
|||
|
||||
indio_dev->trig = iio_trigger_get(st->dready_trig);
|
||||
|
||||
ret = devm_request_threaded_irq(dev, st->irq,
|
||||
iio_trigger_generic_data_rdy_poll,
|
||||
NULL,
|
||||
IRQF_TRIGGER_RISING | IRQF_ONESHOT,
|
||||
indio_dev->name, st->dready_trig);
|
||||
ret = devm_request_irq(dev, st->irq,
|
||||
iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_TRIGGER_RISING | IRQF_NO_THREAD,
|
||||
indio_dev->name, st->dready_trig);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -486,13 +486,10 @@ static int mxc4005_probe(struct i2c_client *client)
|
|||
if (!data->dready_trig)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = devm_request_threaded_irq(&client->dev, client->irq,
|
||||
iio_trigger_generic_data_rdy_poll,
|
||||
NULL,
|
||||
IRQF_TRIGGER_FALLING |
|
||||
IRQF_ONESHOT,
|
||||
"mxc4005_event",
|
||||
data->dready_trig);
|
||||
ret = devm_request_irq(&client->dev, client->irq,
|
||||
iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_TRIGGER_FALLING | IRQF_NO_THREAD,
|
||||
"mxc4005_event", data->dready_trig);
|
||||
if (ret) {
|
||||
dev_err(&client->dev,
|
||||
"failed to init threaded irq\n");
|
||||
|
|
|
|||
|
|
@ -428,13 +428,10 @@ static int stk8ba50_probe(struct i2c_client *client)
|
|||
}
|
||||
|
||||
if (client->irq > 0) {
|
||||
ret = devm_request_threaded_irq(&client->dev, client->irq,
|
||||
stk8ba50_data_rdy_trig_poll,
|
||||
NULL,
|
||||
IRQF_TRIGGER_RISING |
|
||||
IRQF_ONESHOT,
|
||||
"stk8ba50_event",
|
||||
indio_dev);
|
||||
ret = devm_request_irq(&client->dev, client->irq,
|
||||
stk8ba50_data_rdy_trig_poll,
|
||||
IRQF_TRIGGER_RISING | IRQF_NO_THREAD,
|
||||
"stk8ba50_event", indio_dev);
|
||||
if (ret < 0) {
|
||||
dev_err(&client->dev, "request irq %d failed\n",
|
||||
client->irq);
|
||||
|
|
|
|||
|
|
@ -2973,7 +2973,7 @@ static int ad4170_probe(struct spi_device *spi)
|
|||
|
||||
if (spi->irq) {
|
||||
ret = devm_request_irq(dev, spi->irq, &ad4170_irq_handler,
|
||||
IRQF_ONESHOT, indio_dev->name, indio_dev);
|
||||
IRQF_NO_THREAD, indio_dev->name, indio_dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
|
|||
|
|
@ -1711,9 +1711,8 @@ static int ad7768_probe(struct spi_device *spi)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = devm_request_irq(&spi->dev, spi->irq,
|
||||
&ad7768_interrupt,
|
||||
IRQF_TRIGGER_RISING | IRQF_ONESHOT,
|
||||
ret = devm_request_irq(&spi->dev, spi->irq, &ad7768_interrupt,
|
||||
IRQF_TRIGGER_RISING | IRQF_NO_THREAD,
|
||||
indio_dev->name, indio_dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -840,7 +840,7 @@ static int ad7779_setup_without_backend(struct ad7779_state *st, struct iio_dev
|
|||
iio_trigger_set_drvdata(st->trig, st);
|
||||
|
||||
ret = devm_request_irq(dev, st->spi->irq, iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_ONESHOT | IRQF_NO_AUTOEN, indio_dev->name,
|
||||
IRQF_NO_THREAD | IRQF_NO_AUTOEN, indio_dev->name,
|
||||
st->trig);
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "request IRQ %d failed\n",
|
||||
|
|
|
|||
|
|
@ -815,7 +815,7 @@ static int mcp3911_probe(struct spi_device *spi)
|
|||
* don't enable the interrupt to avoid extra load on the system.
|
||||
*/
|
||||
ret = devm_request_irq(dev, spi->irq, &iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_NO_AUTOEN | IRQF_ONESHOT,
|
||||
IRQF_NO_AUTOEN | IRQF_NO_THREAD,
|
||||
indio_dev->name, adc->trig);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -827,7 +827,7 @@ static int ads131e08_probe(struct spi_device *spi)
|
|||
if (spi->irq) {
|
||||
ret = devm_request_irq(&spi->dev, spi->irq,
|
||||
ads131e08_interrupt,
|
||||
IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
|
||||
IRQF_TRIGGER_FALLING | IRQF_NO_THREAD,
|
||||
spi->dev.driver->name, indio_dev);
|
||||
if (ret)
|
||||
return dev_err_probe(&spi->dev, ret,
|
||||
|
|
|
|||
|
|
@ -316,12 +316,9 @@ static int ens160_setup_trigger(struct iio_dev *indio_dev, int irq)
|
|||
|
||||
indio_dev->trig = iio_trigger_get(trig);
|
||||
|
||||
ret = devm_request_threaded_irq(dev, irq,
|
||||
iio_trigger_generic_data_rdy_poll,
|
||||
NULL,
|
||||
IRQF_ONESHOT,
|
||||
indio_dev->name,
|
||||
indio_dev->trig);
|
||||
ret = devm_request_irq(dev, irq, iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_NO_THREAD, indio_dev->name,
|
||||
indio_dev->trig);
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "failed to request irq\n");
|
||||
|
||||
|
|
|
|||
|
|
@ -597,7 +597,7 @@ static int adxrs290_probe_trigger(struct iio_dev *indio_dev)
|
|||
|
||||
ret = devm_request_irq(&st->spi->dev, st->spi->irq,
|
||||
&iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_ONESHOT, "adxrs290_irq", st->dready_trig);
|
||||
IRQF_NO_THREAD, "adxrs290_irq", st->dready_trig);
|
||||
if (ret < 0)
|
||||
return dev_err_probe(&st->spi->dev, ret,
|
||||
"request irq %d failed\n", st->spi->irq);
|
||||
|
|
|
|||
|
|
@ -540,11 +540,10 @@ static int afe4403_probe(struct spi_device *spi)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(dev, afe->irq,
|
||||
iio_trigger_generic_data_rdy_poll,
|
||||
NULL, IRQF_ONESHOT,
|
||||
AFE4403_DRIVER_NAME,
|
||||
afe->trig);
|
||||
ret = devm_request_irq(dev, afe->irq,
|
||||
iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_NO_THREAD, AFE4403_DRIVER_NAME,
|
||||
afe->trig);
|
||||
if (ret) {
|
||||
dev_err(dev, "Unable to request IRQ\n");
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -547,11 +547,10 @@ static int afe4404_probe(struct i2c_client *client)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(dev, afe->irq,
|
||||
iio_trigger_generic_data_rdy_poll,
|
||||
NULL, IRQF_ONESHOT,
|
||||
AFE4404_DRIVER_NAME,
|
||||
afe->trig);
|
||||
ret = devm_request_irq(dev, afe->irq,
|
||||
iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_NO_THREAD, AFE4404_DRIVER_NAME,
|
||||
afe->trig);
|
||||
if (ret) {
|
||||
dev_err(dev, "Unable to request IRQ\n");
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -906,12 +906,9 @@ int bmc150_magn_probe(struct device *dev, struct regmap *regmap,
|
|||
goto err_poweroff;
|
||||
}
|
||||
|
||||
ret = request_threaded_irq(irq,
|
||||
iio_trigger_generic_data_rdy_poll,
|
||||
NULL,
|
||||
IRQF_TRIGGER_RISING | IRQF_ONESHOT,
|
||||
"bmc150_magn_event",
|
||||
data->dready_trig);
|
||||
ret = request_irq(irq, iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_TRIGGER_RISING | IRQF_NO_THREAD,
|
||||
"bmc150_magn_event", data->dready_trig);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "request irq %d failed\n", irq);
|
||||
goto err_trigger_unregister;
|
||||
|
|
|
|||
|
|
@ -306,10 +306,9 @@ static int dlh_probe(struct i2c_client *client)
|
|||
indio_dev->num_channels = ARRAY_SIZE(dlh_channels);
|
||||
|
||||
if (client->irq > 0) {
|
||||
ret = devm_request_threaded_irq(&client->dev, client->irq,
|
||||
dlh_interrupt, NULL,
|
||||
IRQF_TRIGGER_RISING | IRQF_ONESHOT,
|
||||
st->info->name, indio_dev);
|
||||
ret = devm_request_irq(&client->dev, client->irq, dlh_interrupt,
|
||||
IRQF_TRIGGER_RISING | IRQF_NO_THREAD,
|
||||
st->info->name, indio_dev);
|
||||
if (ret) {
|
||||
dev_err(&client->dev, "failed to allocate threaded irq");
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -356,12 +356,10 @@ static int tmp006_probe(struct i2c_client *client)
|
|||
|
||||
indio_dev->trig = iio_trigger_get(data->drdy_trig);
|
||||
|
||||
ret = devm_request_threaded_irq(&client->dev, client->irq,
|
||||
iio_trigger_generic_data_rdy_poll,
|
||||
NULL,
|
||||
IRQF_ONESHOT,
|
||||
"tmp006_irq",
|
||||
data->drdy_trig);
|
||||
ret = devm_request_irq(&client->dev, client->irq,
|
||||
iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_NO_THREAD, "tmp006_irq",
|
||||
data->drdy_trig);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue