* [PATCH v3 0/2] HWMON compatibility layer for power supplies @ 2019-06-05 7:23 Andrey Smirnov 2019-06-05 7:23 ` [PATCH v3 1/2] power: supply: Add HWMON compatibility layer Andrey Smirnov ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Andrey Smirnov @ 2019-06-05 7:23 UTC (permalink / raw) To: linux-pm Cc: Andrey Smirnov, Chris Healy, Cory Tusar, Lucas Stach, Fabio Estevam, Guenter Roeck, Sebastian Reichel, linux-kernel Everyone: This small series contains the code I wrote to expose various power supply sensors via HWMON layer in order to be able to access all of the sensors in the system with libsensors. Changes since [v2]: - Added missing static specified to devm_power_supply_add_hwmon_sysfs() - Collected Reviewed-by from Guenter Changes since [v1]: - All multiplications converted to use check_mul_overflow() - All divisions converted to use DIV_ROUND_CLOSEST() - Places that were ignoring errors now don't - Alphabetized include list [v2] lkml.kernel.org/r/20190531011620.9383-1-andrew.smirnov@gmail.com [v1] lkml.kernel.org/r/20190529071112.16849-1-andrew.smirnov@gmail.com Thanks, Andrey Smirnov Andrey Smirnov (2): power: supply: Add HWMON compatibility layer power: supply: ucs1002: Add HWMON interface drivers/power/supply/Kconfig | 14 + drivers/power/supply/Makefile | 1 + drivers/power/supply/power_supply_hwmon.c | 349 ++++++++++++++++++++++ drivers/power/supply/ucs1002_power.c | 6 + include/linux/power_supply.h | 9 + 5 files changed, 379 insertions(+) create mode 100644 drivers/power/supply/power_supply_hwmon.c -- 2.21.0 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 1/2] power: supply: Add HWMON compatibility layer 2019-06-05 7:23 [PATCH v3 0/2] HWMON compatibility layer for power supplies Andrey Smirnov @ 2019-06-05 7:23 ` Andrey Smirnov 2019-06-05 7:23 ` [PATCH v3 2/2] power: supply: ucs1002: Add HWMON interface Andrey Smirnov 2019-06-05 21:35 ` [PATCH v3 0/2] HWMON compatibility layer for power supplies Chris Healy 2 siblings, 0 replies; 9+ messages in thread From: Andrey Smirnov @ 2019-06-05 7:23 UTC (permalink / raw) To: linux-pm Cc: Andrey Smirnov, Guenter Roeck, Chris Healy, Cory Tusar, Lucas Stach, Fabio Estevam, Sebastian Reichel, linux-kernel Add code implementing HWMON adapter/compatibility layer to allow expositing various sensors present on power supply devices via HWMON subsystem. This is done in order to allow userspace to use single ABI/library(libsensors) to access/manipulate all of the sensors of the system. Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Cc: Chris Healy <cphealy@gmail.com> Cc: Cory Tusar <cory.tusar@zii.aero> Cc: Lucas Stach <l.stach@pengutronix.de> Cc: Fabio Estevam <fabio.estevam@nxp.com> Cc: Guenter Roeck <linux@roeck-us.net> Cc: Sebastian Reichel <sre@kernel.org> Cc: linux-kernel@vger.kernel.org Cc: linux-pm@vger.kernel.org --- drivers/power/supply/Kconfig | 14 + drivers/power/supply/Makefile | 1 + drivers/power/supply/power_supply_hwmon.c | 349 ++++++++++++++++++++++ include/linux/power_supply.h | 9 + 4 files changed, 373 insertions(+) create mode 100644 drivers/power/supply/power_supply_hwmon.c diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig index c614c8a196f3..0550cedb53c9 100644 --- a/drivers/power/supply/Kconfig +++ b/drivers/power/supply/Kconfig @@ -14,6 +14,20 @@ config POWER_SUPPLY_DEBUG Say Y here to enable debugging messages for power supply class and drivers. +config POWER_SUPPLY_HWMON + bool + prompt "Expose power supply sensors as hwmon device" + depends on HWMON=y || HWMON=POWER_SUPPLY + default y + help + This options enables API that allows sensors found on a + power supply device (current, voltage, temperature) to be + exposed as a hwmon device. + + Say 'Y' here if you want power supplies to + have hwmon sysfs interface too. + + config PDA_POWER tristate "Generic PDA/phone power driver" depends on !S390 diff --git a/drivers/power/supply/Makefile b/drivers/power/supply/Makefile index c56803a9e4fe..0a87cfe49b21 100644 --- a/drivers/power/supply/Makefile +++ b/drivers/power/supply/Makefile @@ -6,6 +6,7 @@ power_supply-$(CONFIG_SYSFS) += power_supply_sysfs.o power_supply-$(CONFIG_LEDS_TRIGGERS) += power_supply_leds.o obj-$(CONFIG_POWER_SUPPLY) += power_supply.o +obj-$(CONFIG_POWER_SUPPLY_HWMON) += power_supply_hwmon.o obj-$(CONFIG_GENERIC_ADC_BATTERY) += generic-adc-battery.o obj-$(CONFIG_PDA_POWER) += pda_power.o diff --git a/drivers/power/supply/power_supply_hwmon.c b/drivers/power/supply/power_supply_hwmon.c new file mode 100644 index 000000000000..3451b997367d --- /dev/null +++ b/drivers/power/supply/power_supply_hwmon.c @@ -0,0 +1,349 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * power_supply_hwmon.c - power supply hwmon support. + */ + +#include <linux/err.h> +#include <linux/hwmon.h> +#include <linux/power_supply.h> +#include <linux/slab.h> + +struct power_supply_hwmon { + struct power_supply *psy; + unsigned long *props; +}; + +static int power_supply_hwmon_in_to_property(u32 attr) +{ + switch (attr) { + case hwmon_in_average: + return POWER_SUPPLY_PROP_VOLTAGE_AVG; + case hwmon_in_min: + return POWER_SUPPLY_PROP_VOLTAGE_MIN; + case hwmon_in_max: + return POWER_SUPPLY_PROP_VOLTAGE_MAX; + case hwmon_in_input: + return POWER_SUPPLY_PROP_VOLTAGE_NOW; + default: + return -EINVAL; + } +} + +static int power_supply_hwmon_curr_to_property(u32 attr) +{ + switch (attr) { + case hwmon_curr_average: + return POWER_SUPPLY_PROP_CURRENT_AVG; + case hwmon_curr_max: + return POWER_SUPPLY_PROP_CURRENT_MAX; + case hwmon_curr_input: + return POWER_SUPPLY_PROP_CURRENT_NOW; + default: + return -EINVAL; + } +} + +static int power_supply_hwmon_temp_to_property(u32 attr, int channel) +{ + if (channel) { + switch (attr) { + case hwmon_temp_input: + return POWER_SUPPLY_PROP_TEMP_AMBIENT; + case hwmon_temp_min_alarm: + return POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN; + case hwmon_temp_max_alarm: + return POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX; + default: + break; + } + } else { + switch (attr) { + case hwmon_temp_input: + return POWER_SUPPLY_PROP_TEMP; + case hwmon_temp_max: + return POWER_SUPPLY_PROP_TEMP_MAX; + case hwmon_temp_min: + return POWER_SUPPLY_PROP_TEMP_MIN; + case hwmon_temp_min_alarm: + return POWER_SUPPLY_PROP_TEMP_ALERT_MIN; + case hwmon_temp_max_alarm: + return POWER_SUPPLY_PROP_TEMP_ALERT_MAX; + default: + break; + } + } + + return -EINVAL; +} + +static int +power_supply_hwmon_to_property(enum hwmon_sensor_types type, + u32 attr, int channel) +{ + switch (type) { + case hwmon_in: + return power_supply_hwmon_in_to_property(attr); + case hwmon_curr: + return power_supply_hwmon_curr_to_property(attr); + case hwmon_temp: + return power_supply_hwmon_temp_to_property(attr, channel); + default: + return -EINVAL; + } +} + +static bool power_supply_hwmon_is_a_label(enum hwmon_sensor_types type, + u32 attr) +{ + return type == hwmon_temp && attr == hwmon_temp_label; +} + +static bool power_supply_hwmon_is_writable(enum hwmon_sensor_types type, + u32 attr) +{ + switch (type) { + case hwmon_in: + return attr == hwmon_in_min || + attr == hwmon_in_max; + case hwmon_curr: + return attr == hwmon_curr_max; + case hwmon_temp: + return attr == hwmon_temp_max || + attr == hwmon_temp_min || + attr == hwmon_temp_min_alarm || + attr == hwmon_temp_max_alarm; + default: + return false; + } +} + +static umode_t power_supply_hwmon_is_visible(const void *data, + enum hwmon_sensor_types type, + u32 attr, int channel) +{ + const struct power_supply_hwmon *psyhw = data; + int prop; + + + if (power_supply_hwmon_is_a_label(type, attr)) + return 0444; + + prop = power_supply_hwmon_to_property(type, attr, channel); + if (prop < 0 || !test_bit(prop, psyhw->props)) + return 0; + + if (power_supply_property_is_writeable(psyhw->psy, prop) > 0 && + power_supply_hwmon_is_writable(type, attr)) + return 0644; + + return 0444; +} + +static int power_supply_hwmon_read_string(struct device *dev, + enum hwmon_sensor_types type, + u32 attr, int channel, + const char **str) +{ + *str = channel ? "temp" : "temp ambient"; + return 0; +} + +static int +power_supply_hwmon_read(struct device *dev, enum hwmon_sensor_types type, + u32 attr, int channel, long *val) +{ + struct power_supply_hwmon *psyhw = dev_get_drvdata(dev); + struct power_supply *psy = psyhw->psy; + union power_supply_propval pspval; + int ret, prop; + + prop = power_supply_hwmon_to_property(type, attr, channel); + if (prop < 0) + return prop; + + ret = power_supply_get_property(psy, prop, &pspval); + if (ret) + return ret; + + switch (type) { + /* + * Both voltage and current is reported in units of + * microvolts/microamps, so we need to adjust it to + * milliamps(volts) + */ + case hwmon_curr: + case hwmon_in: + pspval.intval = DIV_ROUND_CLOSEST(pspval.intval, 1000); + break; + /* + * Temp needs to be converted from 1/10 C to milli-C + */ + case hwmon_temp: + if (check_mul_overflow(pspval.intval, 100, + &pspval.intval)) + return -EOVERFLOW; + break; + default: + return -EINVAL; + } + + *val = pspval.intval; + + return 0; +} + +static int +power_supply_hwmon_write(struct device *dev, enum hwmon_sensor_types type, + u32 attr, int channel, long val) +{ + struct power_supply_hwmon *psyhw = dev_get_drvdata(dev); + struct power_supply *psy = psyhw->psy; + union power_supply_propval pspval; + int prop; + + prop = power_supply_hwmon_to_property(type, attr, channel); + if (prop < 0) + return prop; + + pspval.intval = val; + + switch (type) { + /* + * Both voltage and current is reported in units of + * microvolts/microamps, so we need to adjust it to + * milliamps(volts) + */ + case hwmon_curr: + case hwmon_in: + if (check_mul_overflow(pspval.intval, 1000, + &pspval.intval)) + return -EOVERFLOW; + break; + /* + * Temp needs to be converted from 1/10 C to milli-C + */ + case hwmon_temp: + pspval.intval = DIV_ROUND_CLOSEST(pspval.intval, 100); + break; + default: + return -EINVAL; + } + + return power_supply_set_property(psy, prop, &pspval); +} + +static const struct hwmon_ops power_supply_hwmon_ops = { + .is_visible = power_supply_hwmon_is_visible, + .read = power_supply_hwmon_read, + .write = power_supply_hwmon_write, + .read_string = power_supply_hwmon_read_string, +}; + +static const struct hwmon_channel_info *power_supply_hwmon_info[] = { + HWMON_CHANNEL_INFO(temp, + HWMON_T_LABEL | + HWMON_T_INPUT | + HWMON_T_MAX | + HWMON_T_MIN | + HWMON_T_MIN_ALARM | + HWMON_T_MIN_ALARM, + + HWMON_T_LABEL | + HWMON_T_INPUT | + HWMON_T_MIN_ALARM | + HWMON_T_LABEL | + HWMON_T_MAX_ALARM), + + HWMON_CHANNEL_INFO(curr, + HWMON_C_AVERAGE | + HWMON_C_MAX | + HWMON_C_INPUT), + + HWMON_CHANNEL_INFO(in, + HWMON_I_AVERAGE | + HWMON_I_MIN | + HWMON_I_MAX | + HWMON_I_INPUT), + NULL +}; + +static const struct hwmon_chip_info power_supply_hwmon_chip_info = { + .ops = &power_supply_hwmon_ops, + .info = power_supply_hwmon_info, +}; + +static void power_supply_hwmon_bitmap_free(void *data) +{ + bitmap_free(data); +} + +int devm_power_supply_add_hwmon_sysfs(struct power_supply *psy) +{ + const struct power_supply_desc *desc = psy->desc; + struct power_supply_hwmon *psyhw; + struct device *dev = &psy->dev; + struct device *hwmon; + int ret, i; + + if (!devres_open_group(dev, NULL, GFP_KERNEL)) + return -ENOMEM; + + psyhw = devm_kzalloc(dev, sizeof(*psyhw), GFP_KERNEL); + if (!psyhw) { + ret = -ENOMEM; + goto error; + } + + psyhw->psy = psy; + psyhw->props = bitmap_zalloc(POWER_SUPPLY_PROP_TIME_TO_FULL_AVG + 1, + GFP_KERNEL); + if (!psyhw->props) { + ret = -ENOMEM; + goto error; + } + + ret = devm_add_action(dev, power_supply_hwmon_bitmap_free, + psyhw->props); + if (ret) + goto error; + + for (i = 0; i < desc->num_properties; i++) { + const enum power_supply_property prop = desc->properties[i]; + + switch (prop) { + case POWER_SUPPLY_PROP_CURRENT_AVG: + case POWER_SUPPLY_PROP_CURRENT_MAX: + case POWER_SUPPLY_PROP_CURRENT_NOW: + case POWER_SUPPLY_PROP_TEMP: + case POWER_SUPPLY_PROP_TEMP_MAX: + case POWER_SUPPLY_PROP_TEMP_MIN: + case POWER_SUPPLY_PROP_TEMP_ALERT_MIN: + case POWER_SUPPLY_PROP_TEMP_ALERT_MAX: + case POWER_SUPPLY_PROP_TEMP_AMBIENT: + case POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN: + case POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX: + case POWER_SUPPLY_PROP_VOLTAGE_AVG: + case POWER_SUPPLY_PROP_VOLTAGE_MIN: + case POWER_SUPPLY_PROP_VOLTAGE_MAX: + case POWER_SUPPLY_PROP_VOLTAGE_NOW: + set_bit(prop, psyhw->props); + break; + default: + break; + } + } + + hwmon = devm_hwmon_device_register_with_info(dev, psy->desc->name, + psyhw, + &power_supply_hwmon_chip_info, + NULL); + ret = PTR_ERR_OR_ZERO(hwmon); + if (ret) + goto error; + + devres_remove_group(dev, NULL); + return 0; +error: + devres_release_group(dev, NULL); + return ret; +} diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index bdab14c7ca4d..39343bc4a3f8 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h @@ -475,4 +475,13 @@ static inline bool power_supply_is_watt_property(enum power_supply_property psp) return 0; } +#ifdef CONFIG_POWER_SUPPLY_HWMON +int devm_power_supply_add_hwmon_sysfs(struct power_supply *psy); +#else +static int devm_power_supply_add_hwmon_sysfs(struct power_supply *psy) +{ + return 0; +} +#endif + #endif /* __LINUX_POWER_SUPPLY_H__ */ -- 2.21.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v3 2/2] power: supply: ucs1002: Add HWMON interface 2019-06-05 7:23 [PATCH v3 0/2] HWMON compatibility layer for power supplies Andrey Smirnov 2019-06-05 7:23 ` [PATCH v3 1/2] power: supply: Add HWMON compatibility layer Andrey Smirnov @ 2019-06-05 7:23 ` Andrey Smirnov 2019-06-05 16:26 ` Andrew F. Davis 2019-06-05 21:35 ` [PATCH v3 0/2] HWMON compatibility layer for power supplies Chris Healy 2 siblings, 1 reply; 9+ messages in thread From: Andrey Smirnov @ 2019-06-05 7:23 UTC (permalink / raw) To: linux-pm Cc: Andrey Smirnov, Guenter Roeck, Chris Healy, Cory Tusar, Lucas Stach, Fabio Estevam, Sebastian Reichel, linux-kernel Expose current sensors found on UCS1002 via HWMON. Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Cc: Chris Healy <cphealy@gmail.com> Cc: Cory Tusar <cory.tusar@zii.aero> Cc: Lucas Stach <l.stach@pengutronix.de> Cc: Fabio Estevam <fabio.estevam@nxp.com> Cc: Guenter Roeck <linux@roeck-us.net> Cc: Sebastian Reichel <sre@kernel.org> Cc: linux-kernel@vger.kernel.org Cc: linux-pm@vger.kernel.org --- drivers/power/supply/ucs1002_power.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/power/supply/ucs1002_power.c b/drivers/power/supply/ucs1002_power.c index 677f20a4d76f..a4b6b37549cf 100644 --- a/drivers/power/supply/ucs1002_power.c +++ b/drivers/power/supply/ucs1002_power.c @@ -571,6 +571,12 @@ static int ucs1002_probe(struct i2c_client *client, return ret; } + ret = devm_power_supply_add_hwmon_sysfs(info->charger); + if (ret) { + dev_err(dev, "Failed to add hmwon attributes: %d\n", ret); + return ret; + } + ret = regmap_read(info->regmap, UCS1002_REG_PIN_STATUS, ®val); if (ret) { dev_err(dev, "Failed to read pin status: %d\n", ret); -- 2.21.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/2] power: supply: ucs1002: Add HWMON interface 2019-06-05 7:23 ` [PATCH v3 2/2] power: supply: ucs1002: Add HWMON interface Andrey Smirnov @ 2019-06-05 16:26 ` Andrew F. Davis 2019-06-05 17:47 ` Andrey Smirnov 0 siblings, 1 reply; 9+ messages in thread From: Andrew F. Davis @ 2019-06-05 16:26 UTC (permalink / raw) To: Andrey Smirnov, linux-pm Cc: Guenter Roeck, Chris Healy, Cory Tusar, Lucas Stach, Fabio Estevam, Sebastian Reichel, linux-kernel On 6/5/19 3:23 AM, Andrey Smirnov wrote: > Expose current sensors found on UCS1002 via HWMON. > > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > Reviewed-by: Guenter Roeck <linux@roeck-us.net> > Cc: Chris Healy <cphealy@gmail.com> > Cc: Cory Tusar <cory.tusar@zii.aero> > Cc: Lucas Stach <l.stach@pengutronix.de> > Cc: Fabio Estevam <fabio.estevam@nxp.com> > Cc: Guenter Roeck <linux@roeck-us.net> > Cc: Sebastian Reichel <sre@kernel.org> > Cc: linux-kernel@vger.kernel.org > Cc: linux-pm@vger.kernel.org > --- > drivers/power/supply/ucs1002_power.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/power/supply/ucs1002_power.c b/drivers/power/supply/ucs1002_power.c > index 677f20a4d76f..a4b6b37549cf 100644 > --- a/drivers/power/supply/ucs1002_power.c > +++ b/drivers/power/supply/ucs1002_power.c > @@ -571,6 +571,12 @@ static int ucs1002_probe(struct i2c_client *client, > return ret; > } > > + ret = devm_power_supply_add_hwmon_sysfs(info->charger); Could this be added to the core power supply framework on registering so all devices get this, vs each driver having to add this line? Andrew > + if (ret) { > + dev_err(dev, "Failed to add hmwon attributes: %d\n", ret); > + return ret; > + } > + > ret = regmap_read(info->regmap, UCS1002_REG_PIN_STATUS, ®val); > if (ret) { > dev_err(dev, "Failed to read pin status: %d\n", ret); > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/2] power: supply: ucs1002: Add HWMON interface 2019-06-05 16:26 ` Andrew F. Davis @ 2019-06-05 17:47 ` Andrey Smirnov 2019-06-05 18:39 ` Guenter Roeck 0 siblings, 1 reply; 9+ messages in thread From: Andrey Smirnov @ 2019-06-05 17:47 UTC (permalink / raw) To: Andrew F. Davis Cc: Linux PM list, Guenter Roeck, Chris Healy, Cory Tusar, Lucas Stach, Fabio Estevam, Sebastian Reichel, linux-kernel On Wed, Jun 5, 2019 at 9:26 AM Andrew F. Davis <afd@ti.com> wrote: > > On 6/5/19 3:23 AM, Andrey Smirnov wrote: > > Expose current sensors found on UCS1002 via HWMON. > > > > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > > Reviewed-by: Guenter Roeck <linux@roeck-us.net> > > Cc: Chris Healy <cphealy@gmail.com> > > Cc: Cory Tusar <cory.tusar@zii.aero> > > Cc: Lucas Stach <l.stach@pengutronix.de> > > Cc: Fabio Estevam <fabio.estevam@nxp.com> > > Cc: Guenter Roeck <linux@roeck-us.net> > > Cc: Sebastian Reichel <sre@kernel.org> > > Cc: linux-kernel@vger.kernel.org > > Cc: linux-pm@vger.kernel.org > > --- > > drivers/power/supply/ucs1002_power.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/drivers/power/supply/ucs1002_power.c b/drivers/power/supply/ucs1002_power.c > > index 677f20a4d76f..a4b6b37549cf 100644 > > --- a/drivers/power/supply/ucs1002_power.c > > +++ b/drivers/power/supply/ucs1002_power.c > > @@ -571,6 +571,12 @@ static int ucs1002_probe(struct i2c_client *client, > > return ret; > > } > > > > + ret = devm_power_supply_add_hwmon_sysfs(info->charger); > > Could this be added to the core power supply framework on registering so > all devices get this, vs each driver having to add this line? > I'd say it is up to Sebastian to decide if this should be opt-out rather than opt-in. I have no objections to either approach. Thanks, Andrey Smirnov ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/2] power: supply: ucs1002: Add HWMON interface 2019-06-05 17:47 ` Andrey Smirnov @ 2019-06-05 18:39 ` Guenter Roeck 2019-06-11 19:46 ` Sebastian Reichel 0 siblings, 1 reply; 9+ messages in thread From: Guenter Roeck @ 2019-06-05 18:39 UTC (permalink / raw) To: Andrey Smirnov Cc: Andrew F. Davis, Linux PM list, Chris Healy, Cory Tusar, Lucas Stach, Fabio Estevam, Sebastian Reichel, linux-kernel On Wed, Jun 05, 2019 at 10:47:25AM -0700, Andrey Smirnov wrote: > On Wed, Jun 5, 2019 at 9:26 AM Andrew F. Davis <afd@ti.com> wrote: > > > > On 6/5/19 3:23 AM, Andrey Smirnov wrote: > > > Expose current sensors found on UCS1002 via HWMON. > > > > > > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > > > Reviewed-by: Guenter Roeck <linux@roeck-us.net> > > > Cc: Chris Healy <cphealy@gmail.com> > > > Cc: Cory Tusar <cory.tusar@zii.aero> > > > Cc: Lucas Stach <l.stach@pengutronix.de> > > > Cc: Fabio Estevam <fabio.estevam@nxp.com> > > > Cc: Guenter Roeck <linux@roeck-us.net> > > > Cc: Sebastian Reichel <sre@kernel.org> > > > Cc: linux-kernel@vger.kernel.org > > > Cc: linux-pm@vger.kernel.org > > > --- > > > drivers/power/supply/ucs1002_power.c | 6 ++++++ > > > 1 file changed, 6 insertions(+) > > > > > > diff --git a/drivers/power/supply/ucs1002_power.c b/drivers/power/supply/ucs1002_power.c > > > index 677f20a4d76f..a4b6b37549cf 100644 > > > --- a/drivers/power/supply/ucs1002_power.c > > > +++ b/drivers/power/supply/ucs1002_power.c > > > @@ -571,6 +571,12 @@ static int ucs1002_probe(struct i2c_client *client, > > > return ret; > > > } > > > > > > + ret = devm_power_supply_add_hwmon_sysfs(info->charger); > > > > Could this be added to the core power supply framework on registering so > > all devices get this, vs each driver having to add this line? > > > > I'd say it is up to Sebastian to decide if this should be opt-out > rather than opt-in. I have no objections to either approach. > Same here, and agreed. Guenter ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/2] power: supply: ucs1002: Add HWMON interface 2019-06-05 18:39 ` Guenter Roeck @ 2019-06-11 19:46 ` Sebastian Reichel 2019-06-12 2:02 ` Andrey Smirnov 0 siblings, 1 reply; 9+ messages in thread From: Sebastian Reichel @ 2019-06-11 19:46 UTC (permalink / raw) To: Guenter Roeck Cc: Andrey Smirnov, Andrew F. Davis, Linux PM list, Chris Healy, Cory Tusar, Lucas Stach, Fabio Estevam, linux-kernel [-- Attachment #1: Type: text/plain, Size: 1964 bytes --] Hi, On Wed, Jun 05, 2019 at 11:39:45AM -0700, Guenter Roeck wrote: > On Wed, Jun 05, 2019 at 10:47:25AM -0700, Andrey Smirnov wrote: > > On Wed, Jun 5, 2019 at 9:26 AM Andrew F. Davis <afd@ti.com> wrote: > > > > > > On 6/5/19 3:23 AM, Andrey Smirnov wrote: > > > > Expose current sensors found on UCS1002 via HWMON. > > > > > > > > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > > > > Reviewed-by: Guenter Roeck <linux@roeck-us.net> > > > > Cc: Chris Healy <cphealy@gmail.com> > > > > Cc: Cory Tusar <cory.tusar@zii.aero> > > > > Cc: Lucas Stach <l.stach@pengutronix.de> > > > > Cc: Fabio Estevam <fabio.estevam@nxp.com> > > > > Cc: Guenter Roeck <linux@roeck-us.net> > > > > Cc: Sebastian Reichel <sre@kernel.org> > > > > Cc: linux-kernel@vger.kernel.org > > > > Cc: linux-pm@vger.kernel.org > > > > --- > > > > drivers/power/supply/ucs1002_power.c | 6 ++++++ > > > > 1 file changed, 6 insertions(+) > > > > > > > > diff --git a/drivers/power/supply/ucs1002_power.c b/drivers/power/supply/ucs1002_power.c > > > > index 677f20a4d76f..a4b6b37549cf 100644 > > > > --- a/drivers/power/supply/ucs1002_power.c > > > > +++ b/drivers/power/supply/ucs1002_power.c > > > > @@ -571,6 +571,12 @@ static int ucs1002_probe(struct i2c_client *client, > > > > return ret; > > > > } > > > > > > > > + ret = devm_power_supply_add_hwmon_sysfs(info->charger); > > > > > > Could this be added to the core power supply framework on registering so > > > all devices get this, vs each driver having to add this line? > > > > > > > I'd say it is up to Sebastian to decide if this should be opt-out > > rather than opt-in. I have no objections to either approach. > > > > Same here, and agreed. I think this should be registered in power_supply_register() and free'd in power_supply_unregister(). It's not device specific at all and the functionality can be configured via Kconfig. -- Sebastian [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/2] power: supply: ucs1002: Add HWMON interface 2019-06-11 19:46 ` Sebastian Reichel @ 2019-06-12 2:02 ` Andrey Smirnov 0 siblings, 0 replies; 9+ messages in thread From: Andrey Smirnov @ 2019-06-12 2:02 UTC (permalink / raw) To: Sebastian Reichel Cc: Guenter Roeck, Andrew F. Davis, Linux PM list, Chris Healy, Cory Tusar, Lucas Stach, Fabio Estevam, linux-kernel On Tue, Jun 11, 2019 at 12:46 PM Sebastian Reichel <sre@kernel.org> wrote: > > Hi, > > On Wed, Jun 05, 2019 at 11:39:45AM -0700, Guenter Roeck wrote: > > On Wed, Jun 05, 2019 at 10:47:25AM -0700, Andrey Smirnov wrote: > > > On Wed, Jun 5, 2019 at 9:26 AM Andrew F. Davis <afd@ti.com> wrote: > > > > > > > > On 6/5/19 3:23 AM, Andrey Smirnov wrote: > > > > > Expose current sensors found on UCS1002 via HWMON. > > > > > > > > > > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > > > > > Reviewed-by: Guenter Roeck <linux@roeck-us.net> > > > > > Cc: Chris Healy <cphealy@gmail.com> > > > > > Cc: Cory Tusar <cory.tusar@zii.aero> > > > > > Cc: Lucas Stach <l.stach@pengutronix.de> > > > > > Cc: Fabio Estevam <fabio.estevam@nxp.com> > > > > > Cc: Guenter Roeck <linux@roeck-us.net> > > > > > Cc: Sebastian Reichel <sre@kernel.org> > > > > > Cc: linux-kernel@vger.kernel.org > > > > > Cc: linux-pm@vger.kernel.org > > > > > --- > > > > > drivers/power/supply/ucs1002_power.c | 6 ++++++ > > > > > 1 file changed, 6 insertions(+) > > > > > > > > > > diff --git a/drivers/power/supply/ucs1002_power.c b/drivers/power/supply/ucs1002_power.c > > > > > index 677f20a4d76f..a4b6b37549cf 100644 > > > > > --- a/drivers/power/supply/ucs1002_power.c > > > > > +++ b/drivers/power/supply/ucs1002_power.c > > > > > @@ -571,6 +571,12 @@ static int ucs1002_probe(struct i2c_client *client, > > > > > return ret; > > > > > } > > > > > > > > > > + ret = devm_power_supply_add_hwmon_sysfs(info->charger); > > > > > > > > Could this be added to the core power supply framework on registering so > > > > all devices get this, vs each driver having to add this line? > > > > > > > > > > I'd say it is up to Sebastian to decide if this should be opt-out > > > rather than opt-in. I have no objections to either approach. > > > > > > > Same here, and agreed. > > I think this should be registered in power_supply_register() and > free'd in power_supply_unregister(). It's not device specific at > all and the functionality can be configured via Kconfig. > Sure, will do in v4. Thanks, Andrey Smirnov ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 0/2] HWMON compatibility layer for power supplies 2019-06-05 7:23 [PATCH v3 0/2] HWMON compatibility layer for power supplies Andrey Smirnov 2019-06-05 7:23 ` [PATCH v3 1/2] power: supply: Add HWMON compatibility layer Andrey Smirnov 2019-06-05 7:23 ` [PATCH v3 2/2] power: supply: ucs1002: Add HWMON interface Andrey Smirnov @ 2019-06-05 21:35 ` Chris Healy 2 siblings, 0 replies; 9+ messages in thread From: Chris Healy @ 2019-06-05 21:35 UTC (permalink / raw) To: Andrey Smirnov Cc: linux-pm, Cory Tusar, Lucas Stach, Fabio Estevam, Guenter Roeck, Sebastian Reichel, linux-kernel > This small series contains the code I wrote to expose various power > supply sensors via HWMON layer in order to be able to access all of > the sensors in the system with libsensors. > > Changes since [v2]: Full series is tested using the UCS1002. Tested-by: cphealy@gmail.com <cphealy@gmail.com> ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2019-06-12 2:02 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-06-05 7:23 [PATCH v3 0/2] HWMON compatibility layer for power supplies Andrey Smirnov 2019-06-05 7:23 ` [PATCH v3 1/2] power: supply: Add HWMON compatibility layer Andrey Smirnov 2019-06-05 7:23 ` [PATCH v3 2/2] power: supply: ucs1002: Add HWMON interface Andrey Smirnov 2019-06-05 16:26 ` Andrew F. Davis 2019-06-05 17:47 ` Andrey Smirnov 2019-06-05 18:39 ` Guenter Roeck 2019-06-11 19:46 ` Sebastian Reichel 2019-06-12 2:02 ` Andrey Smirnov 2019-06-05 21:35 ` [PATCH v3 0/2] HWMON compatibility layer for power supplies Chris Healy
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).