OSDN Git Service

pwm: Clear chip_data in pwm_put()
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Mon, 25 Mar 2019 09:49:33 +0000 (10:49 +0100)
committerThierry Reding <thierry.reding@gmail.com>
Thu, 9 May 2019 15:09:54 +0000 (17:09 +0200)
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>
drivers/pwm/core.c
drivers/pwm/pwm-berlin.c
drivers/pwm/pwm-pca9685.c
drivers/pwm/pwm-samsung.c

index 8c9200a..3998ebd 100644 (file)
@@ -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);
index 7c8d6a1..b91c477 100644 (file)
@@ -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);
 }
 
index a7eaf96..567f5e2 100644 (file)
@@ -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);
 }
 
index 062f2cf..3762432 100644 (file)
@@ -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)