Commit 95a74cbb authored by Bastian Krause's avatar Bastian Krause Committed by Alexandre Belloni

rtc: ds1307: store previous charge default per chip

Some RTC's batteries and supercaps were charged by default until now.
In contrast other RTCs allow charging but the driver did not configure
them to do so until now. These must not be charged by default to stay
backwards compatible.

In order to do that, store the charge default per chip.
Signed-off-by: default avatarBastian Krause <bst@pengutronix.de>
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20200917183246.19446-7-bst@pengutronix.de
parent 1b5b6af7
...@@ -195,6 +195,11 @@ struct chip_desc { ...@@ -195,6 +195,11 @@ struct chip_desc {
* the resistor between Vcc and Vbackup? * the resistor between Vcc and Vbackup?
*/ */
bool requires_trickle_resistor; bool requires_trickle_resistor;
/* Some RTC's batteries and supercaps were charged by default, others
* allow charging but were not configured previously to do so.
* Remember this behavior to stay backwards compatible.
*/
bool charge_default;
}; };
static const struct chip_desc chips[last_ds_type]; static const struct chip_desc chips[last_ds_type];
...@@ -991,6 +996,7 @@ static const struct chip_desc chips[last_ds_type] = { ...@@ -991,6 +996,7 @@ static const struct chip_desc chips[last_ds_type] = {
.trickle_charger_reg = 0x10, .trickle_charger_reg = 0x10,
.do_trickle_setup = &do_trickle_setup_ds1339, .do_trickle_setup = &do_trickle_setup_ds1339,
.requires_trickle_resistor = true, .requires_trickle_resistor = true,
.charge_default = true,
}, },
[ds_1340] = { [ds_1340] = {
.century_reg = DS1307_REG_HOUR, .century_reg = DS1307_REG_HOUR,
...@@ -999,6 +1005,7 @@ static const struct chip_desc chips[last_ds_type] = { ...@@ -999,6 +1005,7 @@ static const struct chip_desc chips[last_ds_type] = {
.do_trickle_setup = &do_trickle_setup_ds1339, .do_trickle_setup = &do_trickle_setup_ds1339,
.trickle_charger_reg = 0x08, .trickle_charger_reg = 0x08,
.requires_trickle_resistor = true, .requires_trickle_resistor = true,
.charge_default = true,
}, },
[ds_1341] = { [ds_1341] = {
.century_reg = DS1307_REG_MONTH, .century_reg = DS1307_REG_MONTH,
...@@ -1307,7 +1314,7 @@ static u8 ds1307_trickle_init(struct ds1307 *ds1307, ...@@ -1307,7 +1314,7 @@ static u8 ds1307_trickle_init(struct ds1307 *ds1307,
const struct chip_desc *chip) const struct chip_desc *chip)
{ {
u32 ohms; u32 ohms;
bool diode = true; bool diode = chip->charge_default;
if (!chip->do_trickle_setup) if (!chip->do_trickle_setup)
return 0; return 0;
......
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