]> www.infradead.org Git - users/hch/misc.git/commitdiff
power: supply: qcom_battmgr: update compats for SM8550 and X1E80100
authorFenglin Wu <fenglin.wu@oss.qualcomm.com>
Wed, 17 Sep 2025 10:15:18 +0000 (18:15 +0800)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Wed, 17 Sep 2025 23:01:03 +0000 (01:01 +0200)
The SM8550 and X1E80100 platforms now include charge control
functionality in battery management firmware, allowing charging
to stop when the battery reaches a set level and resume when it
drops below another level. To support this in the qcom_battmgr
driver, CHARGE_CONTROL_START/END_THRESHOLD power supply properties
can be added to manage these levels. This results in the battery
power supply properties for SM8550 and X1E80100 differing from
those for SM8350 and SC8280XP. Therefore, separate compatible
entries for SM8550 and X1E80100 are introduced, each with
their own variant definitions as match data.

Signed-off-by: Fenglin Wu <fenglin.wu@oss.qualcomm.com>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/qcom_battmgr.c

index 784e3b0110bdd9417c9d3c70544a92a5299d6f25..99d1de374b345f2c50173c0cd0d51b46e726bfc9 100644 (file)
 #define BATTMGR_STRING_LEN     128
 
 enum qcom_battmgr_variant {
-       QCOM_BATTMGR_SM8350,
        QCOM_BATTMGR_SC8280XP,
+       QCOM_BATTMGR_SM8350,
+       QCOM_BATTMGR_SM8550,
+       QCOM_BATTMGR_X1E80100,
 };
 
 #define BATTMGR_BAT_STATUS             0x1
@@ -494,7 +496,8 @@ static int qcom_battmgr_bat_get_property(struct power_supply *psy,
        if (!battmgr->service_up)
                return -EAGAIN;
 
-       if (battmgr->variant == QCOM_BATTMGR_SC8280XP)
+       if (battmgr->variant == QCOM_BATTMGR_SC8280XP ||
+           battmgr->variant == QCOM_BATTMGR_X1E80100)
                ret = qcom_battmgr_bat_sc8280xp_update(battmgr, psp);
        else
                ret = qcom_battmgr_bat_sm8350_update(battmgr, psp);
@@ -767,7 +770,8 @@ static int qcom_battmgr_usb_get_property(struct power_supply *psy,
        if (!battmgr->service_up)
                return -EAGAIN;
 
-       if (battmgr->variant == QCOM_BATTMGR_SC8280XP)
+       if (battmgr->variant == QCOM_BATTMGR_SC8280XP ||
+           battmgr->variant == QCOM_BATTMGR_X1E80100)
                ret = qcom_battmgr_bat_sc8280xp_update(battmgr, psp);
        else
                ret = qcom_battmgr_usb_sm8350_update(battmgr, psp);
@@ -889,7 +893,8 @@ static int qcom_battmgr_wls_get_property(struct power_supply *psy,
        if (!battmgr->service_up)
                return -EAGAIN;
 
-       if (battmgr->variant == QCOM_BATTMGR_SC8280XP)
+       if (battmgr->variant == QCOM_BATTMGR_SC8280XP ||
+           battmgr->variant == QCOM_BATTMGR_X1E80100)
                ret = qcom_battmgr_bat_sc8280xp_update(battmgr, psp);
        else
                ret = qcom_battmgr_wls_sm8350_update(battmgr, psp);
@@ -1323,7 +1328,8 @@ static void qcom_battmgr_callback(const void *data, size_t len, void *priv)
 
        if (opcode == BATTMGR_NOTIFICATION)
                qcom_battmgr_notification(battmgr, data, len);
-       else if (battmgr->variant == QCOM_BATTMGR_SC8280XP)
+       else if (battmgr->variant == QCOM_BATTMGR_SC8280XP ||
+                battmgr->variant == QCOM_BATTMGR_X1E80100)
                qcom_battmgr_sc8280xp_callback(battmgr, data, len);
        else
                qcom_battmgr_sm8350_callback(battmgr, data, len);
@@ -1359,7 +1365,8 @@ static void qcom_battmgr_pdr_notify(void *priv, int state)
 static const struct of_device_id qcom_battmgr_of_variants[] = {
        { .compatible = "qcom,sc8180x-pmic-glink", .data = (void *)QCOM_BATTMGR_SC8280XP },
        { .compatible = "qcom,sc8280xp-pmic-glink", .data = (void *)QCOM_BATTMGR_SC8280XP },
-       { .compatible = "qcom,x1e80100-pmic-glink", .data = (void *)QCOM_BATTMGR_SC8280XP },
+       { .compatible = "qcom,sm8550-pmic-glink", .data = (void *)QCOM_BATTMGR_SM8550 },
+       { .compatible = "qcom,x1e80100-pmic-glink", .data = (void *)QCOM_BATTMGR_X1E80100 },
        /* Unmatched devices falls back to QCOM_BATTMGR_SM8350 */
        {}
 };
@@ -1399,7 +1406,8 @@ static int qcom_battmgr_probe(struct auxiliary_device *adev,
        else
                battmgr->variant = QCOM_BATTMGR_SM8350;
 
-       if (battmgr->variant == QCOM_BATTMGR_SC8280XP) {
+       if (battmgr->variant == QCOM_BATTMGR_SC8280XP ||
+           battmgr->variant == QCOM_BATTMGR_X1E80100) {
                battmgr->bat_psy = devm_power_supply_register(dev, &sc8280xp_bat_psy_desc, &psy_cfg);
                if (IS_ERR(battmgr->bat_psy))
                        return dev_err_probe(dev, PTR_ERR(battmgr->bat_psy),