diff options
| author | Linus Walleij <linus.walleij@linaro.org> | 2011-04-17 14:32:19 -0400 |
|---|---|---|
| committer | Linus Walleij <linus.walleij@linaro.org> | 2011-04-20 12:46:56 -0400 |
| commit | 9cf3b5fa6f7b246784d62a2a7637a871290c9ab9 (patch) | |
| tree | e11c99e1af553d14619feba4f40d163df95fa09a | |
| parent | cf568c58eb192368f5e796df935704535b54f451 (diff) | |
rtc: fix coh901331 startup crash
The rtc_device_register() call has changed semantics so that it
will immediately call out to rtc_read_alarm() and since the
callbacks require the drvdata to be set, we need to set it before
the registration call to avoid NULL dereference.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
| -rw-r--r-- | drivers/rtc/rtc-coh901331.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/rtc/rtc-coh901331.c b/drivers/rtc/rtc-coh901331.c index 316f484999b5..80f9c88214c5 100644 --- a/drivers/rtc/rtc-coh901331.c +++ b/drivers/rtc/rtc-coh901331.c | |||
| @@ -220,6 +220,7 @@ static int __init coh901331_probe(struct platform_device *pdev) | |||
| 220 | } | 220 | } |
| 221 | clk_disable(rtap->clk); | 221 | clk_disable(rtap->clk); |
| 222 | 222 | ||
| 223 | platform_set_drvdata(pdev, rtap); | ||
| 223 | rtap->rtc = rtc_device_register("coh901331", &pdev->dev, &coh901331_ops, | 224 | rtap->rtc = rtc_device_register("coh901331", &pdev->dev, &coh901331_ops, |
| 224 | THIS_MODULE); | 225 | THIS_MODULE); |
| 225 | if (IS_ERR(rtap->rtc)) { | 226 | if (IS_ERR(rtap->rtc)) { |
| @@ -227,11 +228,10 @@ static int __init coh901331_probe(struct platform_device *pdev) | |||
| 227 | goto out_no_rtc; | 228 | goto out_no_rtc; |
| 228 | } | 229 | } |
| 229 | 230 | ||
| 230 | platform_set_drvdata(pdev, rtap); | ||
| 231 | |||
| 232 | return 0; | 231 | return 0; |
| 233 | 232 | ||
| 234 | out_no_rtc: | 233 | out_no_rtc: |
| 234 | platform_set_drvdata(pdev, NULL); | ||
| 235 | out_no_clk_enable: | 235 | out_no_clk_enable: |
| 236 | clk_put(rtap->clk); | 236 | clk_put(rtap->clk); |
| 237 | out_no_clk: | 237 | out_no_clk: |
