]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
leds: sun50i-a100: Avoid division-by-zero warning
authorArnd Bergmann <arnd@arndb.de>
Tue, 12 Dec 2023 21:45:22 +0000 (22:45 +0100)
committerLee Jones <lee@kernel.org>
Wed, 13 Dec 2023 16:20:04 +0000 (16:20 +0000)
When CONFIG_COMMON_CLK is disabled, e.g. on an x86 randconfig compile test,
clang reports a field overflow from propagating the result of a division by
zero:

drivers/leds/leds-sun50i-a100.c:309:12: error: call to '__compiletime_assert_265' declared with 'error' attribute: FIELD_PREP: value too large for the field
        control = FIELD_PREP(LEDC_T01_TIMING_CTRL_REG_T1H, timing->t1h_ns / cycle_ns) |

Avoid the problem by adding an explicit check for the zero value here. Alternatively
the assertion could be avoided with a Kconfig dependency on COMMON_CLK.

Fixes: 090a25ad9798 ("leds: sun50i-a100: New driver for the A100 LED controller")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Guo Ren <guoren@kernel.org>
Link: https://lore.kernel.org/r/20231212214536.175327-1-arnd@kernel.org
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/leds-sun50i-a100.c

index e4a7e692a9087e32e56d30290242052a1f7f0dd1..171cefd1ea0d37083b405f09de4f56ae558c5f83 100644 (file)
@@ -303,9 +303,13 @@ static void sun50i_a100_ledc_set_timing(struct sun50i_a100_ledc *priv)
 {
        const struct sun50i_a100_ledc_timing *timing = &priv->timing;
        unsigned long mod_freq = clk_get_rate(priv->mod_clk);
-       u32 cycle_ns = NSEC_PER_SEC / mod_freq;
+       u32 cycle_ns;
        u32 control;
 
+       if (!mod_freq)
+               return;
+
+       cycle_ns = NSEC_PER_SEC / mod_freq;
        control = FIELD_PREP(LEDC_T01_TIMING_CTRL_REG_T1H, timing->t1h_ns / cycle_ns) |
                  FIELD_PREP(LEDC_T01_TIMING_CTRL_REG_T1L, timing->t1l_ns / cycle_ns) |
                  FIELD_PREP(LEDC_T01_TIMING_CTRL_REG_T0H, timing->t0h_ns / cycle_ns) |