mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
rtc: isl1208: enable interrupt after context preparation
The interrupt handler got enabled very early. If the interrupt cause is triggering immediately before the context is fully prepared. This can lead to undefined behaviour. Therefor we move the interrupt enable code to the end of the probe function. Signed-off-by: Michael Grzeschik <[email protected]> Signed-off-by: Denis Osterland <[email protected]> Signed-off-by: Alexandre Belloni <[email protected]>
This commit is contained in:
parent
72dd71f0da
commit
9d327c2d92
1 changed files with 17 additions and 17 deletions
|
|
@ -635,23 +635,6 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
|||
if (isl1208_i2c_validate_client(client) < 0)
|
||||
return -ENODEV;
|
||||
|
||||
if (client->irq > 0) {
|
||||
rc = devm_request_threaded_irq(&client->dev, client->irq, NULL,
|
||||
isl1208_rtc_interrupt,
|
||||
IRQF_SHARED | IRQF_ONESHOT,
|
||||
isl1208_driver.driver.name,
|
||||
client);
|
||||
if (!rc) {
|
||||
device_init_wakeup(&client->dev, 1);
|
||||
enable_irq_wake(client->irq);
|
||||
} else {
|
||||
dev_err(&client->dev,
|
||||
"Unable to request irq %d, no alarm support\n",
|
||||
client->irq);
|
||||
client->irq = 0;
|
||||
}
|
||||
}
|
||||
|
||||
rtc = devm_rtc_device_register(&client->dev, isl1208_driver.driver.name,
|
||||
&isl1208_rtc_ops,
|
||||
THIS_MODULE);
|
||||
|
|
@ -674,6 +657,23 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
|||
if (rc)
|
||||
return rc;
|
||||
|
||||
if (client->irq > 0) {
|
||||
rc = devm_request_threaded_irq(&client->dev, client->irq, NULL,
|
||||
isl1208_rtc_interrupt,
|
||||
IRQF_SHARED | IRQF_ONESHOT,
|
||||
isl1208_driver.driver.name,
|
||||
client);
|
||||
if (!rc) {
|
||||
device_init_wakeup(&client->dev, 1);
|
||||
enable_irq_wake(client->irq);
|
||||
} else {
|
||||
dev_err(&client->dev,
|
||||
"Unable to request irq %d, no alarm support\n",
|
||||
client->irq);
|
||||
client->irq = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue