OSDN Git Service

power: supply: Support battery temperature device-tree properties
authorDmitry Osipenko <digetx@gmail.com>
Thu, 13 Aug 2020 21:34:02 +0000 (00:34 +0300)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Tue, 25 Aug 2020 17:24:37 +0000 (19:24 +0200)
The generic battery temperature properties are already supported by the
power-supply core. Let's support parsing of the common battery temperature
properties from a device-tree.

Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/power_supply_core.c
include/linux/power_supply.h

index ccbad43..38e3aa6 100644 (file)
@@ -579,6 +579,12 @@ int power_supply_get_battery_info(struct power_supply *psy,
        info->charge_term_current_ua         = -EINVAL;
        info->constant_charge_current_max_ua = -EINVAL;
        info->constant_charge_voltage_max_uv = -EINVAL;
+       info->temp_ambient_alert_min         = INT_MIN;
+       info->temp_ambient_alert_max         = INT_MAX;
+       info->temp_alert_min                 = INT_MIN;
+       info->temp_alert_max                 = INT_MAX;
+       info->temp_min                       = INT_MIN;
+       info->temp_max                       = INT_MAX;
        info->factory_internal_resistance_uohm  = -EINVAL;
        info->resist_table = NULL;
 
@@ -639,6 +645,19 @@ int power_supply_get_battery_info(struct power_supply *psy,
        of_property_read_u32(battery_np, "factory-internal-resistance-micro-ohms",
                             &info->factory_internal_resistance_uohm);
 
+       of_property_read_u32_index(battery_np, "ambient-celsius",
+                                  0, &info->temp_ambient_alert_min);
+       of_property_read_u32_index(battery_np, "ambient-celsius",
+                                  1, &info->temp_ambient_alert_max);
+       of_property_read_u32_index(battery_np, "alert-celsius",
+                                  0, &info->temp_alert_min);
+       of_property_read_u32_index(battery_np, "alert-celsius",
+                                  1, &info->temp_alert_max);
+       of_property_read_u32_index(battery_np, "operating-range-celsius",
+                                  0, &info->temp_min);
+       of_property_read_u32_index(battery_np, "operating-range-celsius",
+                                  1, &info->temp_max);
+
        len = of_property_count_u32_elems(battery_np, "ocv-capacity-celsius");
        if (len < 0 && len != -EINVAL) {
                err = len;
index 97cc4b8..d068436 100644 (file)
@@ -365,6 +365,12 @@ struct power_supply_battery_info {
        int constant_charge_voltage_max_uv; /* microVolts */
        int factory_internal_resistance_uohm;   /* microOhms */
        int ocv_temp[POWER_SUPPLY_OCV_TEMP_MAX];/* celsius */
+       int temp_ambient_alert_min;             /* celsius */
+       int temp_ambient_alert_max;             /* celsius */
+       int temp_alert_min;                     /* celsius */
+       int temp_alert_max;                     /* celsius */
+       int temp_min;                           /* celsius */
+       int temp_max;                           /* celsius */
        struct power_supply_battery_ocv_table *ocv_table[POWER_SUPPLY_OCV_TEMP_MAX];
        int ocv_table_size[POWER_SUPPLY_OCV_TEMP_MAX];
        struct power_supply_resistance_temp_table *resist_table;