[PATCH v3 3/3] power: regulator: common: fix compilation issue

Quentin Schulz quentin.schulz at cherry.de
Thu Jan 15 19:07:11 CET 2026


Hi Julien,

On 1/15/26 3:30 PM, Julien Stephan wrote:
[...]
> @@ -65,47 +67,47 @@ int regulator_common_set_enable(const struct udevice *dev,
>   	debug("%s: dev='%s', enable=%d, delay=%d, has_gpio=%d\n", __func__,
>   	      dev->name, enable, plat->startup_delay_us,
>   	      dm_gpio_is_valid(&plat->gpio));
> +
>   	/* Enable GPIO is optional */
> -	if (!dm_gpio_is_valid(&plat->gpio)) {
> -		if (!enable)
> -			return -ENOSYS;
> -		return 0;
> -	}
> +	if (CONFIG_IS_ENABLED(DM_GPIO) && dm_gpio_is_valid(&plat->gpio)) {
> +		/* If previously enabled, increase count */
> +		if (enable && plat->enable_count > 0) {
> +			plat->enable_count++;
> +			return -EALREADY;
> +		}
>   
> -	/* If previously enabled, increase count */
> -	if (enable && plat->enable_count > 0) {
> -		plat->enable_count++;
> -		return -EALREADY;
> -	}
> +		if (!enable) {
> +			if (plat->enable_count > 1) {
> +				/* If enabled multiple times, decrease count */
> +				plat->enable_count--;
> +				return -EBUSY;
> +			} else if (!plat->enable_count) {
> +				/* If already disabled, do nothing */
> +				return -EALREADY;
> +			}
> +		}
>   
> -	if (!enable) {
> -		if (plat->enable_count > 1) {
> -			/* If enabled multiple times, decrease count */
> -			plat->enable_count--;
> -			return -EBUSY;
> -		} else if (!plat->enable_count) {
> -			/* If already disabled, do nothing */
> -			return -EALREADY;
> +		ret = dm_gpio_set_value(&plat->gpio, enable);
> +		if (ret) {
> +			pr_err("Can't set regulator : %s gpio to: %d\n", dev->name,
> +			       enable);
> +			return ret;
>   		}
> -	}
>   
> -	ret = dm_gpio_set_value(&plat->gpio, enable);
> -	if (ret) {
> -		pr_err("Can't set regulator : %s gpio to: %d\n", dev->name,
> -		      enable);
> -		return ret;
> -	}
> +		if (enable && plat->startup_delay_us)
> +			udelay(plat->startup_delay_us);
>   
> -	if (enable && plat->startup_delay_us)
> -		udelay(plat->startup_delay_us);
> +		if (!enable && plat->off_on_delay_us)
> +			udelay(plat->off_on_delay_us);
>   
> -	if (!enable && plat->off_on_delay_us)
> -		udelay(plat->off_on_delay_us);
> +		if (enable)
> +			plat->enable_count++;
> +		else
> +			plat->enable_count--;
>   
> -	if (enable)
> -		plat->enable_count++;
> -	else
> -		plat->enable_count--;
> +	} else {
> +		ret = enable ? 0 : -ENOSYS;
> +	}
>   
> -	return 0;
> +	return ret;

Phew, big diff. Wondering if:

@@ -66,7 +68,7 @@ int regulator_common_set_enable(const struct udevice *dev,
  	      dev->name, enable, plat->startup_delay_us,
  	      dm_gpio_is_valid(&plat->gpio));
  	/* Enable GPIO is optional */
-	if (!dm_gpio_is_valid(&plat->gpio)) {
+	if (!CONFIG_IS_ENABLED(DM_GPIO) || !dm_gpio_is_valid(&plat->gpio)) {
  		if (!enable)
  			return -ENOSYS;
  		return 0;


is enough? The compiler is hopefully smart enough to figure out that an 
always-true if-block which ends with a return means everything after 
this if-block doesn't need to be compiled in.

The current diff looks ok to me, though unnecessarily big I think. In 
any case,

Reviewed-by: Quentin Schulz <quentin.schulz at cherry.de>

Thanks!
Quentin


More information about the U-Boot mailing list