mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 06:12:08 +00:00
[ARM] Kirkwood: fail the probe if internal RTC does not work
Having a RTC that doesn't maintain proper time across a reboot is one thing. But a RTC that doesn't work at all and only causes timeouts is another. Tested-by: Martin Michlmayr <tbm@cyrius.com> Signed-off-by: Nicolas Pitre <nico@marvell.com>
This commit is contained in:
parent
0c1355e36f
commit
9d1d4f9eab
@ -12,6 +12,7 @@
|
||||
#include <linux/bcd.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
|
||||
#define RTC_TIME_REG_OFFS 0
|
||||
@ -119,6 +120,16 @@ static int __init mv_rtc_probe(struct platform_device *pdev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* make sure it is actually functional */
|
||||
if (rtc_time == 0x01000000) {
|
||||
ssleep(1);
|
||||
rtc_time = readl(pdata->ioaddr + RTC_TIME_REG_OFFS);
|
||||
if (rtc_time == 0x01000000) {
|
||||
dev_err(&pdev->dev, "internal RTC not ticking\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, pdata);
|
||||
pdata->rtc = rtc_device_register(pdev->name, &pdev->dev,
|
||||
&mv_rtc_ops, THIS_MODULE);
|
||||
|
Loading…
Reference in New Issue
Block a user