forked from mirrors/linux
		
	pwm: Clear chip_data in pwm_put()
After a PWM is disposed by its user the per chip data becomes invalid. Clear the data in common code instead of the device drivers to get consistent behaviour. Before this patch only three of nine drivers cleaned up here. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
This commit is contained in:
		
							parent
							
								
									738a1cfec2
								
							
						
					
					
						commit
						e926b12c61
					
				
					 4 changed files with 1 additions and 3 deletions
				
			
		|  | @ -877,6 +877,7 @@ void pwm_put(struct pwm_device *pwm) | ||||||
| 	if (pwm->chip->ops->free) | 	if (pwm->chip->ops->free) | ||||||
| 		pwm->chip->ops->free(pwm->chip, pwm); | 		pwm->chip->ops->free(pwm->chip, pwm); | ||||||
| 
 | 
 | ||||||
|  | 	pwm_set_chip_data(pwm, NULL); | ||||||
| 	pwm->label = NULL; | 	pwm->label = NULL; | ||||||
| 
 | 
 | ||||||
| 	module_put(pwm->chip->ops->owner); | 	module_put(pwm->chip->ops->owner); | ||||||
|  |  | ||||||
|  | @ -84,7 +84,6 @@ static void berlin_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm) | ||||||
| { | { | ||||||
| 	struct berlin_pwm_channel *channel = pwm_get_chip_data(pwm); | 	struct berlin_pwm_channel *channel = pwm_get_chip_data(pwm); | ||||||
| 
 | 
 | ||||||
| 	pwm_set_chip_data(pwm, NULL); |  | ||||||
| 	kfree(channel); | 	kfree(channel); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -176,7 +176,6 @@ static void pca9685_pwm_gpio_free(struct gpio_chip *gpio, unsigned int offset) | ||||||
| 	pm_runtime_put(pca->chip.dev); | 	pm_runtime_put(pca->chip.dev); | ||||||
| 	mutex_lock(&pca->lock); | 	mutex_lock(&pca->lock); | ||||||
| 	pwm = &pca->chip.pwms[offset]; | 	pwm = &pca->chip.pwms[offset]; | ||||||
| 	pwm_set_chip_data(pwm, NULL); |  | ||||||
| 	mutex_unlock(&pca->lock); | 	mutex_unlock(&pca->lock); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -238,7 +238,6 @@ static int pwm_samsung_request(struct pwm_chip *chip, struct pwm_device *pwm) | ||||||
| static void pwm_samsung_free(struct pwm_chip *chip, struct pwm_device *pwm) | static void pwm_samsung_free(struct pwm_chip *chip, struct pwm_device *pwm) | ||||||
| { | { | ||||||
| 	devm_kfree(chip->dev, pwm_get_chip_data(pwm)); | 	devm_kfree(chip->dev, pwm_get_chip_data(pwm)); | ||||||
| 	pwm_set_chip_data(pwm, NULL); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int pwm_samsung_enable(struct pwm_chip *chip, struct pwm_device *pwm) | static int pwm_samsung_enable(struct pwm_chip *chip, struct pwm_device *pwm) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Uwe Kleine-König
						Uwe Kleine-König