Lines Matching refs:pwm
98 static int sun4i_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, in sun4i_pwm_config() argument
156 if (sun4i_pwm->data->has_rdy && (val & PWM_RDY(pwm->hwpwm))) { in sun4i_pwm_config()
162 clk_gate = val & BIT_CH(PWM_CLK_GATING, pwm->hwpwm); in sun4i_pwm_config()
164 val &= ~BIT_CH(PWM_CLK_GATING, pwm->hwpwm); in sun4i_pwm_config()
169 val &= ~BIT_CH(PWM_PRESCAL_MASK, pwm->hwpwm); in sun4i_pwm_config()
170 val |= BIT_CH(prescaler, pwm->hwpwm); in sun4i_pwm_config()
174 sun4i_pwm_writel(sun4i_pwm, val, PWM_CH_PRD(pwm->hwpwm)); in sun4i_pwm_config()
188 static int sun4i_pwm_set_polarity(struct pwm_chip *chip, struct pwm_device *pwm, in sun4i_pwm_set_polarity() argument
205 val &= ~BIT_CH(PWM_ACT_STATE, pwm->hwpwm); in sun4i_pwm_set_polarity()
207 val |= BIT_CH(PWM_ACT_STATE, pwm->hwpwm); in sun4i_pwm_set_polarity()
217 static int sun4i_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm) in sun4i_pwm_enable() argument
231 val |= BIT_CH(PWM_EN, pwm->hwpwm); in sun4i_pwm_enable()
232 val |= BIT_CH(PWM_CLK_GATING, pwm->hwpwm); in sun4i_pwm_enable()
239 static void sun4i_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm) in sun4i_pwm_disable() argument
246 val &= ~BIT_CH(PWM_EN, pwm->hwpwm); in sun4i_pwm_disable()
247 val &= ~BIT_CH(PWM_CLK_GATING, pwm->hwpwm); in sun4i_pwm_disable()
287 struct sun4i_pwm_chip *pwm; in sun4i_pwm_probe() local
295 pwm = devm_kzalloc(&pdev->dev, sizeof(*pwm), GFP_KERNEL); in sun4i_pwm_probe()
296 if (!pwm) in sun4i_pwm_probe()
300 pwm->base = devm_ioremap_resource(&pdev->dev, res); in sun4i_pwm_probe()
301 if (IS_ERR(pwm->base)) in sun4i_pwm_probe()
302 return PTR_ERR(pwm->base); in sun4i_pwm_probe()
304 pwm->clk = devm_clk_get(&pdev->dev, NULL); in sun4i_pwm_probe()
305 if (IS_ERR(pwm->clk)) in sun4i_pwm_probe()
306 return PTR_ERR(pwm->clk); in sun4i_pwm_probe()
308 pwm->chip.dev = &pdev->dev; in sun4i_pwm_probe()
309 pwm->chip.ops = &sun4i_pwm_ops; in sun4i_pwm_probe()
310 pwm->chip.base = -1; in sun4i_pwm_probe()
311 pwm->chip.npwm = 2; in sun4i_pwm_probe()
312 pwm->chip.can_sleep = true; in sun4i_pwm_probe()
313 pwm->chip.of_xlate = of_pwm_xlate_with_flags; in sun4i_pwm_probe()
314 pwm->chip.of_pwm_n_cells = 3; in sun4i_pwm_probe()
315 pwm->data = match->data; in sun4i_pwm_probe()
317 spin_lock_init(&pwm->ctrl_lock); in sun4i_pwm_probe()
319 ret = pwmchip_add(&pwm->chip); in sun4i_pwm_probe()
325 platform_set_drvdata(pdev, pwm); in sun4i_pwm_probe()
327 ret = clk_prepare_enable(pwm->clk); in sun4i_pwm_probe()
333 val = sun4i_pwm_readl(pwm, PWM_CTRL_REG); in sun4i_pwm_probe()
334 for (i = 0; i < pwm->chip.npwm; i++) in sun4i_pwm_probe()
336 pwm->chip.pwms[i].polarity = PWM_POLARITY_INVERSED; in sun4i_pwm_probe()
337 clk_disable_unprepare(pwm->clk); in sun4i_pwm_probe()
342 pwmchip_remove(&pwm->chip); in sun4i_pwm_probe()
348 struct sun4i_pwm_chip *pwm = platform_get_drvdata(pdev); in sun4i_pwm_remove() local
350 return pwmchip_remove(&pwm->chip); in sun4i_pwm_remove()