summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiu Ying <b17645@freescale.com>2010-10-25 17:31:56 +0800
committerLily Zhang <r58066@freescale.com>2010-10-27 15:55:34 +0800
commitc9b59e3d9fea9ae9932bf73bd57e4557303e10b6 (patch)
tree104c8c76d18f1caf25010fcf88c39e8ff5ce0053
parentd052048b6b271dbe7103adb7868565405f11e3d6 (diff)
ENGR00132935-3 MXC PWM:Use gpio when inverted pwm keeps low
This patch uses gpio to set pwm signal to keep low when the control signal is inverted, i.e., the pwm control signal may be inverted by a MOSFET chip. Signed-off-by: Liu Ying <b17645@freescale.com> (cherry picked from commit eaea1b2e48bbb9693d80d8c3affcd6e0fb8aae71)
-rw-r--r--arch/arm/plat-mxc/pwm.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/arch/arm/plat-mxc/pwm.c b/arch/arm/plat-mxc/pwm.c
index 088b57e2f76e..17f36c10c5c3 100644
--- a/arch/arm/plat-mxc/pwm.c
+++ b/arch/arm/plat-mxc/pwm.c
@@ -58,6 +58,8 @@ struct pwm_device {
unsigned int use_count;
unsigned int pwm_id;
int pwmo_invert;
+ void (*enable_pwm_pad)(void);
+ void (*disable_pwm_pad)(void);
};
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns)
@@ -142,12 +144,19 @@ int pwm_enable(struct pwm_device *pwm)
reg = readl(pwm->mmio_base + MX3_PWMCR);
reg |= MX3_PWMCR_EN;
writel(reg, pwm->mmio_base + MX3_PWMCR);
+
+ if (pwm->enable_pwm_pad)
+ pwm->enable_pwm_pad();
+
return rc;
}
EXPORT_SYMBOL(pwm_enable);
void pwm_disable(struct pwm_device *pwm)
{
+ if (pwm->disable_pwm_pad)
+ pwm->disable_pwm_pad();
+
writel(0, pwm->mmio_base + MX3_PWMCR);
if (pwm->clk_enabled) {
@@ -227,8 +236,11 @@ static int __devinit mxc_pwm_probe(struct platform_device *pdev)
pwm->use_count = 0;
pwm->pwm_id = pdev->id;
pwm->pdev = pdev;
- if (plat_data != NULL)
+ if (plat_data != NULL) {
pwm->pwmo_invert = plat_data->pwmo_invert;
+ pwm->enable_pwm_pad = plat_data->enable_pwm_pad;
+ pwm->disable_pwm_pad = plat_data->disable_pwm_pad;
+ }
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (r == NULL) {