2 * rtc-ds1307.c - RTC driver for some mostly-compatible I2C chips.
4 * Copyright (C) 2005 James Chapman (ds1337 core)
5 * Copyright (C) 2006 David Brownell
6 * Copyright (C) 2009 Matthias Fuchs (rx8025 support)
7 * Copyright (C) 2012 Bertrand Achard (nvram access fixes)
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
14 #include <linux/bcd.h>
15 #include <linux/i2c.h>
16 #include <linux/init.h>
17 #include <linux/module.h>
18 #include <linux/rtc/ds1307.h>
19 #include <linux/rtc.h>
20 #include <linux/slab.h>
21 #include <linux/string.h>
22 #include <linux/hwmon.h>
23 #include <linux/hwmon-sysfs.h>
26 * We can't determine type by probing, but if we expect pre-Linux code
27 * to have set the chip up as a clock (turning on the oscillator and
28 * setting the date and time), Linux can ignore the non-clock features.
29 * That's a natural job for a factory or repair bench.
42 last_ds_type
/* always last */
43 /* rs5c372 too? different address... */
47 /* RTC registers don't differ much, except for the century flag */
48 #define DS1307_REG_SECS 0x00 /* 00-59 */
49 # define DS1307_BIT_CH 0x80
50 # define DS1340_BIT_nEOSC 0x80
51 # define MCP794XX_BIT_ST 0x80
52 #define DS1307_REG_MIN 0x01 /* 00-59 */
53 #define DS1307_REG_HOUR 0x02 /* 00-23, or 1-12{am,pm} */
54 # define DS1307_BIT_12HR 0x40 /* in REG_HOUR */
55 # define DS1307_BIT_PM 0x20 /* in REG_HOUR */
56 # define DS1340_BIT_CENTURY_EN 0x80 /* in REG_HOUR */
57 # define DS1340_BIT_CENTURY 0x40 /* in REG_HOUR */
58 #define DS1307_REG_WDAY 0x03 /* 01-07 */
59 # define MCP794XX_BIT_VBATEN 0x08
60 #define DS1307_REG_MDAY 0x04 /* 01-31 */
61 #define DS1307_REG_MONTH 0x05 /* 01-12 */
62 # define DS1337_BIT_CENTURY 0x80 /* in REG_MONTH */
63 #define DS1307_REG_YEAR 0x06 /* 00-99 */
66 * Other registers (control, status, alarms, trickle charge, NVRAM, etc)
67 * start at 7, and they differ a LOT. Only control and status matter for
68 * basic RTC date and time functionality; be careful using them.
70 #define DS1307_REG_CONTROL 0x07 /* or ds1338 */
71 # define DS1307_BIT_OUT 0x80
72 # define DS1338_BIT_OSF 0x20
73 # define DS1307_BIT_SQWE 0x10
74 # define DS1307_BIT_RS1 0x02
75 # define DS1307_BIT_RS0 0x01
76 #define DS1337_REG_CONTROL 0x0e
77 # define DS1337_BIT_nEOSC 0x80
78 # define DS1339_BIT_BBSQI 0x20
79 # define DS3231_BIT_BBSQW 0x40 /* same as BBSQI */
80 # define DS1337_BIT_RS2 0x10
81 # define DS1337_BIT_RS1 0x08
82 # define DS1337_BIT_INTCN 0x04
83 # define DS1337_BIT_A2IE 0x02
84 # define DS1337_BIT_A1IE 0x01
85 #define DS1340_REG_CONTROL 0x07
86 # define DS1340_BIT_OUT 0x80
87 # define DS1340_BIT_FT 0x40
88 # define DS1340_BIT_CALIB_SIGN 0x20
89 # define DS1340_M_CALIBRATION 0x1f
90 #define DS1340_REG_FLAG 0x09
91 # define DS1340_BIT_OSF 0x80
92 #define DS1337_REG_STATUS 0x0f
93 # define DS1337_BIT_OSF 0x80
94 # define DS1337_BIT_A2I 0x02
95 # define DS1337_BIT_A1I 0x01
96 #define DS1339_REG_ALARM1_SECS 0x07
98 #define DS13XX_TRICKLE_CHARGER_MAGIC 0xa0
100 #define RX8025_REG_CTRL1 0x0e
101 # define RX8025_BIT_2412 0x20
102 #define RX8025_REG_CTRL2 0x0f
103 # define RX8025_BIT_PON 0x10
104 # define RX8025_BIT_VDET 0x40
105 # define RX8025_BIT_XST 0x20
109 u8 offset
; /* register's offset */
112 struct bin_attribute
*nvram
;
115 #define HAS_NVRAM 0 /* bit 0 == sysfs file active */
116 #define HAS_ALARM 1 /* bit 1 == irq claimed */
117 struct i2c_client
*client
;
118 struct rtc_device
*rtc
;
119 s32 (*read_block_data
)(const struct i2c_client
*client
, u8 command
,
120 u8 length
, u8
*values
);
121 s32 (*write_block_data
)(const struct i2c_client
*client
, u8 command
,
122 u8 length
, const u8
*values
);
129 u16 trickle_charger_reg
;
130 u8 trickle_charger_setup
;
131 u8 (*do_trickle_setup
)(struct i2c_client
*, uint32_t, bool);
134 static u8
do_trickle_setup_ds1339(struct i2c_client
*,
135 uint32_t ohms
, bool diode
);
137 static struct chip_desc chips
[last_ds_type
] = {
151 .trickle_charger_reg
= 0x10,
152 .do_trickle_setup
= &do_trickle_setup_ds1339
,
155 .trickle_charger_reg
= 0x08,
158 .trickle_charger_reg
= 0x0a,
165 /* this is battery backed SRAM */
166 .nvram_offset
= 0x20,
171 static const struct i2c_device_id ds1307_id
[] = {
172 { "ds1307", ds_1307
},
173 { "ds1337", ds_1337
},
174 { "ds1338", ds_1338
},
175 { "ds1339", ds_1339
},
176 { "ds1388", ds_1388
},
177 { "ds1340", ds_1340
},
178 { "ds3231", ds_3231
},
179 { "m41t00", m41t00
},
180 { "mcp7940x", mcp794xx
},
181 { "mcp7941x", mcp794xx
},
182 { "pt7c4338", ds_1307
},
183 { "rx8025", rx_8025
},
186 MODULE_DEVICE_TABLE(i2c
, ds1307_id
);
188 /*----------------------------------------------------------------------*/
190 #define BLOCK_DATA_MAX_TRIES 10
192 static s32
ds1307_read_block_data_once(const struct i2c_client
*client
,
193 u8 command
, u8 length
, u8
*values
)
197 for (i
= 0; i
< length
; i
++) {
198 data
= i2c_smbus_read_byte_data(client
, command
+ i
);
206 static s32
ds1307_read_block_data(const struct i2c_client
*client
, u8 command
,
207 u8 length
, u8
*values
)
213 dev_dbg(&client
->dev
, "ds1307_read_block_data (length=%d)\n", length
);
214 ret
= ds1307_read_block_data_once(client
, command
, length
, values
);
218 if (++tries
> BLOCK_DATA_MAX_TRIES
) {
219 dev_err(&client
->dev
,
220 "ds1307_read_block_data failed\n");
223 memcpy(oldvalues
, values
, length
);
224 ret
= ds1307_read_block_data_once(client
, command
, length
,
228 } while (memcmp(oldvalues
, values
, length
));
232 static s32
ds1307_write_block_data(const struct i2c_client
*client
, u8 command
,
233 u8 length
, const u8
*values
)
238 dev_dbg(&client
->dev
, "ds1307_write_block_data (length=%d)\n", length
);
242 if (++tries
> BLOCK_DATA_MAX_TRIES
) {
243 dev_err(&client
->dev
,
244 "ds1307_write_block_data failed\n");
247 for (i
= 0; i
< length
; i
++) {
248 ret
= i2c_smbus_write_byte_data(client
, command
+ i
,
253 ret
= ds1307_read_block_data_once(client
, command
, length
,
257 } while (memcmp(currvalues
, values
, length
));
261 /*----------------------------------------------------------------------*/
263 /* These RTC devices are not designed to be connected to a SMbus adapter.
264 SMbus limits block operations length to 32 bytes, whereas it's not
265 limited on I2C buses. As a result, accesses may exceed 32 bytes;
266 in that case, split them into smaller blocks */
268 static s32
ds1307_native_smbus_write_block_data(const struct i2c_client
*client
,
269 u8 command
, u8 length
, const u8
*values
)
273 if (length
<= I2C_SMBUS_BLOCK_MAX
)
274 return i2c_smbus_write_i2c_block_data(client
,
275 command
, length
, values
);
277 while (suboffset
< length
) {
278 s32 retval
= i2c_smbus_write_i2c_block_data(client
,
280 min(I2C_SMBUS_BLOCK_MAX
, length
- suboffset
),
285 suboffset
+= I2C_SMBUS_BLOCK_MAX
;
290 static s32
ds1307_native_smbus_read_block_data(const struct i2c_client
*client
,
291 u8 command
, u8 length
, u8
*values
)
295 if (length
<= I2C_SMBUS_BLOCK_MAX
)
296 return i2c_smbus_read_i2c_block_data(client
,
297 command
, length
, values
);
299 while (suboffset
< length
) {
300 s32 retval
= i2c_smbus_read_i2c_block_data(client
,
302 min(I2C_SMBUS_BLOCK_MAX
, length
- suboffset
),
307 suboffset
+= I2C_SMBUS_BLOCK_MAX
;
312 /*----------------------------------------------------------------------*/
315 * The ds1337 and ds1339 both have two alarms, but we only use the first
316 * one (with a "seconds" field). For ds1337 we expect nINTA is our alarm
317 * signal; ds1339 chips have only one alarm signal.
319 static irqreturn_t
ds1307_irq(int irq
, void *dev_id
)
321 struct i2c_client
*client
= dev_id
;
322 struct ds1307
*ds1307
= i2c_get_clientdata(client
);
323 struct mutex
*lock
= &ds1307
->rtc
->ops_lock
;
327 stat
= i2c_smbus_read_byte_data(client
, DS1337_REG_STATUS
);
331 if (stat
& DS1337_BIT_A1I
) {
332 stat
&= ~DS1337_BIT_A1I
;
333 i2c_smbus_write_byte_data(client
, DS1337_REG_STATUS
, stat
);
335 control
= i2c_smbus_read_byte_data(client
, DS1337_REG_CONTROL
);
339 control
&= ~DS1337_BIT_A1IE
;
340 i2c_smbus_write_byte_data(client
, DS1337_REG_CONTROL
, control
);
342 rtc_update_irq(ds1307
->rtc
, 1, RTC_AF
| RTC_IRQF
);
351 /*----------------------------------------------------------------------*/
353 static int ds1307_get_time(struct device
*dev
, struct rtc_time
*t
)
355 struct ds1307
*ds1307
= dev_get_drvdata(dev
);
358 /* read the RTC date and time registers all at once */
359 tmp
= ds1307
->read_block_data(ds1307
->client
,
360 ds1307
->offset
, 7, ds1307
->regs
);
362 dev_err(dev
, "%s error %d\n", "read", tmp
);
366 dev_dbg(dev
, "%s: %7ph\n", "read", ds1307
->regs
);
368 t
->tm_sec
= bcd2bin(ds1307
->regs
[DS1307_REG_SECS
] & 0x7f);
369 t
->tm_min
= bcd2bin(ds1307
->regs
[DS1307_REG_MIN
] & 0x7f);
370 tmp
= ds1307
->regs
[DS1307_REG_HOUR
] & 0x3f;
371 t
->tm_hour
= bcd2bin(tmp
);
372 t
->tm_wday
= bcd2bin(ds1307
->regs
[DS1307_REG_WDAY
] & 0x07) - 1;
373 t
->tm_mday
= bcd2bin(ds1307
->regs
[DS1307_REG_MDAY
] & 0x3f);
374 tmp
= ds1307
->regs
[DS1307_REG_MONTH
] & 0x1f;
375 t
->tm_mon
= bcd2bin(tmp
) - 1;
377 /* assume 20YY not 19YY, and ignore DS1337_BIT_CENTURY */
378 t
->tm_year
= bcd2bin(ds1307
->regs
[DS1307_REG_YEAR
]) + 100;
380 dev_dbg(dev
, "%s secs=%d, mins=%d, "
381 "hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
382 "read", t
->tm_sec
, t
->tm_min
,
383 t
->tm_hour
, t
->tm_mday
,
384 t
->tm_mon
, t
->tm_year
, t
->tm_wday
);
386 /* initial clock setting can be undefined */
387 return rtc_valid_tm(t
);
390 static int ds1307_set_time(struct device
*dev
, struct rtc_time
*t
)
392 struct ds1307
*ds1307
= dev_get_drvdata(dev
);
395 u8
*buf
= ds1307
->regs
;
397 dev_dbg(dev
, "%s secs=%d, mins=%d, "
398 "hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
399 "write", t
->tm_sec
, t
->tm_min
,
400 t
->tm_hour
, t
->tm_mday
,
401 t
->tm_mon
, t
->tm_year
, t
->tm_wday
);
403 buf
[DS1307_REG_SECS
] = bin2bcd(t
->tm_sec
);
404 buf
[DS1307_REG_MIN
] = bin2bcd(t
->tm_min
);
405 buf
[DS1307_REG_HOUR
] = bin2bcd(t
->tm_hour
);
406 buf
[DS1307_REG_WDAY
] = bin2bcd(t
->tm_wday
+ 1);
407 buf
[DS1307_REG_MDAY
] = bin2bcd(t
->tm_mday
);
408 buf
[DS1307_REG_MONTH
] = bin2bcd(t
->tm_mon
+ 1);
410 /* assume 20YY not 19YY */
411 tmp
= t
->tm_year
- 100;
412 buf
[DS1307_REG_YEAR
] = bin2bcd(tmp
);
414 switch (ds1307
->type
) {
418 buf
[DS1307_REG_MONTH
] |= DS1337_BIT_CENTURY
;
421 buf
[DS1307_REG_HOUR
] |= DS1340_BIT_CENTURY_EN
422 | DS1340_BIT_CENTURY
;
426 * these bits were cleared when preparing the date/time
427 * values and need to be set again before writing the
428 * buffer out to the device.
430 buf
[DS1307_REG_SECS
] |= MCP794XX_BIT_ST
;
431 buf
[DS1307_REG_WDAY
] |= MCP794XX_BIT_VBATEN
;
437 dev_dbg(dev
, "%s: %7ph\n", "write", buf
);
439 result
= ds1307
->write_block_data(ds1307
->client
,
440 ds1307
->offset
, 7, buf
);
442 dev_err(dev
, "%s error %d\n", "write", result
);
448 static int ds1337_read_alarm(struct device
*dev
, struct rtc_wkalrm
*t
)
450 struct i2c_client
*client
= to_i2c_client(dev
);
451 struct ds1307
*ds1307
= i2c_get_clientdata(client
);
454 if (!test_bit(HAS_ALARM
, &ds1307
->flags
))
457 /* read all ALARM1, ALARM2, and status registers at once */
458 ret
= ds1307
->read_block_data(client
,
459 DS1339_REG_ALARM1_SECS
, 9, ds1307
->regs
);
461 dev_err(dev
, "%s error %d\n", "alarm read", ret
);
465 dev_dbg(dev
, "%s: %4ph, %3ph, %2ph\n", "alarm read",
466 &ds1307
->regs
[0], &ds1307
->regs
[4], &ds1307
->regs
[7]);
469 * report alarm time (ALARM1); assume 24 hour and day-of-month modes,
470 * and that all four fields are checked matches
472 t
->time
.tm_sec
= bcd2bin(ds1307
->regs
[0] & 0x7f);
473 t
->time
.tm_min
= bcd2bin(ds1307
->regs
[1] & 0x7f);
474 t
->time
.tm_hour
= bcd2bin(ds1307
->regs
[2] & 0x3f);
475 t
->time
.tm_mday
= bcd2bin(ds1307
->regs
[3] & 0x3f);
477 t
->time
.tm_year
= -1;
478 t
->time
.tm_wday
= -1;
479 t
->time
.tm_yday
= -1;
480 t
->time
.tm_isdst
= -1;
483 t
->enabled
= !!(ds1307
->regs
[7] & DS1337_BIT_A1IE
);
484 t
->pending
= !!(ds1307
->regs
[8] & DS1337_BIT_A1I
);
486 dev_dbg(dev
, "%s secs=%d, mins=%d, "
487 "hours=%d, mday=%d, enabled=%d, pending=%d\n",
488 "alarm read", t
->time
.tm_sec
, t
->time
.tm_min
,
489 t
->time
.tm_hour
, t
->time
.tm_mday
,
490 t
->enabled
, t
->pending
);
495 static int ds1337_set_alarm(struct device
*dev
, struct rtc_wkalrm
*t
)
497 struct i2c_client
*client
= to_i2c_client(dev
);
498 struct ds1307
*ds1307
= i2c_get_clientdata(client
);
499 unsigned char *buf
= ds1307
->regs
;
503 if (!test_bit(HAS_ALARM
, &ds1307
->flags
))
506 dev_dbg(dev
, "%s secs=%d, mins=%d, "
507 "hours=%d, mday=%d, enabled=%d, pending=%d\n",
508 "alarm set", t
->time
.tm_sec
, t
->time
.tm_min
,
509 t
->time
.tm_hour
, t
->time
.tm_mday
,
510 t
->enabled
, t
->pending
);
512 /* read current status of both alarms and the chip */
513 ret
= ds1307
->read_block_data(client
,
514 DS1339_REG_ALARM1_SECS
, 9, buf
);
516 dev_err(dev
, "%s error %d\n", "alarm write", ret
);
519 control
= ds1307
->regs
[7];
520 status
= ds1307
->regs
[8];
522 dev_dbg(dev
, "%s: %4ph, %3ph, %02x %02x\n", "alarm set (old status)",
523 &ds1307
->regs
[0], &ds1307
->regs
[4], control
, status
);
525 /* set ALARM1, using 24 hour and day-of-month modes */
526 buf
[0] = bin2bcd(t
->time
.tm_sec
);
527 buf
[1] = bin2bcd(t
->time
.tm_min
);
528 buf
[2] = bin2bcd(t
->time
.tm_hour
);
529 buf
[3] = bin2bcd(t
->time
.tm_mday
);
531 /* set ALARM2 to non-garbage */
536 /* optionally enable ALARM1 */
537 buf
[7] = control
& ~(DS1337_BIT_A1IE
| DS1337_BIT_A2IE
);
539 dev_dbg(dev
, "alarm IRQ armed\n");
540 buf
[7] |= DS1337_BIT_A1IE
; /* only ALARM1 is used */
542 buf
[8] = status
& ~(DS1337_BIT_A1I
| DS1337_BIT_A2I
);
544 ret
= ds1307
->write_block_data(client
,
545 DS1339_REG_ALARM1_SECS
, 9, buf
);
547 dev_err(dev
, "can't set alarm time\n");
554 static int ds1307_alarm_irq_enable(struct device
*dev
, unsigned int enabled
)
556 struct i2c_client
*client
= to_i2c_client(dev
);
557 struct ds1307
*ds1307
= i2c_get_clientdata(client
);
560 if (!test_bit(HAS_ALARM
, &ds1307
->flags
))
563 ret
= i2c_smbus_read_byte_data(client
, DS1337_REG_CONTROL
);
568 ret
|= DS1337_BIT_A1IE
;
570 ret
&= ~DS1337_BIT_A1IE
;
572 ret
= i2c_smbus_write_byte_data(client
, DS1337_REG_CONTROL
, ret
);
579 static const struct rtc_class_ops ds13xx_rtc_ops
= {
580 .read_time
= ds1307_get_time
,
581 .set_time
= ds1307_set_time
,
582 .read_alarm
= ds1337_read_alarm
,
583 .set_alarm
= ds1337_set_alarm
,
584 .alarm_irq_enable
= ds1307_alarm_irq_enable
,
587 /*----------------------------------------------------------------------*/
590 * Alarm support for mcp794xx devices.
593 #define MCP794XX_REG_CONTROL 0x07
594 # define MCP794XX_BIT_ALM0_EN 0x10
595 # define MCP794XX_BIT_ALM1_EN 0x20
596 #define MCP794XX_REG_ALARM0_BASE 0x0a
597 #define MCP794XX_REG_ALARM0_CTRL 0x0d
598 #define MCP794XX_REG_ALARM1_BASE 0x11
599 #define MCP794XX_REG_ALARM1_CTRL 0x14
600 # define MCP794XX_BIT_ALMX_IF (1 << 3)
601 # define MCP794XX_BIT_ALMX_C0 (1 << 4)
602 # define MCP794XX_BIT_ALMX_C1 (1 << 5)
603 # define MCP794XX_BIT_ALMX_C2 (1 << 6)
604 # define MCP794XX_BIT_ALMX_POL (1 << 7)
605 # define MCP794XX_MSK_ALMX_MATCH (MCP794XX_BIT_ALMX_C0 | \
606 MCP794XX_BIT_ALMX_C1 | \
607 MCP794XX_BIT_ALMX_C2)
609 static irqreturn_t
mcp794xx_irq(int irq
, void *dev_id
)
611 struct i2c_client
*client
= dev_id
;
612 struct ds1307
*ds1307
= i2c_get_clientdata(client
);
613 struct mutex
*lock
= &ds1307
->rtc
->ops_lock
;
618 /* Check and clear alarm 0 interrupt flag. */
619 reg
= i2c_smbus_read_byte_data(client
, MCP794XX_REG_ALARM0_CTRL
);
622 if (!(reg
& MCP794XX_BIT_ALMX_IF
))
624 reg
&= ~MCP794XX_BIT_ALMX_IF
;
625 ret
= i2c_smbus_write_byte_data(client
, MCP794XX_REG_ALARM0_CTRL
, reg
);
629 /* Disable alarm 0. */
630 reg
= i2c_smbus_read_byte_data(client
, MCP794XX_REG_CONTROL
);
633 reg
&= ~MCP794XX_BIT_ALM0_EN
;
634 ret
= i2c_smbus_write_byte_data(client
, MCP794XX_REG_CONTROL
, reg
);
638 rtc_update_irq(ds1307
->rtc
, 1, RTC_AF
| RTC_IRQF
);
646 static int mcp794xx_read_alarm(struct device
*dev
, struct rtc_wkalrm
*t
)
648 struct i2c_client
*client
= to_i2c_client(dev
);
649 struct ds1307
*ds1307
= i2c_get_clientdata(client
);
650 u8
*regs
= ds1307
->regs
;
653 if (!test_bit(HAS_ALARM
, &ds1307
->flags
))
656 /* Read control and alarm 0 registers. */
657 ret
= ds1307
->read_block_data(client
, MCP794XX_REG_CONTROL
, 10, regs
);
661 t
->enabled
= !!(regs
[0] & MCP794XX_BIT_ALM0_EN
);
663 /* Report alarm 0 time assuming 24-hour and day-of-month modes. */
664 t
->time
.tm_sec
= bcd2bin(ds1307
->regs
[3] & 0x7f);
665 t
->time
.tm_min
= bcd2bin(ds1307
->regs
[4] & 0x7f);
666 t
->time
.tm_hour
= bcd2bin(ds1307
->regs
[5] & 0x3f);
667 t
->time
.tm_wday
= bcd2bin(ds1307
->regs
[6] & 0x7) - 1;
668 t
->time
.tm_mday
= bcd2bin(ds1307
->regs
[7] & 0x3f);
669 t
->time
.tm_mon
= bcd2bin(ds1307
->regs
[8] & 0x1f) - 1;
670 t
->time
.tm_year
= -1;
671 t
->time
.tm_yday
= -1;
672 t
->time
.tm_isdst
= -1;
674 dev_dbg(dev
, "%s, sec=%d min=%d hour=%d wday=%d mday=%d mon=%d "
675 "enabled=%d polarity=%d irq=%d match=%d\n", __func__
,
676 t
->time
.tm_sec
, t
->time
.tm_min
, t
->time
.tm_hour
,
677 t
->time
.tm_wday
, t
->time
.tm_mday
, t
->time
.tm_mon
, t
->enabled
,
678 !!(ds1307
->regs
[6] & MCP794XX_BIT_ALMX_POL
),
679 !!(ds1307
->regs
[6] & MCP794XX_BIT_ALMX_IF
),
680 (ds1307
->regs
[6] & MCP794XX_MSK_ALMX_MATCH
) >> 4);
685 static int mcp794xx_set_alarm(struct device
*dev
, struct rtc_wkalrm
*t
)
687 struct i2c_client
*client
= to_i2c_client(dev
);
688 struct ds1307
*ds1307
= i2c_get_clientdata(client
);
689 unsigned char *regs
= ds1307
->regs
;
692 if (!test_bit(HAS_ALARM
, &ds1307
->flags
))
695 dev_dbg(dev
, "%s, sec=%d min=%d hour=%d wday=%d mday=%d mon=%d "
696 "enabled=%d pending=%d\n", __func__
,
697 t
->time
.tm_sec
, t
->time
.tm_min
, t
->time
.tm_hour
,
698 t
->time
.tm_wday
, t
->time
.tm_mday
, t
->time
.tm_mon
,
699 t
->enabled
, t
->pending
);
701 /* Read control and alarm 0 registers. */
702 ret
= ds1307
->read_block_data(client
, MCP794XX_REG_CONTROL
, 10, regs
);
706 /* Set alarm 0, using 24-hour and day-of-month modes. */
707 regs
[3] = bin2bcd(t
->time
.tm_sec
);
708 regs
[4] = bin2bcd(t
->time
.tm_min
);
709 regs
[5] = bin2bcd(t
->time
.tm_hour
);
710 regs
[6] = bin2bcd(t
->time
.tm_wday
+ 1);
711 regs
[7] = bin2bcd(t
->time
.tm_mday
);
712 regs
[8] = bin2bcd(t
->time
.tm_mon
+ 1);
714 /* Clear the alarm 0 interrupt flag. */
715 regs
[6] &= ~MCP794XX_BIT_ALMX_IF
;
716 /* Set alarm match: second, minute, hour, day, date, month. */
717 regs
[6] |= MCP794XX_MSK_ALMX_MATCH
;
718 /* Disable interrupt. We will not enable until completely programmed */
719 regs
[0] &= ~MCP794XX_BIT_ALM0_EN
;
721 ret
= ds1307
->write_block_data(client
, MCP794XX_REG_CONTROL
, 10, regs
);
727 regs
[0] |= MCP794XX_BIT_ALM0_EN
;
728 return i2c_smbus_write_byte_data(client
, MCP794XX_REG_CONTROL
, regs
[0]);
731 static int mcp794xx_alarm_irq_enable(struct device
*dev
, unsigned int enabled
)
733 struct i2c_client
*client
= to_i2c_client(dev
);
734 struct ds1307
*ds1307
= i2c_get_clientdata(client
);
737 if (!test_bit(HAS_ALARM
, &ds1307
->flags
))
740 reg
= i2c_smbus_read_byte_data(client
, MCP794XX_REG_CONTROL
);
745 reg
|= MCP794XX_BIT_ALM0_EN
;
747 reg
&= ~MCP794XX_BIT_ALM0_EN
;
749 return i2c_smbus_write_byte_data(client
, MCP794XX_REG_CONTROL
, reg
);
752 static const struct rtc_class_ops mcp794xx_rtc_ops
= {
753 .read_time
= ds1307_get_time
,
754 .set_time
= ds1307_set_time
,
755 .read_alarm
= mcp794xx_read_alarm
,
756 .set_alarm
= mcp794xx_set_alarm
,
757 .alarm_irq_enable
= mcp794xx_alarm_irq_enable
,
760 /*----------------------------------------------------------------------*/
763 ds1307_nvram_read(struct file
*filp
, struct kobject
*kobj
,
764 struct bin_attribute
*attr
,
765 char *buf
, loff_t off
, size_t count
)
767 struct i2c_client
*client
;
768 struct ds1307
*ds1307
;
771 client
= kobj_to_i2c_client(kobj
);
772 ds1307
= i2c_get_clientdata(client
);
774 result
= ds1307
->read_block_data(client
, ds1307
->nvram_offset
+ off
,
777 dev_err(&client
->dev
, "%s error %d\n", "nvram read", result
);
782 ds1307_nvram_write(struct file
*filp
, struct kobject
*kobj
,
783 struct bin_attribute
*attr
,
784 char *buf
, loff_t off
, size_t count
)
786 struct i2c_client
*client
;
787 struct ds1307
*ds1307
;
790 client
= kobj_to_i2c_client(kobj
);
791 ds1307
= i2c_get_clientdata(client
);
793 result
= ds1307
->write_block_data(client
, ds1307
->nvram_offset
+ off
,
796 dev_err(&client
->dev
, "%s error %d\n", "nvram write", result
);
803 /*----------------------------------------------------------------------*/
805 static u8
do_trickle_setup_ds1339(struct i2c_client
*client
,
806 uint32_t ohms
, bool diode
)
808 u8 setup
= (diode
) ? DS1307_TRICKLE_CHARGER_DIODE
:
809 DS1307_TRICKLE_CHARGER_NO_DIODE
;
813 setup
|= DS1307_TRICKLE_CHARGER_250_OHM
;
816 setup
|= DS1307_TRICKLE_CHARGER_2K_OHM
;
819 setup
|= DS1307_TRICKLE_CHARGER_4K_OHM
;
822 dev_warn(&client
->dev
,
823 "Unsupported ohm value %u in dt\n", ohms
);
829 static void ds1307_trickle_of_init(struct i2c_client
*client
,
830 struct chip_desc
*chip
)
835 if (!chip
->do_trickle_setup
)
837 if (of_property_read_u32(client
->dev
.of_node
, "trickle-resistor-ohms" , &ohms
))
839 if (of_property_read_bool(client
->dev
.of_node
, "trickle-diode-disable"))
841 chip
->trickle_charger_setup
= chip
->do_trickle_setup(client
,
847 /*----------------------------------------------------------------------*/
849 #ifdef CONFIG_RTC_DRV_DS1307_HWMON
852 * Temperature sensor support for ds3231 devices.
855 #define DS3231_REG_TEMPERATURE 0x11
858 * A user-initiated temperature conversion is not started by this function,
859 * so the temperature is updated once every 64 seconds.
861 static int ds3231_hwmon_read_temp(struct device
*dev
, s16
*mC
)
863 struct ds1307
*ds1307
= dev_get_drvdata(dev
);
868 ret
= ds1307
->read_block_data(ds1307
->client
, DS3231_REG_TEMPERATURE
,
869 sizeof(temp_buf
), temp_buf
);
872 if (ret
!= sizeof(temp_buf
))
876 * Temperature is represented as a 10-bit code with a resolution of
877 * 0.25 degree celsius and encoded in two's complement format.
879 temp
= (temp_buf
[0] << 8) | temp_buf
[1];
886 static ssize_t
ds3231_hwmon_show_temp(struct device
*dev
,
887 struct device_attribute
*attr
, char *buf
)
892 ret
= ds3231_hwmon_read_temp(dev
, &temp
);
896 return sprintf(buf
, "%d\n", temp
);
898 static SENSOR_DEVICE_ATTR(temp1_input
, S_IRUGO
, ds3231_hwmon_show_temp
,
901 static struct attribute
*ds3231_hwmon_attrs
[] = {
902 &sensor_dev_attr_temp1_input
.dev_attr
.attr
,
905 ATTRIBUTE_GROUPS(ds3231_hwmon
);
907 static void ds1307_hwmon_register(struct ds1307
*ds1307
)
911 if (ds1307
->type
!= ds_3231
)
914 dev
= devm_hwmon_device_register_with_groups(&ds1307
->client
->dev
,
915 ds1307
->client
->name
,
916 ds1307
, ds3231_hwmon_groups
);
918 dev_warn(&ds1307
->client
->dev
,
919 "unable to register hwmon device %ld\n", PTR_ERR(dev
));
925 static void ds1307_hwmon_register(struct ds1307
*ds1307
)
931 static int ds1307_probe(struct i2c_client
*client
,
932 const struct i2c_device_id
*id
)
934 struct ds1307
*ds1307
;
937 struct chip_desc
*chip
= &chips
[id
->driver_data
];
938 struct i2c_adapter
*adapter
= to_i2c_adapter(client
->dev
.parent
);
939 bool want_irq
= false;
940 bool ds1307_can_wakeup_device
= false;
942 struct ds1307_platform_data
*pdata
= dev_get_platdata(&client
->dev
);
943 irq_handler_t irq_handler
= ds1307_irq
;
945 static const int bbsqi_bitpos
[] = {
947 [ds_1339
] = DS1339_BIT_BBSQI
,
948 [ds_3231
] = DS3231_BIT_BBSQW
,
950 const struct rtc_class_ops
*rtc_ops
= &ds13xx_rtc_ops
;
952 if (!i2c_check_functionality(adapter
, I2C_FUNC_SMBUS_BYTE_DATA
)
953 && !i2c_check_functionality(adapter
, I2C_FUNC_SMBUS_I2C_BLOCK
))
956 ds1307
= devm_kzalloc(&client
->dev
, sizeof(struct ds1307
), GFP_KERNEL
);
960 i2c_set_clientdata(client
, ds1307
);
962 ds1307
->client
= client
;
963 ds1307
->type
= id
->driver_data
;
965 if (!pdata
&& client
->dev
.of_node
)
966 ds1307_trickle_of_init(client
, chip
);
967 else if (pdata
&& pdata
->trickle_charger_setup
)
968 chip
->trickle_charger_setup
= pdata
->trickle_charger_setup
;
970 if (chip
->trickle_charger_setup
&& chip
->trickle_charger_reg
) {
971 dev_dbg(&client
->dev
, "writing trickle charger info 0x%x to 0x%x\n",
972 DS13XX_TRICKLE_CHARGER_MAGIC
| chip
->trickle_charger_setup
,
973 chip
->trickle_charger_reg
);
974 i2c_smbus_write_byte_data(client
, chip
->trickle_charger_reg
,
975 DS13XX_TRICKLE_CHARGER_MAGIC
|
976 chip
->trickle_charger_setup
);
980 if (i2c_check_functionality(adapter
, I2C_FUNC_SMBUS_I2C_BLOCK
)) {
981 ds1307
->read_block_data
= ds1307_native_smbus_read_block_data
;
982 ds1307
->write_block_data
= ds1307_native_smbus_write_block_data
;
984 ds1307
->read_block_data
= ds1307_read_block_data
;
985 ds1307
->write_block_data
= ds1307_write_block_data
;
990 * For devices with no IRQ directly connected to the SoC, the RTC chip
991 * can be forced as a wakeup source by stating that explicitly in
992 * the device's .dts file using the "wakeup-source" boolean property.
993 * If the "wakeup-source" property is set, don't request an IRQ.
994 * This will guarantee the 'wakealarm' sysfs entry is available on the device,
995 * if supported by the RTC.
997 if (of_property_read_bool(client
->dev
.of_node
, "wakeup-source")) {
998 ds1307_can_wakeup_device
= true;
1002 switch (ds1307
->type
) {
1006 /* get registers that the "rtc" read below won't read... */
1007 tmp
= ds1307
->read_block_data(ds1307
->client
,
1008 DS1337_REG_CONTROL
, 2, buf
);
1010 dev_dbg(&client
->dev
, "read error %d\n", tmp
);
1015 /* oscillator off? turn it on, so clock can tick. */
1016 if (ds1307
->regs
[0] & DS1337_BIT_nEOSC
)
1017 ds1307
->regs
[0] &= ~DS1337_BIT_nEOSC
;
1020 * Using IRQ or defined as wakeup-source?
1021 * Disable the square wave and both alarms.
1022 * For some variants, be sure alarms can trigger when we're
1023 * running on Vbackup (BBSQI/BBSQW)
1025 if (chip
->alarm
&& (ds1307
->client
->irq
> 0 ||
1026 ds1307_can_wakeup_device
)) {
1027 ds1307
->regs
[0] |= DS1337_BIT_INTCN
1028 | bbsqi_bitpos
[ds1307
->type
];
1029 ds1307
->regs
[0] &= ~(DS1337_BIT_A2IE
| DS1337_BIT_A1IE
);
1034 i2c_smbus_write_byte_data(client
, DS1337_REG_CONTROL
,
1037 /* oscillator fault? clear flag, and warn */
1038 if (ds1307
->regs
[1] & DS1337_BIT_OSF
) {
1039 i2c_smbus_write_byte_data(client
, DS1337_REG_STATUS
,
1040 ds1307
->regs
[1] & ~DS1337_BIT_OSF
);
1041 dev_warn(&client
->dev
, "SET TIME!\n");
1046 tmp
= i2c_smbus_read_i2c_block_data(ds1307
->client
,
1047 RX8025_REG_CTRL1
<< 4 | 0x08, 2, buf
);
1049 dev_dbg(&client
->dev
, "read error %d\n", tmp
);
1054 /* oscillator off? turn it on, so clock can tick. */
1055 if (!(ds1307
->regs
[1] & RX8025_BIT_XST
)) {
1056 ds1307
->regs
[1] |= RX8025_BIT_XST
;
1057 i2c_smbus_write_byte_data(client
,
1058 RX8025_REG_CTRL2
<< 4 | 0x08,
1060 dev_warn(&client
->dev
,
1061 "oscillator stop detected - SET TIME!\n");
1064 if (ds1307
->regs
[1] & RX8025_BIT_PON
) {
1065 ds1307
->regs
[1] &= ~RX8025_BIT_PON
;
1066 i2c_smbus_write_byte_data(client
,
1067 RX8025_REG_CTRL2
<< 4 | 0x08,
1069 dev_warn(&client
->dev
, "power-on detected\n");
1072 if (ds1307
->regs
[1] & RX8025_BIT_VDET
) {
1073 ds1307
->regs
[1] &= ~RX8025_BIT_VDET
;
1074 i2c_smbus_write_byte_data(client
,
1075 RX8025_REG_CTRL2
<< 4 | 0x08,
1077 dev_warn(&client
->dev
, "voltage drop detected\n");
1080 /* make sure we are running in 24hour mode */
1081 if (!(ds1307
->regs
[0] & RX8025_BIT_2412
)) {
1084 /* switch to 24 hour mode */
1085 i2c_smbus_write_byte_data(client
,
1086 RX8025_REG_CTRL1
<< 4 | 0x08,
1090 tmp
= i2c_smbus_read_i2c_block_data(ds1307
->client
,
1091 RX8025_REG_CTRL1
<< 4 | 0x08, 2, buf
);
1093 dev_dbg(&client
->dev
, "read error %d\n", tmp
);
1099 hour
= bcd2bin(ds1307
->regs
[DS1307_REG_HOUR
]);
1102 if (ds1307
->regs
[DS1307_REG_HOUR
] & DS1307_BIT_PM
)
1105 i2c_smbus_write_byte_data(client
,
1106 DS1307_REG_HOUR
<< 4 | 0x08,
1111 ds1307
->offset
= 1; /* Seconds starts at 1 */
1114 rtc_ops
= &mcp794xx_rtc_ops
;
1115 if (ds1307
->client
->irq
> 0 && chip
->alarm
) {
1116 irq_handler
= mcp794xx_irq
;
1125 /* read RTC registers */
1126 tmp
= ds1307
->read_block_data(ds1307
->client
, ds1307
->offset
, 8, buf
);
1128 dev_dbg(&client
->dev
, "read error %d\n", tmp
);
1134 * minimal sanity checking; some chips (like DS1340) don't
1135 * specify the extra bits as must-be-zero, but there are
1136 * still a few values that are clearly out-of-range.
1138 tmp
= ds1307
->regs
[DS1307_REG_SECS
];
1139 switch (ds1307
->type
) {
1142 /* clock halted? turn it on, so clock can tick. */
1143 if (tmp
& DS1307_BIT_CH
) {
1144 i2c_smbus_write_byte_data(client
, DS1307_REG_SECS
, 0);
1145 dev_warn(&client
->dev
, "SET TIME!\n");
1150 /* clock halted? turn it on, so clock can tick. */
1151 if (tmp
& DS1307_BIT_CH
)
1152 i2c_smbus_write_byte_data(client
, DS1307_REG_SECS
, 0);
1154 /* oscillator fault? clear flag, and warn */
1155 if (ds1307
->regs
[DS1307_REG_CONTROL
] & DS1338_BIT_OSF
) {
1156 i2c_smbus_write_byte_data(client
, DS1307_REG_CONTROL
,
1157 ds1307
->regs
[DS1307_REG_CONTROL
]
1159 dev_warn(&client
->dev
, "SET TIME!\n");
1164 /* clock halted? turn it on, so clock can tick. */
1165 if (tmp
& DS1340_BIT_nEOSC
)
1166 i2c_smbus_write_byte_data(client
, DS1307_REG_SECS
, 0);
1168 tmp
= i2c_smbus_read_byte_data(client
, DS1340_REG_FLAG
);
1170 dev_dbg(&client
->dev
, "read error %d\n", tmp
);
1175 /* oscillator fault? clear flag, and warn */
1176 if (tmp
& DS1340_BIT_OSF
) {
1177 i2c_smbus_write_byte_data(client
, DS1340_REG_FLAG
, 0);
1178 dev_warn(&client
->dev
, "SET TIME!\n");
1182 /* make sure that the backup battery is enabled */
1183 if (!(ds1307
->regs
[DS1307_REG_WDAY
] & MCP794XX_BIT_VBATEN
)) {
1184 i2c_smbus_write_byte_data(client
, DS1307_REG_WDAY
,
1185 ds1307
->regs
[DS1307_REG_WDAY
]
1186 | MCP794XX_BIT_VBATEN
);
1189 /* clock halted? turn it on, so clock can tick. */
1190 if (!(tmp
& MCP794XX_BIT_ST
)) {
1191 i2c_smbus_write_byte_data(client
, DS1307_REG_SECS
,
1193 dev_warn(&client
->dev
, "SET TIME!\n");
1202 tmp
= ds1307
->regs
[DS1307_REG_HOUR
];
1203 switch (ds1307
->type
) {
1207 * NOTE: ignores century bits; fix before deploying
1208 * systems that will run through year 2100.
1214 if (!(tmp
& DS1307_BIT_12HR
))
1218 * Be sure we're in 24 hour mode. Multi-master systems
1221 tmp
= bcd2bin(tmp
& 0x1f);
1224 if (ds1307
->regs
[DS1307_REG_HOUR
] & DS1307_BIT_PM
)
1226 i2c_smbus_write_byte_data(client
,
1227 ds1307
->offset
+ DS1307_REG_HOUR
,
1232 device_set_wakeup_capable(&client
->dev
, true);
1233 set_bit(HAS_ALARM
, &ds1307
->flags
);
1235 ds1307
->rtc
= devm_rtc_device_register(&client
->dev
, client
->name
,
1236 rtc_ops
, THIS_MODULE
);
1237 if (IS_ERR(ds1307
->rtc
)) {
1238 return PTR_ERR(ds1307
->rtc
);
1241 if (ds1307_can_wakeup_device
) {
1242 /* Disable request for an IRQ */
1244 dev_info(&client
->dev
, "'wakeup-source' is set, request for an IRQ is disabled!\n");
1245 /* We cannot support UIE mode if we do not have an IRQ line */
1246 ds1307
->rtc
->uie_unsupported
= 1;
1250 err
= devm_request_threaded_irq(&client
->dev
,
1251 client
->irq
, NULL
, irq_handler
,
1252 IRQF_SHARED
| IRQF_ONESHOT
,
1253 ds1307
->rtc
->name
, client
);
1256 device_set_wakeup_capable(&client
->dev
, false);
1257 clear_bit(HAS_ALARM
, &ds1307
->flags
);
1258 dev_err(&client
->dev
, "unable to request IRQ!\n");
1260 dev_dbg(&client
->dev
, "got IRQ %d\n", client
->irq
);
1263 if (chip
->nvram_size
) {
1265 ds1307
->nvram
= devm_kzalloc(&client
->dev
,
1266 sizeof(struct bin_attribute
),
1268 if (!ds1307
->nvram
) {
1269 dev_err(&client
->dev
, "cannot allocate memory for nvram sysfs\n");
1272 ds1307
->nvram
->attr
.name
= "nvram";
1273 ds1307
->nvram
->attr
.mode
= S_IRUGO
| S_IWUSR
;
1275 sysfs_bin_attr_init(ds1307
->nvram
);
1277 ds1307
->nvram
->read
= ds1307_nvram_read
;
1278 ds1307
->nvram
->write
= ds1307_nvram_write
;
1279 ds1307
->nvram
->size
= chip
->nvram_size
;
1280 ds1307
->nvram_offset
= chip
->nvram_offset
;
1282 err
= sysfs_create_bin_file(&client
->dev
.kobj
,
1285 dev_err(&client
->dev
,
1286 "unable to create sysfs file: %s\n",
1287 ds1307
->nvram
->attr
.name
);
1289 set_bit(HAS_NVRAM
, &ds1307
->flags
);
1290 dev_info(&client
->dev
, "%zu bytes nvram\n",
1291 ds1307
->nvram
->size
);
1296 ds1307_hwmon_register(ds1307
);
1304 static int ds1307_remove(struct i2c_client
*client
)
1306 struct ds1307
*ds1307
= i2c_get_clientdata(client
);
1308 if (test_and_clear_bit(HAS_NVRAM
, &ds1307
->flags
))
1309 sysfs_remove_bin_file(&client
->dev
.kobj
, ds1307
->nvram
);
1314 static struct i2c_driver ds1307_driver
= {
1316 .name
= "rtc-ds1307",
1318 .probe
= ds1307_probe
,
1319 .remove
= ds1307_remove
,
1320 .id_table
= ds1307_id
,
1323 module_i2c_driver(ds1307_driver
);
1325 MODULE_DESCRIPTION("RTC driver for DS1307 and similar chips");
1326 MODULE_LICENSE("GPL");