1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * rtc-tps80031.c -- TI TPS80031/TPS80032 RTC driver
4 *
5 * RTC driver for TI TPS80031/TPS80032 Fully Integrated
6 * Power Management with Power Path and Battery Charger
7 *
8 * Copyright (c) 2012, NVIDIA Corporation.
9 *
10 * Author: Laxman Dewangan <ldewangan@nvidia.com>
11 */
12
13 #include <linux/bcd.h>
14 #include <linux/device.h>
15 #include <linux/err.h>
16 #include <linux/init.h>
17 #include <linux/kernel.h>
18 #include <linux/module.h>
19 #include <linux/mfd/tps80031.h>
20 #include <linux/platform_device.h>
21 #include <linux/pm.h>
22 #include <linux/rtc.h>
23 #include <linux/slab.h>
24
25 #define ENABLE_ALARM_INT 0x08
26 #define ALARM_INT_STATUS 0x40
27
28 /**
29 * Setting bit to 1 in STOP_RTC will run the RTC and
30 * setting this bit to 0 will freeze RTC.
31 */
32 #define STOP_RTC 0x1
33
34 /* Power on reset Values of RTC registers */
35 #define TPS80031_RTC_POR_YEAR 0
36 #define TPS80031_RTC_POR_MONTH 1
37 #define TPS80031_RTC_POR_DAY 1
38
39 /* Numbers of registers for time and alarms */
40 #define TPS80031_RTC_TIME_NUM_REGS 7
41 #define TPS80031_RTC_ALARM_NUM_REGS 6
42
43 /**
44 * PMU RTC have only 2 nibbles to store year information, so using an
45 * offset of 100 to set the base year as 2000 for our driver.
46 */
47 #define RTC_YEAR_OFFSET 100
48
49 struct tps80031_rtc {
50 struct rtc_device *rtc;
51 int irq;
52 };
53
tps80031_rtc_read_time(struct device * dev,struct rtc_time * tm)54 static int tps80031_rtc_read_time(struct device *dev, struct rtc_time *tm)
55 {
56 u8 buff[TPS80031_RTC_TIME_NUM_REGS];
57 int ret;
58
59 ret = tps80031_reads(dev->parent, TPS80031_SLAVE_ID1,
60 TPS80031_SECONDS_REG, TPS80031_RTC_TIME_NUM_REGS, buff);
61 if (ret < 0) {
62 dev_err(dev, "reading RTC_SECONDS_REG failed, err = %d\n", ret);
63 return ret;
64 }
65
66 tm->tm_sec = bcd2bin(buff[0]);
67 tm->tm_min = bcd2bin(buff[1]);
68 tm->tm_hour = bcd2bin(buff[2]);
69 tm->tm_mday = bcd2bin(buff[3]);
70 tm->tm_mon = bcd2bin(buff[4]) - 1;
71 tm->tm_year = bcd2bin(buff[5]) + RTC_YEAR_OFFSET;
72 tm->tm_wday = bcd2bin(buff[6]);
73 return 0;
74 }
75
tps80031_rtc_set_time(struct device * dev,struct rtc_time * tm)76 static int tps80031_rtc_set_time(struct device *dev, struct rtc_time *tm)
77 {
78 u8 buff[7];
79 int ret;
80
81 buff[0] = bin2bcd(tm->tm_sec);
82 buff[1] = bin2bcd(tm->tm_min);
83 buff[2] = bin2bcd(tm->tm_hour);
84 buff[3] = bin2bcd(tm->tm_mday);
85 buff[4] = bin2bcd(tm->tm_mon + 1);
86 buff[5] = bin2bcd(tm->tm_year % RTC_YEAR_OFFSET);
87 buff[6] = bin2bcd(tm->tm_wday);
88
89 /* Stop RTC while updating the RTC time registers */
90 ret = tps80031_clr_bits(dev->parent, TPS80031_SLAVE_ID1,
91 TPS80031_RTC_CTRL_REG, STOP_RTC);
92 if (ret < 0) {
93 dev_err(dev->parent, "Stop RTC failed, err = %d\n", ret);
94 return ret;
95 }
96
97 ret = tps80031_writes(dev->parent, TPS80031_SLAVE_ID1,
98 TPS80031_SECONDS_REG,
99 TPS80031_RTC_TIME_NUM_REGS, buff);
100 if (ret < 0) {
101 dev_err(dev, "writing RTC_SECONDS_REG failed, err %d\n", ret);
102 return ret;
103 }
104
105 ret = tps80031_set_bits(dev->parent, TPS80031_SLAVE_ID1,
106 TPS80031_RTC_CTRL_REG, STOP_RTC);
107 if (ret < 0)
108 dev_err(dev->parent, "Start RTC failed, err = %d\n", ret);
109 return ret;
110 }
111
tps80031_rtc_alarm_irq_enable(struct device * dev,unsigned int enable)112 static int tps80031_rtc_alarm_irq_enable(struct device *dev,
113 unsigned int enable)
114 {
115 int ret;
116
117 if (enable)
118 ret = tps80031_set_bits(dev->parent, TPS80031_SLAVE_ID1,
119 TPS80031_RTC_INTERRUPTS_REG, ENABLE_ALARM_INT);
120 else
121 ret = tps80031_clr_bits(dev->parent, TPS80031_SLAVE_ID1,
122 TPS80031_RTC_INTERRUPTS_REG, ENABLE_ALARM_INT);
123 if (ret < 0) {
124 dev_err(dev, "Update on RTC_INT failed, err = %d\n", ret);
125 return ret;
126 }
127 return 0;
128 }
129
tps80031_rtc_set_alarm(struct device * dev,struct rtc_wkalrm * alrm)130 static int tps80031_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
131 {
132 u8 buff[TPS80031_RTC_ALARM_NUM_REGS];
133 int ret;
134
135 buff[0] = bin2bcd(alrm->time.tm_sec);
136 buff[1] = bin2bcd(alrm->time.tm_min);
137 buff[2] = bin2bcd(alrm->time.tm_hour);
138 buff[3] = bin2bcd(alrm->time.tm_mday);
139 buff[4] = bin2bcd(alrm->time.tm_mon + 1);
140 buff[5] = bin2bcd(alrm->time.tm_year % RTC_YEAR_OFFSET);
141 ret = tps80031_writes(dev->parent, TPS80031_SLAVE_ID1,
142 TPS80031_ALARM_SECONDS_REG,
143 TPS80031_RTC_ALARM_NUM_REGS, buff);
144 if (ret < 0) {
145 dev_err(dev, "Writing RTC_ALARM failed, err %d\n", ret);
146 return ret;
147 }
148 return tps80031_rtc_alarm_irq_enable(dev, alrm->enabled);
149 }
150
tps80031_rtc_read_alarm(struct device * dev,struct rtc_wkalrm * alrm)151 static int tps80031_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
152 {
153 u8 buff[6];
154 int ret;
155
156 ret = tps80031_reads(dev->parent, TPS80031_SLAVE_ID1,
157 TPS80031_ALARM_SECONDS_REG,
158 TPS80031_RTC_ALARM_NUM_REGS, buff);
159 if (ret < 0) {
160 dev_err(dev->parent,
161 "reading RTC_ALARM failed, err = %d\n", ret);
162 return ret;
163 }
164
165 alrm->time.tm_sec = bcd2bin(buff[0]);
166 alrm->time.tm_min = bcd2bin(buff[1]);
167 alrm->time.tm_hour = bcd2bin(buff[2]);
168 alrm->time.tm_mday = bcd2bin(buff[3]);
169 alrm->time.tm_mon = bcd2bin(buff[4]) - 1;
170 alrm->time.tm_year = bcd2bin(buff[5]) + RTC_YEAR_OFFSET;
171 return 0;
172 }
173
clear_alarm_int_status(struct device * dev,struct tps80031_rtc * rtc)174 static int clear_alarm_int_status(struct device *dev, struct tps80031_rtc *rtc)
175 {
176 int ret;
177 u8 buf;
178
179 /**
180 * As per datasheet, A dummy read of this RTC_STATUS_REG register
181 * is necessary before each I2C read in order to update the status
182 * register value.
183 */
184 ret = tps80031_read(dev->parent, TPS80031_SLAVE_ID1,
185 TPS80031_RTC_STATUS_REG, &buf);
186 if (ret < 0) {
187 dev_err(dev, "reading RTC_STATUS failed. err = %d\n", ret);
188 return ret;
189 }
190
191 /* clear Alarm status bits.*/
192 ret = tps80031_set_bits(dev->parent, TPS80031_SLAVE_ID1,
193 TPS80031_RTC_STATUS_REG, ALARM_INT_STATUS);
194 if (ret < 0) {
195 dev_err(dev, "clear Alarm INT failed, err = %d\n", ret);
196 return ret;
197 }
198 return 0;
199 }
200
tps80031_rtc_irq(int irq,void * data)201 static irqreturn_t tps80031_rtc_irq(int irq, void *data)
202 {
203 struct device *dev = data;
204 struct tps80031_rtc *rtc = dev_get_drvdata(dev);
205 int ret;
206
207 ret = clear_alarm_int_status(dev, rtc);
208 if (ret < 0)
209 return ret;
210
211 rtc_update_irq(rtc->rtc, 1, RTC_IRQF | RTC_AF);
212 return IRQ_HANDLED;
213 }
214
215 static const struct rtc_class_ops tps80031_rtc_ops = {
216 .read_time = tps80031_rtc_read_time,
217 .set_time = tps80031_rtc_set_time,
218 .set_alarm = tps80031_rtc_set_alarm,
219 .read_alarm = tps80031_rtc_read_alarm,
220 .alarm_irq_enable = tps80031_rtc_alarm_irq_enable,
221 };
222
tps80031_rtc_probe(struct platform_device * pdev)223 static int tps80031_rtc_probe(struct platform_device *pdev)
224 {
225 struct tps80031_rtc *rtc;
226 struct rtc_time tm;
227 int ret;
228
229 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
230 if (!rtc)
231 return -ENOMEM;
232
233 rtc->irq = platform_get_irq(pdev, 0);
234 platform_set_drvdata(pdev, rtc);
235
236 /* Start RTC */
237 ret = tps80031_set_bits(pdev->dev.parent, TPS80031_SLAVE_ID1,
238 TPS80031_RTC_CTRL_REG, STOP_RTC);
239 if (ret < 0) {
240 dev_err(&pdev->dev, "failed to start RTC. err = %d\n", ret);
241 return ret;
242 }
243
244 /* If RTC have POR values, set time 01:01:2000 */
245 tps80031_rtc_read_time(&pdev->dev, &tm);
246 if ((tm.tm_year == RTC_YEAR_OFFSET + TPS80031_RTC_POR_YEAR) &&
247 (tm.tm_mon == (TPS80031_RTC_POR_MONTH - 1)) &&
248 (tm.tm_mday == TPS80031_RTC_POR_DAY)) {
249 tm.tm_year = 2000;
250 tm.tm_mday = 1;
251 tm.tm_mon = 1;
252 ret = tps80031_rtc_set_time(&pdev->dev, &tm);
253 if (ret < 0) {
254 dev_err(&pdev->dev,
255 "RTC set time failed, err = %d\n", ret);
256 return ret;
257 }
258 }
259
260 /* Clear alarm intretupt status if it is there */
261 ret = clear_alarm_int_status(&pdev->dev, rtc);
262 if (ret < 0) {
263 dev_err(&pdev->dev, "Clear alarm int failed, err = %d\n", ret);
264 return ret;
265 }
266
267 rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
268 &tps80031_rtc_ops, THIS_MODULE);
269 if (IS_ERR(rtc->rtc)) {
270 ret = PTR_ERR(rtc->rtc);
271 dev_err(&pdev->dev, "RTC registration failed, err %d\n", ret);
272 return ret;
273 }
274
275 ret = devm_request_threaded_irq(&pdev->dev, rtc->irq, NULL,
276 tps80031_rtc_irq,
277 IRQF_ONESHOT,
278 dev_name(&pdev->dev), rtc);
279 if (ret < 0) {
280 dev_err(&pdev->dev, "request IRQ:%d failed, err = %d\n",
281 rtc->irq, ret);
282 return ret;
283 }
284 device_set_wakeup_capable(&pdev->dev, 1);
285 return 0;
286 }
287
288 #ifdef CONFIG_PM_SLEEP
tps80031_rtc_suspend(struct device * dev)289 static int tps80031_rtc_suspend(struct device *dev)
290 {
291 struct tps80031_rtc *rtc = dev_get_drvdata(dev);
292
293 if (device_may_wakeup(dev))
294 enable_irq_wake(rtc->irq);
295 return 0;
296 }
297
tps80031_rtc_resume(struct device * dev)298 static int tps80031_rtc_resume(struct device *dev)
299 {
300 struct tps80031_rtc *rtc = dev_get_drvdata(dev);
301
302 if (device_may_wakeup(dev))
303 disable_irq_wake(rtc->irq);
304 return 0;
305 };
306 #endif
307
308 static SIMPLE_DEV_PM_OPS(tps80031_pm_ops, tps80031_rtc_suspend,
309 tps80031_rtc_resume);
310
311 static struct platform_driver tps80031_rtc_driver = {
312 .driver = {
313 .name = "tps80031-rtc",
314 .pm = &tps80031_pm_ops,
315 },
316 .probe = tps80031_rtc_probe,
317 };
318
319 module_platform_driver(tps80031_rtc_driver);
320
321 MODULE_ALIAS("platform:tps80031-rtc");
322 MODULE_DESCRIPTION("TI TPS80031/TPS80032 RTC driver");
323 MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
324 MODULE_LICENSE("GPL v2");
325