diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2014-02-13 10:15:56 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-02-13 10:57:40 +0100 |
commit | 5da563f1e67df1fd071098c443cbe878c75eeba4 (patch) | |
tree | 67bced0a747818def0ccca198605966cd9047fdd | |
parent | b069d6b876064b8eca973882157f172a9ccefcab (diff) | |
download | barebox-5da563f1e67df1fd071098c443cbe878c75eeba4.tar.gz barebox-5da563f1e67df1fd071098c443cbe878c75eeba4.tar.xz |
PWM: Use a separate device for PWMs
Instead of directly using the hardware devicet for PWMs register
a logical PWM device so that the user operates on pwmx devices rather
than pxa-pwmx.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | drivers/pwm/core.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index f769cfe9bb..f2b062e335 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -26,7 +26,8 @@ struct pwm_device { #define FLAG_REQUESTED 0 #define FLAG_ENABLED 1 struct list_head node; - struct device_d *dev; + struct device_d *hwdev; + struct device_d dev; unsigned int duty_ns; unsigned int period_ns; @@ -79,27 +80,36 @@ int pwmchip_add(struct pwm_chip *chip, struct device_d *dev) { struct pwm_device *pwm; struct param_d *p; + int ret; if (_find_pwm(chip->devname)) return -EBUSY; pwm = xzalloc(sizeof(*pwm)); pwm->chip = chip; - pwm->dev = dev; + pwm->hwdev = dev; + + strcpy(pwm->dev.name, chip->devname); + pwm->dev.id = DEVICE_ID_SINGLE; + pwm->dev.parent = dev; + + ret = register_device(&pwm->dev); + if (ret) + return ret; list_add_tail(&pwm->node, &pwm_list); - p = dev_add_param_int(dev, "duty_ns", set_duty_period_ns, + p = dev_add_param_int(&pwm->dev, "duty_ns", set_duty_period_ns, NULL, &pwm->chip->duty_ns, "%u", pwm); if (IS_ERR(p)) return PTR_ERR(p); - p = dev_add_param_int(dev, "period_ns", set_duty_period_ns, + p = dev_add_param_int(&pwm->dev, "period_ns", set_duty_period_ns, NULL, &pwm->chip->period_ns, "%u", pwm); if (IS_ERR(p)) return PTR_ERR(p); - p = dev_add_param_bool(dev, "enable", set_enable, + p = dev_add_param_bool(&pwm->dev, "enable", set_enable, NULL, &pwm->p_enable, pwm); if (IS_ERR(p)) return PTR_ERR(p); |