xref: /openbmc/linux/drivers/rtc/rtc-ds1307.c (revision 643d1f7f)
1 /*
2  * rtc-ds1307.c - RTC driver for some mostly-compatible I2C chips.
3  *
4  *  Copyright (C) 2005 James Chapman (ds1337 core)
5  *  Copyright (C) 2006 David Brownell
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  */
11 
12 #include <linux/module.h>
13 #include <linux/init.h>
14 #include <linux/slab.h>
15 #include <linux/i2c.h>
16 #include <linux/string.h>
17 #include <linux/rtc.h>
18 #include <linux/bcd.h>
19 
20 
21 
22 /* We can't determine type by probing, but if we expect pre-Linux code
23  * to have set the chip up as a clock (turning on the oscillator and
24  * setting the date and time), Linux can ignore the non-clock features.
25  * That's a natural job for a factory or repair bench.
26  *
27  * This is currently a simple no-alarms driver.  If your board has the
28  * alarm irq wired up on a ds1337 or ds1339, and you want to use that,
29  * then look at the rtc-rs5c372 driver for code to steal...
30  */
31 enum ds_type {
32 	ds_1307,
33 	ds_1337,
34 	ds_1338,
35 	ds_1339,
36 	ds_1340,
37 	m41t00,
38 	// rs5c372 too?  different address...
39 };
40 
41 
42 /* RTC registers don't differ much, except for the century flag */
43 #define DS1307_REG_SECS		0x00	/* 00-59 */
44 #	define DS1307_BIT_CH		0x80
45 #	define DS1340_BIT_nEOSC		0x80
46 #define DS1307_REG_MIN		0x01	/* 00-59 */
47 #define DS1307_REG_HOUR		0x02	/* 00-23, or 1-12{am,pm} */
48 #	define DS1307_BIT_12HR		0x40	/* in REG_HOUR */
49 #	define DS1307_BIT_PM		0x20	/* in REG_HOUR */
50 #	define DS1340_BIT_CENTURY_EN	0x80	/* in REG_HOUR */
51 #	define DS1340_BIT_CENTURY	0x40	/* in REG_HOUR */
52 #define DS1307_REG_WDAY		0x03	/* 01-07 */
53 #define DS1307_REG_MDAY		0x04	/* 01-31 */
54 #define DS1307_REG_MONTH	0x05	/* 01-12 */
55 #	define DS1337_BIT_CENTURY	0x80	/* in REG_MONTH */
56 #define DS1307_REG_YEAR		0x06	/* 00-99 */
57 
58 /* Other registers (control, status, alarms, trickle charge, NVRAM, etc)
59  * start at 7, and they differ a LOT. Only control and status matter for
60  * basic RTC date and time functionality; be careful using them.
61  */
62 #define DS1307_REG_CONTROL	0x07		/* or ds1338 */
63 #	define DS1307_BIT_OUT		0x80
64 #	define DS1338_BIT_OSF		0x20
65 #	define DS1307_BIT_SQWE		0x10
66 #	define DS1307_BIT_RS1		0x02
67 #	define DS1307_BIT_RS0		0x01
68 #define DS1337_REG_CONTROL	0x0e
69 #	define DS1337_BIT_nEOSC		0x80
70 #	define DS1337_BIT_RS2		0x10
71 #	define DS1337_BIT_RS1		0x08
72 #	define DS1337_BIT_INTCN		0x04
73 #	define DS1337_BIT_A2IE		0x02
74 #	define DS1337_BIT_A1IE		0x01
75 #define DS1340_REG_CONTROL	0x07
76 #	define DS1340_BIT_OUT		0x80
77 #	define DS1340_BIT_FT		0x40
78 #	define DS1340_BIT_CALIB_SIGN	0x20
79 #	define DS1340_M_CALIBRATION	0x1f
80 #define DS1340_REG_FLAG		0x09
81 #	define DS1340_BIT_OSF		0x80
82 #define DS1337_REG_STATUS	0x0f
83 #	define DS1337_BIT_OSF		0x80
84 #	define DS1337_BIT_A2I		0x02
85 #	define DS1337_BIT_A1I		0x01
86 #define DS1339_REG_TRICKLE	0x10
87 
88 
89 
90 struct ds1307 {
91 	u8			reg_addr;
92 	bool			has_nvram;
93 	u8			regs[8];
94 	enum ds_type		type;
95 	struct i2c_msg		msg[2];
96 	struct i2c_client	*client;
97 	struct i2c_client	dev;
98 	struct rtc_device	*rtc;
99 };
100 
101 struct chip_desc {
102 	char			name[9];
103 	unsigned		nvram56:1;
104 	unsigned		alarm:1;
105 	enum ds_type		type;
106 };
107 
108 static const struct chip_desc chips[] = { {
109 	.name		= "ds1307",
110 	.type		= ds_1307,
111 	.nvram56	= 1,
112 }, {
113 	.name		= "ds1337",
114 	.type		= ds_1337,
115 	.alarm		= 1,
116 }, {
117 	.name		= "ds1338",
118 	.type		= ds_1338,
119 	.nvram56	= 1,
120 }, {
121 	.name		= "ds1339",
122 	.type		= ds_1339,
123 	.alarm		= 1,
124 }, {
125 	.name		= "ds1340",
126 	.type		= ds_1340,
127 }, {
128 	.name		= "m41t00",
129 	.type		= m41t00,
130 }, };
131 
132 static inline const struct chip_desc *find_chip(const char *s)
133 {
134 	unsigned i;
135 
136 	for (i = 0; i < ARRAY_SIZE(chips); i++)
137 		if (strnicmp(s, chips[i].name, sizeof chips[i].name) == 0)
138 			return &chips[i];
139 	return NULL;
140 }
141 
142 static int ds1307_get_time(struct device *dev, struct rtc_time *t)
143 {
144 	struct ds1307	*ds1307 = dev_get_drvdata(dev);
145 	int		tmp;
146 
147 	/* read the RTC date and time registers all at once */
148 	ds1307->msg[1].flags = I2C_M_RD;
149 	ds1307->msg[1].len = 7;
150 
151 	tmp = i2c_transfer(to_i2c_adapter(ds1307->client->dev.parent),
152 			ds1307->msg, 2);
153 	if (tmp != 2) {
154 		dev_err(dev, "%s error %d\n", "read", tmp);
155 		return -EIO;
156 	}
157 
158 	dev_dbg(dev, "%s: %02x %02x %02x %02x %02x %02x %02x\n",
159 			"read",
160 			ds1307->regs[0], ds1307->regs[1],
161 			ds1307->regs[2], ds1307->regs[3],
162 			ds1307->regs[4], ds1307->regs[5],
163 			ds1307->regs[6]);
164 
165 	t->tm_sec = BCD2BIN(ds1307->regs[DS1307_REG_SECS] & 0x7f);
166 	t->tm_min = BCD2BIN(ds1307->regs[DS1307_REG_MIN] & 0x7f);
167 	tmp = ds1307->regs[DS1307_REG_HOUR] & 0x3f;
168 	t->tm_hour = BCD2BIN(tmp);
169 	t->tm_wday = BCD2BIN(ds1307->regs[DS1307_REG_WDAY] & 0x07) - 1;
170 	t->tm_mday = BCD2BIN(ds1307->regs[DS1307_REG_MDAY] & 0x3f);
171 	tmp = ds1307->regs[DS1307_REG_MONTH] & 0x1f;
172 	t->tm_mon = BCD2BIN(tmp) - 1;
173 
174 	/* assume 20YY not 19YY, and ignore DS1337_BIT_CENTURY */
175 	t->tm_year = BCD2BIN(ds1307->regs[DS1307_REG_YEAR]) + 100;
176 
177 	dev_dbg(dev, "%s secs=%d, mins=%d, "
178 		"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
179 		"read", t->tm_sec, t->tm_min,
180 		t->tm_hour, t->tm_mday,
181 		t->tm_mon, t->tm_year, t->tm_wday);
182 
183 	/* initial clock setting can be undefined */
184 	return rtc_valid_tm(t);
185 }
186 
187 static int ds1307_set_time(struct device *dev, struct rtc_time *t)
188 {
189 	struct ds1307	*ds1307 = dev_get_drvdata(dev);
190 	int		result;
191 	int		tmp;
192 	u8		*buf = ds1307->regs;
193 
194 	dev_dbg(dev, "%s secs=%d, mins=%d, "
195 		"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
196 		"write", t->tm_sec, t->tm_min,
197 		t->tm_hour, t->tm_mday,
198 		t->tm_mon, t->tm_year, t->tm_wday);
199 
200 	*buf++ = 0;		/* first register addr */
201 	buf[DS1307_REG_SECS] = BIN2BCD(t->tm_sec);
202 	buf[DS1307_REG_MIN] = BIN2BCD(t->tm_min);
203 	buf[DS1307_REG_HOUR] = BIN2BCD(t->tm_hour);
204 	buf[DS1307_REG_WDAY] = BIN2BCD(t->tm_wday + 1);
205 	buf[DS1307_REG_MDAY] = BIN2BCD(t->tm_mday);
206 	buf[DS1307_REG_MONTH] = BIN2BCD(t->tm_mon + 1);
207 
208 	/* assume 20YY not 19YY */
209 	tmp = t->tm_year - 100;
210 	buf[DS1307_REG_YEAR] = BIN2BCD(tmp);
211 
212 	switch (ds1307->type) {
213 	case ds_1337:
214 	case ds_1339:
215 		buf[DS1307_REG_MONTH] |= DS1337_BIT_CENTURY;
216 		break;
217 	case ds_1340:
218 		buf[DS1307_REG_HOUR] |= DS1340_BIT_CENTURY_EN
219 				| DS1340_BIT_CENTURY;
220 		break;
221 	default:
222 		break;
223 	}
224 
225 	ds1307->msg[1].flags = 0;
226 	ds1307->msg[1].len = 8;
227 
228 	dev_dbg(dev, "%s: %02x %02x %02x %02x %02x %02x %02x\n",
229 		"write", buf[0], buf[1], buf[2], buf[3],
230 		buf[4], buf[5], buf[6]);
231 
232 	result = i2c_transfer(to_i2c_adapter(ds1307->client->dev.parent),
233 			&ds1307->msg[1], 1);
234 	if (result != 1) {
235 		dev_err(dev, "%s error %d\n", "write", tmp);
236 		return -EIO;
237 	}
238 	return 0;
239 }
240 
241 static const struct rtc_class_ops ds13xx_rtc_ops = {
242 	.read_time	= ds1307_get_time,
243 	.set_time	= ds1307_set_time,
244 };
245 
246 /*----------------------------------------------------------------------*/
247 
248 #define NVRAM_SIZE	56
249 
250 static ssize_t
251 ds1307_nvram_read(struct kobject *kobj, struct bin_attribute *attr,
252 		char *buf, loff_t off, size_t count)
253 {
254 	struct i2c_client	*client;
255 	struct ds1307		*ds1307;
256 	struct i2c_msg		msg[2];
257 	int			result;
258 
259 	client = to_i2c_client(container_of(kobj, struct device, kobj));
260 	ds1307 = i2c_get_clientdata(client);
261 
262 	if (unlikely(off >= NVRAM_SIZE))
263 		return 0;
264 	if ((off + count) > NVRAM_SIZE)
265 		count = NVRAM_SIZE - off;
266 	if (unlikely(!count))
267 		return count;
268 
269 	msg[0].addr = client->addr;
270 	msg[0].flags = 0;
271 	msg[0].len = 1;
272 	msg[0].buf = buf;
273 
274 	buf[0] = 8 + off;
275 
276 	msg[1].addr = client->addr;
277 	msg[1].flags = I2C_M_RD;
278 	msg[1].len = count;
279 	msg[1].buf = buf;
280 
281 	result = i2c_transfer(to_i2c_adapter(client->dev.parent), msg, 2);
282 	if (result != 2) {
283 		dev_err(&client->dev, "%s error %d\n", "nvram read", result);
284 		return -EIO;
285 	}
286 	return count;
287 }
288 
289 static ssize_t
290 ds1307_nvram_write(struct kobject *kobj, struct bin_attribute *attr,
291 		char *buf, loff_t off, size_t count)
292 {
293 	struct i2c_client	*client;
294 	u8			buffer[NVRAM_SIZE + 1];
295 	int			ret;
296 
297 	client = to_i2c_client(container_of(kobj, struct device, kobj));
298 
299 	if (unlikely(off >= NVRAM_SIZE))
300 		return -EFBIG;
301 	if ((off + count) > NVRAM_SIZE)
302 		count = NVRAM_SIZE - off;
303 	if (unlikely(!count))
304 		return count;
305 
306 	buffer[0] = 8 + off;
307 	memcpy(buffer + 1, buf, count);
308 
309 	ret = i2c_master_send(client, buffer, count + 1);
310 	return (ret < 0) ? ret : (ret - 1);
311 }
312 
313 static struct bin_attribute nvram = {
314 	.attr = {
315 		.name	= "nvram",
316 		.mode	= S_IRUGO | S_IWUSR,
317 		.owner	= THIS_MODULE,
318 	},
319 
320 	.read	= ds1307_nvram_read,
321 	.write	= ds1307_nvram_write,
322 	.size	= NVRAM_SIZE,
323 };
324 
325 /*----------------------------------------------------------------------*/
326 
327 static struct i2c_driver ds1307_driver;
328 
329 static int __devinit ds1307_probe(struct i2c_client *client)
330 {
331 	struct ds1307		*ds1307;
332 	int			err = -ENODEV;
333 	int			tmp;
334 	const struct chip_desc	*chip;
335 	struct i2c_adapter	*adapter = to_i2c_adapter(client->dev.parent);
336 
337 	chip = find_chip(client->name);
338 	if (!chip) {
339 		dev_err(&client->dev, "unknown chip type '%s'\n",
340 				client->name);
341 		return -ENODEV;
342 	}
343 
344 	if (!i2c_check_functionality(adapter,
345 			I2C_FUNC_I2C | I2C_FUNC_SMBUS_WRITE_BYTE_DATA))
346 		return -EIO;
347 
348 	if (!(ds1307 = kzalloc(sizeof(struct ds1307), GFP_KERNEL)))
349 		return -ENOMEM;
350 
351 	ds1307->client = client;
352 	i2c_set_clientdata(client, ds1307);
353 
354 	ds1307->msg[0].addr = client->addr;
355 	ds1307->msg[0].flags = 0;
356 	ds1307->msg[0].len = 1;
357 	ds1307->msg[0].buf = &ds1307->reg_addr;
358 
359 	ds1307->msg[1].addr = client->addr;
360 	ds1307->msg[1].flags = I2C_M_RD;
361 	ds1307->msg[1].len = sizeof(ds1307->regs);
362 	ds1307->msg[1].buf = ds1307->regs;
363 
364 	ds1307->type = chip->type;
365 
366 	switch (ds1307->type) {
367 	case ds_1337:
368 	case ds_1339:
369 		ds1307->reg_addr = DS1337_REG_CONTROL;
370 		ds1307->msg[1].len = 2;
371 
372 		/* get registers that the "rtc" read below won't read... */
373 		tmp = i2c_transfer(adapter, ds1307->msg, 2);
374 		if (tmp != 2) {
375 			pr_debug("read error %d\n", tmp);
376 			err = -EIO;
377 			goto exit_free;
378 		}
379 
380 		ds1307->reg_addr = 0;
381 		ds1307->msg[1].len = sizeof(ds1307->regs);
382 
383 		/* oscillator off?  turn it on, so clock can tick. */
384 		if (ds1307->regs[0] & DS1337_BIT_nEOSC)
385 			i2c_smbus_write_byte_data(client, DS1337_REG_CONTROL,
386 				ds1307->regs[0] & ~DS1337_BIT_nEOSC);
387 
388 		/* oscillator fault?  clear flag, and warn */
389 		if (ds1307->regs[1] & DS1337_BIT_OSF) {
390 			i2c_smbus_write_byte_data(client, DS1337_REG_STATUS,
391 				ds1307->regs[1] & ~DS1337_BIT_OSF);
392 			dev_warn(&client->dev, "SET TIME!\n");
393 		}
394 		break;
395 	default:
396 		break;
397 	}
398 
399 read_rtc:
400 	/* read RTC registers */
401 
402 	tmp = i2c_transfer(adapter, ds1307->msg, 2);
403 	if (tmp != 2) {
404 		pr_debug("read error %d\n", tmp);
405 		err = -EIO;
406 		goto exit_free;
407 	}
408 
409 	/* minimal sanity checking; some chips (like DS1340) don't
410 	 * specify the extra bits as must-be-zero, but there are
411 	 * still a few values that are clearly out-of-range.
412 	 */
413 	tmp = ds1307->regs[DS1307_REG_SECS];
414 	switch (ds1307->type) {
415 	case ds_1340:
416 		/* FIXME read register with DS1340_BIT_OSF, use that to
417 		 * trigger the "set time" warning (*after* restarting the
418 		 * oscillator!) instead of this weaker ds1307/m41t00 test.
419 		 */
420 	case ds_1307:
421 	case m41t00:
422 		/* clock halted?  turn it on, so clock can tick. */
423 		if (tmp & DS1307_BIT_CH) {
424 			i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);
425 			dev_warn(&client->dev, "SET TIME!\n");
426 			goto read_rtc;
427 		}
428 		break;
429 	case ds_1338:
430 		/* clock halted?  turn it on, so clock can tick. */
431 		if (tmp & DS1307_BIT_CH)
432 			i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);
433 
434 		/* oscillator fault?  clear flag, and warn */
435 		if (ds1307->regs[DS1307_REG_CONTROL] & DS1338_BIT_OSF) {
436 			i2c_smbus_write_byte_data(client, DS1307_REG_CONTROL,
437 					ds1307->regs[DS1307_REG_CONTROL]
438 					& ~DS1338_BIT_OSF);
439 			dev_warn(&client->dev, "SET TIME!\n");
440 			goto read_rtc;
441 		}
442 		break;
443 	case ds_1337:
444 	case ds_1339:
445 		break;
446 	}
447 
448 	tmp = ds1307->regs[DS1307_REG_SECS];
449 	tmp = BCD2BIN(tmp & 0x7f);
450 	if (tmp > 60)
451 		goto exit_bad;
452 	tmp = BCD2BIN(ds1307->regs[DS1307_REG_MIN] & 0x7f);
453 	if (tmp > 60)
454 		goto exit_bad;
455 
456 	tmp = BCD2BIN(ds1307->regs[DS1307_REG_MDAY] & 0x3f);
457 	if (tmp == 0 || tmp > 31)
458 		goto exit_bad;
459 
460 	tmp = BCD2BIN(ds1307->regs[DS1307_REG_MONTH] & 0x1f);
461 	if (tmp == 0 || tmp > 12)
462 		goto exit_bad;
463 
464 	tmp = ds1307->regs[DS1307_REG_HOUR];
465 	switch (ds1307->type) {
466 	case ds_1340:
467 	case m41t00:
468 		/* NOTE: ignores century bits; fix before deploying
469 		 * systems that will run through year 2100.
470 		 */
471 		break;
472 	default:
473 		if (!(tmp & DS1307_BIT_12HR))
474 			break;
475 
476 		/* Be sure we're in 24 hour mode.  Multi-master systems
477 		 * take note...
478 		 */
479 		tmp = BCD2BIN(tmp & 0x1f);
480 		if (tmp == 12)
481 			tmp = 0;
482 		if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM)
483 			tmp += 12;
484 		i2c_smbus_write_byte_data(client,
485 				DS1307_REG_HOUR,
486 				BIN2BCD(tmp));
487 	}
488 
489 	ds1307->rtc = rtc_device_register(client->name, &client->dev,
490 				&ds13xx_rtc_ops, THIS_MODULE);
491 	if (IS_ERR(ds1307->rtc)) {
492 		err = PTR_ERR(ds1307->rtc);
493 		dev_err(&client->dev,
494 			"unable to register the class device\n");
495 		goto exit_free;
496 	}
497 
498 	if (chip->nvram56) {
499 		err = sysfs_create_bin_file(&client->dev.kobj, &nvram);
500 		if (err == 0) {
501 			ds1307->has_nvram = true;
502 			dev_info(&client->dev, "56 bytes nvram\n");
503 		}
504 	}
505 
506 	return 0;
507 
508 exit_bad:
509 	dev_dbg(&client->dev, "%s: %02x %02x %02x %02x %02x %02x %02x\n",
510 			"bogus register",
511 			ds1307->regs[0], ds1307->regs[1],
512 			ds1307->regs[2], ds1307->regs[3],
513 			ds1307->regs[4], ds1307->regs[5],
514 			ds1307->regs[6]);
515 
516 exit_free:
517 	kfree(ds1307);
518 	return err;
519 }
520 
521 static int __devexit ds1307_remove(struct i2c_client *client)
522 {
523 	struct ds1307	*ds1307 = i2c_get_clientdata(client);
524 
525 	if (ds1307->has_nvram)
526 		sysfs_remove_bin_file(&client->dev.kobj, &nvram);
527 
528 	rtc_device_unregister(ds1307->rtc);
529 	kfree(ds1307);
530 	return 0;
531 }
532 
533 static struct i2c_driver ds1307_driver = {
534 	.driver = {
535 		.name	= "rtc-ds1307",
536 		.owner	= THIS_MODULE,
537 	},
538 	.probe		= ds1307_probe,
539 	.remove		= __devexit_p(ds1307_remove),
540 };
541 
542 static int __init ds1307_init(void)
543 {
544 	return i2c_add_driver(&ds1307_driver);
545 }
546 module_init(ds1307_init);
547 
548 static void __exit ds1307_exit(void)
549 {
550 	i2c_del_driver(&ds1307_driver);
551 }
552 module_exit(ds1307_exit);
553 
554 MODULE_DESCRIPTION("RTC driver for DS1307 and similar chips");
555 MODULE_LICENSE("GPL");
556