Lines Matching full:omap
12 * This file is the core OMAP support for the generic, Linux
13 * PWM driver / controller, using the OMAP's dual-mode timers
29 * - PWM OMAP DM timer cannot change the polarity when pwm is active. When
43 #include <linux/platform_data/dmtimer-omap.h>
55 * corresponding to omap dmtimer.
57 * @dm_timer: Pointer to omap dm timer.
58 * @pdata: Pointer to omap dm timer ops.
59 * @dm_timer_pdev: Pointer to omap dm timer platform device
88 * pwm_omap_dmtimer_start() - Start the pwm omap dm timer in pwm mode
89 * @omap: Pointer to pwm omap dm timer chip
91 static void pwm_omap_dmtimer_start(struct pwm_omap_dmtimer_chip *omap) in pwm_omap_dmtimer_start() argument
94 * According to OMAP 4 TRM section 22.2.4.10 the counter should be in pwm_omap_dmtimer_start()
101 omap->pdata->enable(omap->dm_timer); in pwm_omap_dmtimer_start()
102 omap->pdata->write_counter(omap->dm_timer, DM_TIMER_LOAD_MIN); in pwm_omap_dmtimer_start()
103 omap->pdata->disable(omap->dm_timer); in pwm_omap_dmtimer_start()
105 omap->pdata->start(omap->dm_timer); in pwm_omap_dmtimer_start()
110 * @omap: Pointer to pwm omap dm timer chip
114 static bool pwm_omap_dmtimer_is_enabled(struct pwm_omap_dmtimer_chip *omap) in pwm_omap_dmtimer_is_enabled() argument
118 status = omap->pdata->get_pwm_status(omap->dm_timer); in pwm_omap_dmtimer_is_enabled()
125 * @omap: Pointer to pwm omap dm timer chip
129 static int pwm_omap_dmtimer_polarity(struct pwm_omap_dmtimer_chip *omap) in pwm_omap_dmtimer_polarity() argument
133 status = omap->pdata->get_pwm_status(omap->dm_timer); in pwm_omap_dmtimer_polarity()
139 * pwm_omap_dmtimer_config() - Update the configuration of pwm omap dm timer
152 struct pwm_omap_dmtimer_chip *omap = to_pwm_omap_dmtimer_chip(chip); in pwm_omap_dmtimer_config() local
165 fclk = omap->pdata->get_fclk(omap->dm_timer); in pwm_omap_dmtimer_config()
228 omap->pdata->set_load(omap->dm_timer, load_value); in pwm_omap_dmtimer_config()
229 omap->pdata->set_match(omap->dm_timer, true, match_value); in pwm_omap_dmtimer_config()
247 struct pwm_omap_dmtimer_chip *omap = to_pwm_omap_dmtimer_chip(chip); in pwm_omap_dmtimer_set_polarity() local
251 enabled = pwm_omap_dmtimer_is_enabled(omap); in pwm_omap_dmtimer_set_polarity()
253 omap->pdata->stop(omap->dm_timer); in pwm_omap_dmtimer_set_polarity()
255 omap->pdata->set_pwm(omap->dm_timer, in pwm_omap_dmtimer_set_polarity()
261 pwm_omap_dmtimer_start(omap); in pwm_omap_dmtimer_set_polarity()
265 * pwm_omap_dmtimer_apply() - Changes the state of the pwm omap dm timer.
276 struct pwm_omap_dmtimer_chip *omap = to_pwm_omap_dmtimer_chip(chip); in pwm_omap_dmtimer_apply() local
279 if (pwm_omap_dmtimer_is_enabled(omap) && !state->enabled) { in pwm_omap_dmtimer_apply()
280 omap->pdata->stop(omap->dm_timer); in pwm_omap_dmtimer_apply()
284 if (pwm_omap_dmtimer_polarity(omap) != state->polarity) in pwm_omap_dmtimer_apply()
292 if (!pwm_omap_dmtimer_is_enabled(omap) && state->enabled) { in pwm_omap_dmtimer_apply()
293 omap->pdata->set_pwm(omap->dm_timer, in pwm_omap_dmtimer_apply()
298 pwm_omap_dmtimer_start(omap); in pwm_omap_dmtimer_apply()
314 struct pwm_omap_dmtimer_chip *omap; in pwm_omap_dmtimer_probe() local
371 omap = devm_kzalloc(&pdev->dev, sizeof(*omap), GFP_KERNEL); in pwm_omap_dmtimer_probe()
372 if (!omap) { in pwm_omap_dmtimer_probe()
377 omap->pdata = pdata; in pwm_omap_dmtimer_probe()
378 omap->dm_timer = dm_timer; in pwm_omap_dmtimer_probe()
379 omap->dm_timer_pdev = timer_pdev; in pwm_omap_dmtimer_probe()
385 if (pm_runtime_active(&omap->dm_timer_pdev->dev)) in pwm_omap_dmtimer_probe()
386 omap->pdata->stop(omap->dm_timer); in pwm_omap_dmtimer_probe()
389 omap->pdata->set_prescaler(omap->dm_timer, v); in pwm_omap_dmtimer_probe()
393 omap->pdata->set_source(omap->dm_timer, v); in pwm_omap_dmtimer_probe()
395 omap->chip.dev = &pdev->dev; in pwm_omap_dmtimer_probe()
396 omap->chip.ops = &pwm_omap_dmtimer_ops; in pwm_omap_dmtimer_probe()
397 omap->chip.npwm = 1; in pwm_omap_dmtimer_probe()
399 ret = pwmchip_add(&omap->chip); in pwm_omap_dmtimer_probe()
407 platform_set_drvdata(pdev, omap); in pwm_omap_dmtimer_probe()
414 * *omap is allocated using devm_kzalloc, in pwm_omap_dmtimer_probe()
435 struct pwm_omap_dmtimer_chip *omap = platform_get_drvdata(pdev); in pwm_omap_dmtimer_remove() local
437 pwmchip_remove(&omap->chip); in pwm_omap_dmtimer_remove()
439 if (pm_runtime_active(&omap->dm_timer_pdev->dev)) in pwm_omap_dmtimer_remove()
440 omap->pdata->stop(omap->dm_timer); in pwm_omap_dmtimer_remove()
442 omap->pdata->free(omap->dm_timer); in pwm_omap_dmtimer_remove()
444 put_device(&omap->dm_timer_pdev->dev); in pwm_omap_dmtimer_remove()
448 {.compatible = "ti,omap-dmtimer-pwm"},
455 .name = "omap-dmtimer-pwm",
467 MODULE_DESCRIPTION("OMAP PWM Driver using Dual-mode Timers");