forked from Minki/linux
rtc: mxc_v2: let the core handle rtc range
This RTC is a 32-bit second counter. This also solves an issue where mxc_rtc_set_alarm() can return with the lock taken. Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
parent
5490a1e018
commit
95fbfa14b4
@ -165,11 +165,6 @@ static int mxc_rtc_set_time(struct device *dev, struct rtc_time *tm)
|
|||||||
time64_t time = rtc_tm_to_time64(tm);
|
time64_t time = rtc_tm_to_time64(tm);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (time > U32_MAX) {
|
|
||||||
dev_err(dev, "RTC exceeded by %llus\n", time - U32_MAX);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = mxc_rtc_lock(pdata);
|
ret = mxc_rtc_lock(pdata);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
@ -248,11 +243,6 @@ static int mxc_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (time > U32_MAX) {
|
|
||||||
dev_err(dev, "Hopefully I am out of service by then :-(\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
writel((u32)time, pdata->ioaddr + SRTC_LPSAR);
|
writel((u32)time, pdata->ioaddr + SRTC_LPSAR);
|
||||||
|
|
||||||
/* clear alarm interrupt status bit */
|
/* clear alarm interrupt status bit */
|
||||||
@ -348,6 +338,7 @@ static int mxc_rtc_probe(struct platform_device *pdev)
|
|||||||
return PTR_ERR(pdata->rtc);
|
return PTR_ERR(pdata->rtc);
|
||||||
|
|
||||||
pdata->rtc->ops = &mxc_rtc_ops;
|
pdata->rtc->ops = &mxc_rtc_ops;
|
||||||
|
pdata->rtc->range_max = U32_MAX;
|
||||||
|
|
||||||
clk_disable(pdata->clk);
|
clk_disable(pdata->clk);
|
||||||
platform_set_drvdata(pdev, pdata);
|
platform_set_drvdata(pdev, pdata);
|
||||||
|
Loading…
Reference in New Issue
Block a user