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