lkml.org 
[lkml]   [2020]   [May]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH v4 3/4] power: supply: core: add output voltage measurements
    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 3863b2a73ecf..626a344fbad1 100644
    --- a/drivers/power/supply/power_supply_hwmon.c
    +++ b/drivers/power/supply/power_supply_hwmon.c
    @@ -16,6 +16,7 @@ struct power_supply_hwmon {
    static const char *const ps_input_label[] = {
    "battery",
    "external source",
    + "load",
    };

    static const char *const ps_temp_label[] = {
    @@ -51,6 +52,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) {
    @@ -58,6 +73,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;
    }
    @@ -399,6 +416,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
    @@ -469,6 +491,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
    \
     
     \ /
      Last update: 2020-05-01 17:12    [W:3.482 / U:0.224 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site