diff options
| author | 2022-04-01 23:40:29 +0200 | |
|---|---|---|
| committer | 2022-05-22 11:32:30 -0700 | |
| commit | cd705ea857fdd859a9df09e8adda4cb4c906e8a2 (patch) | |
| tree | 039ec5202c54949c7e9fe53a8036714c8c608284 /include/linux/polynomial.h | |
| parent | hwmon: (pmbus) Add support for Infineon Digital Multi-phase xdp152 family controllers (diff) | |
| download | linux-dev-cd705ea857fdd859a9df09e8adda4cb4c906e8a2.tar.xz linux-dev-cd705ea857fdd859a9df09e8adda4cb4c906e8a2.zip | |
lib: add generic polynomial calculation
Some temperature and voltage sensors use a polynomial to convert between
raw data points and actual temperature or voltage. The polynomial is
usually the result of a curve fitting of the diode characteristic.
The BT1 PVT hwmon driver already uses such a polynonmial calculation
which is rather generic. Move it to lib/ so other drivers can reuse it.
Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20220401214032.3738095-2-michael@walle.cc
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'include/linux/polynomial.h')
| -rw-r--r-- | include/linux/polynomial.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/include/linux/polynomial.h b/include/linux/polynomial.h new file mode 100644 index 000000000000..9e074a0bb6fa --- /dev/null +++ b/include/linux/polynomial.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2020 BAIKAL ELECTRONICS, JSC + */ + +#ifndef _POLYNOMIAL_H +#define _POLYNOMIAL_H + +/* + * struct polynomial_term - one term descriptor of a polynomial + * @deg: degree of the term. + * @coef: multiplication factor of the term. + * @divider: distributed divider per each degree. + * @divider_leftover: divider leftover, which couldn't be redistributed. + */ +struct polynomial_term { + unsigned int deg; + long coef; + long divider; + long divider_leftover; +}; + +/* + * struct polynomial - a polynomial descriptor + * @total_divider: total data divider. + * @terms: polynomial terms, last term must have degree of 0 + */ +struct polynomial { + long total_divider; + struct polynomial_term terms[]; +}; + +long polynomial_calc(const struct polynomial *poly, long data); + +#endif |
