Remove shared area used by many subroutines to store values of RTC's registers. There wasn't very much caching or sharing going on in the code and that register cache, being a semi-global variable, only created additional implicit dependencies between function and made code more confusing (there were a number of functions that defined a convenience variable pointing to ds1307->regs, but failed to use it in the code consistently).
Signed-off-by: Andrey Smirnov <[email protected]> --- drivers/rtc/rtc-ds1307.c | 229 ++++++++++++++++++++++++----------------------- 1 file changed, 116 insertions(+), 113 deletions(-) diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c index d262db5..66e7168 100644 --- a/drivers/rtc/rtc-ds1307.c +++ b/drivers/rtc/rtc-ds1307.c @@ -110,10 +110,10 @@ enum ds_type { # define RX8025_BIT_VDET 0x40 # define RX8025_BIT_XST 0x20 +#define DS1307_REG_COUNT 11 struct ds1307 { u8 offset; /* register's offset */ - u8 regs[11]; u16 nvram_offset; struct bin_attribute *nvram; enum ds_type type; @@ -366,30 +366,31 @@ out: static int ds1307_get_time(struct device *dev, struct rtc_time *t) { + u8 regs[DS1307_REG_COUNT]; struct ds1307 *ds1307 = dev_get_drvdata(dev); int tmp; /* read the RTC date and time registers all at once */ tmp = ds1307->read_block_data(ds1307->client, - ds1307->offset, 7, ds1307->regs); + ds1307->offset, 7, regs); if (tmp != 7) { dev_err(dev, "%s error %d\n", "read", tmp); return -EIO; } - dev_dbg(dev, "%s: %7ph\n", "read", ds1307->regs); + dev_dbg(dev, "%s: %7ph\n", "read", regs); - t->tm_sec = bcd2bin(ds1307->regs[DS1307_REG_SECS] & 0x7f); - t->tm_min = bcd2bin(ds1307->regs[DS1307_REG_MIN] & 0x7f); - tmp = ds1307->regs[DS1307_REG_HOUR] & 0x3f; + t->tm_sec = bcd2bin(regs[DS1307_REG_SECS] & 0x7f); + t->tm_min = bcd2bin(regs[DS1307_REG_MIN] & 0x7f); + tmp = regs[DS1307_REG_HOUR] & 0x3f; t->tm_hour = bcd2bin(tmp); - t->tm_wday = bcd2bin(ds1307->regs[DS1307_REG_WDAY] & 0x07) - 1; - t->tm_mday = bcd2bin(ds1307->regs[DS1307_REG_MDAY] & 0x3f); - tmp = ds1307->regs[DS1307_REG_MONTH] & 0x1f; + t->tm_wday = bcd2bin(regs[DS1307_REG_WDAY] & 0x07) - 1; + t->tm_mday = bcd2bin(regs[DS1307_REG_MDAY] & 0x3f); + tmp = regs[DS1307_REG_MONTH] & 0x1f; t->tm_mon = bcd2bin(tmp) - 1; /* assume 20YY not 19YY, and ignore DS1337_BIT_CENTURY */ - t->tm_year = bcd2bin(ds1307->regs[DS1307_REG_YEAR]) + 100; + t->tm_year = bcd2bin(regs[DS1307_REG_YEAR]) + 100; dev_dbg(dev, "%s secs=%d, mins=%d, " "hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n", @@ -406,7 +407,7 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t) struct ds1307 *ds1307 = dev_get_drvdata(dev); int result; int tmp; - u8 *buf = ds1307->regs; + u8 regs[DS1307_REG_COUNT]; dev_dbg(dev, "%s secs=%d, mins=%d, " "hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n", @@ -414,26 +415,26 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t) t->tm_hour, t->tm_mday, t->tm_mon, t->tm_year, t->tm_wday); - buf[DS1307_REG_SECS] = bin2bcd(t->tm_sec); - buf[DS1307_REG_MIN] = bin2bcd(t->tm_min); - buf[DS1307_REG_HOUR] = bin2bcd(t->tm_hour); - buf[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1); - buf[DS1307_REG_MDAY] = bin2bcd(t->tm_mday); - buf[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1); + regs[DS1307_REG_SECS] = bin2bcd(t->tm_sec); + regs[DS1307_REG_MIN] = bin2bcd(t->tm_min); + regs[DS1307_REG_HOUR] = bin2bcd(t->tm_hour); + regs[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1); + regs[DS1307_REG_MDAY] = bin2bcd(t->tm_mday); + regs[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1); /* assume 20YY not 19YY */ tmp = t->tm_year - 100; - buf[DS1307_REG_YEAR] = bin2bcd(tmp); + regs[DS1307_REG_YEAR] = bin2bcd(tmp); switch (ds1307->type) { case ds_1337: case ds_1339: case ds_3231: case ds_1341: - buf[DS1307_REG_MONTH] |= DS1337_BIT_CENTURY; + regs[DS1307_REG_MONTH] |= DS1337_BIT_CENTURY; break; case ds_1340: - buf[DS1307_REG_HOUR] |= DS1340_BIT_CENTURY_EN + regs[DS1307_REG_HOUR] |= DS1340_BIT_CENTURY_EN | DS1340_BIT_CENTURY; break; case mcp794xx: @@ -442,17 +443,17 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t) * values and need to be set again before writing the * buffer out to the device. */ - buf[DS1307_REG_SECS] |= MCP794XX_BIT_ST; - buf[DS1307_REG_WDAY] |= MCP794XX_BIT_VBATEN; + regs[DS1307_REG_SECS] |= MCP794XX_BIT_ST; + regs[DS1307_REG_WDAY] |= MCP794XX_BIT_VBATEN; break; default: break; } - dev_dbg(dev, "%s: %7ph\n", "write", buf); + dev_dbg(dev, "%s: %7ph\n", "write", regs); result = ds1307->write_block_data(ds1307->client, - ds1307->offset, 7, buf); + ds1307->offset, 7, regs); if (result < 0) { dev_err(dev, "%s error %d\n", "write", result); return result; @@ -465,29 +466,30 @@ static int ds1337_read_alarm(struct device *dev, struct rtc_wkalrm *t) struct i2c_client *client = to_i2c_client(dev); struct ds1307 *ds1307 = i2c_get_clientdata(client); int ret; + u8 regs[DS1307_REG_COUNT]; if (!test_bit(HAS_ALARM, &ds1307->flags)) return -EINVAL; /* read all ALARM1, ALARM2, and status registers at once */ ret = ds1307->read_block_data(client, - DS1339_REG_ALARM1_SECS, 9, ds1307->regs); + DS1339_REG_ALARM1_SECS, 9, regs); if (ret != 9) { dev_err(dev, "%s error %d\n", "alarm read", ret); return -EIO; } dev_dbg(dev, "%s: %4ph, %3ph, %2ph\n", "alarm read", - &ds1307->regs[0], &ds1307->regs[4], &ds1307->regs[7]); + ®s[0], ®s[4], ®s[7]); /* * report alarm time (ALARM1); assume 24 hour and day-of-month modes, * and that all four fields are checked matches */ - t->time.tm_sec = bcd2bin(ds1307->regs[0] & 0x7f); - t->time.tm_min = bcd2bin(ds1307->regs[1] & 0x7f); - t->time.tm_hour = bcd2bin(ds1307->regs[2] & 0x3f); - t->time.tm_mday = bcd2bin(ds1307->regs[3] & 0x3f); + t->time.tm_sec = bcd2bin(regs[0] & 0x7f); + t->time.tm_min = bcd2bin(regs[1] & 0x7f); + t->time.tm_hour = bcd2bin(regs[2] & 0x3f); + t->time.tm_mday = bcd2bin(regs[3] & 0x3f); t->time.tm_mon = -1; t->time.tm_year = -1; t->time.tm_wday = -1; @@ -495,8 +497,8 @@ static int ds1337_read_alarm(struct device *dev, struct rtc_wkalrm *t) t->time.tm_isdst = -1; /* ... and status */ - t->enabled = !!(ds1307->regs[7] & DS1337_BIT_A1IE); - t->pending = !!(ds1307->regs[8] & DS1337_BIT_A1I); + t->enabled = !!(regs[7] & DS1337_BIT_A1IE); + t->pending = !!(regs[8] & DS1337_BIT_A1I); dev_dbg(dev, "%s secs=%d, mins=%d, " "hours=%d, mday=%d, enabled=%d, pending=%d\n", @@ -511,7 +513,7 @@ static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t) { struct i2c_client *client = to_i2c_client(dev); struct ds1307 *ds1307 = i2c_get_clientdata(client); - unsigned char *buf = ds1307->regs; + u8 regs[DS1307_REG_COUNT]; u8 control, status; int ret; @@ -526,34 +528,34 @@ static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t) /* read current status of both alarms and the chip */ ret = ds1307->read_block_data(client, - DS1339_REG_ALARM1_SECS, 9, buf); + DS1339_REG_ALARM1_SECS, 9, regs); if (ret != 9) { dev_err(dev, "%s error %d\n", "alarm write", ret); return -EIO; } - control = ds1307->regs[7]; - status = ds1307->regs[8]; + control = regs[7]; + status = regs[8]; dev_dbg(dev, "%s: %4ph, %3ph, %02x %02x\n", "alarm set (old status)", - &ds1307->regs[0], &ds1307->regs[4], control, status); + ®s[0], ®s[4], control, status); /* set ALARM1, using 24 hour and day-of-month modes */ - buf[0] = bin2bcd(t->time.tm_sec); - buf[1] = bin2bcd(t->time.tm_min); - buf[2] = bin2bcd(t->time.tm_hour); - buf[3] = bin2bcd(t->time.tm_mday); + regs[0] = bin2bcd(t->time.tm_sec); + regs[1] = bin2bcd(t->time.tm_min); + regs[2] = bin2bcd(t->time.tm_hour); + regs[3] = bin2bcd(t->time.tm_mday); /* set ALARM2 to non-garbage */ - buf[4] = 0; - buf[5] = 0; - buf[6] = 0; + regs[4] = 0; + regs[5] = 0; + regs[6] = 0; /* disable alarms */ - buf[7] = control & ~(DS1337_BIT_A1IE | DS1337_BIT_A2IE); - buf[8] = status & ~(DS1337_BIT_A1I | DS1337_BIT_A2I); + regs[7] = control & ~(DS1337_BIT_A1IE | DS1337_BIT_A2IE); + regs[8] = status & ~(DS1337_BIT_A1I | DS1337_BIT_A2I); ret = ds1307->write_block_data(client, - DS1339_REG_ALARM1_SECS, 9, buf); + DS1339_REG_ALARM1_SECS, 9, regs); if (ret < 0) { dev_err(dev, "can't set alarm time\n"); return ret; @@ -562,8 +564,8 @@ static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t) /* optionally enable ALARM1 */ if (t->enabled) { dev_dbg(dev, "alarm IRQ armed\n"); - buf[7] |= DS1337_BIT_A1IE; /* only ALARM1 is used */ - i2c_smbus_write_byte_data(client, DS1337_REG_CONTROL, buf[7]); + regs[7] |= DS1337_BIT_A1IE; /* only ALARM1 is used */ + i2c_smbus_write_byte_data(client, DS1337_REG_CONTROL, regs[7]); } return 0; @@ -665,7 +667,7 @@ static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t) { struct i2c_client *client = to_i2c_client(dev); struct ds1307 *ds1307 = i2c_get_clientdata(client); - u8 *regs = ds1307->regs; + u8 regs[DS1307_REG_COUNT]; int ret; if (!test_bit(HAS_ALARM, &ds1307->flags)) @@ -679,12 +681,12 @@ static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t) t->enabled = !!(regs[0] & MCP794XX_BIT_ALM0_EN); /* Report alarm 0 time assuming 24-hour and day-of-month modes. */ - t->time.tm_sec = bcd2bin(ds1307->regs[3] & 0x7f); - t->time.tm_min = bcd2bin(ds1307->regs[4] & 0x7f); - t->time.tm_hour = bcd2bin(ds1307->regs[5] & 0x3f); - t->time.tm_wday = bcd2bin(ds1307->regs[6] & 0x7) - 1; - t->time.tm_mday = bcd2bin(ds1307->regs[7] & 0x3f); - t->time.tm_mon = bcd2bin(ds1307->regs[8] & 0x1f) - 1; + t->time.tm_sec = bcd2bin(regs[3] & 0x7f); + t->time.tm_min = bcd2bin(regs[4] & 0x7f); + t->time.tm_hour = bcd2bin(regs[5] & 0x3f); + t->time.tm_wday = bcd2bin(regs[6] & 0x7) - 1; + t->time.tm_mday = bcd2bin(regs[7] & 0x3f); + t->time.tm_mon = bcd2bin(regs[8] & 0x1f) - 1; t->time.tm_year = -1; t->time.tm_yday = -1; t->time.tm_isdst = -1; @@ -693,9 +695,9 @@ static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t) "enabled=%d polarity=%d irq=%d match=%d\n", __func__, t->time.tm_sec, t->time.tm_min, t->time.tm_hour, t->time.tm_wday, t->time.tm_mday, t->time.tm_mon, t->enabled, - !!(ds1307->regs[6] & MCP794XX_BIT_ALMX_POL), - !!(ds1307->regs[6] & MCP794XX_BIT_ALMX_IF), - (ds1307->regs[6] & MCP794XX_MSK_ALMX_MATCH) >> 4); + !!(regs[6] & MCP794XX_BIT_ALMX_POL), + !!(regs[6] & MCP794XX_BIT_ALMX_IF), + (regs[6] & MCP794XX_MSK_ALMX_MATCH) >> 4); return 0; } @@ -704,7 +706,7 @@ static int mcp794xx_set_alarm(struct device *dev, struct rtc_wkalrm *t) { struct i2c_client *client = to_i2c_client(dev); struct ds1307 *ds1307 = i2c_get_clientdata(client); - unsigned char *regs = ds1307->regs; + u8 regs[DS1307_REG_COUNT]; int ret; if (!test_bit(HAS_ALARM, &ds1307->flags)) @@ -1274,11 +1276,9 @@ static bool ds1307_want_irq(const struct ds1307 *ds1307, static int ds1307_chip_configure(struct ds1307 *ds1307) { int tmp; - unsigned char *buf; + u8 regs[DS1307_REG_COUNT]; struct i2c_client *client = ds1307->client; - buf = ds1307->regs; - switch (ds1307->type) { case ds_1337: case ds_1339: @@ -1293,32 +1293,32 @@ static int ds1307_chip_configure(struct ds1307 *ds1307) /* get registers that the "rtc" read below won't read... */ tmp = ds1307->read_block_data(client, - DS1337_REG_CONTROL, 2, buf); + DS1337_REG_CONTROL, 2, regs); if (tmp != 2) { dev_dbg(&ds1307->client->dev, "read error %d\n", tmp); return -EIO; } /* oscillator off? turn it on, so clock can tick. */ - if (ds1307->regs[0] & DS1337_BIT_nEOSC) - ds1307->regs[0] &= ~DS1337_BIT_nEOSC; + if (regs[0] & DS1337_BIT_nEOSC) + regs[0] &= ~DS1337_BIT_nEOSC; if (ds1307->type == ds_1341) { /* Make sure we are not generating square wave * output */ - ds1307->regs[1] &= ~DS1341_BIT_ECLK; + regs[1] &= ~DS1341_BIT_ECLK; if (of_property_read_bool(client->dev.of_node, "dallas,disable-oscillator-stop-flag")) - ds1307->regs[1] |= DS1341_BIT_DOSF; + regs[1] |= DS1341_BIT_DOSF; else - ds1307->regs[1] &= ~DS1341_BIT_DOSF; + regs[1] &= ~DS1341_BIT_DOSF; if (of_property_read_bool(client->dev.of_node, "dallas,enable-glitch-filter")) - ds1307->regs[0] |= DS1341_BIT_EGFIL; + regs[0] |= DS1341_BIT_EGFIL; else - ds1307->regs[0] &= ~DS1341_BIT_EGFIL; + regs[0] &= ~DS1341_BIT_EGFIL; /* * Write status register. Control register @@ -1326,7 +1326,7 @@ static int ds1307_chip_configure(struct ds1307 *ds1307) */ i2c_smbus_write_byte_data(client, DS1337_REG_STATUS, - ds1307->regs[1]); + regs[1]); } /* @@ -1334,19 +1334,19 @@ static int ds1307_chip_configure(struct ds1307 *ds1307) * For some variants, be sure alarms can trigger when we're * running on Vbackup (BBSQI/BBSQW) */ - ds1307->regs[0] |= DS1337_BIT_INTCN + regs[0] |= DS1337_BIT_INTCN | bbsqi_bitpos[ds1307->type]; - ds1307->regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE); + regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE); i2c_smbus_write_byte_data(client, DS1337_REG_CONTROL, - ds1307->regs[0]); + regs[0]); /* oscillator fault? clear flag, and warn */ - if (ds1307->regs[1] & DS1337_BIT_OSF) { + if (regs[1] & DS1337_BIT_OSF) { i2c_smbus_write_byte_data(client, DS1337_REG_STATUS, - ds1307->regs[1] & ~DS1337_BIT_OSF); + regs[1] & ~DS1337_BIT_OSF); dev_warn(&ds1307->client->dev, "SET TIME!\n"); } break; @@ -1354,60 +1354,60 @@ static int ds1307_chip_configure(struct ds1307 *ds1307) case rx_8025: tmp = i2c_smbus_read_i2c_block_data(client, RX8025_REG_CTRL1 << 4 | 0x08, - 2, buf); + 2, regs); if (tmp != 2) { dev_dbg(&client->dev, "read error %d\n", tmp); return -EIO; } /* oscillator off? turn it on, so clock can tick. */ - if (!(ds1307->regs[1] & RX8025_BIT_XST)) { - ds1307->regs[1] |= RX8025_BIT_XST; + if (!(regs[1] & RX8025_BIT_XST)) { + regs[1] |= RX8025_BIT_XST; i2c_smbus_write_byte_data(client, RX8025_REG_CTRL2 << 4 | 0x08, - ds1307->regs[1]); + regs[1]); dev_warn(&client->dev, "oscillator stop detected - SET TIME!\n"); } - if (ds1307->regs[1] & RX8025_BIT_PON) { - ds1307->regs[1] &= ~RX8025_BIT_PON; + if (regs[1] & RX8025_BIT_PON) { + regs[1] &= ~RX8025_BIT_PON; i2c_smbus_write_byte_data(client, RX8025_REG_CTRL2 << 4 | 0x08, - ds1307->regs[1]); + regs[1]); dev_warn(&client->dev, "power-on detected\n"); } - if (ds1307->regs[1] & RX8025_BIT_VDET) { - ds1307->regs[1] &= ~RX8025_BIT_VDET; + if (regs[1] & RX8025_BIT_VDET) { + regs[1] &= ~RX8025_BIT_VDET; i2c_smbus_write_byte_data(client, RX8025_REG_CTRL2 << 4 | 0x08, - ds1307->regs[1]); + regs[1]); dev_warn(&client->dev, "voltage drop detected\n"); } /* make sure we are running in 24hour mode */ - if (!(ds1307->regs[0] & RX8025_BIT_2412)) { + if (!(regs[0] & RX8025_BIT_2412)) { u8 hour; /* switch to 24 hour mode */ i2c_smbus_write_byte_data(client, RX8025_REG_CTRL1 << 4 | 0x08, - ds1307->regs[0] | RX8025_BIT_2412); + regs[0] | RX8025_BIT_2412); tmp = i2c_smbus_read_i2c_block_data(client, RX8025_REG_CTRL1 << 4 | 0x08, - 2, buf); + 2, regs); if (tmp != 2) { dev_dbg(&client->dev, "read error %d\n", tmp); return -EIO; } /* correct hour */ - hour = bcd2bin(ds1307->regs[DS1307_REG_HOUR]); + hour = bcd2bin(regs[DS1307_REG_HOUR]); if (hour == 12) hour = 0; - if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM) + if (regs[DS1307_REG_HOUR] & DS1307_BIT_PM) hour += 12; i2c_smbus_write_byte_data(client, @@ -1425,14 +1425,12 @@ static int ds1307_chip_configure(struct ds1307 *ds1307) static int ds1307_chip_sanity_check(struct ds1307 *ds1307) { int tmp; - unsigned char *buf; + u8 regs[DS1307_REG_COUNT]; struct i2c_client *client = ds1307->client; - buf = ds1307->regs; - read_rtc: /* read RTC registers */ - tmp = ds1307->read_block_data(ds1307->client, ds1307->offset, 8, buf); + tmp = ds1307->read_block_data(ds1307->client, ds1307->offset, 8, regs); if (tmp != 8) { dev_dbg(&client->dev, "read error %d\n", tmp); return -EIO; @@ -1443,7 +1441,7 @@ read_rtc: * specify the extra bits as must-be-zero, but there are * still a few values that are clearly out-of-range. */ - tmp = ds1307->regs[DS1307_REG_SECS]; + tmp = regs[DS1307_REG_SECS]; switch (ds1307->type) { case ds_1307: case m41t00: @@ -1460,9 +1458,9 @@ read_rtc: i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0); /* oscillator fault? clear flag, and warn */ - if (ds1307->regs[DS1307_REG_CONTROL] & DS1338_BIT_OSF) { + if (regs[DS1307_REG_CONTROL] & DS1338_BIT_OSF) { i2c_smbus_write_byte_data(client, DS1307_REG_CONTROL, - ds1307->regs[DS1307_REG_CONTROL] + regs[DS1307_REG_CONTROL] & ~DS1338_BIT_OSF); dev_warn(&client->dev, "SET TIME!\n"); goto read_rtc; @@ -1487,9 +1485,9 @@ read_rtc: break; case mcp794xx: /* make sure that the backup battery is enabled */ - if (!(ds1307->regs[DS1307_REG_WDAY] & MCP794XX_BIT_VBATEN)) { + if (!(regs[DS1307_REG_WDAY] & MCP794XX_BIT_VBATEN)) { i2c_smbus_write_byte_data(client, DS1307_REG_WDAY, - ds1307->regs[DS1307_REG_WDAY] + regs[DS1307_REG_WDAY] | MCP794XX_BIT_VBATEN); } @@ -1514,10 +1512,10 @@ static int ds1307_probe(struct i2c_client *client, { struct ds1307 *ds1307; int err = -ENODEV; - int tmp; + int reg; + u8 hour; struct chip_desc *chip = &chips[id->driver_data]; struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); - unsigned char *buf; struct ds1307_platform_data *pdata = dev_get_platdata(&client->dev); irq_handler_t irq_handler = ds1307_irq; @@ -1550,7 +1548,6 @@ static int ds1307_probe(struct i2c_client *client, chip->trickle_charger_setup); } - buf = ds1307->regs; if (i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) { ds1307->read_block_data = ds1307_native_smbus_read_block_data; ds1307->write_block_data = ds1307_native_smbus_write_block_data; @@ -1579,7 +1576,14 @@ static int ds1307_probe(struct i2c_client *client, if (err < 0) return err; - tmp = ds1307->regs[DS1307_REG_HOUR]; + reg = i2c_smbus_read_byte_data(client, + ds1307->offset + DS1307_REG_HOUR); + if (reg < 0) { + dev_err(&client->dev, + "failed to read HOUR register\n"); + return reg; + } + switch (ds1307->type) { case ds_1340: case m41t00: @@ -1591,21 +1595,21 @@ static int ds1307_probe(struct i2c_client *client, case rx_8025: break; default: - if (!(tmp & DS1307_BIT_12HR)) + if (!(reg & DS1307_BIT_12HR)) break; /* * Be sure we're in 24 hour mode. Multi-master systems * take note... */ - tmp = bcd2bin(tmp & 0x1f); - if (tmp == 12) - tmp = 0; - if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM) - tmp += 12; + hour = bcd2bin(reg & 0x1f); + if (hour == 12) + hour = 0; + if (reg & DS1307_BIT_PM) + hour += 12; i2c_smbus_write_byte_data(client, ds1307->offset + DS1307_REG_HOUR, - bin2bcd(tmp)); + bin2bcd(hour)); } if (ds1307_want_irq(ds1307, chip)) { @@ -1620,7 +1624,6 @@ static int ds1307_probe(struct i2c_client *client, if (ds1307_can_wakeup_device(ds1307) && ds1307->client->irq <= 0) { - /* Disable request for an IRQ */ dev_info(&client->dev, "'wakeup-source' is set, request for an IRQ is disabled!\n"); /* We cannot support UIE mode if we do not have an IRQ line */ -- 2.5.5

