1 // SPDX-License-Identifier: GPL-2.0
3 * A driver for the I2C members of the Abracon AB x8xx RTC family,
4 * and compatible: AB 1805 and AB 0805
6 * Copyright 2014-2015 Macq S.A.
8 * Author: Philippe De Muyter <phdm@macqel.be>
9 * Author: Alexandre Belloni <alexandre.belloni@bootlin.com>
13 #include <linux/bcd.h>
14 #include <linux/i2c.h>
15 #include <linux/module.h>
16 #include <linux/of_device.h>
17 #include <linux/rtc.h>
18 #include <linux/watchdog.h>
20 #define ABX8XX_REG_HTH 0x00
21 #define ABX8XX_REG_SC 0x01
22 #define ABX8XX_REG_MN 0x02
23 #define ABX8XX_REG_HR 0x03
24 #define ABX8XX_REG_DA 0x04
25 #define ABX8XX_REG_MO 0x05
26 #define ABX8XX_REG_YR 0x06
27 #define ABX8XX_REG_WD 0x07
29 #define ABX8XX_REG_AHTH 0x08
30 #define ABX8XX_REG_ASC 0x09
31 #define ABX8XX_REG_AMN 0x0a
32 #define ABX8XX_REG_AHR 0x0b
33 #define ABX8XX_REG_ADA 0x0c
34 #define ABX8XX_REG_AMO 0x0d
35 #define ABX8XX_REG_AWD 0x0e
37 #define ABX8XX_REG_STATUS 0x0f
38 #define ABX8XX_STATUS_AF BIT(2)
39 #define ABX8XX_STATUS_BLF BIT(4)
40 #define ABX8XX_STATUS_WDT BIT(6)
42 #define ABX8XX_REG_CTRL1 0x10
43 #define ABX8XX_CTRL_WRITE BIT(0)
44 #define ABX8XX_CTRL_ARST BIT(2)
45 #define ABX8XX_CTRL_12_24 BIT(6)
47 #define ABX8XX_REG_CTRL2 0x11
48 #define ABX8XX_CTRL2_RSVD BIT(5)
50 #define ABX8XX_REG_IRQ 0x12
51 #define ABX8XX_IRQ_AIE BIT(2)
52 #define ABX8XX_IRQ_IM_1_4 (0x3 << 5)
54 #define ABX8XX_REG_CD_TIMER_CTL 0x18
56 #define ABX8XX_REG_OSC 0x1c
57 #define ABX8XX_OSC_FOS BIT(3)
58 #define ABX8XX_OSC_BOS BIT(4)
59 #define ABX8XX_OSC_ACAL_512 BIT(5)
60 #define ABX8XX_OSC_ACAL_1024 BIT(6)
62 #define ABX8XX_OSC_OSEL BIT(7)
64 #define ABX8XX_REG_OSS 0x1d
65 #define ABX8XX_OSS_OF BIT(1)
66 #define ABX8XX_OSS_OMODE BIT(4)
68 #define ABX8XX_REG_WDT 0x1b
69 #define ABX8XX_WDT_WDS BIT(7)
70 #define ABX8XX_WDT_BMB_MASK 0x7c
71 #define ABX8XX_WDT_BMB_SHIFT 2
72 #define ABX8XX_WDT_MAX_TIME (ABX8XX_WDT_BMB_MASK >> ABX8XX_WDT_BMB_SHIFT)
73 #define ABX8XX_WDT_WRB_MASK 0x03
74 #define ABX8XX_WDT_WRB_1HZ 0x02
76 #define ABX8XX_REG_CFG_KEY 0x1f
77 #define ABX8XX_CFG_KEY_OSC 0xa1
78 #define ABX8XX_CFG_KEY_MISC 0x9d
80 #define ABX8XX_REG_ID0 0x28
82 #define ABX8XX_REG_OUT_CTRL 0x30
83 #define ABX8XX_OUT_CTRL_EXDS BIT(4)
85 #define ABX8XX_REG_TRICKLE 0x20
86 #define ABX8XX_TRICKLE_CHARGE_ENABLE 0xa0
87 #define ABX8XX_TRICKLE_STANDARD_DIODE 0x8
88 #define ABX8XX_TRICKLE_SCHOTTKY_DIODE 0x4
90 static u8 trickle_resistors
[] = {0, 3, 6, 11};
92 enum abx80x_chip
{AB0801
, AB0803
, AB0804
, AB0805
,
93 AB1801
, AB1803
, AB1804
, AB1805
, RV1805
, ABX80X
};
101 static struct abx80x_cap abx80x_caps
[] = {
102 [AB0801
] = {.pn
= 0x0801},
103 [AB0803
] = {.pn
= 0x0803},
104 [AB0804
] = {.pn
= 0x0804, .has_tc
= true, .has_wdog
= true},
105 [AB0805
] = {.pn
= 0x0805, .has_tc
= true, .has_wdog
= true},
106 [AB1801
] = {.pn
= 0x1801},
107 [AB1803
] = {.pn
= 0x1803},
108 [AB1804
] = {.pn
= 0x1804, .has_tc
= true, .has_wdog
= true},
109 [AB1805
] = {.pn
= 0x1805, .has_tc
= true, .has_wdog
= true},
110 [RV1805
] = {.pn
= 0x1805, .has_tc
= true, .has_wdog
= true},
115 struct rtc_device
*rtc
;
116 struct i2c_client
*client
;
117 struct watchdog_device wdog
;
120 static int abx80x_is_rc_mode(struct i2c_client
*client
)
124 flags
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_OSS
);
126 dev_err(&client
->dev
,
127 "Failed to read autocalibration attribute\n");
131 return (flags
& ABX8XX_OSS_OMODE
) ? 1 : 0;
134 static int abx80x_enable_trickle_charger(struct i2c_client
*client
,
140 * Write the configuration key register to enable access to the Trickle
143 err
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_CFG_KEY
,
144 ABX8XX_CFG_KEY_MISC
);
146 dev_err(&client
->dev
, "Unable to write configuration key\n");
150 err
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_TRICKLE
,
151 ABX8XX_TRICKLE_CHARGE_ENABLE
|
154 dev_err(&client
->dev
, "Unable to write trickle register\n");
161 static int abx80x_rtc_read_time(struct device
*dev
, struct rtc_time
*tm
)
163 struct i2c_client
*client
= to_i2c_client(dev
);
164 unsigned char buf
[8];
165 int err
, flags
, rc_mode
= 0;
167 /* Read the Oscillator Failure only in XT mode */
168 rc_mode
= abx80x_is_rc_mode(client
);
173 flags
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_OSS
);
177 if (flags
& ABX8XX_OSS_OF
) {
178 dev_err(dev
, "Oscillator failure, data is invalid.\n");
183 err
= i2c_smbus_read_i2c_block_data(client
, ABX8XX_REG_HTH
,
186 dev_err(&client
->dev
, "Unable to read date\n");
190 tm
->tm_sec
= bcd2bin(buf
[ABX8XX_REG_SC
] & 0x7F);
191 tm
->tm_min
= bcd2bin(buf
[ABX8XX_REG_MN
] & 0x7F);
192 tm
->tm_hour
= bcd2bin(buf
[ABX8XX_REG_HR
] & 0x3F);
193 tm
->tm_wday
= buf
[ABX8XX_REG_WD
] & 0x7;
194 tm
->tm_mday
= bcd2bin(buf
[ABX8XX_REG_DA
] & 0x3F);
195 tm
->tm_mon
= bcd2bin(buf
[ABX8XX_REG_MO
] & 0x1F) - 1;
196 tm
->tm_year
= bcd2bin(buf
[ABX8XX_REG_YR
]) + 100;
201 static int abx80x_rtc_set_time(struct device
*dev
, struct rtc_time
*tm
)
203 struct i2c_client
*client
= to_i2c_client(dev
);
204 unsigned char buf
[8];
207 if (tm
->tm_year
< 100)
210 buf
[ABX8XX_REG_HTH
] = 0;
211 buf
[ABX8XX_REG_SC
] = bin2bcd(tm
->tm_sec
);
212 buf
[ABX8XX_REG_MN
] = bin2bcd(tm
->tm_min
);
213 buf
[ABX8XX_REG_HR
] = bin2bcd(tm
->tm_hour
);
214 buf
[ABX8XX_REG_DA
] = bin2bcd(tm
->tm_mday
);
215 buf
[ABX8XX_REG_MO
] = bin2bcd(tm
->tm_mon
+ 1);
216 buf
[ABX8XX_REG_YR
] = bin2bcd(tm
->tm_year
- 100);
217 buf
[ABX8XX_REG_WD
] = tm
->tm_wday
;
219 err
= i2c_smbus_write_i2c_block_data(client
, ABX8XX_REG_HTH
,
222 dev_err(&client
->dev
, "Unable to write to date registers\n");
226 /* Clear the OF bit of Oscillator Status Register */
227 flags
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_OSS
);
231 err
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_OSS
,
232 flags
& ~ABX8XX_OSS_OF
);
234 dev_err(&client
->dev
, "Unable to write oscillator status register\n");
241 static irqreturn_t
abx80x_handle_irq(int irq
, void *dev_id
)
243 struct i2c_client
*client
= dev_id
;
244 struct abx80x_priv
*priv
= i2c_get_clientdata(client
);
245 struct rtc_device
*rtc
= priv
->rtc
;
248 status
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_STATUS
);
252 if (status
& ABX8XX_STATUS_AF
)
253 rtc_update_irq(rtc
, 1, RTC_AF
| RTC_IRQF
);
256 * It is unclear if we'll get an interrupt before the external
259 if (status
& ABX8XX_STATUS_WDT
)
260 dev_alert(&client
->dev
, "watchdog timeout interrupt.\n");
262 i2c_smbus_write_byte_data(client
, ABX8XX_REG_STATUS
, 0);
267 static int abx80x_read_alarm(struct device
*dev
, struct rtc_wkalrm
*t
)
269 struct i2c_client
*client
= to_i2c_client(dev
);
270 unsigned char buf
[7];
274 if (client
->irq
<= 0)
277 err
= i2c_smbus_read_i2c_block_data(client
, ABX8XX_REG_ASC
,
282 irq_mask
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_IRQ
);
286 t
->time
.tm_sec
= bcd2bin(buf
[0] & 0x7F);
287 t
->time
.tm_min
= bcd2bin(buf
[1] & 0x7F);
288 t
->time
.tm_hour
= bcd2bin(buf
[2] & 0x3F);
289 t
->time
.tm_mday
= bcd2bin(buf
[3] & 0x3F);
290 t
->time
.tm_mon
= bcd2bin(buf
[4] & 0x1F) - 1;
291 t
->time
.tm_wday
= buf
[5] & 0x7;
293 t
->enabled
= !!(irq_mask
& ABX8XX_IRQ_AIE
);
294 t
->pending
= (buf
[6] & ABX8XX_STATUS_AF
) && t
->enabled
;
299 static int abx80x_set_alarm(struct device
*dev
, struct rtc_wkalrm
*t
)
301 struct i2c_client
*client
= to_i2c_client(dev
);
305 if (client
->irq
<= 0)
309 alarm
[1] = bin2bcd(t
->time
.tm_sec
);
310 alarm
[2] = bin2bcd(t
->time
.tm_min
);
311 alarm
[3] = bin2bcd(t
->time
.tm_hour
);
312 alarm
[4] = bin2bcd(t
->time
.tm_mday
);
313 alarm
[5] = bin2bcd(t
->time
.tm_mon
+ 1);
315 err
= i2c_smbus_write_i2c_block_data(client
, ABX8XX_REG_AHTH
,
316 sizeof(alarm
), alarm
);
318 dev_err(&client
->dev
, "Unable to write alarm registers\n");
323 err
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_IRQ
,
333 static int abx80x_rtc_set_autocalibration(struct device
*dev
,
336 struct i2c_client
*client
= to_i2c_client(dev
);
337 int retval
, flags
= 0;
339 if ((autocalibration
!= 0) && (autocalibration
!= 1024) &&
340 (autocalibration
!= 512)) {
341 dev_err(dev
, "autocalibration value outside permitted range\n");
345 flags
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_OSC
);
349 if (autocalibration
== 0) {
350 flags
&= ~(ABX8XX_OSC_ACAL_512
| ABX8XX_OSC_ACAL_1024
);
351 } else if (autocalibration
== 1024) {
352 /* 1024 autocalibration is 0x10 */
353 flags
|= ABX8XX_OSC_ACAL_1024
;
354 flags
&= ~(ABX8XX_OSC_ACAL_512
);
356 /* 512 autocalibration is 0x11 */
357 flags
|= (ABX8XX_OSC_ACAL_1024
| ABX8XX_OSC_ACAL_512
);
360 /* Unlock write access to Oscillator Control Register */
361 retval
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_CFG_KEY
,
364 dev_err(dev
, "Failed to write CONFIG_KEY register\n");
368 retval
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_OSC
, flags
);
373 static int abx80x_rtc_get_autocalibration(struct device
*dev
)
375 struct i2c_client
*client
= to_i2c_client(dev
);
376 int flags
= 0, autocalibration
;
378 flags
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_OSC
);
382 if (flags
& ABX8XX_OSC_ACAL_512
)
383 autocalibration
= 512;
384 else if (flags
& ABX8XX_OSC_ACAL_1024
)
385 autocalibration
= 1024;
389 return autocalibration
;
392 static ssize_t
autocalibration_store(struct device
*dev
,
393 struct device_attribute
*attr
,
394 const char *buf
, size_t count
)
397 unsigned long autocalibration
= 0;
399 retval
= kstrtoul(buf
, 10, &autocalibration
);
401 dev_err(dev
, "Failed to store RTC autocalibration attribute\n");
405 retval
= abx80x_rtc_set_autocalibration(dev
->parent
, autocalibration
);
407 return retval
? retval
: count
;
410 static ssize_t
autocalibration_show(struct device
*dev
,
411 struct device_attribute
*attr
, char *buf
)
413 int autocalibration
= 0;
415 autocalibration
= abx80x_rtc_get_autocalibration(dev
->parent
);
416 if (autocalibration
< 0) {
417 dev_err(dev
, "Failed to read RTC autocalibration\n");
419 return autocalibration
;
422 return sprintf(buf
, "%d\n", autocalibration
);
425 static DEVICE_ATTR_RW(autocalibration
);
427 static ssize_t
oscillator_store(struct device
*dev
,
428 struct device_attribute
*attr
,
429 const char *buf
, size_t count
)
431 struct i2c_client
*client
= to_i2c_client(dev
->parent
);
432 int retval
, flags
, rc_mode
= 0;
434 if (strncmp(buf
, "rc", 2) == 0) {
436 } else if (strncmp(buf
, "xtal", 4) == 0) {
439 dev_err(dev
, "Oscillator selection value outside permitted ones\n");
443 flags
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_OSC
);
448 flags
&= ~(ABX8XX_OSC_OSEL
);
450 flags
|= (ABX8XX_OSC_OSEL
);
452 /* Unlock write access on Oscillator Control register */
453 retval
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_CFG_KEY
,
456 dev_err(dev
, "Failed to write CONFIG_KEY register\n");
460 retval
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_OSC
, flags
);
462 dev_err(dev
, "Failed to write Oscillator Control register\n");
466 return retval
? retval
: count
;
469 static ssize_t
oscillator_show(struct device
*dev
,
470 struct device_attribute
*attr
, char *buf
)
473 struct i2c_client
*client
= to_i2c_client(dev
->parent
);
475 rc_mode
= abx80x_is_rc_mode(client
);
478 dev_err(dev
, "Failed to read RTC oscillator selection\n");
484 return sprintf(buf
, "rc\n");
486 return sprintf(buf
, "xtal\n");
489 static DEVICE_ATTR_RW(oscillator
);
491 static struct attribute
*rtc_calib_attrs
[] = {
492 &dev_attr_autocalibration
.attr
,
493 &dev_attr_oscillator
.attr
,
497 static const struct attribute_group rtc_calib_attr_group
= {
498 .attrs
= rtc_calib_attrs
,
501 static int abx80x_alarm_irq_enable(struct device
*dev
, unsigned int enabled
)
503 struct i2c_client
*client
= to_i2c_client(dev
);
507 err
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_IRQ
,
511 err
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_IRQ
,
516 static int abx80x_ioctl(struct device
*dev
, unsigned int cmd
, unsigned long arg
)
518 struct i2c_client
*client
= to_i2c_client(dev
);
523 status
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_STATUS
);
527 tmp
= status
& ABX8XX_STATUS_BLF
? RTC_VL_BACKUP_LOW
: 0;
529 return put_user(tmp
, (unsigned int __user
*)arg
);
532 status
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_STATUS
);
536 status
&= ~ABX8XX_STATUS_BLF
;
538 tmp
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_STATUS
, 0);
549 static const struct rtc_class_ops abx80x_rtc_ops
= {
550 .read_time
= abx80x_rtc_read_time
,
551 .set_time
= abx80x_rtc_set_time
,
552 .read_alarm
= abx80x_read_alarm
,
553 .set_alarm
= abx80x_set_alarm
,
554 .alarm_irq_enable
= abx80x_alarm_irq_enable
,
555 .ioctl
= abx80x_ioctl
,
558 static int abx80x_dt_trickle_cfg(struct i2c_client
*client
)
560 struct device_node
*np
= client
->dev
.of_node
;
566 ret
= of_property_read_string(np
, "abracon,tc-diode", &diode
);
570 if (!strcmp(diode
, "standard")) {
571 trickle_cfg
|= ABX8XX_TRICKLE_STANDARD_DIODE
;
572 } else if (!strcmp(diode
, "schottky")) {
573 trickle_cfg
|= ABX8XX_TRICKLE_SCHOTTKY_DIODE
;
575 dev_dbg(&client
->dev
, "Invalid tc-diode value: %s\n", diode
);
579 ret
= of_property_read_u32(np
, "abracon,tc-resistor", &tmp
);
583 for (i
= 0; i
< sizeof(trickle_resistors
); i
++)
584 if (trickle_resistors
[i
] == tmp
)
587 if (i
== sizeof(trickle_resistors
)) {
588 dev_dbg(&client
->dev
, "Invalid tc-resistor value: %u\n", tmp
);
592 return (trickle_cfg
| i
);
595 #ifdef CONFIG_WATCHDOG
597 static inline u8
timeout_bits(unsigned int timeout
)
599 return ((timeout
<< ABX8XX_WDT_BMB_SHIFT
) & ABX8XX_WDT_BMB_MASK
) |
603 static int __abx80x_wdog_set_timeout(struct watchdog_device
*wdog
,
604 unsigned int timeout
)
606 struct abx80x_priv
*priv
= watchdog_get_drvdata(wdog
);
607 u8 val
= ABX8XX_WDT_WDS
| timeout_bits(timeout
);
610 * Writing any timeout to the WDT register resets the watchdog timer.
611 * Writing 0 disables it.
613 return i2c_smbus_write_byte_data(priv
->client
, ABX8XX_REG_WDT
, val
);
616 static int abx80x_wdog_set_timeout(struct watchdog_device
*wdog
,
617 unsigned int new_timeout
)
621 if (watchdog_hw_running(wdog
))
622 err
= __abx80x_wdog_set_timeout(wdog
, new_timeout
);
625 wdog
->timeout
= new_timeout
;
630 static int abx80x_wdog_ping(struct watchdog_device
*wdog
)
632 return __abx80x_wdog_set_timeout(wdog
, wdog
->timeout
);
635 static int abx80x_wdog_start(struct watchdog_device
*wdog
)
637 return __abx80x_wdog_set_timeout(wdog
, wdog
->timeout
);
640 static int abx80x_wdog_stop(struct watchdog_device
*wdog
)
642 return __abx80x_wdog_set_timeout(wdog
, 0);
645 static const struct watchdog_info abx80x_wdog_info
= {
646 .identity
= "abx80x watchdog",
647 .options
= WDIOF_KEEPALIVEPING
| WDIOF_SETTIMEOUT
| WDIOF_MAGICCLOSE
,
650 static const struct watchdog_ops abx80x_wdog_ops
= {
651 .owner
= THIS_MODULE
,
652 .start
= abx80x_wdog_start
,
653 .stop
= abx80x_wdog_stop
,
654 .ping
= abx80x_wdog_ping
,
655 .set_timeout
= abx80x_wdog_set_timeout
,
658 static int abx80x_setup_watchdog(struct abx80x_priv
*priv
)
660 priv
->wdog
.parent
= &priv
->client
->dev
;
661 priv
->wdog
.ops
= &abx80x_wdog_ops
;
662 priv
->wdog
.info
= &abx80x_wdog_info
;
663 priv
->wdog
.min_timeout
= 1;
664 priv
->wdog
.max_timeout
= ABX8XX_WDT_MAX_TIME
;
665 priv
->wdog
.timeout
= ABX8XX_WDT_MAX_TIME
;
667 watchdog_set_drvdata(&priv
->wdog
, priv
);
669 return devm_watchdog_register_device(&priv
->client
->dev
, &priv
->wdog
);
672 static int abx80x_setup_watchdog(struct abx80x_priv
*priv
)
678 static int abx80x_probe(struct i2c_client
*client
,
679 const struct i2c_device_id
*id
)
681 struct device_node
*np
= client
->dev
.of_node
;
682 struct abx80x_priv
*priv
;
683 int i
, data
, err
, trickle_cfg
= -EINVAL
;
685 unsigned int part
= id
->driver_data
;
686 unsigned int partnumber
;
687 unsigned int majrev
, minrev
;
692 if (!i2c_check_functionality(client
->adapter
, I2C_FUNC_I2C
))
695 err
= i2c_smbus_read_i2c_block_data(client
, ABX8XX_REG_ID0
,
698 dev_err(&client
->dev
, "Unable to read partnumber\n");
702 partnumber
= (buf
[0] << 8) | buf
[1];
703 majrev
= buf
[2] >> 3;
704 minrev
= buf
[2] & 0x7;
705 lot
= ((buf
[4] & 0x80) << 2) | ((buf
[6] & 0x80) << 1) | buf
[3];
706 uid
= ((buf
[4] & 0x7f) << 8) | buf
[5];
707 wafer
= (buf
[6] & 0x7c) >> 2;
708 dev_info(&client
->dev
, "model %04x, revision %u.%u, lot %x, wafer %x, uid %x\n",
709 partnumber
, majrev
, minrev
, lot
, wafer
, uid
);
711 data
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_CTRL1
);
713 dev_err(&client
->dev
, "Unable to read control register\n");
717 err
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_CTRL1
,
718 ((data
& ~(ABX8XX_CTRL_12_24
|
722 dev_err(&client
->dev
, "Unable to write control register\n");
726 /* Configure RV1805 specifics */
727 if (part
== RV1805
) {
729 * Avoid accidentally entering test mode. This can happen
730 * on the RV1805 in case the reserved bit 5 in control2
731 * register is set. RV-1805-C3 datasheet indicates that
732 * the bit should be cleared in section 11h - Control2.
734 data
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_CTRL2
);
736 dev_err(&client
->dev
,
737 "Unable to read control2 register\n");
741 err
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_CTRL2
,
742 data
& ~ABX8XX_CTRL2_RSVD
);
744 dev_err(&client
->dev
,
745 "Unable to write control2 register\n");
750 * Avoid extra power leakage. The RV1805 uses smaller
751 * 10pin package and the EXTI input is not present.
752 * Disable it to avoid leakage.
754 data
= i2c_smbus_read_byte_data(client
, ABX8XX_REG_OUT_CTRL
);
756 dev_err(&client
->dev
,
757 "Unable to read output control register\n");
762 * Write the configuration key register to enable access to
763 * the config2 register
765 err
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_CFG_KEY
,
766 ABX8XX_CFG_KEY_MISC
);
768 dev_err(&client
->dev
,
769 "Unable to write configuration key\n");
773 err
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_OUT_CTRL
,
774 data
| ABX8XX_OUT_CTRL_EXDS
);
776 dev_err(&client
->dev
,
777 "Unable to write output control register\n");
782 /* part autodetection */
783 if (part
== ABX80X
) {
784 for (i
= 0; abx80x_caps
[i
].pn
; i
++)
785 if (partnumber
== abx80x_caps
[i
].pn
)
787 if (abx80x_caps
[i
].pn
== 0) {
788 dev_err(&client
->dev
, "Unknown part: %04x\n",
795 if (partnumber
!= abx80x_caps
[part
].pn
) {
796 dev_err(&client
->dev
, "partnumber mismatch %04x != %04x\n",
797 partnumber
, abx80x_caps
[part
].pn
);
801 if (np
&& abx80x_caps
[part
].has_tc
)
802 trickle_cfg
= abx80x_dt_trickle_cfg(client
);
804 if (trickle_cfg
> 0) {
805 dev_info(&client
->dev
, "Enabling trickle charger: %02x\n",
807 abx80x_enable_trickle_charger(client
, trickle_cfg
);
810 err
= i2c_smbus_write_byte_data(client
, ABX8XX_REG_CD_TIMER_CTL
,
815 priv
= devm_kzalloc(&client
->dev
, sizeof(*priv
), GFP_KERNEL
);
819 priv
->rtc
= devm_rtc_allocate_device(&client
->dev
);
820 if (IS_ERR(priv
->rtc
))
821 return PTR_ERR(priv
->rtc
);
823 priv
->rtc
->ops
= &abx80x_rtc_ops
;
824 priv
->client
= client
;
826 i2c_set_clientdata(client
, priv
);
828 if (abx80x_caps
[part
].has_wdog
) {
829 err
= abx80x_setup_watchdog(priv
);
834 if (client
->irq
> 0) {
835 dev_info(&client
->dev
, "IRQ %d supplied\n", client
->irq
);
836 err
= devm_request_threaded_irq(&client
->dev
, client
->irq
, NULL
,
838 IRQF_SHARED
| IRQF_ONESHOT
,
842 dev_err(&client
->dev
, "unable to request IRQ, alarms disabled\n");
847 err
= rtc_add_group(priv
->rtc
, &rtc_calib_attr_group
);
849 dev_err(&client
->dev
, "Failed to create sysfs group: %d\n",
854 return devm_rtc_register_device(priv
->rtc
);
857 static const struct i2c_device_id abx80x_id
[] = {
858 { "abx80x", ABX80X
},
859 { "ab0801", AB0801
},
860 { "ab0803", AB0803
},
861 { "ab0804", AB0804
},
862 { "ab0805", AB0805
},
863 { "ab1801", AB1801
},
864 { "ab1803", AB1803
},
865 { "ab1804", AB1804
},
866 { "ab1805", AB1805
},
867 { "rv1805", RV1805
},
870 MODULE_DEVICE_TABLE(i2c
, abx80x_id
);
873 static const struct of_device_id abx80x_of_match
[] = {
875 .compatible
= "abracon,abx80x",
876 .data
= (void *)ABX80X
879 .compatible
= "abracon,ab0801",
880 .data
= (void *)AB0801
883 .compatible
= "abracon,ab0803",
884 .data
= (void *)AB0803
887 .compatible
= "abracon,ab0804",
888 .data
= (void *)AB0804
891 .compatible
= "abracon,ab0805",
892 .data
= (void *)AB0805
895 .compatible
= "abracon,ab1801",
896 .data
= (void *)AB1801
899 .compatible
= "abracon,ab1803",
900 .data
= (void *)AB1803
903 .compatible
= "abracon,ab1804",
904 .data
= (void *)AB1804
907 .compatible
= "abracon,ab1805",
908 .data
= (void *)AB1805
911 .compatible
= "microcrystal,rv1805",
912 .data
= (void *)RV1805
916 MODULE_DEVICE_TABLE(of
, abx80x_of_match
);
919 static struct i2c_driver abx80x_driver
= {
921 .name
= "rtc-abx80x",
922 .of_match_table
= of_match_ptr(abx80x_of_match
),
924 .probe
= abx80x_probe
,
925 .id_table
= abx80x_id
,
928 module_i2c_driver(abx80x_driver
);
930 MODULE_AUTHOR("Philippe De Muyter <phdm@macqel.be>");
931 MODULE_AUTHOR("Alexandre Belloni <alexandre.belloni@bootlin.com>");
932 MODULE_DESCRIPTION("Abracon ABX80X RTC driver");
933 MODULE_LICENSE("GPL v2");