From e5cf60430e851f0dbd9827f84a26631415244c03 Mon Sep 17 00:00:00 2001 From: Liu Ying Date: Mon, 25 Oct 2010 17:31:56 +0800 Subject: 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 --- arch/arm/plat-mxc/pwm.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'arch') 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) { -- cgit v1.2.3