Lines Matching full:pwm
8 * Links to reference manuals for the supported PWM chips can be found in
29 #include <linux/pwm.h>
32 /* The following is global registers for PWM controller */
40 /* The following register is PWM channel related registers */
50 /* The following registers for PWM v1 */
55 /* The following registers for PWM v2 */
87 * pending we delay disabling the PWM until the new configuration is
227 static void atmel_pwm_update_cdty(struct pwm_chip *chip, struct pwm_device *pwm, in atmel_pwm_update_cdty() argument
235 val = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, PWM_CMR); in atmel_pwm_update_cdty()
237 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWM_CMR, val); in atmel_pwm_update_cdty()
240 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, in atmel_pwm_update_cdty()
242 atmel_pwm_set_pending(atmel_pwm, pwm->hwpwm); in atmel_pwm_update_cdty()
246 struct pwm_device *pwm, in atmel_pwm_set_cprd_cdty() argument
251 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, in atmel_pwm_set_cprd_cdty()
253 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, in atmel_pwm_set_cprd_cdty()
257 static void atmel_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm, in atmel_pwm_disable() argument
263 atmel_pwm_wait_nonpending(atmel_pwm, pwm->hwpwm); in atmel_pwm_disable()
265 atmel_pwm_writel(atmel_pwm, PWM_DIS, 1 << pwm->hwpwm); in atmel_pwm_disable()
268 * Wait for the PWM channel disable operation to be effective before in atmel_pwm_disable()
273 while ((atmel_pwm_readl(atmel_pwm, PWM_SR) & (1 << pwm->hwpwm)) && in atmel_pwm_disable()
281 static int atmel_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, in atmel_pwm_apply() argument
292 if (pwm->state.enabled && in atmel_pwm_apply()
293 pwm->state.polarity == state->polarity && in atmel_pwm_apply()
294 pwm->state.period == state->period) { in atmel_pwm_apply()
295 u32 cmr = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, PWM_CMR); in atmel_pwm_apply()
297 cprd = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, in atmel_pwm_apply()
302 atmel_pwm_update_cdty(chip, pwm, cdty); in atmel_pwm_apply()
316 if (pwm->state.enabled) { in atmel_pwm_apply()
317 atmel_pwm_disable(chip, pwm, false); in atmel_pwm_apply()
327 val = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, PWM_CMR); in atmel_pwm_apply()
333 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWM_CMR, val); in atmel_pwm_apply()
334 atmel_pwm_set_cprd_cdty(chip, pwm, cprd, cdty); in atmel_pwm_apply()
335 atmel_pwm_writel(atmel_pwm, PWM_ENA, 1 << pwm->hwpwm); in atmel_pwm_apply()
336 } else if (pwm->state.enabled) { in atmel_pwm_apply()
337 atmel_pwm_disable(chip, pwm, true); in atmel_pwm_apply()
343 static int atmel_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm, in atmel_pwm_get_state() argument
350 cmr = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, PWM_CMR); in atmel_pwm_get_state()
352 if (sr & (1 << pwm->hwpwm)) { in atmel_pwm_get_state()
359 cprd = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, in atmel_pwm_get_state()
366 atmel_pwm_wait_nonpending(atmel_pwm, pwm->hwpwm); in atmel_pwm_get_state()
368 cdty = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, in atmel_pwm_get_state()
433 .compatible = "atmel,at91sam9rl-pwm",
436 .compatible = "atmel,sama5d3-pwm",
439 .compatible = "atmel,sama5d2-pwm",
442 .compatible = "microchip,sam9x60-pwm",
470 "failed to enable clock for pwm %pe\n", in atmel_pwm_enable_clk_if_on()
509 "failed to get prepared PWM clock\n"); in atmel_pwm_probe()
519 dev_err_probe(&pdev->dev, ret, "failed to add PWM chip\n"); in atmel_pwm_probe()
533 .name = "atmel-pwm",
540 MODULE_ALIAS("platform:atmel-pwm");
542 MODULE_DESCRIPTION("Atmel PWM driver");