rtc: ds1307: introduce requires_trickle_resistor per chip

Make trickle-resistor-ohms optional for charging setups that do not
require specifying ROUT bits (specifying the resistor value between Vcc
and Vbackup). In order to allow specifying that, introduce
requires_trickle_resistor per chip.

Signed-off-by: Bastian Krause <bst@pengutronix.de>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20200917183246.19446-6-bst@pengutronix.de
This commit is contained in:
Bastian Krause 2020-09-17 20:32:43 +02:00 committed by Alexandre Belloni
parent 462eb736db
commit 1b5b6af788

View file

@ -191,6 +191,10 @@ struct chip_desc {
u16 trickle_charger_reg; u16 trickle_charger_reg;
u8 (*do_trickle_setup)(struct ds1307 *, u32, u8 (*do_trickle_setup)(struct ds1307 *, u32,
bool); bool);
/* Does the RTC require trickle-resistor-ohms to select the value of
* the resistor between Vcc and Vbackup?
*/
bool requires_trickle_resistor;
}; };
static const struct chip_desc chips[last_ds_type]; static const struct chip_desc chips[last_ds_type];
@ -986,6 +990,7 @@ static const struct chip_desc chips[last_ds_type] = {
.bbsqi_bit = DS1339_BIT_BBSQI, .bbsqi_bit = DS1339_BIT_BBSQI,
.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,
}, },
[ds_1340] = { [ds_1340] = {
.century_reg = DS1307_REG_HOUR, .century_reg = DS1307_REG_HOUR,
@ -993,6 +998,7 @@ static const struct chip_desc chips[last_ds_type] = {
.century_bit = DS1340_BIT_CENTURY, .century_bit = DS1340_BIT_CENTURY,
.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,
}, },
[ds_1341] = { [ds_1341] = {
.century_reg = DS1307_REG_MONTH, .century_reg = DS1307_REG_MONTH,
@ -1307,7 +1313,7 @@ static u8 ds1307_trickle_init(struct ds1307 *ds1307,
return 0; return 0;
if (device_property_read_u32(ds1307->dev, "trickle-resistor-ohms", if (device_property_read_u32(ds1307->dev, "trickle-resistor-ohms",
&ohms)) &ohms) && chip->requires_trickle_resistor)
return 0; return 0;
if (device_property_read_bool(ds1307->dev, "trickle-diode-disable")) if (device_property_read_bool(ds1307->dev, "trickle-diode-disable"))