aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc/rtc-twl.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/rtc/rtc-twl.c')
-rw-r--r--drivers/rtc/rtc-twl.c44
1 files changed, 24 insertions, 20 deletions
diff --git a/drivers/rtc/rtc-twl.c b/drivers/rtc/rtc-twl.c
index 9277d945bf48..8bc6c80b184c 100644
--- a/drivers/rtc/rtc-twl.c
+++ b/drivers/rtc/rtc-twl.c
@@ -27,6 +27,7 @@
27#include <linux/bcd.h> 27#include <linux/bcd.h>
28#include <linux/platform_device.h> 28#include <linux/platform_device.h>
29#include <linux/interrupt.h> 29#include <linux/interrupt.h>
30#include <linux/of.h>
30 31
31#include <linux/i2c/twl.h> 32#include <linux/i2c/twl.h>
32 33
@@ -233,7 +234,7 @@ static int twl_rtc_alarm_irq_enable(struct device *dev, unsigned enabled)
233 */ 234 */
234static int twl_rtc_read_time(struct device *dev, struct rtc_time *tm) 235static int twl_rtc_read_time(struct device *dev, struct rtc_time *tm)
235{ 236{
236 unsigned char rtc_data[ALL_TIME_REGS + 1]; 237 unsigned char rtc_data[ALL_TIME_REGS];
237 int ret; 238 int ret;
238 u8 save_control; 239 u8 save_control;
239 u8 rtc_control; 240 u8 rtc_control;
@@ -300,15 +301,15 @@ static int twl_rtc_read_time(struct device *dev, struct rtc_time *tm)
300static int twl_rtc_set_time(struct device *dev, struct rtc_time *tm) 301static int twl_rtc_set_time(struct device *dev, struct rtc_time *tm)
301{ 302{
302 unsigned char save_control; 303 unsigned char save_control;
303 unsigned char rtc_data[ALL_TIME_REGS + 1]; 304 unsigned char rtc_data[ALL_TIME_REGS];
304 int ret; 305 int ret;
305 306
306 rtc_data[1] = bin2bcd(tm->tm_sec); 307 rtc_data[0] = bin2bcd(tm->tm_sec);
307 rtc_data[2] = bin2bcd(tm->tm_min); 308 rtc_data[1] = bin2bcd(tm->tm_min);
308 rtc_data[3] = bin2bcd(tm->tm_hour); 309 rtc_data[2] = bin2bcd(tm->tm_hour);
309 rtc_data[4] = bin2bcd(tm->tm_mday); 310 rtc_data[3] = bin2bcd(tm->tm_mday);
310 rtc_data[5] = bin2bcd(tm->tm_mon + 1); 311 rtc_data[4] = bin2bcd(tm->tm_mon + 1);
311 rtc_data[6] = bin2bcd(tm->tm_year - 100); 312 rtc_data[5] = bin2bcd(tm->tm_year - 100);
312 313
313 /* Stop RTC while updating the TC registers */ 314 /* Stop RTC while updating the TC registers */
314 ret = twl_rtc_read_u8(&save_control, REG_RTC_CTRL_REG); 315 ret = twl_rtc_read_u8(&save_control, REG_RTC_CTRL_REG);
@@ -341,7 +342,7 @@ out:
341 */ 342 */
342static int twl_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm) 343static int twl_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm)
343{ 344{
344 unsigned char rtc_data[ALL_TIME_REGS + 1]; 345 unsigned char rtc_data[ALL_TIME_REGS];
345 int ret; 346 int ret;
346 347
347 ret = twl_i2c_read(TWL_MODULE_RTC, rtc_data, 348 ret = twl_i2c_read(TWL_MODULE_RTC, rtc_data,
@@ -368,19 +369,19 @@ static int twl_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm)
368 369
369static int twl_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm) 370static int twl_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
370{ 371{
371 unsigned char alarm_data[ALL_TIME_REGS + 1]; 372 unsigned char alarm_data[ALL_TIME_REGS];
372 int ret; 373 int ret;
373 374
374 ret = twl_rtc_alarm_irq_enable(dev, 0); 375 ret = twl_rtc_alarm_irq_enable(dev, 0);
375 if (ret) 376 if (ret)
376 goto out; 377 goto out;
377 378
378 alarm_data[1] = bin2bcd(alm->time.tm_sec); 379 alarm_data[0] = bin2bcd(alm->time.tm_sec);
379 alarm_data[2] = bin2bcd(alm->time.tm_min); 380 alarm_data[1] = bin2bcd(alm->time.tm_min);
380 alarm_data[3] = bin2bcd(alm->time.tm_hour); 381 alarm_data[2] = bin2bcd(alm->time.tm_hour);
381 alarm_data[4] = bin2bcd(alm->time.tm_mday); 382 alarm_data[3] = bin2bcd(alm->time.tm_mday);
382 alarm_data[5] = bin2bcd(alm->time.tm_mon + 1); 383 alarm_data[4] = bin2bcd(alm->time.tm_mon + 1);
383 alarm_data[6] = bin2bcd(alm->time.tm_year - 100); 384 alarm_data[5] = bin2bcd(alm->time.tm_year - 100);
384 385
385 /* update all the alarm registers in one shot */ 386 /* update all the alarm registers in one shot */
386 ret = twl_i2c_write(TWL_MODULE_RTC, alarm_data, 387 ret = twl_i2c_write(TWL_MODULE_RTC, alarm_data,
@@ -458,7 +459,7 @@ static struct rtc_class_ops twl_rtc_ops = {
458 459
459/*----------------------------------------------------------------------*/ 460/*----------------------------------------------------------------------*/
460 461
461static int __devinit twl_rtc_probe(struct platform_device *pdev) 462static int twl_rtc_probe(struct platform_device *pdev)
462{ 463{
463 struct rtc_device *rtc; 464 struct rtc_device *rtc;
464 int ret = -EINVAL; 465 int ret = -EINVAL;
@@ -535,7 +536,7 @@ out1:
535 * Disable all TWL RTC module interrupts. 536 * Disable all TWL RTC module interrupts.
536 * Sets status flag to free. 537 * Sets status flag to free.
537 */ 538 */
538static int __devexit twl_rtc_remove(struct platform_device *pdev) 539static int twl_rtc_remove(struct platform_device *pdev)
539{ 540{
540 /* leave rtc running, but disable irqs */ 541 /* leave rtc running, but disable irqs */
541 struct rtc_device *rtc = platform_get_drvdata(pdev); 542 struct rtc_device *rtc = platform_get_drvdata(pdev);
@@ -588,23 +589,26 @@ static int twl_rtc_resume(struct platform_device *pdev)
588#define twl_rtc_resume NULL 589#define twl_rtc_resume NULL
589#endif 590#endif
590 591
592#ifdef CONFIG_OF
591static const struct of_device_id twl_rtc_of_match[] = { 593static const struct of_device_id twl_rtc_of_match[] = {
592 {.compatible = "ti,twl4030-rtc", }, 594 {.compatible = "ti,twl4030-rtc", },
593 { }, 595 { },
594}; 596};
595MODULE_DEVICE_TABLE(of, twl_rtc_of_match); 597MODULE_DEVICE_TABLE(of, twl_rtc_of_match);
598#endif
599
596MODULE_ALIAS("platform:twl_rtc"); 600MODULE_ALIAS("platform:twl_rtc");
597 601
598static struct platform_driver twl4030rtc_driver = { 602static struct platform_driver twl4030rtc_driver = {
599 .probe = twl_rtc_probe, 603 .probe = twl_rtc_probe,
600 .remove = __devexit_p(twl_rtc_remove), 604 .remove = twl_rtc_remove,
601 .shutdown = twl_rtc_shutdown, 605 .shutdown = twl_rtc_shutdown,
602 .suspend = twl_rtc_suspend, 606 .suspend = twl_rtc_suspend,
603 .resume = twl_rtc_resume, 607 .resume = twl_rtc_resume,
604 .driver = { 608 .driver = {
605 .owner = THIS_MODULE, 609 .owner = THIS_MODULE,
606 .name = "twl_rtc", 610 .name = "twl_rtc",
607 .of_match_table = twl_rtc_of_match, 611 .of_match_table = of_match_ptr(twl_rtc_of_match),
608 }, 612 },
609}; 613};
610 614