Commit c860d701 authored by Robert Jarzmik's avatar Robert Jarzmik Committed by Russell King

[ARM] 5087/1: Get the PWM layer to handle clock enable/disable properly.

Allow pwm_enable()/pwm_disable() to be called as many times
as the driver wants (and not even count them).
The PWM model is different from things like the clock API
where we need enable counting, because PWMs have one
exclusive user per PWM whereas the clock API can have
multiple users of the same clock.
Acked-by: default avatareric miao <eric.miao@marvell.com>
Signed-off-by: default avatarRobert Jarzmik <rjarzmik@free.fr>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent b5f0228a
...@@ -36,6 +36,7 @@ struct pwm_device { ...@@ -36,6 +36,7 @@ struct pwm_device {
const char *label; const char *label;
struct clk *clk; struct clk *clk;
int clk_enabled;
void __iomem *mmio_base; void __iomem *mmio_base;
unsigned int use_count; unsigned int use_count;
...@@ -87,13 +88,23 @@ EXPORT_SYMBOL(pwm_config); ...@@ -87,13 +88,23 @@ EXPORT_SYMBOL(pwm_config);
int pwm_enable(struct pwm_device *pwm) int pwm_enable(struct pwm_device *pwm)
{ {
return clk_enable(pwm->clk); int rc = 0;
if (!pwm->clk_enabled) {
rc = clk_enable(pwm->clk);
if (!rc)
pwm->clk_enabled = 1;
}
return rc;
} }
EXPORT_SYMBOL(pwm_enable); EXPORT_SYMBOL(pwm_enable);
void pwm_disable(struct pwm_device *pwm) void pwm_disable(struct pwm_device *pwm)
{ {
clk_disable(pwm->clk); if (pwm->clk_enabled) {
clk_disable(pwm->clk);
pwm->clk_enabled = 0;
}
} }
EXPORT_SYMBOL(pwm_disable); EXPORT_SYMBOL(pwm_disable);
...@@ -161,6 +172,7 @@ static struct pwm_device *pwm_probe(struct platform_device *pdev, ...@@ -161,6 +172,7 @@ static struct pwm_device *pwm_probe(struct platform_device *pdev,
ret = PTR_ERR(pwm->clk); ret = PTR_ERR(pwm->clk);
goto err_free; goto err_free;
} }
pwm->clk_enabled = 0;
pwm->use_count = 0; pwm->use_count = 0;
pwm->pwm_id = pwm_id; pwm->pwm_id = pwm_id;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment