diff options
Diffstat (limited to 'drivers/pwm/core.c')
| -rw-r--r-- | drivers/pwm/core.c | 48 | 
1 files changed, 9 insertions, 39 deletions
| diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index a8eff4b3ee36..c4d5c0667137 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -37,23 +37,13 @@ static struct pwm_device *pwm_to_device(unsigned int pwm)  	return radix_tree_lookup(&pwm_tree, pwm);  } -static int alloc_pwms(int pwm, unsigned int count) +static int alloc_pwms(unsigned int count)  { -	unsigned int from = 0;  	unsigned int start; -	if (pwm >= MAX_PWMS) -		return -EINVAL; - -	if (pwm >= 0) -		from = pwm; - -	start = bitmap_find_next_zero_area(allocated_pwms, MAX_PWMS, from, +	start = bitmap_find_next_zero_area(allocated_pwms, MAX_PWMS, 0,  					   count, 0); -	if (pwm >= 0 && start != pwm) -		return -EEXIST; -  	if (start + count > MAX_PWMS)  		return -ENOSPC; @@ -260,18 +250,14 @@ static bool pwm_ops_check(const struct pwm_chip *chip)  }  /** - * pwmchip_add_with_polarity() - register a new PWM chip + * pwmchip_add() - register a new PWM chip   * @chip: the PWM chip to add - * @polarity: initial polarity of PWM channels   * - * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base - * will be used. The initial polarity for all channels is specified by the - * @polarity parameter. + * Register a new PWM chip.   *   * Returns: 0 on success or a negative error code on failure.   */ -int pwmchip_add_with_polarity(struct pwm_chip *chip, -			      enum pwm_polarity polarity) +int pwmchip_add(struct pwm_chip *chip)  {  	struct pwm_device *pwm;  	unsigned int i; @@ -285,25 +271,24 @@ int pwmchip_add_with_polarity(struct pwm_chip *chip,  	mutex_lock(&pwm_lock); -	ret = alloc_pwms(chip->base, chip->npwm); +	ret = alloc_pwms(chip->npwm);  	if (ret < 0)  		goto out; +	chip->base = ret; +  	chip->pwms = kcalloc(chip->npwm, sizeof(*pwm), GFP_KERNEL);  	if (!chip->pwms) {  		ret = -ENOMEM;  		goto out;  	} -	chip->base = ret; -  	for (i = 0; i < chip->npwm; i++) {  		pwm = &chip->pwms[i];  		pwm->chip = chip;  		pwm->pwm = chip->base + i;  		pwm->hwpwm = i; -		pwm->state.polarity = polarity;  		radix_tree_insert(&pwm_tree, pwm->pwm, pwm);  	} @@ -326,21 +311,6 @@ out:  	return ret;  } -EXPORT_SYMBOL_GPL(pwmchip_add_with_polarity); - -/** - * pwmchip_add() - register a new PWM chip - * @chip: the PWM chip to add - * - * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base - * will be used. The initial polarity for all channels is normal. - * - * Returns: 0 on success or a negative error code on failure. - */ -int pwmchip_add(struct pwm_chip *chip) -{ -	return pwmchip_add_with_polarity(chip, PWM_POLARITY_NORMAL); -}  EXPORT_SYMBOL_GPL(pwmchip_add);  /** @@ -607,7 +577,7 @@ int pwm_apply_state(struct pwm_device *pwm, const struct pwm_state *state)  		 */  		if (state->polarity != pwm->state.polarity) {  			if (!chip->ops->set_polarity) -				return -ENOTSUPP; +				return -EINVAL;  			/*  			 * Changing the polarity of a running PWM is | 
