Skip to content

Commit

Permalink
pwm: Clear chip_data in pwm_put()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Uwe Kleine-König authored and Thierry Reding committed May 9, 2019
1 parent 738a1cf commit e926b12
Show file tree
Hide file tree
Showing 4 changed files with 1 addition and 3 deletions.
1 change: 1 addition & 0 deletions drivers/pwm/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -877,6 +877,7 @@ void pwm_put(struct pwm_device *pwm)
if (pwm->chip->ops->free)
pwm->chip->ops->free(pwm->chip, pwm);

pwm_set_chip_data(pwm, NULL);
pwm->label = NULL;

module_put(pwm->chip->ops->owner);
Expand Down
1 change: 0 additions & 1 deletion drivers/pwm/pwm-berlin.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

pwm_set_chip_data(pwm, NULL);
kfree(channel);
}

Expand Down
1 change: 0 additions & 1 deletion drivers/pwm/pwm-pca9685.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,6 @@ static void pca9685_pwm_gpio_free(struct gpio_chip *gpio, unsigned int offset)
pm_runtime_put(pca->chip.dev);
mutex_lock(&pca->lock);
pwm = &pca->chip.pwms[offset];
pwm_set_chip_data(pwm, NULL);
mutex_unlock(&pca->lock);
}

Expand Down
1 change: 0 additions & 1 deletion drivers/pwm/pwm-samsung.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
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)
Expand Down

0 comments on commit e926b12

Please sign in to comment.