aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/rtc')
-rw-r--r--drivers/rtc/Kconfig12
-rw-r--r--drivers/rtc/Makefile1
-rw-r--r--drivers/rtc/interface.c3
-rw-r--r--drivers/rtc/rtc-as3722.c5
-rw-r--r--drivers/rtc/rtc-at32ap700x.c4
-rw-r--r--drivers/rtc/rtc-cmos.c8
-rw-r--r--drivers/rtc/rtc-coh901331.c18
-rw-r--r--drivers/rtc/rtc-da9052.c4
-rw-r--r--drivers/rtc/rtc-da9055.c4
-rw-r--r--drivers/rtc/rtc-davinci.c33
-rw-r--r--drivers/rtc/rtc-ds1305.c10
-rw-r--r--drivers/rtc/rtc-ds1307.c243
-rw-r--r--drivers/rtc/rtc-ds1347.c166
-rw-r--r--drivers/rtc/rtc-ds1390.c5
-rw-r--r--drivers/rtc/rtc-ds1511.c21
-rw-r--r--drivers/rtc/rtc-ds1553.c21
-rw-r--r--drivers/rtc/rtc-ds1672.c11
-rw-r--r--drivers/rtc/rtc-ds1742.c5
-rw-r--r--drivers/rtc/rtc-ds3232.c100
-rw-r--r--drivers/rtc/rtc-imxdi.c4
-rw-r--r--drivers/rtc/rtc-isl12057.c1
-rw-r--r--drivers/rtc/rtc-jz4740.c25
-rw-r--r--drivers/rtc/rtc-lpc32xx.c5
-rw-r--r--drivers/rtc/rtc-mc13xxx.c139
-rw-r--r--drivers/rtc/rtc-moxart.c4
-rw-r--r--drivers/rtc/rtc-nuc900.c5
-rw-r--r--drivers/rtc/rtc-palmas.c5
-rw-r--r--drivers/rtc/rtc-pm8xxx.c288
-rw-r--r--drivers/rtc/rtc-rv3029c2.c12
-rw-r--r--drivers/rtc/rtc-rx8025.c1
-rw-r--r--drivers/rtc/rtc-s3c.c21
-rw-r--r--drivers/rtc/rtc-sirfsoc.c68
-rw-r--r--drivers/rtc/rtc-spear.c4
-rw-r--r--drivers/rtc/rtc-stk17ta8.c3
-rw-r--r--drivers/rtc/rtc-sunxi.c2
-rw-r--r--drivers/rtc/rtc-test.c9
-rw-r--r--drivers/rtc/rtc-tx4939.c4
-rw-r--r--drivers/rtc/rtc-vt8500.c28
-rw-r--r--drivers/rtc/rtc-x1205.c2
39 files changed, 764 insertions, 540 deletions
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index db933decc39c..2e565f8e5165 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -573,6 +573,18 @@ config RTC_DRV_DS1305
573 This driver can also be built as a module. If so, the module 573 This driver can also be built as a module. If so, the module
574 will be called rtc-ds1305. 574 will be called rtc-ds1305.
575 575
576config RTC_DRV_DS1347
577 tristate "Dallas/Maxim DS1347"
578 help
579 If you say yes here you get support for the
580 Dallas/Maxim DS1347 chips.
581
582 This driver only supports the RTC feature, and not other chip
583 features such as alarms.
584
585 This driver can also be built as a module. If so, the module
586 will be called rtc-ds1347.
587
576config RTC_DRV_DS1390 588config RTC_DRV_DS1390
577 tristate "Dallas/Maxim DS1390/93/94" 589 tristate "Dallas/Maxim DS1390/93/94"
578 help 590 help
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index b427bf7dd20d..40a09915c8f6 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -40,6 +40,7 @@ obj-$(CONFIG_RTC_DRV_DS1286) += rtc-ds1286.o
40obj-$(CONFIG_RTC_DRV_DS1302) += rtc-ds1302.o 40obj-$(CONFIG_RTC_DRV_DS1302) += rtc-ds1302.o
41obj-$(CONFIG_RTC_DRV_DS1305) += rtc-ds1305.o 41obj-$(CONFIG_RTC_DRV_DS1305) += rtc-ds1305.o
42obj-$(CONFIG_RTC_DRV_DS1307) += rtc-ds1307.o 42obj-$(CONFIG_RTC_DRV_DS1307) += rtc-ds1307.o
43obj-$(CONFIG_RTC_DRV_DS1347) += rtc-ds1347.o
43obj-$(CONFIG_RTC_DRV_DS1374) += rtc-ds1374.o 44obj-$(CONFIG_RTC_DRV_DS1374) += rtc-ds1374.o
44obj-$(CONFIG_RTC_DRV_DS1390) += rtc-ds1390.o 45obj-$(CONFIG_RTC_DRV_DS1390) += rtc-ds1390.o
45obj-$(CONFIG_RTC_DRV_DS1511) += rtc-ds1511.o 46obj-$(CONFIG_RTC_DRV_DS1511) += rtc-ds1511.o
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c
index 544be722937c..c2eff6082363 100644
--- a/drivers/rtc/interface.c
+++ b/drivers/rtc/interface.c
@@ -584,6 +584,9 @@ enum hrtimer_restart rtc_pie_update_irq(struct hrtimer *timer)
584void rtc_update_irq(struct rtc_device *rtc, 584void rtc_update_irq(struct rtc_device *rtc,
585 unsigned long num, unsigned long events) 585 unsigned long num, unsigned long events)
586{ 586{
587 if (unlikely(IS_ERR_OR_NULL(rtc)))
588 return;
589
587 pm_stay_awake(rtc->dev.parent); 590 pm_stay_awake(rtc->dev.parent);
588 schedule_work(&rtc->irqwork); 591 schedule_work(&rtc->irqwork);
589} 592}
diff --git a/drivers/rtc/rtc-as3722.c b/drivers/rtc/rtc-as3722.c
index 4af016985890..9f38eda69154 100644
--- a/drivers/rtc/rtc-as3722.c
+++ b/drivers/rtc/rtc-as3722.c
@@ -242,9 +242,8 @@ static int as3722_rtc_resume(struct device *dev)
242} 242}
243#endif 243#endif
244 244
245static const struct dev_pm_ops as3722_rtc_pm_ops = { 245static SIMPLE_DEV_PM_OPS(as3722_rtc_pm_ops, as3722_rtc_suspend,
246 SET_SYSTEM_SLEEP_PM_OPS(as3722_rtc_suspend, as3722_rtc_resume) 246 as3722_rtc_resume);
247};
248 247
249static struct platform_driver as3722_rtc_driver = { 248static struct platform_driver as3722_rtc_driver = {
250 .probe = as3722_rtc_probe, 249 .probe = as3722_rtc_probe,
diff --git a/drivers/rtc/rtc-at32ap700x.c b/drivers/rtc/rtc-at32ap700x.c
index 3161ab5263ed..aee3387fb099 100644
--- a/drivers/rtc/rtc-at32ap700x.c
+++ b/drivers/rtc/rtc-at32ap700x.c
@@ -204,10 +204,8 @@ static int __init at32_rtc_probe(struct platform_device *pdev)
204 204
205 rtc = devm_kzalloc(&pdev->dev, sizeof(struct rtc_at32ap700x), 205 rtc = devm_kzalloc(&pdev->dev, sizeof(struct rtc_at32ap700x),
206 GFP_KERNEL); 206 GFP_KERNEL);
207 if (!rtc) { 207 if (!rtc)
208 dev_dbg(&pdev->dev, "out of memory\n");
209 return -ENOMEM; 208 return -ENOMEM;
210 }
211 209
212 regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); 210 regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
213 if (!regs) { 211 if (!regs) {
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
index cae212f30d65..0963c9309c74 100644
--- a/drivers/rtc/rtc-cmos.c
+++ b/drivers/rtc/rtc-cmos.c
@@ -837,7 +837,7 @@ static void __exit cmos_do_remove(struct device *dev)
837 cmos->dev = NULL; 837 cmos->dev = NULL;
838} 838}
839 839
840#ifdef CONFIG_PM 840#ifdef CONFIG_PM_SLEEP
841 841
842static int cmos_suspend(struct device *dev) 842static int cmos_suspend(struct device *dev)
843{ 843{
@@ -935,8 +935,6 @@ static int cmos_resume(struct device *dev)
935 return 0; 935 return 0;
936} 936}
937 937
938static SIMPLE_DEV_PM_OPS(cmos_pm_ops, cmos_suspend, cmos_resume);
939
940#else 938#else
941 939
942static inline int cmos_poweroff(struct device *dev) 940static inline int cmos_poweroff(struct device *dev)
@@ -946,6 +944,8 @@ static inline int cmos_poweroff(struct device *dev)
946 944
947#endif 945#endif
948 946
947static SIMPLE_DEV_PM_OPS(cmos_pm_ops, cmos_suspend, cmos_resume);
948
949/*----------------------------------------------------------------*/ 949/*----------------------------------------------------------------*/
950 950
951/* On non-x86 systems, a "CMOS" RTC lives most naturally on platform_bus. 951/* On non-x86 systems, a "CMOS" RTC lives most naturally on platform_bus.
@@ -1088,11 +1088,9 @@ static struct pnp_driver cmos_pnp_driver = {
1088 1088
1089 /* flag ensures resume() gets called, and stops syslog spam */ 1089 /* flag ensures resume() gets called, and stops syslog spam */
1090 .flags = PNP_DRIVER_RES_DO_NOT_CHANGE, 1090 .flags = PNP_DRIVER_RES_DO_NOT_CHANGE,
1091#ifdef CONFIG_PM_SLEEP
1092 .driver = { 1091 .driver = {
1093 .pm = &cmos_pm_ops, 1092 .pm = &cmos_pm_ops,
1094 }, 1093 },
1095#endif
1096}; 1094};
1097 1095
1098#endif /* CONFIG_PNP */ 1096#endif /* CONFIG_PNP */
diff --git a/drivers/rtc/rtc-coh901331.c b/drivers/rtc/rtc-coh901331.c
index 73f157519dff..869cae273799 100644
--- a/drivers/rtc/rtc-coh901331.c
+++ b/drivers/rtc/rtc-coh901331.c
@@ -43,8 +43,6 @@
43struct coh901331_port { 43struct coh901331_port {
44 struct rtc_device *rtc; 44 struct rtc_device *rtc;
45 struct clk *clk; 45 struct clk *clk;
46 u32 phybase;
47 u32 physize;
48 void __iomem *virtbase; 46 void __iomem *virtbase;
49 int irq; 47 int irq;
50#ifdef CONFIG_PM_SLEEP 48#ifdef CONFIG_PM_SLEEP
@@ -173,19 +171,9 @@ static int __init coh901331_probe(struct platform_device *pdev)
173 return -ENOMEM; 171 return -ENOMEM;
174 172
175 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 173 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
176 if (!res) 174 rtap->virtbase = devm_ioremap_resource(&pdev->dev, res);
177 return -ENOENT; 175 if (IS_ERR(rtap->virtbase))
178 176 return PTR_ERR(rtap->virtbase);
179 rtap->phybase = res->start;
180 rtap->physize = resource_size(res);
181
182 if (devm_request_mem_region(&pdev->dev, rtap->phybase, rtap->physize,
183 "rtc-coh901331") == NULL)
184 return -EBUSY;
185
186 rtap->virtbase = devm_ioremap(&pdev->dev, rtap->phybase, rtap->physize);
187 if (!rtap->virtbase)
188 return -ENOMEM;
189 177
190 rtap->irq = platform_get_irq(pdev, 0); 178 rtap->irq = platform_get_irq(pdev, 0);
191 if (devm_request_irq(&pdev->dev, rtap->irq, coh901331_interrupt, 0, 179 if (devm_request_irq(&pdev->dev, rtap->irq, coh901331_interrupt, 0,
diff --git a/drivers/rtc/rtc-da9052.c b/drivers/rtc/rtc-da9052.c
index 4385ca4503da..a1cbf64242a5 100644
--- a/drivers/rtc/rtc-da9052.c
+++ b/drivers/rtc/rtc-da9052.c
@@ -26,7 +26,6 @@
26struct da9052_rtc { 26struct da9052_rtc {
27 struct rtc_device *rtc; 27 struct rtc_device *rtc;
28 struct da9052 *da9052; 28 struct da9052 *da9052;
29 int irq;
30}; 29};
31 30
32static int da9052_rtc_enable_alarm(struct da9052 *da9052, bool enable) 31static int da9052_rtc_enable_alarm(struct da9052 *da9052, bool enable)
@@ -240,8 +239,7 @@ static int da9052_rtc_probe(struct platform_device *pdev)
240 239
241 rtc->da9052 = dev_get_drvdata(pdev->dev.parent); 240 rtc->da9052 = dev_get_drvdata(pdev->dev.parent);
242 platform_set_drvdata(pdev, rtc); 241 platform_set_drvdata(pdev, rtc);
243 rtc->irq = DA9052_IRQ_ALARM; 242 ret = da9052_request_irq(rtc->da9052, DA9052_IRQ_ALARM, "ALM",
244 ret = da9052_request_irq(rtc->da9052, rtc->irq, "ALM",
245 da9052_rtc_irq, rtc); 243 da9052_rtc_irq, rtc);
246 if (ret != 0) { 244 if (ret != 0) {
247 rtc_err(rtc->da9052, "irq registration failed: %d\n", ret); 245 rtc_err(rtc->da9052, "irq registration failed: %d\n", ret);
diff --git a/drivers/rtc/rtc-da9055.c b/drivers/rtc/rtc-da9055.c
index 48cb2ac3bd3e..a825491331c8 100644
--- a/drivers/rtc/rtc-da9055.c
+++ b/drivers/rtc/rtc-da9055.c
@@ -302,7 +302,9 @@ static int da9055_rtc_probe(struct platform_device *pdev)
302 } 302 }
303 303
304 alm_irq = platform_get_irq_byname(pdev, "ALM"); 304 alm_irq = platform_get_irq_byname(pdev, "ALM");
305 alm_irq = regmap_irq_get_virq(rtc->da9055->irq_data, alm_irq); 305 if (alm_irq < 0)
306 return alm_irq;
307
306 ret = devm_request_threaded_irq(&pdev->dev, alm_irq, NULL, 308 ret = devm_request_threaded_irq(&pdev->dev, alm_irq, NULL,
307 da9055_rtc_alm_irq, 309 da9055_rtc_alm_irq,
308 IRQF_TRIGGER_HIGH | IRQF_ONESHOT, 310 IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
diff --git a/drivers/rtc/rtc-davinci.c b/drivers/rtc/rtc-davinci.c
index 24677ef8c39a..c0a3b59f65a2 100644
--- a/drivers/rtc/rtc-davinci.c
+++ b/drivers/rtc/rtc-davinci.c
@@ -119,8 +119,6 @@ static DEFINE_SPINLOCK(davinci_rtc_lock);
119struct davinci_rtc { 119struct davinci_rtc {
120 struct rtc_device *rtc; 120 struct rtc_device *rtc;
121 void __iomem *base; 121 void __iomem *base;
122 resource_size_t pbase;
123 size_t base_size;
124 int irq; 122 int irq;
125}; 123};
126 124
@@ -482,14 +480,12 @@ static int __init davinci_rtc_probe(struct platform_device *pdev)
482{ 480{
483 struct device *dev = &pdev->dev; 481 struct device *dev = &pdev->dev;
484 struct davinci_rtc *davinci_rtc; 482 struct davinci_rtc *davinci_rtc;
485 struct resource *res, *mem; 483 struct resource *res;
486 int ret = 0; 484 int ret = 0;
487 485
488 davinci_rtc = devm_kzalloc(&pdev->dev, sizeof(struct davinci_rtc), GFP_KERNEL); 486 davinci_rtc = devm_kzalloc(&pdev->dev, sizeof(struct davinci_rtc), GFP_KERNEL);
489 if (!davinci_rtc) { 487 if (!davinci_rtc)
490 dev_dbg(dev, "could not allocate memory for private data\n");
491 return -ENOMEM; 488 return -ENOMEM;
492 }
493 489
494 davinci_rtc->irq = platform_get_irq(pdev, 0); 490 davinci_rtc->irq = platform_get_irq(pdev, 0);
495 if (davinci_rtc->irq < 0) { 491 if (davinci_rtc->irq < 0) {
@@ -498,28 +494,9 @@ static int __init davinci_rtc_probe(struct platform_device *pdev)
498 } 494 }
499 495
500 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 496 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
501 if (!res) { 497 davinci_rtc->base = devm_ioremap_resource(dev, res);
502 dev_err(dev, "no mem resource\n"); 498 if (IS_ERR(davinci_rtc->base))
503 return -EINVAL; 499 return PTR_ERR(davinci_rtc->base);
504 }
505
506 davinci_rtc->pbase = res->start;
507 davinci_rtc->base_size = resource_size(res);
508
509 mem = devm_request_mem_region(dev, davinci_rtc->pbase,
510 davinci_rtc->base_size, pdev->name);
511 if (!mem) {
512 dev_err(dev, "RTC registers at %08x are not free\n",
513 davinci_rtc->pbase);
514 return -EBUSY;
515 }
516
517 davinci_rtc->base = devm_ioremap(dev, davinci_rtc->pbase,
518 davinci_rtc->base_size);
519 if (!davinci_rtc->base) {
520 dev_err(dev, "unable to ioremap MEM resource\n");
521 return -ENOMEM;
522 }
523 500
524 platform_set_drvdata(pdev, davinci_rtc); 501 platform_set_drvdata(pdev, davinci_rtc);
525 502
diff --git a/drivers/rtc/rtc-ds1305.c b/drivers/rtc/rtc-ds1305.c
index 2dd586a19b59..129add77065d 100644
--- a/drivers/rtc/rtc-ds1305.c
+++ b/drivers/rtc/rtc-ds1305.c
@@ -756,19 +756,17 @@ static int ds1305_probe(struct spi_device *spi)
756 status = devm_request_irq(&spi->dev, spi->irq, ds1305_irq, 756 status = devm_request_irq(&spi->dev, spi->irq, ds1305_irq,
757 0, dev_name(&ds1305->rtc->dev), ds1305); 757 0, dev_name(&ds1305->rtc->dev), ds1305);
758 if (status < 0) { 758 if (status < 0) {
759 dev_dbg(&spi->dev, "request_irq %d --> %d\n", 759 dev_err(&spi->dev, "request_irq %d --> %d\n",
760 spi->irq, status); 760 spi->irq, status);
761 return status; 761 } else {
762 device_set_wakeup_capable(&spi->dev, 1);
762 } 763 }
763
764 device_set_wakeup_capable(&spi->dev, 1);
765 } 764 }
766 765
767 /* export NVRAM */ 766 /* export NVRAM */
768 status = sysfs_create_bin_file(&spi->dev.kobj, &nvram); 767 status = sysfs_create_bin_file(&spi->dev.kobj, &nvram);
769 if (status < 0) { 768 if (status < 0) {
770 dev_dbg(&spi->dev, "register nvram --> %d\n", status); 769 dev_err(&spi->dev, "register nvram --> %d\n", status);
771 return status;
772 } 770 }
773 771
774 return 0; 772 return 0;
diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
index 4e75345a559a..f03d5ba96db1 100644
--- a/drivers/rtc/rtc-ds1307.c
+++ b/drivers/rtc/rtc-ds1307.c
@@ -154,6 +154,7 @@ static const struct chip_desc chips[last_ds_type] = {
154 .alarm = 1, 154 .alarm = 1,
155 }, 155 },
156 [mcp7941x] = { 156 [mcp7941x] = {
157 .alarm = 1,
157 /* this is battery backed SRAM */ 158 /* this is battery backed SRAM */
158 .nvram_offset = 0x20, 159 .nvram_offset = 0x20,
159 .nvram_size = 0x40, 160 .nvram_size = 0x40,
@@ -606,6 +607,178 @@ static const struct rtc_class_ops ds13xx_rtc_ops = {
606 607
607/*----------------------------------------------------------------------*/ 608/*----------------------------------------------------------------------*/
608 609
610/*
611 * Alarm support for mcp7941x devices.
612 */
613
614#define MCP7941X_REG_CONTROL 0x07
615# define MCP7941X_BIT_ALM0_EN 0x10
616# define MCP7941X_BIT_ALM1_EN 0x20
617#define MCP7941X_REG_ALARM0_BASE 0x0a
618#define MCP7941X_REG_ALARM0_CTRL 0x0d
619#define MCP7941X_REG_ALARM1_BASE 0x11
620#define MCP7941X_REG_ALARM1_CTRL 0x14
621# define MCP7941X_BIT_ALMX_IF (1 << 3)
622# define MCP7941X_BIT_ALMX_C0 (1 << 4)
623# define MCP7941X_BIT_ALMX_C1 (1 << 5)
624# define MCP7941X_BIT_ALMX_C2 (1 << 6)
625# define MCP7941X_BIT_ALMX_POL (1 << 7)
626# define MCP7941X_MSK_ALMX_MATCH (MCP7941X_BIT_ALMX_C0 | \
627 MCP7941X_BIT_ALMX_C1 | \
628 MCP7941X_BIT_ALMX_C2)
629
630static void mcp7941x_work(struct work_struct *work)
631{
632 struct ds1307 *ds1307 = container_of(work, struct ds1307, work);
633 struct i2c_client *client = ds1307->client;
634 int reg, ret;
635
636 mutex_lock(&ds1307->rtc->ops_lock);
637
638 /* Check and clear alarm 0 interrupt flag. */
639 reg = i2c_smbus_read_byte_data(client, MCP7941X_REG_ALARM0_CTRL);
640 if (reg < 0)
641 goto out;
642 if (!(reg & MCP7941X_BIT_ALMX_IF))
643 goto out;
644 reg &= ~MCP7941X_BIT_ALMX_IF;
645 ret = i2c_smbus_write_byte_data(client, MCP7941X_REG_ALARM0_CTRL, reg);
646 if (ret < 0)
647 goto out;
648
649 /* Disable alarm 0. */
650 reg = i2c_smbus_read_byte_data(client, MCP7941X_REG_CONTROL);
651 if (reg < 0)
652 goto out;
653 reg &= ~MCP7941X_BIT_ALM0_EN;
654 ret = i2c_smbus_write_byte_data(client, MCP7941X_REG_CONTROL, reg);
655 if (ret < 0)
656 goto out;
657
658 rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF);
659
660out:
661 if (test_bit(HAS_ALARM, &ds1307->flags))
662 enable_irq(client->irq);
663 mutex_unlock(&ds1307->rtc->ops_lock);
664}
665
666static int mcp7941x_read_alarm(struct device *dev, struct rtc_wkalrm *t)
667{
668 struct i2c_client *client = to_i2c_client(dev);
669 struct ds1307 *ds1307 = i2c_get_clientdata(client);
670 u8 *regs = ds1307->regs;
671 int ret;
672
673 if (!test_bit(HAS_ALARM, &ds1307->flags))
674 return -EINVAL;
675
676 /* Read control and alarm 0 registers. */
677 ret = ds1307->read_block_data(client, MCP7941X_REG_CONTROL, 10, regs);
678 if (ret < 0)
679 return ret;
680
681 t->enabled = !!(regs[0] & MCP7941X_BIT_ALM0_EN);
682
683 /* Report alarm 0 time assuming 24-hour and day-of-month modes. */
684 t->time.tm_sec = bcd2bin(ds1307->regs[3] & 0x7f);
685 t->time.tm_min = bcd2bin(ds1307->regs[4] & 0x7f);
686 t->time.tm_hour = bcd2bin(ds1307->regs[5] & 0x3f);
687 t->time.tm_wday = bcd2bin(ds1307->regs[6] & 0x7) - 1;
688 t->time.tm_mday = bcd2bin(ds1307->regs[7] & 0x3f);
689 t->time.tm_mon = bcd2bin(ds1307->regs[8] & 0x1f) - 1;
690 t->time.tm_year = -1;
691 t->time.tm_yday = -1;
692 t->time.tm_isdst = -1;
693
694 dev_dbg(dev, "%s, sec=%d min=%d hour=%d wday=%d mday=%d mon=%d "
695 "enabled=%d polarity=%d irq=%d match=%d\n", __func__,
696 t->time.tm_sec, t->time.tm_min, t->time.tm_hour,
697 t->time.tm_wday, t->time.tm_mday, t->time.tm_mon, t->enabled,
698 !!(ds1307->regs[6] & MCP7941X_BIT_ALMX_POL),
699 !!(ds1307->regs[6] & MCP7941X_BIT_ALMX_IF),
700 (ds1307->regs[6] & MCP7941X_MSK_ALMX_MATCH) >> 4);
701
702 return 0;
703}
704
705static int mcp7941x_set_alarm(struct device *dev, struct rtc_wkalrm *t)
706{
707 struct i2c_client *client = to_i2c_client(dev);
708 struct ds1307 *ds1307 = i2c_get_clientdata(client);
709 unsigned char *regs = ds1307->regs;
710 int ret;
711
712 if (!test_bit(HAS_ALARM, &ds1307->flags))
713 return -EINVAL;
714
715 dev_dbg(dev, "%s, sec=%d min=%d hour=%d wday=%d mday=%d mon=%d "
716 "enabled=%d pending=%d\n", __func__,
717 t->time.tm_sec, t->time.tm_min, t->time.tm_hour,
718 t->time.tm_wday, t->time.tm_mday, t->time.tm_mon,
719 t->enabled, t->pending);
720
721 /* Read control and alarm 0 registers. */
722 ret = ds1307->read_block_data(client, MCP7941X_REG_CONTROL, 10, regs);
723 if (ret < 0)
724 return ret;
725
726 /* Set alarm 0, using 24-hour and day-of-month modes. */
727 regs[3] = bin2bcd(t->time.tm_sec);
728 regs[4] = bin2bcd(t->time.tm_min);
729 regs[5] = bin2bcd(t->time.tm_hour);
730 regs[6] = bin2bcd(t->time.tm_wday) + 1;
731 regs[7] = bin2bcd(t->time.tm_mday);
732 regs[8] = bin2bcd(t->time.tm_mon) + 1;
733
734 /* Clear the alarm 0 interrupt flag. */
735 regs[6] &= ~MCP7941X_BIT_ALMX_IF;
736 /* Set alarm match: second, minute, hour, day, date, month. */
737 regs[6] |= MCP7941X_MSK_ALMX_MATCH;
738
739 if (t->enabled)
740 regs[0] |= MCP7941X_BIT_ALM0_EN;
741 else
742 regs[0] &= ~MCP7941X_BIT_ALM0_EN;
743
744 ret = ds1307->write_block_data(client, MCP7941X_REG_CONTROL, 10, regs);
745 if (ret < 0)
746 return ret;
747
748 return 0;
749}
750
751static int mcp7941x_alarm_irq_enable(struct device *dev, unsigned int enabled)
752{
753 struct i2c_client *client = to_i2c_client(dev);
754 struct ds1307 *ds1307 = i2c_get_clientdata(client);
755 int reg;
756
757 if (!test_bit(HAS_ALARM, &ds1307->flags))
758 return -EINVAL;
759
760 reg = i2c_smbus_read_byte_data(client, MCP7941X_REG_CONTROL);
761 if (reg < 0)
762 return reg;
763
764 if (enabled)
765 reg |= MCP7941X_BIT_ALM0_EN;
766 else
767 reg &= ~MCP7941X_BIT_ALM0_EN;
768
769 return i2c_smbus_write_byte_data(client, MCP7941X_REG_CONTROL, reg);
770}
771
772static const struct rtc_class_ops mcp7941x_rtc_ops = {
773 .read_time = ds1307_get_time,
774 .set_time = ds1307_set_time,
775 .read_alarm = mcp7941x_read_alarm,
776 .set_alarm = mcp7941x_set_alarm,
777 .alarm_irq_enable = mcp7941x_alarm_irq_enable,
778};
779
780/*----------------------------------------------------------------------*/
781
609static ssize_t 782static ssize_t
610ds1307_nvram_read(struct file *filp, struct kobject *kobj, 783ds1307_nvram_read(struct file *filp, struct kobject *kobj,
611 struct bin_attribute *attr, 784 struct bin_attribute *attr,
@@ -678,6 +851,7 @@ static int ds1307_probe(struct i2c_client *client,
678 [ds_1339] = DS1339_BIT_BBSQI, 851 [ds_1339] = DS1339_BIT_BBSQI,
679 [ds_3231] = DS3231_BIT_BBSQW, 852 [ds_3231] = DS3231_BIT_BBSQW,
680 }; 853 };
854 const struct rtc_class_ops *rtc_ops = &ds13xx_rtc_ops;
681 855
682 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA) 856 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)
683 && !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) 857 && !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK))
@@ -816,6 +990,13 @@ static int ds1307_probe(struct i2c_client *client,
816 case ds_1388: 990 case ds_1388:
817 ds1307->offset = 1; /* Seconds starts at 1 */ 991 ds1307->offset = 1; /* Seconds starts at 1 */
818 break; 992 break;
993 case mcp7941x:
994 rtc_ops = &mcp7941x_rtc_ops;
995 if (ds1307->client->irq > 0 && chip->alarm) {
996 INIT_WORK(&ds1307->work, mcp7941x_work);
997 want_irq = true;
998 }
999 break;
819 default: 1000 default:
820 break; 1001 break;
821 } 1002 }
@@ -927,55 +1108,61 @@ read_rtc:
927 bin2bcd(tmp)); 1108 bin2bcd(tmp));
928 } 1109 }
929 1110
1111 device_set_wakeup_capable(&client->dev, want_irq);
930 ds1307->rtc = devm_rtc_device_register(&client->dev, client->name, 1112 ds1307->rtc = devm_rtc_device_register(&client->dev, client->name,
931 &ds13xx_rtc_ops, THIS_MODULE); 1113 rtc_ops, THIS_MODULE);
932 if (IS_ERR(ds1307->rtc)) { 1114 if (IS_ERR(ds1307->rtc)) {
933 err = PTR_ERR(ds1307->rtc); 1115 return PTR_ERR(ds1307->rtc);
934 dev_err(&client->dev,
935 "unable to register the class device\n");
936 goto exit;
937 } 1116 }
938 1117
939 if (want_irq) { 1118 if (want_irq) {
940 err = request_irq(client->irq, ds1307_irq, IRQF_SHARED, 1119 err = request_irq(client->irq, ds1307_irq, IRQF_SHARED,
941 ds1307->rtc->name, client); 1120 ds1307->rtc->name, client);
942 if (err) { 1121 if (err) {
943 dev_err(&client->dev, 1122 client->irq = 0;
944 "unable to request IRQ!\n"); 1123 dev_err(&client->dev, "unable to request IRQ!\n");
945 goto exit; 1124 } else {
946 }
947 1125
948 device_set_wakeup_capable(&client->dev, 1); 1126 set_bit(HAS_ALARM, &ds1307->flags);
949 set_bit(HAS_ALARM, &ds1307->flags); 1127 dev_dbg(&client->dev, "got IRQ %d\n", client->irq);
950 dev_dbg(&client->dev, "got IRQ %d\n", client->irq); 1128 }
951 } 1129 }
952 1130
953 if (chip->nvram_size) { 1131 if (chip->nvram_size) {
1132
954 ds1307->nvram = devm_kzalloc(&client->dev, 1133 ds1307->nvram = devm_kzalloc(&client->dev,
955 sizeof(struct bin_attribute), 1134 sizeof(struct bin_attribute),
956 GFP_KERNEL); 1135 GFP_KERNEL);
957 if (!ds1307->nvram) { 1136 if (!ds1307->nvram) {
958 err = -ENOMEM; 1137 dev_err(&client->dev, "cannot allocate memory for nvram sysfs\n");
959 goto err_irq; 1138 } else {
1139
1140 ds1307->nvram->attr.name = "nvram";
1141 ds1307->nvram->attr.mode = S_IRUGO | S_IWUSR;
1142
1143 sysfs_bin_attr_init(ds1307->nvram);
1144
1145 ds1307->nvram->read = ds1307_nvram_read;
1146 ds1307->nvram->write = ds1307_nvram_write;
1147 ds1307->nvram->size = chip->nvram_size;
1148 ds1307->nvram_offset = chip->nvram_offset;
1149
1150 err = sysfs_create_bin_file(&client->dev.kobj,
1151 ds1307->nvram);
1152 if (err) {
1153 dev_err(&client->dev,
1154 "unable to create sysfs file: %s\n",
1155 ds1307->nvram->attr.name);
1156 } else {
1157 set_bit(HAS_NVRAM, &ds1307->flags);
1158 dev_info(&client->dev, "%zu bytes nvram\n",
1159 ds1307->nvram->size);
1160 }
960 } 1161 }
961 ds1307->nvram->attr.name = "nvram";
962 ds1307->nvram->attr.mode = S_IRUGO | S_IWUSR;
963 sysfs_bin_attr_init(ds1307->nvram);
964 ds1307->nvram->read = ds1307_nvram_read;
965 ds1307->nvram->write = ds1307_nvram_write;
966 ds1307->nvram->size = chip->nvram_size;
967 ds1307->nvram_offset = chip->nvram_offset;
968 err = sysfs_create_bin_file(&client->dev.kobj, ds1307->nvram);
969 if (err)
970 goto err_irq;
971 set_bit(HAS_NVRAM, &ds1307->flags);
972 dev_info(&client->dev, "%zu bytes nvram\n", ds1307->nvram->size);
973 } 1162 }
974 1163
975 return 0; 1164 return 0;
976 1165
977err_irq:
978 free_irq(client->irq, client);
979exit: 1166exit:
980 return err; 1167 return err;
981} 1168}
diff --git a/drivers/rtc/rtc-ds1347.c b/drivers/rtc/rtc-ds1347.c
new file mode 100644
index 000000000000..c82b4c050326
--- /dev/null
+++ b/drivers/rtc/rtc-ds1347.c
@@ -0,0 +1,166 @@
1/* rtc-ds1347.c
2 *
3 * Driver for Dallas Semiconductor DS1347 Low Current, SPI Compatible
4 * Real Time Clock
5 *
6 * Author : Raghavendra Chandra Ganiga <ravi23ganiga@gmail.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12 */
13
14#include <linux/init.h>
15#include <linux/module.h>
16#include <linux/device.h>
17#include <linux/platform_device.h>
18#include <linux/rtc.h>
19#include <linux/spi/spi.h>
20#include <linux/bcd.h>
21
22/* Registers in ds1347 rtc */
23
24#define DS1347_SECONDS_REG 0x01
25#define DS1347_MINUTES_REG 0x03
26#define DS1347_HOURS_REG 0x05
27#define DS1347_DATE_REG 0x07
28#define DS1347_MONTH_REG 0x09
29#define DS1347_DAY_REG 0x0B
30#define DS1347_YEAR_REG 0x0D
31#define DS1347_CONTROL_REG 0x0F
32#define DS1347_STATUS_REG 0x17
33#define DS1347_CLOCK_BURST 0x3F
34
35static int ds1347_read_reg(struct device *dev, unsigned char address,
36 unsigned char *data)
37{
38 struct spi_device *spi = to_spi_device(dev);
39
40 *data = address | 0x80;
41
42 return spi_write_then_read(spi, data, 1, data, 1);
43}
44
45static int ds1347_write_reg(struct device *dev, unsigned char address,
46 unsigned char data)
47{
48 struct spi_device *spi = to_spi_device(dev);
49 unsigned char buf[2];
50
51 buf[0] = address & 0x7F;
52 buf[1] = data;
53
54 return spi_write_then_read(spi, buf, 2, NULL, 0);
55}
56
57static int ds1347_read_time(struct device *dev, struct rtc_time *dt)
58{
59 struct spi_device *spi = to_spi_device(dev);
60 int err;
61 unsigned char buf[8];
62
63 buf[0] = DS1347_CLOCK_BURST | 0x80;
64
65 err = spi_write_then_read(spi, buf, 1, buf, 8);
66 if (err)
67 return err;
68
69 dt->tm_sec = bcd2bin(buf[0]);
70 dt->tm_min = bcd2bin(buf[1]);
71 dt->tm_hour = bcd2bin(buf[2] & 0x3F);
72 dt->tm_mday = bcd2bin(buf[3]);
73 dt->tm_mon = bcd2bin(buf[4]) - 1;
74 dt->tm_wday = bcd2bin(buf[5]) - 1;
75 dt->tm_year = bcd2bin(buf[6]) + 100;
76
77 return rtc_valid_tm(dt);
78}
79
80static int ds1347_set_time(struct device *dev, struct rtc_time *dt)
81{
82 struct spi_device *spi = to_spi_device(dev);
83 unsigned char buf[9];
84
85 buf[0] = DS1347_CLOCK_BURST & 0x7F;
86 buf[1] = bin2bcd(dt->tm_sec);
87 buf[2] = bin2bcd(dt->tm_min);
88 buf[3] = (bin2bcd(dt->tm_hour) & 0x3F);
89 buf[4] = bin2bcd(dt->tm_mday);
90 buf[5] = bin2bcd(dt->tm_mon + 1);
91 buf[6] = bin2bcd(dt->tm_wday + 1);
92
93 /* year in linux is from 1900 i.e in range of 100
94 in rtc it is from 00 to 99 */
95 dt->tm_year = dt->tm_year % 100;
96
97 buf[7] = bin2bcd(dt->tm_year);
98 buf[8] = bin2bcd(0x00);
99
100 /* write the rtc settings */
101 return spi_write_then_read(spi, buf, 9, NULL, 0);
102}
103
104static const struct rtc_class_ops ds1347_rtc_ops = {
105 .read_time = ds1347_read_time,
106 .set_time = ds1347_set_time,
107};
108
109static int ds1347_probe(struct spi_device *spi)
110{
111 struct rtc_device *rtc;
112 unsigned char data;
113 int res;
114
115 /* spi setup with ds1347 in mode 3 and bits per word as 8 */
116 spi->mode = SPI_MODE_3;
117 spi->bits_per_word = 8;
118 spi_setup(spi);
119
120 /* RTC Settings */
121 res = ds1347_read_reg(&spi->dev, DS1347_SECONDS_REG, &data);
122 if (res)
123 return res;
124
125 /* Disable the write protect of rtc */
126 ds1347_read_reg(&spi->dev, DS1347_CONTROL_REG, &data);
127 data = data & ~(1<<7);
128 ds1347_write_reg(&spi->dev, DS1347_CONTROL_REG, data);
129
130 /* Enable the oscillator , disable the oscillator stop flag,
131 and glitch filter to reduce current consumption */
132 ds1347_read_reg(&spi->dev, DS1347_STATUS_REG, &data);
133 data = data & 0x1B;
134 ds1347_write_reg(&spi->dev, DS1347_STATUS_REG, data);
135
136 /* display the settings */
137 ds1347_read_reg(&spi->dev, DS1347_CONTROL_REG, &data);
138 dev_info(&spi->dev, "DS1347 RTC CTRL Reg = 0x%02x\n", data);
139
140 ds1347_read_reg(&spi->dev, DS1347_STATUS_REG, &data);
141 dev_info(&spi->dev, "DS1347 RTC Status Reg = 0x%02x\n", data);
142
143 rtc = devm_rtc_device_register(&spi->dev, "ds1347",
144 &ds1347_rtc_ops, THIS_MODULE);
145
146 if (IS_ERR(rtc))
147 return PTR_ERR(rtc);
148
149 spi_set_drvdata(spi, rtc);
150
151 return 0;
152}
153
154static struct spi_driver ds1347_driver = {
155 .driver = {
156 .name = "ds1347",
157 .owner = THIS_MODULE,
158 },
159 .probe = ds1347_probe,
160};
161
162module_spi_driver(ds1347_driver);
163
164MODULE_DESCRIPTION("DS1347 SPI RTC DRIVER");
165MODULE_AUTHOR("Raghavendra C Ganiga <ravi23ganiga@gmail.com>");
166MODULE_LICENSE("GPL v2");
diff --git a/drivers/rtc/rtc-ds1390.c b/drivers/rtc/rtc-ds1390.c
index be9d8c0a7e3a..e67bfcb3a1aa 100644
--- a/drivers/rtc/rtc-ds1390.c
+++ b/drivers/rtc/rtc-ds1390.c
@@ -132,10 +132,9 @@ static int ds1390_probe(struct spi_device *spi)
132 spi_setup(spi); 132 spi_setup(spi);
133 133
134 chip = devm_kzalloc(&spi->dev, sizeof(*chip), GFP_KERNEL); 134 chip = devm_kzalloc(&spi->dev, sizeof(*chip), GFP_KERNEL);
135 if (!chip) { 135 if (!chip)
136 dev_err(&spi->dev, "unable to allocate device memory\n");
137 return -ENOMEM; 136 return -ENOMEM;
138 } 137
139 spi_set_drvdata(spi, chip); 138 spi_set_drvdata(spi, chip);
140 139
141 res = ds1390_get_reg(&spi->dev, DS1390_REG_SECONDS, &tmp); 140 res = ds1390_get_reg(&spi->dev, DS1390_REG_SECONDS, &tmp);
diff --git a/drivers/rtc/rtc-ds1511.c b/drivers/rtc/rtc-ds1511.c
index bc7b4fcf603c..b13d1399b81a 100644
--- a/drivers/rtc/rtc-ds1511.c
+++ b/drivers/rtc/rtc-ds1511.c
@@ -371,8 +371,7 @@ ds1511_interrupt(int irq, void *dev_id)
371 events |= RTC_UF; 371 events |= RTC_UF;
372 else 372 else
373 events |= RTC_AF; 373 events |= RTC_AF;
374 if (likely(pdata->rtc)) 374 rtc_update_irq(pdata->rtc, 1, events);
375 rtc_update_irq(pdata->rtc, 1, events);
376 } 375 }
377 spin_unlock(&pdata->lock); 376 spin_unlock(&pdata->lock);
378 return events ? IRQ_HANDLED : IRQ_NONE; 377 return events ? IRQ_HANDLED : IRQ_NONE;
@@ -473,7 +472,6 @@ static struct bin_attribute ds1511_nvram_attr = {
473 472
474static int ds1511_rtc_probe(struct platform_device *pdev) 473static int ds1511_rtc_probe(struct platform_device *pdev)
475{ 474{
476 struct rtc_device *rtc;
477 struct resource *res; 475 struct resource *res;
478 struct rtc_plat_data *pdata; 476 struct rtc_plat_data *pdata;
479 int ret = 0; 477 int ret = 0;
@@ -512,6 +510,12 @@ static int ds1511_rtc_probe(struct platform_device *pdev)
512 510
513 spin_lock_init(&pdata->lock); 511 spin_lock_init(&pdata->lock);
514 platform_set_drvdata(pdev, pdata); 512 platform_set_drvdata(pdev, pdata);
513
514 pdata->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
515 &ds1511_rtc_ops, THIS_MODULE);
516 if (IS_ERR(pdata->rtc))
517 return PTR_ERR(pdata->rtc);
518
515 /* 519 /*
516 * if the platform has an interrupt in mind for this device, 520 * if the platform has an interrupt in mind for this device,
517 * then by all means, set it 521 * then by all means, set it
@@ -526,15 +530,12 @@ static int ds1511_rtc_probe(struct platform_device *pdev)
526 } 530 }
527 } 531 }
528 532
529 rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &ds1511_rtc_ops,
530 THIS_MODULE);
531 if (IS_ERR(rtc))
532 return PTR_ERR(rtc);
533 pdata->rtc = rtc;
534
535 ret = sysfs_create_bin_file(&pdev->dev.kobj, &ds1511_nvram_attr); 533 ret = sysfs_create_bin_file(&pdev->dev.kobj, &ds1511_nvram_attr);
534 if (ret)
535 dev_err(&pdev->dev, "Unable to create sysfs entry: %s\n",
536 ds1511_nvram_attr.attr.name);
536 537
537 return ret; 538 return 0;
538} 539}
539 540
540static int ds1511_rtc_remove(struct platform_device *pdev) 541static int ds1511_rtc_remove(struct platform_device *pdev)
diff --git a/drivers/rtc/rtc-ds1553.c b/drivers/rtc/rtc-ds1553.c
index fd31571941f5..ab56893aac73 100644
--- a/drivers/rtc/rtc-ds1553.c
+++ b/drivers/rtc/rtc-ds1553.c
@@ -206,8 +206,7 @@ static irqreturn_t ds1553_rtc_interrupt(int irq, void *dev_id)
206 events |= RTC_UF; 206 events |= RTC_UF;
207 else 207 else
208 events |= RTC_AF; 208 events |= RTC_AF;
209 if (likely(pdata->rtc)) 209 rtc_update_irq(pdata->rtc, 1, events);
210 rtc_update_irq(pdata->rtc, 1, events);
211 } 210 }
212 spin_unlock(&pdata->lock); 211 spin_unlock(&pdata->lock);
213 return events ? IRQ_HANDLED : IRQ_NONE; 212 return events ? IRQ_HANDLED : IRQ_NONE;
@@ -278,7 +277,6 @@ static struct bin_attribute ds1553_nvram_attr = {
278 277
279static int ds1553_rtc_probe(struct platform_device *pdev) 278static int ds1553_rtc_probe(struct platform_device *pdev)
280{ 279{
281 struct rtc_device *rtc;
282 struct resource *res; 280 struct resource *res;
283 unsigned int cen, sec; 281 unsigned int cen, sec;
284 struct rtc_plat_data *pdata; 282 struct rtc_plat_data *pdata;
@@ -311,6 +309,12 @@ static int ds1553_rtc_probe(struct platform_device *pdev)
311 spin_lock_init(&pdata->lock); 309 spin_lock_init(&pdata->lock);
312 pdata->last_jiffies = jiffies; 310 pdata->last_jiffies = jiffies;
313 platform_set_drvdata(pdev, pdata); 311 platform_set_drvdata(pdev, pdata);
312
313 pdata->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
314 &ds1553_rtc_ops, THIS_MODULE);
315 if (IS_ERR(pdata->rtc))
316 return PTR_ERR(pdata->rtc);
317
314 if (pdata->irq > 0) { 318 if (pdata->irq > 0) {
315 writeb(0, ioaddr + RTC_INTERRUPTS); 319 writeb(0, ioaddr + RTC_INTERRUPTS);
316 if (devm_request_irq(&pdev->dev, pdata->irq, 320 if (devm_request_irq(&pdev->dev, pdata->irq,
@@ -321,15 +325,12 @@ static int ds1553_rtc_probe(struct platform_device *pdev)
321 } 325 }
322 } 326 }
323 327
324 rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
325 &ds1553_rtc_ops, THIS_MODULE);
326 if (IS_ERR(rtc))
327 return PTR_ERR(rtc);
328 pdata->rtc = rtc;
329
330 ret = sysfs_create_bin_file(&pdev->dev.kobj, &ds1553_nvram_attr); 328 ret = sysfs_create_bin_file(&pdev->dev.kobj, &ds1553_nvram_attr);
329 if (ret)
330 dev_err(&pdev->dev, "unable to create sysfs file: %s\n",
331 ds1553_nvram_attr.attr.name);
331 332
332 return ret; 333 return 0;
333} 334}
334 335
335static int ds1553_rtc_remove(struct platform_device *pdev) 336static int ds1553_rtc_remove(struct platform_device *pdev)
diff --git a/drivers/rtc/rtc-ds1672.c b/drivers/rtc/rtc-ds1672.c
index 18e2d8471472..a4888dbca2e1 100644
--- a/drivers/rtc/rtc-ds1672.c
+++ b/drivers/rtc/rtc-ds1672.c
@@ -177,8 +177,9 @@ static int ds1672_probe(struct i2c_client *client,
177 177
178 /* read control register */ 178 /* read control register */
179 err = ds1672_get_control(client, &control); 179 err = ds1672_get_control(client, &control);
180 if (err) 180 if (err) {
181 goto exit_devreg; 181 dev_warn(&client->dev, "Unable to read the control register\n");
182 }
182 183
183 if (control & DS1672_REG_CONTROL_EOSC) 184 if (control & DS1672_REG_CONTROL_EOSC)
184 dev_warn(&client->dev, "Oscillator not enabled. " 185 dev_warn(&client->dev, "Oscillator not enabled. "
@@ -187,12 +188,10 @@ static int ds1672_probe(struct i2c_client *client,
187 /* Register sysfs hooks */ 188 /* Register sysfs hooks */
188 err = device_create_file(&client->dev, &dev_attr_control); 189 err = device_create_file(&client->dev, &dev_attr_control);
189 if (err) 190 if (err)
190 goto exit_devreg; 191 dev_err(&client->dev, "Unable to create sysfs entry: %s\n",
192 dev_attr_control.attr.name);
191 193
192 return 0; 194 return 0;
193
194 exit_devreg:
195 return err;
196} 195}
197 196
198static struct i2c_device_id ds1672_id[] = { 197static struct i2c_device_id ds1672_id[] = {
diff --git a/drivers/rtc/rtc-ds1742.c b/drivers/rtc/rtc-ds1742.c
index 5a1f3b2a8f1e..942103dac30f 100644
--- a/drivers/rtc/rtc-ds1742.c
+++ b/drivers/rtc/rtc-ds1742.c
@@ -204,8 +204,11 @@ static int ds1742_rtc_probe(struct platform_device *pdev)
204 return PTR_ERR(rtc); 204 return PTR_ERR(rtc);
205 205
206 ret = sysfs_create_bin_file(&pdev->dev.kobj, &pdata->nvram_attr); 206 ret = sysfs_create_bin_file(&pdev->dev.kobj, &pdata->nvram_attr);
207 if (ret)
208 dev_err(&pdev->dev, "Unable to create sysfs entry: %s\n",
209 pdata->nvram_attr.attr.name);
207 210
208 return ret; 211 return 0;
209} 212}
210 213
211static int ds1742_rtc_remove(struct platform_device *pdev) 214static int ds1742_rtc_remove(struct platform_device *pdev)
diff --git a/drivers/rtc/rtc-ds3232.c b/drivers/rtc/rtc-ds3232.c
index b83bb5a527f8..adaf06c41479 100644
--- a/drivers/rtc/rtc-ds3232.c
+++ b/drivers/rtc/rtc-ds3232.c
@@ -57,6 +57,7 @@ struct ds3232 {
57 * in the remove function. 57 * in the remove function.
58 */ 58 */
59 struct mutex mutex; 59 struct mutex mutex;
60 bool suspended;
60 int exiting; 61 int exiting;
61}; 62};
62 63
@@ -345,7 +346,15 @@ static irqreturn_t ds3232_irq(int irq, void *dev_id)
345 struct ds3232 *ds3232 = i2c_get_clientdata(client); 346 struct ds3232 *ds3232 = i2c_get_clientdata(client);
346 347
347 disable_irq_nosync(irq); 348 disable_irq_nosync(irq);
348 schedule_work(&ds3232->work); 349
350 /*
351 * If rtc as a wakeup source, can't schedule the work
352 * at system resume flow, because at this time the i2c bus
353 * has not been resumed.
354 */
355 if (!ds3232->suspended)
356 schedule_work(&ds3232->work);
357
349 return IRQ_HANDLED; 358 return IRQ_HANDLED;
350} 359}
351 360
@@ -363,22 +372,26 @@ static void ds3232_work(struct work_struct *work)
363 372
364 if (stat & DS3232_REG_SR_A1F) { 373 if (stat & DS3232_REG_SR_A1F) {
365 control = i2c_smbus_read_byte_data(client, DS3232_REG_CR); 374 control = i2c_smbus_read_byte_data(client, DS3232_REG_CR);
366 if (control < 0) 375 if (control < 0) {
367 goto out; 376 pr_warn("Read DS3232 Control Register error."
368 /* disable alarm1 interrupt */ 377 "Disable IRQ%d.\n", client->irq);
369 control &= ~(DS3232_REG_CR_A1IE); 378 } else {
370 i2c_smbus_write_byte_data(client, DS3232_REG_CR, control); 379 /* disable alarm1 interrupt */
371 380 control &= ~(DS3232_REG_CR_A1IE);
372 /* clear the alarm pend flag */ 381 i2c_smbus_write_byte_data(client, DS3232_REG_CR,
373 stat &= ~DS3232_REG_SR_A1F; 382 control);
374 i2c_smbus_write_byte_data(client, DS3232_REG_SR, stat); 383
375 384 /* clear the alarm pend flag */
376 rtc_update_irq(ds3232->rtc, 1, RTC_AF | RTC_IRQF); 385 stat &= ~DS3232_REG_SR_A1F;
386 i2c_smbus_write_byte_data(client, DS3232_REG_SR, stat);
387
388 rtc_update_irq(ds3232->rtc, 1, RTC_AF | RTC_IRQF);
389
390 if (!ds3232->exiting)
391 enable_irq(client->irq);
392 }
377 } 393 }
378 394
379out:
380 if (!ds3232->exiting)
381 enable_irq(client->irq);
382unlock: 395unlock:
383 mutex_unlock(&ds3232->mutex); 396 mutex_unlock(&ds3232->mutex);
384} 397}
@@ -411,23 +424,17 @@ static int ds3232_probe(struct i2c_client *client,
411 if (ret) 424 if (ret)
412 return ret; 425 return ret;
413 426
414 ds3232->rtc = devm_rtc_device_register(&client->dev, client->name, 427 if (client->irq > 0) {
415 &ds3232_rtc_ops, THIS_MODULE); 428 ret = devm_request_irq(&client->dev, client->irq, ds3232_irq,
416 if (IS_ERR(ds3232->rtc)) { 429 IRQF_SHARED, "ds3232", client);
417 dev_err(&client->dev, "unable to register the class device\n");
418 return PTR_ERR(ds3232->rtc);
419 }
420
421 if (client->irq >= 0) {
422 ret = devm_request_irq(&client->dev, client->irq, ds3232_irq, 0,
423 "ds3232", client);
424 if (ret) { 430 if (ret) {
425 dev_err(&client->dev, "unable to request IRQ\n"); 431 dev_err(&client->dev, "unable to request IRQ\n");
426 return ret;
427 } 432 }
433 device_init_wakeup(&client->dev, 1);
428 } 434 }
429 435 ds3232->rtc = devm_rtc_device_register(&client->dev, client->name,
430 return 0; 436 &ds3232_rtc_ops, THIS_MODULE);
437 return PTR_ERR_OR_ZERO(ds3232->rtc);
431} 438}
432 439
433static int ds3232_remove(struct i2c_client *client) 440static int ds3232_remove(struct i2c_client *client)
@@ -446,6 +453,42 @@ static int ds3232_remove(struct i2c_client *client)
446 return 0; 453 return 0;
447} 454}
448 455
456#ifdef CONFIG_PM_SLEEP
457static int ds3232_suspend(struct device *dev)
458{
459 struct ds3232 *ds3232 = dev_get_drvdata(dev);
460 struct i2c_client *client = to_i2c_client(dev);
461
462 if (device_can_wakeup(dev)) {
463 ds3232->suspended = true;
464 irq_set_irq_wake(client->irq, 1);
465 }
466
467 return 0;
468}
469
470static int ds3232_resume(struct device *dev)
471{
472 struct ds3232 *ds3232 = dev_get_drvdata(dev);
473 struct i2c_client *client = to_i2c_client(dev);
474
475 if (ds3232->suspended) {
476 ds3232->suspended = false;
477
478 /* Clear the hardware alarm pend flag */
479 schedule_work(&ds3232->work);
480
481 irq_set_irq_wake(client->irq, 0);
482 }
483
484 return 0;
485}
486#endif
487
488static const struct dev_pm_ops ds3232_pm_ops = {
489 SET_SYSTEM_SLEEP_PM_OPS(ds3232_suspend, ds3232_resume)
490};
491
449static const struct i2c_device_id ds3232_id[] = { 492static const struct i2c_device_id ds3232_id[] = {
450 { "ds3232", 0 }, 493 { "ds3232", 0 },
451 { } 494 { }
@@ -456,6 +499,7 @@ static struct i2c_driver ds3232_driver = {
456 .driver = { 499 .driver = {
457 .name = "rtc-ds3232", 500 .name = "rtc-ds3232",
458 .owner = THIS_MODULE, 501 .owner = THIS_MODULE,
502 .pm = &ds3232_pm_ops,
459 }, 503 },
460 .probe = ds3232_probe, 504 .probe = ds3232_probe,
461 .remove = ds3232_remove, 505 .remove = ds3232_remove,
diff --git a/drivers/rtc/rtc-imxdi.c b/drivers/rtc/rtc-imxdi.c
index abd7f9091f34..cd741c77e085 100644
--- a/drivers/rtc/rtc-imxdi.c
+++ b/drivers/rtc/rtc-imxdi.c
@@ -401,7 +401,9 @@ static int __init dryice_rtc_probe(struct platform_device *pdev)
401 imxdi->clk = devm_clk_get(&pdev->dev, NULL); 401 imxdi->clk = devm_clk_get(&pdev->dev, NULL);
402 if (IS_ERR(imxdi->clk)) 402 if (IS_ERR(imxdi->clk))
403 return PTR_ERR(imxdi->clk); 403 return PTR_ERR(imxdi->clk);
404 clk_prepare_enable(imxdi->clk); 404 rc = clk_prepare_enable(imxdi->clk);
405 if (rc)
406 return rc;
405 407
406 /* 408 /*
407 * Initialize dryice hardware 409 * Initialize dryice hardware
diff --git a/drivers/rtc/rtc-isl12057.c b/drivers/rtc/rtc-isl12057.c
index 7854a656628f..7e5ead936a04 100644
--- a/drivers/rtc/rtc-isl12057.c
+++ b/drivers/rtc/rtc-isl12057.c
@@ -26,7 +26,6 @@
26#include <linux/rtc.h> 26#include <linux/rtc.h>
27#include <linux/i2c.h> 27#include <linux/i2c.h>
28#include <linux/bcd.h> 28#include <linux/bcd.h>
29#include <linux/rtc.h>
30#include <linux/of.h> 29#include <linux/of.h>
31#include <linux/of_device.h> 30#include <linux/of_device.h>
32#include <linux/regmap.h> 31#include <linux/regmap.h>
diff --git a/drivers/rtc/rtc-jz4740.c b/drivers/rtc/rtc-jz4740.c
index 1b126d2513de..08f5160fb6d4 100644
--- a/drivers/rtc/rtc-jz4740.c
+++ b/drivers/rtc/rtc-jz4740.c
@@ -38,7 +38,6 @@
38#define JZ_RTC_CTRL_ENABLE BIT(0) 38#define JZ_RTC_CTRL_ENABLE BIT(0)
39 39
40struct jz4740_rtc { 40struct jz4740_rtc {
41 struct resource *mem;
42 void __iomem *base; 41 void __iomem *base;
43 42
44 struct rtc_device *rtc; 43 struct rtc_device *rtc;
@@ -216,6 +215,7 @@ static int jz4740_rtc_probe(struct platform_device *pdev)
216 int ret; 215 int ret;
217 struct jz4740_rtc *rtc; 216 struct jz4740_rtc *rtc;
218 uint32_t scratchpad; 217 uint32_t scratchpad;
218 struct resource *mem;
219 219
220 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); 220 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
221 if (!rtc) 221 if (!rtc)
@@ -227,25 +227,10 @@ static int jz4740_rtc_probe(struct platform_device *pdev)
227 return -ENOENT; 227 return -ENOENT;
228 } 228 }
229 229
230 rtc->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 230 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
231 if (!rtc->mem) { 231 rtc->base = devm_ioremap_resource(&pdev->dev, mem);
232 dev_err(&pdev->dev, "Failed to get platform mmio memory\n"); 232 if (IS_ERR(rtc->base))
233 return -ENOENT; 233 return PTR_ERR(rtc->base);
234 }
235
236 rtc->mem = devm_request_mem_region(&pdev->dev, rtc->mem->start,
237 resource_size(rtc->mem), pdev->name);
238 if (!rtc->mem) {
239 dev_err(&pdev->dev, "Failed to request mmio memory region\n");
240 return -EBUSY;
241 }
242
243 rtc->base = devm_ioremap_nocache(&pdev->dev, rtc->mem->start,
244 resource_size(rtc->mem));
245 if (!rtc->base) {
246 dev_err(&pdev->dev, "Failed to ioremap mmio memory\n");
247 return -EBUSY;
248 }
249 234
250 spin_lock_init(&rtc->lock); 235 spin_lock_init(&rtc->lock);
251 236
diff --git a/drivers/rtc/rtc-lpc32xx.c b/drivers/rtc/rtc-lpc32xx.c
index bfdbcb82d069..f130c08c98f8 100644
--- a/drivers/rtc/rtc-lpc32xx.c
+++ b/drivers/rtc/rtc-lpc32xx.c
@@ -211,10 +211,9 @@ static int lpc32xx_rtc_probe(struct platform_device *pdev)
211 } 211 }
212 212
213 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); 213 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
214 if (unlikely(!rtc)) { 214 if (unlikely(!rtc))
215 dev_err(&pdev->dev, "Can't allocate memory\n");
216 return -ENOMEM; 215 return -ENOMEM;
217 } 216
218 rtc->irq = rtcirq; 217 rtc->irq = rtcirq;
219 218
220 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 219 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
diff --git a/drivers/rtc/rtc-mc13xxx.c b/drivers/rtc/rtc-mc13xxx.c
index 77ea9896b5ba..0765606a2d14 100644
--- a/drivers/rtc/rtc-mc13xxx.c
+++ b/drivers/rtc/rtc-mc13xxx.c
@@ -23,6 +23,8 @@
23#define MC13XXX_RTCDAY 22 23#define MC13XXX_RTCDAY 22
24#define MC13XXX_RTCDAYA 23 24#define MC13XXX_RTCDAYA 23
25 25
26#define SEC_PER_DAY (24 * 60 * 60)
27
26struct mc13xxx_rtc { 28struct mc13xxx_rtc {
27 struct rtc_device *rtc; 29 struct rtc_device *rtc;
28 struct mc13xxx *mc13xxx; 30 struct mc13xxx *mc13xxx;
@@ -42,15 +44,15 @@ static int mc13xxx_rtc_irq_enable_unlocked(struct device *dev,
42 return func(priv->mc13xxx, irq); 44 return func(priv->mc13xxx, irq);
43} 45}
44 46
45static int mc13xxx_rtc_irq_enable(struct device *dev, 47static int mc13xxx_rtc_alarm_irq_enable(struct device *dev,
46 unsigned int enabled, int irq) 48 unsigned int enabled)
47{ 49{
48 struct mc13xxx_rtc *priv = dev_get_drvdata(dev); 50 struct mc13xxx_rtc *priv = dev_get_drvdata(dev);
49 int ret; 51 int ret;
50 52
51 mc13xxx_lock(priv->mc13xxx); 53 mc13xxx_lock(priv->mc13xxx);
52 54
53 ret = mc13xxx_rtc_irq_enable_unlocked(dev, enabled, irq); 55 ret = mc13xxx_rtc_irq_enable_unlocked(dev, enabled, MC13XXX_IRQ_TODA);
54 56
55 mc13xxx_unlock(priv->mc13xxx); 57 mc13xxx_unlock(priv->mc13xxx);
56 58
@@ -61,44 +63,27 @@ static int mc13xxx_rtc_read_time(struct device *dev, struct rtc_time *tm)
61{ 63{
62 struct mc13xxx_rtc *priv = dev_get_drvdata(dev); 64 struct mc13xxx_rtc *priv = dev_get_drvdata(dev);
63 unsigned int seconds, days1, days2; 65 unsigned int seconds, days1, days2;
64 unsigned long s1970;
65 int ret;
66
67 mc13xxx_lock(priv->mc13xxx);
68
69 if (!priv->valid) {
70 ret = -ENODATA;
71 goto out;
72 }
73 66
74 ret = mc13xxx_reg_read(priv->mc13xxx, MC13XXX_RTCDAY, &days1); 67 if (!priv->valid)
75 if (unlikely(ret)) 68 return -ENODATA;
76 goto out;
77
78 ret = mc13xxx_reg_read(priv->mc13xxx, MC13XXX_RTCTOD, &seconds);
79 if (unlikely(ret))
80 goto out;
81
82 ret = mc13xxx_reg_read(priv->mc13xxx, MC13XXX_RTCDAY, &days2);
83out:
84 mc13xxx_unlock(priv->mc13xxx);
85 69
86 if (ret) 70 do {
87 return ret; 71 int ret;
88 72
89 if (days2 == days1 + 1) { 73 ret = mc13xxx_reg_read(priv->mc13xxx, MC13XXX_RTCDAY, &days1);
90 if (seconds >= 86400 / 2) 74 if (ret)
91 days2 = days1; 75 return ret;
92 else
93 days1 = days2;
94 }
95 76
96 if (days1 != days2) 77 ret = mc13xxx_reg_read(priv->mc13xxx, MC13XXX_RTCTOD, &seconds);
97 return -EIO; 78 if (ret)
79 return ret;
98 80
99 s1970 = days1 * 86400 + seconds; 81 ret = mc13xxx_reg_read(priv->mc13xxx, MC13XXX_RTCDAY, &days2);
82 if (ret)
83 return ret;
84 } while (days1 != days2);
100 85
101 rtc_time_to_tm(s1970, tm); 86 rtc_time_to_tm(days1 * SEC_PER_DAY + seconds, tm);
102 87
103 return rtc_valid_tm(tm); 88 return rtc_valid_tm(tm);
104} 89}
@@ -110,8 +95,8 @@ static int mc13xxx_rtc_set_mmss(struct device *dev, unsigned long secs)
110 unsigned int alarmseconds; 95 unsigned int alarmseconds;
111 int ret; 96 int ret;
112 97
113 seconds = secs % 86400; 98 seconds = secs % SEC_PER_DAY;
114 days = secs / 86400; 99 days = secs / SEC_PER_DAY;
115 100
116 mc13xxx_lock(priv->mc13xxx); 101 mc13xxx_lock(priv->mc13xxx);
117 102
@@ -123,7 +108,7 @@ static int mc13xxx_rtc_set_mmss(struct device *dev, unsigned long secs)
123 if (unlikely(ret)) 108 if (unlikely(ret))
124 goto out; 109 goto out;
125 110
126 if (alarmseconds < 86400) { 111 if (alarmseconds < SEC_PER_DAY) {
127 ret = mc13xxx_reg_write(priv->mc13xxx, 112 ret = mc13xxx_reg_write(priv->mc13xxx,
128 MC13XXX_RTCTODA, 0x1ffff); 113 MC13XXX_RTCTODA, 0x1ffff);
129 if (unlikely(ret)) 114 if (unlikely(ret))
@@ -147,18 +132,21 @@ static int mc13xxx_rtc_set_mmss(struct device *dev, unsigned long secs)
147 goto out; 132 goto out;
148 133
149 /* restore alarm */ 134 /* restore alarm */
150 if (alarmseconds < 86400) { 135 if (alarmseconds < SEC_PER_DAY) {
151 ret = mc13xxx_reg_write(priv->mc13xxx, 136 ret = mc13xxx_reg_write(priv->mc13xxx,
152 MC13XXX_RTCTODA, alarmseconds); 137 MC13XXX_RTCTODA, alarmseconds);
153 if (unlikely(ret)) 138 if (unlikely(ret))
154 goto out; 139 goto out;
155 } 140 }
156 141
157 ret = mc13xxx_irq_ack(priv->mc13xxx, MC13XXX_IRQ_RTCRST); 142 if (!priv->valid) {
158 if (unlikely(ret)) 143 ret = mc13xxx_irq_ack(priv->mc13xxx, MC13XXX_IRQ_RTCRST);
159 goto out; 144 if (unlikely(ret))
145 goto out;
146
147 ret = mc13xxx_irq_unmask(priv->mc13xxx, MC13XXX_IRQ_RTCRST);
148 }
160 149
161 ret = mc13xxx_irq_unmask(priv->mc13xxx, MC13XXX_IRQ_RTCRST);
162out: 150out:
163 priv->valid = !ret; 151 priv->valid = !ret;
164 152
@@ -180,7 +168,7 @@ static int mc13xxx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm)
180 ret = mc13xxx_reg_read(priv->mc13xxx, MC13XXX_RTCTODA, &seconds); 168 ret = mc13xxx_reg_read(priv->mc13xxx, MC13XXX_RTCTODA, &seconds);
181 if (unlikely(ret)) 169 if (unlikely(ret))
182 goto out; 170 goto out;
183 if (seconds >= 86400) { 171 if (seconds >= SEC_PER_DAY) {
184 ret = -ENODATA; 172 ret = -ENODATA;
185 goto out; 173 goto out;
186 } 174 }
@@ -201,7 +189,7 @@ out:
201 alarm->enabled = enabled; 189 alarm->enabled = enabled;
202 alarm->pending = pending; 190 alarm->pending = pending;
203 191
204 s1970 = days * 86400 + seconds; 192 s1970 = days * SEC_PER_DAY + seconds;
205 193
206 rtc_time_to_tm(s1970, &alarm->time); 194 rtc_time_to_tm(s1970, &alarm->time);
207 dev_dbg(dev, "%s: %lu\n", __func__, s1970); 195 dev_dbg(dev, "%s: %lu\n", __func__, s1970);
@@ -239,8 +227,8 @@ static int mc13xxx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
239 if (unlikely(ret)) 227 if (unlikely(ret))
240 goto out; 228 goto out;
241 229
242 seconds = s1970 % 86400; 230 seconds = s1970 % SEC_PER_DAY;
243 days = s1970 / 86400; 231 days = s1970 / SEC_PER_DAY;
244 232
245 ret = mc13xxx_reg_write(priv->mc13xxx, MC13XXX_RTCDAYA, days); 233 ret = mc13xxx_reg_write(priv->mc13xxx, MC13XXX_RTCDAYA, days);
246 if (unlikely(ret)) 234 if (unlikely(ret))
@@ -259,8 +247,6 @@ static irqreturn_t mc13xxx_rtc_alarm_handler(int irq, void *dev)
259 struct mc13xxx_rtc *priv = dev; 247 struct mc13xxx_rtc *priv = dev;
260 struct mc13xxx *mc13xxx = priv->mc13xxx; 248 struct mc13xxx *mc13xxx = priv->mc13xxx;
261 249
262 dev_dbg(&priv->rtc->dev, "Alarm\n");
263
264 rtc_update_irq(priv->rtc, 1, RTC_IRQF | RTC_AF); 250 rtc_update_irq(priv->rtc, 1, RTC_IRQF | RTC_AF);
265 251
266 mc13xxx_irq_ack(mc13xxx, irq); 252 mc13xxx_irq_ack(mc13xxx, irq);
@@ -273,8 +259,6 @@ static irqreturn_t mc13xxx_rtc_update_handler(int irq, void *dev)
273 struct mc13xxx_rtc *priv = dev; 259 struct mc13xxx_rtc *priv = dev;
274 struct mc13xxx *mc13xxx = priv->mc13xxx; 260 struct mc13xxx *mc13xxx = priv->mc13xxx;
275 261
276 dev_dbg(&priv->rtc->dev, "1HZ\n");
277
278 rtc_update_irq(priv->rtc, 1, RTC_IRQF | RTC_UF); 262 rtc_update_irq(priv->rtc, 1, RTC_IRQF | RTC_UF);
279 263
280 mc13xxx_irq_ack(mc13xxx, irq); 264 mc13xxx_irq_ack(mc13xxx, irq);
@@ -282,12 +266,6 @@ static irqreturn_t mc13xxx_rtc_update_handler(int irq, void *dev)
282 return IRQ_HANDLED; 266 return IRQ_HANDLED;
283} 267}
284 268
285static int mc13xxx_rtc_alarm_irq_enable(struct device *dev,
286 unsigned int enabled)
287{
288 return mc13xxx_rtc_irq_enable(dev, enabled, MC13XXX_IRQ_TODA);
289}
290
291static const struct rtc_class_ops mc13xxx_rtc_ops = { 269static const struct rtc_class_ops mc13xxx_rtc_ops = {
292 .read_time = mc13xxx_rtc_read_time, 270 .read_time = mc13xxx_rtc_read_time,
293 .set_mmss = mc13xxx_rtc_set_mmss, 271 .set_mmss = mc13xxx_rtc_set_mmss,
@@ -301,7 +279,6 @@ static irqreturn_t mc13xxx_rtc_reset_handler(int irq, void *dev)
301 struct mc13xxx_rtc *priv = dev; 279 struct mc13xxx_rtc *priv = dev;
302 struct mc13xxx *mc13xxx = priv->mc13xxx; 280 struct mc13xxx *mc13xxx = priv->mc13xxx;
303 281
304 dev_dbg(&priv->rtc->dev, "RTCRST\n");
305 priv->valid = 0; 282 priv->valid = 0;
306 283
307 mc13xxx_irq_mask(mc13xxx, irq); 284 mc13xxx_irq_mask(mc13xxx, irq);
@@ -314,7 +291,6 @@ static int __init mc13xxx_rtc_probe(struct platform_device *pdev)
314 int ret; 291 int ret;
315 struct mc13xxx_rtc *priv; 292 struct mc13xxx_rtc *priv;
316 struct mc13xxx *mc13xxx; 293 struct mc13xxx *mc13xxx;
317 int rtcrst_pending;
318 294
319 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); 295 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
320 if (!priv) 296 if (!priv)
@@ -322,60 +298,47 @@ static int __init mc13xxx_rtc_probe(struct platform_device *pdev)
322 298
323 mc13xxx = dev_get_drvdata(pdev->dev.parent); 299 mc13xxx = dev_get_drvdata(pdev->dev.parent);
324 priv->mc13xxx = mc13xxx; 300 priv->mc13xxx = mc13xxx;
301 priv->valid = 1;
325 302
326 platform_set_drvdata(pdev, priv); 303 platform_set_drvdata(pdev, priv);
327 304
328 mc13xxx_lock(mc13xxx); 305 mc13xxx_lock(mc13xxx);
329 306
307 mc13xxx_irq_ack(mc13xxx, MC13XXX_IRQ_RTCRST);
308
330 ret = mc13xxx_irq_request(mc13xxx, MC13XXX_IRQ_RTCRST, 309 ret = mc13xxx_irq_request(mc13xxx, MC13XXX_IRQ_RTCRST,
331 mc13xxx_rtc_reset_handler, DRIVER_NAME, priv); 310 mc13xxx_rtc_reset_handler, DRIVER_NAME, priv);
332 if (ret) 311 if (ret)
333 goto err_reset_irq_request; 312 goto err_irq_request;
334
335 ret = mc13xxx_irq_status(mc13xxx, MC13XXX_IRQ_RTCRST,
336 NULL, &rtcrst_pending);
337 if (ret)
338 goto err_reset_irq_status;
339
340 priv->valid = !rtcrst_pending;
341 313
342 ret = mc13xxx_irq_request_nounmask(mc13xxx, MC13XXX_IRQ_1HZ, 314 ret = mc13xxx_irq_request(mc13xxx, MC13XXX_IRQ_1HZ,
343 mc13xxx_rtc_update_handler, DRIVER_NAME, priv); 315 mc13xxx_rtc_update_handler, DRIVER_NAME, priv);
344 if (ret) 316 if (ret)
345 goto err_update_irq_request; 317 goto err_irq_request;
346 318
347 ret = mc13xxx_irq_request_nounmask(mc13xxx, MC13XXX_IRQ_TODA, 319 ret = mc13xxx_irq_request_nounmask(mc13xxx, MC13XXX_IRQ_TODA,
348 mc13xxx_rtc_alarm_handler, DRIVER_NAME, priv); 320 mc13xxx_rtc_alarm_handler, DRIVER_NAME, priv);
349 if (ret) 321 if (ret)
350 goto err_alarm_irq_request; 322 goto err_irq_request;
351 323
352 mc13xxx_unlock(mc13xxx); 324 mc13xxx_unlock(mc13xxx);
353 325
354 priv->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, 326 priv->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
355 &mc13xxx_rtc_ops, THIS_MODULE); 327 &mc13xxx_rtc_ops, THIS_MODULE);
356 if (IS_ERR(priv->rtc)) {
357 ret = PTR_ERR(priv->rtc);
358 328
359 mc13xxx_lock(mc13xxx); 329 return 0;
360
361 mc13xxx_irq_free(mc13xxx, MC13XXX_IRQ_TODA, priv);
362err_alarm_irq_request:
363
364 mc13xxx_irq_free(mc13xxx, MC13XXX_IRQ_1HZ, priv);
365err_update_irq_request:
366
367err_reset_irq_status:
368 330
369 mc13xxx_irq_free(mc13xxx, MC13XXX_IRQ_RTCRST, priv); 331err_irq_request:
370err_reset_irq_request: 332 mc13xxx_irq_free(mc13xxx, MC13XXX_IRQ_TODA, priv);
333 mc13xxx_irq_free(mc13xxx, MC13XXX_IRQ_1HZ, priv);
334 mc13xxx_irq_free(mc13xxx, MC13XXX_IRQ_RTCRST, priv);
371 335
372 mc13xxx_unlock(mc13xxx); 336 mc13xxx_unlock(mc13xxx);
373 }
374 337
375 return ret; 338 return ret;
376} 339}
377 340
378static int __exit mc13xxx_rtc_remove(struct platform_device *pdev) 341static int mc13xxx_rtc_remove(struct platform_device *pdev)
379{ 342{
380 struct mc13xxx_rtc *priv = platform_get_drvdata(pdev); 343 struct mc13xxx_rtc *priv = platform_get_drvdata(pdev);
381 344
@@ -404,7 +367,7 @@ MODULE_DEVICE_TABLE(platform, mc13xxx_rtc_idtable);
404 367
405static struct platform_driver mc13xxx_rtc_driver = { 368static struct platform_driver mc13xxx_rtc_driver = {
406 .id_table = mc13xxx_rtc_idtable, 369 .id_table = mc13xxx_rtc_idtable,
407 .remove = __exit_p(mc13xxx_rtc_remove), 370 .remove = mc13xxx_rtc_remove,
408 .driver = { 371 .driver = {
409 .name = DRIVER_NAME, 372 .name = DRIVER_NAME,
410 .owner = THIS_MODULE, 373 .owner = THIS_MODULE,
diff --git a/drivers/rtc/rtc-moxart.c b/drivers/rtc/rtc-moxart.c
index c29dee0946e6..c31846238871 100644
--- a/drivers/rtc/rtc-moxart.c
+++ b/drivers/rtc/rtc-moxart.c
@@ -247,10 +247,8 @@ static int moxart_rtc_probe(struct platform_device *pdev)
247 int ret = 0; 247 int ret = 0;
248 248
249 moxart_rtc = devm_kzalloc(&pdev->dev, sizeof(*moxart_rtc), GFP_KERNEL); 249 moxart_rtc = devm_kzalloc(&pdev->dev, sizeof(*moxart_rtc), GFP_KERNEL);
250 if (!moxart_rtc) { 250 if (!moxart_rtc)
251 dev_err(&pdev->dev, "devm_kzalloc failed\n");
252 return -ENOMEM; 251 return -ENOMEM;
253 }
254 252
255 moxart_rtc->gpio_data = of_get_named_gpio(pdev->dev.of_node, 253 moxart_rtc->gpio_data = of_get_named_gpio(pdev->dev.of_node,
256 "gpio-rtc-data", 0); 254 "gpio-rtc-data", 0);
diff --git a/drivers/rtc/rtc-nuc900.c b/drivers/rtc/rtc-nuc900.c
index 248653c74b80..a53da0958e95 100644
--- a/drivers/rtc/rtc-nuc900.c
+++ b/drivers/rtc/rtc-nuc900.c
@@ -229,10 +229,9 @@ static int __init nuc900_rtc_probe(struct platform_device *pdev)
229 229
230 nuc900_rtc = devm_kzalloc(&pdev->dev, sizeof(struct nuc900_rtc), 230 nuc900_rtc = devm_kzalloc(&pdev->dev, sizeof(struct nuc900_rtc),
231 GFP_KERNEL); 231 GFP_KERNEL);
232 if (!nuc900_rtc) { 232 if (!nuc900_rtc)
233 dev_err(&pdev->dev, "kzalloc nuc900_rtc failed\n");
234 return -ENOMEM; 233 return -ENOMEM;
235 } 234
236 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 235 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
237 nuc900_rtc->rtc_reg = devm_ioremap_resource(&pdev->dev, res); 236 nuc900_rtc->rtc_reg = devm_ioremap_resource(&pdev->dev, res);
238 if (IS_ERR(nuc900_rtc->rtc_reg)) 237 if (IS_ERR(nuc900_rtc->rtc_reg))
diff --git a/drivers/rtc/rtc-palmas.c b/drivers/rtc/rtc-palmas.c
index fffb7d3449d7..c360d62fb3f6 100644
--- a/drivers/rtc/rtc-palmas.c
+++ b/drivers/rtc/rtc-palmas.c
@@ -348,9 +348,8 @@ static int palmas_rtc_resume(struct device *dev)
348} 348}
349#endif 349#endif
350 350
351static const struct dev_pm_ops palmas_rtc_pm_ops = { 351static SIMPLE_DEV_PM_OPS(palmas_rtc_pm_ops, palmas_rtc_suspend,
352 SET_SYSTEM_SLEEP_PM_OPS(palmas_rtc_suspend, palmas_rtc_resume) 352 palmas_rtc_resume);
353};
354 353
355#ifdef CONFIG_OF 354#ifdef CONFIG_OF
356static struct of_device_id of_palmas_rtc_match[] = { 355static struct of_device_id of_palmas_rtc_match[] = {
diff --git a/drivers/rtc/rtc-pm8xxx.c b/drivers/rtc/rtc-pm8xxx.c
index 03f8f75d5af2..197699f358c7 100644
--- a/drivers/rtc/rtc-pm8xxx.c
+++ b/drivers/rtc/rtc-pm8xxx.c
@@ -9,18 +9,16 @@
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details. 10 * GNU General Public License for more details.
11 */ 11 */
12 12#include <linux/of.h>
13#include <linux/module.h> 13#include <linux/module.h>
14#include <linux/init.h> 14#include <linux/init.h>
15#include <linux/rtc.h> 15#include <linux/rtc.h>
16#include <linux/platform_device.h>
16#include <linux/pm.h> 17#include <linux/pm.h>
18#include <linux/regmap.h>
17#include <linux/slab.h> 19#include <linux/slab.h>
18#include <linux/spinlock.h> 20#include <linux/spinlock.h>
19 21
20#include <linux/mfd/pm8xxx/core.h>
21#include <linux/mfd/pm8xxx/rtc.h>
22
23
24/* RTC Register offsets from RTC CTRL REG */ 22/* RTC Register offsets from RTC CTRL REG */
25#define PM8XXX_ALARM_CTRL_OFFSET 0x01 23#define PM8XXX_ALARM_CTRL_OFFSET 0x01
26#define PM8XXX_RTC_WRITE_OFFSET 0x02 24#define PM8XXX_RTC_WRITE_OFFSET 0x02
@@ -37,6 +35,8 @@
37/** 35/**
38 * struct pm8xxx_rtc - rtc driver internal structure 36 * struct pm8xxx_rtc - rtc driver internal structure
39 * @rtc: rtc device for this driver. 37 * @rtc: rtc device for this driver.
38 * @regmap: regmap used to access RTC registers
39 * @allow_set_time: indicates whether writing to the RTC is allowed
40 * @rtc_alarm_irq: rtc alarm irq number. 40 * @rtc_alarm_irq: rtc alarm irq number.
41 * @rtc_base: address of rtc control register. 41 * @rtc_base: address of rtc control register.
42 * @rtc_read_base: base address of read registers. 42 * @rtc_read_base: base address of read registers.
@@ -48,55 +48,19 @@
48 */ 48 */
49struct pm8xxx_rtc { 49struct pm8xxx_rtc {
50 struct rtc_device *rtc; 50 struct rtc_device *rtc;
51 struct regmap *regmap;
52 bool allow_set_time;
51 int rtc_alarm_irq; 53 int rtc_alarm_irq;
52 int rtc_base; 54 int rtc_base;
53 int rtc_read_base; 55 int rtc_read_base;
54 int rtc_write_base; 56 int rtc_write_base;
55 int alarm_rw_base; 57 int alarm_rw_base;
56 u8 ctrl_reg; 58 u8 ctrl_reg;
57 struct device *rtc_dev; 59 struct device *rtc_dev;
58 spinlock_t ctrl_reg_lock; 60 spinlock_t ctrl_reg_lock;
59}; 61};
60 62
61/* 63/*
62 * The RTC registers need to be read/written one byte at a time. This is a
63 * hardware limitation.
64 */
65static int pm8xxx_read_wrapper(struct pm8xxx_rtc *rtc_dd, u8 *rtc_val,
66 int base, int count)
67{
68 int i, rc;
69 struct device *parent = rtc_dd->rtc_dev->parent;
70
71 for (i = 0; i < count; i++) {
72 rc = pm8xxx_readb(parent, base + i, &rtc_val[i]);
73 if (rc < 0) {
74 dev_err(rtc_dd->rtc_dev, "PMIC read failed\n");
75 return rc;
76 }
77 }
78
79 return 0;
80}
81
82static int pm8xxx_write_wrapper(struct pm8xxx_rtc *rtc_dd, u8 *rtc_val,
83 int base, int count)
84{
85 int i, rc;
86 struct device *parent = rtc_dd->rtc_dev->parent;
87
88 for (i = 0; i < count; i++) {
89 rc = pm8xxx_writeb(parent, base + i, rtc_val[i]);
90 if (rc < 0) {
91 dev_err(rtc_dd->rtc_dev, "PMIC write failed\n");
92 return rc;
93 }
94 }
95
96 return 0;
97}
98
99/*
100 * Steps to write the RTC registers. 64 * Steps to write the RTC registers.
101 * 1. Disable alarm if enabled. 65 * 1. Disable alarm if enabled.
102 * 2. Write 0x00 to LSB. 66 * 2. Write 0x00 to LSB.
@@ -107,9 +71,12 @@ static int pm8xxx_rtc_set_time(struct device *dev, struct rtc_time *tm)
107{ 71{
108 int rc, i; 72 int rc, i;
109 unsigned long secs, irq_flags; 73 unsigned long secs, irq_flags;
110 u8 value[NUM_8_BIT_RTC_REGS], reg = 0, alarm_enabled = 0, ctrl_reg; 74 u8 value[NUM_8_BIT_RTC_REGS], alarm_enabled = 0, ctrl_reg;
111 struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev); 75 struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev);
112 76
77 if (!rtc_dd->allow_set_time)
78 return -EACCES;
79
113 rtc_tm_to_time(tm, &secs); 80 rtc_tm_to_time(tm, &secs);
114 81
115 for (i = 0; i < NUM_8_BIT_RTC_REGS; i++) { 82 for (i = 0; i < NUM_8_BIT_RTC_REGS; i++) {
@@ -125,47 +92,43 @@ static int pm8xxx_rtc_set_time(struct device *dev, struct rtc_time *tm)
125 if (ctrl_reg & PM8xxx_RTC_ALARM_ENABLE) { 92 if (ctrl_reg & PM8xxx_RTC_ALARM_ENABLE) {
126 alarm_enabled = 1; 93 alarm_enabled = 1;
127 ctrl_reg &= ~PM8xxx_RTC_ALARM_ENABLE; 94 ctrl_reg &= ~PM8xxx_RTC_ALARM_ENABLE;
128 rc = pm8xxx_write_wrapper(rtc_dd, &ctrl_reg, rtc_dd->rtc_base, 95 rc = regmap_write(rtc_dd->regmap, rtc_dd->rtc_base, ctrl_reg);
129 1); 96 if (rc) {
130 if (rc < 0) { 97 dev_err(dev, "Write to RTC control register failed\n");
131 dev_err(dev, "Write to RTC control register "
132 "failed\n");
133 goto rtc_rw_fail; 98 goto rtc_rw_fail;
134 } 99 }
135 rtc_dd->ctrl_reg = ctrl_reg; 100 rtc_dd->ctrl_reg = ctrl_reg;
136 } else 101 } else {
137 spin_unlock_irqrestore(&rtc_dd->ctrl_reg_lock, irq_flags); 102 spin_unlock_irqrestore(&rtc_dd->ctrl_reg_lock, irq_flags);
103 }
138 104
139 /* Write 0 to Byte[0] */ 105 /* Write 0 to Byte[0] */
140 reg = 0; 106 rc = regmap_write(rtc_dd->regmap, rtc_dd->rtc_write_base, 0);
141 rc = pm8xxx_write_wrapper(rtc_dd, &reg, rtc_dd->rtc_write_base, 1); 107 if (rc) {
142 if (rc < 0) {
143 dev_err(dev, "Write to RTC write data register failed\n"); 108 dev_err(dev, "Write to RTC write data register failed\n");
144 goto rtc_rw_fail; 109 goto rtc_rw_fail;
145 } 110 }
146 111
147 /* Write Byte[1], Byte[2], Byte[3] */ 112 /* Write Byte[1], Byte[2], Byte[3] */
148 rc = pm8xxx_write_wrapper(rtc_dd, value + 1, 113 rc = regmap_bulk_write(rtc_dd->regmap, rtc_dd->rtc_write_base + 1,
149 rtc_dd->rtc_write_base + 1, 3); 114 &value[1], sizeof(value) - 1);
150 if (rc < 0) { 115 if (rc) {
151 dev_err(dev, "Write to RTC write data register failed\n"); 116 dev_err(dev, "Write to RTC write data register failed\n");
152 goto rtc_rw_fail; 117 goto rtc_rw_fail;
153 } 118 }
154 119
155 /* Write Byte[0] */ 120 /* Write Byte[0] */
156 rc = pm8xxx_write_wrapper(rtc_dd, value, rtc_dd->rtc_write_base, 1); 121 rc = regmap_write(rtc_dd->regmap, rtc_dd->rtc_write_base, value[0]);
157 if (rc < 0) { 122 if (rc) {
158 dev_err(dev, "Write to RTC write data register failed\n"); 123 dev_err(dev, "Write to RTC write data register failed\n");
159 goto rtc_rw_fail; 124 goto rtc_rw_fail;
160 } 125 }
161 126
162 if (alarm_enabled) { 127 if (alarm_enabled) {
163 ctrl_reg |= PM8xxx_RTC_ALARM_ENABLE; 128 ctrl_reg |= PM8xxx_RTC_ALARM_ENABLE;
164 rc = pm8xxx_write_wrapper(rtc_dd, &ctrl_reg, rtc_dd->rtc_base, 129 rc = regmap_write(rtc_dd->regmap, rtc_dd->rtc_base, ctrl_reg);
165 1); 130 if (rc) {
166 if (rc < 0) { 131 dev_err(dev, "Write to RTC control register failed\n");
167 dev_err(dev, "Write to RTC control register "
168 "failed\n");
169 goto rtc_rw_fail; 132 goto rtc_rw_fail;
170 } 133 }
171 rtc_dd->ctrl_reg = ctrl_reg; 134 rtc_dd->ctrl_reg = ctrl_reg;
@@ -181,13 +144,14 @@ rtc_rw_fail:
181static int pm8xxx_rtc_read_time(struct device *dev, struct rtc_time *tm) 144static int pm8xxx_rtc_read_time(struct device *dev, struct rtc_time *tm)
182{ 145{
183 int rc; 146 int rc;
184 u8 value[NUM_8_BIT_RTC_REGS], reg; 147 u8 value[NUM_8_BIT_RTC_REGS];
185 unsigned long secs; 148 unsigned long secs;
149 unsigned int reg;
186 struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev); 150 struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev);
187 151
188 rc = pm8xxx_read_wrapper(rtc_dd, value, rtc_dd->rtc_read_base, 152 rc = regmap_bulk_read(rtc_dd->regmap, rtc_dd->rtc_read_base,
189 NUM_8_BIT_RTC_REGS); 153 value, sizeof(value));
190 if (rc < 0) { 154 if (rc) {
191 dev_err(dev, "RTC read data register failed\n"); 155 dev_err(dev, "RTC read data register failed\n");
192 return rc; 156 return rc;
193 } 157 }
@@ -196,16 +160,16 @@ static int pm8xxx_rtc_read_time(struct device *dev, struct rtc_time *tm)
196 * Read the LSB again and check if there has been a carry over. 160 * Read the LSB again and check if there has been a carry over.
197 * If there is, redo the read operation. 161 * If there is, redo the read operation.
198 */ 162 */
199 rc = pm8xxx_read_wrapper(rtc_dd, &reg, rtc_dd->rtc_read_base, 1); 163 rc = regmap_read(rtc_dd->regmap, rtc_dd->rtc_read_base, &reg);
200 if (rc < 0) { 164 if (rc < 0) {
201 dev_err(dev, "RTC read data register failed\n"); 165 dev_err(dev, "RTC read data register failed\n");
202 return rc; 166 return rc;
203 } 167 }
204 168
205 if (unlikely(reg < value[0])) { 169 if (unlikely(reg < value[0])) {
206 rc = pm8xxx_read_wrapper(rtc_dd, value, 170 rc = regmap_bulk_read(rtc_dd->regmap, rtc_dd->rtc_read_base,
207 rtc_dd->rtc_read_base, NUM_8_BIT_RTC_REGS); 171 value, sizeof(value));
208 if (rc < 0) { 172 if (rc) {
209 dev_err(dev, "RTC read data register failed\n"); 173 dev_err(dev, "RTC read data register failed\n");
210 return rc; 174 return rc;
211 } 175 }
@@ -222,8 +186,8 @@ static int pm8xxx_rtc_read_time(struct device *dev, struct rtc_time *tm)
222 } 186 }
223 187
224 dev_dbg(dev, "secs = %lu, h:m:s == %d:%d:%d, d/m/y = %d/%d/%d\n", 188 dev_dbg(dev, "secs = %lu, h:m:s == %d:%d:%d, d/m/y = %d/%d/%d\n",
225 secs, tm->tm_hour, tm->tm_min, tm->tm_sec, 189 secs, tm->tm_hour, tm->tm_min, tm->tm_sec,
226 tm->tm_mday, tm->tm_mon, tm->tm_year); 190 tm->tm_mday, tm->tm_mon, tm->tm_year);
227 191
228 return 0; 192 return 0;
229} 193}
@@ -244,19 +208,22 @@ static int pm8xxx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
244 208
245 spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags); 209 spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags);
246 210
247 rc = pm8xxx_write_wrapper(rtc_dd, value, rtc_dd->alarm_rw_base, 211 rc = regmap_bulk_write(rtc_dd->regmap, rtc_dd->alarm_rw_base, value,
248 NUM_8_BIT_RTC_REGS); 212 sizeof(value));
249 if (rc < 0) { 213 if (rc) {
250 dev_err(dev, "Write to RTC ALARM register failed\n"); 214 dev_err(dev, "Write to RTC ALARM register failed\n");
251 goto rtc_rw_fail; 215 goto rtc_rw_fail;
252 } 216 }
253 217
254 ctrl_reg = rtc_dd->ctrl_reg; 218 ctrl_reg = rtc_dd->ctrl_reg;
255 ctrl_reg = alarm->enabled ? (ctrl_reg | PM8xxx_RTC_ALARM_ENABLE) :
256 (ctrl_reg & ~PM8xxx_RTC_ALARM_ENABLE);
257 219
258 rc = pm8xxx_write_wrapper(rtc_dd, &ctrl_reg, rtc_dd->rtc_base, 1); 220 if (alarm->enabled)
259 if (rc < 0) { 221 ctrl_reg |= PM8xxx_RTC_ALARM_ENABLE;
222 else
223 ctrl_reg &= ~PM8xxx_RTC_ALARM_ENABLE;
224
225 rc = regmap_write(rtc_dd->regmap, rtc_dd->rtc_base, ctrl_reg);
226 if (rc) {
260 dev_err(dev, "Write to RTC control register failed\n"); 227 dev_err(dev, "Write to RTC control register failed\n");
261 goto rtc_rw_fail; 228 goto rtc_rw_fail;
262 } 229 }
@@ -264,9 +231,9 @@ static int pm8xxx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
264 rtc_dd->ctrl_reg = ctrl_reg; 231 rtc_dd->ctrl_reg = ctrl_reg;
265 232
266 dev_dbg(dev, "Alarm Set for h:r:s=%d:%d:%d, d/m/y=%d/%d/%d\n", 233 dev_dbg(dev, "Alarm Set for h:r:s=%d:%d:%d, d/m/y=%d/%d/%d\n",
267 alarm->time.tm_hour, alarm->time.tm_min, 234 alarm->time.tm_hour, alarm->time.tm_min,
268 alarm->time.tm_sec, alarm->time.tm_mday, 235 alarm->time.tm_sec, alarm->time.tm_mday,
269 alarm->time.tm_mon, alarm->time.tm_year); 236 alarm->time.tm_mon, alarm->time.tm_year);
270rtc_rw_fail: 237rtc_rw_fail:
271 spin_unlock_irqrestore(&rtc_dd->ctrl_reg_lock, irq_flags); 238 spin_unlock_irqrestore(&rtc_dd->ctrl_reg_lock, irq_flags);
272 return rc; 239 return rc;
@@ -279,9 +246,9 @@ static int pm8xxx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm)
279 unsigned long secs; 246 unsigned long secs;
280 struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev); 247 struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev);
281 248
282 rc = pm8xxx_read_wrapper(rtc_dd, value, rtc_dd->alarm_rw_base, 249 rc = regmap_bulk_read(rtc_dd->regmap, rtc_dd->alarm_rw_base, value,
283 NUM_8_BIT_RTC_REGS); 250 sizeof(value));
284 if (rc < 0) { 251 if (rc) {
285 dev_err(dev, "RTC alarm time read failed\n"); 252 dev_err(dev, "RTC alarm time read failed\n");
286 return rc; 253 return rc;
287 } 254 }
@@ -297,9 +264,9 @@ static int pm8xxx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm)
297 } 264 }
298 265
299 dev_dbg(dev, "Alarm set for - h:r:s=%d:%d:%d, d/m/y=%d/%d/%d\n", 266 dev_dbg(dev, "Alarm set for - h:r:s=%d:%d:%d, d/m/y=%d/%d/%d\n",
300 alarm->time.tm_hour, alarm->time.tm_min, 267 alarm->time.tm_hour, alarm->time.tm_min,
301 alarm->time.tm_sec, alarm->time.tm_mday, 268 alarm->time.tm_sec, alarm->time.tm_mday,
302 alarm->time.tm_mon, alarm->time.tm_year); 269 alarm->time.tm_mon, alarm->time.tm_year);
303 270
304 return 0; 271 return 0;
305} 272}
@@ -312,12 +279,16 @@ static int pm8xxx_rtc_alarm_irq_enable(struct device *dev, unsigned int enable)
312 u8 ctrl_reg; 279 u8 ctrl_reg;
313 280
314 spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags); 281 spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags);
282
315 ctrl_reg = rtc_dd->ctrl_reg; 283 ctrl_reg = rtc_dd->ctrl_reg;
316 ctrl_reg = (enable) ? (ctrl_reg | PM8xxx_RTC_ALARM_ENABLE) :
317 (ctrl_reg & ~PM8xxx_RTC_ALARM_ENABLE);
318 284
319 rc = pm8xxx_write_wrapper(rtc_dd, &ctrl_reg, rtc_dd->rtc_base, 1); 285 if (enable)
320 if (rc < 0) { 286 ctrl_reg |= PM8xxx_RTC_ALARM_ENABLE;
287 else
288 ctrl_reg &= ~PM8xxx_RTC_ALARM_ENABLE;
289
290 rc = regmap_write(rtc_dd->regmap, rtc_dd->rtc_base, ctrl_reg);
291 if (rc) {
321 dev_err(dev, "Write to RTC control register failed\n"); 292 dev_err(dev, "Write to RTC control register failed\n");
322 goto rtc_rw_fail; 293 goto rtc_rw_fail;
323 } 294 }
@@ -329,8 +300,9 @@ rtc_rw_fail:
329 return rc; 300 return rc;
330} 301}
331 302
332static struct rtc_class_ops pm8xxx_rtc_ops = { 303static const struct rtc_class_ops pm8xxx_rtc_ops = {
333 .read_time = pm8xxx_rtc_read_time, 304 .read_time = pm8xxx_rtc_read_time,
305 .set_time = pm8xxx_rtc_set_time,
334 .set_alarm = pm8xxx_rtc_set_alarm, 306 .set_alarm = pm8xxx_rtc_set_alarm,
335 .read_alarm = pm8xxx_rtc_read_alarm, 307 .read_alarm = pm8xxx_rtc_read_alarm,
336 .alarm_irq_enable = pm8xxx_rtc_alarm_irq_enable, 308 .alarm_irq_enable = pm8xxx_rtc_alarm_irq_enable,
@@ -339,7 +311,7 @@ static struct rtc_class_ops pm8xxx_rtc_ops = {
339static irqreturn_t pm8xxx_alarm_trigger(int irq, void *dev_id) 311static irqreturn_t pm8xxx_alarm_trigger(int irq, void *dev_id)
340{ 312{
341 struct pm8xxx_rtc *rtc_dd = dev_id; 313 struct pm8xxx_rtc *rtc_dd = dev_id;
342 u8 ctrl_reg; 314 unsigned int ctrl_reg;
343 int rc; 315 int rc;
344 unsigned long irq_flags; 316 unsigned long irq_flags;
345 317
@@ -351,11 +323,11 @@ static irqreturn_t pm8xxx_alarm_trigger(int irq, void *dev_id)
351 ctrl_reg = rtc_dd->ctrl_reg; 323 ctrl_reg = rtc_dd->ctrl_reg;
352 ctrl_reg &= ~PM8xxx_RTC_ALARM_ENABLE; 324 ctrl_reg &= ~PM8xxx_RTC_ALARM_ENABLE;
353 325
354 rc = pm8xxx_write_wrapper(rtc_dd, &ctrl_reg, rtc_dd->rtc_base, 1); 326 rc = regmap_write(rtc_dd->regmap, rtc_dd->rtc_base, ctrl_reg);
355 if (rc < 0) { 327 if (rc) {
356 spin_unlock_irqrestore(&rtc_dd->ctrl_reg_lock, irq_flags); 328 spin_unlock_irqrestore(&rtc_dd->ctrl_reg_lock, irq_flags);
357 dev_err(rtc_dd->rtc_dev, "Write to RTC control register " 329 dev_err(rtc_dd->rtc_dev,
358 "failed\n"); 330 "Write to RTC control register failed\n");
359 goto rtc_alarm_handled; 331 goto rtc_alarm_handled;
360 } 332 }
361 333
@@ -363,61 +335,71 @@ static irqreturn_t pm8xxx_alarm_trigger(int irq, void *dev_id)
363 spin_unlock_irqrestore(&rtc_dd->ctrl_reg_lock, irq_flags); 335 spin_unlock_irqrestore(&rtc_dd->ctrl_reg_lock, irq_flags);
364 336
365 /* Clear RTC alarm register */ 337 /* Clear RTC alarm register */
366 rc = pm8xxx_read_wrapper(rtc_dd, &ctrl_reg, rtc_dd->rtc_base + 338 rc = regmap_read(rtc_dd->regmap,
367 PM8XXX_ALARM_CTRL_OFFSET, 1); 339 rtc_dd->rtc_base + PM8XXX_ALARM_CTRL_OFFSET,
368 if (rc < 0) { 340 &ctrl_reg);
369 dev_err(rtc_dd->rtc_dev, "RTC Alarm control register read " 341 if (rc) {
370 "failed\n"); 342 dev_err(rtc_dd->rtc_dev,
343 "RTC Alarm control register read failed\n");
371 goto rtc_alarm_handled; 344 goto rtc_alarm_handled;
372 } 345 }
373 346
374 ctrl_reg &= ~PM8xxx_RTC_ALARM_CLEAR; 347 ctrl_reg &= ~PM8xxx_RTC_ALARM_CLEAR;
375 rc = pm8xxx_write_wrapper(rtc_dd, &ctrl_reg, rtc_dd->rtc_base + 348 rc = regmap_write(rtc_dd->regmap,
376 PM8XXX_ALARM_CTRL_OFFSET, 1); 349 rtc_dd->rtc_base + PM8XXX_ALARM_CTRL_OFFSET,
377 if (rc < 0) 350 ctrl_reg);
378 dev_err(rtc_dd->rtc_dev, "Write to RTC Alarm control register" 351 if (rc)
379 " failed\n"); 352 dev_err(rtc_dd->rtc_dev,
353 "Write to RTC Alarm control register failed\n");
380 354
381rtc_alarm_handled: 355rtc_alarm_handled:
382 return IRQ_HANDLED; 356 return IRQ_HANDLED;
383} 357}
384 358
359/*
360 * Hardcoded RTC bases until IORESOURCE_REG mapping is figured out
361 */
362static const struct of_device_id pm8xxx_id_table[] = {
363 { .compatible = "qcom,pm8921-rtc", .data = (void *) 0x11D },
364 { .compatible = "qcom,pm8058-rtc", .data = (void *) 0x1E8 },
365 { },
366};
367MODULE_DEVICE_TABLE(of, pm8xxx_id_table);
368
385static int pm8xxx_rtc_probe(struct platform_device *pdev) 369static int pm8xxx_rtc_probe(struct platform_device *pdev)
386{ 370{
387 int rc; 371 int rc;
388 u8 ctrl_reg; 372 unsigned int ctrl_reg;
389 bool rtc_write_enable = false;
390 struct pm8xxx_rtc *rtc_dd; 373 struct pm8xxx_rtc *rtc_dd;
391 struct resource *rtc_resource; 374 const struct of_device_id *match;
392 const struct pm8xxx_rtc_platform_data *pdata =
393 dev_get_platdata(&pdev->dev);
394 375
395 if (pdata != NULL) 376 match = of_match_node(pm8xxx_id_table, pdev->dev.of_node);
396 rtc_write_enable = pdata->rtc_write_enable; 377 if (!match)
378 return -ENXIO;
397 379
398 rtc_dd = devm_kzalloc(&pdev->dev, sizeof(*rtc_dd), GFP_KERNEL); 380 rtc_dd = devm_kzalloc(&pdev->dev, sizeof(*rtc_dd), GFP_KERNEL);
399 if (rtc_dd == NULL) { 381 if (rtc_dd == NULL)
400 dev_err(&pdev->dev, "Unable to allocate memory!\n");
401 return -ENOMEM; 382 return -ENOMEM;
402 }
403 383
404 /* Initialise spinlock to protect RTC control register */ 384 /* Initialise spinlock to protect RTC control register */
405 spin_lock_init(&rtc_dd->ctrl_reg_lock); 385 spin_lock_init(&rtc_dd->ctrl_reg_lock);
406 386
387 rtc_dd->regmap = dev_get_regmap(pdev->dev.parent, NULL);
388 if (!rtc_dd->regmap) {
389 dev_err(&pdev->dev, "Parent regmap unavailable.\n");
390 return -ENXIO;
391 }
392
407 rtc_dd->rtc_alarm_irq = platform_get_irq(pdev, 0); 393 rtc_dd->rtc_alarm_irq = platform_get_irq(pdev, 0);
408 if (rtc_dd->rtc_alarm_irq < 0) { 394 if (rtc_dd->rtc_alarm_irq < 0) {
409 dev_err(&pdev->dev, "Alarm IRQ resource absent!\n"); 395 dev_err(&pdev->dev, "Alarm IRQ resource absent!\n");
410 return -ENXIO; 396 return -ENXIO;
411 } 397 }
412 398
413 rtc_resource = platform_get_resource_byname(pdev, IORESOURCE_IO, 399 rtc_dd->allow_set_time = of_property_read_bool(pdev->dev.of_node,
414 "pmic_rtc_base"); 400 "allow-set-time");
415 if (!(rtc_resource && rtc_resource->start)) {
416 dev_err(&pdev->dev, "RTC IO resource absent!\n");
417 return -ENXIO;
418 }
419 401
420 rtc_dd->rtc_base = rtc_resource->start; 402 rtc_dd->rtc_base = (long) match->data;
421 403
422 /* Setup RTC register addresses */ 404 /* Setup RTC register addresses */
423 rtc_dd->rtc_write_base = rtc_dd->rtc_base + PM8XXX_RTC_WRITE_OFFSET; 405 rtc_dd->rtc_write_base = rtc_dd->rtc_base + PM8XXX_RTC_WRITE_OFFSET;
@@ -427,64 +409,52 @@ static int pm8xxx_rtc_probe(struct platform_device *pdev)
427 rtc_dd->rtc_dev = &pdev->dev; 409 rtc_dd->rtc_dev = &pdev->dev;
428 410
429 /* Check if the RTC is on, else turn it on */ 411 /* Check if the RTC is on, else turn it on */
430 rc = pm8xxx_read_wrapper(rtc_dd, &ctrl_reg, rtc_dd->rtc_base, 1); 412 rc = regmap_read(rtc_dd->regmap, rtc_dd->rtc_base, &ctrl_reg);
431 if (rc < 0) { 413 if (rc) {
432 dev_err(&pdev->dev, "RTC control register read failed!\n"); 414 dev_err(&pdev->dev, "RTC control register read failed!\n");
433 return rc; 415 return rc;
434 } 416 }
435 417
436 if (!(ctrl_reg & PM8xxx_RTC_ENABLE)) { 418 if (!(ctrl_reg & PM8xxx_RTC_ENABLE)) {
437 ctrl_reg |= PM8xxx_RTC_ENABLE; 419 ctrl_reg |= PM8xxx_RTC_ENABLE;
438 rc = pm8xxx_write_wrapper(rtc_dd, &ctrl_reg, rtc_dd->rtc_base, 420 rc = regmap_write(rtc_dd->regmap, rtc_dd->rtc_base, ctrl_reg);
439 1); 421 if (rc) {
440 if (rc < 0) { 422 dev_err(&pdev->dev,
441 dev_err(&pdev->dev, "Write to RTC control register " 423 "Write to RTC control register failed\n");
442 "failed\n");
443 return rc; 424 return rc;
444 } 425 }
445 } 426 }
446 427
447 rtc_dd->ctrl_reg = ctrl_reg; 428 rtc_dd->ctrl_reg = ctrl_reg;
448 if (rtc_write_enable == true)
449 pm8xxx_rtc_ops.set_time = pm8xxx_rtc_set_time;
450 429
451 platform_set_drvdata(pdev, rtc_dd); 430 platform_set_drvdata(pdev, rtc_dd);
452 431
432 device_init_wakeup(&pdev->dev, 1);
433
453 /* Register the RTC device */ 434 /* Register the RTC device */
454 rtc_dd->rtc = devm_rtc_device_register(&pdev->dev, "pm8xxx_rtc", 435 rtc_dd->rtc = devm_rtc_device_register(&pdev->dev, "pm8xxx_rtc",
455 &pm8xxx_rtc_ops, THIS_MODULE); 436 &pm8xxx_rtc_ops, THIS_MODULE);
456 if (IS_ERR(rtc_dd->rtc)) { 437 if (IS_ERR(rtc_dd->rtc)) {
457 dev_err(&pdev->dev, "%s: RTC registration failed (%ld)\n", 438 dev_err(&pdev->dev, "%s: RTC registration failed (%ld)\n",
458 __func__, PTR_ERR(rtc_dd->rtc)); 439 __func__, PTR_ERR(rtc_dd->rtc));
459 return PTR_ERR(rtc_dd->rtc); 440 return PTR_ERR(rtc_dd->rtc);
460 } 441 }
461 442
462 /* Request the alarm IRQ */ 443 /* Request the alarm IRQ */
463 rc = request_any_context_irq(rtc_dd->rtc_alarm_irq, 444 rc = devm_request_any_context_irq(&pdev->dev, rtc_dd->rtc_alarm_irq,
464 pm8xxx_alarm_trigger, IRQF_TRIGGER_RISING, 445 pm8xxx_alarm_trigger,
465 "pm8xxx_rtc_alarm", rtc_dd); 446 IRQF_TRIGGER_RISING,
447 "pm8xxx_rtc_alarm", rtc_dd);
466 if (rc < 0) { 448 if (rc < 0) {
467 dev_err(&pdev->dev, "Request IRQ failed (%d)\n", rc); 449 dev_err(&pdev->dev, "Request IRQ failed (%d)\n", rc);
468 return rc; 450 return rc;
469 } 451 }
470 452
471 device_init_wakeup(&pdev->dev, 1);
472
473 dev_dbg(&pdev->dev, "Probe success !!\n"); 453 dev_dbg(&pdev->dev, "Probe success !!\n");
474 454
475 return 0; 455 return 0;
476} 456}
477 457
478static int pm8xxx_rtc_remove(struct platform_device *pdev)
479{
480 struct pm8xxx_rtc *rtc_dd = platform_get_drvdata(pdev);
481
482 device_init_wakeup(&pdev->dev, 0);
483 free_irq(rtc_dd->rtc_alarm_irq, rtc_dd);
484
485 return 0;
486}
487
488#ifdef CONFIG_PM_SLEEP 458#ifdef CONFIG_PM_SLEEP
489static int pm8xxx_rtc_resume(struct device *dev) 459static int pm8xxx_rtc_resume(struct device *dev)
490{ 460{
@@ -507,15 +477,17 @@ static int pm8xxx_rtc_suspend(struct device *dev)
507} 477}
508#endif 478#endif
509 479
510static SIMPLE_DEV_PM_OPS(pm8xxx_rtc_pm_ops, pm8xxx_rtc_suspend, pm8xxx_rtc_resume); 480static SIMPLE_DEV_PM_OPS(pm8xxx_rtc_pm_ops,
481 pm8xxx_rtc_suspend,
482 pm8xxx_rtc_resume);
511 483
512static struct platform_driver pm8xxx_rtc_driver = { 484static struct platform_driver pm8xxx_rtc_driver = {
513 .probe = pm8xxx_rtc_probe, 485 .probe = pm8xxx_rtc_probe,
514 .remove = pm8xxx_rtc_remove,
515 .driver = { 486 .driver = {
516 .name = PM8XXX_RTC_DEV_NAME, 487 .name = "rtc-pm8xxx",
517 .owner = THIS_MODULE, 488 .owner = THIS_MODULE,
518 .pm = &pm8xxx_rtc_pm_ops, 489 .pm = &pm8xxx_rtc_pm_ops,
490 .of_match_table = pm8xxx_id_table,
519 }, 491 },
520}; 492};
521 493
diff --git a/drivers/rtc/rtc-rv3029c2.c b/drivers/rtc/rtc-rv3029c2.c
index 1a779a67ff66..e9ac5a43be1a 100644
--- a/drivers/rtc/rtc-rv3029c2.c
+++ b/drivers/rtc/rtc-rv3029c2.c
@@ -395,6 +395,12 @@ static int rv3029c2_probe(struct i2c_client *client,
395 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_EMUL)) 395 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_EMUL))
396 return -ENODEV; 396 return -ENODEV;
397 397
398 rc = rv3029c2_i2c_get_sr(client, buf);
399 if (rc < 0) {
400 dev_err(&client->dev, "reading status failed\n");
401 return rc;
402 }
403
398 rtc = devm_rtc_device_register(&client->dev, client->name, 404 rtc = devm_rtc_device_register(&client->dev, client->name,
399 &rv3029c2_rtc_ops, THIS_MODULE); 405 &rv3029c2_rtc_ops, THIS_MODULE);
400 406
@@ -403,12 +409,6 @@ static int rv3029c2_probe(struct i2c_client *client,
403 409
404 i2c_set_clientdata(client, rtc); 410 i2c_set_clientdata(client, rtc);
405 411
406 rc = rv3029c2_i2c_get_sr(client, buf);
407 if (rc < 0) {
408 dev_err(&client->dev, "reading status failed\n");
409 return rc;
410 }
411
412 return 0; 412 return 0;
413} 413}
414 414
diff --git a/drivers/rtc/rtc-rx8025.c b/drivers/rtc/rtc-rx8025.c
index 8fa23eabcb68..e6298e02b400 100644
--- a/drivers/rtc/rtc-rx8025.c
+++ b/drivers/rtc/rtc-rx8025.c
@@ -551,7 +551,6 @@ static int rx8025_probe(struct i2c_client *client,
551 551
552 rx8025 = devm_kzalloc(&client->dev, sizeof(*rx8025), GFP_KERNEL); 552 rx8025 = devm_kzalloc(&client->dev, sizeof(*rx8025), GFP_KERNEL);
553 if (!rx8025) { 553 if (!rx8025) {
554 dev_err(&adapter->dev, "failed to alloc memory\n");
555 err = -ENOMEM; 554 err = -ENOMEM;
556 goto errout; 555 goto errout;
557 } 556 }
diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c
index 7afd373b9595..4958a363b2c7 100644
--- a/drivers/rtc/rtc-s3c.c
+++ b/drivers/rtc/rtc-s3c.c
@@ -48,8 +48,8 @@ struct s3c_rtc_drv_data {
48 48
49static struct clk *rtc_clk; 49static struct clk *rtc_clk;
50static void __iomem *s3c_rtc_base; 50static void __iomem *s3c_rtc_base;
51static int s3c_rtc_alarmno = NO_IRQ; 51static int s3c_rtc_alarmno;
52static int s3c_rtc_tickno = NO_IRQ; 52static int s3c_rtc_tickno;
53static enum s3c_cpu_type s3c_rtc_cpu_type; 53static enum s3c_cpu_type s3c_rtc_cpu_type;
54 54
55static DEFINE_SPINLOCK(s3c_rtc_pie_lock); 55static DEFINE_SPINLOCK(s3c_rtc_pie_lock);
@@ -580,10 +580,12 @@ static int s3c_rtc_suspend(struct device *dev)
580 580
581 clk_enable(rtc_clk); 581 clk_enable(rtc_clk);
582 /* save TICNT for anyone using periodic interrupts */ 582 /* save TICNT for anyone using periodic interrupts */
583 ticnt_save = readb(s3c_rtc_base + S3C2410_TICNT);
584 if (s3c_rtc_cpu_type == TYPE_S3C64XX) { 583 if (s3c_rtc_cpu_type == TYPE_S3C64XX) {
585 ticnt_en_save = readw(s3c_rtc_base + S3C2410_RTCCON); 584 ticnt_en_save = readw(s3c_rtc_base + S3C2410_RTCCON);
586 ticnt_en_save &= S3C64XX_RTCCON_TICEN; 585 ticnt_en_save &= S3C64XX_RTCCON_TICEN;
586 ticnt_save = readl(s3c_rtc_base + S3C2410_TICNT);
587 } else {
588 ticnt_save = readb(s3c_rtc_base + S3C2410_TICNT);
587 } 589 }
588 s3c_rtc_enable(pdev, 0); 590 s3c_rtc_enable(pdev, 0);
589 591
@@ -605,10 +607,15 @@ static int s3c_rtc_resume(struct device *dev)
605 607
606 clk_enable(rtc_clk); 608 clk_enable(rtc_clk);
607 s3c_rtc_enable(pdev, 1); 609 s3c_rtc_enable(pdev, 1);
608 writeb(ticnt_save, s3c_rtc_base + S3C2410_TICNT); 610 if (s3c_rtc_cpu_type == TYPE_S3C64XX) {
609 if (s3c_rtc_cpu_type == TYPE_S3C64XX && ticnt_en_save) { 611 writel(ticnt_save, s3c_rtc_base + S3C2410_TICNT);
610 tmp = readw(s3c_rtc_base + S3C2410_RTCCON); 612 if (ticnt_en_save) {
611 writew(tmp | ticnt_en_save, s3c_rtc_base + S3C2410_RTCCON); 613 tmp = readw(s3c_rtc_base + S3C2410_RTCCON);
614 writew(tmp | ticnt_en_save,
615 s3c_rtc_base + S3C2410_RTCCON);
616 }
617 } else {
618 writeb(ticnt_save, s3c_rtc_base + S3C2410_TICNT);
612 } 619 }
613 620
614 if (device_may_wakeup(dev) && wake_en) { 621 if (device_may_wakeup(dev) && wake_en) {
diff --git a/drivers/rtc/rtc-sirfsoc.c b/drivers/rtc/rtc-sirfsoc.c
index 3eb3642ae299..76e38007ba90 100644
--- a/drivers/rtc/rtc-sirfsoc.c
+++ b/drivers/rtc/rtc-sirfsoc.c
@@ -264,12 +264,8 @@ static int sirfsoc_rtc_probe(struct platform_device *pdev)
264 264
265 rtcdrv = devm_kzalloc(&pdev->dev, 265 rtcdrv = devm_kzalloc(&pdev->dev,
266 sizeof(struct sirfsoc_rtc_drv), GFP_KERNEL); 266 sizeof(struct sirfsoc_rtc_drv), GFP_KERNEL);
267 if (rtcdrv == NULL) { 267 if (rtcdrv == NULL)
268 dev_err(&pdev->dev,
269 "%s: can't alloc mem for drv struct\n",
270 pdev->name);
271 return -ENOMEM; 268 return -ENOMEM;
272 }
273 269
274 err = of_property_read_u32(np, "reg", &rtcdrv->rtc_base); 270 err = of_property_read_u32(np, "reg", &rtcdrv->rtc_base);
275 if (err) { 271 if (err) {
@@ -335,39 +331,29 @@ static int sirfsoc_rtc_remove(struct platform_device *pdev)
335 return 0; 331 return 0;
336} 332}
337 333
338#ifdef CONFIG_PM 334#ifdef CONFIG_PM_SLEEP
339
340static int sirfsoc_rtc_suspend(struct device *dev) 335static int sirfsoc_rtc_suspend(struct device *dev)
341{ 336{
342 struct platform_device *pdev = to_platform_device(dev); 337 struct sirfsoc_rtc_drv *rtcdrv = dev_get_drvdata(dev);
343 struct sirfsoc_rtc_drv *rtcdrv = platform_get_drvdata(pdev);
344 rtcdrv->overflow_rtc = 338 rtcdrv->overflow_rtc =
345 sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_SW_VALUE); 339 sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_SW_VALUE);
346 340
347 rtcdrv->saved_counter = 341 rtcdrv->saved_counter =
348 sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_CN); 342 sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_CN);
349 rtcdrv->saved_overflow_rtc = rtcdrv->overflow_rtc; 343 rtcdrv->saved_overflow_rtc = rtcdrv->overflow_rtc;
350 if (device_may_wakeup(&pdev->dev) && !enable_irq_wake(rtcdrv->irq)) 344 if (device_may_wakeup(dev) && !enable_irq_wake(rtcdrv->irq))
351 rtcdrv->irq_wake = 1; 345 rtcdrv->irq_wake = 1;
352 346
353 return 0; 347 return 0;
354} 348}
355 349
356static int sirfsoc_rtc_freeze(struct device *dev) 350static int sirfsoc_rtc_resume(struct device *dev)
357{
358 sirfsoc_rtc_suspend(dev);
359
360 return 0;
361}
362
363static int sirfsoc_rtc_thaw(struct device *dev)
364{ 351{
365 u32 tmp; 352 u32 tmp;
366 struct sirfsoc_rtc_drv *rtcdrv; 353 struct sirfsoc_rtc_drv *rtcdrv = dev_get_drvdata(dev);
367 rtcdrv = dev_get_drvdata(dev);
368 354
369 /* 355 /*
370 * if resume from snapshot and the rtc power is losed, 356 * if resume from snapshot and the rtc power is lost,
371 * restroe the rtc settings 357 * restroe the rtc settings
372 */ 358 */
373 if (SIRFSOC_RTC_CLK != sirfsoc_rtc_iobrg_readl( 359 if (SIRFSOC_RTC_CLK != sirfsoc_rtc_iobrg_readl(
@@ -407,57 +393,23 @@ static int sirfsoc_rtc_thaw(struct device *dev)
407 sirfsoc_rtc_iobrg_writel(rtcdrv->overflow_rtc, 393 sirfsoc_rtc_iobrg_writel(rtcdrv->overflow_rtc,
408 rtcdrv->rtc_base + RTC_SW_VALUE); 394 rtcdrv->rtc_base + RTC_SW_VALUE);
409 395
410 return 0; 396 if (device_may_wakeup(dev) && rtcdrv->irq_wake) {
411}
412
413static int sirfsoc_rtc_resume(struct device *dev)
414{
415 struct platform_device *pdev = to_platform_device(dev);
416 struct sirfsoc_rtc_drv *rtcdrv = platform_get_drvdata(pdev);
417 sirfsoc_rtc_thaw(dev);
418 if (device_may_wakeup(&pdev->dev) && rtcdrv->irq_wake) {
419 disable_irq_wake(rtcdrv->irq); 397 disable_irq_wake(rtcdrv->irq);
420 rtcdrv->irq_wake = 0; 398 rtcdrv->irq_wake = 0;
421 } 399 }
422 400
423 return 0; 401 return 0;
424} 402}
425
426static int sirfsoc_rtc_restore(struct device *dev)
427{
428 struct platform_device *pdev = to_platform_device(dev);
429 struct sirfsoc_rtc_drv *rtcdrv = platform_get_drvdata(pdev);
430
431 if (device_may_wakeup(&pdev->dev) && rtcdrv->irq_wake) {
432 disable_irq_wake(rtcdrv->irq);
433 rtcdrv->irq_wake = 0;
434 }
435 return 0;
436}
437
438#else
439#define sirfsoc_rtc_suspend NULL
440#define sirfsoc_rtc_resume NULL
441#define sirfsoc_rtc_freeze NULL
442#define sirfsoc_rtc_thaw NULL
443#define sirfsoc_rtc_restore NULL
444#endif 403#endif
445 404
446static const struct dev_pm_ops sirfsoc_rtc_pm_ops = { 405static SIMPLE_DEV_PM_OPS(sirfsoc_rtc_pm_ops,
447 .suspend = sirfsoc_rtc_suspend, 406 sirfsoc_rtc_suspend, sirfsoc_rtc_resume);
448 .resume = sirfsoc_rtc_resume,
449 .freeze = sirfsoc_rtc_freeze,
450 .thaw = sirfsoc_rtc_thaw,
451 .restore = sirfsoc_rtc_restore,
452};
453 407
454static struct platform_driver sirfsoc_rtc_driver = { 408static struct platform_driver sirfsoc_rtc_driver = {
455 .driver = { 409 .driver = {
456 .name = "sirfsoc-rtc", 410 .name = "sirfsoc-rtc",
457 .owner = THIS_MODULE, 411 .owner = THIS_MODULE,
458#ifdef CONFIG_PM
459 .pm = &sirfsoc_rtc_pm_ops, 412 .pm = &sirfsoc_rtc_pm_ops,
460#endif
461 .of_match_table = sirfsoc_rtc_of_match, 413 .of_match_table = sirfsoc_rtc_of_match,
462 }, 414 },
463 .probe = sirfsoc_rtc_probe, 415 .probe = sirfsoc_rtc_probe,
diff --git a/drivers/rtc/rtc-spear.c b/drivers/rtc/rtc-spear.c
index c492cf0ab8cd..d2cdb9823a15 100644
--- a/drivers/rtc/rtc-spear.c
+++ b/drivers/rtc/rtc-spear.c
@@ -365,10 +365,8 @@ static int spear_rtc_probe(struct platform_device *pdev)
365 } 365 }
366 366
367 config = devm_kzalloc(&pdev->dev, sizeof(*config), GFP_KERNEL); 367 config = devm_kzalloc(&pdev->dev, sizeof(*config), GFP_KERNEL);
368 if (!config) { 368 if (!config)
369 dev_err(&pdev->dev, "out of memory\n");
370 return -ENOMEM; 369 return -ENOMEM;
371 }
372 370
373 /* alarm irqs */ 371 /* alarm irqs */
374 irq = platform_get_irq(pdev, 0); 372 irq = platform_get_irq(pdev, 0);
diff --git a/drivers/rtc/rtc-stk17ta8.c b/drivers/rtc/rtc-stk17ta8.c
index a176ba614683..35ed49ea1f81 100644
--- a/drivers/rtc/rtc-stk17ta8.c
+++ b/drivers/rtc/rtc-stk17ta8.c
@@ -214,8 +214,7 @@ static irqreturn_t stk17ta8_rtc_interrupt(int irq, void *dev_id)
214 events |= RTC_UF; 214 events |= RTC_UF;
215 else 215 else
216 events |= RTC_AF; 216 events |= RTC_AF;
217 if (likely(pdata->rtc)) 217 rtc_update_irq(pdata->rtc, 1, events);
218 rtc_update_irq(pdata->rtc, 1, events);
219 } 218 }
220 spin_unlock(&pdata->lock); 219 spin_unlock(&pdata->lock);
221 return events ? IRQ_HANDLED : IRQ_NONE; 220 return events ? IRQ_HANDLED : IRQ_NONE;
diff --git a/drivers/rtc/rtc-sunxi.c b/drivers/rtc/rtc-sunxi.c
index 68a35284e5ad..b6f21f73d508 100644
--- a/drivers/rtc/rtc-sunxi.c
+++ b/drivers/rtc/rtc-sunxi.c
@@ -428,7 +428,7 @@ static const struct rtc_class_ops sunxi_rtc_ops = {
428}; 428};
429 429
430static const struct of_device_id sunxi_rtc_dt_ids[] = { 430static const struct of_device_id sunxi_rtc_dt_ids[] = {
431 { .compatible = "allwinner,sun4i-rtc", .data = &data_year_param[0] }, 431 { .compatible = "allwinner,sun4i-a10-rtc", .data = &data_year_param[0] },
432 { .compatible = "allwinner,sun7i-a20-rtc", .data = &data_year_param[1] }, 432 { .compatible = "allwinner,sun7i-a20-rtc", .data = &data_year_param[1] },
433 { /* sentinel */ }, 433 { /* sentinel */ },
434}; 434};
diff --git a/drivers/rtc/rtc-test.c b/drivers/rtc/rtc-test.c
index 7746e65b93f2..6599c20bc454 100644
--- a/drivers/rtc/rtc-test.c
+++ b/drivers/rtc/rtc-test.c
@@ -104,20 +104,17 @@ static int test_probe(struct platform_device *plat_dev)
104 rtc = devm_rtc_device_register(&plat_dev->dev, "test", 104 rtc = devm_rtc_device_register(&plat_dev->dev, "test",
105 &test_rtc_ops, THIS_MODULE); 105 &test_rtc_ops, THIS_MODULE);
106 if (IS_ERR(rtc)) { 106 if (IS_ERR(rtc)) {
107 err = PTR_ERR(rtc); 107 return PTR_ERR(rtc);
108 return err;
109 } 108 }
110 109
111 err = device_create_file(&plat_dev->dev, &dev_attr_irq); 110 err = device_create_file(&plat_dev->dev, &dev_attr_irq);
112 if (err) 111 if (err)
113 goto err; 112 dev_err(&plat_dev->dev, "Unable to create sysfs entry: %s\n",
113 dev_attr_irq.attr.name);
114 114
115 platform_set_drvdata(plat_dev, rtc); 115 platform_set_drvdata(plat_dev, rtc);
116 116
117 return 0; 117 return 0;
118
119err:
120 return err;
121} 118}
122 119
123static int test_remove(struct platform_device *plat_dev) 120static int test_remove(struct platform_device *plat_dev)
diff --git a/drivers/rtc/rtc-tx4939.c b/drivers/rtc/rtc-tx4939.c
index 4f87234e0dee..2e678c681b13 100644
--- a/drivers/rtc/rtc-tx4939.c
+++ b/drivers/rtc/rtc-tx4939.c
@@ -176,8 +176,8 @@ static irqreturn_t tx4939_rtc_interrupt(int irq, void *dev_id)
176 tx4939_rtc_cmd(rtcreg, TX4939_RTCCTL_COMMAND_NOP); 176 tx4939_rtc_cmd(rtcreg, TX4939_RTCCTL_COMMAND_NOP);
177 } 177 }
178 spin_unlock(&pdata->lock); 178 spin_unlock(&pdata->lock);
179 if (likely(pdata->rtc)) 179 rtc_update_irq(pdata->rtc, 1, events);
180 rtc_update_irq(pdata->rtc, 1, events); 180
181 return IRQ_HANDLED; 181 return IRQ_HANDLED;
182} 182}
183 183
diff --git a/drivers/rtc/rtc-vt8500.c b/drivers/rtc/rtc-vt8500.c
index df2ef3eba7cd..051da968da6d 100644
--- a/drivers/rtc/rtc-vt8500.c
+++ b/drivers/rtc/rtc-vt8500.c
@@ -79,7 +79,6 @@
79 79
80struct vt8500_rtc { 80struct vt8500_rtc {
81 void __iomem *regbase; 81 void __iomem *regbase;
82 struct resource *res;
83 int irq_alarm; 82 int irq_alarm;
84 struct rtc_device *rtc; 83 struct rtc_device *rtc;
85 spinlock_t lock; /* Protects this structure */ 84 spinlock_t lock; /* Protects this structure */
@@ -209,6 +208,7 @@ static const struct rtc_class_ops vt8500_rtc_ops = {
209static int vt8500_rtc_probe(struct platform_device *pdev) 208static int vt8500_rtc_probe(struct platform_device *pdev)
210{ 209{
211 struct vt8500_rtc *vt8500_rtc; 210 struct vt8500_rtc *vt8500_rtc;
211 struct resource *res;
212 int ret; 212 int ret;
213 213
214 vt8500_rtc = devm_kzalloc(&pdev->dev, 214 vt8500_rtc = devm_kzalloc(&pdev->dev,
@@ -219,34 +219,16 @@ static int vt8500_rtc_probe(struct platform_device *pdev)
219 spin_lock_init(&vt8500_rtc->lock); 219 spin_lock_init(&vt8500_rtc->lock);
220 platform_set_drvdata(pdev, vt8500_rtc); 220 platform_set_drvdata(pdev, vt8500_rtc);
221 221
222 vt8500_rtc->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
223 if (!vt8500_rtc->res) {
224 dev_err(&pdev->dev, "No I/O memory resource defined\n");
225 return -ENXIO;
226 }
227
228 vt8500_rtc->irq_alarm = platform_get_irq(pdev, 0); 222 vt8500_rtc->irq_alarm = platform_get_irq(pdev, 0);
229 if (vt8500_rtc->irq_alarm < 0) { 223 if (vt8500_rtc->irq_alarm < 0) {
230 dev_err(&pdev->dev, "No alarm IRQ resource defined\n"); 224 dev_err(&pdev->dev, "No alarm IRQ resource defined\n");
231 return vt8500_rtc->irq_alarm; 225 return vt8500_rtc->irq_alarm;
232 } 226 }
233 227
234 vt8500_rtc->res = devm_request_mem_region(&pdev->dev, 228 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
235 vt8500_rtc->res->start, 229 vt8500_rtc->regbase = devm_ioremap_resource(&pdev->dev, res);
236 resource_size(vt8500_rtc->res), 230 if (IS_ERR(vt8500_rtc->regbase))
237 "vt8500-rtc"); 231 return PTR_ERR(vt8500_rtc->regbase);
238 if (vt8500_rtc->res == NULL) {
239 dev_err(&pdev->dev, "failed to request I/O memory\n");
240 return -EBUSY;
241 }
242
243 vt8500_rtc->regbase = devm_ioremap(&pdev->dev, vt8500_rtc->res->start,
244 resource_size(vt8500_rtc->res));
245 if (!vt8500_rtc->regbase) {
246 dev_err(&pdev->dev, "Unable to map RTC I/O memory\n");
247 ret = -EBUSY;
248 goto err_return;
249 }
250 232
251 /* Enable RTC and set it to 24-hour mode */ 233 /* Enable RTC and set it to 24-hour mode */
252 writel(VT8500_RTC_CR_ENABLE, 234 writel(VT8500_RTC_CR_ENABLE,
diff --git a/drivers/rtc/rtc-x1205.c b/drivers/rtc/rtc-x1205.c
index 365dc6505148..b1de58e0b3d0 100644
--- a/drivers/rtc/rtc-x1205.c
+++ b/drivers/rtc/rtc-x1205.c
@@ -660,7 +660,7 @@ static int x1205_probe(struct i2c_client *client,
660 660
661 err = x1205_sysfs_register(&client->dev); 661 err = x1205_sysfs_register(&client->dev);
662 if (err) 662 if (err)
663 return err; 663 dev_err(&client->dev, "Unable to create sysfs entries\n");
664 664
665 return 0; 665 return 0;
666} 666}