[PATCH 3/3] pwm-core: fix registration of several pwm

Thierry Reding thierry.reding at avionic-design.de
Sun Apr 29 13:14:18 EDT 2012


* Eric Bénard wrote:
> * after a pwm is allocated using alloc_pwms, ret contains the number
> of the pwm and is returned by pwmchip_add so the calling driver
> (pwm-imx in my case) fails with the following log :
> mxc_pwm: probe of mxc_pwm.1 failed with error 1
> mxc_pwm: probe of mxc_pwm.2 failed with error 2
> mxc_pwm: probe of mxc_pwm.3 failed with error 3
> 
> * this patch fix error handling in pwmchip_add
> 
> Signed-off-by: Eric Bénard <eric at eukrea.com>
> ---
>  drivers/pwm/core.c |    7 +++++--
>  1 files changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
> index a7be0bc..d3438e4 100644
> --- a/drivers/pwm/core.c
> +++ b/drivers/pwm/core.c
> @@ -216,8 +216,10 @@ int pwmchip_add(struct pwm_chip *chip)
>  		goto out;
>  
>  	chip->pwms = kzalloc(chip->npwm * sizeof(*pwm), GFP_KERNEL);
> -	if (!chip->pwms)
> -		return -ENOMEM;
> +	if (!chip->pwms) {
> +		ret = -ENOMEM;
> +		goto out;
> +	}

Good catch!

>  
>  	chip->base = ret;
>  
> @@ -239,6 +241,7 @@ int pwmchip_add(struct pwm_chip *chip)
>  	if (IS_ENABLED(CONFIG_OF))
>  		of_pwmchip_add(chip);
>  
> +	ret = 0;
>  out:
>  	mutex_unlock(&pwm_lock);
>  	return ret;

pwmchip_add() is meant to return a negative error-code on failure, so a
positive return values would still indicate success, therefore any callers
should check explicitly for (ret < 0) instead of just (ret). However in this
case it might be safer to make the return value explicitly 0 in case of
success.

I'd like to fold this into the existing series as well, if that's okay with
you.

Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120429/9288c84e/attachment.sig>


More information about the linux-arm-kernel mailing list