Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: move to use request_irq by IRQF_NO_AUTOEN flag

disable_irq() after request_irq() still has a time gap in which
interrupts can come. request_irq() with IRQF_NO_AUTOEN flag will
disable IRQ auto-enable because of requesting.

On the other hand, request_irq() after setting IRQ_NOAUTOEN as
below
irq_set_status_flags(irq, IRQ_NOAUTOEN);
request_irq(dev, irq...);
can also be replaced by request_irq() with IRQF_NO_AUTOEN flag.

Signed-off-by: Barry Song <song.bao.hua@hisilicon.com>
Link: https://lore.kernel.org/r/20210302224916.13980-3-song.bao.hua@hisilicon.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

authored by

Barry Song and committed by
Dmitry Torokhov
bcd9730a 73cdf82a

+18 -28
+1 -2
drivers/input/keyboard/tca6416-keypad.c
··· 274 274 error = request_threaded_irq(chip->irqnum, NULL, 275 275 tca6416_keys_isr, 276 276 IRQF_TRIGGER_FALLING | 277 - IRQF_ONESHOT, 277 + IRQF_ONESHOT | IRQF_NO_AUTOEN, 278 278 "tca6416-keypad", chip); 279 279 if (error) { 280 280 dev_dbg(&client->dev, ··· 282 282 chip->irqnum, error); 283 283 goto fail1; 284 284 } 285 - disable_irq(chip->irqnum); 286 285 } 287 286 288 287 error = input_register_device(input);
+2 -3
drivers/input/keyboard/tegra-kbc.c
··· 694 694 input_set_drvdata(kbc->idev, kbc); 695 695 696 696 err = devm_request_irq(&pdev->dev, kbc->irq, tegra_kbc_isr, 697 - IRQF_TRIGGER_HIGH, pdev->name, kbc); 697 + IRQF_TRIGGER_HIGH | IRQF_NO_AUTOEN, 698 + pdev->name, kbc); 698 699 if (err) { 699 700 dev_err(&pdev->dev, "failed to request keyboard IRQ\n"); 700 701 return err; 701 702 } 702 - 703 - disable_irq(kbc->irq); 704 703 705 704 err = input_register_device(kbc->idev); 706 705 if (err) {
+1 -4
drivers/input/touchscreen/ar1021_i2c.c
··· 125 125 126 126 error = devm_request_threaded_irq(&client->dev, client->irq, 127 127 NULL, ar1021_i2c_irq, 128 - IRQF_ONESHOT, 128 + IRQF_ONESHOT | IRQF_NO_AUTOEN, 129 129 "ar1021_i2c", ar1021); 130 130 if (error) { 131 131 dev_err(&client->dev, 132 132 "Failed to enable IRQ, error: %d\n", error); 133 133 return error; 134 134 } 135 - 136 - /* Disable the IRQ, we'll enable it in ar1021_i2c_open() */ 137 - disable_irq(client->irq); 138 135 139 136 error = input_register_device(ar1021->input); 140 137 if (error) {
+2 -3
drivers/input/touchscreen/atmel_mxt_ts.c
··· 3215 3215 } 3216 3216 3217 3217 error = devm_request_threaded_irq(&client->dev, client->irq, 3218 - NULL, mxt_interrupt, IRQF_ONESHOT, 3218 + NULL, mxt_interrupt, 3219 + IRQF_ONESHOT | IRQF_NO_AUTOEN, 3219 3220 client->name, data); 3220 3221 if (error) { 3221 3222 dev_err(&client->dev, "Failed to register interrupt\n"); 3222 3223 return error; 3223 3224 } 3224 - 3225 - disable_irq(client->irq); 3226 3225 3227 3226 error = regulator_bulk_enable(ARRAY_SIZE(data->regulators), 3228 3227 data->regulators);
+2 -2
drivers/input/touchscreen/bu21029_ts.c
··· 401 401 402 402 input_set_drvdata(in_dev, bu21029); 403 403 404 - irq_set_status_flags(client->irq, IRQ_NOAUTOEN); 405 404 error = devm_request_threaded_irq(&client->dev, client->irq, 406 405 NULL, bu21029_touch_soft_irq, 407 - IRQF_ONESHOT, DRIVER_NAME, bu21029); 406 + IRQF_ONESHOT | IRQF_NO_AUTOEN, 407 + DRIVER_NAME, bu21029); 408 408 if (error) { 409 409 dev_err(&client->dev, 410 410 "unable to request touch irq: %d\n", error);
+2 -3
drivers/input/touchscreen/cyttsp_core.c
··· 655 655 } 656 656 657 657 error = devm_request_threaded_irq(dev, ts->irq, NULL, cyttsp_irq, 658 - IRQF_TRIGGER_FALLING | IRQF_ONESHOT, 658 + IRQF_TRIGGER_FALLING | IRQF_ONESHOT | 659 + IRQF_NO_AUTOEN, 659 660 "cyttsp", ts); 660 661 if (error) { 661 662 dev_err(ts->dev, "failed to request IRQ %d, err: %d\n", 662 663 ts->irq, error); 663 664 return ERR_PTR(error); 664 665 } 665 - 666 - disable_irq(ts->irq); 667 666 668 667 cyttsp_hard_reset(ts); 669 668
+2 -3
drivers/input/touchscreen/melfas_mip4.c
··· 1502 1502 1503 1503 error = devm_request_threaded_irq(&client->dev, client->irq, 1504 1504 NULL, mip4_interrupt, 1505 - IRQF_ONESHOT, MIP4_DEVICE_NAME, ts); 1505 + IRQF_ONESHOT | IRQF_NO_AUTOEN, 1506 + MIP4_DEVICE_NAME, ts); 1506 1507 if (error) { 1507 1508 dev_err(&client->dev, 1508 1509 "Failed to request interrupt %d: %d\n", 1509 1510 client->irq, error); 1510 1511 return error; 1511 1512 } 1512 - 1513 - disable_irq(client->irq); 1514 1513 1515 1514 error = input_register_device(input); 1516 1515 if (error) {
+2 -2
drivers/input/touchscreen/mms114.c
··· 530 530 } 531 531 532 532 error = devm_request_threaded_irq(&client->dev, client->irq, 533 - NULL, mms114_interrupt, IRQF_ONESHOT, 533 + NULL, mms114_interrupt, 534 + IRQF_ONESHOT | IRQF_NO_AUTOEN, 534 535 dev_name(&client->dev), data); 535 536 if (error) { 536 537 dev_err(&client->dev, "Failed to register interrupt\n"); 537 538 return error; 538 539 } 539 - disable_irq(client->irq); 540 540 541 541 error = input_register_device(data->input_dev); 542 542 if (error) {
+1 -2
drivers/input/touchscreen/stmfts.c
··· 691 691 * interrupts. To be on the safe side it's better to not enable 692 692 * the interrupts during their request. 693 693 */ 694 - irq_set_status_flags(client->irq, IRQ_NOAUTOEN); 695 694 err = devm_request_threaded_irq(&client->dev, client->irq, 696 695 NULL, stmfts_irq_handler, 697 - IRQF_ONESHOT, 696 + IRQF_ONESHOT | IRQF_NO_AUTOEN, 698 697 "stmfts_irq", sdata); 699 698 if (err) 700 699 return err;
+1 -2
drivers/input/touchscreen/wm831x-ts.c
··· 317 317 318 318 error = request_threaded_irq(wm831x_ts->data_irq, 319 319 NULL, wm831x_ts_data_irq, 320 - irqf | IRQF_ONESHOT, 320 + irqf | IRQF_ONESHOT | IRQF_NO_AUTOEN, 321 321 "Touchscreen data", wm831x_ts); 322 322 if (error) { 323 323 dev_err(&pdev->dev, "Failed to request data IRQ %d: %d\n", 324 324 wm831x_ts->data_irq, error); 325 325 goto err_alloc; 326 326 } 327 - disable_irq(wm831x_ts->data_irq); 328 327 329 328 if (pdata && pdata->pd_irqf) 330 329 irqf = pdata->pd_irqf;
+2 -2
drivers/input/touchscreen/zinitix.c
··· 513 513 return -EINVAL; 514 514 } 515 515 516 - irq_set_status_flags(client->irq, IRQ_NOAUTOEN); 517 516 error = devm_request_threaded_irq(&client->dev, client->irq, 518 517 NULL, zinitix_ts_irq_handler, 519 - IRQF_ONESHOT, client->name, bt541); 518 + IRQF_ONESHOT | IRQF_NO_AUTOEN, 519 + client->name, bt541); 520 520 if (error) { 521 521 dev_err(&client->dev, "Failed to request IRQ: %d\n", error); 522 522 return error;