linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] Improve the SC27XX fuel gauge controller
@ 2019-10-28  7:18 Baolin Wang
  2019-10-28  7:18 ` [PATCH 1/5] dt-bindings: power: Introduce one property to describe the battery resistance with temperature changes Baolin Wang
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Baolin Wang @ 2019-10-28  7:18 UTC (permalink / raw)
  To: sre, robh+dt, mark.rutland
  Cc: linux-pm, devicetree, linux-kernel, yuanjiang.yu, baolin.wang,
	baolin.wang7, zhang.lyra, orsonzhai

Hi,

This patch set adds one battery resistance-temperature table to optimize
the real battery internal resistance in different tempertures, and
calibrates the resistance of coulomb counter to improve the accuracy
of the coulomb counter.

Any comments are welcome. Thanks.

Baolin Wang (4):
  dt-bindings: power: Introduce one property to describe the battery
    resistance with temperature changes
  power: supply: core: Add battery internal resistance temperature
    table support
  dt-bindings: power: sc27xx: Add a new property to describe the real
    resistance of coulomb counter chip
  power: supply: sc27xx: Calibrate the resistance of coulomb counter

Yuanjiang Yu (1):
  power: supply: sc27xx: Optimize the battery resistance with measuring
    temperature

 .../devicetree/bindings/power/supply/battery.txt   |    5 ++
 .../devicetree/bindings/power/supply/sc27xx-fg.txt |    2 +
 drivers/power/supply/power_supply_core.c           |   67 +++++++++++++++++++-
 drivers/power/supply/sc27xx_fuel_gauge.c           |   49 +++++++++++++-
 include/linux/power_supply.h                       |   10 +++
 5 files changed, 129 insertions(+), 4 deletions(-)

-- 
1.7.9.5


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/5] dt-bindings: power: Introduce one property to describe the battery resistance with temperature changes
  2019-10-28  7:18 [PATCH 0/5] Improve the SC27XX fuel gauge controller Baolin Wang
@ 2019-10-28  7:18 ` Baolin Wang
  2019-10-30 14:38   ` Rob Herring
  2019-10-28  7:18 ` [PATCH 2/5] power: supply: core: Add battery internal resistance temperature table support Baolin Wang
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Baolin Wang @ 2019-10-28  7:18 UTC (permalink / raw)
  To: sre, robh+dt, mark.rutland
  Cc: linux-pm, devicetree, linux-kernel, yuanjiang.yu, baolin.wang,
	baolin.wang7, zhang.lyra, orsonzhai

Since the battery internal resistance can be changed as the temperature
changes, thus add one table to describe the battery resistance percent
in different temperature to get a accurate battery internal resistance.

Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
---
 .../devicetree/bindings/power/supply/battery.txt   |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/Documentation/devicetree/bindings/power/supply/battery.txt b/Documentation/devicetree/bindings/power/supply/battery.txt
index 5c913d4c..1a6f951 100644
--- a/Documentation/devicetree/bindings/power/supply/battery.txt
+++ b/Documentation/devicetree/bindings/power/supply/battery.txt
@@ -35,6 +35,10 @@ Optional Properties:
    for each of the battery capacity lookup table. The first temperature value
    specifies the OCV table 0, and the second temperature value specifies the
    OCV table 1, and so on.
+ - resistance-temp-table: An array providing the resistance percent and
+   corresponding temperature in degree Celsius, which is used to look up the
+   resistance percent according to current temperature to get a accurate
+   batterty internal resistance.
 
 Battery properties are named, where possible, for the corresponding
 elements in enum power_supply_property, defined in
@@ -61,6 +65,7 @@ Example:
 		ocv-capacity-table-0 = <4185000 100>, <4113000 95>, <4066000 90>, ...;
 		ocv-capacity-table-1 = <4200000 100>, <4185000 95>, <4113000 90>, ...;
 		ocv-capacity-table-2 = <4250000 100>, <4200000 95>, <4185000 90>, ...;
+		resistance-temp-table = <20 100>, <10 90>, <0 80>, <(-10) 60>;
 	};
 
 	charger: charger@11 {
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/5] power: supply: core: Add battery internal resistance temperature table support
  2019-10-28  7:18 [PATCH 0/5] Improve the SC27XX fuel gauge controller Baolin Wang
  2019-10-28  7:18 ` [PATCH 1/5] dt-bindings: power: Introduce one property to describe the battery resistance with temperature changes Baolin Wang
@ 2019-10-28  7:18 ` Baolin Wang
  2019-10-28  7:18 ` [PATCH 3/5] power: supply: sc27xx: Optimize the battery resistance with measuring temperature Baolin Wang
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Baolin Wang @ 2019-10-28  7:18 UTC (permalink / raw)
  To: sre, robh+dt, mark.rutland
  Cc: linux-pm, devicetree, linux-kernel, yuanjiang.yu, baolin.wang,
	baolin.wang7, zhang.lyra, orsonzhai

Since the battery internal resistance can be changed with the temperature
changes, thus add a resistance temperature table support to look up
the accurate battery internal resistance in a certain temperature.

Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
---
 drivers/power/supply/power_supply_core.c |   67 +++++++++++++++++++++++++++++-
 include/linux/power_supply.h             |   10 +++++
 2 files changed, 76 insertions(+), 1 deletion(-)

diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
index 5c36c43..1a9a9fa 100644
--- a/drivers/power/supply/power_supply_core.c
+++ b/drivers/power/supply/power_supply_core.c
@@ -565,9 +565,11 @@ struct power_supply *devm_power_supply_get_by_phandle(struct device *dev,
 int power_supply_get_battery_info(struct power_supply *psy,
 				  struct power_supply_battery_info *info)
 {
+	struct power_supply_resistance_temp_table *resist_table;
 	struct device_node *battery_np;
 	const char *value;
 	int err, len, index;
+	const __be32 *list;
 
 	info->energy_full_design_uwh         = -EINVAL;
 	info->charge_full_design_uah         = -EINVAL;
@@ -578,6 +580,7 @@ int power_supply_get_battery_info(struct power_supply *psy,
 	info->constant_charge_current_max_ua = -EINVAL;
 	info->constant_charge_voltage_max_uv = -EINVAL;
 	info->factory_internal_resistance_uohm  = -EINVAL;
+	info->resist_table = NULL;
 
 	for (index = 0; index < POWER_SUPPLY_OCV_TEMP_MAX; index++) {
 		info->ocv_table[index]       = NULL;
@@ -644,7 +647,6 @@ int power_supply_get_battery_info(struct power_supply *psy,
 	for (index = 0; index < len; index++) {
 		struct power_supply_battery_ocv_table *table;
 		char *propname;
-		const __be32 *list;
 		int i, tab_len, size;
 
 		propname = kasprintf(GFP_KERNEL, "ocv-capacity-table-%d", index);
@@ -677,6 +679,26 @@ int power_supply_get_battery_info(struct power_supply *psy,
 		}
 	}
 
+	list = of_get_property(battery_np, "resistance-temp-table", &len);
+	if (!list || !len)
+		goto out_put_node;
+
+	info->resist_table_size = len / (2 * sizeof(__be32));
+	resist_table = info->resist_table = devm_kcalloc(&psy->dev,
+							 info->resist_table_size,
+							 sizeof(*resist_table),
+							 GFP_KERNEL);
+	if (!info->resist_table) {
+		power_supply_put_battery_info(psy, info);
+		err = -ENOMEM;
+		goto out_put_node;
+	}
+
+	for (index = 0; index < info->resist_table_size; index++) {
+		resist_table[index].temp = be32_to_cpu(*list++);
+		resist_table[index].resistance = be32_to_cpu(*list++);
+	}
+
 out_put_node:
 	of_node_put(battery_np);
 	return err;
@@ -692,10 +714,53 @@ void power_supply_put_battery_info(struct power_supply *psy,
 		if (info->ocv_table[i])
 			devm_kfree(&psy->dev, info->ocv_table[i]);
 	}
+
+	if (info->resist_table)
+		devm_kfree(&psy->dev, info->resist_table);
 }
 EXPORT_SYMBOL_GPL(power_supply_put_battery_info);
 
 /**
+ * power_supply_temp2resist_simple() - find the battery internal resistance
+ * percent
+ * @table: Pointer to battery resistance temperature table
+ * @table_len: The table length
+ * @ocv: Current temperature
+ *
+ * This helper function is used to look up battery internal resistance percent
+ * according to current temperature value from the resistance temperature table,
+ * and the table must be ordered descending. Then the actual battery internal
+ * resistance = the ideal battery internal resistance * percent / 100.
+ *
+ * Return: the battery internal resistance percent
+ */
+int power_supply_temp2resist_simple(struct power_supply_resistance_temp_table *table,
+				    int table_len, int temp)
+{
+	int i, resist;
+
+	for (i = 0; i < table_len; i++)
+		if (temp > table[i].temp)
+			break;
+
+	if (i > 0 && i < table_len) {
+		int tmp;
+
+		tmp = (table[i - 1].resistance - table[i].resistance) *
+			(temp - table[i].temp);
+		tmp /= table[i - 1].temp - table[i].temp;
+		resist = tmp + table[i].resistance;
+	} else if (i == 0) {
+		resist = table[0].resistance;
+	} else {
+		resist = table[table_len - 1].resistance;
+	}
+
+	return resist;
+}
+EXPORT_SYMBOL_GPL(power_supply_temp2resist_simple);
+
+/**
  * power_supply_ocv2cap_simple() - find the battery capacity
  * @table: Pointer to battery OCV lookup table
  * @table_len: OCV table length
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index 28413f7..dcd5a71 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -325,6 +325,11 @@ struct power_supply_battery_ocv_table {
 	int capacity;	/* percent */
 };
 
+struct power_supply_resistance_temp_table {
+	int temp;	/* celsius */
+	int resistance;	/* internal resistance percent */
+};
+
 #define POWER_SUPPLY_OCV_TEMP_MAX 20
 
 /*
@@ -349,6 +354,8 @@ struct power_supply_battery_info {
 	int ocv_temp[POWER_SUPPLY_OCV_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;
+	int resist_table_size;
 };
 
 extern struct atomic_notifier_head power_supply_notifier;
@@ -381,6 +388,9 @@ extern int power_supply_ocv2cap_simple(struct power_supply_battery_ocv_table *ta
 				int temp, int *table_len);
 extern int power_supply_batinfo_ocv2cap(struct power_supply_battery_info *info,
 					int ocv, int temp);
+extern int
+power_supply_temp2resist_simple(struct power_supply_resistance_temp_table *table,
+				int table_len, int temp);
 extern void power_supply_changed(struct power_supply *psy);
 extern int power_supply_am_i_supplied(struct power_supply *psy);
 extern int power_supply_set_input_current_limit_from_supplier(
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/5] power: supply: sc27xx: Optimize the battery resistance with measuring temperature
  2019-10-28  7:18 [PATCH 0/5] Improve the SC27XX fuel gauge controller Baolin Wang
  2019-10-28  7:18 ` [PATCH 1/5] dt-bindings: power: Introduce one property to describe the battery resistance with temperature changes Baolin Wang
  2019-10-28  7:18 ` [PATCH 2/5] power: supply: core: Add battery internal resistance temperature table support Baolin Wang
@ 2019-10-28  7:18 ` Baolin Wang
  2019-10-28  7:19 ` [PATCH 4/5] dt-bindings: power: sc27xx: Add a new property to describe the real resistance of coulomb counter chip Baolin Wang
  2019-10-28  7:19 ` [PATCH 5/5] power: supply: sc27xx: Calibrate the resistance of coulomb counter Baolin Wang
  4 siblings, 0 replies; 10+ messages in thread
From: Baolin Wang @ 2019-10-28  7:18 UTC (permalink / raw)
  To: sre, robh+dt, mark.rutland
  Cc: linux-pm, devicetree, linux-kernel, yuanjiang.yu, baolin.wang,
	baolin.wang7, zhang.lyra, orsonzhai

From: Yuanjiang Yu <yuanjiang.yu@unisoc.com>

Optimize the battery internal resistance in a certain temerature to
get a accurate battery internal resistance.

Signed-off-by: Yuanjiang Yu <yuanjiang.yu@unisoc.com>
Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
---
 drivers/power/supply/sc27xx_fuel_gauge.c |   32 ++++++++++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/drivers/power/supply/sc27xx_fuel_gauge.c b/drivers/power/supply/sc27xx_fuel_gauge.c
index bc8f5bd..221b6fb 100644
--- a/drivers/power/supply/sc27xx_fuel_gauge.c
+++ b/drivers/power/supply/sc27xx_fuel_gauge.c
@@ -81,9 +81,11 @@
  * @max_volt: the maximum constant input voltage in millivolt
  * @min_volt: the minimum drained battery voltage in microvolt
  * @table_len: the capacity table length
+ * @resist_table_len: the resistance table length
  * @cur_1000ma_adc: ADC value corresponding to 1000 mA
  * @vol_1000mv_adc: ADC value corresponding to 1000 mV
  * @cap_table: capacity table with corresponding ocv
+ * @resist_table: resistance percent table with corresponding temperature
  */
 struct sc27xx_fgu_data {
 	struct regmap *regmap;
@@ -103,15 +105,18 @@ struct sc27xx_fgu_data {
 	int max_volt;
 	int min_volt;
 	int table_len;
+	int resist_table_len;
 	int cur_1000ma_adc;
 	int vol_1000mv_adc;
 	struct power_supply_battery_ocv_table *cap_table;
+	struct power_supply_resistance_temp_table *resist_table;
 };
 
 static int sc27xx_fgu_cap_to_clbcnt(struct sc27xx_fgu_data *data, int capacity);
 static void sc27xx_fgu_capacity_calibration(struct sc27xx_fgu_data *data,
 					    int cap, bool int_mode);
 static void sc27xx_fgu_adjust_cap(struct sc27xx_fgu_data *data, int cap);
+static int sc27xx_fgu_get_temp(struct sc27xx_fgu_data *data, int *temp);
 
 static const char * const sc27xx_charger_supply_name[] = {
 	"sc2731_charger",
@@ -434,7 +439,7 @@ static int sc27xx_fgu_get_current(struct sc27xx_fgu_data *data, int *val)
 
 static int sc27xx_fgu_get_vbat_ocv(struct sc27xx_fgu_data *data, int *val)
 {
-	int vol, cur, ret;
+	int vol, cur, ret, temp, resistance;
 
 	ret = sc27xx_fgu_get_vbat_vol(data, &vol);
 	if (ret)
@@ -444,8 +449,19 @@ static int sc27xx_fgu_get_vbat_ocv(struct sc27xx_fgu_data *data, int *val)
 	if (ret)
 		return ret;
 
+	resistance = data->internal_resist;
+	if (data->resist_table_len > 0) {
+		ret = sc27xx_fgu_get_temp(data, &temp);
+		if (ret)
+			return ret;
+
+		resistance = power_supply_temp2resist_simple(data->resist_table,
+						data->resist_table_len, temp);
+		resistance = data->internal_resist * resistance / 100;
+	}
+
 	/* Return the battery OCV in micro volts. */
-	*val = vol * 1000 - cur * data->internal_resist;
+	*val = vol * 1000 - cur * resistance;
 
 	return 0;
 }
@@ -929,6 +945,18 @@ static int sc27xx_fgu_hw_init(struct sc27xx_fgu_data *data)
 	if (!data->alarm_cap)
 		data->alarm_cap += 1;
 
+	data->resist_table_len = info.resist_table_size;
+	if (data->resist_table_len > 0) {
+		data->resist_table = devm_kmemdup(data->dev, info.resist_table,
+						  data->resist_table_len *
+						  sizeof(struct power_supply_resistance_temp_table),
+						  GFP_KERNEL);
+		if (!data->resist_table) {
+			power_supply_put_battery_info(data->battery, &info);
+			return -ENOMEM;
+		}
+	}
+
 	power_supply_put_battery_info(data->battery, &info);
 
 	ret = sc27xx_fgu_calibration(data);
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/5] dt-bindings: power: sc27xx: Add a new property to describe the real resistance of coulomb counter chip
  2019-10-28  7:18 [PATCH 0/5] Improve the SC27XX fuel gauge controller Baolin Wang
                   ` (2 preceding siblings ...)
  2019-10-28  7:18 ` [PATCH 3/5] power: supply: sc27xx: Optimize the battery resistance with measuring temperature Baolin Wang
@ 2019-10-28  7:19 ` Baolin Wang
  2019-10-30 14:39   ` Rob Herring
  2019-10-28  7:19 ` [PATCH 5/5] power: supply: sc27xx: Calibrate the resistance of coulomb counter Baolin Wang
  4 siblings, 1 reply; 10+ messages in thread
From: Baolin Wang @ 2019-10-28  7:19 UTC (permalink / raw)
  To: sre, robh+dt, mark.rutland
  Cc: linux-pm, devicetree, linux-kernel, yuanjiang.yu, baolin.wang,
	baolin.wang7, zhang.lyra, orsonzhai

Add a new property to describe the real resistance of coulomb counter chip,
which is used to calibrate the accuracy of the coulomb counter chip.

Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
---
 .../devicetree/bindings/power/supply/sc27xx-fg.txt |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt b/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
index 0a5705b..fc042d0 100644
--- a/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
+++ b/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
@@ -13,6 +13,7 @@ Required properties:
 - io-channel-names: Should be "bat-temp" or "charge-vol".
 - nvmem-cells: A phandle to the calibration cells provided by eFuse device.
 - nvmem-cell-names: Should be "fgu_calib".
+- sprd,calib-resistance: Specify the real resistance of coulomb counter chip in micro Ohms.
 - monitored-battery: Phandle of battery characteristics devicetree node.
   See Documentation/devicetree/bindings/power/supply/battery.txt
 
@@ -52,5 +53,6 @@ Example:
 			nvmem-cells = <&fgu_calib>;
 			nvmem-cell-names = "fgu_calib";
 			monitored-battery = <&bat>;
+			sprd,calib-resistance = <21500>;
 		};
 	};
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5/5] power: supply: sc27xx: Calibrate the resistance of coulomb counter
  2019-10-28  7:18 [PATCH 0/5] Improve the SC27XX fuel gauge controller Baolin Wang
                   ` (3 preceding siblings ...)
  2019-10-28  7:19 ` [PATCH 4/5] dt-bindings: power: sc27xx: Add a new property to describe the real resistance of coulomb counter chip Baolin Wang
@ 2019-10-28  7:19 ` Baolin Wang
  4 siblings, 0 replies; 10+ messages in thread
From: Baolin Wang @ 2019-10-28  7:19 UTC (permalink / raw)
  To: sre, robh+dt, mark.rutland
  Cc: linux-pm, devicetree, linux-kernel, yuanjiang.yu, baolin.wang,
	baolin.wang7, zhang.lyra, orsonzhai

There are some deviations between the real resistance and the ideal
resistance of coulomb counter, which will affect the accuracy of
the coulomb counter, thus calibrate the real resistance of coulomb
counter to improve the accuracy.

Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
---
 drivers/power/supply/sc27xx_fuel_gauge.c |   17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/power/supply/sc27xx_fuel_gauge.c b/drivers/power/supply/sc27xx_fuel_gauge.c
index 221b6fb..f363fa7 100644
--- a/drivers/power/supply/sc27xx_fuel_gauge.c
+++ b/drivers/power/supply/sc27xx_fuel_gauge.c
@@ -62,6 +62,8 @@
 
 #define SC27XX_FGU_CUR_BASIC_ADC	8192
 #define SC27XX_FGU_SAMPLE_HZ		2
+/* micro Ohms */
+#define SC27XX_FGU_IDEAL_RESISTANCE	20000
 
 /*
  * struct sc27xx_fgu_data: describe the FGU device
@@ -84,6 +86,7 @@
  * @resist_table_len: the resistance table length
  * @cur_1000ma_adc: ADC value corresponding to 1000 mA
  * @vol_1000mv_adc: ADC value corresponding to 1000 mV
+ * @calib_resist: the real resistance of coulomb counter chip in mOhm
  * @cap_table: capacity table with corresponding ocv
  * @resist_table: resistance percent table with corresponding temperature
  */
@@ -108,6 +111,7 @@ struct sc27xx_fgu_data {
 	int resist_table_len;
 	int cur_1000ma_adc;
 	int vol_1000mv_adc;
+	int calib_resist;
 	struct power_supply_battery_ocv_table *cap_table;
 	struct power_supply_resistance_temp_table *resist_table;
 };
@@ -900,7 +904,9 @@ static int sc27xx_fgu_calibration(struct sc27xx_fgu_data *data)
 	 */
 	cal_4200mv = (calib_data & 0x1ff) + 6963 - 4096 - 256;
 	data->vol_1000mv_adc = DIV_ROUND_CLOSEST(cal_4200mv * 10, 42);
-	data->cur_1000ma_adc = data->vol_1000mv_adc * 4;
+	data->cur_1000ma_adc =
+		DIV_ROUND_CLOSEST(data->vol_1000mv_adc * 4 * data->calib_resist,
+				  SC27XX_FGU_IDEAL_RESISTANCE);
 
 	kfree(buf);
 	return 0;
@@ -1079,6 +1085,15 @@ static int sc27xx_fgu_probe(struct platform_device *pdev)
 		return ret;
 	}
 
+	ret = device_property_read_u32(&pdev->dev,
+				       "sprd,calib-resistance",
+				       &data->calib_resist);
+	if (ret) {
+		dev_err(&pdev->dev,
+			"failed to get fgu calibration resistance\n");
+		return ret;
+	}
+
 	data->channel = devm_iio_channel_get(dev, "bat-temp");
 	if (IS_ERR(data->channel)) {
 		dev_err(dev, "failed to get IIO channel\n");
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/5] dt-bindings: power: Introduce one property to describe the battery resistance with temperature changes
  2019-10-28  7:18 ` [PATCH 1/5] dt-bindings: power: Introduce one property to describe the battery resistance with temperature changes Baolin Wang
@ 2019-10-30 14:38   ` Rob Herring
  2019-10-31  2:13     ` Baolin Wang
  0 siblings, 1 reply; 10+ messages in thread
From: Rob Herring @ 2019-10-30 14:38 UTC (permalink / raw)
  To: Baolin Wang
  Cc: sre, mark.rutland, linux-pm, devicetree, linux-kernel,
	yuanjiang.yu, baolin.wang7, zhang.lyra, orsonzhai

On Mon, Oct 28, 2019 at 03:18:57PM +0800, Baolin Wang wrote:
> Since the battery internal resistance can be changed as the temperature
> changes, thus add one table to describe the battery resistance percent
> in different temperature to get a accurate battery internal resistance.
> 
> Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
> ---
>  .../devicetree/bindings/power/supply/battery.txt   |    5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/power/supply/battery.txt b/Documentation/devicetree/bindings/power/supply/battery.txt
> index 5c913d4c..1a6f951 100644
> --- a/Documentation/devicetree/bindings/power/supply/battery.txt
> +++ b/Documentation/devicetree/bindings/power/supply/battery.txt
> @@ -35,6 +35,10 @@ Optional Properties:
>     for each of the battery capacity lookup table. The first temperature value
>     specifies the OCV table 0, and the second temperature value specifies the
>     OCV table 1, and so on.
> + - resistance-temp-table: An array providing the resistance percent and
> +   corresponding temperature in degree Celsius, which is used to look up the
> +   resistance percent according to current temperature to get a accurate
> +   batterty internal resistance.

What's the order of values? The description and example don't seem to 
agree unless negative percent is a thing.

>  
>  Battery properties are named, where possible, for the corresponding
>  elements in enum power_supply_property, defined in
> @@ -61,6 +65,7 @@ Example:
>  		ocv-capacity-table-0 = <4185000 100>, <4113000 95>, <4066000 90>, ...;
>  		ocv-capacity-table-1 = <4200000 100>, <4185000 95>, <4113000 90>, ...;
>  		ocv-capacity-table-2 = <4250000 100>, <4200000 95>, <4185000 90>, ...;
> +		resistance-temp-table = <20 100>, <10 90>, <0 80>, <(-10) 60>;
>  	};
>  
>  	charger: charger@11 {
> -- 
> 1.7.9.5
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 4/5] dt-bindings: power: sc27xx: Add a new property to describe the real resistance of coulomb counter chip
  2019-10-28  7:19 ` [PATCH 4/5] dt-bindings: power: sc27xx: Add a new property to describe the real resistance of coulomb counter chip Baolin Wang
@ 2019-10-30 14:39   ` Rob Herring
  2019-10-31  2:14     ` Baolin Wang
  0 siblings, 1 reply; 10+ messages in thread
From: Rob Herring @ 2019-10-30 14:39 UTC (permalink / raw)
  To: Baolin Wang
  Cc: sre, mark.rutland, linux-pm, devicetree, linux-kernel,
	yuanjiang.yu, baolin.wang7, zhang.lyra, orsonzhai

On Mon, Oct 28, 2019 at 03:19:00PM +0800, Baolin Wang wrote:
> Add a new property to describe the real resistance of coulomb counter chip,
> which is used to calibrate the accuracy of the coulomb counter chip.
> 
> Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
> ---
>  .../devicetree/bindings/power/supply/sc27xx-fg.txt |    2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt b/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
> index 0a5705b..fc042d0 100644
> --- a/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
> +++ b/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
> @@ -13,6 +13,7 @@ Required properties:
>  - io-channel-names: Should be "bat-temp" or "charge-vol".
>  - nvmem-cells: A phandle to the calibration cells provided by eFuse device.
>  - nvmem-cell-names: Should be "fgu_calib".
> +- sprd,calib-resistance: Specify the real resistance of coulomb counter chip in micro Ohms.
>  - monitored-battery: Phandle of battery characteristics devicetree node.
>    See Documentation/devicetree/bindings/power/supply/battery.txt

Needs a standard unit suffix.

>  
> @@ -52,5 +53,6 @@ Example:
>  			nvmem-cells = <&fgu_calib>;
>  			nvmem-cell-names = "fgu_calib";
>  			monitored-battery = <&bat>;
> +			sprd,calib-resistance = <21500>;
>  		};
>  	};
> -- 
> 1.7.9.5
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/5] dt-bindings: power: Introduce one property to describe the battery resistance with temperature changes
  2019-10-30 14:38   ` Rob Herring
@ 2019-10-31  2:13     ` Baolin Wang
  0 siblings, 0 replies; 10+ messages in thread
From: Baolin Wang @ 2019-10-31  2:13 UTC (permalink / raw)
  To: Rob Herring
  Cc: Sebastian Reichel, Mark Rutland, Linux PM list, DTML, LKML,
	yuanjiang.yu, baolin.wang7, Chunyan Zhang, Orson Zhai

Hi Rob,

On Wed, 30 Oct 2019 at 22:38, Rob Herring <robh@kernel.org> wrote:
>
> On Mon, Oct 28, 2019 at 03:18:57PM +0800, Baolin Wang wrote:
> > Since the battery internal resistance can be changed as the temperature
> > changes, thus add one table to describe the battery resistance percent
> > in different temperature to get a accurate battery internal resistance.
> >
> > Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
> > ---
> >  .../devicetree/bindings/power/supply/battery.txt   |    5 +++++
> >  1 file changed, 5 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/power/supply/battery.txt b/Documentation/devicetree/bindings/power/supply/battery.txt
> > index 5c913d4c..1a6f951 100644
> > --- a/Documentation/devicetree/bindings/power/supply/battery.txt
> > +++ b/Documentation/devicetree/bindings/power/supply/battery.txt
> > @@ -35,6 +35,10 @@ Optional Properties:
> >     for each of the battery capacity lookup table. The first temperature value
> >     specifies the OCV table 0, and the second temperature value specifies the
> >     OCV table 1, and so on.
> > + - resistance-temp-table: An array providing the resistance percent and
> > +   corresponding temperature in degree Celsius, which is used to look up the
> > +   resistance percent according to current temperature to get a accurate
> > +   batterty internal resistance.
>
> What's the order of values? The description and example don't seem to
> agree unless negative percent is a thing.

Ah, right. I will fix the example according to the description's order
in next version. Thanks.

> >
> >  Battery properties are named, where possible, for the corresponding
> >  elements in enum power_supply_property, defined in
> > @@ -61,6 +65,7 @@ Example:
> >               ocv-capacity-table-0 = <4185000 100>, <4113000 95>, <4066000 90>, ...;
> >               ocv-capacity-table-1 = <4200000 100>, <4185000 95>, <4113000 90>, ...;
> >               ocv-capacity-table-2 = <4250000 100>, <4200000 95>, <4185000 90>, ...;
> > +             resistance-temp-table = <20 100>, <10 90>, <0 80>, <(-10) 60>;
> >       };
> >
> >       charger: charger@11 {
> > --
> > 1.7.9.5
> >



-- 
Baolin Wang
Best Regards

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 4/5] dt-bindings: power: sc27xx: Add a new property to describe the real resistance of coulomb counter chip
  2019-10-30 14:39   ` Rob Herring
@ 2019-10-31  2:14     ` Baolin Wang
  0 siblings, 0 replies; 10+ messages in thread
From: Baolin Wang @ 2019-10-31  2:14 UTC (permalink / raw)
  To: Rob Herring
  Cc: Sebastian Reichel, Mark Rutland, Linux PM list, DTML, LKML,
	yuanjiang.yu, baolin.wang7, Chunyan Zhang, Orson Zhai

Hi Rob,

On Wed, 30 Oct 2019 at 22:39, Rob Herring <robh@kernel.org> wrote:
>
> On Mon, Oct 28, 2019 at 03:19:00PM +0800, Baolin Wang wrote:
> > Add a new property to describe the real resistance of coulomb counter chip,
> > which is used to calibrate the accuracy of the coulomb counter chip.
> >
> > Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
> > ---
> >  .../devicetree/bindings/power/supply/sc27xx-fg.txt |    2 ++
> >  1 file changed, 2 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt b/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
> > index 0a5705b..fc042d0 100644
> > --- a/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
> > +++ b/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
> > @@ -13,6 +13,7 @@ Required properties:
> >  - io-channel-names: Should be "bat-temp" or "charge-vol".
> >  - nvmem-cells: A phandle to the calibration cells provided by eFuse device.
> >  - nvmem-cell-names: Should be "fgu_calib".
> > +- sprd,calib-resistance: Specify the real resistance of coulomb counter chip in micro Ohms.
> >  - monitored-battery: Phandle of battery characteristics devicetree node.
> >    See Documentation/devicetree/bindings/power/supply/battery.txt
>
> Needs a standard unit suffix.

Got it. Thanks.

-- 
Baolin Wang
Best Regards

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-10-31  2:15 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-28  7:18 [PATCH 0/5] Improve the SC27XX fuel gauge controller Baolin Wang
2019-10-28  7:18 ` [PATCH 1/5] dt-bindings: power: Introduce one property to describe the battery resistance with temperature changes Baolin Wang
2019-10-30 14:38   ` Rob Herring
2019-10-31  2:13     ` Baolin Wang
2019-10-28  7:18 ` [PATCH 2/5] power: supply: core: Add battery internal resistance temperature table support Baolin Wang
2019-10-28  7:18 ` [PATCH 3/5] power: supply: sc27xx: Optimize the battery resistance with measuring temperature Baolin Wang
2019-10-28  7:19 ` [PATCH 4/5] dt-bindings: power: sc27xx: Add a new property to describe the real resistance of coulomb counter chip Baolin Wang
2019-10-30 14:39   ` Rob Herring
2019-10-31  2:14     ` Baolin Wang
2019-10-28  7:19 ` [PATCH 5/5] power: supply: sc27xx: Calibrate the resistance of coulomb counter Baolin Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).