diff options
Diffstat (limited to 'drivers/rtc/rtc-zynqmp.c')
| -rw-r--r-- | drivers/rtc/rtc-zynqmp.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/rtc/rtc-zynqmp.c b/drivers/rtc/rtc-zynqmp.c index c532bd13fbe5..bb950945ec7f 100644 --- a/drivers/rtc/rtc-zynqmp.c +++ b/drivers/rtc/rtc-zynqmp.c | |||
| @@ -49,7 +49,6 @@ | |||
| 49 | 49 | ||
| 50 | #define RTC_CALIB_DEF 0x198233 | 50 | #define RTC_CALIB_DEF 0x198233 |
| 51 | #define RTC_CALIB_MASK 0x1FFFFF | 51 | #define RTC_CALIB_MASK 0x1FFFFF |
| 52 | #define RTC_SEC_MAX_VAL 0xFFFFFFFF | ||
| 53 | 52 | ||
| 54 | struct xlnx_rtc_dev { | 53 | struct xlnx_rtc_dev { |
| 55 | struct rtc_device *rtc; | 54 | struct rtc_device *rtc; |
| @@ -71,9 +70,6 @@ static int xlnx_rtc_set_time(struct device *dev, struct rtc_time *tm) | |||
| 71 | */ | 70 | */ |
| 72 | new_time = rtc_tm_to_time64(tm) + 1; | 71 | new_time = rtc_tm_to_time64(tm) + 1; |
| 73 | 72 | ||
| 74 | if (new_time > RTC_SEC_MAX_VAL) | ||
| 75 | return -EINVAL; | ||
| 76 | |||
| 77 | /* | 73 | /* |
| 78 | * Writing into calibration register will clear the Tick Counter and | 74 | * Writing into calibration register will clear the Tick Counter and |
| 79 | * force the next second to be signaled exactly in 1 second period | 75 | * force the next second to be signaled exactly in 1 second period |
| @@ -154,9 +150,6 @@ static int xlnx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
| 154 | 150 | ||
| 155 | alarm_time = rtc_tm_to_time64(&alrm->time); | 151 | alarm_time = rtc_tm_to_time64(&alrm->time); |
| 156 | 152 | ||
| 157 | if (alarm_time > RTC_SEC_MAX_VAL) | ||
| 158 | return -EINVAL; | ||
| 159 | |||
| 160 | writel((u32)alarm_time, (xrtcdev->reg_base + RTC_ALRM)); | 153 | writel((u32)alarm_time, (xrtcdev->reg_base + RTC_ALRM)); |
| 161 | 154 | ||
| 162 | xlnx_rtc_alarm_irq_enable(dev, alrm->enabled); | 155 | xlnx_rtc_alarm_irq_enable(dev, alrm->enabled); |
| @@ -222,6 +215,13 @@ static int xlnx_rtc_probe(struct platform_device *pdev) | |||
| 222 | 215 | ||
| 223 | platform_set_drvdata(pdev, xrtcdev); | 216 | platform_set_drvdata(pdev, xrtcdev); |
| 224 | 217 | ||
| 218 | xrtcdev->rtc = devm_rtc_allocate_device(&pdev->dev); | ||
| 219 | if (IS_ERR(xrtcdev->rtc)) | ||
| 220 | return PTR_ERR(xrtcdev->rtc); | ||
| 221 | |||
| 222 | xrtcdev->rtc->ops = &xlnx_rtc_ops; | ||
| 223 | xrtcdev->rtc->range_max = U32_MAX; | ||
| 224 | |||
| 225 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 225 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 226 | 226 | ||
| 227 | xrtcdev->reg_base = devm_ioremap_resource(&pdev->dev, res); | 227 | xrtcdev->reg_base = devm_ioremap_resource(&pdev->dev, res); |
| @@ -263,9 +263,7 @@ static int xlnx_rtc_probe(struct platform_device *pdev) | |||
| 263 | 263 | ||
| 264 | device_init_wakeup(&pdev->dev, 1); | 264 | device_init_wakeup(&pdev->dev, 1); |
| 265 | 265 | ||
| 266 | xrtcdev->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, | 266 | return rtc_register_device(xrtcdev->rtc); |
| 267 | &xlnx_rtc_ops, THIS_MODULE); | ||
| 268 | return PTR_ERR_OR_ZERO(xrtcdev->rtc); | ||
| 269 | } | 267 | } |
| 270 | 268 | ||
| 271 | static int xlnx_rtc_remove(struct platform_device *pdev) | 269 | static int xlnx_rtc_remove(struct platform_device *pdev) |
