|
@@ -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);
|