| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- From d8a22212737314cc02692cc90eda7d844fa20257 Mon Sep 17 00:00:00 2001
- From: Arnd Bergmann <[email protected]>
- 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 <[email protected]>
- Signed-off-by: Linus Walleij <[email protected]>
- ---
- 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) {
|