You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.5 KiB
40 lines
1.5 KiB
From d8a22212737314cc02692cc90eda7d844fa20257 Mon Sep 17 00:00:00 2001
|
|
From: Arnd Bergmann <arnd@arndb.de>
|
|
Date: Wed, 16 Nov 2016 15:18:18 +0100
|
|
Subject: pinctrl: sunxi: fix theoretical uninitialized variable access
|
|
|
|
gcc warns about a way that it could use an uninitialized variable:
|
|
|
|
drivers/pinctrl/sunxi/pinctrl-sunxi.c: In function 'sunxi_pinctrl_init':
|
|
drivers/pinctrl/sunxi/pinctrl-sunxi.c:1191:8: error: 'best_div' may be used uninitialized in this function [-Werror=maybe-uninitialized]
|
|
|
|
This cannot really happen except if 'freq' is UINT_MAX and 'clock' is
|
|
zero, and both of these are forbidden. To shut up the warning anyway,
|
|
this changes the logic to initialize the return code to the first
|
|
divider value before looking at the others.
|
|
|
|
Fixes: 7c926492d38a ("pinctrl: sunxi: Add support for interrupt debouncing")
|
|
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
|
|
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
|
---
|
|
drivers/pinctrl/sunxi/pinctrl-sunxi.c | 7 +++++--
|
|
1 file changed, 5 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c
|
|
+++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
|
|
@@ -1125,10 +1125,13 @@ static int sunxi_pinctrl_build_state(str
|
|
static int sunxi_pinctrl_get_debounce_div(struct clk *clk, int freq, int *diff)
|
|
{
|
|
unsigned long clock = clk_get_rate(clk);
|
|
- unsigned int best_diff = ~0, best_div;
|
|
+ unsigned int best_diff, best_div;
|
|
int i;
|
|
|
|
- for (i = 0; i < 8; i++) {
|
|
+ best_diff = abs(freq - clock);
|
|
+ best_div = 0;
|
|
+
|
|
+ for (i = 1; i < 8; i++) {
|
|
int cur_diff = abs(freq - (clock >> i));
|
|
|
|
if (cur_diff < best_diff) {
|
|
|