Message ID | 20230314225535.1321736-11-sre@kernel.org (mailing list archive) |
---|---|
State | Handled Elsewhere, archived |
Headers | show |
Series | Add DT support for generic ADC battery | expand |
On 3/15/23 00:55, Sebastian Reichel wrote: > From: Sebastian Reichel <sebastian.reichel@collabora.com> > > Another typical thing to monitor via an ADC line is > the battery temperature. > > Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com> Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com> > --- > drivers/power/supply/generic-adc-battery.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/power/supply/generic-adc-battery.c b/drivers/power/supply/generic-adc-battery.c > index 4811e72df8cd..0124d8d51af7 100644 > --- a/drivers/power/supply/generic-adc-battery.c > +++ b/drivers/power/supply/generic-adc-battery.c > @@ -30,6 +30,7 @@ enum gab_chan_type { > GAB_VOLTAGE = 0, > GAB_CURRENT, > GAB_POWER, > + GAB_TEMP, > GAB_MAX_CHAN_TYPE > }; > > @@ -40,7 +41,8 @@ enum gab_chan_type { > static const char *const gab_chan_name[] = { > [GAB_VOLTAGE] = "voltage", > [GAB_CURRENT] = "current", > - [GAB_POWER] = "power", > + [GAB_POWER] = "power", > + [GAB_TEMP] = "temperature", > }; > > struct gab { > @@ -77,6 +79,7 @@ static const enum power_supply_property gab_dyn_props[] = { > POWER_SUPPLY_PROP_VOLTAGE_NOW, > POWER_SUPPLY_PROP_CURRENT_NOW, > POWER_SUPPLY_PROP_POWER_NOW, > + POWER_SUPPLY_PROP_TEMP, > }; > > static bool gab_charge_finished(struct gab *adc_bat) > @@ -115,6 +118,8 @@ static int gab_get_property(struct power_supply *psy, > return read_channel(adc_bat, GAB_CURRENT, &val->intval); > case POWER_SUPPLY_PROP_POWER_NOW: > return read_channel(adc_bat, GAB_POWER, &val->intval); > + case POWER_SUPPLY_PROP_TEMP: > + return read_channel(adc_bat, GAB_TEMP, &val->intval); > default: > return -EINVAL; > }
On Tue, Mar 14, 2023 at 11:55 PM Sebastian Reichel <sre@kernel.org> wrote: > From: Sebastian Reichel <sebastian.reichel@collabora.com> > > Another typical thing to monitor via an ADC line is > the battery temperature. > > Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> > static bool gab_charge_finished(struct gab *adc_bat) > @@ -115,6 +118,8 @@ static int gab_get_property(struct power_supply *psy, > return read_channel(adc_bat, GAB_CURRENT, &val->intval); > case POWER_SUPPLY_PROP_POWER_NOW: > return read_channel(adc_bat, GAB_POWER, &val->intval); > + case POWER_SUPPLY_PROP_TEMP: > + return read_channel(adc_bat, GAB_TEMP, &val->intval); Hm. I wonder if these should rather all use read_channel_processed()? The difference is that you will then support ADCs with internal scaling which is beneficial. Most of the time it doesn't matter. Yours, Linus Walleij
Hi Linus, On Wed, Mar 15, 2023 at 09:04:15AM +0100, Linus Walleij wrote: > On Tue, Mar 14, 2023 at 11:55 PM Sebastian Reichel <sre@kernel.org> wrote: > > From: Sebastian Reichel <sebastian.reichel@collabora.com> > > Another typical thing to monitor via an ADC line is > > the battery temperature. > > > > Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com> > > Reviewed-by: Linus Walleij <linus.walleij@linaro.org> > > > static bool gab_charge_finished(struct gab *adc_bat) > > @@ -115,6 +118,8 @@ static int gab_get_property(struct power_supply *psy, > > return read_channel(adc_bat, GAB_CURRENT, &val->intval); > > case POWER_SUPPLY_PROP_POWER_NOW: > > return read_channel(adc_bat, GAB_POWER, &val->intval); > > + case POWER_SUPPLY_PROP_TEMP: > > + return read_channel(adc_bat, GAB_TEMP, &val->intval); > > Hm. I wonder if these should rather all use read_channel_processed()? > > The difference is that you will then support ADCs with internal scaling > which is beneficial. Most of the time it doesn't matter. read_channel is a local helper, the driver uses the processed variant of iio_read_channel: static int read_channel(struct gab *adc_bat, enum gab_chan_type channel, int *result) { int ret; ret = iio_read_channel_processed(adc_bat->channel[channel], result); if (ret < 0) pr_err("read channel error\n"); else *result *= 1000; return ret; } -- Sebastian
diff --git a/drivers/power/supply/generic-adc-battery.c b/drivers/power/supply/generic-adc-battery.c index 4811e72df8cd..0124d8d51af7 100644 --- a/drivers/power/supply/generic-adc-battery.c +++ b/drivers/power/supply/generic-adc-battery.c @@ -30,6 +30,7 @@ enum gab_chan_type { GAB_VOLTAGE = 0, GAB_CURRENT, GAB_POWER, + GAB_TEMP, GAB_MAX_CHAN_TYPE }; @@ -40,7 +41,8 @@ enum gab_chan_type { static const char *const gab_chan_name[] = { [GAB_VOLTAGE] = "voltage", [GAB_CURRENT] = "current", - [GAB_POWER] = "power", + [GAB_POWER] = "power", + [GAB_TEMP] = "temperature", }; struct gab { @@ -77,6 +79,7 @@ static const enum power_supply_property gab_dyn_props[] = { POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_CURRENT_NOW, POWER_SUPPLY_PROP_POWER_NOW, + POWER_SUPPLY_PROP_TEMP, }; static bool gab_charge_finished(struct gab *adc_bat) @@ -115,6 +118,8 @@ static int gab_get_property(struct power_supply *psy, return read_channel(adc_bat, GAB_CURRENT, &val->intval); case POWER_SUPPLY_PROP_POWER_NOW: return read_channel(adc_bat, GAB_POWER, &val->intval); + case POWER_SUPPLY_PROP_TEMP: + return read_channel(adc_bat, GAB_TEMP, &val->intval); default: return -EINVAL; }