]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 Dec 2019 14:35:23 +0000 (15:35 +0100)
commit e926b12c611c2095c7976e2ed31753ad6eb5ff1a upstream.

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>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/pwm/core.c
drivers/pwm/pwm-berlin.c
drivers/pwm/pwm-samsung.c

index a19246455c13fe281536f6305ecea03d817da181..cc12032ee60d509cec73c942e50d929bea8795f5 100644 (file)
@@ -858,6 +858,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 01339c152ab00bb69b4ff1ee0c87c096151bd91c..64d9bb1ac272c6197ee870ef95b1b69ac476ce2d 100644 (file)
@@ -78,7 +78,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 f113cda47032e8c48f5ee9791d306af3b8d4e809..219757087995a6ae50babd6bbffb2263d0582b80 100644 (file)
@@ -235,7 +235,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)