xref: /openbmc/linux/drivers/rtc/rtc-ds1307.c (revision 93dc544c)
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 	unsigned		nvram56:1;
103 	unsigned		alarm:1;
104 };
105 
106 static const struct chip_desc chips[] = {
107 [ds_1307] = {
108 	.nvram56	= 1,
109 },
110 [ds_1337] = {
111 	.alarm		= 1,
112 },
113 [ds_1338] = {
114 	.nvram56	= 1,
115 },
116 [ds_1339] = {
117 	.alarm		= 1,
118 },
119 [ds_1340] = {
120 },
121 [m41t00] = {
122 }, };
123 
124 static const struct i2c_device_id ds1307_id[] = {
125 	{ "ds1307", ds_1307 },
126 	{ "ds1337", ds_1337 },
127 	{ "ds1338", ds_1338 },
128 	{ "ds1339", ds_1339 },
129 	{ "ds1340", ds_1340 },
130 	{ "m41t00", m41t00 },
131 	{ }
132 };
133 MODULE_DEVICE_TABLE(i2c, ds1307_id);
134 
135 static int ds1307_get_time(struct device *dev, struct rtc_time *t)
136 {
137 	struct ds1307	*ds1307 = dev_get_drvdata(dev);
138 	int		tmp;
139 
140 	/* read the RTC date and time registers all at once */
141 	ds1307->msg[1].flags = I2C_M_RD;
142 	ds1307->msg[1].len = 7;
143 
144 	tmp = i2c_transfer(to_i2c_adapter(ds1307->client->dev.parent),
145 			ds1307->msg, 2);
146 	if (tmp != 2) {
147 		dev_err(dev, "%s error %d\n", "read", tmp);
148 		return -EIO;
149 	}
150 
151 	dev_dbg(dev, "%s: %02x %02x %02x %02x %02x %02x %02x\n",
152 			"read",
153 			ds1307->regs[0], ds1307->regs[1],
154 			ds1307->regs[2], ds1307->regs[3],
155 			ds1307->regs[4], ds1307->regs[5],
156 			ds1307->regs[6]);
157 
158 	t->tm_sec = BCD2BIN(ds1307->regs[DS1307_REG_SECS] & 0x7f);
159 	t->tm_min = BCD2BIN(ds1307->regs[DS1307_REG_MIN] & 0x7f);
160 	tmp = ds1307->regs[DS1307_REG_HOUR] & 0x3f;
161 	t->tm_hour = BCD2BIN(tmp);
162 	t->tm_wday = BCD2BIN(ds1307->regs[DS1307_REG_WDAY] & 0x07) - 1;
163 	t->tm_mday = BCD2BIN(ds1307->regs[DS1307_REG_MDAY] & 0x3f);
164 	tmp = ds1307->regs[DS1307_REG_MONTH] & 0x1f;
165 	t->tm_mon = BCD2BIN(tmp) - 1;
166 
167 	/* assume 20YY not 19YY, and ignore DS1337_BIT_CENTURY */
168 	t->tm_year = BCD2BIN(ds1307->regs[DS1307_REG_YEAR]) + 100;
169 
170 	dev_dbg(dev, "%s secs=%d, mins=%d, "
171 		"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
172 		"read", t->tm_sec, t->tm_min,
173 		t->tm_hour, t->tm_mday,
174 		t->tm_mon, t->tm_year, t->tm_wday);
175 
176 	/* initial clock setting can be undefined */
177 	return rtc_valid_tm(t);
178 }
179 
180 static int ds1307_set_time(struct device *dev, struct rtc_time *t)
181 {
182 	struct ds1307	*ds1307 = dev_get_drvdata(dev);
183 	int		result;
184 	int		tmp;
185 	u8		*buf = ds1307->regs;
186 
187 	dev_dbg(dev, "%s secs=%d, mins=%d, "
188 		"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
189 		"write", t->tm_sec, t->tm_min,
190 		t->tm_hour, t->tm_mday,
191 		t->tm_mon, t->tm_year, t->tm_wday);
192 
193 	*buf++ = 0;		/* first register addr */
194 	buf[DS1307_REG_SECS] = BIN2BCD(t->tm_sec);
195 	buf[DS1307_REG_MIN] = BIN2BCD(t->tm_min);
196 	buf[DS1307_REG_HOUR] = BIN2BCD(t->tm_hour);
197 	buf[DS1307_REG_WDAY] = BIN2BCD(t->tm_wday + 1);
198 	buf[DS1307_REG_MDAY] = BIN2BCD(t->tm_mday);
199 	buf[DS1307_REG_MONTH] = BIN2BCD(t->tm_mon + 1);
200 
201 	/* assume 20YY not 19YY */
202 	tmp = t->tm_year - 100;
203 	buf[DS1307_REG_YEAR] = BIN2BCD(tmp);
204 
205 	switch (ds1307->type) {
206 	case ds_1337:
207 	case ds_1339:
208 		buf[DS1307_REG_MONTH] |= DS1337_BIT_CENTURY;
209 		break;
210 	case ds_1340:
211 		buf[DS1307_REG_HOUR] |= DS1340_BIT_CENTURY_EN
212 				| DS1340_BIT_CENTURY;
213 		break;
214 	default:
215 		break;
216 	}
217 
218 	ds1307->msg[1].flags = 0;
219 	ds1307->msg[1].len = 8;
220 
221 	dev_dbg(dev, "%s: %02x %02x %02x %02x %02x %02x %02x\n",
222 		"write", buf[0], buf[1], buf[2], buf[3],
223 		buf[4], buf[5], buf[6]);
224 
225 	result = i2c_transfer(to_i2c_adapter(ds1307->client->dev.parent),
226 			&ds1307->msg[1], 1);
227 	if (result != 1) {
228 		dev_err(dev, "%s error %d\n", "write", tmp);
229 		return -EIO;
230 	}
231 	return 0;
232 }
233 
234 static const struct rtc_class_ops ds13xx_rtc_ops = {
235 	.read_time	= ds1307_get_time,
236 	.set_time	= ds1307_set_time,
237 };
238 
239 /*----------------------------------------------------------------------*/
240 
241 #define NVRAM_SIZE	56
242 
243 static ssize_t
244 ds1307_nvram_read(struct kobject *kobj, struct bin_attribute *attr,
245 		char *buf, loff_t off, size_t count)
246 {
247 	struct i2c_client	*client;
248 	struct ds1307		*ds1307;
249 	struct i2c_msg		msg[2];
250 	int			result;
251 
252 	client = kobj_to_i2c_client(kobj);
253 	ds1307 = i2c_get_clientdata(client);
254 
255 	if (unlikely(off >= NVRAM_SIZE))
256 		return 0;
257 	if ((off + count) > NVRAM_SIZE)
258 		count = NVRAM_SIZE - off;
259 	if (unlikely(!count))
260 		return count;
261 
262 	msg[0].addr = client->addr;
263 	msg[0].flags = 0;
264 	msg[0].len = 1;
265 	msg[0].buf = buf;
266 
267 	buf[0] = 8 + off;
268 
269 	msg[1].addr = client->addr;
270 	msg[1].flags = I2C_M_RD;
271 	msg[1].len = count;
272 	msg[1].buf = buf;
273 
274 	result = i2c_transfer(to_i2c_adapter(client->dev.parent), msg, 2);
275 	if (result != 2) {
276 		dev_err(&client->dev, "%s error %d\n", "nvram read", result);
277 		return -EIO;
278 	}
279 	return count;
280 }
281 
282 static ssize_t
283 ds1307_nvram_write(struct kobject *kobj, struct bin_attribute *attr,
284 		char *buf, loff_t off, size_t count)
285 {
286 	struct i2c_client	*client;
287 	u8			buffer[NVRAM_SIZE + 1];
288 	int			ret;
289 
290 	client = kobj_to_i2c_client(kobj);
291 
292 	if (unlikely(off >= NVRAM_SIZE))
293 		return -EFBIG;
294 	if ((off + count) > NVRAM_SIZE)
295 		count = NVRAM_SIZE - off;
296 	if (unlikely(!count))
297 		return count;
298 
299 	buffer[0] = 8 + off;
300 	memcpy(buffer + 1, buf, count);
301 
302 	ret = i2c_master_send(client, buffer, count + 1);
303 	return (ret < 0) ? ret : (ret - 1);
304 }
305 
306 static struct bin_attribute nvram = {
307 	.attr = {
308 		.name	= "nvram",
309 		.mode	= S_IRUGO | S_IWUSR,
310 		.owner	= THIS_MODULE,
311 	},
312 
313 	.read	= ds1307_nvram_read,
314 	.write	= ds1307_nvram_write,
315 	.size	= NVRAM_SIZE,
316 };
317 
318 /*----------------------------------------------------------------------*/
319 
320 static struct i2c_driver ds1307_driver;
321 
322 static int __devinit ds1307_probe(struct i2c_client *client,
323 				  const struct i2c_device_id *id)
324 {
325 	struct ds1307		*ds1307;
326 	int			err = -ENODEV;
327 	int			tmp;
328 	const struct chip_desc	*chip = &chips[id->driver_data];
329 	struct i2c_adapter	*adapter = to_i2c_adapter(client->dev.parent);
330 
331 	if (!i2c_check_functionality(adapter,
332 			I2C_FUNC_I2C | I2C_FUNC_SMBUS_WRITE_BYTE_DATA))
333 		return -EIO;
334 
335 	if (!(ds1307 = kzalloc(sizeof(struct ds1307), GFP_KERNEL)))
336 		return -ENOMEM;
337 
338 	ds1307->client = client;
339 	i2c_set_clientdata(client, ds1307);
340 
341 	ds1307->msg[0].addr = client->addr;
342 	ds1307->msg[0].flags = 0;
343 	ds1307->msg[0].len = 1;
344 	ds1307->msg[0].buf = &ds1307->reg_addr;
345 
346 	ds1307->msg[1].addr = client->addr;
347 	ds1307->msg[1].flags = I2C_M_RD;
348 	ds1307->msg[1].len = sizeof(ds1307->regs);
349 	ds1307->msg[1].buf = ds1307->regs;
350 
351 	ds1307->type = id->driver_data;
352 
353 	switch (ds1307->type) {
354 	case ds_1337:
355 	case ds_1339:
356 		ds1307->reg_addr = DS1337_REG_CONTROL;
357 		ds1307->msg[1].len = 2;
358 
359 		/* get registers that the "rtc" read below won't read... */
360 		tmp = i2c_transfer(adapter, ds1307->msg, 2);
361 		if (tmp != 2) {
362 			pr_debug("read error %d\n", tmp);
363 			err = -EIO;
364 			goto exit_free;
365 		}
366 
367 		ds1307->reg_addr = 0;
368 		ds1307->msg[1].len = sizeof(ds1307->regs);
369 
370 		/* oscillator off?  turn it on, so clock can tick. */
371 		if (ds1307->regs[0] & DS1337_BIT_nEOSC)
372 			i2c_smbus_write_byte_data(client, DS1337_REG_CONTROL,
373 				ds1307->regs[0] & ~DS1337_BIT_nEOSC);
374 
375 		/* oscillator fault?  clear flag, and warn */
376 		if (ds1307->regs[1] & DS1337_BIT_OSF) {
377 			i2c_smbus_write_byte_data(client, DS1337_REG_STATUS,
378 				ds1307->regs[1] & ~DS1337_BIT_OSF);
379 			dev_warn(&client->dev, "SET TIME!\n");
380 		}
381 		break;
382 	default:
383 		break;
384 	}
385 
386 read_rtc:
387 	/* read RTC registers */
388 
389 	tmp = i2c_transfer(adapter, ds1307->msg, 2);
390 	if (tmp != 2) {
391 		pr_debug("read error %d\n", tmp);
392 		err = -EIO;
393 		goto exit_free;
394 	}
395 
396 	/* minimal sanity checking; some chips (like DS1340) don't
397 	 * specify the extra bits as must-be-zero, but there are
398 	 * still a few values that are clearly out-of-range.
399 	 */
400 	tmp = ds1307->regs[DS1307_REG_SECS];
401 	switch (ds1307->type) {
402 	case ds_1307:
403 	case m41t00:
404 		/* clock halted?  turn it on, so clock can tick. */
405 		if (tmp & DS1307_BIT_CH) {
406 			i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);
407 			dev_warn(&client->dev, "SET TIME!\n");
408 			goto read_rtc;
409 		}
410 		break;
411 	case ds_1338:
412 		/* clock halted?  turn it on, so clock can tick. */
413 		if (tmp & DS1307_BIT_CH)
414 			i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);
415 
416 		/* oscillator fault?  clear flag, and warn */
417 		if (ds1307->regs[DS1307_REG_CONTROL] & DS1338_BIT_OSF) {
418 			i2c_smbus_write_byte_data(client, DS1307_REG_CONTROL,
419 					ds1307->regs[DS1307_REG_CONTROL]
420 					& ~DS1338_BIT_OSF);
421 			dev_warn(&client->dev, "SET TIME!\n");
422 			goto read_rtc;
423 		}
424 		break;
425 	case ds_1340:
426 		/* clock halted?  turn it on, so clock can tick. */
427 		if (tmp & DS1340_BIT_nEOSC)
428 			i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);
429 
430 		tmp = i2c_smbus_read_byte_data(client, DS1340_REG_FLAG);
431 		if (tmp < 0) {
432 			pr_debug("read error %d\n", tmp);
433 			err = -EIO;
434 			goto exit_free;
435 		}
436 
437 		/* oscillator fault?  clear flag, and warn */
438 		if (tmp & DS1340_BIT_OSF) {
439 			i2c_smbus_write_byte_data(client, DS1340_REG_FLAG, 0);
440 			dev_warn(&client->dev, "SET TIME!\n");
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 	.id_table	= ds1307_id,
541 };
542 
543 static int __init ds1307_init(void)
544 {
545 	return i2c_add_driver(&ds1307_driver);
546 }
547 module_init(ds1307_init);
548 
549 static void __exit ds1307_exit(void)
550 {
551 	i2c_del_driver(&ds1307_driver);
552 }
553 module_exit(ds1307_exit);
554 
555 MODULE_DESCRIPTION("RTC driver for DS1307 and similar chips");
556 MODULE_LICENSE("GPL");
557