power: supply: cpcap-battery: improve handling of 3rd party batteries.
authorCarl Philipp Klemm <philipp@uvos.xyz>
Sat, 31 Oct 2020 11:56:50 +0000 (12:56 +0100)
committerSebastian Reichel <sre@kernel.org>
Tue, 29 Dec 2020 23:40:22 +0000 (00:40 +0100)
Adds a module option to ignore a missing temperature sensor.
Useful for 3rd party batteries.

Signed-off-by: Carl Philipp Klemm <carl@uvos.xyz>
Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sebastian Reichel <sre@kernel.org>
drivers/power/supply/cpcap-battery.c

index 295611b3b15e9390948fc3bc239321268f0a91b4..6745a32ca099086b067be176ff6df0288a1e9502 100644 (file)
@@ -28,6 +28,7 @@
 #include <linux/power_supply.h>
 #include <linux/reboot.h>
 #include <linux/regmap.h>
+#include <linux/moduleparam.h>
 
 #include <linux/iio/consumer.h>
 #include <linux/iio/types.h>
@@ -138,6 +139,9 @@ struct cpcap_battery_ddata {
 
 #define CPCAP_NO_BATTERY       -400
 
+static bool ignore_temperature_probe;
+module_param(ignore_temperature_probe, bool, 0660);
+
 static struct cpcap_battery_state_data *
 cpcap_battery_get_state(struct cpcap_battery_ddata *ddata,
                        enum cpcap_battery_state state)
@@ -169,7 +173,8 @@ static int cpcap_charger_battery_temperature(struct cpcap_battery_ddata *ddata,
        channel = ddata->channels[CPCAP_BATTERY_IIO_BATTDET];
        error = iio_read_channel_processed(channel, value);
        if (error < 0) {
-               dev_warn(ddata->dev, "%s failed: %i\n", __func__, error);
+               if (!ignore_temperature_probe)
+                       dev_warn(ddata->dev, "%s failed: %i\n", __func__, error);
                *value = CPCAP_NO_BATTERY;
 
                return error;
@@ -450,7 +455,7 @@ static int cpcap_battery_get_property(struct power_supply *psy,
 
        switch (psp) {
        case POWER_SUPPLY_PROP_PRESENT:
-               if (latest->temperature > CPCAP_NO_BATTERY)
+               if (latest->temperature > CPCAP_NO_BATTERY || ignore_temperature_probe)
                        val->intval = 1;
                else
                        val->intval = 0;
@@ -536,6 +541,8 @@ static int cpcap_battery_get_property(struct power_supply *psy,
                val->intval = POWER_SUPPLY_SCOPE_SYSTEM;
                break;
        case POWER_SUPPLY_PROP_TEMP:
+               if (ignore_temperature_probe)
+                       return -ENODATA;
                val->intval = latest->temperature;
                break;
        default: