2 * RTC driver for Maxim MAX77686 and MAX77802
4 * Copyright (C) 2012 Samsung Electronics Co.Ltd
6 * based on rtc-max8997.c
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
15 #include <linux/i2c.h>
16 #include <linux/slab.h>
17 #include <linux/rtc.h>
18 #include <linux/delay.h>
19 #include <linux/mutex.h>
20 #include <linux/module.h>
21 #include <linux/platform_device.h>
22 #include <linux/mfd/max77686-private.h>
23 #include <linux/irqdomain.h>
24 #include <linux/regmap.h>
26 #define MAX77686_I2C_ADDR_RTC (0x0C >> 1)
27 #define MAX77686_INVALID_I2C_ADDR (-1)
29 /* RTC Control Register */
30 #define BCD_EN_SHIFT 0
31 #define BCD_EN_MASK BIT(BCD_EN_SHIFT)
32 #define MODEL24_SHIFT 1
33 #define MODEL24_MASK BIT(MODEL24_SHIFT)
34 /* RTC Update Register1 */
35 #define RTC_UDR_SHIFT 0
36 #define RTC_UDR_MASK BIT(RTC_UDR_SHIFT)
37 #define RTC_RBUDR_SHIFT 4
38 #define RTC_RBUDR_MASK BIT(RTC_RBUDR_SHIFT)
39 /* RTC Hour register */
40 #define HOUR_PM_SHIFT 6
41 #define HOUR_PM_MASK BIT(HOUR_PM_SHIFT)
42 /* RTC Alarm Enable */
43 #define ALARM_ENABLE_SHIFT 7
44 #define ALARM_ENABLE_MASK BIT(ALARM_ENABLE_SHIFT)
46 #define REG_RTC_NONE 0xdeadbeef
49 * MAX77802 has separate register (RTCAE1) for alarm enable instead
50 * using 1 bit from registers RTC{SEC,MIN,HOUR,DAY,MONTH,YEAR,DATE}
51 * as in done in MAX77686.
53 #define MAX77802_ALARM_ENABLE_VALUE 0x77
66 struct max77686_rtc_driver_data
{
67 /* Minimum usecs needed for a RTC update */
69 /* Mask used to read RTC registers value */
71 /* Registers offset to I2C addresses map */
72 const unsigned int *map
;
73 /* Has a separate alarm enable register? */
74 bool alarm_enable_reg
;
75 /* I2C address for RTC block */
77 /* RTC IRQ CHIP for regmap */
78 const struct regmap_irq_chip
*rtc_irq_chip
;
81 struct max77686_rtc_info
{
83 struct i2c_client
*rtc
;
84 struct rtc_device
*rtc_dev
;
87 struct regmap
*regmap
;
88 struct regmap
*rtc_regmap
;
90 const struct max77686_rtc_driver_data
*drv_data
;
91 struct regmap_irq_chip_data
*rtc_irq_data
;
98 enum MAX77686_RTC_OP
{
103 /* These are not registers but just offsets that are mapped to addresses */
104 enum max77686_rtc_reg_offset
{
105 REG_RTC_CONTROLM
= 0,
134 /* Maps RTC registers offset to the MAX77686 register addresses */
135 static const unsigned int max77686_map
[REG_RTC_END
] = {
136 [REG_RTC_CONTROLM
] = MAX77686_RTC_CONTROLM
,
137 [REG_RTC_CONTROL
] = MAX77686_RTC_CONTROL
,
138 [REG_RTC_UPDATE0
] = MAX77686_RTC_UPDATE0
,
139 [REG_WTSR_SMPL_CNTL
] = MAX77686_WTSR_SMPL_CNTL
,
140 [REG_RTC_SEC
] = MAX77686_RTC_SEC
,
141 [REG_RTC_MIN
] = MAX77686_RTC_MIN
,
142 [REG_RTC_HOUR
] = MAX77686_RTC_HOUR
,
143 [REG_RTC_WEEKDAY
] = MAX77686_RTC_WEEKDAY
,
144 [REG_RTC_MONTH
] = MAX77686_RTC_MONTH
,
145 [REG_RTC_YEAR
] = MAX77686_RTC_YEAR
,
146 [REG_RTC_DATE
] = MAX77686_RTC_DATE
,
147 [REG_ALARM1_SEC
] = MAX77686_ALARM1_SEC
,
148 [REG_ALARM1_MIN
] = MAX77686_ALARM1_MIN
,
149 [REG_ALARM1_HOUR
] = MAX77686_ALARM1_HOUR
,
150 [REG_ALARM1_WEEKDAY
] = MAX77686_ALARM1_WEEKDAY
,
151 [REG_ALARM1_MONTH
] = MAX77686_ALARM1_MONTH
,
152 [REG_ALARM1_YEAR
] = MAX77686_ALARM1_YEAR
,
153 [REG_ALARM1_DATE
] = MAX77686_ALARM1_DATE
,
154 [REG_ALARM2_SEC
] = MAX77686_ALARM2_SEC
,
155 [REG_ALARM2_MIN
] = MAX77686_ALARM2_MIN
,
156 [REG_ALARM2_HOUR
] = MAX77686_ALARM2_HOUR
,
157 [REG_ALARM2_WEEKDAY
] = MAX77686_ALARM2_WEEKDAY
,
158 [REG_ALARM2_MONTH
] = MAX77686_ALARM2_MONTH
,
159 [REG_ALARM2_YEAR
] = MAX77686_ALARM2_YEAR
,
160 [REG_ALARM2_DATE
] = MAX77686_ALARM2_DATE
,
161 [REG_RTC_AE1
] = REG_RTC_NONE
,
164 static const struct regmap_irq max77686_rtc_irqs
[] = {
166 { .reg_offset
= 0, .mask
= MAX77686_RTCINT_RTC60S_MSK
, },
167 { .reg_offset
= 0, .mask
= MAX77686_RTCINT_RTCA1_MSK
, },
168 { .reg_offset
= 0, .mask
= MAX77686_RTCINT_RTCA2_MSK
, },
169 { .reg_offset
= 0, .mask
= MAX77686_RTCINT_SMPL_MSK
, },
170 { .reg_offset
= 0, .mask
= MAX77686_RTCINT_RTC1S_MSK
, },
171 { .reg_offset
= 0, .mask
= MAX77686_RTCINT_WTSR_MSK
, },
174 static const struct regmap_irq_chip max77686_rtc_irq_chip
= {
175 .name
= "max77686-rtc",
176 .status_base
= MAX77686_RTC_INT
,
177 .mask_base
= MAX77686_RTC_INTM
,
179 .irqs
= max77686_rtc_irqs
,
180 .num_irqs
= ARRAY_SIZE(max77686_rtc_irqs
),
183 static const struct max77686_rtc_driver_data max77686_drv_data
= {
187 .alarm_enable_reg
= false,
188 .rtc_i2c_addr
= MAX77686_I2C_ADDR_RTC
,
189 .rtc_irq_chip
= &max77686_rtc_irq_chip
,
192 static const unsigned int max77802_map
[REG_RTC_END
] = {
193 [REG_RTC_CONTROLM
] = MAX77802_RTC_CONTROLM
,
194 [REG_RTC_CONTROL
] = MAX77802_RTC_CONTROL
,
195 [REG_RTC_UPDATE0
] = MAX77802_RTC_UPDATE0
,
196 [REG_WTSR_SMPL_CNTL
] = MAX77802_WTSR_SMPL_CNTL
,
197 [REG_RTC_SEC
] = MAX77802_RTC_SEC
,
198 [REG_RTC_MIN
] = MAX77802_RTC_MIN
,
199 [REG_RTC_HOUR
] = MAX77802_RTC_HOUR
,
200 [REG_RTC_WEEKDAY
] = MAX77802_RTC_WEEKDAY
,
201 [REG_RTC_MONTH
] = MAX77802_RTC_MONTH
,
202 [REG_RTC_YEAR
] = MAX77802_RTC_YEAR
,
203 [REG_RTC_DATE
] = MAX77802_RTC_DATE
,
204 [REG_ALARM1_SEC
] = MAX77802_ALARM1_SEC
,
205 [REG_ALARM1_MIN
] = MAX77802_ALARM1_MIN
,
206 [REG_ALARM1_HOUR
] = MAX77802_ALARM1_HOUR
,
207 [REG_ALARM1_WEEKDAY
] = MAX77802_ALARM1_WEEKDAY
,
208 [REG_ALARM1_MONTH
] = MAX77802_ALARM1_MONTH
,
209 [REG_ALARM1_YEAR
] = MAX77802_ALARM1_YEAR
,
210 [REG_ALARM1_DATE
] = MAX77802_ALARM1_DATE
,
211 [REG_ALARM2_SEC
] = MAX77802_ALARM2_SEC
,
212 [REG_ALARM2_MIN
] = MAX77802_ALARM2_MIN
,
213 [REG_ALARM2_HOUR
] = MAX77802_ALARM2_HOUR
,
214 [REG_ALARM2_WEEKDAY
] = MAX77802_ALARM2_WEEKDAY
,
215 [REG_ALARM2_MONTH
] = MAX77802_ALARM2_MONTH
,
216 [REG_ALARM2_YEAR
] = MAX77802_ALARM2_YEAR
,
217 [REG_ALARM2_DATE
] = MAX77802_ALARM2_DATE
,
218 [REG_RTC_AE1
] = MAX77802_RTC_AE1
,
221 static const struct regmap_irq_chip max77802_rtc_irq_chip
= {
222 .name
= "max77802-rtc",
223 .status_base
= MAX77802_RTC_INT
,
224 .mask_base
= MAX77802_RTC_INTM
,
226 .irqs
= max77686_rtc_irqs
, /* same masks as 77686 */
227 .num_irqs
= ARRAY_SIZE(max77686_rtc_irqs
),
230 static const struct max77686_rtc_driver_data max77802_drv_data
= {
234 .alarm_enable_reg
= true,
235 .rtc_i2c_addr
= MAX77686_INVALID_I2C_ADDR
,
236 .rtc_irq_chip
= &max77802_rtc_irq_chip
,
239 static void max77686_rtc_data_to_tm(u8
*data
, struct rtc_time
*tm
,
240 struct max77686_rtc_info
*info
)
242 u8 mask
= info
->drv_data
->mask
;
244 tm
->tm_sec
= data
[RTC_SEC
] & mask
;
245 tm
->tm_min
= data
[RTC_MIN
] & mask
;
246 if (info
->rtc_24hr_mode
) {
247 tm
->tm_hour
= data
[RTC_HOUR
] & 0x1f;
249 tm
->tm_hour
= data
[RTC_HOUR
] & 0x0f;
250 if (data
[RTC_HOUR
] & HOUR_PM_MASK
)
254 /* Only a single bit is set in data[], so fls() would be equivalent */
255 tm
->tm_wday
= ffs(data
[RTC_WEEKDAY
] & mask
) - 1;
256 tm
->tm_mday
= data
[RTC_DATE
] & 0x1f;
257 tm
->tm_mon
= (data
[RTC_MONTH
] & 0x0f) - 1;
258 tm
->tm_year
= data
[RTC_YEAR
] & mask
;
263 * MAX77686 uses 1 bit from sec/min/hour/etc RTC registers and the
264 * year values are just 0..99 so add 100 to support up to 2099.
266 if (!info
->drv_data
->alarm_enable_reg
)
270 static int max77686_rtc_tm_to_data(struct rtc_time
*tm
, u8
*data
,
271 struct max77686_rtc_info
*info
)
273 data
[RTC_SEC
] = tm
->tm_sec
;
274 data
[RTC_MIN
] = tm
->tm_min
;
275 data
[RTC_HOUR
] = tm
->tm_hour
;
276 data
[RTC_WEEKDAY
] = 1 << tm
->tm_wday
;
277 data
[RTC_DATE
] = tm
->tm_mday
;
278 data
[RTC_MONTH
] = tm
->tm_mon
+ 1;
280 if (info
->drv_data
->alarm_enable_reg
) {
281 data
[RTC_YEAR
] = tm
->tm_year
;
285 data
[RTC_YEAR
] = tm
->tm_year
> 100 ? (tm
->tm_year
- 100) : 0;
287 if (tm
->tm_year
< 100) {
288 dev_err(info
->dev
, "RTC cannot handle the year %d.\n",
296 static int max77686_rtc_update(struct max77686_rtc_info
*info
,
297 enum MAX77686_RTC_OP op
)
301 unsigned long delay
= info
->drv_data
->delay
;
303 if (op
== MAX77686_RTC_WRITE
)
304 data
= 1 << RTC_UDR_SHIFT
;
306 data
= 1 << RTC_RBUDR_SHIFT
;
308 ret
= regmap_update_bits(info
->rtc_regmap
,
309 info
->drv_data
->map
[REG_RTC_UPDATE0
],
312 dev_err(info
->dev
, "Fail to write update reg(ret=%d, data=0x%x)\n",
315 /* Minimum delay required before RTC update. */
316 usleep_range(delay
, delay
* 2);
322 static int max77686_rtc_read_time(struct device
*dev
, struct rtc_time
*tm
)
324 struct max77686_rtc_info
*info
= dev_get_drvdata(dev
);
325 u8 data
[RTC_NR_TIME
];
328 mutex_lock(&info
->lock
);
330 ret
= max77686_rtc_update(info
, MAX77686_RTC_READ
);
334 ret
= regmap_bulk_read(info
->rtc_regmap
,
335 info
->drv_data
->map
[REG_RTC_SEC
],
336 data
, ARRAY_SIZE(data
));
338 dev_err(info
->dev
, "Fail to read time reg(%d)\n", ret
);
342 max77686_rtc_data_to_tm(data
, tm
, info
);
344 ret
= rtc_valid_tm(tm
);
347 mutex_unlock(&info
->lock
);
351 static int max77686_rtc_set_time(struct device
*dev
, struct rtc_time
*tm
)
353 struct max77686_rtc_info
*info
= dev_get_drvdata(dev
);
354 u8 data
[RTC_NR_TIME
];
357 ret
= max77686_rtc_tm_to_data(tm
, data
, info
);
361 mutex_lock(&info
->lock
);
363 ret
= regmap_bulk_write(info
->rtc_regmap
,
364 info
->drv_data
->map
[REG_RTC_SEC
],
365 data
, ARRAY_SIZE(data
));
367 dev_err(info
->dev
, "Fail to write time reg(%d)\n", ret
);
371 ret
= max77686_rtc_update(info
, MAX77686_RTC_WRITE
);
374 mutex_unlock(&info
->lock
);
378 static int max77686_rtc_read_alarm(struct device
*dev
, struct rtc_wkalrm
*alrm
)
380 struct max77686_rtc_info
*info
= dev_get_drvdata(dev
);
381 u8 data
[RTC_NR_TIME
];
383 const unsigned int *map
= info
->drv_data
->map
;
386 mutex_lock(&info
->lock
);
388 ret
= max77686_rtc_update(info
, MAX77686_RTC_READ
);
392 ret
= regmap_bulk_read(info
->rtc_regmap
, map
[REG_ALARM1_SEC
],
393 data
, ARRAY_SIZE(data
));
395 dev_err(info
->dev
, "Fail to read alarm reg(%d)\n", ret
);
399 max77686_rtc_data_to_tm(data
, &alrm
->time
, info
);
403 if (info
->drv_data
->alarm_enable_reg
) {
404 if (map
[REG_RTC_AE1
] == REG_RTC_NONE
) {
407 "alarm enable register not set(%d)\n", ret
);
411 ret
= regmap_read(info
->rtc_regmap
, map
[REG_RTC_AE1
], &val
);
414 "fail to read alarm enable(%d)\n", ret
);
421 for (i
= 0; i
< ARRAY_SIZE(data
); i
++) {
422 if (data
[i
] & ALARM_ENABLE_MASK
) {
430 ret
= regmap_read(info
->regmap
, MAX77686_REG_STATUS2
, &val
);
432 dev_err(info
->dev
, "Fail to read status2 reg(%d)\n", ret
);
436 if (val
& (1 << 4)) /* RTCA1 */
440 mutex_unlock(&info
->lock
);
444 static int max77686_rtc_stop_alarm(struct max77686_rtc_info
*info
)
446 u8 data
[RTC_NR_TIME
];
449 const unsigned int *map
= info
->drv_data
->map
;
451 if (!mutex_is_locked(&info
->lock
))
452 dev_warn(info
->dev
, "%s: should have mutex locked\n", __func__
);
454 ret
= max77686_rtc_update(info
, MAX77686_RTC_READ
);
458 if (info
->drv_data
->alarm_enable_reg
) {
459 if (map
[REG_RTC_AE1
] == REG_RTC_NONE
) {
462 "alarm enable register not set(%d)\n", ret
);
466 ret
= regmap_write(info
->rtc_regmap
, map
[REG_RTC_AE1
], 0);
468 ret
= regmap_bulk_read(info
->rtc_regmap
, map
[REG_ALARM1_SEC
],
469 data
, ARRAY_SIZE(data
));
471 dev_err(info
->dev
, "Fail to read alarm reg(%d)\n", ret
);
475 max77686_rtc_data_to_tm(data
, &tm
, info
);
477 for (i
= 0; i
< ARRAY_SIZE(data
); i
++)
478 data
[i
] &= ~ALARM_ENABLE_MASK
;
480 ret
= regmap_bulk_write(info
->rtc_regmap
, map
[REG_ALARM1_SEC
],
481 data
, ARRAY_SIZE(data
));
485 dev_err(info
->dev
, "Fail to write alarm reg(%d)\n", ret
);
489 ret
= max77686_rtc_update(info
, MAX77686_RTC_WRITE
);
494 static int max77686_rtc_start_alarm(struct max77686_rtc_info
*info
)
496 u8 data
[RTC_NR_TIME
];
499 const unsigned int *map
= info
->drv_data
->map
;
501 if (!mutex_is_locked(&info
->lock
))
502 dev_warn(info
->dev
, "%s: should have mutex locked\n", __func__
);
504 ret
= max77686_rtc_update(info
, MAX77686_RTC_READ
);
508 if (info
->drv_data
->alarm_enable_reg
) {
509 ret
= regmap_write(info
->rtc_regmap
, map
[REG_RTC_AE1
],
510 MAX77802_ALARM_ENABLE_VALUE
);
512 ret
= regmap_bulk_read(info
->rtc_regmap
, map
[REG_ALARM1_SEC
],
513 data
, ARRAY_SIZE(data
));
515 dev_err(info
->dev
, "Fail to read alarm reg(%d)\n", ret
);
519 max77686_rtc_data_to_tm(data
, &tm
, info
);
521 data
[RTC_SEC
] |= (1 << ALARM_ENABLE_SHIFT
);
522 data
[RTC_MIN
] |= (1 << ALARM_ENABLE_SHIFT
);
523 data
[RTC_HOUR
] |= (1 << ALARM_ENABLE_SHIFT
);
524 data
[RTC_WEEKDAY
] &= ~ALARM_ENABLE_MASK
;
525 if (data
[RTC_MONTH
] & 0xf)
526 data
[RTC_MONTH
] |= (1 << ALARM_ENABLE_SHIFT
);
527 if (data
[RTC_YEAR
] & info
->drv_data
->mask
)
528 data
[RTC_YEAR
] |= (1 << ALARM_ENABLE_SHIFT
);
529 if (data
[RTC_DATE
] & 0x1f)
530 data
[RTC_DATE
] |= (1 << ALARM_ENABLE_SHIFT
);
532 ret
= regmap_bulk_write(info
->rtc_regmap
, map
[REG_ALARM1_SEC
],
533 data
, ARRAY_SIZE(data
));
537 dev_err(info
->dev
, "Fail to write alarm reg(%d)\n", ret
);
541 ret
= max77686_rtc_update(info
, MAX77686_RTC_WRITE
);
546 static int max77686_rtc_set_alarm(struct device
*dev
, struct rtc_wkalrm
*alrm
)
548 struct max77686_rtc_info
*info
= dev_get_drvdata(dev
);
549 u8 data
[RTC_NR_TIME
];
552 ret
= max77686_rtc_tm_to_data(&alrm
->time
, data
, info
);
556 mutex_lock(&info
->lock
);
558 ret
= max77686_rtc_stop_alarm(info
);
562 ret
= regmap_bulk_write(info
->rtc_regmap
,
563 info
->drv_data
->map
[REG_ALARM1_SEC
],
564 data
, ARRAY_SIZE(data
));
567 dev_err(info
->dev
, "Fail to write alarm reg(%d)\n", ret
);
571 ret
= max77686_rtc_update(info
, MAX77686_RTC_WRITE
);
576 ret
= max77686_rtc_start_alarm(info
);
578 mutex_unlock(&info
->lock
);
582 static int max77686_rtc_alarm_irq_enable(struct device
*dev
,
583 unsigned int enabled
)
585 struct max77686_rtc_info
*info
= dev_get_drvdata(dev
);
588 mutex_lock(&info
->lock
);
590 ret
= max77686_rtc_start_alarm(info
);
592 ret
= max77686_rtc_stop_alarm(info
);
593 mutex_unlock(&info
->lock
);
598 static irqreturn_t
max77686_rtc_alarm_irq(int irq
, void *data
)
600 struct max77686_rtc_info
*info
= data
;
602 dev_dbg(info
->dev
, "RTC alarm IRQ: %d\n", irq
);
604 rtc_update_irq(info
->rtc_dev
, 1, RTC_IRQF
| RTC_AF
);
609 static const struct rtc_class_ops max77686_rtc_ops
= {
610 .read_time
= max77686_rtc_read_time
,
611 .set_time
= max77686_rtc_set_time
,
612 .read_alarm
= max77686_rtc_read_alarm
,
613 .set_alarm
= max77686_rtc_set_alarm
,
614 .alarm_irq_enable
= max77686_rtc_alarm_irq_enable
,
617 static int max77686_rtc_init_reg(struct max77686_rtc_info
*info
)
622 /* Set RTC control register : Binary mode, 24hour mdoe */
623 data
[0] = (1 << BCD_EN_SHIFT
) | (1 << MODEL24_SHIFT
);
624 data
[1] = (0 << BCD_EN_SHIFT
) | (1 << MODEL24_SHIFT
);
626 info
->rtc_24hr_mode
= 1;
628 ret
= regmap_bulk_write(info
->rtc_regmap
,
629 info
->drv_data
->map
[REG_RTC_CONTROLM
],
630 data
, ARRAY_SIZE(data
));
632 dev_err(info
->dev
, "Fail to write controlm reg(%d)\n", ret
);
636 ret
= max77686_rtc_update(info
, MAX77686_RTC_WRITE
);
640 static const struct regmap_config max77686_rtc_regmap_config
= {
645 static int max77686_init_rtc_regmap(struct max77686_rtc_info
*info
)
647 struct device
*parent
= info
->dev
->parent
;
648 struct i2c_client
*parent_i2c
= to_i2c_client(parent
);
651 info
->rtc_irq
= parent_i2c
->irq
;
653 info
->regmap
= dev_get_regmap(parent
, NULL
);
655 dev_err(info
->dev
, "Failed to get rtc regmap\n");
659 if (info
->drv_data
->rtc_i2c_addr
== MAX77686_INVALID_I2C_ADDR
) {
660 info
->rtc_regmap
= info
->regmap
;
664 info
->rtc
= i2c_new_dummy(parent_i2c
->adapter
,
665 info
->drv_data
->rtc_i2c_addr
);
667 dev_err(info
->dev
, "Failed to allocate I2C device for RTC\n");
671 info
->rtc_regmap
= devm_regmap_init_i2c(info
->rtc
,
672 &max77686_rtc_regmap_config
);
673 if (IS_ERR(info
->rtc_regmap
)) {
674 ret
= PTR_ERR(info
->rtc_regmap
);
675 dev_err(info
->dev
, "Failed to allocate RTC regmap: %d\n", ret
);
676 goto err_unregister_i2c
;
680 ret
= regmap_add_irq_chip(info
->rtc_regmap
, info
->rtc_irq
,
681 IRQF_TRIGGER_FALLING
| IRQF_ONESHOT
|
682 IRQF_SHARED
, 0, info
->drv_data
->rtc_irq_chip
,
683 &info
->rtc_irq_data
);
685 dev_err(info
->dev
, "Failed to add RTC irq chip: %d\n", ret
);
686 goto err_unregister_i2c
;
693 i2c_unregister_device(info
->rtc
);
697 static int max77686_rtc_probe(struct platform_device
*pdev
)
699 struct max77686_rtc_info
*info
;
700 const struct platform_device_id
*id
= platform_get_device_id(pdev
);
703 info
= devm_kzalloc(&pdev
->dev
, sizeof(struct max77686_rtc_info
),
708 mutex_init(&info
->lock
);
709 info
->dev
= &pdev
->dev
;
710 info
->drv_data
= (const struct max77686_rtc_driver_data
*)
713 ret
= max77686_init_rtc_regmap(info
);
717 platform_set_drvdata(pdev
, info
);
719 ret
= max77686_rtc_init_reg(info
);
721 dev_err(&pdev
->dev
, "Failed to initialize RTC reg:%d\n", ret
);
725 device_init_wakeup(&pdev
->dev
, 1);
727 info
->rtc_dev
= devm_rtc_device_register(&pdev
->dev
, id
->name
,
728 &max77686_rtc_ops
, THIS_MODULE
);
730 if (IS_ERR(info
->rtc_dev
)) {
731 ret
= PTR_ERR(info
->rtc_dev
);
732 dev_err(&pdev
->dev
, "Failed to register RTC device: %d\n", ret
);
738 info
->virq
= regmap_irq_get_virq(info
->rtc_irq_data
,
739 MAX77686_RTCIRQ_RTCA1
);
740 if (info
->virq
<= 0) {
745 ret
= request_threaded_irq(info
->virq
, NULL
, max77686_rtc_alarm_irq
, 0,
748 dev_err(&pdev
->dev
, "Failed to request alarm IRQ: %d: %d\n",
756 regmap_del_irq_chip(info
->rtc_irq
, info
->rtc_irq_data
);
758 i2c_unregister_device(info
->rtc
);
763 static int max77686_rtc_remove(struct platform_device
*pdev
)
765 struct max77686_rtc_info
*info
= platform_get_drvdata(pdev
);
767 free_irq(info
->virq
, info
);
768 regmap_del_irq_chip(info
->rtc_irq
, info
->rtc_irq_data
);
770 i2c_unregister_device(info
->rtc
);
775 #ifdef CONFIG_PM_SLEEP
776 static int max77686_rtc_suspend(struct device
*dev
)
778 if (device_may_wakeup(dev
)) {
779 struct max77686_rtc_info
*info
= dev_get_drvdata(dev
);
781 return enable_irq_wake(info
->virq
);
787 static int max77686_rtc_resume(struct device
*dev
)
789 if (device_may_wakeup(dev
)) {
790 struct max77686_rtc_info
*info
= dev_get_drvdata(dev
);
792 return disable_irq_wake(info
->virq
);
799 static SIMPLE_DEV_PM_OPS(max77686_rtc_pm_ops
,
800 max77686_rtc_suspend
, max77686_rtc_resume
);
802 static const struct platform_device_id rtc_id
[] = {
803 { "max77686-rtc", .driver_data
= (kernel_ulong_t
)&max77686_drv_data
, },
804 { "max77802-rtc", .driver_data
= (kernel_ulong_t
)&max77802_drv_data
, },
807 MODULE_DEVICE_TABLE(platform
, rtc_id
);
809 static struct platform_driver max77686_rtc_driver
= {
811 .name
= "max77686-rtc",
812 .pm
= &max77686_rtc_pm_ops
,
814 .probe
= max77686_rtc_probe
,
815 .remove
= max77686_rtc_remove
,
819 module_platform_driver(max77686_rtc_driver
);
821 MODULE_DESCRIPTION("Maxim MAX77686 RTC driver");
822 MODULE_AUTHOR("Chiwoong Byun <woong.byun@samsung.com>");
823 MODULE_LICENSE("GPL");