Merge branch 'stable-3.2' into pandora-3.2
[pandora-kernel.git] / drivers / rtc / rtc-m41t80.c
index 64aedd8..a3511e7 100644 (file)
@@ -213,163 +213,14 @@ static int m41t80_rtc_set_time(struct device *dev, struct rtc_time *tm)
        return m41t80_set_datetime(to_i2c_client(dev), tm);
 }
 
-static int m41t80_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
-{
-       struct i2c_client *client = to_i2c_client(dev);
-       int rc;
-
-       rc = i2c_smbus_read_byte_data(client, M41T80_REG_ALARM_MON);
-       if (rc < 0)
-               goto err;
-
-       if (enabled)
-               rc |= M41T80_ALMON_AFE;
-       else
-               rc &= ~M41T80_ALMON_AFE;
-
-       if (i2c_smbus_write_byte_data(client, M41T80_REG_ALARM_MON, rc) < 0)
-               goto err;
-
-       return 0;
-err:
-       return -EIO;
-}
-
-static int m41t80_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *t)
-{
-       struct i2c_client *client = to_i2c_client(dev);
-       u8 wbuf[1 + M41T80_ALARM_REG_SIZE];
-       u8 *buf = &wbuf[1];
-       u8 *reg = buf - M41T80_REG_ALARM_MON;
-       u8 dt_addr[1] = { M41T80_REG_ALARM_MON };
-       struct i2c_msg msgs_in[] = {
-               {
-                       .addr   = client->addr,
-                       .flags  = 0,
-                       .len    = 1,
-                       .buf    = dt_addr,
-               },
-               {
-                       .addr   = client->addr,
-                       .flags  = I2C_M_RD,
-                       .len    = M41T80_ALARM_REG_SIZE,
-                       .buf    = buf,
-               },
-       };
-       struct i2c_msg msgs[] = {
-               {
-                       .addr   = client->addr,
-                       .flags  = 0,
-                       .len    = 1 + M41T80_ALARM_REG_SIZE,
-                       .buf    = wbuf,
-                },
-       };
-
-       if (i2c_transfer(client->adapter, msgs_in, 2) < 0) {
-               dev_err(&client->dev, "read error\n");
-               return -EIO;
-       }
-       reg[M41T80_REG_ALARM_MON] &= ~(0x1f | M41T80_ALMON_AFE);
-       reg[M41T80_REG_ALARM_DAY] = 0;
-       reg[M41T80_REG_ALARM_HOUR] &= ~(0x3f | 0x80);
-       reg[M41T80_REG_ALARM_MIN] = 0;
-       reg[M41T80_REG_ALARM_SEC] = 0;
-
-       wbuf[0] = M41T80_REG_ALARM_MON; /* offset into rtc's regs */
-       reg[M41T80_REG_ALARM_SEC] |= t->time.tm_sec >= 0 ?
-               bin2bcd(t->time.tm_sec) : 0x80;
-       reg[M41T80_REG_ALARM_MIN] |= t->time.tm_min >= 0 ?
-               bin2bcd(t->time.tm_min) : 0x80;
-       reg[M41T80_REG_ALARM_HOUR] |= t->time.tm_hour >= 0 ?
-               bin2bcd(t->time.tm_hour) : 0x80;
-       reg[M41T80_REG_ALARM_DAY] |= t->time.tm_mday >= 0 ?
-               bin2bcd(t->time.tm_mday) : 0x80;
-       if (t->time.tm_mon >= 0)
-               reg[M41T80_REG_ALARM_MON] |= bin2bcd(t->time.tm_mon + 1);
-       else
-               reg[M41T80_REG_ALARM_DAY] |= 0x40;
-
-       if (i2c_transfer(client->adapter, msgs, 1) != 1) {
-               dev_err(&client->dev, "write error\n");
-               return -EIO;
-       }
-
-       if (t->enabled) {
-               reg[M41T80_REG_ALARM_MON] |= M41T80_ALMON_AFE;
-               if (i2c_smbus_write_byte_data(client, M41T80_REG_ALARM_MON,
-                                             reg[M41T80_REG_ALARM_MON]) < 0) {
-                       dev_err(&client->dev, "write error\n");
-                       return -EIO;
-               }
-       }
-       return 0;
-}
-
-static int m41t80_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *t)
-{
-       struct i2c_client *client = to_i2c_client(dev);
-       u8 buf[M41T80_ALARM_REG_SIZE + 1]; /* all alarm regs and flags */
-       u8 dt_addr[1] = { M41T80_REG_ALARM_MON };
-       u8 *reg = buf - M41T80_REG_ALARM_MON;
-       struct i2c_msg msgs[] = {
-               {
-                       .addr   = client->addr,
-                       .flags  = 0,
-                       .len    = 1,
-                       .buf    = dt_addr,
-               },
-               {
-                       .addr   = client->addr,
-                       .flags  = I2C_M_RD,
-                       .len    = M41T80_ALARM_REG_SIZE + 1,
-                       .buf    = buf,
-               },
-       };
-
-       if (i2c_transfer(client->adapter, msgs, 2) < 0) {
-               dev_err(&client->dev, "read error\n");
-               return -EIO;
-       }
-       t->time.tm_sec = -1;
-       t->time.tm_min = -1;
-       t->time.tm_hour = -1;
-       t->time.tm_mday = -1;
-       t->time.tm_mon = -1;
-       if (!(reg[M41T80_REG_ALARM_SEC] & 0x80))
-               t->time.tm_sec = bcd2bin(reg[M41T80_REG_ALARM_SEC] & 0x7f);
-       if (!(reg[M41T80_REG_ALARM_MIN] & 0x80))
-               t->time.tm_min = bcd2bin(reg[M41T80_REG_ALARM_MIN] & 0x7f);
-       if (!(reg[M41T80_REG_ALARM_HOUR] & 0x80))
-               t->time.tm_hour = bcd2bin(reg[M41T80_REG_ALARM_HOUR] & 0x3f);
-       if (!(reg[M41T80_REG_ALARM_DAY] & 0x80))
-               t->time.tm_mday = bcd2bin(reg[M41T80_REG_ALARM_DAY] & 0x3f);
-       if (!(reg[M41T80_REG_ALARM_DAY] & 0x40))
-               t->time.tm_mon = bcd2bin(reg[M41T80_REG_ALARM_MON] & 0x1f) - 1;
-       t->time.tm_year = -1;
-       t->time.tm_wday = -1;
-       t->time.tm_yday = -1;
-       t->time.tm_isdst = -1;
-       t->enabled = !!(reg[M41T80_REG_ALARM_MON] & M41T80_ALMON_AFE);
-       t->pending = !!(reg[M41T80_REG_FLAGS] & M41T80_FLAGS_AF);
-       return 0;
-}
-
+/*
+ * XXX - m41t80 alarm functionality is reported broken.
+ * until it is fixed, don't register alarm functions.
+ */
 static struct rtc_class_ops m41t80_rtc_ops = {
        .read_time = m41t80_rtc_read_time,
        .set_time = m41t80_rtc_set_time,
-       /*
-        * XXX - m41t80 alarm functionality is reported broken.
-        * until it is fixed, don't register alarm functions.
-        *
-       .read_alarm = m41t80_rtc_read_alarm,
-       .set_alarm = m41t80_rtc_set_alarm,
-       */
        .proc = m41t80_rtc_proc,
-       /*
-        * See above comment on broken alarm
-        *
-       .alarm_irq_enable = m41t80_rtc_alarm_irq_enable,
-       */
 };
 
 #if defined(CONFIG_RTC_INTF_SYSFS) || defined(CONFIG_RTC_INTF_SYSFS_MODULE)