Messages in this thread | | | From | Linus Walleij <> | Date | Thu, 18 Nov 2021 03:02:21 +0100 | Subject | Re: [RFC PATCH v3 2/9] power: supply: add cap2ocv batinfo helper |
| |
On Tue, Nov 16, 2021 at 1:25 PM Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com> wrote:
> The power-supply core supports concept of OCV (Open Circuit Voltage) => > SOC (State Of Charge) conversion tables. Usually these tables are used > to estimate SOC based on OCV. Some systems use so called "Zero Adjust" > where at the near end-of-battery condition the SOC from coulomb counter > is used to retrieve the OCV - and OCV and VSYS difference is used to > re-estimate the battery capacity. > > Add helper to do look-up the other-way around and also get the OCV > based on SOC > > Signed-off-by: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
It seems you will need this for your chargers indeed.
> +int power_supply_dcap2ocv_simple(struct power_supply_battery_ocv_table *table, > + int table_len, int dcap) > +{ > + int i, ocv, tmp; > + > + for (i = 0; i < table_len; i++) > + if (dcap > table[i].capacity * 10) > + break; > + > + if (i > 0 && i < table_len) { > + tmp = (table[i - 1].ocv - table[i].ocv) * > + (dcap - table[i].capacity * 10); > + > + tmp /= (table[i - 1].capacity - table[i].capacity) * 10; > + ocv = tmp + table[i].ocv; > + } else if (i == 0) { > + ocv = table[0].ocv; > + } else { > + ocv = table[table_len - 1].ocv; > + } > + > + return ocv; > +} > +EXPORT_SYMBOL_GPL(power_supply_dcap2ocv_simple);
Rewrite this using the library fixpoint interpolation function but just copypasting from my patch: https://lore.kernel.org/linux-pm/20211116230233.2167104-1-linus.walleij@linaro.org/
Other than that it looks good to me!
Yours, Linus Walleij
| |