rtc: max77686: Convert comments to kernel-doc format
[sfrench/cifs-2.6.git] / drivers / rtc / rtc-max77686.c
1 // SPDX-License-Identifier: GPL-2.0+
2 //
3 // RTC driver for Maxim MAX77686 and MAX77802
4 //
5 // Copyright (C) 2012 Samsung Electronics Co.Ltd
6 //
7 //  based on rtc-max8997.c
8
9 #include <linux/i2c.h>
10 #include <linux/slab.h>
11 #include <linux/rtc.h>
12 #include <linux/delay.h>
13 #include <linux/mutex.h>
14 #include <linux/module.h>
15 #include <linux/platform_device.h>
16 #include <linux/mfd/max77686-private.h>
17 #include <linux/irqdomain.h>
18 #include <linux/regmap.h>
19
20 #define MAX77686_I2C_ADDR_RTC           (0x0C >> 1)
21 #define MAX77620_I2C_ADDR_RTC           0x68
22 #define MAX77686_INVALID_I2C_ADDR       (-1)
23
24 /* Define non existing register */
25 #define MAX77686_INVALID_REG            (-1)
26
27 /* RTC Control Register */
28 #define BCD_EN_SHIFT                    0
29 #define BCD_EN_MASK                     BIT(BCD_EN_SHIFT)
30 #define MODEL24_SHIFT                   1
31 #define MODEL24_MASK                    BIT(MODEL24_SHIFT)
32 /* RTC Update Register1 */
33 #define RTC_UDR_SHIFT                   0
34 #define RTC_UDR_MASK                    BIT(RTC_UDR_SHIFT)
35 #define RTC_RBUDR_SHIFT                 4
36 #define RTC_RBUDR_MASK                  BIT(RTC_RBUDR_SHIFT)
37 /* RTC Hour register */
38 #define HOUR_PM_SHIFT                   6
39 #define HOUR_PM_MASK                    BIT(HOUR_PM_SHIFT)
40 /* RTC Alarm Enable */
41 #define ALARM_ENABLE_SHIFT              7
42 #define ALARM_ENABLE_MASK               BIT(ALARM_ENABLE_SHIFT)
43
44 #define REG_RTC_NONE                    0xdeadbeef
45
46 /*
47  * MAX77802 has separate register (RTCAE1) for alarm enable instead
48  * using 1 bit from registers RTC{SEC,MIN,HOUR,DAY,MONTH,YEAR,DATE}
49  * as in done in MAX77686.
50  */
51 #define MAX77802_ALARM_ENABLE_VALUE     0x77
52
53 enum {
54         RTC_SEC = 0,
55         RTC_MIN,
56         RTC_HOUR,
57         RTC_WEEKDAY,
58         RTC_MONTH,
59         RTC_YEAR,
60         RTC_DATE,
61         RTC_NR_TIME
62 };
63
64 /**
65  * struct max77686_rtc_driver_data - model-specific configuration
66  * @delay: Minimum usecs needed for a RTC update
67  * @mask: Mask used to read RTC registers value
68  * @map: Registers offset to I2C addresses map
69  * @alarm_enable_reg: Has a separate alarm enable register?
70  * @rtc_i2c_addr: I2C address for RTC block
71  * @rtc_irq_from_platform: RTC interrupt via platform resource
72  * @alarm_pending_status_reg: Pending alarm status register
73  * @rtc_irq_chip: RTC IRQ CHIP for regmap
74  * @regmap_config: regmap configuration for the chip
75  */
76 struct max77686_rtc_driver_data {
77         unsigned long           delay;
78         u8                      mask;
79         const unsigned int      *map;
80         bool                    alarm_enable_reg;
81         int                     rtc_i2c_addr;
82         bool                    rtc_irq_from_platform;
83         int                     alarm_pending_status_reg;
84         const struct regmap_irq_chip *rtc_irq_chip;
85         const struct regmap_config *regmap_config;
86 };
87
88 struct max77686_rtc_info {
89         struct device           *dev;
90         struct i2c_client       *rtc;
91         struct rtc_device       *rtc_dev;
92         struct mutex            lock;
93
94         struct regmap           *regmap;
95         struct regmap           *rtc_regmap;
96
97         const struct max77686_rtc_driver_data *drv_data;
98         struct regmap_irq_chip_data *rtc_irq_data;
99
100         int rtc_irq;
101         int virq;
102         int rtc_24hr_mode;
103 };
104
105 enum MAX77686_RTC_OP {
106         MAX77686_RTC_WRITE,
107         MAX77686_RTC_READ,
108 };
109
110 /* These are not registers but just offsets that are mapped to addresses */
111 enum max77686_rtc_reg_offset {
112         REG_RTC_CONTROLM = 0,
113         REG_RTC_CONTROL,
114         REG_RTC_UPDATE0,
115         REG_WTSR_SMPL_CNTL,
116         REG_RTC_SEC,
117         REG_RTC_MIN,
118         REG_RTC_HOUR,
119         REG_RTC_WEEKDAY,
120         REG_RTC_MONTH,
121         REG_RTC_YEAR,
122         REG_RTC_DATE,
123         REG_ALARM1_SEC,
124         REG_ALARM1_MIN,
125         REG_ALARM1_HOUR,
126         REG_ALARM1_WEEKDAY,
127         REG_ALARM1_MONTH,
128         REG_ALARM1_YEAR,
129         REG_ALARM1_DATE,
130         REG_ALARM2_SEC,
131         REG_ALARM2_MIN,
132         REG_ALARM2_HOUR,
133         REG_ALARM2_WEEKDAY,
134         REG_ALARM2_MONTH,
135         REG_ALARM2_YEAR,
136         REG_ALARM2_DATE,
137         REG_RTC_AE1,
138         REG_RTC_END,
139 };
140
141 /* Maps RTC registers offset to the MAX77686 register addresses */
142 static const unsigned int max77686_map[REG_RTC_END] = {
143         [REG_RTC_CONTROLM]   = MAX77686_RTC_CONTROLM,
144         [REG_RTC_CONTROL]    = MAX77686_RTC_CONTROL,
145         [REG_RTC_UPDATE0]    = MAX77686_RTC_UPDATE0,
146         [REG_WTSR_SMPL_CNTL] = MAX77686_WTSR_SMPL_CNTL,
147         [REG_RTC_SEC]        = MAX77686_RTC_SEC,
148         [REG_RTC_MIN]        = MAX77686_RTC_MIN,
149         [REG_RTC_HOUR]       = MAX77686_RTC_HOUR,
150         [REG_RTC_WEEKDAY]    = MAX77686_RTC_WEEKDAY,
151         [REG_RTC_MONTH]      = MAX77686_RTC_MONTH,
152         [REG_RTC_YEAR]       = MAX77686_RTC_YEAR,
153         [REG_RTC_DATE]       = MAX77686_RTC_DATE,
154         [REG_ALARM1_SEC]     = MAX77686_ALARM1_SEC,
155         [REG_ALARM1_MIN]     = MAX77686_ALARM1_MIN,
156         [REG_ALARM1_HOUR]    = MAX77686_ALARM1_HOUR,
157         [REG_ALARM1_WEEKDAY] = MAX77686_ALARM1_WEEKDAY,
158         [REG_ALARM1_MONTH]   = MAX77686_ALARM1_MONTH,
159         [REG_ALARM1_YEAR]    = MAX77686_ALARM1_YEAR,
160         [REG_ALARM1_DATE]    = MAX77686_ALARM1_DATE,
161         [REG_ALARM2_SEC]     = MAX77686_ALARM2_SEC,
162         [REG_ALARM2_MIN]     = MAX77686_ALARM2_MIN,
163         [REG_ALARM2_HOUR]    = MAX77686_ALARM2_HOUR,
164         [REG_ALARM2_WEEKDAY] = MAX77686_ALARM2_WEEKDAY,
165         [REG_ALARM2_MONTH]   = MAX77686_ALARM2_MONTH,
166         [REG_ALARM2_YEAR]    = MAX77686_ALARM2_YEAR,
167         [REG_ALARM2_DATE]    = MAX77686_ALARM2_DATE,
168         [REG_RTC_AE1]        = REG_RTC_NONE,
169 };
170
171 static const struct regmap_irq max77686_rtc_irqs[] = {
172         /* RTC interrupts */
173         REGMAP_IRQ_REG(0, 0, MAX77686_RTCINT_RTC60S_MSK),
174         REGMAP_IRQ_REG(1, 0, MAX77686_RTCINT_RTCA1_MSK),
175         REGMAP_IRQ_REG(2, 0, MAX77686_RTCINT_RTCA2_MSK),
176         REGMAP_IRQ_REG(3, 0, MAX77686_RTCINT_SMPL_MSK),
177         REGMAP_IRQ_REG(4, 0, MAX77686_RTCINT_RTC1S_MSK),
178         REGMAP_IRQ_REG(5, 0, MAX77686_RTCINT_WTSR_MSK),
179 };
180
181 static const struct regmap_irq_chip max77686_rtc_irq_chip = {
182         .name           = "max77686-rtc",
183         .status_base    = MAX77686_RTC_INT,
184         .mask_base      = MAX77686_RTC_INTM,
185         .num_regs       = 1,
186         .irqs           = max77686_rtc_irqs,
187         .num_irqs       = ARRAY_SIZE(max77686_rtc_irqs),
188 };
189
190 static const struct regmap_config max77686_rtc_regmap_config = {
191         .reg_bits = 8,
192         .val_bits = 8,
193 };
194
195 static const struct max77686_rtc_driver_data max77686_drv_data = {
196         .delay = 16000,
197         .mask  = 0x7f,
198         .map   = max77686_map,
199         .alarm_enable_reg  = false,
200         .rtc_irq_from_platform = false,
201         .alarm_pending_status_reg = MAX77686_REG_STATUS2,
202         .rtc_i2c_addr = MAX77686_I2C_ADDR_RTC,
203         .rtc_irq_chip = &max77686_rtc_irq_chip,
204         .regmap_config = &max77686_rtc_regmap_config,
205 };
206
207 static const struct regmap_config max77620_rtc_regmap_config = {
208         .reg_bits = 8,
209         .val_bits = 8,
210         .use_single_write = true,
211 };
212
213 static const struct max77686_rtc_driver_data max77620_drv_data = {
214         .delay = 16000,
215         .mask  = 0x7f,
216         .map   = max77686_map,
217         .alarm_enable_reg  = false,
218         .rtc_irq_from_platform = true,
219         .alarm_pending_status_reg = MAX77686_INVALID_REG,
220         .rtc_i2c_addr = MAX77620_I2C_ADDR_RTC,
221         .rtc_irq_chip = &max77686_rtc_irq_chip,
222         .regmap_config = &max77620_rtc_regmap_config,
223 };
224
225 static const unsigned int max77802_map[REG_RTC_END] = {
226         [REG_RTC_CONTROLM]   = MAX77802_RTC_CONTROLM,
227         [REG_RTC_CONTROL]    = MAX77802_RTC_CONTROL,
228         [REG_RTC_UPDATE0]    = MAX77802_RTC_UPDATE0,
229         [REG_WTSR_SMPL_CNTL] = MAX77802_WTSR_SMPL_CNTL,
230         [REG_RTC_SEC]        = MAX77802_RTC_SEC,
231         [REG_RTC_MIN]        = MAX77802_RTC_MIN,
232         [REG_RTC_HOUR]       = MAX77802_RTC_HOUR,
233         [REG_RTC_WEEKDAY]    = MAX77802_RTC_WEEKDAY,
234         [REG_RTC_MONTH]      = MAX77802_RTC_MONTH,
235         [REG_RTC_YEAR]       = MAX77802_RTC_YEAR,
236         [REG_RTC_DATE]       = MAX77802_RTC_DATE,
237         [REG_ALARM1_SEC]     = MAX77802_ALARM1_SEC,
238         [REG_ALARM1_MIN]     = MAX77802_ALARM1_MIN,
239         [REG_ALARM1_HOUR]    = MAX77802_ALARM1_HOUR,
240         [REG_ALARM1_WEEKDAY] = MAX77802_ALARM1_WEEKDAY,
241         [REG_ALARM1_MONTH]   = MAX77802_ALARM1_MONTH,
242         [REG_ALARM1_YEAR]    = MAX77802_ALARM1_YEAR,
243         [REG_ALARM1_DATE]    = MAX77802_ALARM1_DATE,
244         [REG_ALARM2_SEC]     = MAX77802_ALARM2_SEC,
245         [REG_ALARM2_MIN]     = MAX77802_ALARM2_MIN,
246         [REG_ALARM2_HOUR]    = MAX77802_ALARM2_HOUR,
247         [REG_ALARM2_WEEKDAY] = MAX77802_ALARM2_WEEKDAY,
248         [REG_ALARM2_MONTH]   = MAX77802_ALARM2_MONTH,
249         [REG_ALARM2_YEAR]    = MAX77802_ALARM2_YEAR,
250         [REG_ALARM2_DATE]    = MAX77802_ALARM2_DATE,
251         [REG_RTC_AE1]        = MAX77802_RTC_AE1,
252 };
253
254 static const struct regmap_irq_chip max77802_rtc_irq_chip = {
255         .name           = "max77802-rtc",
256         .status_base    = MAX77802_RTC_INT,
257         .mask_base      = MAX77802_RTC_INTM,
258         .num_regs       = 1,
259         .irqs           = max77686_rtc_irqs, /* same masks as 77686 */
260         .num_irqs       = ARRAY_SIZE(max77686_rtc_irqs),
261 };
262
263 static const struct max77686_rtc_driver_data max77802_drv_data = {
264         .delay = 200,
265         .mask  = 0xff,
266         .map   = max77802_map,
267         .alarm_enable_reg  = true,
268         .rtc_irq_from_platform = false,
269         .alarm_pending_status_reg = MAX77686_REG_STATUS2,
270         .rtc_i2c_addr = MAX77686_INVALID_I2C_ADDR,
271         .rtc_irq_chip = &max77802_rtc_irq_chip,
272 };
273
274 static void max77686_rtc_data_to_tm(u8 *data, struct rtc_time *tm,
275                                     struct max77686_rtc_info *info)
276 {
277         u8 mask = info->drv_data->mask;
278
279         tm->tm_sec = data[RTC_SEC] & mask;
280         tm->tm_min = data[RTC_MIN] & mask;
281         if (info->rtc_24hr_mode) {
282                 tm->tm_hour = data[RTC_HOUR] & 0x1f;
283         } else {
284                 tm->tm_hour = data[RTC_HOUR] & 0x0f;
285                 if (data[RTC_HOUR] & HOUR_PM_MASK)
286                         tm->tm_hour += 12;
287         }
288
289         /* Only a single bit is set in data[], so fls() would be equivalent */
290         tm->tm_wday = ffs(data[RTC_WEEKDAY] & mask) - 1;
291         tm->tm_mday = data[RTC_DATE] & 0x1f;
292         tm->tm_mon = (data[RTC_MONTH] & 0x0f) - 1;
293         tm->tm_year = data[RTC_YEAR] & mask;
294         tm->tm_yday = 0;
295         tm->tm_isdst = 0;
296
297         /*
298          * MAX77686 uses 1 bit from sec/min/hour/etc RTC registers and the
299          * year values are just 0..99 so add 100 to support up to 2099.
300          */
301         if (!info->drv_data->alarm_enable_reg)
302                 tm->tm_year += 100;
303 }
304
305 static int max77686_rtc_tm_to_data(struct rtc_time *tm, u8 *data,
306                                    struct max77686_rtc_info *info)
307 {
308         data[RTC_SEC] = tm->tm_sec;
309         data[RTC_MIN] = tm->tm_min;
310         data[RTC_HOUR] = tm->tm_hour;
311         data[RTC_WEEKDAY] = 1 << tm->tm_wday;
312         data[RTC_DATE] = tm->tm_mday;
313         data[RTC_MONTH] = tm->tm_mon + 1;
314
315         if (info->drv_data->alarm_enable_reg) {
316                 data[RTC_YEAR] = tm->tm_year;
317                 return 0;
318         }
319
320         data[RTC_YEAR] = tm->tm_year > 100 ? (tm->tm_year - 100) : 0;
321
322         if (tm->tm_year < 100) {
323                 dev_err(info->dev, "RTC cannot handle the year %d.\n",
324                         1900 + tm->tm_year);
325                 return -EINVAL;
326         }
327
328         return 0;
329 }
330
331 static int max77686_rtc_update(struct max77686_rtc_info *info,
332                                enum MAX77686_RTC_OP op)
333 {
334         int ret;
335         unsigned int data;
336         unsigned long delay = info->drv_data->delay;
337
338         if (op == MAX77686_RTC_WRITE)
339                 data = 1 << RTC_UDR_SHIFT;
340         else
341                 data = 1 << RTC_RBUDR_SHIFT;
342
343         ret = regmap_update_bits(info->rtc_regmap,
344                                  info->drv_data->map[REG_RTC_UPDATE0],
345                                  data, data);
346         if (ret < 0)
347                 dev_err(info->dev, "Fail to write update reg(ret=%d, data=0x%x)\n",
348                         ret, data);
349         else {
350                 /* Minimum delay required before RTC update. */
351                 usleep_range(delay, delay * 2);
352         }
353
354         return ret;
355 }
356
357 static int max77686_rtc_read_time(struct device *dev, struct rtc_time *tm)
358 {
359         struct max77686_rtc_info *info = dev_get_drvdata(dev);
360         u8 data[RTC_NR_TIME];
361         int ret;
362
363         mutex_lock(&info->lock);
364
365         ret = max77686_rtc_update(info, MAX77686_RTC_READ);
366         if (ret < 0)
367                 goto out;
368
369         ret = regmap_bulk_read(info->rtc_regmap,
370                                info->drv_data->map[REG_RTC_SEC],
371                                data, ARRAY_SIZE(data));
372         if (ret < 0) {
373                 dev_err(info->dev, "Fail to read time reg(%d)\n", ret);
374                 goto out;
375         }
376
377         max77686_rtc_data_to_tm(data, tm, info);
378
379 out:
380         mutex_unlock(&info->lock);
381         return ret;
382 }
383
384 static int max77686_rtc_set_time(struct device *dev, struct rtc_time *tm)
385 {
386         struct max77686_rtc_info *info = dev_get_drvdata(dev);
387         u8 data[RTC_NR_TIME];
388         int ret;
389
390         ret = max77686_rtc_tm_to_data(tm, data, info);
391         if (ret < 0)
392                 return ret;
393
394         mutex_lock(&info->lock);
395
396         ret = regmap_bulk_write(info->rtc_regmap,
397                                 info->drv_data->map[REG_RTC_SEC],
398                                 data, ARRAY_SIZE(data));
399         if (ret < 0) {
400                 dev_err(info->dev, "Fail to write time reg(%d)\n", ret);
401                 goto out;
402         }
403
404         ret = max77686_rtc_update(info, MAX77686_RTC_WRITE);
405
406 out:
407         mutex_unlock(&info->lock);
408         return ret;
409 }
410
411 static int max77686_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
412 {
413         struct max77686_rtc_info *info = dev_get_drvdata(dev);
414         u8 data[RTC_NR_TIME];
415         unsigned int val;
416         const unsigned int *map = info->drv_data->map;
417         int i, ret;
418
419         mutex_lock(&info->lock);
420
421         ret = max77686_rtc_update(info, MAX77686_RTC_READ);
422         if (ret < 0)
423                 goto out;
424
425         ret = regmap_bulk_read(info->rtc_regmap, map[REG_ALARM1_SEC],
426                                data, ARRAY_SIZE(data));
427         if (ret < 0) {
428                 dev_err(info->dev, "Fail to read alarm reg(%d)\n", ret);
429                 goto out;
430         }
431
432         max77686_rtc_data_to_tm(data, &alrm->time, info);
433
434         alrm->enabled = 0;
435
436         if (info->drv_data->alarm_enable_reg) {
437                 if (map[REG_RTC_AE1] == REG_RTC_NONE) {
438                         ret = -EINVAL;
439                         dev_err(info->dev,
440                                 "alarm enable register not set(%d)\n", ret);
441                         goto out;
442                 }
443
444                 ret = regmap_read(info->rtc_regmap, map[REG_RTC_AE1], &val);
445                 if (ret < 0) {
446                         dev_err(info->dev,
447                                 "fail to read alarm enable(%d)\n", ret);
448                         goto out;
449                 }
450
451                 if (val)
452                         alrm->enabled = 1;
453         } else {
454                 for (i = 0; i < ARRAY_SIZE(data); i++) {
455                         if (data[i] & ALARM_ENABLE_MASK) {
456                                 alrm->enabled = 1;
457                                 break;
458                         }
459                 }
460         }
461
462         alrm->pending = 0;
463
464         if (info->drv_data->alarm_pending_status_reg == MAX77686_INVALID_REG)
465                 goto out;
466
467         ret = regmap_read(info->regmap,
468                           info->drv_data->alarm_pending_status_reg, &val);
469         if (ret < 0) {
470                 dev_err(info->dev,
471                         "Fail to read alarm pending status reg(%d)\n", ret);
472                 goto out;
473         }
474
475         if (val & (1 << 4)) /* RTCA1 */
476                 alrm->pending = 1;
477
478 out:
479         mutex_unlock(&info->lock);
480         return ret;
481 }
482
483 static int max77686_rtc_stop_alarm(struct max77686_rtc_info *info)
484 {
485         u8 data[RTC_NR_TIME];
486         int ret, i;
487         struct rtc_time tm;
488         const unsigned int *map = info->drv_data->map;
489
490         if (!mutex_is_locked(&info->lock))
491                 dev_warn(info->dev, "%s: should have mutex locked\n", __func__);
492
493         ret = max77686_rtc_update(info, MAX77686_RTC_READ);
494         if (ret < 0)
495                 goto out;
496
497         if (info->drv_data->alarm_enable_reg) {
498                 if (map[REG_RTC_AE1] == REG_RTC_NONE) {
499                         ret = -EINVAL;
500                         dev_err(info->dev,
501                                 "alarm enable register not set(%d)\n", ret);
502                         goto out;
503                 }
504
505                 ret = regmap_write(info->rtc_regmap, map[REG_RTC_AE1], 0);
506         } else {
507                 ret = regmap_bulk_read(info->rtc_regmap, map[REG_ALARM1_SEC],
508                                        data, ARRAY_SIZE(data));
509                 if (ret < 0) {
510                         dev_err(info->dev, "Fail to read alarm reg(%d)\n", ret);
511                         goto out;
512                 }
513
514                 max77686_rtc_data_to_tm(data, &tm, info);
515
516                 for (i = 0; i < ARRAY_SIZE(data); i++)
517                         data[i] &= ~ALARM_ENABLE_MASK;
518
519                 ret = regmap_bulk_write(info->rtc_regmap, map[REG_ALARM1_SEC],
520                                         data, ARRAY_SIZE(data));
521         }
522
523         if (ret < 0) {
524                 dev_err(info->dev, "Fail to write alarm reg(%d)\n", ret);
525                 goto out;
526         }
527
528         ret = max77686_rtc_update(info, MAX77686_RTC_WRITE);
529 out:
530         return ret;
531 }
532
533 static int max77686_rtc_start_alarm(struct max77686_rtc_info *info)
534 {
535         u8 data[RTC_NR_TIME];
536         int ret;
537         struct rtc_time tm;
538         const unsigned int *map = info->drv_data->map;
539
540         if (!mutex_is_locked(&info->lock))
541                 dev_warn(info->dev, "%s: should have mutex locked\n", __func__);
542
543         ret = max77686_rtc_update(info, MAX77686_RTC_READ);
544         if (ret < 0)
545                 goto out;
546
547         if (info->drv_data->alarm_enable_reg) {
548                 ret = regmap_write(info->rtc_regmap, map[REG_RTC_AE1],
549                                    MAX77802_ALARM_ENABLE_VALUE);
550         } else {
551                 ret = regmap_bulk_read(info->rtc_regmap, map[REG_ALARM1_SEC],
552                                        data, ARRAY_SIZE(data));
553                 if (ret < 0) {
554                         dev_err(info->dev, "Fail to read alarm reg(%d)\n", ret);
555                         goto out;
556                 }
557
558                 max77686_rtc_data_to_tm(data, &tm, info);
559
560                 data[RTC_SEC] |= (1 << ALARM_ENABLE_SHIFT);
561                 data[RTC_MIN] |= (1 << ALARM_ENABLE_SHIFT);
562                 data[RTC_HOUR] |= (1 << ALARM_ENABLE_SHIFT);
563                 data[RTC_WEEKDAY] &= ~ALARM_ENABLE_MASK;
564                 if (data[RTC_MONTH] & 0xf)
565                         data[RTC_MONTH] |= (1 << ALARM_ENABLE_SHIFT);
566                 if (data[RTC_YEAR] & info->drv_data->mask)
567                         data[RTC_YEAR] |= (1 << ALARM_ENABLE_SHIFT);
568                 if (data[RTC_DATE] & 0x1f)
569                         data[RTC_DATE] |= (1 << ALARM_ENABLE_SHIFT);
570
571                 ret = regmap_bulk_write(info->rtc_regmap, map[REG_ALARM1_SEC],
572                                         data, ARRAY_SIZE(data));
573         }
574
575         if (ret < 0) {
576                 dev_err(info->dev, "Fail to write alarm reg(%d)\n", ret);
577                 goto out;
578         }
579
580         ret = max77686_rtc_update(info, MAX77686_RTC_WRITE);
581 out:
582         return ret;
583 }
584
585 static int max77686_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
586 {
587         struct max77686_rtc_info *info = dev_get_drvdata(dev);
588         u8 data[RTC_NR_TIME];
589         int ret;
590
591         ret = max77686_rtc_tm_to_data(&alrm->time, data, info);
592         if (ret < 0)
593                 return ret;
594
595         mutex_lock(&info->lock);
596
597         ret = max77686_rtc_stop_alarm(info);
598         if (ret < 0)
599                 goto out;
600
601         ret = regmap_bulk_write(info->rtc_regmap,
602                                 info->drv_data->map[REG_ALARM1_SEC],
603                                 data, ARRAY_SIZE(data));
604
605         if (ret < 0) {
606                 dev_err(info->dev, "Fail to write alarm reg(%d)\n", ret);
607                 goto out;
608         }
609
610         ret = max77686_rtc_update(info, MAX77686_RTC_WRITE);
611         if (ret < 0)
612                 goto out;
613
614         if (alrm->enabled)
615                 ret = max77686_rtc_start_alarm(info);
616 out:
617         mutex_unlock(&info->lock);
618         return ret;
619 }
620
621 static int max77686_rtc_alarm_irq_enable(struct device *dev,
622                                          unsigned int enabled)
623 {
624         struct max77686_rtc_info *info = dev_get_drvdata(dev);
625         int ret;
626
627         mutex_lock(&info->lock);
628         if (enabled)
629                 ret = max77686_rtc_start_alarm(info);
630         else
631                 ret = max77686_rtc_stop_alarm(info);
632         mutex_unlock(&info->lock);
633
634         return ret;
635 }
636
637 static irqreturn_t max77686_rtc_alarm_irq(int irq, void *data)
638 {
639         struct max77686_rtc_info *info = data;
640
641         dev_dbg(info->dev, "RTC alarm IRQ: %d\n", irq);
642
643         rtc_update_irq(info->rtc_dev, 1, RTC_IRQF | RTC_AF);
644
645         return IRQ_HANDLED;
646 }
647
648 static const struct rtc_class_ops max77686_rtc_ops = {
649         .read_time = max77686_rtc_read_time,
650         .set_time = max77686_rtc_set_time,
651         .read_alarm = max77686_rtc_read_alarm,
652         .set_alarm = max77686_rtc_set_alarm,
653         .alarm_irq_enable = max77686_rtc_alarm_irq_enable,
654 };
655
656 static int max77686_rtc_init_reg(struct max77686_rtc_info *info)
657 {
658         u8 data[2];
659         int ret;
660
661         /* Set RTC control register : Binary mode, 24hour mdoe */
662         data[0] = (1 << BCD_EN_SHIFT) | (1 << MODEL24_SHIFT);
663         data[1] = (0 << BCD_EN_SHIFT) | (1 << MODEL24_SHIFT);
664
665         info->rtc_24hr_mode = 1;
666
667         ret = regmap_bulk_write(info->rtc_regmap,
668                                 info->drv_data->map[REG_RTC_CONTROLM],
669                                 data, ARRAY_SIZE(data));
670         if (ret < 0) {
671                 dev_err(info->dev, "Fail to write controlm reg(%d)\n", ret);
672                 return ret;
673         }
674
675         ret = max77686_rtc_update(info, MAX77686_RTC_WRITE);
676         return ret;
677 }
678
679 static int max77686_init_rtc_regmap(struct max77686_rtc_info *info)
680 {
681         struct device *parent = info->dev->parent;
682         struct i2c_client *parent_i2c = to_i2c_client(parent);
683         int ret;
684
685         if (info->drv_data->rtc_irq_from_platform) {
686                 struct platform_device *pdev = to_platform_device(info->dev);
687
688                 info->rtc_irq = platform_get_irq(pdev, 0);
689                 if (info->rtc_irq < 0)
690                         return info->rtc_irq;
691         } else {
692                 info->rtc_irq =  parent_i2c->irq;
693         }
694
695         info->regmap = dev_get_regmap(parent, NULL);
696         if (!info->regmap) {
697                 dev_err(info->dev, "Failed to get rtc regmap\n");
698                 return -ENODEV;
699         }
700
701         if (info->drv_data->rtc_i2c_addr == MAX77686_INVALID_I2C_ADDR) {
702                 info->rtc_regmap = info->regmap;
703                 goto add_rtc_irq;
704         }
705
706         info->rtc = devm_i2c_new_dummy_device(info->dev, parent_i2c->adapter,
707                                               info->drv_data->rtc_i2c_addr);
708         if (IS_ERR(info->rtc)) {
709                 dev_err(info->dev, "Failed to allocate I2C device for RTC\n");
710                 return PTR_ERR(info->rtc);
711         }
712
713         info->rtc_regmap = devm_regmap_init_i2c(info->rtc,
714                                                 info->drv_data->regmap_config);
715         if (IS_ERR(info->rtc_regmap)) {
716                 ret = PTR_ERR(info->rtc_regmap);
717                 dev_err(info->dev, "Failed to allocate RTC regmap: %d\n", ret);
718                 return ret;
719         }
720
721 add_rtc_irq:
722         ret = regmap_add_irq_chip(info->rtc_regmap, info->rtc_irq,
723                                   IRQF_ONESHOT | IRQF_SHARED,
724                                   0, info->drv_data->rtc_irq_chip,
725                                   &info->rtc_irq_data);
726         if (ret < 0) {
727                 dev_err(info->dev, "Failed to add RTC irq chip: %d\n", ret);
728                 return ret;
729         }
730
731         return 0;
732 }
733
734 static int max77686_rtc_probe(struct platform_device *pdev)
735 {
736         struct max77686_rtc_info *info;
737         const struct platform_device_id *id = platform_get_device_id(pdev);
738         int ret;
739
740         info = devm_kzalloc(&pdev->dev, sizeof(struct max77686_rtc_info),
741                             GFP_KERNEL);
742         if (!info)
743                 return -ENOMEM;
744
745         mutex_init(&info->lock);
746         info->dev = &pdev->dev;
747         info->drv_data = (const struct max77686_rtc_driver_data *)
748                 id->driver_data;
749
750         ret = max77686_init_rtc_regmap(info);
751         if (ret < 0)
752                 return ret;
753
754         platform_set_drvdata(pdev, info);
755
756         ret = max77686_rtc_init_reg(info);
757         if (ret < 0) {
758                 dev_err(&pdev->dev, "Failed to initialize RTC reg:%d\n", ret);
759                 goto err_rtc;
760         }
761
762         device_init_wakeup(&pdev->dev, 1);
763
764         info->rtc_dev = devm_rtc_device_register(&pdev->dev, id->name,
765                                         &max77686_rtc_ops, THIS_MODULE);
766
767         if (IS_ERR(info->rtc_dev)) {
768                 ret = PTR_ERR(info->rtc_dev);
769                 dev_err(&pdev->dev, "Failed to register RTC device: %d\n", ret);
770                 if (ret == 0)
771                         ret = -EINVAL;
772                 goto err_rtc;
773         }
774
775         info->virq = regmap_irq_get_virq(info->rtc_irq_data,
776                                          MAX77686_RTCIRQ_RTCA1);
777         if (info->virq <= 0) {
778                 ret = -ENXIO;
779                 goto err_rtc;
780         }
781
782         ret = request_threaded_irq(info->virq, NULL, max77686_rtc_alarm_irq, 0,
783                                    "rtc-alarm1", info);
784         if (ret < 0) {
785                 dev_err(&pdev->dev, "Failed to request alarm IRQ: %d: %d\n",
786                         info->virq, ret);
787                 goto err_rtc;
788         }
789
790         return 0;
791
792 err_rtc:
793         regmap_del_irq_chip(info->rtc_irq, info->rtc_irq_data);
794
795         return ret;
796 }
797
798 static int max77686_rtc_remove(struct platform_device *pdev)
799 {
800         struct max77686_rtc_info *info = platform_get_drvdata(pdev);
801
802         free_irq(info->virq, info);
803         regmap_del_irq_chip(info->rtc_irq, info->rtc_irq_data);
804
805         return 0;
806 }
807
808 #ifdef CONFIG_PM_SLEEP
809 static int max77686_rtc_suspend(struct device *dev)
810 {
811         struct max77686_rtc_info *info = dev_get_drvdata(dev);
812         int ret = 0;
813
814         if (device_may_wakeup(dev)) {
815                 struct max77686_rtc_info *info = dev_get_drvdata(dev);
816
817                 ret = enable_irq_wake(info->virq);
818         }
819
820         /*
821          * If the main IRQ (not virtual) is the parent IRQ, then it must be
822          * disabled during suspend because if it happens while suspended it
823          * will be handled before resuming I2C.
824          *
825          * Since Main IRQ is shared, all its users should disable it to be sure
826          * it won't fire while one of them is still suspended.
827          */
828         if (!info->drv_data->rtc_irq_from_platform)
829                 disable_irq(info->rtc_irq);
830
831         return ret;
832 }
833
834 static int max77686_rtc_resume(struct device *dev)
835 {
836         struct max77686_rtc_info *info = dev_get_drvdata(dev);
837
838         if (!info->drv_data->rtc_irq_from_platform)
839                 enable_irq(info->rtc_irq);
840
841         if (device_may_wakeup(dev)) {
842                 struct max77686_rtc_info *info = dev_get_drvdata(dev);
843
844                 return disable_irq_wake(info->virq);
845         }
846
847         return 0;
848 }
849 #endif
850
851 static SIMPLE_DEV_PM_OPS(max77686_rtc_pm_ops,
852                          max77686_rtc_suspend, max77686_rtc_resume);
853
854 static const struct platform_device_id rtc_id[] = {
855         { "max77686-rtc", .driver_data = (kernel_ulong_t)&max77686_drv_data, },
856         { "max77802-rtc", .driver_data = (kernel_ulong_t)&max77802_drv_data, },
857         { "max77620-rtc", .driver_data = (kernel_ulong_t)&max77620_drv_data, },
858         {},
859 };
860 MODULE_DEVICE_TABLE(platform, rtc_id);
861
862 static struct platform_driver max77686_rtc_driver = {
863         .driver         = {
864                 .name   = "max77686-rtc",
865                 .pm     = &max77686_rtc_pm_ops,
866         },
867         .probe          = max77686_rtc_probe,
868         .remove         = max77686_rtc_remove,
869         .id_table       = rtc_id,
870 };
871
872 module_platform_driver(max77686_rtc_driver);
873
874 MODULE_DESCRIPTION("Maxim MAX77686 RTC driver");
875 MODULE_AUTHOR("Chiwoong Byun <woong.byun@samsung.com>");
876 MODULE_LICENSE("GPL");