aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pwm/pwm-omap-dmtimer.c
diff options
context:
space:
mode:
authorIvaylo Dimitrov <ivo.g.dimitrov.75@gmail.com>2016-06-22 15:22:18 -0400
committerTony Lindgren <tony@atomide.com>2016-06-30 00:54:00 -0400
commita74a198249c473fba092ee549068cea30d54f07e (patch)
tree674a20fb59ea4f47516a643233e3b87935b8de8c /drivers/pwm/pwm-omap-dmtimer.c
parent4406d52a0b735b27472846953fd0565302af6f3c (diff)
pwm: omap-dmtimer: Allow for setting dmtimer clock source
OMAP GP timers can have different input clocks that allow different PWM frequencies. However, there is no other way of setting the clock source but through clocks or clock-names properties of the timer itself. This limits PWM functionality to only the frequencies allowed by the particular clock source. Allowing setting the clock source by PWM rather than by timer allows different PWMs to have different ranges by not hard-wiring the clock source to the timer. Signed-off-by: Ivaylo Dimitrov <ivo.g.dimitrov.75@gmail.com> Acked-by: Rob Herring <robh@kernel.org> Acked-by: Thierry Reding <treding@nvidia.com> Acked-by: Pali Rohár <pali.rohar@gmail.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'drivers/pwm/pwm-omap-dmtimer.c')
-rw-r--r--drivers/pwm/pwm-omap-dmtimer.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/pwm/pwm-omap-dmtimer.c b/drivers/pwm/pwm-omap-dmtimer.c
index 3e95090cd7cf..5ad42f33e70c 100644
--- a/drivers/pwm/pwm-omap-dmtimer.c
+++ b/drivers/pwm/pwm-omap-dmtimer.c
@@ -245,7 +245,7 @@ static int pwm_omap_dmtimer_probe(struct platform_device *pdev)
245 struct pwm_omap_dmtimer_chip *omap; 245 struct pwm_omap_dmtimer_chip *omap;
246 struct pwm_omap_dmtimer_pdata *pdata; 246 struct pwm_omap_dmtimer_pdata *pdata;
247 pwm_omap_dmtimer *dm_timer; 247 pwm_omap_dmtimer *dm_timer;
248 u32 prescaler; 248 u32 v;
249 int status; 249 int status;
250 250
251 pdata = dev_get_platdata(&pdev->dev); 251 pdata = dev_get_platdata(&pdev->dev);
@@ -306,10 +306,12 @@ static int pwm_omap_dmtimer_probe(struct platform_device *pdev)
306 if (pm_runtime_active(&omap->dm_timer_pdev->dev)) 306 if (pm_runtime_active(&omap->dm_timer_pdev->dev))
307 omap->pdata->stop(omap->dm_timer); 307 omap->pdata->stop(omap->dm_timer);
308 308
309 /* setup dmtimer prescaler */ 309 if (!of_property_read_u32(pdev->dev.of_node, "ti,prescaler", &v))
310 if (!of_property_read_u32(pdev->dev.of_node, "ti,prescaler", 310 omap->pdata->set_prescaler(omap->dm_timer, v);
311 &prescaler)) 311
312 omap->pdata->set_prescaler(omap->dm_timer, prescaler); 312 /* setup dmtimer clock source */
313 if (!of_property_read_u32(pdev->dev.of_node, "ti,clock-source", &v))
314 omap->pdata->set_source(omap->dm_timer, v);
313 315
314 omap->chip.dev = &pdev->dev; 316 omap->chip.dev = &pdev->dev;
315 omap->chip.ops = &pwm_omap_dmtimer_ops; 317 omap->chip.ops = &pwm_omap_dmtimer_ops;