- ret = devm_request_threaded_irq(&pdev->dev, button->irq, NULL, button_handle_irq,
- IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
- dev_name(&pdev->dev), bdata);
- if (ret < 0)
- dev_err(&pdev->dev, "failed to request irq:%d for gpio:%d\n", button->irq, button->gpio);
- else
- dev_dbg(&pdev->dev, "gpio:%d has irq:%d\n", button->gpio, button->irq);
+ INIT_DELAYED_WORK(&bdata->work, gpio_keys_irq_work_func);
+
+ ret = devm_request_threaded_irq(&pdev->dev,
+ bdata->irq, NULL, button_handle_irq,
+ irqflags, dev_name(&pdev->dev), bdata);
+
+ if (ret < 0) {
+ bdata->irq = 0;
+ dev_err(&pdev->dev, "failed to request irq:%d for gpio:%d\n",
+ bdata->irq, button->gpio);
+ continue;
+ } else {
+ dev_dbg(&pdev->dev, "gpio:%d has irq:%d\n",
+ button->gpio, bdata->irq);
+ }