Commit e553170a authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Alexandre Belloni

rtc: ds1307: factor out offset to struct chip_desc

Factor out offset to struct chip_desc and remove it from struct ds1307.
Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
parent 1efb98ba
...@@ -115,7 +115,6 @@ enum ds_type { ...@@ -115,7 +115,6 @@ enum ds_type {
struct ds1307 { struct ds1307 {
u8 offset; /* register's offset */
u8 regs[11]; u8 regs[11];
u16 nvram_offset; u16 nvram_offset;
struct nvmem_config nvmem_cfg; struct nvmem_config nvmem_cfg;
...@@ -136,6 +135,7 @@ struct chip_desc { ...@@ -136,6 +135,7 @@ struct chip_desc {
unsigned alarm:1; unsigned alarm:1;
u16 nvram_offset; u16 nvram_offset;
u16 nvram_size; u16 nvram_size;
u8 offset; /* register's offset */
u8 century_reg; u8 century_reg;
u8 century_enable_bit; u8 century_enable_bit;
u8 century_bit; u8 century_bit;
...@@ -208,6 +208,7 @@ static const struct chip_desc chips[last_ds_type] = { ...@@ -208,6 +208,7 @@ static const struct chip_desc chips[last_ds_type] = {
.trickle_charger_reg = 0x08, .trickle_charger_reg = 0x08,
}, },
[ds_1388] = { [ds_1388] = {
.offset = 1,
.trickle_charger_reg = 0x0a, .trickle_charger_reg = 0x0a,
}, },
[ds_3231] = { [ds_3231] = {
...@@ -221,6 +222,7 @@ static const struct chip_desc chips[last_ds_type] = { ...@@ -221,6 +222,7 @@ static const struct chip_desc chips[last_ds_type] = {
/* this is battery backed SRAM */ /* this is battery backed SRAM */
.nvram_offset = 0x20, .nvram_offset = 0x20,
.nvram_size = 4, /* 32bit (4 word x 8 bit) */ .nvram_size = 4, /* 32bit (4 word x 8 bit) */
.offset = 0x10,
.irq_handler = rx8130_irq, .irq_handler = rx8130_irq,
.rtc_ops = &rx8130_rtc_ops, .rtc_ops = &rx8130_rtc_ops,
}, },
...@@ -387,7 +389,7 @@ static int ds1307_get_time(struct device *dev, struct rtc_time *t) ...@@ -387,7 +389,7 @@ static int ds1307_get_time(struct device *dev, struct rtc_time *t)
const struct chip_desc *chip = &chips[ds1307->type]; const struct chip_desc *chip = &chips[ds1307->type];
/* read the RTC date and time registers all at once */ /* read the RTC date and time registers all at once */
ret = regmap_bulk_read(ds1307->regmap, ds1307->offset, ds1307->regs, 7); ret = regmap_bulk_read(ds1307->regmap, chip->offset, ds1307->regs, 7);
if (ret) { if (ret) {
dev_err(dev, "%s error %d\n", "read", ret); dev_err(dev, "%s error %d\n", "read", ret);
return ret; return ret;
...@@ -479,7 +481,7 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t) ...@@ -479,7 +481,7 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t)
dev_dbg(dev, "%s: %7ph\n", "write", buf); dev_dbg(dev, "%s: %7ph\n", "write", buf);
result = regmap_bulk_write(ds1307->regmap, ds1307->offset, buf, 7); result = regmap_bulk_write(ds1307->regmap, chip->offset, buf, 7);
if (result) { if (result) {
dev_err(dev, "%s error %d\n", "write", result); dev_err(dev, "%s error %d\n", "write", result);
return result; return result;
...@@ -1502,19 +1504,13 @@ static int ds1307_probe(struct i2c_client *client, ...@@ -1502,19 +1504,13 @@ static int ds1307_probe(struct i2c_client *client,
DS1307_REG_HOUR << 4 | 0x08, hour); DS1307_REG_HOUR << 4 | 0x08, hour);
} }
break; break;
case rx_8130:
ds1307->offset = 0x10; /* Seconds starts at 0x10 */
break;
case ds_1388:
ds1307->offset = 1; /* Seconds starts at 1 */
break;
default: default:
break; break;
} }
read_rtc: read_rtc:
/* read RTC registers */ /* read RTC registers */
err = regmap_bulk_read(ds1307->regmap, ds1307->offset, buf, 8); err = regmap_bulk_read(ds1307->regmap, chip->offset, buf, 8);
if (err) { if (err) {
dev_dbg(ds1307->dev, "read error %d\n", err); dev_dbg(ds1307->dev, "read error %d\n", err);
goto exit; goto exit;
...@@ -1615,7 +1611,7 @@ static int ds1307_probe(struct i2c_client *client, ...@@ -1615,7 +1611,7 @@ static int ds1307_probe(struct i2c_client *client,
tmp = 0; tmp = 0;
if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM) if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM)
tmp += 12; tmp += 12;
regmap_write(ds1307->regmap, ds1307->offset + DS1307_REG_HOUR, regmap_write(ds1307->regmap, chip->offset + DS1307_REG_HOUR,
bin2bcd(tmp)); bin2bcd(tmp));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment