20 #include <linux/i2c.h>
22 #include <linux/rtc.h>
24 #include <linux/module.h>
26 #define DRV_VERSION "1.0.8"
39 #define X1205_REG_SR 0x3F
40 #define X1205_REG_Y2K 0x37
41 #define X1205_REG_DW 0x36
42 #define X1205_REG_YR 0x35
43 #define X1205_REG_MO 0x34
44 #define X1205_REG_DT 0x33
45 #define X1205_REG_HR 0x32
46 #define X1205_REG_MN 0x31
47 #define X1205_REG_SC 0x30
48 #define X1205_REG_DTR 0x13
49 #define X1205_REG_ATR 0x12
50 #define X1205_REG_INT 0x11
51 #define X1205_REG_0 0x10
52 #define X1205_REG_Y2K1 0x0F
53 #define X1205_REG_DWA1 0x0E
54 #define X1205_REG_YRA1 0x0D
55 #define X1205_REG_MOA1 0x0C
56 #define X1205_REG_DTA1 0x0B
57 #define X1205_REG_HRA1 0x0A
58 #define X1205_REG_MNA1 0x09
59 #define X1205_REG_SCA1 0x08
60 #define X1205_REG_Y2K0 0x07
61 #define X1205_REG_DWA0 0x06
62 #define X1205_REG_YRA0 0x05
63 #define X1205_REG_MOA0 0x04
64 #define X1205_REG_DTA0 0x03
65 #define X1205_REG_HRA0 0x02
66 #define X1205_REG_MNA0 0x01
67 #define X1205_REG_SCA0 0x00
69 #define X1205_CCR_BASE 0x30
70 #define X1205_ALM0_BASE 0x00
72 #define X1205_SR_RTCF 0x01
73 #define X1205_SR_WEL 0x02
74 #define X1205_SR_RWEL 0x04
75 #define X1205_SR_AL0 0x20
77 #define X1205_DTR_DTR0 0x01
78 #define X1205_DTR_DTR1 0x02
79 #define X1205_DTR_DTR2 0x04
81 #define X1205_HR_MIL 0x80
83 #define X1205_INT_AL0E 0x20
93 unsigned char reg_base)
95 unsigned char dt_addr[2] = { 0, reg_base };
106 .addr = client->
addr,
115 dev_err(&client->
dev,
"%s: read error\n", __func__);
120 "%s: raw read data - sec=%02x, min=%02x, hr=%02x, "
121 "mday=%02x, mon=%02x, year=%02x, wday=%02x, y2k=%02x\n",
123 buf[0], buf[1], buf[2], buf[3],
124 buf[4], buf[5], buf[6], buf[7]);
128 for (i = 0; i <= 4; i++)
140 dev_dbg(&client->
dev,
"%s: tm is secs=%d, mins=%d, hours=%d, "
141 "mday=%d, mon=%d, year=%d, wday=%d\n",
149 static int x1205_get_status(
struct i2c_client *client,
unsigned char *
sr)
160 .addr = client->
addr,
169 dev_err(&client->
dev,
"%s: read error\n", __func__);
177 u8 reg_base,
unsigned char alm_enable)
180 unsigned char rdata[10] = { 0, reg_base };
181 unsigned char *buf = rdata + 2;
189 static const unsigned char diswe[3] = { 0,
X1205_REG_SR, 0 };
192 "%s: sec=%d min=%d hour=%d mday=%d mon=%d year=%d wday=%d\n",
214 for (i = 0; i <= 4; i++)
219 dev_err(&client->
dev,
"%s: wel - %d\n", __func__, xfer);
224 dev_err(&client->
dev,
"%s: rwel - %d\n", __func__, xfer);
229 if (xfer !=
sizeof(rdata)) {
231 "%s: result=%d addr=%02x, data=%02x\n",
233 xfer, rdata[1], rdata[2]);
249 "%s: aloe rwel - %d\n",
273 dev_err(&client->
dev,
"%s: diswe - %d\n", __func__, xfer);
280 static int x1205_fix_osc(
struct i2c_client *client)
285 memset(&tm, 0,
sizeof(tm));
289 dev_err(&client->
dev,
"unable to restart the oscillator\n");
294 static int x1205_get_dtrim(
struct i2c_client *client,
int *trim)
306 .addr = client->
addr,
315 dev_err(&client->
dev,
"%s: read error\n", __func__);
319 dev_dbg(&client->
dev,
"%s: raw dtr=%x\n", __func__, dtr);
335 static int x1205_get_atrim(
struct i2c_client *client,
int *trim)
347 .addr = client->
addr,
356 dev_err(&client->
dev,
"%s: read error\n", __func__);
360 dev_dbg(&client->
dev,
"%s: raw atr=%x\n", __func__, atr);
369 dev_dbg(&client->
dev,
"%s: raw atr=%x (%d)\n", __func__, atr, atr);
371 *trim = (atr * 250) + 11000;
373 dev_dbg(&client->
dev,
"%s: real=%d\n", __func__, *trim);
383 static int x1205_validate_client(
struct i2c_client *client)
390 static const unsigned char probe_zero_pattern[] = {
399 static const struct x1205_limit probe_limits_pattern[] = {
414 for (i = 0; i <
ARRAY_SIZE(probe_zero_pattern); i += 2) {
417 unsigned char addr[2] = { 0, probe_zero_pattern[
i] };
426 .addr = client->
addr,
435 "%s: could not read register %x\n",
436 __func__, probe_zero_pattern[i]);
441 if ((buf & probe_zero_pattern[i+1]) != 0) {
443 "%s: register=%02x, zero pattern=%d, value=%x\n",
444 __func__, probe_zero_pattern[i], i, buf);
451 for (i = 0; i <
ARRAY_SIZE(probe_limits_pattern); i++) {
454 unsigned char addr[2] = { 0, probe_limits_pattern[
i].
reg };
463 .addr = client->
addr,
472 "%s: could not read register %x\n",
473 __func__, probe_limits_pattern[i].
reg);
478 value =
bcd2bin(reg & probe_limits_pattern[i].
mask);
480 if (value > probe_limits_pattern[i].
max ||
481 value < probe_limits_pattern[i].
min) {
483 "%s: register=%x, lim pattern=%d, value=%d\n",
484 __func__, probe_limits_pattern[i].
reg,
508 .addr = client->
addr,
517 dev_err(&client->
dev,
"%s: read error\n", __func__);
520 err = x1205_get_status(client, &status);
535 static int x1205_rtc_read_time(
struct device *dev,
struct rtc_time *tm)
541 static int x1205_rtc_set_time(
struct device *dev,
struct rtc_time *tm)
547 static int x1205_rtc_proc(
struct device *dev,
struct seq_file *seq)
549 int err, dtrim, atrim;
551 if ((err = x1205_get_dtrim(
to_i2c_client(dev), &dtrim)) == 0)
552 seq_printf(seq,
"digital_trim\t: %d ppm\n", dtrim);
554 if ((err = x1205_get_atrim(
to_i2c_client(dev), &atrim)) == 0)
555 seq_printf(seq,
"analog_trim\t: %d.%02d pF\n",
556 atrim / 1000, atrim % 1000);
561 .proc = x1205_rtc_proc,
562 .read_time = x1205_rtc_read_time,
563 .set_time = x1205_rtc_set_time,
564 .read_alarm = x1205_rtc_read_alarm,
565 .set_alarm = x1205_rtc_set_alarm,
577 return sprintf(buf,
"%d.%02d pF\n", atrim / 1000, atrim % 1000);
590 return sprintf(buf,
"%d ppm\n", dtrim);
594 static int x1205_sysfs_register(
struct device *dev)
609 static void x1205_sysfs_unregister(
struct device *dev)
616 static int x1205_probe(
struct i2c_client *client,
628 if (x1205_validate_client(client) < 0)
639 i2c_set_clientdata(client, rtc);
642 if ((err = x1205_get_status(client, &sr)) == 0) {
645 "power failure detected, "
646 "please set the clock\n");
648 x1205_fix_osc(client);
652 dev_err(&client->
dev,
"couldn't read status\n");
654 err = x1205_sysfs_register(&client->
dev);
666 static int x1205_remove(
struct i2c_client *client)
668 struct rtc_device *rtc = i2c_get_clientdata(client);
671 x1205_sysfs_unregister(&client->
dev);
685 .probe = x1205_probe,
686 .remove = x1205_remove,
687 .id_table = x1205_id,
693 "Karen Spearel <kas111 at gmail dot com>, "