* Re: [PATCH 3/7] power: supply: core: fix HWMON temperature labels
2020-04-02 14:57 ` [PATCH 3/7] power: supply: core: fix HWMON temperature labels Michał Mirosław
@ 2020-04-02 14:52 ` Guenter Roeck
2020-04-02 15:00 ` Michał Mirosław
0 siblings, 1 reply; 14+ messages in thread
From: Guenter Roeck @ 2020-04-02 14:52 UTC (permalink / raw)
To: Michał Mirosław,
Sebastian Reichel (maintainer:POWER SUPPLY CLASS/SUBSYSTEM and
DRIVERS,blamed_fixes:1/1=100%),
Andrey Smirnov (blamed_fixes:1/1=100%)
Cc: open list:POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS, open list
On 4/2/20 7:46 AM, Michał Mirosław wrote:
> tempX_label files are swapped compared to what
> power_supply_hwmon_temp_to_property() uses. Make them match.
> While at it, make room for labeling other channels.
>
> Fixes: e67d4dfc9ff1 ("power: supply: Add HWMON compatibility layer")
> Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> ---
> drivers/power/supply/power_supply_hwmon.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
> index 75cf861ba492..83318a21fb52 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,7 +149,14 @@ static int power_supply_hwmon_read_string(struct device *dev,
> u32 attr, int channel,
> const char **str)
> {
> - *str = channel ? "temp" : "temp ambient";
> + switch (type) {
> + case hwmon_temp:
> + *str = ps_temp_label[channel];
> + break;
> + default:
> + break;
That returns "no error" without setting *str, which is really asking for trouble.
Guenter
> + }
> +
> return 0;
> }
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/7] power: supply: core: reduce power_supply_show_usb_type() parameters
2020-04-02 14:57 [PATCH 0/7] power: supply: core: extensions and fixes Michał Mirosław
@ 2020-04-02 14:57 ` Michał Mirosław
2020-04-02 14:57 ` [PATCH 2/7] power: supply: core: allow to constify property lists Michał Mirosław
` (5 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Michał Mirosław @ 2020-04-02 14:57 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] 14+ messages in thread
* [PATCH 0/7] power: supply: core: extensions and fixes
@ 2020-04-02 14:57 Michał Mirosław
2020-04-02 14:57 ` [PATCH 1/7] power: supply: core: reduce power_supply_show_usb_type() parameters Michał Mirosław
` (6 more replies)
0 siblings, 7 replies; 14+ messages in thread
From: Michał Mirosław @ 2020-04-02 14:57 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. make HWMON temp* labels match measurements
4. filter out unused HWMON labels
5-7. extend core to support input/battery/output supply point measurements
A patchset extending bq25890 driver to use the new infrastructure will
follow.
Michał Mirosław (7):
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: 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 | 189 ++++++++++++++++++++-
drivers/power/supply/power_supply_sysfs.c | 15 +-
include/linux/power_supply.h | 9 +-
4 files changed, 202 insertions(+), 17 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 3/7] power: supply: core: fix HWMON temperature labels
2020-04-02 14:57 [PATCH 0/7] power: supply: core: extensions and fixes Michał Mirosław
2020-04-02 14:57 ` [PATCH 1/7] power: supply: core: reduce power_supply_show_usb_type() parameters Michał Mirosław
2020-04-02 14:57 ` [PATCH 2/7] power: supply: core: allow to constify property lists Michał Mirosław
@ 2020-04-02 14:57 ` Michał Mirosław
2020-04-02 14:52 ` Guenter Roeck
2020-04-02 14:57 ` [PATCH 4/7] power: supply: core: hide unused HWMON labels Michał Mirosław
` (3 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Michał Mirosław @ 2020-04-02 14:57 UTC (permalink / raw)
To: Sebastian Reichel, Andrey Smirnov, Guenter Roeck; +Cc: linux-pm, linux-kernel
tempX_label files are swapped compared to what
power_supply_hwmon_temp_to_property() uses. Make them match.
While at it, make room for labeling other channels.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
drivers/power/supply/power_supply_hwmon.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
index 75cf861ba492..83318a21fb52 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,7 +149,14 @@ static int power_supply_hwmon_read_string(struct device *dev,
u32 attr, int channel,
const char **str)
{
- *str = channel ? "temp" : "temp ambient";
+ switch (type) {
+ case hwmon_temp:
+ *str = ps_temp_label[channel];
+ break;
+ default:
+ break;
+ }
+
return 0;
}
--
2.20.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/7] power: supply: core: allow to constify property lists
2020-04-02 14:57 [PATCH 0/7] power: supply: core: extensions and fixes Michał Mirosław
2020-04-02 14:57 ` [PATCH 1/7] power: supply: core: reduce power_supply_show_usb_type() parameters Michał Mirosław
@ 2020-04-02 14:57 ` Michał Mirosław
2020-04-03 19:16 ` kbuild test robot
2020-04-03 19:52 ` kbuild test robot
2020-04-02 14:57 ` [PATCH 3/7] power: supply: core: fix HWMON temperature labels Michał Mirosław
` (4 subsequent siblings)
6 siblings, 2 replies; 14+ messages in thread
From: Michał Mirosław @ 2020-04-02 14:57 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] 14+ messages in thread
* [PATCH 5/7] power: supply: core: add input voltage/current measurements
2020-04-02 14:57 [PATCH 0/7] power: supply: core: extensions and fixes Michał Mirosław
` (3 preceding siblings ...)
2020-04-02 14:57 ` [PATCH 4/7] power: supply: core: hide unused HWMON labels Michał Mirosław
@ 2020-04-02 14:57 ` Michał Mirosław
2020-04-02 14:57 ` [PATCH 6/7] power: supply: core: add output voltage measurements Michał Mirosław
2020-04-02 14:57 ` [PATCH 7/7] power: supply: core: document measurement points Michał Mirosław
6 siblings, 0 replies; 14+ messages in thread
From: Michał Mirosław @ 2020-04-02 14:57 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>
---
drivers/power/supply/power_supply_hwmon.c | 107 +++++++++++++++++++++-
drivers/power/supply/power_supply_sysfs.c | 2 +
include/linux/power_supply.h | 2 +
3 files changed, 106 insertions(+), 5 deletions(-)
diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
index 118d73a2ab4a..c638750e0a18 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,
@@ -187,6 +264,11 @@ static int power_supply_hwmon_read_string(struct device *dev,
const char **str)
{
switch (type) {
+ case hwmon_in:
+ case hwmon_curr:
+ *str = ps_input_label[channel];
+ break;
+
case hwmon_temp:
*str = ps_temp_label[channel];
break;
@@ -304,15 +386,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
};
@@ -377,6 +470,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] 14+ messages in thread
* [PATCH 4/7] power: supply: core: hide unused HWMON labels
2020-04-02 14:57 [PATCH 0/7] power: supply: core: extensions and fixes Michał Mirosław
` (2 preceding siblings ...)
2020-04-02 14:57 ` [PATCH 3/7] power: supply: core: fix HWMON temperature labels Michał Mirosław
@ 2020-04-02 14:57 ` Michał Mirosław
2020-04-02 14:57 ` [PATCH 5/7] power: supply: core: add input voltage/current measurements Michał Mirosław
` (2 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Michał Mirosław @ 2020-04-02 14:57 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 83318a21fb52..118d73a2ab4a 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] 14+ messages in thread
* [PATCH 7/7] power: supply: core: document measurement points
2020-04-02 14:57 [PATCH 0/7] power: supply: core: extensions and fixes Michał Mirosław
` (5 preceding siblings ...)
2020-04-02 14:57 ` [PATCH 6/7] power: supply: core: add output voltage measurements Michał Mirosław
@ 2020-04-02 14:57 ` Michał Mirosław
6 siblings, 0 replies; 14+ messages in thread
From: Michał Mirosław @ 2020-04-02 14:57 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] 14+ messages in thread
* [PATCH 6/7] power: supply: core: add output voltage measurements
2020-04-02 14:57 [PATCH 0/7] power: supply: core: extensions and fixes Michał Mirosław
` (4 preceding siblings ...)
2020-04-02 14:57 ` [PATCH 5/7] power: supply: core: add input voltage/current measurements Michał Mirosław
@ 2020-04-02 14:57 ` Michał Mirosław
2020-04-02 14:57 ` [PATCH 7/7] power: supply: core: document measurement points Michał Mirosław
6 siblings, 0 replies; 14+ messages in thread
From: Michał Mirosław @ 2020-04-02 14:57 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 c638750e0a18..781a265bd061 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[] = {
@@ -404,6 +421,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
@@ -474,6 +496,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] 14+ messages in thread
* Re: [PATCH 3/7] power: supply: core: fix HWMON temperature labels
2020-04-02 14:52 ` Guenter Roeck
@ 2020-04-02 15:00 ` Michał Mirosław
2020-04-02 18:29 ` Guenter Roeck
0 siblings, 1 reply; 14+ messages in thread
From: Michał Mirosław @ 2020-04-02 15:00 UTC (permalink / raw)
To: Guenter Roeck
Cc: Sebastian Reichel (maintainer:POWER SUPPLY CLASS/SUBSYSTEM and
DRIVERS ,blamed_fixes:1/1=100%),
Andrey Smirnov (blamed_fixes:1/1=100%),
open list:POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS, open list
On Thu, Apr 02, 2020 at 07:52:19AM -0700, Guenter Roeck wrote:
> On 4/2/20 7:46 AM, Michał Mirosław wrote:
> > tempX_label files are swapped compared to what
> > power_supply_hwmon_temp_to_property() uses. Make them match.
> > While at it, make room for labeling other channels.
> >
> > Fixes: e67d4dfc9ff1 ("power: supply: Add HWMON compatibility layer")
> > Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> > ---
> > drivers/power/supply/power_supply_hwmon.c | 14 +++++++++++++-
> > 1 file changed, 13 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
> > index 75cf861ba492..83318a21fb52 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,7 +149,14 @@ static int power_supply_hwmon_read_string(struct device *dev,
> > u32 attr, int channel,
> > const char **str)
> > {
> > - *str = channel ? "temp" : "temp ambient";
> > + switch (type) {
> > + case hwmon_temp:
> > + *str = ps_temp_label[channel];
> > + break;
> > + default:
> > + break;
>
> That returns "no error" without setting *str, which is really asking for trouble.
This is carried over from earlier version. No bug though, but I'll add a
patch while I'm at it.
Best Regards
Michał Mirosław
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/7] power: supply: core: fix HWMON temperature labels
2020-04-02 15:00 ` Michał Mirosław
@ 2020-04-02 18:29 ` Guenter Roeck
2020-04-03 15:53 ` Michał Mirosław
0 siblings, 1 reply; 14+ messages in thread
From: Guenter Roeck @ 2020-04-02 18:29 UTC (permalink / raw)
To: Michał Mirosław
Cc: Sebastian Reichel (maintainer:POWER SUPPLY CLASS/SUBSYSTEM and
DRIVERS,blamed_fixes:1/1=100%),
Andrey Smirnov (blamed_fixes:1/1=100%),
open list:POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS, open list
On 4/2/20 8:00 AM, Michał Mirosław wrote:
> On Thu, Apr 02, 2020 at 07:52:19AM -0700, Guenter Roeck wrote:
>> On 4/2/20 7:46 AM, Michał Mirosław wrote:
>>> tempX_label files are swapped compared to what
>>> power_supply_hwmon_temp_to_property() uses. Make them match.
>>> While at it, make room for labeling other channels.
>>>
>>> Fixes: e67d4dfc9ff1 ("power: supply: Add HWMON compatibility layer")
>>> Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
>>> ---
>>> drivers/power/supply/power_supply_hwmon.c | 14 +++++++++++++-
>>> 1 file changed, 13 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
>>> index 75cf861ba492..83318a21fb52 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,7 +149,14 @@ static int power_supply_hwmon_read_string(struct device *dev,
>>> u32 attr, int channel,
>>> const char **str)
>>> {
>>> - *str = channel ? "temp" : "temp ambient";
>>> + switch (type) {
>>> + case hwmon_temp:
>>> + *str = ps_temp_label[channel];
>>> + break;
>>> + default:
>>> + break;
>>
>> That returns "no error" without setting *str, which is really asking for trouble.
>
> This is carried over from earlier version. No bug though, but I'll add a
> patch while I'm at it.
>
This is incorrect. The previous version does not check the type and always sets *str.
- *str = channel ? "temp" : "temp ambient";
Guenter
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/7] power: supply: core: fix HWMON temperature labels
2020-04-02 18:29 ` Guenter Roeck
@ 2020-04-03 15:53 ` Michał Mirosław
0 siblings, 0 replies; 14+ messages in thread
From: Michał Mirosław @ 2020-04-03 15:53 UTC (permalink / raw)
To: Guenter Roeck
Cc: Sebastian Reichel (maintainer:POWER SUPPLY CLASS/SUBSYSTEM and
DRIVERS ,blamed_fixes:1/1=100%),
Andrey Smirnov (blamed_fixes:1/1=100%),
open list:POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS, open list
On Thu, Apr 02, 2020 at 11:29:32AM -0700, Guenter Roeck wrote:
> On 4/2/20 8:00 AM, Michał Mirosław wrote:
> > On Thu, Apr 02, 2020 at 07:52:19AM -0700, Guenter Roeck wrote:
> >> On 4/2/20 7:46 AM, Michał Mirosław wrote:
> >>> tempX_label files are swapped compared to what
> >>> power_supply_hwmon_temp_to_property() uses. Make them match.
> >>> While at it, make room for labeling other channels.
> >>>
> >>> Fixes: e67d4dfc9ff1 ("power: supply: Add HWMON compatibility layer")
> >>> Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> >>> ---
> >>> drivers/power/supply/power_supply_hwmon.c | 14 +++++++++++++-
> >>> 1 file changed, 13 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c
> >>> index 75cf861ba492..83318a21fb52 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,7 +149,14 @@ static int power_supply_hwmon_read_string(struct device *dev,
> >>> u32 attr, int channel,
> >>> const char **str)
> >>> {
> >>> - *str = channel ? "temp" : "temp ambient";
> >>> + switch (type) {
> >>> + case hwmon_temp:
> >>> + *str = ps_temp_label[channel];
> >>> + break;
> >>> + default:
> >>> + break;
> >>
> >> That returns "no error" without setting *str, which is really asking for trouble.
> >
> > This is carried over from earlier version. No bug though, but I'll add a
> > patch while I'm at it.
> >
>
> This is incorrect. The previous version does not check the type and always sets *str.
>
> - *str = channel ? "temp" : "temp ambient";
The function is called only for channels that have HWMON_T_LABEL set.
This is extended in later patches, though, so the type is going to be
required then. I'll split the addition so its more clear.
Best Regards,
Michał Mirosław
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/7] power: supply: core: allow to constify property lists
2020-04-02 14:57 ` [PATCH 2/7] power: supply: core: allow to constify property lists Michał Mirosław
@ 2020-04-03 19:16 ` kbuild test robot
2020-04-03 19:52 ` kbuild test robot
1 sibling, 0 replies; 14+ messages in thread
From: kbuild test robot @ 2020-04-03 19:16 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: 18590 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-20200403]
[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/20200404-004822
base: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git for-next
config: s390-randconfig-a001-20200403 (attached as .config)
compiler: s390-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=s390
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All error/warnings (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/bitmap.h:9,
from include/linux/cpumask.h:12,
from include/linux/interrupt.h:8,
from drivers/power/supply/generic-adc-battery.c:12:
include/linux/string.h:369:37: note: expected 'void *' but argument is of type 'const enum power_supply_property *'
369 | __FORTIFY_INLINE void *memcpy(void *p, const void *q, __kernel_size_t size)
| ~~~~~~^
>> drivers/power/supply/generic-adc-battery.c:302:35: error: assignment of read-only location '*(psy_desc->properties + (sizetype)((long 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: 23579 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/7] power: supply: core: allow to constify property lists
2020-04-02 14:57 ` [PATCH 2/7] power: supply: core: allow to constify property lists Michał Mirosław
2020-04-03 19:16 ` kbuild test robot
@ 2020-04-03 19:52 ` kbuild test robot
1 sibling, 0 replies; 14+ messages in thread
From: kbuild test robot @ 2020-04-03 19:52 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: 21426 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-20200403]
[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/20200404-004822
base: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git for-next
config: sh-allmodconfig (attached as .config)
compiler: sh4-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=sh
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
All error/warnings (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 arch/sh/include/asm/string.h:3,
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/sh/include/asm/string_32.h:119:14: note: expected 'void *' but argument is of type 'const enum power_supply_property *'
119 | extern void *memcpy(void *__to, __const__ void *__from, size_t __n);
| ^~~~~~
>> 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++] =
| ^
--
drivers/power/supply/charger-manager.c: In function 'cm_init_thermal_data':
>> drivers/power/supply/charger-manager.c:1436:72: error: assignment of read-only location '*(cm->charger_psy_desc.properties + (sizetype)(cm->charger_psy_desc.num_properties * 4))'
1436 | cm->charger_psy_desc.properties[cm->charger_psy_desc.num_properties] =
| ^
drivers/power/supply/charger-manager.c:1449:72: error: assignment of read-only location '*(cm->charger_psy_desc.properties + (sizetype)(cm->charger_psy_desc.num_properties * 4))'
1449 | cm->charger_psy_desc.properties[cm->charger_psy_desc.num_properties] =
| ^
drivers/power/supply/charger-manager.c: In function 'charger_manager_probe':
>> drivers/power/supply/charger-manager.c:1728:29: warning: passing argument 1 of 'memcpy' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
1728 | memcpy(cm->charger_psy_desc.properties, default_charger_props,
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
In file included from arch/sh/include/asm/string.h:3,
from include/linux/string.h:20,
from include/linux/bitmap.h:9,
from include/linux/cpumask.h:12,
from include/linux/mm_types_task.h:14,
from include/linux/mm_types.h:5,
from include/asm-generic/fixmap.h:19,
from arch/sh/include/asm/fixmap.h:96,
from arch/sh/include/asm/pgtable.h:22,
from arch/sh/include/asm/io.h:20,
from include/linux/io.h:13,
from drivers/power/supply/charger-manager.c:15:
arch/sh/include/asm/string_32.h:119:14: note: expected 'void *' but argument is of type 'const enum power_supply_property *'
119 | extern void *memcpy(void *__to, __const__ void *__from, size_t __n);
| ^~~~~~
drivers/power/supply/charger-manager.c:1742:72: error: assignment of read-only location '*(cm->charger_psy_desc.properties + (sizetype)(cm->charger_psy_desc.num_properties * 4))'
1742 | cm->charger_psy_desc.properties[cm->charger_psy_desc.num_properties] =
| ^
drivers/power/supply/charger-manager.c:1749:72: error: assignment of read-only location '*(cm->charger_psy_desc.properties + (sizetype)(cm->charger_psy_desc.num_properties * 4))'
1749 | cm->charger_psy_desc.properties[cm->charger_psy_desc.num_properties] =
| ^
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: 53896 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2020-04-03 19:52 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-02 14:57 [PATCH 0/7] power: supply: core: extensions and fixes Michał Mirosław
2020-04-02 14:57 ` [PATCH 1/7] power: supply: core: reduce power_supply_show_usb_type() parameters Michał Mirosław
2020-04-02 14:57 ` [PATCH 2/7] power: supply: core: allow to constify property lists Michał Mirosław
2020-04-03 19:16 ` kbuild test robot
2020-04-03 19:52 ` kbuild test robot
2020-04-02 14:57 ` [PATCH 3/7] power: supply: core: fix HWMON temperature labels Michał Mirosław
2020-04-02 14:52 ` Guenter Roeck
2020-04-02 15:00 ` Michał Mirosław
2020-04-02 18:29 ` Guenter Roeck
2020-04-03 15:53 ` Michał Mirosław
2020-04-02 14:57 ` [PATCH 4/7] power: supply: core: hide unused HWMON labels Michał Mirosław
2020-04-02 14:57 ` [PATCH 5/7] power: supply: core: add input voltage/current measurements Michał Mirosław
2020-04-02 14:57 ` [PATCH 6/7] power: supply: core: add output voltage measurements Michał Mirosław
2020-04-02 14:57 ` [PATCH 7/7] 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).