]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
power: supply: axp20x_battery: Update temp sensor for AXP717 from device tree
authorChris Morgan <macromorgan@hotmail.com>
Tue, 4 Feb 2025 15:58:33 +0000 (09:58 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 May 2025 09:13:14 +0000 (11:13 +0200)
[ Upstream commit bbcfe510ecd47f2db4c8653c7dfa9dc7a55b1583 ]

Allow a boolean property of "x-powers,no-thermistor" to specify devices
where the ts pin is not connected to anything. This works around an
issue found with some devices where the efuse is not programmed
correctly from the factory or when the register gets set erroneously.

Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
Tested-by: Philippe Simons <simons.philippe@gmail.com>
Link: https://lore.kernel.org/r/20250204155835.161973-4-macroalpha82@gmail.com
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/power/supply/axp20x_battery.c

index 3c3158f31a484d4e0a8361aa7012a93c292ce1ae..f4cf129a0b68381ead7f35b4762958520ce3dc20 100644 (file)
@@ -89,6 +89,8 @@
 #define AXP717_BAT_CC_MIN_UA           0
 #define AXP717_BAT_CC_MAX_UA           3008000
 
+#define AXP717_TS_PIN_DISABLE          BIT(4)
+
 struct axp20x_batt_ps;
 
 struct axp_data {
@@ -117,6 +119,7 @@ struct axp20x_batt_ps {
        /* Maximum constant charge current */
        unsigned int max_ccc;
        const struct axp_data   *data;
+       bool ts_disable;
 };
 
 static int axp20x_battery_get_max_voltage(struct axp20x_batt_ps *axp20x_batt,
@@ -984,6 +987,24 @@ static void axp717_set_battery_info(struct platform_device *pdev,
        int ccc = info->constant_charge_current_max_ua;
        int val;
 
+       axp_batt->ts_disable = (device_property_read_bool(axp_batt->dev,
+                                                         "x-powers,no-thermistor"));
+
+       /*
+        * Under rare conditions an incorrectly programmed efuse for
+        * the temp sensor on the PMIC may trigger a fault condition.
+        * Allow users to hard-code if the ts pin is not used to work
+        * around this problem. Note that this requires the battery
+        * be correctly defined in the device tree with a monitored
+        * battery node.
+        */
+       if (axp_batt->ts_disable) {
+               regmap_update_bits(axp_batt->regmap,
+                                  AXP717_TS_PIN_CFG,
+                                  AXP717_TS_PIN_DISABLE,
+                                  AXP717_TS_PIN_DISABLE);
+       }
+
        if (vmin > 0 && axp717_set_voltage_min_design(axp_batt, vmin))
                dev_err(&pdev->dev,
                        "couldn't set voltage_min_design\n");