Re: [PATCH] adc: meson-saradc: uint cannot be less than zero

Neil Armstrong <[email protected]> Thu, 24 Jul 2025 10:30:41 +0200
Newsgroups io.groups.u-boot-amlogic,org.u-boot-project.lists.u-boot
Organization Linaro
Message-ID <[email protected]>
On 22/07/2025 16:06, Andrew Goodbody wrote:
> timeout is declared as a uint but then tested for being less than zero
> which must always fail. Change the while loop for a pre-decrement on
> timeout and test timeout for being zero.
> 
> This issue was found by Smatch.
> 
> Signed-off-by: Andrew Goodbody <[email protected]>
> ---
>   drivers/adc/meson-saradc.c | 8 ++++----
>   1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/adc/meson-saradc.c b/drivers/adc/meson-saradc.c
> index 60e348968fb..0144ff828c5 100644
> --- a/drivers/adc/meson-saradc.c
> +++ b/drivers/adc/meson-saradc.c
> @@ -205,9 +205,9 @@ static int meson_saradc_lock(struct meson_saradc_priv *priv)
>   	do {
>   		udelay(1);
>   		regmap_read(priv->regmap, MESON_SAR_ADC_DELAY, &val);
> -	} while (val & MESON_SAR_ADC_DELAY_BL30_BUSY && timeout--);
> +	} while (val & MESON_SAR_ADC_DELAY_BL30_BUSY && --timeout);
>   
> -	if (timeout < 0) {
> +	if (!timeout) {
>   		printf("Timeout while waiting for BL30 unlock\n");
>   		return -ETIMEDOUT;
>   	}
> @@ -256,9 +256,9 @@ static int meson_saradc_wait_busy_clear(struct meson_saradc_priv *priv)
>   	do {
>   		udelay(1);
>   		regmap_read(priv->regmap, MESON_SAR_ADC_REG0, &regval);
> -	} while (FIELD_GET(MESON_SAR_ADC_REG0_BUSY_MASK, regval) && timeout--);
> +	} while (FIELD_GET(MESON_SAR_ADC_REG0_BUSY_MASK, regval) && --timeout);
>   
> -	if (timeout < 0)
> +	if (!timeout)
>   		return -ETIMEDOUT;
>   
>   	return 0;
> 
> ---
> base-commit: bd0ade7d090a334b3986936d63a34001d99722ad
> change-id: 20250722-meson_saradc-4bba9dc18333
> 
> Best regards,

Reviewed-by: Neil Armstrong <[email protected]>