diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2019-05-15 01:43:08 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-15 05:52:49 +0300 |
commit | 9f6158946987a5ce3f16da097d18f240a89db417 (patch) | |
tree | c232e7df2397d4186b39a1a4de9bb2534a60170f /lib | |
parent | 2c64e9cb0b6b858901e9a386860d7d929d1cbaeb (diff) | |
download | linux-9f6158946987a5ce3f16da097d18f240a89db417.tar.xz |
lib/math: move int_pow() from pwm_bl.c for wider use
The integer exponentiation is used in few places and might be used in
the future by other call sites. Move it to wider use.
Link: http://lkml.kernel.org/r/20190323172531.80025-2-andriy.shevchenko@linux.intel.com
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Daniel Thompson <daniel.thompson@linaro.org>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Ray Jui <rjui@broadcom.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/math/Makefile | 2 | ||||
-rw-r--r-- | lib/math/int_pow.c | 32 |
2 files changed, 33 insertions, 1 deletions
diff --git a/lib/math/Makefile b/lib/math/Makefile index b75878420da6..583bbfebfc09 100644 --- a/lib/math/Makefile +++ b/lib/math/Makefile @@ -1,4 +1,4 @@ -obj-y += div64.o gcd.o lcm.o int_sqrt.o reciprocal_div.o +obj-y += div64.o gcd.o lcm.o int_pow.o int_sqrt.o reciprocal_div.o obj-$(CONFIG_CORDIC) += cordic.o obj-$(CONFIG_PRIME_NUMBERS) += prime_numbers.o diff --git a/lib/math/int_pow.c b/lib/math/int_pow.c new file mode 100644 index 000000000000..622fc1ab3c74 --- /dev/null +++ b/lib/math/int_pow.c @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * An integer based power function + * + * Derived from drivers/video/backlight/pwm_bl.c + */ + +#include <linux/export.h> +#include <linux/kernel.h> +#include <linux/types.h> + +/** + * int_pow - computes the exponentiation of the given base and exponent + * @base: base which will be raised to the given power + * @exp: power to be raised to + * + * Computes: pow(base, exp), i.e. @base raised to the @exp power + */ +u64 int_pow(u64 base, unsigned int exp) +{ + u64 result = 1; + + while (exp) { + if (exp & 1) + result *= base; + exp >>= 1; + base *= base; + } + + return result; +} +EXPORT_SYMBOL_GPL(int_pow); |