xref: /openbmc/linux/drivers/rtc/rtc-fm3130.c (revision 198b8ec8)
1 /*
2  * rtc-fm3130.c - RTC driver for Ramtron FM3130 I2C chip.
3  *
4  *  Copyright (C) 2008 Sergey Lapin
5  *  Based on ds1307 driver by James Chapman and 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/i2c.h>
14 #include <linux/rtc.h>
15 #include <linux/bcd.h>
16 #include <linux/slab.h>
17 
18 #define FM3130_RTC_CONTROL	(0x0)
19 #define FM3130_CAL_CONTROL	(0x1)
20 #define FM3130_RTC_SECONDS	(0x2)
21 #define FM3130_RTC_MINUTES	(0x3)
22 #define FM3130_RTC_HOURS	(0x4)
23 #define FM3130_RTC_DAY		(0x5)
24 #define FM3130_RTC_DATE		(0x6)
25 #define FM3130_RTC_MONTHS	(0x7)
26 #define FM3130_RTC_YEARS	(0x8)
27 
28 #define FM3130_ALARM_SECONDS	(0x9)
29 #define FM3130_ALARM_MINUTES	(0xa)
30 #define FM3130_ALARM_HOURS	(0xb)
31 #define FM3130_ALARM_DATE	(0xc)
32 #define FM3130_ALARM_MONTHS	(0xd)
33 #define FM3130_ALARM_WP_CONTROL	(0xe)
34 
35 #define FM3130_CAL_CONTROL_BIT_nOSCEN (1 << 7) /* Osciallator enabled */
36 #define FM3130_RTC_CONTROL_BIT_LB (1 << 7) /* Low battery */
37 #define FM3130_RTC_CONTROL_BIT_AF (1 << 6) /* Alarm flag */
38 #define FM3130_RTC_CONTROL_BIT_CF (1 << 5) /* Century overflow */
39 #define FM3130_RTC_CONTROL_BIT_POR (1 << 4) /* Power on reset */
40 #define FM3130_RTC_CONTROL_BIT_AEN (1 << 3) /* Alarm enable */
41 #define FM3130_RTC_CONTROL_BIT_CAL (1 << 2) /* Calibration mode */
42 #define FM3130_RTC_CONTROL_BIT_WRITE (1 << 1) /* W=1 -> write mode W=0 normal */
43 #define FM3130_RTC_CONTROL_BIT_READ (1 << 0) /* R=1 -> read mode R=0 normal */
44 
45 #define FM3130_CLOCK_REGS 7
46 #define FM3130_ALARM_REGS 5
47 
48 struct fm3130 {
49 	u8			reg_addr_time;
50 	u8 			reg_addr_alarm;
51 	u8			regs[15];
52 	struct i2c_msg		msg[4];
53 	struct i2c_client	*client;
54 	struct rtc_device	*rtc;
55 	int			alarm_valid;
56 	int			data_valid;
57 };
58 static const struct i2c_device_id fm3130_id[] = {
59 	{ "fm3130", 0 },
60 	{ }
61 };
62 MODULE_DEVICE_TABLE(i2c, fm3130_id);
63 
64 #define FM3130_MODE_NORMAL		0
65 #define FM3130_MODE_WRITE		1
66 #define FM3130_MODE_READ		2
67 
68 static void fm3130_rtc_mode(struct device *dev, int mode)
69 {
70 	struct fm3130 *fm3130 = dev_get_drvdata(dev);
71 
72 	fm3130->regs[FM3130_RTC_CONTROL] =
73 		i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL);
74 	switch (mode) {
75 	case FM3130_MODE_NORMAL:
76 		fm3130->regs[FM3130_RTC_CONTROL] &=
77 			~(FM3130_RTC_CONTROL_BIT_WRITE |
78 			FM3130_RTC_CONTROL_BIT_READ);
79 		break;
80 	case FM3130_MODE_WRITE:
81 		fm3130->regs[FM3130_RTC_CONTROL] |= FM3130_RTC_CONTROL_BIT_WRITE;
82 		break;
83 	case FM3130_MODE_READ:
84 		fm3130->regs[FM3130_RTC_CONTROL] |= FM3130_RTC_CONTROL_BIT_READ;
85 		break;
86 	default:
87 		dev_dbg(dev, "invalid mode %d\n", mode);
88 		break;
89 	}
90 
91 	i2c_smbus_write_byte_data(fm3130->client,
92 		 FM3130_RTC_CONTROL, fm3130->regs[FM3130_RTC_CONTROL]);
93 }
94 
95 static int fm3130_get_time(struct device *dev, struct rtc_time *t)
96 {
97 	struct fm3130 *fm3130 = dev_get_drvdata(dev);
98 	int		tmp;
99 
100 	if (!fm3130->data_valid) {
101 		/* We have invalid data in RTC, probably due
102 		to battery faults or other problems. Return EIO
103 		for now, it will allow us to set data later instead
104 		of error during probing which disables device */
105 		return -EIO;
106 	}
107 	fm3130_rtc_mode(dev, FM3130_MODE_READ);
108 
109 	/* read the RTC date and time registers all at once */
110 	tmp = i2c_transfer(to_i2c_adapter(fm3130->client->dev.parent),
111 			fm3130->msg, 2);
112 	if (tmp != 2) {
113 		dev_err(dev, "%s error %d\n", "read", tmp);
114 		return -EIO;
115 	}
116 
117 	fm3130_rtc_mode(dev, FM3130_MODE_NORMAL);
118 
119 	dev_dbg(dev, "%s: %15ph\n", "read", fm3130->regs);
120 
121 	t->tm_sec = bcd2bin(fm3130->regs[FM3130_RTC_SECONDS] & 0x7f);
122 	t->tm_min = bcd2bin(fm3130->regs[FM3130_RTC_MINUTES] & 0x7f);
123 	tmp = fm3130->regs[FM3130_RTC_HOURS] & 0x3f;
124 	t->tm_hour = bcd2bin(tmp);
125 	t->tm_wday = bcd2bin(fm3130->regs[FM3130_RTC_DAY] & 0x07) - 1;
126 	t->tm_mday = bcd2bin(fm3130->regs[FM3130_RTC_DATE] & 0x3f);
127 	tmp = fm3130->regs[FM3130_RTC_MONTHS] & 0x1f;
128 	t->tm_mon = bcd2bin(tmp) - 1;
129 
130 	/* assume 20YY not 19YY, and ignore CF bit */
131 	t->tm_year = bcd2bin(fm3130->regs[FM3130_RTC_YEARS]) + 100;
132 
133 	dev_dbg(dev, "%s secs=%d, mins=%d, "
134 		"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
135 		"read", t->tm_sec, t->tm_min,
136 		t->tm_hour, t->tm_mday,
137 		t->tm_mon, t->tm_year, t->tm_wday);
138 
139 	/* initial clock setting can be undefined */
140 	return rtc_valid_tm(t);
141 }
142 
143 
144 static int fm3130_set_time(struct device *dev, struct rtc_time *t)
145 {
146 	struct fm3130 *fm3130 = dev_get_drvdata(dev);
147 	int		tmp, i;
148 	u8		*buf = fm3130->regs;
149 
150 	dev_dbg(dev, "%s secs=%d, mins=%d, "
151 		"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
152 		"write", t->tm_sec, t->tm_min,
153 		t->tm_hour, t->tm_mday,
154 		t->tm_mon, t->tm_year, t->tm_wday);
155 
156 	/* first register addr */
157 	buf[FM3130_RTC_SECONDS] = bin2bcd(t->tm_sec);
158 	buf[FM3130_RTC_MINUTES] = bin2bcd(t->tm_min);
159 	buf[FM3130_RTC_HOURS] = bin2bcd(t->tm_hour);
160 	buf[FM3130_RTC_DAY] = bin2bcd(t->tm_wday + 1);
161 	buf[FM3130_RTC_DATE] = bin2bcd(t->tm_mday);
162 	buf[FM3130_RTC_MONTHS] = bin2bcd(t->tm_mon + 1);
163 
164 	/* assume 20YY not 19YY */
165 	tmp = t->tm_year - 100;
166 	buf[FM3130_RTC_YEARS] = bin2bcd(tmp);
167 
168 	dev_dbg(dev, "%s: %15ph\n", "write", buf);
169 
170 	fm3130_rtc_mode(dev, FM3130_MODE_WRITE);
171 
172 	/* Writing time registers, we don't support multibyte transfers */
173 	for (i = 0; i < FM3130_CLOCK_REGS; i++) {
174 		i2c_smbus_write_byte_data(fm3130->client,
175 					FM3130_RTC_SECONDS + i,
176 					fm3130->regs[FM3130_RTC_SECONDS + i]);
177 	}
178 
179 	fm3130_rtc_mode(dev, FM3130_MODE_NORMAL);
180 
181 	/* We assume here that data are valid once written */
182 	if (!fm3130->data_valid)
183 		fm3130->data_valid = 1;
184 	return 0;
185 }
186 
187 static int fm3130_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
188 {
189 	struct fm3130 *fm3130 = dev_get_drvdata(dev);
190 	int tmp;
191 	struct rtc_time *tm = &alrm->time;
192 
193 	if (!fm3130->alarm_valid) {
194 		/*
195 		 * We have invalid alarm in RTC, probably due to battery faults
196 		 * or other problems. Return EIO for now, it will allow us to
197 		 * set alarm value later instead of error during probing which
198 		 * disables device
199 		 */
200 		return -EIO;
201 	}
202 
203 	/* read the RTC alarm registers all at once */
204 	tmp = i2c_transfer(to_i2c_adapter(fm3130->client->dev.parent),
205 			&fm3130->msg[2], 2);
206 	if (tmp != 2) {
207 		dev_err(dev, "%s error %d\n", "read", tmp);
208 		return -EIO;
209 	}
210 	dev_dbg(dev, "alarm read %02x %02x %02x %02x %02x\n",
211 			fm3130->regs[FM3130_ALARM_SECONDS],
212 			fm3130->regs[FM3130_ALARM_MINUTES],
213 			fm3130->regs[FM3130_ALARM_HOURS],
214 			fm3130->regs[FM3130_ALARM_DATE],
215 			fm3130->regs[FM3130_ALARM_MONTHS]);
216 
217 	tm->tm_sec	= bcd2bin(fm3130->regs[FM3130_ALARM_SECONDS] & 0x7F);
218 	tm->tm_min	= bcd2bin(fm3130->regs[FM3130_ALARM_MINUTES] & 0x7F);
219 	tm->tm_hour	= bcd2bin(fm3130->regs[FM3130_ALARM_HOURS] & 0x3F);
220 	tm->tm_mday	= bcd2bin(fm3130->regs[FM3130_ALARM_DATE] & 0x3F);
221 	tm->tm_mon	= bcd2bin(fm3130->regs[FM3130_ALARM_MONTHS] & 0x1F);
222 
223 	if (tm->tm_mon > 0)
224 		tm->tm_mon -= 1; /* RTC is 1-12, tm_mon is 0-11 */
225 
226 	dev_dbg(dev, "%s secs=%d, mins=%d, "
227 		"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
228 		"read alarm", tm->tm_sec, tm->tm_min,
229 		tm->tm_hour, tm->tm_mday,
230 		tm->tm_mon, tm->tm_year, tm->tm_wday);
231 
232 	/* check if alarm enabled */
233 	fm3130->regs[FM3130_RTC_CONTROL] =
234 		i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL);
235 
236 	if ((fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_AEN) &&
237 		(~fm3130->regs[FM3130_RTC_CONTROL] &
238 			FM3130_RTC_CONTROL_BIT_CAL)) {
239 		alrm->enabled = 1;
240 	}
241 
242 	return 0;
243 }
244 
245 static int fm3130_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
246 {
247 	struct fm3130 *fm3130 = dev_get_drvdata(dev);
248 	struct rtc_time *tm = &alrm->time;
249 	int i;
250 
251 	dev_dbg(dev, "%s secs=%d, mins=%d, "
252 		"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
253 		"write alarm", tm->tm_sec, tm->tm_min,
254 		tm->tm_hour, tm->tm_mday,
255 		tm->tm_mon, tm->tm_year, tm->tm_wday);
256 
257 	fm3130->regs[FM3130_ALARM_SECONDS] =
258 		(tm->tm_sec != -1) ? bin2bcd(tm->tm_sec) : 0x80;
259 
260 	fm3130->regs[FM3130_ALARM_MINUTES] =
261 		(tm->tm_min != -1) ? bin2bcd(tm->tm_min) : 0x80;
262 
263 	fm3130->regs[FM3130_ALARM_HOURS] =
264 		(tm->tm_hour != -1) ? bin2bcd(tm->tm_hour) : 0x80;
265 
266 	fm3130->regs[FM3130_ALARM_DATE] =
267 		(tm->tm_mday != -1) ? bin2bcd(tm->tm_mday) : 0x80;
268 
269 	fm3130->regs[FM3130_ALARM_MONTHS] =
270 		(tm->tm_mon != -1) ? bin2bcd(tm->tm_mon + 1) : 0x80;
271 
272 	dev_dbg(dev, "alarm write %02x %02x %02x %02x %02x\n",
273 			fm3130->regs[FM3130_ALARM_SECONDS],
274 			fm3130->regs[FM3130_ALARM_MINUTES],
275 			fm3130->regs[FM3130_ALARM_HOURS],
276 			fm3130->regs[FM3130_ALARM_DATE],
277 			fm3130->regs[FM3130_ALARM_MONTHS]);
278 	/* Writing time registers, we don't support multibyte transfers */
279 	for (i = 0; i < FM3130_ALARM_REGS; i++) {
280 		i2c_smbus_write_byte_data(fm3130->client,
281 					FM3130_ALARM_SECONDS + i,
282 					fm3130->regs[FM3130_ALARM_SECONDS + i]);
283 	}
284 	fm3130->regs[FM3130_RTC_CONTROL] =
285 		i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL);
286 
287 	/* enable or disable alarm */
288 	if (alrm->enabled) {
289 		i2c_smbus_write_byte_data(fm3130->client, FM3130_RTC_CONTROL,
290 			(fm3130->regs[FM3130_RTC_CONTROL] &
291 				~(FM3130_RTC_CONTROL_BIT_CAL)) |
292 					FM3130_RTC_CONTROL_BIT_AEN);
293 	} else {
294 		i2c_smbus_write_byte_data(fm3130->client, FM3130_RTC_CONTROL,
295 			fm3130->regs[FM3130_RTC_CONTROL] &
296 				~(FM3130_RTC_CONTROL_BIT_CAL) &
297 					~(FM3130_RTC_CONTROL_BIT_AEN));
298 	}
299 
300 	/* We assume here that data is valid once written */
301 	if (!fm3130->alarm_valid)
302 		fm3130->alarm_valid = 1;
303 
304 	return 0;
305 }
306 
307 static int fm3130_alarm_irq_enable(struct device *dev, unsigned int enabled)
308 {
309 	struct fm3130 *fm3130 = dev_get_drvdata(dev);
310 	int ret = 0;
311 
312 	fm3130->regs[FM3130_RTC_CONTROL] =
313 		i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL);
314 
315 	dev_dbg(dev, "alarm_irq_enable: enable=%d, FM3130_RTC_CONTROL=%02x\n",
316 		enabled, fm3130->regs[FM3130_RTC_CONTROL]);
317 
318 	switch (enabled) {
319 	case 0:		/* alarm off */
320 		ret = i2c_smbus_write_byte_data(fm3130->client,
321 			FM3130_RTC_CONTROL, fm3130->regs[FM3130_RTC_CONTROL] &
322 				~(FM3130_RTC_CONTROL_BIT_CAL) &
323 					~(FM3130_RTC_CONTROL_BIT_AEN));
324 		break;
325 	case 1:		/* alarm on */
326 		ret = i2c_smbus_write_byte_data(fm3130->client,
327 			FM3130_RTC_CONTROL, (fm3130->regs[FM3130_RTC_CONTROL] &
328 				~(FM3130_RTC_CONTROL_BIT_CAL)) |
329 					FM3130_RTC_CONTROL_BIT_AEN);
330 		break;
331 	default:
332 		ret = -EINVAL;
333 		break;
334 	}
335 
336 	return ret;
337 }
338 
339 static const struct rtc_class_ops fm3130_rtc_ops = {
340 	.read_time	= fm3130_get_time,
341 	.set_time	= fm3130_set_time,
342 	.read_alarm	= fm3130_read_alarm,
343 	.set_alarm	= fm3130_set_alarm,
344 	.alarm_irq_enable = fm3130_alarm_irq_enable,
345 };
346 
347 static struct i2c_driver fm3130_driver;
348 
349 static int fm3130_probe(struct i2c_client *client,
350 			const struct i2c_device_id *id)
351 {
352 	struct fm3130		*fm3130;
353 	int			err = -ENODEV;
354 	int			tmp;
355 	struct i2c_adapter	*adapter = to_i2c_adapter(client->dev.parent);
356 
357 	if (!i2c_check_functionality(adapter,
358 			I2C_FUNC_I2C | I2C_FUNC_SMBUS_WRITE_BYTE_DATA))
359 		return -EIO;
360 
361 	fm3130 = kzalloc(sizeof(struct fm3130), GFP_KERNEL);
362 
363 	if (!fm3130)
364 		return -ENOMEM;
365 
366 	fm3130->client = client;
367 	i2c_set_clientdata(client, fm3130);
368 	fm3130->reg_addr_time = FM3130_RTC_SECONDS;
369 	fm3130->reg_addr_alarm = FM3130_ALARM_SECONDS;
370 
371 	/* Messages to read time */
372 	fm3130->msg[0].addr = client->addr;
373 	fm3130->msg[0].flags = 0;
374 	fm3130->msg[0].len = 1;
375 	fm3130->msg[0].buf = &fm3130->reg_addr_time;
376 
377 	fm3130->msg[1].addr = client->addr;
378 	fm3130->msg[1].flags = I2C_M_RD;
379 	fm3130->msg[1].len = FM3130_CLOCK_REGS;
380 	fm3130->msg[1].buf = &fm3130->regs[FM3130_RTC_SECONDS];
381 
382 	/* Messages to read alarm */
383 	fm3130->msg[2].addr = client->addr;
384 	fm3130->msg[2].flags = 0;
385 	fm3130->msg[2].len = 1;
386 	fm3130->msg[2].buf = &fm3130->reg_addr_alarm;
387 
388 	fm3130->msg[3].addr = client->addr;
389 	fm3130->msg[3].flags = I2C_M_RD;
390 	fm3130->msg[3].len = FM3130_ALARM_REGS;
391 	fm3130->msg[3].buf = &fm3130->regs[FM3130_ALARM_SECONDS];
392 
393 	fm3130->alarm_valid = 0;
394 	fm3130->data_valid = 0;
395 
396 	tmp = i2c_transfer(adapter, fm3130->msg, 4);
397 	if (tmp != 4) {
398 		dev_dbg(&client->dev, "read error %d\n", tmp);
399 		err = -EIO;
400 		goto exit_free;
401 	}
402 
403 	fm3130->regs[FM3130_RTC_CONTROL] =
404 		i2c_smbus_read_byte_data(client, FM3130_RTC_CONTROL);
405 	fm3130->regs[FM3130_CAL_CONTROL] =
406 		i2c_smbus_read_byte_data(client, FM3130_CAL_CONTROL);
407 
408 	/* Disabling calibration mode */
409 	if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_CAL) {
410 		i2c_smbus_write_byte_data(client, FM3130_RTC_CONTROL,
411 			fm3130->regs[FM3130_RTC_CONTROL] &
412 				~(FM3130_RTC_CONTROL_BIT_CAL));
413 		dev_warn(&client->dev, "Disabling calibration mode!\n");
414 	}
415 
416 	/* Disabling read and write modes */
417 	if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_WRITE ||
418 	    fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_READ) {
419 		i2c_smbus_write_byte_data(client, FM3130_RTC_CONTROL,
420 			fm3130->regs[FM3130_RTC_CONTROL] &
421 				~(FM3130_RTC_CONTROL_BIT_READ |
422 					FM3130_RTC_CONTROL_BIT_WRITE));
423 		dev_warn(&client->dev, "Disabling READ or WRITE mode!\n");
424 	}
425 
426 	/* oscillator off?  turn it on, so clock can tick. */
427 	if (fm3130->regs[FM3130_CAL_CONTROL] & FM3130_CAL_CONTROL_BIT_nOSCEN)
428 		i2c_smbus_write_byte_data(client, FM3130_CAL_CONTROL,
429 			fm3130->regs[FM3130_CAL_CONTROL] &
430 				~(FM3130_CAL_CONTROL_BIT_nOSCEN));
431 
432 	/* low battery?  clear flag, and warn */
433 	if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_LB) {
434 		i2c_smbus_write_byte_data(client, FM3130_RTC_CONTROL,
435 			fm3130->regs[FM3130_RTC_CONTROL] &
436 				~(FM3130_RTC_CONTROL_BIT_LB));
437 		dev_warn(&client->dev, "Low battery!\n");
438 	}
439 
440 	/* check if Power On Reset bit is set */
441 	if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_POR) {
442 		i2c_smbus_write_byte_data(client, FM3130_RTC_CONTROL,
443 			fm3130->regs[FM3130_RTC_CONTROL] &
444 				~FM3130_RTC_CONTROL_BIT_POR);
445 		dev_dbg(&client->dev, "POR bit is set\n");
446 	}
447 	/* ACS is controlled by alarm */
448 	i2c_smbus_write_byte_data(client, FM3130_ALARM_WP_CONTROL, 0x80);
449 
450 	/* alarm registers sanity check */
451 	tmp = bcd2bin(fm3130->regs[FM3130_RTC_SECONDS] & 0x7f);
452 	if (tmp > 59)
453 		goto bad_alarm;
454 
455 	tmp = bcd2bin(fm3130->regs[FM3130_RTC_MINUTES] & 0x7f);
456 	if (tmp > 59)
457 		goto bad_alarm;
458 
459 	tmp = bcd2bin(fm3130->regs[FM3130_RTC_HOURS] & 0x3f);
460 	if (tmp > 23)
461 		goto bad_alarm;
462 
463 	tmp = bcd2bin(fm3130->regs[FM3130_RTC_DATE] & 0x3f);
464 	if (tmp == 0 || tmp > 31)
465 		goto bad_alarm;
466 
467 	tmp = bcd2bin(fm3130->regs[FM3130_RTC_MONTHS] & 0x1f);
468 	if (tmp == 0 || tmp > 12)
469 		goto bad_alarm;
470 
471 	fm3130->alarm_valid = 1;
472 
473 bad_alarm:
474 
475 	/* clock registers sanity chek */
476 	tmp = bcd2bin(fm3130->regs[FM3130_RTC_SECONDS] & 0x7f);
477 	if (tmp > 59)
478 		goto bad_clock;
479 
480 	tmp = bcd2bin(fm3130->regs[FM3130_RTC_MINUTES] & 0x7f);
481 	if (tmp > 59)
482 		goto bad_clock;
483 
484 	tmp = bcd2bin(fm3130->regs[FM3130_RTC_HOURS] & 0x3f);
485 	if (tmp > 23)
486 		goto bad_clock;
487 
488 	tmp = bcd2bin(fm3130->regs[FM3130_RTC_DAY] & 0x7);
489 	if (tmp == 0 || tmp > 7)
490 		goto bad_clock;
491 
492 	tmp = bcd2bin(fm3130->regs[FM3130_RTC_DATE] & 0x3f);
493 	if (tmp == 0 || tmp > 31)
494 		goto bad_clock;
495 
496 	tmp = bcd2bin(fm3130->regs[FM3130_RTC_MONTHS] & 0x1f);
497 	if (tmp == 0 || tmp > 12)
498 		goto bad_clock;
499 
500 	fm3130->data_valid = 1;
501 
502 bad_clock:
503 
504 	if (!fm3130->data_valid || !fm3130->alarm_valid)
505 		dev_dbg(&client->dev, "%s: %15ph\n", "bogus registers",
506 			fm3130->regs);
507 
508 	/* We won't bail out here because we just got invalid data.
509 	   Time setting from u-boot doesn't work anyway */
510 	fm3130->rtc = rtc_device_register(client->name, &client->dev,
511 				&fm3130_rtc_ops, THIS_MODULE);
512 	if (IS_ERR(fm3130->rtc)) {
513 		err = PTR_ERR(fm3130->rtc);
514 		dev_err(&client->dev,
515 			"unable to register the class device\n");
516 		goto exit_free;
517 	}
518 	return 0;
519 exit_free:
520 	kfree(fm3130);
521 	return err;
522 }
523 
524 static int fm3130_remove(struct i2c_client *client)
525 {
526 	struct fm3130 *fm3130 = i2c_get_clientdata(client);
527 
528 	rtc_device_unregister(fm3130->rtc);
529 	kfree(fm3130);
530 	return 0;
531 }
532 
533 static struct i2c_driver fm3130_driver = {
534 	.driver = {
535 		.name	= "rtc-fm3130",
536 		.owner	= THIS_MODULE,
537 	},
538 	.probe		= fm3130_probe,
539 	.remove		= fm3130_remove,
540 	.id_table	= fm3130_id,
541 };
542 
543 module_i2c_driver(fm3130_driver);
544 
545 MODULE_DESCRIPTION("RTC driver for FM3130");
546 MODULE_AUTHOR("Sergey Lapin <slapin@ossfans.org>");
547 MODULE_LICENSE("GPL");
548 
549