rtc: ds1307: Support optional wakeup interrupt source
[firefly-linux-kernel-4.4.55.git] / drivers / rtc / rtc-ds1307.c
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  *  Copyright (C) 2012 Bertrand Achard (nvram access fixes)
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2 as
11  * published by the Free Software Foundation.
12  */
13
14 #include <linux/bcd.h>
15 #include <linux/i2c.h>
16 #include <linux/init.h>
17 #include <linux/module.h>
18 #include <linux/of_device.h>
19 #include <linux/of_irq.h>
20 #include <linux/pm_wakeirq.h>
21 #include <linux/rtc/ds1307.h>
22 #include <linux/rtc.h>
23 #include <linux/slab.h>
24 #include <linux/string.h>
25
26 /*
27  * We can't determine type by probing, but if we expect pre-Linux code
28  * to have set the chip up as a clock (turning on the oscillator and
29  * setting the date and time), Linux can ignore the non-clock features.
30  * That's a natural job for a factory or repair bench.
31  */
32 enum ds_type {
33         ds_1307,
34         ds_1337,
35         ds_1338,
36         ds_1339,
37         ds_1340,
38         ds_1388,
39         ds_3231,
40         m41t00,
41         mcp794xx,
42         rx_8025,
43         last_ds_type /* always last */
44         /* rs5c372 too?  different address... */
45 };
46
47
48 /* RTC registers don't differ much, except for the century flag */
49 #define DS1307_REG_SECS         0x00    /* 00-59 */
50 #       define DS1307_BIT_CH            0x80
51 #       define DS1340_BIT_nEOSC         0x80
52 #       define MCP794XX_BIT_ST          0x80
53 #define DS1307_REG_MIN          0x01    /* 00-59 */
54 #define DS1307_REG_HOUR         0x02    /* 00-23, or 1-12{am,pm} */
55 #       define DS1307_BIT_12HR          0x40    /* in REG_HOUR */
56 #       define DS1307_BIT_PM            0x20    /* in REG_HOUR */
57 #       define DS1340_BIT_CENTURY_EN    0x80    /* in REG_HOUR */
58 #       define DS1340_BIT_CENTURY       0x40    /* in REG_HOUR */
59 #define DS1307_REG_WDAY         0x03    /* 01-07 */
60 #       define MCP794XX_BIT_VBATEN      0x08
61 #define DS1307_REG_MDAY         0x04    /* 01-31 */
62 #define DS1307_REG_MONTH        0x05    /* 01-12 */
63 #       define DS1337_BIT_CENTURY       0x80    /* in REG_MONTH */
64 #define DS1307_REG_YEAR         0x06    /* 00-99 */
65
66 /*
67  * Other registers (control, status, alarms, trickle charge, NVRAM, etc)
68  * start at 7, and they differ a LOT. Only control and status matter for
69  * basic RTC date and time functionality; be careful using them.
70  */
71 #define DS1307_REG_CONTROL      0x07            /* or ds1338 */
72 #       define DS1307_BIT_OUT           0x80
73 #       define DS1338_BIT_OSF           0x20
74 #       define DS1307_BIT_SQWE          0x10
75 #       define DS1307_BIT_RS1           0x02
76 #       define DS1307_BIT_RS0           0x01
77 #define DS1337_REG_CONTROL      0x0e
78 #       define DS1337_BIT_nEOSC         0x80
79 #       define DS1339_BIT_BBSQI         0x20
80 #       define DS3231_BIT_BBSQW         0x40 /* same as BBSQI */
81 #       define DS1337_BIT_RS2           0x10
82 #       define DS1337_BIT_RS1           0x08
83 #       define DS1337_BIT_INTCN         0x04
84 #       define DS1337_BIT_A2IE          0x02
85 #       define DS1337_BIT_A1IE          0x01
86 #define DS1340_REG_CONTROL      0x07
87 #       define DS1340_BIT_OUT           0x80
88 #       define DS1340_BIT_FT            0x40
89 #       define DS1340_BIT_CALIB_SIGN    0x20
90 #       define DS1340_M_CALIBRATION     0x1f
91 #define DS1340_REG_FLAG         0x09
92 #       define DS1340_BIT_OSF           0x80
93 #define DS1337_REG_STATUS       0x0f
94 #       define DS1337_BIT_OSF           0x80
95 #       define DS1337_BIT_A2I           0x02
96 #       define DS1337_BIT_A1I           0x01
97 #define DS1339_REG_ALARM1_SECS  0x07
98
99 #define DS13XX_TRICKLE_CHARGER_MAGIC    0xa0
100
101 #define RX8025_REG_CTRL1        0x0e
102 #       define RX8025_BIT_2412          0x20
103 #define RX8025_REG_CTRL2        0x0f
104 #       define RX8025_BIT_PON           0x10
105 #       define RX8025_BIT_VDET          0x40
106 #       define RX8025_BIT_XST           0x20
107
108
109 struct ds1307 {
110         u8                      offset; /* register's offset */
111         u8                      regs[11];
112         u16                     nvram_offset;
113         struct bin_attribute    *nvram;
114         enum ds_type            type;
115         unsigned long           flags;
116 #define HAS_NVRAM       0               /* bit 0 == sysfs file active */
117 #define HAS_ALARM       1               /* bit 1 == irq claimed */
118         struct i2c_client       *client;
119         struct rtc_device       *rtc;
120         int                     wakeirq;
121         s32 (*read_block_data)(const struct i2c_client *client, u8 command,
122                                u8 length, u8 *values);
123         s32 (*write_block_data)(const struct i2c_client *client, u8 command,
124                                 u8 length, const u8 *values);
125 };
126
127 struct chip_desc {
128         unsigned                alarm:1;
129         u16                     nvram_offset;
130         u16                     nvram_size;
131         u16                     trickle_charger_reg;
132         u8                      trickle_charger_setup;
133         u8                      (*do_trickle_setup)(struct i2c_client *, uint32_t, bool);
134 };
135
136 static u8 do_trickle_setup_ds1339(struct i2c_client *,
137                                   uint32_t ohms, bool diode);
138
139 static struct chip_desc chips[last_ds_type] = {
140         [ds_1307] = {
141                 .nvram_offset   = 8,
142                 .nvram_size     = 56,
143         },
144         [ds_1337] = {
145                 .alarm          = 1,
146         },
147         [ds_1338] = {
148                 .nvram_offset   = 8,
149                 .nvram_size     = 56,
150         },
151         [ds_1339] = {
152                 .alarm          = 1,
153                 .trickle_charger_reg = 0x10,
154                 .do_trickle_setup = &do_trickle_setup_ds1339,
155         },
156         [ds_1340] = {
157                 .trickle_charger_reg = 0x08,
158         },
159         [ds_1388] = {
160                 .trickle_charger_reg = 0x0a,
161         },
162         [ds_3231] = {
163                 .alarm          = 1,
164         },
165         [mcp794xx] = {
166                 .alarm          = 1,
167                 /* this is battery backed SRAM */
168                 .nvram_offset   = 0x20,
169                 .nvram_size     = 0x40,
170         },
171 };
172
173 static const struct i2c_device_id ds1307_id[] = {
174         { "ds1307", ds_1307 },
175         { "ds1337", ds_1337 },
176         { "ds1338", ds_1338 },
177         { "ds1339", ds_1339 },
178         { "ds1388", ds_1388 },
179         { "ds1340", ds_1340 },
180         { "ds3231", ds_3231 },
181         { "m41t00", m41t00 },
182         { "mcp7940x", mcp794xx },
183         { "mcp7941x", mcp794xx },
184         { "pt7c4338", ds_1307 },
185         { "rx8025", rx_8025 },
186         { }
187 };
188 MODULE_DEVICE_TABLE(i2c, ds1307_id);
189
190 /*----------------------------------------------------------------------*/
191
192 #define BLOCK_DATA_MAX_TRIES 10
193
194 static s32 ds1307_read_block_data_once(const struct i2c_client *client,
195                                        u8 command, u8 length, u8 *values)
196 {
197         s32 i, data;
198
199         for (i = 0; i < length; i++) {
200                 data = i2c_smbus_read_byte_data(client, command + i);
201                 if (data < 0)
202                         return data;
203                 values[i] = data;
204         }
205         return i;
206 }
207
208 static s32 ds1307_read_block_data(const struct i2c_client *client, u8 command,
209                                   u8 length, u8 *values)
210 {
211         u8 oldvalues[255];
212         s32 ret;
213         int tries = 0;
214
215         dev_dbg(&client->dev, "ds1307_read_block_data (length=%d)\n", length);
216         ret = ds1307_read_block_data_once(client, command, length, values);
217         if (ret < 0)
218                 return ret;
219         do {
220                 if (++tries > BLOCK_DATA_MAX_TRIES) {
221                         dev_err(&client->dev,
222                                 "ds1307_read_block_data failed\n");
223                         return -EIO;
224                 }
225                 memcpy(oldvalues, values, length);
226                 ret = ds1307_read_block_data_once(client, command, length,
227                                                   values);
228                 if (ret < 0)
229                         return ret;
230         } while (memcmp(oldvalues, values, length));
231         return length;
232 }
233
234 static s32 ds1307_write_block_data(const struct i2c_client *client, u8 command,
235                                    u8 length, const u8 *values)
236 {
237         u8 currvalues[255];
238         int tries = 0;
239
240         dev_dbg(&client->dev, "ds1307_write_block_data (length=%d)\n", length);
241         do {
242                 s32 i, ret;
243
244                 if (++tries > BLOCK_DATA_MAX_TRIES) {
245                         dev_err(&client->dev,
246                                 "ds1307_write_block_data failed\n");
247                         return -EIO;
248                 }
249                 for (i = 0; i < length; i++) {
250                         ret = i2c_smbus_write_byte_data(client, command + i,
251                                                         values[i]);
252                         if (ret < 0)
253                                 return ret;
254                 }
255                 ret = ds1307_read_block_data_once(client, command, length,
256                                                   currvalues);
257                 if (ret < 0)
258                         return ret;
259         } while (memcmp(currvalues, values, length));
260         return length;
261 }
262
263 /*----------------------------------------------------------------------*/
264
265 /* These RTC devices are not designed to be connected to a SMbus adapter.
266    SMbus limits block operations length to 32 bytes, whereas it's not
267    limited on I2C buses. As a result, accesses may exceed 32 bytes;
268    in that case, split them into smaller blocks */
269
270 static s32 ds1307_native_smbus_write_block_data(const struct i2c_client *client,
271                                 u8 command, u8 length, const u8 *values)
272 {
273         u8 suboffset = 0;
274
275         if (length <= I2C_SMBUS_BLOCK_MAX)
276                 return i2c_smbus_write_i2c_block_data(client,
277                                         command, length, values);
278
279         while (suboffset < length) {
280                 s32 retval = i2c_smbus_write_i2c_block_data(client,
281                                 command + suboffset,
282                                 min(I2C_SMBUS_BLOCK_MAX, length - suboffset),
283                                 values + suboffset);
284                 if (retval < 0)
285                         return retval;
286
287                 suboffset += I2C_SMBUS_BLOCK_MAX;
288         }
289         return length;
290 }
291
292 static s32 ds1307_native_smbus_read_block_data(const struct i2c_client *client,
293                                 u8 command, u8 length, u8 *values)
294 {
295         u8 suboffset = 0;
296
297         if (length <= I2C_SMBUS_BLOCK_MAX)
298                 return i2c_smbus_read_i2c_block_data(client,
299                                         command, length, values);
300
301         while (suboffset < length) {
302                 s32 retval = i2c_smbus_read_i2c_block_data(client,
303                                 command + suboffset,
304                                 min(I2C_SMBUS_BLOCK_MAX, length - suboffset),
305                                 values + suboffset);
306                 if (retval < 0)
307                         return retval;
308
309                 suboffset += I2C_SMBUS_BLOCK_MAX;
310         }
311         return length;
312 }
313
314 /*----------------------------------------------------------------------*/
315
316 /*
317  * The ds1337 and ds1339 both have two alarms, but we only use the first
318  * one (with a "seconds" field).  For ds1337 we expect nINTA is our alarm
319  * signal; ds1339 chips have only one alarm signal.
320  */
321 static irqreturn_t ds1307_irq(int irq, void *dev_id)
322 {
323         struct i2c_client       *client = dev_id;
324         struct ds1307           *ds1307 = i2c_get_clientdata(client);
325         struct mutex            *lock = &ds1307->rtc->ops_lock;
326         int                     stat, control;
327
328         mutex_lock(lock);
329         stat = i2c_smbus_read_byte_data(client, DS1337_REG_STATUS);
330         if (stat < 0)
331                 goto out;
332
333         if (stat & DS1337_BIT_A1I) {
334                 stat &= ~DS1337_BIT_A1I;
335                 i2c_smbus_write_byte_data(client, DS1337_REG_STATUS, stat);
336
337                 control = i2c_smbus_read_byte_data(client, DS1337_REG_CONTROL);
338                 if (control < 0)
339                         goto out;
340
341                 control &= ~DS1337_BIT_A1IE;
342                 i2c_smbus_write_byte_data(client, DS1337_REG_CONTROL, control);
343
344                 rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF);
345         }
346
347 out:
348         mutex_unlock(lock);
349
350         return IRQ_HANDLED;
351 }
352
353 /*----------------------------------------------------------------------*/
354
355 static int ds1307_get_time(struct device *dev, struct rtc_time *t)
356 {
357         struct ds1307   *ds1307 = dev_get_drvdata(dev);
358         int             tmp;
359
360         /* read the RTC date and time registers all at once */
361         tmp = ds1307->read_block_data(ds1307->client,
362                 ds1307->offset, 7, ds1307->regs);
363         if (tmp != 7) {
364                 dev_err(dev, "%s error %d\n", "read", tmp);
365                 return -EIO;
366         }
367
368         dev_dbg(dev, "%s: %7ph\n", "read", ds1307->regs);
369
370         t->tm_sec = bcd2bin(ds1307->regs[DS1307_REG_SECS] & 0x7f);
371         t->tm_min = bcd2bin(ds1307->regs[DS1307_REG_MIN] & 0x7f);
372         tmp = ds1307->regs[DS1307_REG_HOUR] & 0x3f;
373         t->tm_hour = bcd2bin(tmp);
374         t->tm_wday = bcd2bin(ds1307->regs[DS1307_REG_WDAY] & 0x07) - 1;
375         t->tm_mday = bcd2bin(ds1307->regs[DS1307_REG_MDAY] & 0x3f);
376         tmp = ds1307->regs[DS1307_REG_MONTH] & 0x1f;
377         t->tm_mon = bcd2bin(tmp) - 1;
378
379         /* assume 20YY not 19YY, and ignore DS1337_BIT_CENTURY */
380         t->tm_year = bcd2bin(ds1307->regs[DS1307_REG_YEAR]) + 100;
381
382         dev_dbg(dev, "%s secs=%d, mins=%d, "
383                 "hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
384                 "read", t->tm_sec, t->tm_min,
385                 t->tm_hour, t->tm_mday,
386                 t->tm_mon, t->tm_year, t->tm_wday);
387
388         /* initial clock setting can be undefined */
389         return rtc_valid_tm(t);
390 }
391
392 static int ds1307_set_time(struct device *dev, struct rtc_time *t)
393 {
394         struct ds1307   *ds1307 = dev_get_drvdata(dev);
395         int             result;
396         int             tmp;
397         u8              *buf = ds1307->regs;
398
399         dev_dbg(dev, "%s secs=%d, mins=%d, "
400                 "hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
401                 "write", t->tm_sec, t->tm_min,
402                 t->tm_hour, t->tm_mday,
403                 t->tm_mon, t->tm_year, t->tm_wday);
404
405         buf[DS1307_REG_SECS] = bin2bcd(t->tm_sec);
406         buf[DS1307_REG_MIN] = bin2bcd(t->tm_min);
407         buf[DS1307_REG_HOUR] = bin2bcd(t->tm_hour);
408         buf[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1);
409         buf[DS1307_REG_MDAY] = bin2bcd(t->tm_mday);
410         buf[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1);
411
412         /* assume 20YY not 19YY */
413         tmp = t->tm_year - 100;
414         buf[DS1307_REG_YEAR] = bin2bcd(tmp);
415
416         switch (ds1307->type) {
417         case ds_1337:
418         case ds_1339:
419         case ds_3231:
420                 buf[DS1307_REG_MONTH] |= DS1337_BIT_CENTURY;
421                 break;
422         case ds_1340:
423                 buf[DS1307_REG_HOUR] |= DS1340_BIT_CENTURY_EN
424                                 | DS1340_BIT_CENTURY;
425                 break;
426         case mcp794xx:
427                 /*
428                  * these bits were cleared when preparing the date/time
429                  * values and need to be set again before writing the
430                  * buffer out to the device.
431                  */
432                 buf[DS1307_REG_SECS] |= MCP794XX_BIT_ST;
433                 buf[DS1307_REG_WDAY] |= MCP794XX_BIT_VBATEN;
434                 break;
435         default:
436                 break;
437         }
438
439         dev_dbg(dev, "%s: %7ph\n", "write", buf);
440
441         result = ds1307->write_block_data(ds1307->client,
442                 ds1307->offset, 7, buf);
443         if (result < 0) {
444                 dev_err(dev, "%s error %d\n", "write", result);
445                 return result;
446         }
447         return 0;
448 }
449
450 static int ds1337_read_alarm(struct device *dev, struct rtc_wkalrm *t)
451 {
452         struct i2c_client       *client = to_i2c_client(dev);
453         struct ds1307           *ds1307 = i2c_get_clientdata(client);
454         int                     ret;
455
456         if (!test_bit(HAS_ALARM, &ds1307->flags))
457                 return -EINVAL;
458
459         /* read all ALARM1, ALARM2, and status registers at once */
460         ret = ds1307->read_block_data(client,
461                         DS1339_REG_ALARM1_SECS, 9, ds1307->regs);
462         if (ret != 9) {
463                 dev_err(dev, "%s error %d\n", "alarm read", ret);
464                 return -EIO;
465         }
466
467         dev_dbg(dev, "%s: %02x %02x %02x %02x, %02x %02x %02x, %02x %02x\n",
468                         "alarm read",
469                         ds1307->regs[0], ds1307->regs[1],
470                         ds1307->regs[2], ds1307->regs[3],
471                         ds1307->regs[4], ds1307->regs[5],
472                         ds1307->regs[6], ds1307->regs[7],
473                         ds1307->regs[8]);
474
475         /*
476          * report alarm time (ALARM1); assume 24 hour and day-of-month modes,
477          * and that all four fields are checked matches
478          */
479         t->time.tm_sec = bcd2bin(ds1307->regs[0] & 0x7f);
480         t->time.tm_min = bcd2bin(ds1307->regs[1] & 0x7f);
481         t->time.tm_hour = bcd2bin(ds1307->regs[2] & 0x3f);
482         t->time.tm_mday = bcd2bin(ds1307->regs[3] & 0x3f);
483         t->time.tm_mon = -1;
484         t->time.tm_year = -1;
485         t->time.tm_wday = -1;
486         t->time.tm_yday = -1;
487         t->time.tm_isdst = -1;
488
489         /* ... and status */
490         t->enabled = !!(ds1307->regs[7] & DS1337_BIT_A1IE);
491         t->pending = !!(ds1307->regs[8] & DS1337_BIT_A1I);
492
493         dev_dbg(dev, "%s secs=%d, mins=%d, "
494                 "hours=%d, mday=%d, enabled=%d, pending=%d\n",
495                 "alarm read", t->time.tm_sec, t->time.tm_min,
496                 t->time.tm_hour, t->time.tm_mday,
497                 t->enabled, t->pending);
498
499         return 0;
500 }
501
502 static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t)
503 {
504         struct i2c_client       *client = to_i2c_client(dev);
505         struct ds1307           *ds1307 = i2c_get_clientdata(client);
506         unsigned char           *buf = ds1307->regs;
507         u8                      control, status;
508         int                     ret;
509
510         if (!test_bit(HAS_ALARM, &ds1307->flags))
511                 return -EINVAL;
512
513         dev_dbg(dev, "%s secs=%d, mins=%d, "
514                 "hours=%d, mday=%d, enabled=%d, pending=%d\n",
515                 "alarm set", t->time.tm_sec, t->time.tm_min,
516                 t->time.tm_hour, t->time.tm_mday,
517                 t->enabled, t->pending);
518
519         /* read current status of both alarms and the chip */
520         ret = ds1307->read_block_data(client,
521                         DS1339_REG_ALARM1_SECS, 9, buf);
522         if (ret != 9) {
523                 dev_err(dev, "%s error %d\n", "alarm write", ret);
524                 return -EIO;
525         }
526         control = ds1307->regs[7];
527         status = ds1307->regs[8];
528
529         dev_dbg(dev, "%s: %02x %02x %02x %02x, %02x %02x %02x, %02x %02x\n",
530                         "alarm set (old status)",
531                         ds1307->regs[0], ds1307->regs[1],
532                         ds1307->regs[2], ds1307->regs[3],
533                         ds1307->regs[4], ds1307->regs[5],
534                         ds1307->regs[6], control, status);
535
536         /* set ALARM1, using 24 hour and day-of-month modes */
537         buf[0] = bin2bcd(t->time.tm_sec);
538         buf[1] = bin2bcd(t->time.tm_min);
539         buf[2] = bin2bcd(t->time.tm_hour);
540         buf[3] = bin2bcd(t->time.tm_mday);
541
542         /* set ALARM2 to non-garbage */
543         buf[4] = 0;
544         buf[5] = 0;
545         buf[6] = 0;
546
547         /* optionally enable ALARM1 */
548         buf[7] = control & ~(DS1337_BIT_A1IE | DS1337_BIT_A2IE);
549         if (t->enabled) {
550                 dev_dbg(dev, "alarm IRQ armed\n");
551                 buf[7] |= DS1337_BIT_A1IE;      /* only ALARM1 is used */
552         }
553         buf[8] = status & ~(DS1337_BIT_A1I | DS1337_BIT_A2I);
554
555         ret = ds1307->write_block_data(client,
556                         DS1339_REG_ALARM1_SECS, 9, buf);
557         if (ret < 0) {
558                 dev_err(dev, "can't set alarm time\n");
559                 return ret;
560         }
561
562         return 0;
563 }
564
565 static int ds1307_alarm_irq_enable(struct device *dev, unsigned int enabled)
566 {
567         struct i2c_client       *client = to_i2c_client(dev);
568         struct ds1307           *ds1307 = i2c_get_clientdata(client);
569         int                     ret;
570
571         if (!test_bit(HAS_ALARM, &ds1307->flags))
572                 return -ENOTTY;
573
574         ret = i2c_smbus_read_byte_data(client, DS1337_REG_CONTROL);
575         if (ret < 0)
576                 return ret;
577
578         if (enabled)
579                 ret |= DS1337_BIT_A1IE;
580         else
581                 ret &= ~DS1337_BIT_A1IE;
582
583         ret = i2c_smbus_write_byte_data(client, DS1337_REG_CONTROL, ret);
584         if (ret < 0)
585                 return ret;
586
587         return 0;
588 }
589
590 static const struct rtc_class_ops ds13xx_rtc_ops = {
591         .read_time      = ds1307_get_time,
592         .set_time       = ds1307_set_time,
593         .read_alarm     = ds1337_read_alarm,
594         .set_alarm      = ds1337_set_alarm,
595         .alarm_irq_enable = ds1307_alarm_irq_enable,
596 };
597
598 /*----------------------------------------------------------------------*/
599
600 /*
601  * Alarm support for mcp794xx devices.
602  */
603
604 #define MCP794XX_REG_CONTROL            0x07
605 #       define MCP794XX_BIT_ALM0_EN     0x10
606 #       define MCP794XX_BIT_ALM1_EN     0x20
607 #define MCP794XX_REG_ALARM0_BASE        0x0a
608 #define MCP794XX_REG_ALARM0_CTRL        0x0d
609 #define MCP794XX_REG_ALARM1_BASE        0x11
610 #define MCP794XX_REG_ALARM1_CTRL        0x14
611 #       define MCP794XX_BIT_ALMX_IF     (1 << 3)
612 #       define MCP794XX_BIT_ALMX_C0     (1 << 4)
613 #       define MCP794XX_BIT_ALMX_C1     (1 << 5)
614 #       define MCP794XX_BIT_ALMX_C2     (1 << 6)
615 #       define MCP794XX_BIT_ALMX_POL    (1 << 7)
616 #       define MCP794XX_MSK_ALMX_MATCH  (MCP794XX_BIT_ALMX_C0 | \
617                                          MCP794XX_BIT_ALMX_C1 | \
618                                          MCP794XX_BIT_ALMX_C2)
619
620 static irqreturn_t mcp794xx_irq(int irq, void *dev_id)
621 {
622         struct i2c_client       *client = dev_id;
623         struct ds1307           *ds1307 = i2c_get_clientdata(client);
624         struct mutex            *lock = &ds1307->rtc->ops_lock;
625         int reg, ret;
626
627         mutex_lock(lock);
628
629         /* Check and clear alarm 0 interrupt flag. */
630         reg = i2c_smbus_read_byte_data(client, MCP794XX_REG_ALARM0_CTRL);
631         if (reg < 0)
632                 goto out;
633         if (!(reg & MCP794XX_BIT_ALMX_IF))
634                 goto out;
635         reg &= ~MCP794XX_BIT_ALMX_IF;
636         ret = i2c_smbus_write_byte_data(client, MCP794XX_REG_ALARM0_CTRL, reg);
637         if (ret < 0)
638                 goto out;
639
640         /* Disable alarm 0. */
641         reg = i2c_smbus_read_byte_data(client, MCP794XX_REG_CONTROL);
642         if (reg < 0)
643                 goto out;
644         reg &= ~MCP794XX_BIT_ALM0_EN;
645         ret = i2c_smbus_write_byte_data(client, MCP794XX_REG_CONTROL, reg);
646         if (ret < 0)
647                 goto out;
648
649         rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF);
650
651 out:
652         mutex_unlock(lock);
653
654         return IRQ_HANDLED;
655 }
656
657 static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t)
658 {
659         struct i2c_client *client = to_i2c_client(dev);
660         struct ds1307 *ds1307 = i2c_get_clientdata(client);
661         u8 *regs = ds1307->regs;
662         int ret;
663
664         if (!test_bit(HAS_ALARM, &ds1307->flags))
665                 return -EINVAL;
666
667         /* Read control and alarm 0 registers. */
668         ret = ds1307->read_block_data(client, MCP794XX_REG_CONTROL, 10, regs);
669         if (ret < 0)
670                 return ret;
671
672         t->enabled = !!(regs[0] & MCP794XX_BIT_ALM0_EN);
673
674         /* Report alarm 0 time assuming 24-hour and day-of-month modes. */
675         t->time.tm_sec = bcd2bin(ds1307->regs[3] & 0x7f);
676         t->time.tm_min = bcd2bin(ds1307->regs[4] & 0x7f);
677         t->time.tm_hour = bcd2bin(ds1307->regs[5] & 0x3f);
678         t->time.tm_wday = bcd2bin(ds1307->regs[6] & 0x7) - 1;
679         t->time.tm_mday = bcd2bin(ds1307->regs[7] & 0x3f);
680         t->time.tm_mon = bcd2bin(ds1307->regs[8] & 0x1f) - 1;
681         t->time.tm_year = -1;
682         t->time.tm_yday = -1;
683         t->time.tm_isdst = -1;
684
685         dev_dbg(dev, "%s, sec=%d min=%d hour=%d wday=%d mday=%d mon=%d "
686                 "enabled=%d polarity=%d irq=%d match=%d\n", __func__,
687                 t->time.tm_sec, t->time.tm_min, t->time.tm_hour,
688                 t->time.tm_wday, t->time.tm_mday, t->time.tm_mon, t->enabled,
689                 !!(ds1307->regs[6] & MCP794XX_BIT_ALMX_POL),
690                 !!(ds1307->regs[6] & MCP794XX_BIT_ALMX_IF),
691                 (ds1307->regs[6] & MCP794XX_MSK_ALMX_MATCH) >> 4);
692
693         return 0;
694 }
695
696 static int mcp794xx_set_alarm(struct device *dev, struct rtc_wkalrm *t)
697 {
698         struct i2c_client *client = to_i2c_client(dev);
699         struct ds1307 *ds1307 = i2c_get_clientdata(client);
700         unsigned char *regs = ds1307->regs;
701         int ret;
702
703         if (!test_bit(HAS_ALARM, &ds1307->flags))
704                 return -EINVAL;
705
706         dev_dbg(dev, "%s, sec=%d min=%d hour=%d wday=%d mday=%d mon=%d "
707                 "enabled=%d pending=%d\n", __func__,
708                 t->time.tm_sec, t->time.tm_min, t->time.tm_hour,
709                 t->time.tm_wday, t->time.tm_mday, t->time.tm_mon,
710                 t->enabled, t->pending);
711
712         /* Read control and alarm 0 registers. */
713         ret = ds1307->read_block_data(client, MCP794XX_REG_CONTROL, 10, regs);
714         if (ret < 0)
715                 return ret;
716
717         /* Set alarm 0, using 24-hour and day-of-month modes. */
718         regs[3] = bin2bcd(t->time.tm_sec);
719         regs[4] = bin2bcd(t->time.tm_min);
720         regs[5] = bin2bcd(t->time.tm_hour);
721         regs[6] = bin2bcd(t->time.tm_wday) + 1;
722         regs[7] = bin2bcd(t->time.tm_mday);
723         regs[8] = bin2bcd(t->time.tm_mon) + 1;
724
725         /* Clear the alarm 0 interrupt flag. */
726         regs[6] &= ~MCP794XX_BIT_ALMX_IF;
727         /* Set alarm match: second, minute, hour, day, date, month. */
728         regs[6] |= MCP794XX_MSK_ALMX_MATCH;
729         /* Disable interrupt. We will not enable until completely programmed */
730         regs[0] &= ~MCP794XX_BIT_ALM0_EN;
731
732         ret = ds1307->write_block_data(client, MCP794XX_REG_CONTROL, 10, regs);
733         if (ret < 0)
734                 return ret;
735
736         if (!t->enabled)
737                 return 0;
738         regs[0] |= MCP794XX_BIT_ALM0_EN;
739         return i2c_smbus_write_byte_data(client, MCP794XX_REG_CONTROL, regs[0]);
740 }
741
742 static int mcp794xx_alarm_irq_enable(struct device *dev, unsigned int enabled)
743 {
744         struct i2c_client *client = to_i2c_client(dev);
745         struct ds1307 *ds1307 = i2c_get_clientdata(client);
746         int reg;
747
748         if (!test_bit(HAS_ALARM, &ds1307->flags))
749                 return -EINVAL;
750
751         reg = i2c_smbus_read_byte_data(client, MCP794XX_REG_CONTROL);
752         if (reg < 0)
753                 return reg;
754
755         if (enabled)
756                 reg |= MCP794XX_BIT_ALM0_EN;
757         else
758                 reg &= ~MCP794XX_BIT_ALM0_EN;
759
760         return i2c_smbus_write_byte_data(client, MCP794XX_REG_CONTROL, reg);
761 }
762
763 static const struct rtc_class_ops mcp794xx_rtc_ops = {
764         .read_time      = ds1307_get_time,
765         .set_time       = ds1307_set_time,
766         .read_alarm     = mcp794xx_read_alarm,
767         .set_alarm      = mcp794xx_set_alarm,
768         .alarm_irq_enable = mcp794xx_alarm_irq_enable,
769 };
770
771 /*----------------------------------------------------------------------*/
772
773 static ssize_t
774 ds1307_nvram_read(struct file *filp, struct kobject *kobj,
775                 struct bin_attribute *attr,
776                 char *buf, loff_t off, size_t count)
777 {
778         struct i2c_client       *client;
779         struct ds1307           *ds1307;
780         int                     result;
781
782         client = kobj_to_i2c_client(kobj);
783         ds1307 = i2c_get_clientdata(client);
784
785         if (unlikely(off >= ds1307->nvram->size))
786                 return 0;
787         if ((off + count) > ds1307->nvram->size)
788                 count = ds1307->nvram->size - off;
789         if (unlikely(!count))
790                 return count;
791
792         result = ds1307->read_block_data(client, ds1307->nvram_offset + off,
793                                                                 count, buf);
794         if (result < 0)
795                 dev_err(&client->dev, "%s error %d\n", "nvram read", result);
796         return result;
797 }
798
799 static ssize_t
800 ds1307_nvram_write(struct file *filp, struct kobject *kobj,
801                 struct bin_attribute *attr,
802                 char *buf, loff_t off, size_t count)
803 {
804         struct i2c_client       *client;
805         struct ds1307           *ds1307;
806         int                     result;
807
808         client = kobj_to_i2c_client(kobj);
809         ds1307 = i2c_get_clientdata(client);
810
811         if (unlikely(off >= ds1307->nvram->size))
812                 return -EFBIG;
813         if ((off + count) > ds1307->nvram->size)
814                 count = ds1307->nvram->size - off;
815         if (unlikely(!count))
816                 return count;
817
818         result = ds1307->write_block_data(client, ds1307->nvram_offset + off,
819                                                                 count, buf);
820         if (result < 0) {
821                 dev_err(&client->dev, "%s error %d\n", "nvram write", result);
822                 return result;
823         }
824         return count;
825 }
826
827
828 /*----------------------------------------------------------------------*/
829
830 static u8 do_trickle_setup_ds1339(struct i2c_client *client,
831                                   uint32_t ohms, bool diode)
832 {
833         u8 setup = (diode) ? DS1307_TRICKLE_CHARGER_DIODE :
834                 DS1307_TRICKLE_CHARGER_NO_DIODE;
835
836         switch (ohms) {
837         case 250:
838                 setup |= DS1307_TRICKLE_CHARGER_250_OHM;
839                 break;
840         case 2000:
841                 setup |= DS1307_TRICKLE_CHARGER_2K_OHM;
842                 break;
843         case 4000:
844                 setup |= DS1307_TRICKLE_CHARGER_4K_OHM;
845                 break;
846         default:
847                 dev_warn(&client->dev,
848                          "Unsupported ohm value %u in dt\n", ohms);
849                 return 0;
850         }
851         return setup;
852 }
853
854 static void ds1307_trickle_of_init(struct i2c_client *client,
855                                    struct chip_desc *chip)
856 {
857         uint32_t ohms = 0;
858         bool diode = true;
859
860         if (!chip->do_trickle_setup)
861                 goto out;
862         if (of_property_read_u32(client->dev.of_node, "trickle-resistor-ohms" , &ohms))
863                 goto out;
864         if (of_property_read_bool(client->dev.of_node, "trickle-diode-disable"))
865                 diode = false;
866         chip->trickle_charger_setup = chip->do_trickle_setup(client,
867                                                              ohms, diode);
868 out:
869         return;
870 }
871
872 static int ds1307_probe(struct i2c_client *client,
873                         const struct i2c_device_id *id)
874 {
875         struct ds1307           *ds1307;
876         int                     err = -ENODEV;
877         int                     tmp;
878         struct chip_desc        *chip = &chips[id->driver_data];
879         struct i2c_adapter      *adapter = to_i2c_adapter(client->dev.parent);
880         bool                    want_irq = false;
881         unsigned char           *buf;
882         struct ds1307_platform_data *pdata = dev_get_platdata(&client->dev);
883         irq_handler_t   irq_handler = ds1307_irq;
884
885         static const int        bbsqi_bitpos[] = {
886                 [ds_1337] = 0,
887                 [ds_1339] = DS1339_BIT_BBSQI,
888                 [ds_3231] = DS3231_BIT_BBSQW,
889         };
890         const struct rtc_class_ops *rtc_ops = &ds13xx_rtc_ops;
891
892         if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)
893             && !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK))
894                 return -EIO;
895
896         ds1307 = devm_kzalloc(&client->dev, sizeof(struct ds1307), GFP_KERNEL);
897         if (!ds1307)
898                 return -ENOMEM;
899
900         i2c_set_clientdata(client, ds1307);
901
902         ds1307->client  = client;
903         ds1307->type    = id->driver_data;
904
905         if (!pdata && client->dev.of_node)
906                 ds1307_trickle_of_init(client, chip);
907         else if (pdata && pdata->trickle_charger_setup)
908                 chip->trickle_charger_setup = pdata->trickle_charger_setup;
909
910         if (chip->trickle_charger_setup && chip->trickle_charger_reg) {
911                 dev_dbg(&client->dev, "writing trickle charger info 0x%x to 0x%x\n",
912                     DS13XX_TRICKLE_CHARGER_MAGIC | chip->trickle_charger_setup,
913                     chip->trickle_charger_reg);
914                 i2c_smbus_write_byte_data(client, chip->trickle_charger_reg,
915                     DS13XX_TRICKLE_CHARGER_MAGIC |
916                     chip->trickle_charger_setup);
917         }
918
919         buf = ds1307->regs;
920         if (i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) {
921                 ds1307->read_block_data = ds1307_native_smbus_read_block_data;
922                 ds1307->write_block_data = ds1307_native_smbus_write_block_data;
923         } else {
924                 ds1307->read_block_data = ds1307_read_block_data;
925                 ds1307->write_block_data = ds1307_write_block_data;
926         }
927
928         switch (ds1307->type) {
929         case ds_1337:
930         case ds_1339:
931         case ds_3231:
932                 /* get registers that the "rtc" read below won't read... */
933                 tmp = ds1307->read_block_data(ds1307->client,
934                                 DS1337_REG_CONTROL, 2, buf);
935                 if (tmp != 2) {
936                         dev_dbg(&client->dev, "read error %d\n", tmp);
937                         err = -EIO;
938                         goto exit;
939                 }
940
941                 /* oscillator off?  turn it on, so clock can tick. */
942                 if (ds1307->regs[0] & DS1337_BIT_nEOSC)
943                         ds1307->regs[0] &= ~DS1337_BIT_nEOSC;
944
945                 /*
946                  * Using IRQ?  Disable the square wave and both alarms.
947                  * For some variants, be sure alarms can trigger when we're
948                  * running on Vbackup (BBSQI/BBSQW)
949                  */
950                 if (ds1307->client->irq > 0 && chip->alarm) {
951                         ds1307->regs[0] |= DS1337_BIT_INTCN
952                                         | bbsqi_bitpos[ds1307->type];
953                         ds1307->regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE);
954
955                         want_irq = true;
956                 }
957
958                 i2c_smbus_write_byte_data(client, DS1337_REG_CONTROL,
959                                                         ds1307->regs[0]);
960
961                 /* oscillator fault?  clear flag, and warn */
962                 if (ds1307->regs[1] & DS1337_BIT_OSF) {
963                         i2c_smbus_write_byte_data(client, DS1337_REG_STATUS,
964                                 ds1307->regs[1] & ~DS1337_BIT_OSF);
965                         dev_warn(&client->dev, "SET TIME!\n");
966                 }
967                 break;
968
969         case rx_8025:
970                 tmp = i2c_smbus_read_i2c_block_data(ds1307->client,
971                                 RX8025_REG_CTRL1 << 4 | 0x08, 2, buf);
972                 if (tmp != 2) {
973                         dev_dbg(&client->dev, "read error %d\n", tmp);
974                         err = -EIO;
975                         goto exit;
976                 }
977
978                 /* oscillator off?  turn it on, so clock can tick. */
979                 if (!(ds1307->regs[1] & RX8025_BIT_XST)) {
980                         ds1307->regs[1] |= RX8025_BIT_XST;
981                         i2c_smbus_write_byte_data(client,
982                                                   RX8025_REG_CTRL2 << 4 | 0x08,
983                                                   ds1307->regs[1]);
984                         dev_warn(&client->dev,
985                                  "oscillator stop detected - SET TIME!\n");
986                 }
987
988                 if (ds1307->regs[1] & RX8025_BIT_PON) {
989                         ds1307->regs[1] &= ~RX8025_BIT_PON;
990                         i2c_smbus_write_byte_data(client,
991                                                   RX8025_REG_CTRL2 << 4 | 0x08,
992                                                   ds1307->regs[1]);
993                         dev_warn(&client->dev, "power-on detected\n");
994                 }
995
996                 if (ds1307->regs[1] & RX8025_BIT_VDET) {
997                         ds1307->regs[1] &= ~RX8025_BIT_VDET;
998                         i2c_smbus_write_byte_data(client,
999                                                   RX8025_REG_CTRL2 << 4 | 0x08,
1000                                                   ds1307->regs[1]);
1001                         dev_warn(&client->dev, "voltage drop detected\n");
1002                 }
1003
1004                 /* make sure we are running in 24hour mode */
1005                 if (!(ds1307->regs[0] & RX8025_BIT_2412)) {
1006                         u8 hour;
1007
1008                         /* switch to 24 hour mode */
1009                         i2c_smbus_write_byte_data(client,
1010                                                   RX8025_REG_CTRL1 << 4 | 0x08,
1011                                                   ds1307->regs[0] |
1012                                                   RX8025_BIT_2412);
1013
1014                         tmp = i2c_smbus_read_i2c_block_data(ds1307->client,
1015                                         RX8025_REG_CTRL1 << 4 | 0x08, 2, buf);
1016                         if (tmp != 2) {
1017                                 dev_dbg(&client->dev, "read error %d\n", tmp);
1018                                 err = -EIO;
1019                                 goto exit;
1020                         }
1021
1022                         /* correct hour */
1023                         hour = bcd2bin(ds1307->regs[DS1307_REG_HOUR]);
1024                         if (hour == 12)
1025                                 hour = 0;
1026                         if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM)
1027                                 hour += 12;
1028
1029                         i2c_smbus_write_byte_data(client,
1030                                                   DS1307_REG_HOUR << 4 | 0x08,
1031                                                   hour);
1032                 }
1033                 break;
1034         case ds_1388:
1035                 ds1307->offset = 1; /* Seconds starts at 1 */
1036                 break;
1037         case mcp794xx:
1038                 rtc_ops = &mcp794xx_rtc_ops;
1039                 if (ds1307->client->irq > 0 && chip->alarm) {
1040                         irq_handler = mcp794xx_irq;
1041                         want_irq = true;
1042                 }
1043                 break;
1044         default:
1045                 break;
1046         }
1047
1048 read_rtc:
1049         /* read RTC registers */
1050         tmp = ds1307->read_block_data(ds1307->client, ds1307->offset, 8, buf);
1051         if (tmp != 8) {
1052                 dev_dbg(&client->dev, "read error %d\n", tmp);
1053                 err = -EIO;
1054                 goto exit;
1055         }
1056
1057         /*
1058          * minimal sanity checking; some chips (like DS1340) don't
1059          * specify the extra bits as must-be-zero, but there are
1060          * still a few values that are clearly out-of-range.
1061          */
1062         tmp = ds1307->regs[DS1307_REG_SECS];
1063         switch (ds1307->type) {
1064         case ds_1307:
1065         case m41t00:
1066                 /* clock halted?  turn it on, so clock can tick. */
1067                 if (tmp & DS1307_BIT_CH) {
1068                         i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);
1069                         dev_warn(&client->dev, "SET TIME!\n");
1070                         goto read_rtc;
1071                 }
1072                 break;
1073         case ds_1338:
1074                 /* clock halted?  turn it on, so clock can tick. */
1075                 if (tmp & DS1307_BIT_CH)
1076                         i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);
1077
1078                 /* oscillator fault?  clear flag, and warn */
1079                 if (ds1307->regs[DS1307_REG_CONTROL] & DS1338_BIT_OSF) {
1080                         i2c_smbus_write_byte_data(client, DS1307_REG_CONTROL,
1081                                         ds1307->regs[DS1307_REG_CONTROL]
1082                                         & ~DS1338_BIT_OSF);
1083                         dev_warn(&client->dev, "SET TIME!\n");
1084                         goto read_rtc;
1085                 }
1086                 break;
1087         case ds_1340:
1088                 /* clock halted?  turn it on, so clock can tick. */
1089                 if (tmp & DS1340_BIT_nEOSC)
1090                         i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);
1091
1092                 tmp = i2c_smbus_read_byte_data(client, DS1340_REG_FLAG);
1093                 if (tmp < 0) {
1094                         dev_dbg(&client->dev, "read error %d\n", tmp);
1095                         err = -EIO;
1096                         goto exit;
1097                 }
1098
1099                 /* oscillator fault?  clear flag, and warn */
1100                 if (tmp & DS1340_BIT_OSF) {
1101                         i2c_smbus_write_byte_data(client, DS1340_REG_FLAG, 0);
1102                         dev_warn(&client->dev, "SET TIME!\n");
1103                 }
1104                 break;
1105         case mcp794xx:
1106                 /* make sure that the backup battery is enabled */
1107                 if (!(ds1307->regs[DS1307_REG_WDAY] & MCP794XX_BIT_VBATEN)) {
1108                         i2c_smbus_write_byte_data(client, DS1307_REG_WDAY,
1109                                         ds1307->regs[DS1307_REG_WDAY]
1110                                         | MCP794XX_BIT_VBATEN);
1111                 }
1112
1113                 /* clock halted?  turn it on, so clock can tick. */
1114                 if (!(tmp & MCP794XX_BIT_ST)) {
1115                         i2c_smbus_write_byte_data(client, DS1307_REG_SECS,
1116                                         MCP794XX_BIT_ST);
1117                         dev_warn(&client->dev, "SET TIME!\n");
1118                         goto read_rtc;
1119                 }
1120
1121                 break;
1122         default:
1123                 break;
1124         }
1125
1126         tmp = ds1307->regs[DS1307_REG_HOUR];
1127         switch (ds1307->type) {
1128         case ds_1340:
1129         case m41t00:
1130                 /*
1131                  * NOTE: ignores century bits; fix before deploying
1132                  * systems that will run through year 2100.
1133                  */
1134                 break;
1135         case rx_8025:
1136                 break;
1137         default:
1138                 if (!(tmp & DS1307_BIT_12HR))
1139                         break;
1140
1141                 /*
1142                  * Be sure we're in 24 hour mode.  Multi-master systems
1143                  * take note...
1144                  */
1145                 tmp = bcd2bin(tmp & 0x1f);
1146                 if (tmp == 12)
1147                         tmp = 0;
1148                 if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM)
1149                         tmp += 12;
1150                 i2c_smbus_write_byte_data(client,
1151                                 ds1307->offset + DS1307_REG_HOUR,
1152                                 bin2bcd(tmp));
1153         }
1154
1155         device_set_wakeup_capable(&client->dev, want_irq);
1156         ds1307->rtc = devm_rtc_device_register(&client->dev, client->name,
1157                                 rtc_ops, THIS_MODULE);
1158         if (IS_ERR(ds1307->rtc)) {
1159                 return PTR_ERR(ds1307->rtc);
1160         }
1161
1162         if (want_irq) {
1163                 struct device_node *node = client->dev.of_node;
1164
1165                 err = devm_request_threaded_irq(&client->dev,
1166                                                 client->irq, NULL, irq_handler,
1167                                                 IRQF_SHARED | IRQF_ONESHOT,
1168                                                 ds1307->rtc->name, client);
1169                 if (err) {
1170                         client->irq = 0;
1171                         dev_err(&client->dev, "unable to request IRQ!\n");
1172                         goto no_irq;
1173                 }
1174
1175                 set_bit(HAS_ALARM, &ds1307->flags);
1176                 dev_dbg(&client->dev, "got IRQ %d\n", client->irq);
1177
1178                 /* Currently supported by OF code only! */
1179                 if (!node)
1180                         goto no_irq;
1181
1182                 err = of_irq_get(node, 1);
1183                 if (err <= 0) {
1184                         if (err == -EPROBE_DEFER)
1185                                 goto exit;
1186                         goto no_irq;
1187                 }
1188                 ds1307->wakeirq = err;
1189
1190                 err = dev_pm_set_dedicated_wake_irq(&client->dev,
1191                                                     ds1307->wakeirq);
1192                 if (err) {
1193                         dev_err(&client->dev, "unable to setup wakeIRQ %d!\n",
1194                                 err);
1195                         goto exit;
1196                 }
1197         }
1198
1199 no_irq:
1200         if (chip->nvram_size) {
1201
1202                 ds1307->nvram = devm_kzalloc(&client->dev,
1203                                         sizeof(struct bin_attribute),
1204                                         GFP_KERNEL);
1205                 if (!ds1307->nvram) {
1206                         dev_err(&client->dev, "cannot allocate memory for nvram sysfs\n");
1207                 } else {
1208
1209                         ds1307->nvram->attr.name = "nvram";
1210                         ds1307->nvram->attr.mode = S_IRUGO | S_IWUSR;
1211
1212                         sysfs_bin_attr_init(ds1307->nvram);
1213
1214                         ds1307->nvram->read = ds1307_nvram_read;
1215                         ds1307->nvram->write = ds1307_nvram_write;
1216                         ds1307->nvram->size = chip->nvram_size;
1217                         ds1307->nvram_offset = chip->nvram_offset;
1218
1219                         err = sysfs_create_bin_file(&client->dev.kobj,
1220                                                     ds1307->nvram);
1221                         if (err) {
1222                                 dev_err(&client->dev,
1223                                         "unable to create sysfs file: %s\n",
1224                                         ds1307->nvram->attr.name);
1225                         } else {
1226                                 set_bit(HAS_NVRAM, &ds1307->flags);
1227                                 dev_info(&client->dev, "%zu bytes nvram\n",
1228                                          ds1307->nvram->size);
1229                         }
1230                 }
1231         }
1232
1233         return 0;
1234
1235 exit:
1236         return err;
1237 }
1238
1239 static int ds1307_remove(struct i2c_client *client)
1240 {
1241         struct ds1307 *ds1307 = i2c_get_clientdata(client);
1242
1243         if (ds1307->wakeirq)
1244                 dev_pm_clear_wake_irq(&client->dev);
1245
1246         if (test_and_clear_bit(HAS_NVRAM, &ds1307->flags))
1247                 sysfs_remove_bin_file(&client->dev.kobj, ds1307->nvram);
1248
1249         return 0;
1250 }
1251
1252 static struct i2c_driver ds1307_driver = {
1253         .driver = {
1254                 .name   = "rtc-ds1307",
1255                 .owner  = THIS_MODULE,
1256         },
1257         .probe          = ds1307_probe,
1258         .remove         = ds1307_remove,
1259         .id_table       = ds1307_id,
1260 };
1261
1262 module_i2c_driver(ds1307_driver);
1263
1264 MODULE_DESCRIPTION("RTC driver for DS1307 and similar chips");
1265 MODULE_LICENSE("GPL");