rtc: ds3232: fix call trace when rtc->ops_lock is used as NULL

The rtc->ops_lock would be accessed in ds3232_irq() without being
initialized as rtc_device_register() is called too late.

So move devm_rtc_device_register() just before registering irq handler
to initialize rtc->ops_lock earlier.

Signed-off-by: Gong Qianyu <Qianyu.Gong@nxp.com>
Reviewed-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
This commit is contained in:
Qianyu Gong 2016-04-21 14:55:40 +08:00 committed by Alexandre Belloni
parent a350259da4
commit b4b77f3c28

View File

@ -369,6 +369,11 @@ static int ds3232_probe(struct device *dev, struct regmap *regmap, int irq,
if (ret) if (ret)
return ret; return ret;
ds3232->rtc = devm_rtc_device_register(dev, name, &ds3232_rtc_ops,
THIS_MODULE);
if (IS_ERR(ds3232->rtc))
return PTR_ERR(ds3232->rtc);
if (ds3232->irq > 0) { if (ds3232->irq > 0) {
ret = devm_request_threaded_irq(dev, ds3232->irq, NULL, ret = devm_request_threaded_irq(dev, ds3232->irq, NULL,
ds3232_irq, ds3232_irq,
@ -380,10 +385,8 @@ static int ds3232_probe(struct device *dev, struct regmap *regmap, int irq,
} else } else
device_init_wakeup(dev, 1); device_init_wakeup(dev, 1);
} }
ds3232->rtc = devm_rtc_device_register(dev, name, &ds3232_rtc_ops,
THIS_MODULE);
return PTR_ERR_OR_ZERO(ds3232->rtc); return 0;
} }
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP