pwm: Add a device-managed function to add PWM chips
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Wed, 7 Apr 2021 08:01:54 +0000 (10:01 +0200)
committerThierry Reding <thierry.reding@gmail.com>
Mon, 28 Jun 2021 11:17:48 +0000 (13:17 +0200)
This potentially simplifies low-level PWM drivers.

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
include/linux/pwm.h

index a42999f877d25ab4eb83fc9063993b4c37048c2a..83db178f16bb78aaff4036345cf80a0b8822a5a1 100644 (file)
@@ -335,6 +335,25 @@ out:
 }
 EXPORT_SYMBOL_GPL(pwmchip_remove);
 
+static void devm_pwmchip_remove(void *data)
+{
+       struct pwm_chip *chip = data;
+
+       pwmchip_remove(chip);
+}
+
+int devm_pwmchip_add(struct device *dev, struct pwm_chip *chip)
+{
+       int ret;
+
+       ret = pwmchip_add(chip);
+       if (ret)
+               return ret;
+
+       return devm_add_action_or_reset(dev, devm_pwmchip_remove, chip);
+}
+EXPORT_SYMBOL_GPL(devm_pwmchip_add);
+
 /**
  * pwm_request() - request a PWM device
  * @pwm: global PWM device index
index 5a73251d28e3f4c441ef63e95f362f4a7c98325f..892ece4d4cfabf10345a714ff4df86ab0bf38e1a 100644 (file)
@@ -405,6 +405,9 @@ void *pwm_get_chip_data(struct pwm_device *pwm);
 
 int pwmchip_add(struct pwm_chip *chip);
 int pwmchip_remove(struct pwm_chip *chip);
+
+int devm_pwmchip_add(struct device *dev, struct pwm_chip *chip);
+
 struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip,
                                         unsigned int index,
                                         const char *label);