hisi_acc_vfio_pci: Update migration data pointer correctly on saving/resume
[platform/kernel/linux-starfive.git] / drivers / rtc / rtc-rv8803.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * RTC driver for the Micro Crystal RV8803
4  *
5  * Copyright (C) 2015 Micro Crystal SA
6  * Alexandre Belloni <alexandre.belloni@bootlin.com>
7  *
8  */
9
10 #include <linux/bcd.h>
11 #include <linux/bitops.h>
12 #include <linux/bitfield.h>
13 #include <linux/log2.h>
14 #include <linux/i2c.h>
15 #include <linux/interrupt.h>
16 #include <linux/kernel.h>
17 #include <linux/module.h>
18 #include <linux/of.h>
19 #include <linux/rtc.h>
20
21 #define RV8803_I2C_TRY_COUNT            4
22
23 #define RV8803_SEC                      0x00
24 #define RV8803_MIN                      0x01
25 #define RV8803_HOUR                     0x02
26 #define RV8803_WEEK                     0x03
27 #define RV8803_DAY                      0x04
28 #define RV8803_MONTH                    0x05
29 #define RV8803_YEAR                     0x06
30 #define RV8803_RAM                      0x07
31 #define RV8803_ALARM_MIN                0x08
32 #define RV8803_ALARM_HOUR               0x09
33 #define RV8803_ALARM_WEEK_OR_DAY        0x0A
34 #define RV8803_EXT                      0x0D
35 #define RV8803_FLAG                     0x0E
36 #define RV8803_CTRL                     0x0F
37 #define RV8803_OSC_OFFSET               0x2C
38
39 #define RV8803_EXT_WADA                 BIT(6)
40
41 #define RV8803_FLAG_V1F                 BIT(0)
42 #define RV8803_FLAG_V2F                 BIT(1)
43 #define RV8803_FLAG_AF                  BIT(3)
44 #define RV8803_FLAG_TF                  BIT(4)
45 #define RV8803_FLAG_UF                  BIT(5)
46
47 #define RV8803_CTRL_RESET               BIT(0)
48
49 #define RV8803_CTRL_EIE                 BIT(2)
50 #define RV8803_CTRL_AIE                 BIT(3)
51 #define RV8803_CTRL_TIE                 BIT(4)
52 #define RV8803_CTRL_UIE                 BIT(5)
53
54 #define RX8803_CTRL_CSEL                GENMASK(7, 6)
55
56 #define RX8900_BACKUP_CTRL              0x18
57 #define RX8900_FLAG_SWOFF               BIT(2)
58 #define RX8900_FLAG_VDETOFF             BIT(3)
59
60 enum rv8803_type {
61         rv_8803,
62         rx_8803,
63         rx_8804,
64         rx_8900
65 };
66
67 struct rv8803_data {
68         struct i2c_client *client;
69         struct rtc_device *rtc;
70         struct mutex flags_lock;
71         u8 ctrl;
72         u8 backup;
73         u8 alarm_invalid:1;
74         enum rv8803_type type;
75 };
76
77 static int rv8803_read_reg(const struct i2c_client *client, u8 reg)
78 {
79         int try = RV8803_I2C_TRY_COUNT;
80         s32 ret;
81
82         /*
83          * There is a 61µs window during which the RTC does not acknowledge I2C
84          * transfers. In that case, ensure that there are multiple attempts.
85          */
86         do
87                 ret = i2c_smbus_read_byte_data(client, reg);
88         while ((ret == -ENXIO || ret == -EIO) && --try);
89         if (ret < 0)
90                 dev_err(&client->dev, "Unable to read register 0x%02x\n", reg);
91
92         return ret;
93 }
94
95 static int rv8803_read_regs(const struct i2c_client *client,
96                             u8 reg, u8 count, u8 *values)
97 {
98         int try = RV8803_I2C_TRY_COUNT;
99         s32 ret;
100
101         do
102                 ret = i2c_smbus_read_i2c_block_data(client, reg, count, values);
103         while ((ret == -ENXIO || ret == -EIO) && --try);
104         if (ret != count) {
105                 dev_err(&client->dev,
106                         "Unable to read registers 0x%02x..0x%02x\n",
107                         reg, reg + count - 1);
108                 return ret < 0 ? ret : -EIO;
109         }
110
111         return 0;
112 }
113
114 static int rv8803_write_reg(const struct i2c_client *client, u8 reg, u8 value)
115 {
116         int try = RV8803_I2C_TRY_COUNT;
117         s32 ret;
118
119         do
120                 ret = i2c_smbus_write_byte_data(client, reg, value);
121         while ((ret == -ENXIO || ret == -EIO) && --try);
122         if (ret)
123                 dev_err(&client->dev, "Unable to write register 0x%02x\n", reg);
124
125         return ret;
126 }
127
128 static int rv8803_write_regs(const struct i2c_client *client,
129                              u8 reg, u8 count, const u8 *values)
130 {
131         int try = RV8803_I2C_TRY_COUNT;
132         s32 ret;
133
134         do
135                 ret = i2c_smbus_write_i2c_block_data(client, reg, count,
136                                                      values);
137         while ((ret == -ENXIO || ret == -EIO) && --try);
138         if (ret)
139                 dev_err(&client->dev,
140                         "Unable to write registers 0x%02x..0x%02x\n",
141                         reg, reg + count - 1);
142
143         return ret;
144 }
145
146 static int rv8803_regs_init(struct rv8803_data *rv8803)
147 {
148         int ret;
149
150         ret = rv8803_write_reg(rv8803->client, RV8803_OSC_OFFSET, 0x00);
151         if (ret)
152                 return ret;
153
154         ret = rv8803_write_reg(rv8803->client, RV8803_CTRL,
155                                FIELD_PREP(RX8803_CTRL_CSEL, 1)); /* 2s */
156         if (ret)
157                 return ret;
158
159         ret = rv8803_write_regs(rv8803->client, RV8803_ALARM_MIN, 3,
160                                 (u8[]){ 0, 0, 0 });
161         if (ret)
162                 return ret;
163
164         return rv8803_write_reg(rv8803->client, RV8803_RAM, 0x00);
165 }
166
167 static int rv8803_regs_configure(struct rv8803_data *rv8803);
168
169 static int rv8803_regs_reset(struct rv8803_data *rv8803, bool full)
170 {
171         /*
172          * The RV-8803 resets all registers to POR defaults after voltage-loss,
173          * the Epson RTCs don't, so we manually reset the remainder here.
174          */
175         if (full || rv8803->type == rx_8803 || rv8803->type == rx_8900) {
176                 int ret = rv8803_regs_init(rv8803);
177                 if (ret)
178                         return ret;
179         }
180
181         return rv8803_regs_configure(rv8803);
182 }
183
184 static irqreturn_t rv8803_handle_irq(int irq, void *dev_id)
185 {
186         struct i2c_client *client = dev_id;
187         struct rv8803_data *rv8803 = i2c_get_clientdata(client);
188         unsigned long events = 0;
189         int flags;
190
191         mutex_lock(&rv8803->flags_lock);
192
193         flags = rv8803_read_reg(client, RV8803_FLAG);
194         if (flags <= 0) {
195                 mutex_unlock(&rv8803->flags_lock);
196                 return IRQ_NONE;
197         }
198
199         if (flags & RV8803_FLAG_V1F)
200                 dev_warn(&client->dev, "Voltage low, temperature compensation stopped.\n");
201
202         if (flags & RV8803_FLAG_V2F)
203                 dev_warn(&client->dev, "Voltage low, data loss detected.\n");
204
205         if (flags & RV8803_FLAG_TF) {
206                 flags &= ~RV8803_FLAG_TF;
207                 rv8803->ctrl &= ~RV8803_CTRL_TIE;
208                 events |= RTC_PF;
209         }
210
211         if (flags & RV8803_FLAG_AF) {
212                 flags &= ~RV8803_FLAG_AF;
213                 rv8803->ctrl &= ~RV8803_CTRL_AIE;
214                 events |= RTC_AF;
215         }
216
217         if (flags & RV8803_FLAG_UF) {
218                 flags &= ~RV8803_FLAG_UF;
219                 rv8803->ctrl &= ~RV8803_CTRL_UIE;
220                 events |= RTC_UF;
221         }
222
223         if (events) {
224                 rtc_update_irq(rv8803->rtc, 1, events);
225                 rv8803_write_reg(client, RV8803_FLAG, flags);
226                 rv8803_write_reg(rv8803->client, RV8803_CTRL, rv8803->ctrl);
227         }
228
229         mutex_unlock(&rv8803->flags_lock);
230
231         return IRQ_HANDLED;
232 }
233
234 static int rv8803_get_time(struct device *dev, struct rtc_time *tm)
235 {
236         struct rv8803_data *rv8803 = dev_get_drvdata(dev);
237         u8 date1[7];
238         u8 date2[7];
239         u8 *date = date1;
240         int ret, flags;
241
242         if (rv8803->alarm_invalid) {
243                 dev_warn(dev, "Corruption detected, data may be invalid.\n");
244                 return -EINVAL;
245         }
246
247         flags = rv8803_read_reg(rv8803->client, RV8803_FLAG);
248         if (flags < 0)
249                 return flags;
250
251         if (flags & RV8803_FLAG_V2F) {
252                 dev_warn(dev, "Voltage low, data is invalid.\n");
253                 return -EINVAL;
254         }
255
256         ret = rv8803_read_regs(rv8803->client, RV8803_SEC, 7, date);
257         if (ret)
258                 return ret;
259
260         if ((date1[RV8803_SEC] & 0x7f) == bin2bcd(59)) {
261                 ret = rv8803_read_regs(rv8803->client, RV8803_SEC, 7, date2);
262                 if (ret)
263                         return ret;
264
265                 if ((date2[RV8803_SEC] & 0x7f) != bin2bcd(59))
266                         date = date2;
267         }
268
269         tm->tm_sec  = bcd2bin(date[RV8803_SEC] & 0x7f);
270         tm->tm_min  = bcd2bin(date[RV8803_MIN] & 0x7f);
271         tm->tm_hour = bcd2bin(date[RV8803_HOUR] & 0x3f);
272         tm->tm_wday = ilog2(date[RV8803_WEEK] & 0x7f);
273         tm->tm_mday = bcd2bin(date[RV8803_DAY] & 0x3f);
274         tm->tm_mon  = bcd2bin(date[RV8803_MONTH] & 0x1f) - 1;
275         tm->tm_year = bcd2bin(date[RV8803_YEAR]) + 100;
276
277         return 0;
278 }
279
280 static int rv8803_set_time(struct device *dev, struct rtc_time *tm)
281 {
282         struct rv8803_data *rv8803 = dev_get_drvdata(dev);
283         u8 date[7];
284         int ctrl, flags, ret;
285
286         ctrl = rv8803_read_reg(rv8803->client, RV8803_CTRL);
287         if (ctrl < 0)
288                 return ctrl;
289
290         /* Stop the clock */
291         ret = rv8803_write_reg(rv8803->client, RV8803_CTRL,
292                                ctrl | RV8803_CTRL_RESET);
293         if (ret)
294                 return ret;
295
296         date[RV8803_SEC]   = bin2bcd(tm->tm_sec);
297         date[RV8803_MIN]   = bin2bcd(tm->tm_min);
298         date[RV8803_HOUR]  = bin2bcd(tm->tm_hour);
299         date[RV8803_WEEK]  = 1 << (tm->tm_wday);
300         date[RV8803_DAY]   = bin2bcd(tm->tm_mday);
301         date[RV8803_MONTH] = bin2bcd(tm->tm_mon + 1);
302         date[RV8803_YEAR]  = bin2bcd(tm->tm_year - 100);
303
304         ret = rv8803_write_regs(rv8803->client, RV8803_SEC, 7, date);
305         if (ret)
306                 return ret;
307
308         /* Restart the clock */
309         ret = rv8803_write_reg(rv8803->client, RV8803_CTRL,
310                                ctrl & ~RV8803_CTRL_RESET);
311         if (ret)
312                 return ret;
313
314         mutex_lock(&rv8803->flags_lock);
315
316         flags = rv8803_read_reg(rv8803->client, RV8803_FLAG);
317         if (flags < 0) {
318                 mutex_unlock(&rv8803->flags_lock);
319                 return flags;
320         }
321
322         if ((flags & RV8803_FLAG_V2F) || rv8803->alarm_invalid) {
323                 /*
324                  * If we sense corruption in the alarm registers, but see no
325                  * voltage loss flag, we can't rely on other registers having
326                  * sensible values. Reset them fully.
327                  */
328                 ret = rv8803_regs_reset(rv8803, rv8803->alarm_invalid);
329                 if (ret) {
330                         mutex_unlock(&rv8803->flags_lock);
331                         return ret;
332                 }
333
334                 rv8803->alarm_invalid = false;
335         }
336
337         ret = rv8803_write_reg(rv8803->client, RV8803_FLAG,
338                                flags & ~(RV8803_FLAG_V1F | RV8803_FLAG_V2F));
339
340         mutex_unlock(&rv8803->flags_lock);
341
342         return ret;
343 }
344
345 static int rv8803_get_alarm(struct device *dev, struct rtc_wkalrm *alrm)
346 {
347         struct rv8803_data *rv8803 = dev_get_drvdata(dev);
348         struct i2c_client *client = rv8803->client;
349         u8 alarmvals[3];
350         int flags, ret;
351
352         ret = rv8803_read_regs(client, RV8803_ALARM_MIN, 3, alarmvals);
353         if (ret)
354                 return ret;
355
356         flags = rv8803_read_reg(client, RV8803_FLAG);
357         if (flags < 0)
358                 return flags;
359
360         alarmvals[0] &= 0x7f;
361         alarmvals[1] &= 0x3f;
362         alarmvals[2] &= 0x3f;
363
364         if (!bcd_is_valid(alarmvals[0]) ||
365             !bcd_is_valid(alarmvals[1]) ||
366             !bcd_is_valid(alarmvals[2]))
367                 goto err_invalid;
368
369         alrm->time.tm_sec  = 0;
370         alrm->time.tm_min  = bcd2bin(alarmvals[0]);
371         alrm->time.tm_hour = bcd2bin(alarmvals[1]);
372         alrm->time.tm_mday = bcd2bin(alarmvals[2]);
373
374         alrm->enabled = !!(rv8803->ctrl & RV8803_CTRL_AIE);
375         alrm->pending = (flags & RV8803_FLAG_AF) && alrm->enabled;
376
377         if ((unsigned int)alrm->time.tm_mday > 31 ||
378             (unsigned int)alrm->time.tm_hour >= 24 ||
379             (unsigned int)alrm->time.tm_min >= 60)
380                 goto err_invalid;
381
382         return 0;
383
384 err_invalid:
385         rv8803->alarm_invalid = true;
386         return -EINVAL;
387 }
388
389 static int rv8803_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
390 {
391         struct i2c_client *client = to_i2c_client(dev);
392         struct rv8803_data *rv8803 = dev_get_drvdata(dev);
393         u8 alarmvals[3];
394         u8 ctrl[2];
395         int ret, err;
396
397         /* The alarm has no seconds, round up to nearest minute */
398         if (alrm->time.tm_sec) {
399                 time64_t alarm_time = rtc_tm_to_time64(&alrm->time);
400
401                 alarm_time += 60 - alrm->time.tm_sec;
402                 rtc_time64_to_tm(alarm_time, &alrm->time);
403         }
404
405         mutex_lock(&rv8803->flags_lock);
406
407         ret = rv8803_read_regs(client, RV8803_FLAG, 2, ctrl);
408         if (ret) {
409                 mutex_unlock(&rv8803->flags_lock);
410                 return ret;
411         }
412
413         alarmvals[0] = bin2bcd(alrm->time.tm_min);
414         alarmvals[1] = bin2bcd(alrm->time.tm_hour);
415         alarmvals[2] = bin2bcd(alrm->time.tm_mday);
416
417         if (rv8803->ctrl & (RV8803_CTRL_AIE | RV8803_CTRL_UIE)) {
418                 rv8803->ctrl &= ~(RV8803_CTRL_AIE | RV8803_CTRL_UIE);
419                 err = rv8803_write_reg(rv8803->client, RV8803_CTRL,
420                                        rv8803->ctrl);
421                 if (err) {
422                         mutex_unlock(&rv8803->flags_lock);
423                         return err;
424                 }
425         }
426
427         ctrl[0] &= ~RV8803_FLAG_AF;
428         err = rv8803_write_reg(rv8803->client, RV8803_FLAG, ctrl[0]);
429         mutex_unlock(&rv8803->flags_lock);
430         if (err)
431                 return err;
432
433         err = rv8803_write_regs(rv8803->client, RV8803_ALARM_MIN, 3, alarmvals);
434         if (err)
435                 return err;
436
437         if (alrm->enabled) {
438                 if (rv8803->rtc->uie_rtctimer.enabled)
439                         rv8803->ctrl |= RV8803_CTRL_UIE;
440                 if (rv8803->rtc->aie_timer.enabled)
441                         rv8803->ctrl |= RV8803_CTRL_AIE;
442
443                 err = rv8803_write_reg(rv8803->client, RV8803_CTRL,
444                                        rv8803->ctrl);
445                 if (err)
446                         return err;
447         }
448
449         return 0;
450 }
451
452 static int rv8803_alarm_irq_enable(struct device *dev, unsigned int enabled)
453 {
454         struct i2c_client *client = to_i2c_client(dev);
455         struct rv8803_data *rv8803 = dev_get_drvdata(dev);
456         int ctrl, flags, err;
457
458         ctrl = rv8803->ctrl;
459
460         if (enabled) {
461                 if (rv8803->rtc->uie_rtctimer.enabled)
462                         ctrl |= RV8803_CTRL_UIE;
463                 if (rv8803->rtc->aie_timer.enabled)
464                         ctrl |= RV8803_CTRL_AIE;
465         } else {
466                 if (!rv8803->rtc->uie_rtctimer.enabled)
467                         ctrl &= ~RV8803_CTRL_UIE;
468                 if (!rv8803->rtc->aie_timer.enabled)
469                         ctrl &= ~RV8803_CTRL_AIE;
470         }
471
472         mutex_lock(&rv8803->flags_lock);
473         flags = rv8803_read_reg(client, RV8803_FLAG);
474         if (flags < 0) {
475                 mutex_unlock(&rv8803->flags_lock);
476                 return flags;
477         }
478         flags &= ~(RV8803_FLAG_AF | RV8803_FLAG_UF);
479         err = rv8803_write_reg(client, RV8803_FLAG, flags);
480         mutex_unlock(&rv8803->flags_lock);
481         if (err)
482                 return err;
483
484         if (ctrl != rv8803->ctrl) {
485                 rv8803->ctrl = ctrl;
486                 err = rv8803_write_reg(client, RV8803_CTRL, rv8803->ctrl);
487                 if (err)
488                         return err;
489         }
490
491         return 0;
492 }
493
494 static int rv8803_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
495 {
496         struct i2c_client *client = to_i2c_client(dev);
497         struct rv8803_data *rv8803 = dev_get_drvdata(dev);
498         unsigned int vl = 0;
499         int flags, ret = 0;
500
501         switch (cmd) {
502         case RTC_VL_READ:
503                 flags = rv8803_read_reg(client, RV8803_FLAG);
504                 if (flags < 0)
505                         return flags;
506
507                 if (flags & RV8803_FLAG_V1F) {
508                         dev_warn(&client->dev, "Voltage low, temperature compensation stopped.\n");
509                         vl = RTC_VL_ACCURACY_LOW;
510                 }
511
512                 if (flags & RV8803_FLAG_V2F)
513                         vl |= RTC_VL_DATA_INVALID;
514
515                 return put_user(vl, (unsigned int __user *)arg);
516
517         case RTC_VL_CLR:
518                 mutex_lock(&rv8803->flags_lock);
519                 flags = rv8803_read_reg(client, RV8803_FLAG);
520                 if (flags < 0) {
521                         mutex_unlock(&rv8803->flags_lock);
522                         return flags;
523                 }
524
525                 flags &= ~RV8803_FLAG_V1F;
526                 ret = rv8803_write_reg(client, RV8803_FLAG, flags);
527                 mutex_unlock(&rv8803->flags_lock);
528                 if (ret)
529                         return ret;
530
531                 return 0;
532
533         default:
534                 return -ENOIOCTLCMD;
535         }
536 }
537
538 static int rv8803_nvram_write(void *priv, unsigned int offset, void *val,
539                               size_t bytes)
540 {
541         return rv8803_write_reg(priv, RV8803_RAM, *(u8 *)val);
542 }
543
544 static int rv8803_nvram_read(void *priv, unsigned int offset,
545                              void *val, size_t bytes)
546 {
547         int ret;
548
549         ret = rv8803_read_reg(priv, RV8803_RAM);
550         if (ret < 0)
551                 return ret;
552
553         *(u8 *)val = ret;
554
555         return 0;
556 }
557
558 static const struct rtc_class_ops rv8803_rtc_ops = {
559         .read_time = rv8803_get_time,
560         .set_time = rv8803_set_time,
561         .ioctl = rv8803_ioctl,
562         .read_alarm = rv8803_get_alarm,
563         .set_alarm = rv8803_set_alarm,
564         .alarm_irq_enable = rv8803_alarm_irq_enable,
565 };
566
567 static int rx8900_trickle_charger_init(struct rv8803_data *rv8803)
568 {
569         struct i2c_client *client = rv8803->client;
570         struct device_node *node = client->dev.of_node;
571         int err;
572         u8 flags;
573
574         if (!node)
575                 return 0;
576
577         if (rv8803->type != rx_8900)
578                 return 0;
579
580         err = i2c_smbus_read_byte_data(rv8803->client, RX8900_BACKUP_CTRL);
581         if (err < 0)
582                 return err;
583
584         flags = (u8)err;
585         flags &= ~(RX8900_FLAG_VDETOFF | RX8900_FLAG_SWOFF);
586         flags |= rv8803->backup;
587
588         return i2c_smbus_write_byte_data(rv8803->client, RX8900_BACKUP_CTRL,
589                                          flags);
590 }
591
592 /* configure registers with values different than the Power-On reset defaults */
593 static int rv8803_regs_configure(struct rv8803_data *rv8803)
594 {
595         int err;
596
597         err = rv8803_write_reg(rv8803->client, RV8803_EXT, RV8803_EXT_WADA);
598         if (err)
599                 return err;
600
601         err = rx8900_trickle_charger_init(rv8803);
602         if (err) {
603                 dev_err(&rv8803->client->dev, "failed to init charger\n");
604                 return err;
605         }
606
607         return 0;
608 }
609
610 static const struct i2c_device_id rv8803_id[] = {
611         { "rv8803", rv_8803 },
612         { "rv8804", rx_8804 },
613         { "rx8803", rx_8803 },
614         { "rx8900", rx_8900 },
615         { }
616 };
617 MODULE_DEVICE_TABLE(i2c, rv8803_id);
618
619 static int rv8803_probe(struct i2c_client *client)
620 {
621         struct i2c_adapter *adapter = client->adapter;
622         struct rv8803_data *rv8803;
623         int err, flags;
624         struct nvmem_config nvmem_cfg = {
625                 .name = "rv8803_nvram",
626                 .word_size = 1,
627                 .stride = 1,
628                 .size = 1,
629                 .reg_read = rv8803_nvram_read,
630                 .reg_write = rv8803_nvram_write,
631                 .priv = client,
632         };
633
634         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |
635                                      I2C_FUNC_SMBUS_I2C_BLOCK)) {
636                 dev_err(&adapter->dev, "doesn't support I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_I2C_BLOCK\n");
637                 return -EIO;
638         }
639
640         rv8803 = devm_kzalloc(&client->dev, sizeof(struct rv8803_data),
641                               GFP_KERNEL);
642         if (!rv8803)
643                 return -ENOMEM;
644
645         mutex_init(&rv8803->flags_lock);
646         rv8803->client = client;
647         if (client->dev.of_node) {
648                 rv8803->type = (uintptr_t)of_device_get_match_data(&client->dev);
649         } else {
650                 const struct i2c_device_id *id = i2c_match_id(rv8803_id, client);
651
652                 rv8803->type = id->driver_data;
653         }
654         i2c_set_clientdata(client, rv8803);
655
656         flags = rv8803_read_reg(client, RV8803_FLAG);
657         if (flags < 0)
658                 return flags;
659
660         if (flags & RV8803_FLAG_V1F)
661                 dev_warn(&client->dev, "Voltage low, temperature compensation stopped.\n");
662
663         if (flags & RV8803_FLAG_V2F)
664                 dev_warn(&client->dev, "Voltage low, data loss detected.\n");
665
666         if (flags & RV8803_FLAG_AF)
667                 dev_warn(&client->dev, "An alarm maybe have been missed.\n");
668
669         rv8803->rtc = devm_rtc_allocate_device(&client->dev);
670         if (IS_ERR(rv8803->rtc))
671                 return PTR_ERR(rv8803->rtc);
672
673         if (client->irq > 0) {
674                 unsigned long irqflags = IRQF_TRIGGER_LOW;
675
676                 if (dev_fwnode(&client->dev))
677                         irqflags = 0;
678
679                 err = devm_request_threaded_irq(&client->dev, client->irq,
680                                                 NULL, rv8803_handle_irq,
681                                                 irqflags | IRQF_ONESHOT,
682                                                 "rv8803", client);
683                 if (err) {
684                         dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n");
685                         client->irq = 0;
686                 }
687         }
688         if (!client->irq)
689                 clear_bit(RTC_FEATURE_ALARM, rv8803->rtc->features);
690
691         if (of_property_read_bool(client->dev.of_node, "epson,vdet-disable"))
692                 rv8803->backup |= RX8900_FLAG_VDETOFF;
693
694         if (of_property_read_bool(client->dev.of_node, "trickle-diode-disable"))
695                 rv8803->backup |= RX8900_FLAG_SWOFF;
696
697         err = rv8803_regs_configure(rv8803);
698         if (err)
699                 return err;
700
701         rv8803->rtc->ops = &rv8803_rtc_ops;
702         rv8803->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
703         rv8803->rtc->range_max = RTC_TIMESTAMP_END_2099;
704         err = devm_rtc_register_device(rv8803->rtc);
705         if (err)
706                 return err;
707
708         devm_rtc_nvmem_register(rv8803->rtc, &nvmem_cfg);
709
710         rv8803->rtc->max_user_freq = 1;
711
712         return 0;
713 }
714
715 static const __maybe_unused struct of_device_id rv8803_of_match[] = {
716         {
717                 .compatible = "microcrystal,rv8803",
718                 .data = (void *)rv_8803
719         },
720         {
721                 .compatible = "epson,rx8803",
722                 .data = (void *)rx_8803
723         },
724         {
725                 .compatible = "epson,rx8804",
726                 .data = (void *)rx_8804
727         },
728         {
729                 .compatible = "epson,rx8900",
730                 .data = (void *)rx_8900
731         },
732         { }
733 };
734 MODULE_DEVICE_TABLE(of, rv8803_of_match);
735
736 static struct i2c_driver rv8803_driver = {
737         .driver = {
738                 .name = "rtc-rv8803",
739                 .of_match_table = of_match_ptr(rv8803_of_match),
740         },
741         .probe          = rv8803_probe,
742         .id_table       = rv8803_id,
743 };
744 module_i2c_driver(rv8803_driver);
745
746 MODULE_AUTHOR("Alexandre Belloni <alexandre.belloni@bootlin.com>");
747 MODULE_DESCRIPTION("Micro Crystal RV8803 RTC driver");
748 MODULE_LICENSE("GPL v2");