]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
rtc: ds1307: consider aux-voltage-chargeable
authorBastian Krause <bst@pengutronix.de>
Thu, 17 Sep 2020 18:32:45 +0000 (20:32 +0200)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Thu, 24 Sep 2020 07:56:04 +0000 (09:56 +0200)
Prefer aux-voltage-chargeable over trickle-diode-disable and set diode
accordingly. This is then passed to the chip's appropriate charge setup
function.

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-8-bst@pengutronix.de
drivers/rtc/rtc-ds1307.c

index fdd6f9fda6f9fabcb03190acf587762220650c3e..03e166d2b0f8647fdcdf5be658932a342504a413 100644 (file)
@@ -1313,7 +1313,7 @@ static int ds1307_nvram_write(void *priv, unsigned int offset, void *val,
 static u8 ds1307_trickle_init(struct ds1307 *ds1307,
                              const struct chip_desc *chip)
 {
-       u32 ohms;
+       u32 ohms, chargeable;
        bool diode = chip->charge_default;
 
        if (!chip->do_trickle_setup)
@@ -1323,8 +1323,27 @@ static u8 ds1307_trickle_init(struct ds1307 *ds1307,
                                     &ohms) && chip->requires_trickle_resistor)
                return 0;
 
-       if (device_property_read_bool(ds1307->dev, "trickle-diode-disable"))
+       /* aux-voltage-chargeable takes precedence over the deprecated
+        * trickle-diode-disable
+        */
+       if (!device_property_read_u32(ds1307->dev, "aux-voltage-chargeable",
+                                    &chargeable)) {
+               switch (chargeable) {
+               case 0:
+                       diode = false;
+                       break;
+               case 1:
+                       diode = true;
+                       break;
+               default:
+                       dev_warn(ds1307->dev,
+                                "unsupported aux-voltage-chargeable value\n");
+                       break;
+               }
+       } else if (device_property_read_bool(ds1307->dev,
+                                            "trickle-diode-disable")) {
                diode = false;
+       }
 
        return chip->do_trickle_setup(ds1307, ohms, diode);
 }