* [PATCH v2 0/8] power: supply: core: extensions and fixes
@ 2020-04-03 16:23 Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 1/8] power: supply: core: reduce power_supply_show_usb_type() parameters Michał Mirosław
` (7 more replies)
0 siblings, 8 replies; 13+ messages in thread
From: Michał Mirosław @ 2020-04-03 16:23 UTC (permalink / raw)
To: Andrey Smirnov, Guenter Roeck, Sebastian Reichel; +Cc: linux-kernel, linux-pm
This series covers three areas of power supply class:
1-2. constify property and usb_type lists as they should not be changed
after driver registration
3-5. fix and clean up HWMON labels
6-8. extend core to support input/battery/output supply point
measurements
---
v2: splits power_supply_hwmon_read_string() fix from extensioa
(patches 3-4)
Michał Mirosław (8):
power: supply: core: reduce power_supply_show_usb_type() parameters
power: supply: core: allow to constify property lists
power: supply: core: fix HWMON temperature labels
power: supply: core: tabularize HWMON temperature labels
power: supply: core: hide unused HWMON labels
power: supply: core: add input voltage/current measurements
power: supply: core: add output voltage measurements
power: supply: core: document measurement points
Documentation/power/power_supply_class.rst | 6 +
drivers/power/supply/power_supply_hwmon.c | 198 +++++++++++++++++++--
drivers/power/supply/power_supply_sysfs.c | 15 +-
include/linux/power_supply.h | 9 +-
4 files changed, 210 insertions(+), 18 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 1/8] power: supply: core: reduce power_supply_show_usb_type() parameters
2020-04-03 16:23 [PATCH v2 0/8] power: supply: core: extensions and fixes Michał Mirosław
@ 2020-04-03 16:23 ` Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 2/8] power: supply: core: allow to constify property lists Michał Mirosław
` (6 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Michał Mirosław @ 2020-04-03 16:23 UTC (permalink / raw)
To: Andrey Smirnov, Guenter Roeck, Sebastian Reichel; +Cc: linux-kernel, linux-pm
Reduce power_supply_show_usb_type() parameter count by folding
power_supply_desc dereference into the function. This makes following
patch making usb_types const easier.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
drivers/power/supply/power_supply_sysfs.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
index f37ad4eae60b..51de3f47b25d 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -78,8 +78,7 @@ static const char * const power_supply_scope_text[] = {
};
static ssize_t power_supply_show_usb_type(struct device *dev,
- enum power_supply_usb_type *usb_types,
- ssize_t num_usb_types,
+ const struct power_supply_desc *desc,
union power_supply_propval *value,
char *buf)
{
@@ -88,8 +87,8 @@ static ssize_t power_supply_show_usb_type(struct device *dev,
bool match = false;
int i;
- for (i = 0; i < num_usb_types; ++i) {
- usb_type = usb_types[i];
+ for (i = 0; i < desc->num_usb_types; ++i) {
+ usb_type = desc->usb_types[i];
if (value->intval == usb_type) {
count += sprintf(buf + count, "[%s] ",
@@ -163,8 +162,7 @@ static ssize_t power_supply_show_property(struct device *dev,
power_supply_type_text[value.intval]);
break;
case POWER_SUPPLY_PROP_USB_TYPE:
- ret = power_supply_show_usb_type(dev, psy->desc->usb_types,
- psy->desc->num_usb_types,
+ ret = power_supply_show_usb_type(dev, psy->desc,
&value, buf);
break;
case POWER_SUPPLY_PROP_SCOPE:
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 3/8] power: supply: core: fix HWMON temperature labels
2020-04-03 16:23 [PATCH v2 0/8] power: supply: core: extensions and fixes Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 1/8] power: supply: core: reduce power_supply_show_usb_type() parameters Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 2/8] power: supply: core: allow to constify property lists Michał Mirosław
@ 2020-04-03 16:23 ` Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 5/8] power: supply: core: hide unused HWMON labels Michał Mirosław
` (4 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Michał Mirosław @ 2020-04-03 16:23 UTC (permalink / raw)
To: Sebastian Reichel, Guenter Roeck, Andrey Smirnov; +Cc: linux-pm, linux-kernel
tempX_label files are swapped compared to what
power_supply_hwmon_temp_to_property() uses. Make them match.
Cc: stable@vger.kernel.org
Fixes: e67d4dfc9ff1 ("power: supply: Add HWMON compatibility layer")
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
v2: split parameter checking to separate patch
---
drivers/power/supply/power_supply_hwmon.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
index 75cf861ba492..67b6ee60085e 100644
--- a/drivers/power/supply/power_supply_hwmon.c
+++ b/drivers/power/supply/power_supply_hwmon.c
@@ -144,7 +144,7 @@ static int power_supply_hwmon_read_string(struct device *dev,
u32 attr, int channel,
const char **str)
{
- *str = channel ? "temp" : "temp ambient";
+ *str = channel ? "temp ambient" : "temp";
return 0;
}
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 2/8] power: supply: core: allow to constify property lists
2020-04-03 16:23 [PATCH v2 0/8] power: supply: core: extensions and fixes Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 1/8] power: supply: core: reduce power_supply_show_usb_type() parameters Michał Mirosław
@ 2020-04-03 16:23 ` Michał Mirosław
2020-04-10 20:41 ` kbuild test robot
2020-04-10 22:14 ` kbuild test robot
2020-04-03 16:23 ` [PATCH v2 3/8] power: supply: core: fix HWMON temperature labels Michał Mirosław
` (5 subsequent siblings)
7 siblings, 2 replies; 13+ messages in thread
From: Michał Mirosław @ 2020-04-03 16:23 UTC (permalink / raw)
To: Andrey Smirnov, Guenter Roeck, Sebastian Reichel; +Cc: linux-kernel, linux-pm
Since tables pointed to by power_supply_desc->properties and
->usb_types are not expected to change after registration, mark
the pointers accordingly
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
include/linux/power_supply.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index dcd5a71e6c67..6a34df65d4d1 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -223,9 +223,9 @@ struct power_supply_config {
struct power_supply_desc {
const char *name;
enum power_supply_type type;
- enum power_supply_usb_type *usb_types;
+ const enum power_supply_usb_type *usb_types;
size_t num_usb_types;
- enum power_supply_property *properties;
+ const enum power_supply_property *properties;
size_t num_properties;
/*
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 5/8] power: supply: core: hide unused HWMON labels
2020-04-03 16:23 [PATCH v2 0/8] power: supply: core: extensions and fixes Michał Mirosław
` (2 preceding siblings ...)
2020-04-03 16:23 ` [PATCH v2 3/8] power: supply: core: fix HWMON temperature labels Michał Mirosław
@ 2020-04-03 16:23 ` Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 4/8] power: supply: core: tabularize HWMON temperature labels Michał Mirosław
` (3 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Michał Mirosław @ 2020-04-03 16:23 UTC (permalink / raw)
To: Andrey Smirnov, Guenter Roeck, Sebastian Reichel; +Cc: linux-kernel, linux-pm
Currently HWMON emulation shows all labels (temp and ambient temp)
regardless if power supply supports reading the values. Check that at
least one property is enabled for each label.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
drivers/power/supply/power_supply_hwmon.c | 43 +++++++++++++++++++++--
1 file changed, 40 insertions(+), 3 deletions(-)
diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
index 48c73994732c..a4f576f39b9c 100644
--- a/drivers/power/supply/power_supply_hwmon.c
+++ b/drivers/power/supply/power_supply_hwmon.c
@@ -103,6 +103,40 @@ static bool power_supply_hwmon_is_a_label(enum hwmon_sensor_types type,
return type == hwmon_temp && attr == hwmon_temp_label;
}
+static bool power_supply_hwmon_has_property(
+ const struct power_supply_hwmon *psyhw,
+ enum hwmon_sensor_types type, u32 attr, int channel)
+{
+ int prop = power_supply_hwmon_to_property(type, attr, channel);
+
+ return prop >= 0 && test_bit(prop, psyhw->props);
+}
+
+static bool power_supply_hwmon_has_input(
+ const struct power_supply_hwmon *psyhw,
+ enum hwmon_sensor_types type, int channel)
+{
+ static const enum hwmon_temp_attributes temp_attrs[] = {
+ hwmon_temp_input,
+ hwmon_temp_min, hwmon_temp_max,
+ hwmon_temp_min_alarm, hwmon_temp_max_alarm,
+ };
+ size_t i;
+
+ switch (type) {
+ case hwmon_temp:
+ for (i = 0; i < ARRAY_SIZE(temp_attrs); ++i)
+ if (power_supply_hwmon_has_property(psyhw, type,
+ temp_attrs[i], channel))
+ return true;
+ break;
+ default:
+ break;
+ }
+
+ return false;
+}
+
static bool power_supply_hwmon_is_writable(enum hwmon_sensor_types type,
u32 attr)
{
@@ -129,9 +163,12 @@ static umode_t power_supply_hwmon_is_visible(const void *data,
const struct power_supply_hwmon *psyhw = data;
int prop;
-
- if (power_supply_hwmon_is_a_label(type, attr))
- return 0444;
+ if (power_supply_hwmon_is_a_label(type, attr)) {
+ if (power_supply_hwmon_has_input(psyhw, type, channel))
+ return 0444;
+ else
+ return 0;
+ }
prop = power_supply_hwmon_to_property(type, attr, channel);
if (prop < 0 || !test_bit(prop, psyhw->props))
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 4/8] power: supply: core: tabularize HWMON temperature labels
2020-04-03 16:23 [PATCH v2 0/8] power: supply: core: extensions and fixes Michał Mirosław
` (3 preceding siblings ...)
2020-04-03 16:23 ` [PATCH v2 5/8] power: supply: core: hide unused HWMON labels Michał Mirosław
@ 2020-04-03 16:23 ` Michał Mirosław
2020-04-03 16:47 ` Guenter Roeck
2020-04-03 16:23 ` [PATCH v2 7/8] power: supply: core: add output voltage measurements Michał Mirosław
` (2 subsequent siblings)
7 siblings, 1 reply; 13+ messages in thread
From: Michał Mirosław @ 2020-04-03 16:23 UTC (permalink / raw)
To: Andrey Smirnov, Guenter Roeck, Sebastian Reichel; +Cc: linux-kernel, linux-pm
Rework power_supply_hwmon_read_string() to check it's parameters.
This allows to extend it later with labels for other types of
measurements.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
v2: split from fix temperature labels
---
drivers/power/supply/power_supply_hwmon.c | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
index 67b6ee60085e..48c73994732c 100644
--- a/drivers/power/supply/power_supply_hwmon.c
+++ b/drivers/power/supply/power_supply_hwmon.c
@@ -43,6 +43,11 @@ static int power_supply_hwmon_curr_to_property(u32 attr)
}
}
+static const char *const ps_temp_label[] = {
+ "temp",
+ "ambient temp",
+};
+
static int power_supply_hwmon_temp_to_property(u32 attr, int channel)
{
if (channel) {
@@ -144,8 +149,20 @@ static int power_supply_hwmon_read_string(struct device *dev,
u32 attr, int channel,
const char **str)
{
- *str = channel ? "temp ambient" : "temp";
- return 0;
+ if (channel < 0)
+ return -EINVAL;
+
+ switch (type) {
+ case hwmon_temp:
+ if (channel >= ARRAY_SIZE(ps_temp_label))
+ return -EINVAL;
+ *str = ps_temp_label[channel];
+ return 0;
+ default:
+ break;
+ }
+
+ return -EINVAL;
}
static int
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 7/8] power: supply: core: add output voltage measurements
2020-04-03 16:23 [PATCH v2 0/8] power: supply: core: extensions and fixes Michał Mirosław
` (4 preceding siblings ...)
2020-04-03 16:23 ` [PATCH v2 4/8] power: supply: core: tabularize HWMON temperature labels Michał Mirosław
@ 2020-04-03 16:23 ` Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 6/8] power: supply: core: add input voltage/current measurements Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 8/8] power: supply: core: document measurement points Michał Mirosław
7 siblings, 0 replies; 13+ messages in thread
From: Michał Mirosław @ 2020-04-03 16:23 UTC (permalink / raw)
To: Andrey Smirnov, Guenter Roeck, Sebastian Reichel; +Cc: linux-kernel, linux-pm
Add support for supply output voltage to be measured and configured.
This might be different from the voltage on the storage element (battery).
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
drivers/power/supply/power_supply_hwmon.c | 25 +++++++++++++++++++++++
drivers/power/supply/power_supply_sysfs.c | 3 +++
include/linux/power_supply.h | 3 +++
3 files changed, 31 insertions(+)
diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
index ef6196bf9bec..d70742d3e961 100644
--- a/drivers/power/supply/power_supply_hwmon.c
+++ b/drivers/power/supply/power_supply_hwmon.c
@@ -41,6 +41,20 @@ static int power_supply_hwmon_in1_to_property(u32 attr)
}
}
+static int power_supply_hwmon_in2_to_property(u32 attr)
+{
+ switch (attr) {
+ case hwmon_in_min:
+ return POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN;
+ case hwmon_in_max:
+ return POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MAX;
+ case hwmon_in_input:
+ return POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW;
+ default:
+ return -EINVAL;
+ }
+}
+
static int power_supply_hwmon_in_to_property(u32 attr, int channel)
{
switch (channel) {
@@ -48,6 +62,8 @@ static int power_supply_hwmon_in_to_property(u32 attr, int channel)
return power_supply_hwmon_in0_to_property(attr);
case 1:
return power_supply_hwmon_in1_to_property(attr);
+ case 2:
+ return power_supply_hwmon_in2_to_property(attr);
default:
return -EINVAL;
}
@@ -94,6 +110,7 @@ static int power_supply_hwmon_curr_to_property(u32 attr, int channel)
static const char *const ps_input_label[] = {
"battery",
"external source",
+ "load",
};
static const char *const ps_temp_label[] = {
@@ -411,6 +428,11 @@ static const struct hwmon_channel_info *power_supply_hwmon_info[] = {
HWMON_I_LABEL |
HWMON_I_MAX |
+ HWMON_I_INPUT,
+
+ HWMON_I_LABEL |
+ HWMON_I_MIN |
+ HWMON_I_MAX |
HWMON_I_INPUT),
NULL
@@ -481,6 +503,9 @@ int power_supply_add_hwmon_sysfs(struct power_supply *psy)
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
case POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW:
case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT:
+ case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN:
+ case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MAX:
+ case POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW:
set_bit(prop, psyhw->props);
break;
default:
diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
index 1d1fb69516a8..fb6f113b52bb 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -278,6 +278,9 @@ static struct device_attribute power_supply_attrs[] = {
POWER_SUPPLY_ATTR(input_voltage_now),
POWER_SUPPLY_ATTR(input_voltage_limit),
POWER_SUPPLY_ATTR(input_power_limit),
+ POWER_SUPPLY_ATTR(output_voltage_now),
+ POWER_SUPPLY_ATTR(output_voltage_min),
+ POWER_SUPPLY_ATTR(output_voltage_max),
POWER_SUPPLY_ATTR(energy_full_design),
POWER_SUPPLY_ATTR(energy_empty_design),
POWER_SUPPLY_ATTR(energy_full),
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index 5313d1284aad..f1ff8d230488 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -132,6 +132,9 @@ enum power_supply_property {
POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW,
POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT,
POWER_SUPPLY_PROP_INPUT_POWER_LIMIT,
+ POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_NOW,
+ POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MIN,
+ POWER_SUPPLY_PROP_OUTPUT_VOLTAGE_MAX,
POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN,
POWER_SUPPLY_PROP_ENERGY_FULL,
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 6/8] power: supply: core: add input voltage/current measurements
2020-04-03 16:23 [PATCH v2 0/8] power: supply: core: extensions and fixes Michał Mirosław
` (5 preceding siblings ...)
2020-04-03 16:23 ` [PATCH v2 7/8] power: supply: core: add output voltage measurements Michał Mirosław
@ 2020-04-03 16:23 ` Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 8/8] power: supply: core: document measurement points Michał Mirosław
7 siblings, 0 replies; 13+ messages in thread
From: Michał Mirosław @ 2020-04-03 16:23 UTC (permalink / raw)
To: Andrey Smirnov, Guenter Roeck, Sebastian Reichel; +Cc: linux-kernel, linux-pm
Introduce input voltage and current limits and measurements.
This makes room for e.g. VBUS measurements in USB chargers.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
v2: add parameter checking in power_supply_hwmon_read_string()
---
drivers/power/supply/power_supply_hwmon.c | 109 +++++++++++++++++++++-
drivers/power/supply/power_supply_sysfs.c | 2 +
include/linux/power_supply.h | 2 +
3 files changed, 108 insertions(+), 5 deletions(-)
diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
index a4f576f39b9c..ef6196bf9bec 100644
--- a/drivers/power/supply/power_supply_hwmon.c
+++ b/drivers/power/supply/power_supply_hwmon.c
@@ -13,7 +13,7 @@ struct power_supply_hwmon {
unsigned long *props;
};
-static int power_supply_hwmon_in_to_property(u32 attr)
+static int power_supply_hwmon_in0_to_property(u32 attr)
{
switch (attr) {
case hwmon_in_average:
@@ -29,7 +29,31 @@ static int power_supply_hwmon_in_to_property(u32 attr)
}
}
-static int power_supply_hwmon_curr_to_property(u32 attr)
+static int power_supply_hwmon_in1_to_property(u32 attr)
+{
+ switch (attr) {
+ case hwmon_in_max:
+ return POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT;
+ case hwmon_in_input:
+ return POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW;
+ default:
+ return -EINVAL;
+ }
+}
+
+static int power_supply_hwmon_in_to_property(u32 attr, int channel)
+{
+ switch (channel) {
+ case 0:
+ return power_supply_hwmon_in0_to_property(attr);
+ case 1:
+ return power_supply_hwmon_in1_to_property(attr);
+ default:
+ return -EINVAL;
+ }
+}
+
+static int power_supply_hwmon_curr0_to_property(u32 attr)
{
switch (attr) {
case hwmon_curr_average:
@@ -43,6 +67,35 @@ static int power_supply_hwmon_curr_to_property(u32 attr)
}
}
+static int power_supply_hwmon_curr1_to_property(u32 attr)
+{
+ switch (attr) {
+ case hwmon_curr_max:
+ return POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT;
+ case hwmon_curr_input:
+ return POWER_SUPPLY_PROP_INPUT_CURRENT_NOW;
+ default:
+ return -EINVAL;
+ }
+}
+
+static int power_supply_hwmon_curr_to_property(u32 attr, int channel)
+{
+ switch (channel) {
+ case 0:
+ return power_supply_hwmon_curr0_to_property(attr);
+ case 1:
+ return power_supply_hwmon_curr1_to_property(attr);
+ default:
+ return -EINVAL;
+ }
+}
+
+static const char *const ps_input_label[] = {
+ "battery",
+ "external source",
+};
+
static const char *const ps_temp_label[] = {
"temp",
"ambient temp",
@@ -87,9 +140,9 @@ power_supply_hwmon_to_property(enum hwmon_sensor_types type,
{
switch (type) {
case hwmon_in:
- return power_supply_hwmon_in_to_property(attr);
+ return power_supply_hwmon_in_to_property(attr, channel);
case hwmon_curr:
- return power_supply_hwmon_curr_to_property(attr);
+ return power_supply_hwmon_curr_to_property(attr, channel);
case hwmon_temp:
return power_supply_hwmon_temp_to_property(attr, channel);
default:
@@ -100,7 +153,9 @@ power_supply_hwmon_to_property(enum hwmon_sensor_types type,
static bool power_supply_hwmon_is_a_label(enum hwmon_sensor_types type,
u32 attr)
{
- return type == hwmon_temp && attr == hwmon_temp_label;
+ return (type == hwmon_temp && attr == hwmon_temp_label) ||
+ (type == hwmon_in && attr == hwmon_in_label) ||
+ (type == hwmon_curr && attr == hwmon_curr_label);
}
static bool power_supply_hwmon_has_property(
@@ -116,6 +171,14 @@ static bool power_supply_hwmon_has_input(
const struct power_supply_hwmon *psyhw,
enum hwmon_sensor_types type, int channel)
{
+ static const enum hwmon_in_attributes in_attrs[] = {
+ hwmon_in_input, hwmon_in_average,
+ hwmon_in_min, hwmon_in_max,
+ };
+ static const enum hwmon_curr_attributes curr_attrs[] = {
+ hwmon_curr_input, hwmon_curr_average,
+ hwmon_curr_max,
+ };
static const enum hwmon_temp_attributes temp_attrs[] = {
hwmon_temp_input,
hwmon_temp_min, hwmon_temp_max,
@@ -124,6 +187,20 @@ static bool power_supply_hwmon_has_input(
size_t i;
switch (type) {
+ case hwmon_in:
+ for (i = 0; i < ARRAY_SIZE(in_attrs); ++i)
+ if (power_supply_hwmon_has_property(psyhw, type,
+ in_attrs[i], channel))
+ return true;
+ break;
+
+ case hwmon_curr:
+ for (i = 0; i < ARRAY_SIZE(curr_attrs); ++i)
+ if (power_supply_hwmon_has_property(psyhw, type,
+ curr_attrs[i], channel))
+ return true;
+ break;
+
case hwmon_temp:
for (i = 0; i < ARRAY_SIZE(temp_attrs); ++i)
if (power_supply_hwmon_has_property(psyhw, type,
@@ -190,6 +267,13 @@ static int power_supply_hwmon_read_string(struct device *dev,
return -EINVAL;
switch (type) {
+ case hwmon_in:
+ case hwmon_curr:
+ if (channel >= ARRAY_SIZE(ps_input_label))
+ return -EINVAL;
+ *str = ps_input_label[channel];
+ return 0;
+
case hwmon_temp:
if (channel >= ARRAY_SIZE(ps_temp_label))
return -EINVAL;
@@ -309,15 +393,26 @@ static const struct hwmon_channel_info *power_supply_hwmon_info[] = {
HWMON_T_MAX_ALARM),
HWMON_CHANNEL_INFO(curr,
+ HWMON_C_LABEL |
HWMON_C_AVERAGE |
HWMON_C_MAX |
+ HWMON_C_INPUT,
+
+ HWMON_C_LABEL |
+ HWMON_C_MAX |
HWMON_C_INPUT),
HWMON_CHANNEL_INFO(in,
+ HWMON_I_LABEL |
HWMON_I_AVERAGE |
HWMON_I_MIN |
HWMON_I_MAX |
+ HWMON_I_INPUT,
+
+ HWMON_I_LABEL |
+ HWMON_I_MAX |
HWMON_I_INPUT),
+
NULL
};
@@ -382,6 +477,10 @@ int power_supply_add_hwmon_sysfs(struct power_supply *psy)
case POWER_SUPPLY_PROP_VOLTAGE_MIN:
case POWER_SUPPLY_PROP_VOLTAGE_MAX:
case POWER_SUPPLY_PROP_VOLTAGE_NOW:
+ case POWER_SUPPLY_PROP_INPUT_CURRENT_NOW:
+ case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
+ case POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW:
+ case POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT:
set_bit(prop, psyhw->props);
break;
default:
diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
index 51de3f47b25d..1d1fb69516a8 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -273,7 +273,9 @@ static struct device_attribute power_supply_attrs[] = {
POWER_SUPPLY_ATTR(charge_control_limit_max),
POWER_SUPPLY_ATTR(charge_control_start_threshold),
POWER_SUPPLY_ATTR(charge_control_end_threshold),
+ POWER_SUPPLY_ATTR(input_current_now),
POWER_SUPPLY_ATTR(input_current_limit),
+ POWER_SUPPLY_ATTR(input_voltage_now),
POWER_SUPPLY_ATTR(input_voltage_limit),
POWER_SUPPLY_ATTR(input_power_limit),
POWER_SUPPLY_ATTR(energy_full_design),
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index 6a34df65d4d1..5313d1284aad 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -127,7 +127,9 @@ enum power_supply_property {
POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX,
POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD, /* in percents! */
POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD, /* in percents! */
+ POWER_SUPPLY_PROP_INPUT_CURRENT_NOW,
POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
+ POWER_SUPPLY_PROP_INPUT_VOLTAGE_NOW,
POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT,
POWER_SUPPLY_PROP_INPUT_POWER_LIMIT,
POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 8/8] power: supply: core: document measurement points
2020-04-03 16:23 [PATCH v2 0/8] power: supply: core: extensions and fixes Michał Mirosław
` (6 preceding siblings ...)
2020-04-03 16:23 ` [PATCH v2 6/8] power: supply: core: add input voltage/current measurements Michał Mirosław
@ 2020-04-03 16:23 ` Michał Mirosław
7 siblings, 0 replies; 13+ messages in thread
From: Michał Mirosław @ 2020-04-03 16:23 UTC (permalink / raw)
To: Andrey Smirnov, Guenter Roeck, Sebastian Reichel; +Cc: linux-kernel, linux-pm
Document used prefixes for input/output/storage voltages and currents.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
Documentation/power/power_supply_class.rst | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/power/power_supply_class.rst b/Documentation/power/power_supply_class.rst
index 7b8c42f8b1de..c41b25aaa755 100644
--- a/Documentation/power/power_supply_class.rst
+++ b/Documentation/power/power_supply_class.rst
@@ -28,6 +28,12 @@ indication (including whether to use it at all) are fully controllable by
user and/or specific machine defaults, per design principles of LED
framework).
+There are three defined points of measurement for the benefit of mobile and
+UPS-like power supplies: INPUT (external power source), OUTPUT (power output
+from the module), and unmarked (power flowing to/from a storage element,
+eg. battery). Battery is viewed as a power source, so current flowing to
+the battery (charging it) is shown negative.
+
Attributes/properties
~~~~~~~~~~~~~~~~~~~~~
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v2 4/8] power: supply: core: tabularize HWMON temperature labels
2020-04-03 16:23 ` [PATCH v2 4/8] power: supply: core: tabularize HWMON temperature labels Michał Mirosław
@ 2020-04-03 16:47 ` Guenter Roeck
2020-04-03 16:56 ` Michał Mirosław
0 siblings, 1 reply; 13+ messages in thread
From: Guenter Roeck @ 2020-04-03 16:47 UTC (permalink / raw)
To: Michał Mirosław, Andrey Smirnov, Sebastian Reichel
Cc: linux-kernel, linux-pm
On 4/3/20 9:23 AM, Michał Mirosław wrote:
> Rework power_supply_hwmon_read_string() to check it's parameters.
> This allows to extend it later with labels for other types of
> measurements.
>
> Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> ---
> v2: split from fix temperature labels
> ---
> drivers/power/supply/power_supply_hwmon.c | 21 +++++++++++++++++++--
> 1 file changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
> index 67b6ee60085e..48c73994732c 100644
> --- a/drivers/power/supply/power_supply_hwmon.c
> +++ b/drivers/power/supply/power_supply_hwmon.c
> @@ -43,6 +43,11 @@ static int power_supply_hwmon_curr_to_property(u32 attr)
> }
> }
>
> +static const char *const ps_temp_label[] = {
> + "temp",
> + "ambient temp",
> +};
> +
> static int power_supply_hwmon_temp_to_property(u32 attr, int channel)
> {
> if (channel) {
> @@ -144,8 +149,20 @@ static int power_supply_hwmon_read_string(struct device *dev,
> u32 attr, int channel,
> const char **str)
> {
> - *str = channel ? "temp ambient" : "temp";
> - return 0;
> + if (channel < 0)
> + return -EINVAL;
> +
This is unnecessary.
> + switch (type) {
> + case hwmon_temp:
> + if (channel >= ARRAY_SIZE(ps_temp_label))
> + return -EINVAL;
As is this. We don't usually check boundaries like this for
in-kernel APIs, and I personally would not want to have it
introduced in the kernel more than necessary. This just increases
kernel image size with zero benefit.
Guenter
> + *str = ps_temp_label[channel];
> + return 0;
> + default:
> + break;
> + }
> +
> + return -EINVAL;
> }
>
> static int
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 4/8] power: supply: core: tabularize HWMON temperature labels
2020-04-03 16:47 ` Guenter Roeck
@ 2020-04-03 16:56 ` Michał Mirosław
0 siblings, 0 replies; 13+ messages in thread
From: Michał Mirosław @ 2020-04-03 16:56 UTC (permalink / raw)
To: Guenter Roeck; +Cc: Andrey Smirnov, Sebastian Reichel, linux-kernel, linux-pm
On Fri, Apr 03, 2020 at 09:47:40AM -0700, Guenter Roeck wrote:
> On 4/3/20 9:23 AM, Michał Mirosław wrote:
> > Rework power_supply_hwmon_read_string() to check it's parameters.
> > This allows to extend it later with labels for other types of
> > measurements.
> >
> > Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> > ---
> > v2: split from fix temperature labels
> > ---
> > drivers/power/supply/power_supply_hwmon.c | 21 +++++++++++++++++++--
> > 1 file changed, 19 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
> > index 67b6ee60085e..48c73994732c 100644
> > --- a/drivers/power/supply/power_supply_hwmon.c
> > +++ b/drivers/power/supply/power_supply_hwmon.c
> > @@ -43,6 +43,11 @@ static int power_supply_hwmon_curr_to_property(u32 attr)
> > }
> > }
> >
> > +static const char *const ps_temp_label[] = {
> > + "temp",
> > + "ambient temp",
> > +};
> > +
> > static int power_supply_hwmon_temp_to_property(u32 attr, int channel)
> > {
> > if (channel) {
> > @@ -144,8 +149,20 @@ static int power_supply_hwmon_read_string(struct device *dev,
> > u32 attr, int channel,
> > const char **str)
> > {
> > - *str = channel ? "temp ambient" : "temp";
> > - return 0;
> > + if (channel < 0)
> > + return -EINVAL;
> > +
>
> This is unnecessary.
>
> > + switch (type) {
> > + case hwmon_temp:
> > + if (channel >= ARRAY_SIZE(ps_temp_label))
> > + return -EINVAL;
>
> As is this. We don't usually check boundaries like this for
> in-kernel APIs, and I personally would not want to have it
> introduced in the kernel more than necessary. This just increases
> kernel image size with zero benefit.
I'll amend other patches in the same spirit, then. I like the code size
argument.
Best Regards,
Michał Mirosław
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 2/8] power: supply: core: allow to constify property lists
2020-04-03 16:23 ` [PATCH v2 2/8] power: supply: core: allow to constify property lists Michał Mirosław
@ 2020-04-10 20:41 ` kbuild test robot
2020-04-10 22:14 ` kbuild test robot
1 sibling, 0 replies; 13+ messages in thread
From: kbuild test robot @ 2020-04-10 20:41 UTC (permalink / raw)
To: Michał Mirosław
Cc: kbuild-all, Andrey Smirnov, Guenter Roeck, Sebastian Reichel,
linux-kernel, linux-pm
[-- Attachment #1: Type: text/plain, Size: 18622 bytes --]
Hi "Michał,
I love your patch! Yet something to improve:
[auto build test ERROR on power-supply/for-next]
[also build test ERROR on hwmon/hwmon-next linus/master v5.6 next-20200410]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Micha-Miros-aw/power-supply-core-extensions-and-fixes/20200405-033553
base: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git for-next
config: nds32-randconfig-a001-20200410 (attached as .config)
compiler: nds32le-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=9.3.0 make.cross ARCH=nds32
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/power/supply/generic-adc-battery.c: In function 'gab_probe':
drivers/power/supply/generic-adc-battery.c:280:17: warning: passing argument 1 of 'memcpy' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
280 | memcpy(psy_desc->properties, gab_props, sizeof(gab_props));
| ~~~~~~~~^~~~~~~~~~~~
In file included from include/linux/string.h:20,
from include/linux/bitmap.h:9,
from include/linux/cpumask.h:12,
from include/linux/interrupt.h:8,
from drivers/power/supply/generic-adc-battery.c:12:
arch/nds32/include/asm/string.h:8:14: note: expected 'void *' but argument is of type 'const enum power_supply_property *'
8 | extern void *memcpy(void *, const void *, __kernel_size_t);
| ^~~~~~
>> drivers/power/supply/generic-adc-battery.c:302:35: error: assignment of read-only location '*(psy_desc->properties + (sizetype)((unsigned int)index++ * 4))'
302 | psy_desc->properties[index++] =
| ^
vim +302 drivers/power/supply/generic-adc-battery.c
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 237
c8afa6406e60ae drivers/power/generic-adc-battery.c Bill Pemberton 2012-11-19 238 static int gab_probe(struct platform_device *pdev)
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 239 {
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 240 struct gab *adc_bat;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 241 struct power_supply_desc *psy_desc;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 242 struct power_supply_config psy_cfg = {};
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 243 struct gab_platform_data *pdata = pdev->dev.platform_data;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 244 int ret = 0;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 245 int chan;
932d47448c3caa drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 246 int index = ARRAY_SIZE(gab_props);
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 247 bool any = false;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 248
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 249 adc_bat = devm_kzalloc(&pdev->dev, sizeof(*adc_bat), GFP_KERNEL);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 250 if (!adc_bat) {
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 251 dev_err(&pdev->dev, "failed to allocate memory\n");
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 252 return -ENOMEM;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 253 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 254
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 255 psy_cfg.drv_data = adc_bat;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 256 psy_desc = &adc_bat->psy_desc;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 257 psy_desc->name = pdata->battery_info.name;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 258
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 259 /* bootup default values for the battery */
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 260 adc_bat->cable_plugged = false;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 261 adc_bat->status = POWER_SUPPLY_STATUS_DISCHARGING;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 262 psy_desc->type = POWER_SUPPLY_TYPE_BATTERY;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 263 psy_desc->get_property = gab_get_property;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 264 psy_desc->external_power_changed = gab_ext_power_changed;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 265 adc_bat->pdata = pdata;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 266
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 267 /*
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 268 * copying the static properties and allocating extra memory for holding
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 269 * the extra configurable properties received from platform data.
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 270 */
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 271 psy_desc->properties = kcalloc(ARRAY_SIZE(gab_props) +
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 272 ARRAY_SIZE(gab_chan_name),
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 273 sizeof(*psy_desc->properties),
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 274 GFP_KERNEL);
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 275 if (!psy_desc->properties) {
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 276 ret = -ENOMEM;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 277 goto first_mem_fail;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 278 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 279
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 280 memcpy(psy_desc->properties, gab_props, sizeof(gab_props));
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 281
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 282 /*
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 283 * getting channel from iio and copying the battery properties
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 284 * based on the channel supported by consumer device.
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 285 */
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 286 for (chan = 0; chan < ARRAY_SIZE(gab_chan_name); chan++) {
5aa57f0a655276 drivers/power/generic-adc-battery.c Guenter Roeck 2013-02-04 287 adc_bat->channel[chan] = iio_channel_get(&pdev->dev,
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 288 gab_chan_name[chan]);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 289 if (IS_ERR(adc_bat->channel[chan])) {
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 290 ret = PTR_ERR(adc_bat->channel[chan]);
64d26f225fefe0 drivers/power/generic-adc-battery.c Dan Carpenter 2013-02-14 291 adc_bat->channel[chan] = NULL;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 292 } else {
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 293 /* copying properties for supported channels only */
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 294 int index2;
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 295
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 296 for (index2 = 0; index2 < index; index2++) {
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 297 if (psy_desc->properties[index2] ==
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 298 gab_dyn_props[chan])
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 299 break; /* already known */
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 300 }
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 301 if (index2 == index) /* really new */
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 @302 psy_desc->properties[index++] =
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 303 gab_dyn_props[chan];
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 304 any = true;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 305 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 306 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 307
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 308 /* none of the channels are supported so let's bail out */
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 309 if (!any) {
d211c6e82435df drivers/power/generic-adc-battery.c Axel Lin 2013-05-25 310 ret = -ENODEV;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 311 goto second_mem_fail;
d211c6e82435df drivers/power/generic-adc-battery.c Axel Lin 2013-05-25 312 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 313
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 314 /*
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 315 * Total number of properties is equal to static properties
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 316 * plus the dynamic properties.Some properties may not be set
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 317 * as come channels may be not be supported by the device.So
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 318 * we need to take care of that.
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 319 */
932d47448c3caa drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 320 psy_desc->num_properties = index;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 321
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 322 adc_bat->psy = power_supply_register(&pdev->dev, psy_desc, &psy_cfg);
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 323 if (IS_ERR(adc_bat->psy)) {
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 324 ret = PTR_ERR(adc_bat->psy);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 325 goto err_reg_fail;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 326 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 327
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 328 INIT_DELAYED_WORK(&adc_bat->bat_work, gab_work);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 329
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 330 if (gpio_is_valid(pdata->gpio_charge_finished)) {
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 331 int irq;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 332 ret = gpio_request(pdata->gpio_charge_finished, "charged");
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 333 if (ret)
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 334 goto gpio_req_fail;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 335
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 336 irq = gpio_to_irq(pdata->gpio_charge_finished);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 337 ret = request_any_context_irq(irq, gab_charged,
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 338 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 339 "battery charged", adc_bat);
a5af092245a339 drivers/power/generic-adc-battery.c Axel Lin 2012-11-16 340 if (ret < 0)
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 341 goto err_gpio;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 342 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 343
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 344 platform_set_drvdata(pdev, adc_bat);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 345
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 346 /* Schedule timer to check current status */
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 347 schedule_delayed_work(&adc_bat->bat_work,
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 348 msecs_to_jiffies(0));
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 349 return 0;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 350
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 351 err_gpio:
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 352 gpio_free(pdata->gpio_charge_finished);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 353 gpio_req_fail:
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 354 power_supply_unregister(adc_bat->psy);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 355 err_reg_fail:
64d26f225fefe0 drivers/power/generic-adc-battery.c Dan Carpenter 2013-02-14 356 for (chan = 0; chan < ARRAY_SIZE(gab_chan_name); chan++) {
64d26f225fefe0 drivers/power/generic-adc-battery.c Dan Carpenter 2013-02-14 357 if (adc_bat->channel[chan])
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 358 iio_channel_release(adc_bat->channel[chan]);
64d26f225fefe0 drivers/power/generic-adc-battery.c Dan Carpenter 2013-02-14 359 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 360 second_mem_fail:
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 361 kfree(psy_desc->properties);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 362 first_mem_fail:
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 363 return ret;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 364 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 365
:::::: The code at line 302 was first introduced by commit
:::::: a427503edaaed9b75ed9746a654cece7e93e60a8 power: generic-adc-battery: check for duplicate properties copied from iio channels
:::::: TO: H. Nikolaus Schaller <hns@goldelico.com>
:::::: CC: Sebastian Reichel <sre@kernel.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28059 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 2/8] power: supply: core: allow to constify property lists
2020-04-03 16:23 ` [PATCH v2 2/8] power: supply: core: allow to constify property lists Michał Mirosław
2020-04-10 20:41 ` kbuild test robot
@ 2020-04-10 22:14 ` kbuild test robot
1 sibling, 0 replies; 13+ messages in thread
From: kbuild test robot @ 2020-04-10 22:14 UTC (permalink / raw)
To: Michał Mirosław
Cc: kbuild-all, Andrey Smirnov, Guenter Roeck, Sebastian Reichel,
linux-kernel, linux-pm
[-- Attachment #1: Type: text/plain, Size: 18447 bytes --]
Hi "Michał,
I love your patch! Yet something to improve:
[auto build test ERROR on power-supply/for-next]
[also build test ERROR on hwmon/hwmon-next linus/master v5.6 next-20200410]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Micha-Miros-aw/power-supply-core-extensions-and-fixes/20200405-033553
base: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git for-next
config: x86_64-randconfig-a003-20200410 (attached as .config)
compiler: gcc-4.9 (Ubuntu 4.9.3-13ubuntu2) 4.9.3
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/power/supply/generic-adc-battery.c: In function 'gab_probe':
drivers/power/supply/generic-adc-battery.c:280:9: warning: passing argument 1 of 'memcpy' discards 'const' qualifier from pointer target type
memcpy(psy_desc->properties, gab_props, sizeof(gab_props));
^
In file included from arch/x86/include/asm/string.h:5:0,
from include/linux/string.h:20,
from include/linux/bitmap.h:9,
from include/linux/cpumask.h:12,
from include/linux/interrupt.h:8,
from drivers/power/supply/generic-adc-battery.c:12:
arch/x86/include/asm/string_64.h:14:14: note: expected 'void *' but argument is of type 'const enum power_supply_property *'
extern void *memcpy(void *to, const void *from, size_t len);
^
>> drivers/power/supply/generic-adc-battery.c:302:35: error: assignment of read-only location '*(psy_desc->properties + (sizetype)((long unsigned int)index++ * 4ul))'
psy_desc->properties[index++] =
^
vim +302 drivers/power/supply/generic-adc-battery.c
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 237
c8afa6406e60ae drivers/power/generic-adc-battery.c Bill Pemberton 2012-11-19 238 static int gab_probe(struct platform_device *pdev)
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 239 {
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 240 struct gab *adc_bat;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 241 struct power_supply_desc *psy_desc;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 242 struct power_supply_config psy_cfg = {};
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 243 struct gab_platform_data *pdata = pdev->dev.platform_data;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 244 int ret = 0;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 245 int chan;
932d47448c3caa drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 246 int index = ARRAY_SIZE(gab_props);
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 247 bool any = false;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 248
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 249 adc_bat = devm_kzalloc(&pdev->dev, sizeof(*adc_bat), GFP_KERNEL);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 250 if (!adc_bat) {
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 251 dev_err(&pdev->dev, "failed to allocate memory\n");
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 252 return -ENOMEM;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 253 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 254
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 255 psy_cfg.drv_data = adc_bat;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 256 psy_desc = &adc_bat->psy_desc;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 257 psy_desc->name = pdata->battery_info.name;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 258
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 259 /* bootup default values for the battery */
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 260 adc_bat->cable_plugged = false;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 261 adc_bat->status = POWER_SUPPLY_STATUS_DISCHARGING;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 262 psy_desc->type = POWER_SUPPLY_TYPE_BATTERY;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 263 psy_desc->get_property = gab_get_property;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 264 psy_desc->external_power_changed = gab_ext_power_changed;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 265 adc_bat->pdata = pdata;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 266
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 267 /*
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 268 * copying the static properties and allocating extra memory for holding
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 269 * the extra configurable properties received from platform data.
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 270 */
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 271 psy_desc->properties = kcalloc(ARRAY_SIZE(gab_props) +
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 272 ARRAY_SIZE(gab_chan_name),
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 273 sizeof(*psy_desc->properties),
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 274 GFP_KERNEL);
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 275 if (!psy_desc->properties) {
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 276 ret = -ENOMEM;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 277 goto first_mem_fail;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 278 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 279
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 280 memcpy(psy_desc->properties, gab_props, sizeof(gab_props));
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 281
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 282 /*
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 283 * getting channel from iio and copying the battery properties
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 284 * based on the channel supported by consumer device.
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 285 */
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 286 for (chan = 0; chan < ARRAY_SIZE(gab_chan_name); chan++) {
5aa57f0a655276 drivers/power/generic-adc-battery.c Guenter Roeck 2013-02-04 287 adc_bat->channel[chan] = iio_channel_get(&pdev->dev,
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 288 gab_chan_name[chan]);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 289 if (IS_ERR(adc_bat->channel[chan])) {
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 290 ret = PTR_ERR(adc_bat->channel[chan]);
64d26f225fefe0 drivers/power/generic-adc-battery.c Dan Carpenter 2013-02-14 291 adc_bat->channel[chan] = NULL;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 292 } else {
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 293 /* copying properties for supported channels only */
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 294 int index2;
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 295
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 296 for (index2 = 0; index2 < index; index2++) {
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 297 if (psy_desc->properties[index2] ==
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 298 gab_dyn_props[chan])
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 299 break; /* already known */
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 300 }
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 301 if (index2 == index) /* really new */
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 @302 psy_desc->properties[index++] =
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 303 gab_dyn_props[chan];
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 304 any = true;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 305 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 306 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 307
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 308 /* none of the channels are supported so let's bail out */
a427503edaaed9 drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 309 if (!any) {
d211c6e82435df drivers/power/generic-adc-battery.c Axel Lin 2013-05-25 310 ret = -ENODEV;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 311 goto second_mem_fail;
d211c6e82435df drivers/power/generic-adc-battery.c Axel Lin 2013-05-25 312 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 313
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 314 /*
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 315 * Total number of properties is equal to static properties
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 316 * plus the dynamic properties.Some properties may not be set
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 317 * as come channels may be not be supported by the device.So
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 318 * we need to take care of that.
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 319 */
932d47448c3caa drivers/power/supply/generic-adc-battery.c H. Nikolaus Schaller 2018-06-26 320 psy_desc->num_properties = index;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 321
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 322 adc_bat->psy = power_supply_register(&pdev->dev, psy_desc, &psy_cfg);
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 323 if (IS_ERR(adc_bat->psy)) {
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 324 ret = PTR_ERR(adc_bat->psy);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 325 goto err_reg_fail;
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 326 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 327
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 328 INIT_DELAYED_WORK(&adc_bat->bat_work, gab_work);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 329
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 330 if (gpio_is_valid(pdata->gpio_charge_finished)) {
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 331 int irq;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 332 ret = gpio_request(pdata->gpio_charge_finished, "charged");
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 333 if (ret)
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 334 goto gpio_req_fail;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 335
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 336 irq = gpio_to_irq(pdata->gpio_charge_finished);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 337 ret = request_any_context_irq(irq, gab_charged,
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 338 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 339 "battery charged", adc_bat);
a5af092245a339 drivers/power/generic-adc-battery.c Axel Lin 2012-11-16 340 if (ret < 0)
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 341 goto err_gpio;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 342 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 343
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 344 platform_set_drvdata(pdev, adc_bat);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 345
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 346 /* Schedule timer to check current status */
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 347 schedule_delayed_work(&adc_bat->bat_work,
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 348 msecs_to_jiffies(0));
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 349 return 0;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 350
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 351 err_gpio:
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 352 gpio_free(pdata->gpio_charge_finished);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 353 gpio_req_fail:
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 354 power_supply_unregister(adc_bat->psy);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 355 err_reg_fail:
64d26f225fefe0 drivers/power/generic-adc-battery.c Dan Carpenter 2013-02-14 356 for (chan = 0; chan < ARRAY_SIZE(gab_chan_name); chan++) {
64d26f225fefe0 drivers/power/generic-adc-battery.c Dan Carpenter 2013-02-14 357 if (adc_bat->channel[chan])
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 358 iio_channel_release(adc_bat->channel[chan]);
64d26f225fefe0 drivers/power/generic-adc-battery.c Dan Carpenter 2013-02-14 359 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 360 second_mem_fail:
297d716f6260cc drivers/power/generic-adc-battery.c Krzysztof Kozlowski 2015-03-12 361 kfree(psy_desc->properties);
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 362 first_mem_fail:
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 363 return ret;
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 364 }
e60fea794e6ecb drivers/power/generic-adc-battery.c anish kumar 2012-09-21 365
:::::: The code at line 302 was first introduced by commit
:::::: a427503edaaed9b75ed9746a654cece7e93e60a8 power: generic-adc-battery: check for duplicate properties copied from iio channels
:::::: TO: H. Nikolaus Schaller <hns@goldelico.com>
:::::: CC: Sebastian Reichel <sre@kernel.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 31811 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2020-04-10 22:15 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-03 16:23 [PATCH v2 0/8] power: supply: core: extensions and fixes Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 1/8] power: supply: core: reduce power_supply_show_usb_type() parameters Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 2/8] power: supply: core: allow to constify property lists Michał Mirosław
2020-04-10 20:41 ` kbuild test robot
2020-04-10 22:14 ` kbuild test robot
2020-04-03 16:23 ` [PATCH v2 3/8] power: supply: core: fix HWMON temperature labels Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 5/8] power: supply: core: hide unused HWMON labels Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 4/8] power: supply: core: tabularize HWMON temperature labels Michał Mirosław
2020-04-03 16:47 ` Guenter Roeck
2020-04-03 16:56 ` Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 7/8] power: supply: core: add output voltage measurements Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 6/8] power: supply: core: add input voltage/current measurements Michał Mirosław
2020-04-03 16:23 ` [PATCH v2 8/8] power: supply: core: document measurement points Michał Mirosław
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).