Skip to content
  • Seung-Woo Kim's avatar
    pwm: samsung: Fix to use lowest div for large enough modulation bits · 04d68dea
    Seung-Woo Kim authored
    
    
    From pwm_samsung_calc_tin(), there is routine to find the lowest divider
    possible to generate lower frequency than requested one. But it is
    always possible to generate requested frequency with large enough
    modulation bits except on s3c24xx, so this patch fixes to use lowest div
    for the case. This patch removes following UBSAN warning:
    
       UBSAN: Undefined behaviour in drivers/pwm/pwm-samsung.c:197:13
       shift exponent 32 is too large for 32-bit type 'long unsigned int'
       [...]
       [<c0670248>] (ubsan_epilogue) from [<c06707b4>] (__ubsan_handle_shift_out_of_bounds+0xd8/0x120)
       [<c06707b4>] (__ubsan_handle_shift_out_of_bounds) from [<c0694b28>] (pwm_samsung_config+0x508/0x6a4)
       [<c0694b28>] (pwm_samsung_config) from [<c069286c>] (pwm_apply_state+0x174/0x40c)
       [<c069286c>] (pwm_apply_state) from [<c0b2e070>] (pwm_fan_probe+0xc8/0x488)
       [<c0b2e070>] (pwm_fan_probe) from [<c07ba8b0>] (platform_drv_probe+0x70/0x150)
       [...]
    
    Cc: Tomasz Figa <tomasz.figa@gmail.com>
    Signed-off-by: default avatarSeung-Woo Kim <sw0312.kim@samsung.com>
    Reviewed-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
    Signed-off-by: default avatarThierry Reding <thierry.reding@gmail.com>
    04d68dea