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