• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/rtc/
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 *  Copyright (C) 2009 Matthias Fuchs (rx8025 support)
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/module.h>
14#include <linux/init.h>
15#include <linux/slab.h>
16#include <linux/i2c.h>
17#include <linux/string.h>
18#include <linux/rtc.h>
19#include <linux/bcd.h>
20
21
22
23/* We can't determine type by probing, but if we expect pre-Linux code
24 * to have set the chip up as a clock (turning on the oscillator and
25 * setting the date and time), Linux can ignore the non-clock features.
26 * That's a natural job for a factory or repair bench.
27 */
28enum ds_type {
29	ds_1307,
30	ds_1337,
31	ds_1338,
32	ds_1339,
33	ds_1340,
34	ds_1388,
35	ds_3231,
36	m41t00,
37	rx_8025,
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 DS1339_BIT_BBSQI		0x20
71#	define DS3231_BIT_BBSQW		0x40 /* same as BBSQI */
72#	define DS1337_BIT_RS2		0x10
73#	define DS1337_BIT_RS1		0x08
74#	define DS1337_BIT_INTCN		0x04
75#	define DS1337_BIT_A2IE		0x02
76#	define DS1337_BIT_A1IE		0x01
77#define DS1340_REG_CONTROL	0x07
78#	define DS1340_BIT_OUT		0x80
79#	define DS1340_BIT_FT		0x40
80#	define DS1340_BIT_CALIB_SIGN	0x20
81#	define DS1340_M_CALIBRATION	0x1f
82#define DS1340_REG_FLAG		0x09
83#	define DS1340_BIT_OSF		0x80
84#define DS1337_REG_STATUS	0x0f
85#	define DS1337_BIT_OSF		0x80
86#	define DS1337_BIT_A2I		0x02
87#	define DS1337_BIT_A1I		0x01
88#define DS1339_REG_ALARM1_SECS	0x07
89#define DS1339_REG_TRICKLE	0x10
90
91#define RX8025_REG_CTRL1	0x0e
92#	define RX8025_BIT_2412		0x20
93#define RX8025_REG_CTRL2	0x0f
94#	define RX8025_BIT_PON		0x10
95#	define RX8025_BIT_VDET		0x40
96#	define RX8025_BIT_XST		0x20
97
98
99struct ds1307 {
100	u8			offset; /* register's offset */
101	u8			regs[11];
102	enum ds_type		type;
103	unsigned long		flags;
104#define HAS_NVRAM	0		/* bit 0 == sysfs file active */
105#define HAS_ALARM	1		/* bit 1 == irq claimed */
106	struct i2c_client	*client;
107	struct rtc_device	*rtc;
108	struct work_struct	work;
109	s32 (*read_block_data)(struct i2c_client *client, u8 command,
110			       u8 length, u8 *values);
111	s32 (*write_block_data)(struct i2c_client *client, u8 command,
112				u8 length, const u8 *values);
113};
114
115struct chip_desc {
116	unsigned		nvram56:1;
117	unsigned		alarm:1;
118};
119
120static const struct chip_desc chips[] = {
121[ds_1307] = {
122	.nvram56	= 1,
123},
124[ds_1337] = {
125	.alarm		= 1,
126},
127[ds_1338] = {
128	.nvram56	= 1,
129},
130[ds_1339] = {
131	.alarm		= 1,
132},
133[ds_1340] = {
134},
135[ds_3231] = {
136	.alarm		= 1,
137},
138[m41t00] = {
139},
140[rx_8025] = {
141}, };
142
143static const struct i2c_device_id ds1307_id[] = {
144	{ "ds1307", ds_1307 },
145	{ "ds1337", ds_1337 },
146	{ "ds1338", ds_1338 },
147	{ "ds1339", ds_1339 },
148	{ "ds1388", ds_1388 },
149	{ "ds1340", ds_1340 },
150	{ "ds3231", ds_3231 },
151	{ "m41t00", m41t00 },
152	{ "rx8025", rx_8025 },
153	{ }
154};
155MODULE_DEVICE_TABLE(i2c, ds1307_id);
156
157/*----------------------------------------------------------------------*/
158
159#define BLOCK_DATA_MAX_TRIES 10
160
161static s32 ds1307_read_block_data_once(struct i2c_client *client, u8 command,
162				  u8 length, u8 *values)
163{
164	s32 i, data;
165
166	for (i = 0; i < length; i++) {
167		data = i2c_smbus_read_byte_data(client, command + i);
168		if (data < 0)
169			return data;
170		values[i] = data;
171	}
172	return i;
173}
174
175static s32 ds1307_read_block_data(struct i2c_client *client, u8 command,
176				  u8 length, u8 *values)
177{
178	u8 oldvalues[I2C_SMBUS_BLOCK_MAX];
179	s32 ret;
180	int tries = 0;
181
182	dev_dbg(&client->dev, "ds1307_read_block_data (length=%d)\n", length);
183	ret = ds1307_read_block_data_once(client, command, length, values);
184	if (ret < 0)
185		return ret;
186	do {
187		if (++tries > BLOCK_DATA_MAX_TRIES) {
188			dev_err(&client->dev,
189				"ds1307_read_block_data failed\n");
190			return -EIO;
191		}
192		memcpy(oldvalues, values, length);
193		ret = ds1307_read_block_data_once(client, command, length,
194						  values);
195		if (ret < 0)
196			return ret;
197	} while (memcmp(oldvalues, values, length));
198	return length;
199}
200
201static s32 ds1307_write_block_data(struct i2c_client *client, u8 command,
202				   u8 length, const u8 *values)
203{
204	u8 currvalues[I2C_SMBUS_BLOCK_MAX];
205	int tries = 0;
206
207	dev_dbg(&client->dev, "ds1307_write_block_data (length=%d)\n", length);
208	do {
209		s32 i, ret;
210
211		if (++tries > BLOCK_DATA_MAX_TRIES) {
212			dev_err(&client->dev,
213				"ds1307_write_block_data failed\n");
214			return -EIO;
215		}
216		for (i = 0; i < length; i++) {
217			ret = i2c_smbus_write_byte_data(client, command + i,
218							values[i]);
219			if (ret < 0)
220				return ret;
221		}
222		ret = ds1307_read_block_data_once(client, command, length,
223						  currvalues);
224		if (ret < 0)
225			return ret;
226	} while (memcmp(currvalues, values, length));
227	return length;
228}
229
230/*----------------------------------------------------------------------*/
231
232/*
233 * The IRQ logic includes a "real" handler running in IRQ context just
234 * long enough to schedule this workqueue entry.   We need a task context
235 * to talk to the RTC, since I2C I/O calls require that; and disable the
236 * IRQ until we clear its status on the chip, so that this handler can
237 * work with any type of triggering (not just falling edge).
238 *
239 * The ds1337 and ds1339 both have two alarms, but we only use the first
240 * one (with a "seconds" field).  For ds1337 we expect nINTA is our alarm
241 * signal; ds1339 chips have only one alarm signal.
242 */
243static void ds1307_work(struct work_struct *work)
244{
245	struct ds1307		*ds1307;
246	struct i2c_client	*client;
247	struct mutex		*lock;
248	int			stat, control;
249
250	ds1307 = container_of(work, struct ds1307, work);
251	client = ds1307->client;
252	lock = &ds1307->rtc->ops_lock;
253
254	mutex_lock(lock);
255	stat = i2c_smbus_read_byte_data(client, DS1337_REG_STATUS);
256	if (stat < 0)
257		goto out;
258
259	if (stat & DS1337_BIT_A1I) {
260		stat &= ~DS1337_BIT_A1I;
261		i2c_smbus_write_byte_data(client, DS1337_REG_STATUS, stat);
262
263		control = i2c_smbus_read_byte_data(client, DS1337_REG_CONTROL);
264		if (control < 0)
265			goto out;
266
267		control &= ~DS1337_BIT_A1IE;
268		i2c_smbus_write_byte_data(client, DS1337_REG_CONTROL, control);
269
270		rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF);
271	}
272
273out:
274	if (test_bit(HAS_ALARM, &ds1307->flags))
275		enable_irq(client->irq);
276	mutex_unlock(lock);
277}
278
279static irqreturn_t ds1307_irq(int irq, void *dev_id)
280{
281	struct i2c_client	*client = dev_id;
282	struct ds1307		*ds1307 = i2c_get_clientdata(client);
283
284	disable_irq_nosync(irq);
285	schedule_work(&ds1307->work);
286	return IRQ_HANDLED;
287}
288
289/*----------------------------------------------------------------------*/
290
291static int ds1307_get_time(struct device *dev, struct rtc_time *t)
292{
293	struct ds1307	*ds1307 = dev_get_drvdata(dev);
294	int		tmp;
295
296	/* read the RTC date and time registers all at once */
297	tmp = ds1307->read_block_data(ds1307->client,
298		ds1307->offset, 7, ds1307->regs);
299	if (tmp != 7) {
300		dev_err(dev, "%s error %d\n", "read", tmp);
301		return -EIO;
302	}
303
304	dev_dbg(dev, "%s: %02x %02x %02x %02x %02x %02x %02x\n",
305			"read",
306			ds1307->regs[0], ds1307->regs[1],
307			ds1307->regs[2], ds1307->regs[3],
308			ds1307->regs[4], ds1307->regs[5],
309			ds1307->regs[6]);
310
311	t->tm_sec = bcd2bin(ds1307->regs[DS1307_REG_SECS] & 0x7f);
312	t->tm_min = bcd2bin(ds1307->regs[DS1307_REG_MIN] & 0x7f);
313	tmp = ds1307->regs[DS1307_REG_HOUR] & 0x3f;
314	t->tm_hour = bcd2bin(tmp);
315	t->tm_wday = bcd2bin(ds1307->regs[DS1307_REG_WDAY] & 0x07) - 1;
316	t->tm_mday = bcd2bin(ds1307->regs[DS1307_REG_MDAY] & 0x3f);
317	tmp = ds1307->regs[DS1307_REG_MONTH] & 0x1f;
318	t->tm_mon = bcd2bin(tmp) - 1;
319
320	/* assume 20YY not 19YY, and ignore DS1337_BIT_CENTURY */
321	t->tm_year = bcd2bin(ds1307->regs[DS1307_REG_YEAR]) + 100;
322
323	dev_dbg(dev, "%s secs=%d, mins=%d, "
324		"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
325		"read", t->tm_sec, t->tm_min,
326		t->tm_hour, t->tm_mday,
327		t->tm_mon, t->tm_year, t->tm_wday);
328
329	/* initial clock setting can be undefined */
330	return rtc_valid_tm(t);
331}
332
333static int ds1307_set_time(struct device *dev, struct rtc_time *t)
334{
335	struct ds1307	*ds1307 = dev_get_drvdata(dev);
336	int		result;
337	int		tmp;
338	u8		*buf = ds1307->regs;
339
340	dev_dbg(dev, "%s secs=%d, mins=%d, "
341		"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
342		"write", t->tm_sec, t->tm_min,
343		t->tm_hour, t->tm_mday,
344		t->tm_mon, t->tm_year, t->tm_wday);
345
346	buf[DS1307_REG_SECS] = bin2bcd(t->tm_sec);
347	buf[DS1307_REG_MIN] = bin2bcd(t->tm_min);
348	buf[DS1307_REG_HOUR] = bin2bcd(t->tm_hour);
349	buf[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1);
350	buf[DS1307_REG_MDAY] = bin2bcd(t->tm_mday);
351	buf[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1);
352
353	/* assume 20YY not 19YY */
354	tmp = t->tm_year - 100;
355	buf[DS1307_REG_YEAR] = bin2bcd(tmp);
356
357	switch (ds1307->type) {
358	case ds_1337:
359	case ds_1339:
360	case ds_3231:
361		buf[DS1307_REG_MONTH] |= DS1337_BIT_CENTURY;
362		break;
363	case ds_1340:
364		buf[DS1307_REG_HOUR] |= DS1340_BIT_CENTURY_EN
365				| DS1340_BIT_CENTURY;
366		break;
367	default:
368		break;
369	}
370
371	dev_dbg(dev, "%s: %02x %02x %02x %02x %02x %02x %02x\n",
372		"write", buf[0], buf[1], buf[2], buf[3],
373		buf[4], buf[5], buf[6]);
374
375	result = ds1307->write_block_data(ds1307->client,
376		ds1307->offset, 7, buf);
377	if (result < 0) {
378		dev_err(dev, "%s error %d\n", "write", result);
379		return result;
380	}
381	return 0;
382}
383
384static int ds1337_read_alarm(struct device *dev, struct rtc_wkalrm *t)
385{
386	struct i2c_client       *client = to_i2c_client(dev);
387	struct ds1307		*ds1307 = i2c_get_clientdata(client);
388	int			ret;
389
390	if (!test_bit(HAS_ALARM, &ds1307->flags))
391		return -EINVAL;
392
393	/* read all ALARM1, ALARM2, and status registers at once */
394	ret = ds1307->read_block_data(client,
395			DS1339_REG_ALARM1_SECS, 9, ds1307->regs);
396	if (ret != 9) {
397		dev_err(dev, "%s error %d\n", "alarm read", ret);
398		return -EIO;
399	}
400
401	dev_dbg(dev, "%s: %02x %02x %02x %02x, %02x %02x %02x, %02x %02x\n",
402			"alarm read",
403			ds1307->regs[0], ds1307->regs[1],
404			ds1307->regs[2], ds1307->regs[3],
405			ds1307->regs[4], ds1307->regs[5],
406			ds1307->regs[6], ds1307->regs[7],
407			ds1307->regs[8]);
408
409	/* report alarm time (ALARM1); assume 24 hour and day-of-month modes,
410	 * and that all four fields are checked matches
411	 */
412	t->time.tm_sec = bcd2bin(ds1307->regs[0] & 0x7f);
413	t->time.tm_min = bcd2bin(ds1307->regs[1] & 0x7f);
414	t->time.tm_hour = bcd2bin(ds1307->regs[2] & 0x3f);
415	t->time.tm_mday = bcd2bin(ds1307->regs[3] & 0x3f);
416	t->time.tm_mon = -1;
417	t->time.tm_year = -1;
418	t->time.tm_wday = -1;
419	t->time.tm_yday = -1;
420	t->time.tm_isdst = -1;
421
422	/* ... and status */
423	t->enabled = !!(ds1307->regs[7] & DS1337_BIT_A1IE);
424	t->pending = !!(ds1307->regs[8] & DS1337_BIT_A1I);
425
426	dev_dbg(dev, "%s secs=%d, mins=%d, "
427		"hours=%d, mday=%d, enabled=%d, pending=%d\n",
428		"alarm read", t->time.tm_sec, t->time.tm_min,
429		t->time.tm_hour, t->time.tm_mday,
430		t->enabled, t->pending);
431
432	return 0;
433}
434
435static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t)
436{
437	struct i2c_client       *client = to_i2c_client(dev);
438	struct ds1307		*ds1307 = i2c_get_clientdata(client);
439	unsigned char		*buf = ds1307->regs;
440	u8			control, status;
441	int			ret;
442
443	if (!test_bit(HAS_ALARM, &ds1307->flags))
444		return -EINVAL;
445
446	dev_dbg(dev, "%s secs=%d, mins=%d, "
447		"hours=%d, mday=%d, enabled=%d, pending=%d\n",
448		"alarm set", t->time.tm_sec, t->time.tm_min,
449		t->time.tm_hour, t->time.tm_mday,
450		t->enabled, t->pending);
451
452	/* read current status of both alarms and the chip */
453	ret = ds1307->read_block_data(client,
454			DS1339_REG_ALARM1_SECS, 9, buf);
455	if (ret != 9) {
456		dev_err(dev, "%s error %d\n", "alarm write", ret);
457		return -EIO;
458	}
459	control = ds1307->regs[7];
460	status = ds1307->regs[8];
461
462	dev_dbg(dev, "%s: %02x %02x %02x %02x, %02x %02x %02x, %02x %02x\n",
463			"alarm set (old status)",
464			ds1307->regs[0], ds1307->regs[1],
465			ds1307->regs[2], ds1307->regs[3],
466			ds1307->regs[4], ds1307->regs[5],
467			ds1307->regs[6], control, status);
468
469	/* set ALARM1, using 24 hour and day-of-month modes */
470	buf[0] = bin2bcd(t->time.tm_sec);
471	buf[1] = bin2bcd(t->time.tm_min);
472	buf[2] = bin2bcd(t->time.tm_hour);
473	buf[3] = bin2bcd(t->time.tm_mday);
474
475	/* set ALARM2 to non-garbage */
476	buf[4] = 0;
477	buf[5] = 0;
478	buf[6] = 0;
479
480	/* optionally enable ALARM1 */
481	buf[7] = control & ~(DS1337_BIT_A1IE | DS1337_BIT_A2IE);
482	if (t->enabled) {
483		dev_dbg(dev, "alarm IRQ armed\n");
484		buf[7] |= DS1337_BIT_A1IE;	/* only ALARM1 is used */
485	}
486	buf[8] = status & ~(DS1337_BIT_A1I | DS1337_BIT_A2I);
487
488	ret = ds1307->write_block_data(client,
489			DS1339_REG_ALARM1_SECS, 9, buf);
490	if (ret < 0) {
491		dev_err(dev, "can't set alarm time\n");
492		return ret;
493	}
494
495	return 0;
496}
497
498static int ds1307_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
499{
500	struct i2c_client	*client = to_i2c_client(dev);
501	struct ds1307		*ds1307 = i2c_get_clientdata(client);
502	int			ret;
503
504	switch (cmd) {
505	case RTC_AIE_OFF:
506		if (!test_bit(HAS_ALARM, &ds1307->flags))
507			return -ENOTTY;
508
509		ret = i2c_smbus_read_byte_data(client, DS1337_REG_CONTROL);
510		if (ret < 0)
511			return ret;
512
513		ret &= ~DS1337_BIT_A1IE;
514
515		ret = i2c_smbus_write_byte_data(client,
516						DS1337_REG_CONTROL, ret);
517		if (ret < 0)
518			return ret;
519
520		break;
521
522	case RTC_AIE_ON:
523		if (!test_bit(HAS_ALARM, &ds1307->flags))
524			return -ENOTTY;
525
526		ret = i2c_smbus_read_byte_data(client, DS1337_REG_CONTROL);
527		if (ret < 0)
528			return ret;
529
530		ret |= DS1337_BIT_A1IE;
531
532		ret = i2c_smbus_write_byte_data(client,
533						DS1337_REG_CONTROL, ret);
534		if (ret < 0)
535			return ret;
536
537		break;
538
539	default:
540		return -ENOIOCTLCMD;
541	}
542
543	return 0;
544}
545
546static const struct rtc_class_ops ds13xx_rtc_ops = {
547	.read_time	= ds1307_get_time,
548	.set_time	= ds1307_set_time,
549	.read_alarm	= ds1337_read_alarm,
550	.set_alarm	= ds1337_set_alarm,
551	.ioctl		= ds1307_ioctl,
552};
553
554/*----------------------------------------------------------------------*/
555
556#define NVRAM_SIZE	56
557
558static ssize_t
559ds1307_nvram_read(struct file *filp, struct kobject *kobj,
560		struct bin_attribute *attr,
561		char *buf, loff_t off, size_t count)
562{
563	struct i2c_client	*client;
564	struct ds1307		*ds1307;
565	int			result;
566
567	client = kobj_to_i2c_client(kobj);
568	ds1307 = i2c_get_clientdata(client);
569
570	if (unlikely(off >= NVRAM_SIZE))
571		return 0;
572	if ((off + count) > NVRAM_SIZE)
573		count = NVRAM_SIZE - off;
574	if (unlikely(!count))
575		return count;
576
577	result = ds1307->read_block_data(client, 8 + off, count, buf);
578	if (result < 0)
579		dev_err(&client->dev, "%s error %d\n", "nvram read", result);
580	return result;
581}
582
583static ssize_t
584ds1307_nvram_write(struct file *filp, struct kobject *kobj,
585		struct bin_attribute *attr,
586		char *buf, loff_t off, size_t count)
587{
588	struct i2c_client	*client;
589	struct ds1307		*ds1307;
590	int			result;
591
592	client = kobj_to_i2c_client(kobj);
593	ds1307 = i2c_get_clientdata(client);
594
595	if (unlikely(off >= NVRAM_SIZE))
596		return -EFBIG;
597	if ((off + count) > NVRAM_SIZE)
598		count = NVRAM_SIZE - off;
599	if (unlikely(!count))
600		return count;
601
602	result = ds1307->write_block_data(client, 8 + off, count, buf);
603	if (result < 0) {
604		dev_err(&client->dev, "%s error %d\n", "nvram write", result);
605		return result;
606	}
607	return count;
608}
609
610static struct bin_attribute nvram = {
611	.attr = {
612		.name	= "nvram",
613		.mode	= S_IRUGO | S_IWUSR,
614	},
615
616	.read	= ds1307_nvram_read,
617	.write	= ds1307_nvram_write,
618	.size	= NVRAM_SIZE,
619};
620
621/*----------------------------------------------------------------------*/
622
623static struct i2c_driver ds1307_driver;
624
625static int __devinit ds1307_probe(struct i2c_client *client,
626				  const struct i2c_device_id *id)
627{
628	struct ds1307		*ds1307;
629	int			err = -ENODEV;
630	int			tmp;
631	const struct chip_desc	*chip = &chips[id->driver_data];
632	struct i2c_adapter	*adapter = to_i2c_adapter(client->dev.parent);
633	int			want_irq = false;
634	unsigned char		*buf;
635	static const int	bbsqi_bitpos[] = {
636		[ds_1337] = 0,
637		[ds_1339] = DS1339_BIT_BBSQI,
638		[ds_3231] = DS3231_BIT_BBSQW,
639	};
640
641	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)
642	    && !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK))
643		return -EIO;
644
645	if (!(ds1307 = kzalloc(sizeof(struct ds1307), GFP_KERNEL)))
646		return -ENOMEM;
647
648	i2c_set_clientdata(client, ds1307);
649
650	ds1307->client	= client;
651	ds1307->type	= id->driver_data;
652	ds1307->offset	= 0;
653
654	buf = ds1307->regs;
655	if (i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) {
656		ds1307->read_block_data = i2c_smbus_read_i2c_block_data;
657		ds1307->write_block_data = i2c_smbus_write_i2c_block_data;
658	} else {
659		ds1307->read_block_data = ds1307_read_block_data;
660		ds1307->write_block_data = ds1307_write_block_data;
661	}
662
663	switch (ds1307->type) {
664	case ds_1337:
665	case ds_1339:
666	case ds_3231:
667		/* has IRQ? */
668		if (ds1307->client->irq > 0 && chip->alarm) {
669			INIT_WORK(&ds1307->work, ds1307_work);
670			want_irq = true;
671		}
672		/* get registers that the "rtc" read below won't read... */
673		tmp = ds1307->read_block_data(ds1307->client,
674				DS1337_REG_CONTROL, 2, buf);
675		if (tmp != 2) {
676			pr_debug("read error %d\n", tmp);
677			err = -EIO;
678			goto exit_free;
679		}
680
681		/* oscillator off?  turn it on, so clock can tick. */
682		if (ds1307->regs[0] & DS1337_BIT_nEOSC)
683			ds1307->regs[0] &= ~DS1337_BIT_nEOSC;
684
685		/* Using IRQ?  Disable the square wave and both alarms.
686		 * For some variants, be sure alarms can trigger when we're
687		 * running on Vbackup (BBSQI/BBSQW)
688		 */
689		if (want_irq) {
690			ds1307->regs[0] |= DS1337_BIT_INTCN
691					| bbsqi_bitpos[ds1307->type];
692			ds1307->regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE);
693		}
694
695		i2c_smbus_write_byte_data(client, DS1337_REG_CONTROL,
696							ds1307->regs[0]);
697
698		/* oscillator fault?  clear flag, and warn */
699		if (ds1307->regs[1] & DS1337_BIT_OSF) {
700			i2c_smbus_write_byte_data(client, DS1337_REG_STATUS,
701				ds1307->regs[1] & ~DS1337_BIT_OSF);
702			dev_warn(&client->dev, "SET TIME!\n");
703		}
704		break;
705
706	case rx_8025:
707		tmp = i2c_smbus_read_i2c_block_data(ds1307->client,
708				RX8025_REG_CTRL1 << 4 | 0x08, 2, buf);
709		if (tmp != 2) {
710			pr_debug("read error %d\n", tmp);
711			err = -EIO;
712			goto exit_free;
713		}
714
715		/* oscillator off?  turn it on, so clock can tick. */
716		if (!(ds1307->regs[1] & RX8025_BIT_XST)) {
717			ds1307->regs[1] |= RX8025_BIT_XST;
718			i2c_smbus_write_byte_data(client,
719						  RX8025_REG_CTRL2 << 4 | 0x08,
720						  ds1307->regs[1]);
721			dev_warn(&client->dev,
722				 "oscillator stop detected - SET TIME!\n");
723		}
724
725		if (ds1307->regs[1] & RX8025_BIT_PON) {
726			ds1307->regs[1] &= ~RX8025_BIT_PON;
727			i2c_smbus_write_byte_data(client,
728						  RX8025_REG_CTRL2 << 4 | 0x08,
729						  ds1307->regs[1]);
730			dev_warn(&client->dev, "power-on detected\n");
731		}
732
733		if (ds1307->regs[1] & RX8025_BIT_VDET) {
734			ds1307->regs[1] &= ~RX8025_BIT_VDET;
735			i2c_smbus_write_byte_data(client,
736						  RX8025_REG_CTRL2 << 4 | 0x08,
737						  ds1307->regs[1]);
738			dev_warn(&client->dev, "voltage drop detected\n");
739		}
740
741		/* make sure we are running in 24hour mode */
742		if (!(ds1307->regs[0] & RX8025_BIT_2412)) {
743			u8 hour;
744
745			/* switch to 24 hour mode */
746			i2c_smbus_write_byte_data(client,
747						  RX8025_REG_CTRL1 << 4 | 0x08,
748						  ds1307->regs[0] |
749						  RX8025_BIT_2412);
750
751			tmp = i2c_smbus_read_i2c_block_data(ds1307->client,
752					RX8025_REG_CTRL1 << 4 | 0x08, 2, buf);
753			if (tmp != 2) {
754				pr_debug("read error %d\n", tmp);
755				err = -EIO;
756				goto exit_free;
757			}
758
759			/* correct hour */
760			hour = bcd2bin(ds1307->regs[DS1307_REG_HOUR]);
761			if (hour == 12)
762				hour = 0;
763			if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM)
764				hour += 12;
765
766			i2c_smbus_write_byte_data(client,
767						  DS1307_REG_HOUR << 4 | 0x08,
768						  hour);
769		}
770		break;
771	case ds_1388:
772		ds1307->offset = 1; /* Seconds starts at 1 */
773		break;
774	default:
775		break;
776	}
777
778read_rtc:
779	/* read RTC registers */
780	tmp = ds1307->read_block_data(ds1307->client, ds1307->offset, 8, buf);
781	if (tmp != 8) {
782		pr_debug("read error %d\n", tmp);
783		err = -EIO;
784		goto exit_free;
785	}
786
787	/* minimal sanity checking; some chips (like DS1340) don't
788	 * specify the extra bits as must-be-zero, but there are
789	 * still a few values that are clearly out-of-range.
790	 */
791	tmp = ds1307->regs[DS1307_REG_SECS];
792	switch (ds1307->type) {
793	case ds_1307:
794	case m41t00:
795		/* clock halted?  turn it on, so clock can tick. */
796		if (tmp & DS1307_BIT_CH) {
797			i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);
798			dev_warn(&client->dev, "SET TIME!\n");
799			goto read_rtc;
800		}
801		break;
802	case ds_1338:
803		/* clock halted?  turn it on, so clock can tick. */
804		if (tmp & DS1307_BIT_CH)
805			i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);
806
807		/* oscillator fault?  clear flag, and warn */
808		if (ds1307->regs[DS1307_REG_CONTROL] & DS1338_BIT_OSF) {
809			i2c_smbus_write_byte_data(client, DS1307_REG_CONTROL,
810					ds1307->regs[DS1307_REG_CONTROL]
811					& ~DS1338_BIT_OSF);
812			dev_warn(&client->dev, "SET TIME!\n");
813			goto read_rtc;
814		}
815		break;
816	case ds_1340:
817		/* clock halted?  turn it on, so clock can tick. */
818		if (tmp & DS1340_BIT_nEOSC)
819			i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);
820
821		tmp = i2c_smbus_read_byte_data(client, DS1340_REG_FLAG);
822		if (tmp < 0) {
823			pr_debug("read error %d\n", tmp);
824			err = -EIO;
825			goto exit_free;
826		}
827
828		/* oscillator fault?  clear flag, and warn */
829		if (tmp & DS1340_BIT_OSF) {
830			i2c_smbus_write_byte_data(client, DS1340_REG_FLAG, 0);
831			dev_warn(&client->dev, "SET TIME!\n");
832		}
833		break;
834	case rx_8025:
835	case ds_1337:
836	case ds_1339:
837	case ds_1388:
838	case ds_3231:
839		break;
840	}
841
842	tmp = ds1307->regs[DS1307_REG_HOUR];
843	switch (ds1307->type) {
844	case ds_1340:
845	case m41t00:
846		/* NOTE: ignores century bits; fix before deploying
847		 * systems that will run through year 2100.
848		 */
849		break;
850	case rx_8025:
851		break;
852	default:
853		if (!(tmp & DS1307_BIT_12HR))
854			break;
855
856		/* Be sure we're in 24 hour mode.  Multi-master systems
857		 * take note...
858		 */
859		tmp = bcd2bin(tmp & 0x1f);
860		if (tmp == 12)
861			tmp = 0;
862		if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM)
863			tmp += 12;
864		i2c_smbus_write_byte_data(client,
865				ds1307->offset + DS1307_REG_HOUR,
866				bin2bcd(tmp));
867	}
868
869	ds1307->rtc = rtc_device_register(client->name, &client->dev,
870				&ds13xx_rtc_ops, THIS_MODULE);
871	if (IS_ERR(ds1307->rtc)) {
872		err = PTR_ERR(ds1307->rtc);
873		dev_err(&client->dev,
874			"unable to register the class device\n");
875		goto exit_free;
876	}
877
878	if (want_irq) {
879		err = request_irq(client->irq, ds1307_irq, IRQF_SHARED,
880			  ds1307->rtc->name, client);
881		if (err) {
882			dev_err(&client->dev,
883				"unable to request IRQ!\n");
884			goto exit_irq;
885		}
886
887		device_set_wakeup_capable(&client->dev, 1);
888		set_bit(HAS_ALARM, &ds1307->flags);
889		dev_dbg(&client->dev, "got IRQ %d\n", client->irq);
890	}
891
892	if (chip->nvram56) {
893		err = sysfs_create_bin_file(&client->dev.kobj, &nvram);
894		if (err == 0) {
895			set_bit(HAS_NVRAM, &ds1307->flags);
896			dev_info(&client->dev, "56 bytes nvram\n");
897		}
898	}
899
900	return 0;
901
902exit_irq:
903	rtc_device_unregister(ds1307->rtc);
904exit_free:
905	kfree(ds1307);
906	return err;
907}
908
909static int __devexit ds1307_remove(struct i2c_client *client)
910{
911	struct ds1307		*ds1307 = i2c_get_clientdata(client);
912
913	if (test_and_clear_bit(HAS_ALARM, &ds1307->flags)) {
914		free_irq(client->irq, client);
915		cancel_work_sync(&ds1307->work);
916	}
917
918	if (test_and_clear_bit(HAS_NVRAM, &ds1307->flags))
919		sysfs_remove_bin_file(&client->dev.kobj, &nvram);
920
921	rtc_device_unregister(ds1307->rtc);
922	kfree(ds1307);
923	return 0;
924}
925
926static struct i2c_driver ds1307_driver = {
927	.driver = {
928		.name	= "rtc-ds1307",
929		.owner	= THIS_MODULE,
930	},
931	.probe		= ds1307_probe,
932	.remove		= __devexit_p(ds1307_remove),
933	.id_table	= ds1307_id,
934};
935
936static int __init ds1307_init(void)
937{
938	return i2c_add_driver(&ds1307_driver);
939}
940module_init(ds1307_init);
941
942static void __exit ds1307_exit(void)
943{
944	i2c_del_driver(&ds1307_driver);
945}
946module_exit(ds1307_exit);
947
948MODULE_DESCRIPTION("RTC driver for DS1307 and similar chips");
949MODULE_LICENSE("GPL");
950