Lines Matching refs:pwm
99 static int sun4i_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, in sun4i_pwm_config() argument
157 if (sun4i_pwm->data->has_rdy && (val & PWM_RDY(pwm->hwpwm))) { in sun4i_pwm_config()
163 clk_gate = val & BIT_CH(PWM_CLK_GATING, pwm->hwpwm); in sun4i_pwm_config()
165 val &= ~BIT_CH(PWM_CLK_GATING, pwm->hwpwm); in sun4i_pwm_config()
170 val &= ~BIT_CH(PWM_PRESCAL_MASK, pwm->hwpwm); in sun4i_pwm_config()
171 val |= BIT_CH(prescaler, pwm->hwpwm); in sun4i_pwm_config()
175 sun4i_pwm_writel(sun4i_pwm, val, PWM_CH_PRD(pwm->hwpwm)); in sun4i_pwm_config()
189 static int sun4i_pwm_set_polarity(struct pwm_chip *chip, struct pwm_device *pwm, in sun4i_pwm_set_polarity() argument
206 val &= ~BIT_CH(PWM_ACT_STATE, pwm->hwpwm); in sun4i_pwm_set_polarity()
208 val |= BIT_CH(PWM_ACT_STATE, pwm->hwpwm); in sun4i_pwm_set_polarity()
218 static int sun4i_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm) in sun4i_pwm_enable() argument
232 val |= BIT_CH(PWM_EN, pwm->hwpwm); in sun4i_pwm_enable()
233 val |= BIT_CH(PWM_CLK_GATING, pwm->hwpwm); in sun4i_pwm_enable()
240 static void sun4i_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm) in sun4i_pwm_disable() argument
247 val &= ~BIT_CH(PWM_EN, pwm->hwpwm); in sun4i_pwm_disable()
248 val &= ~BIT_CH(PWM_CLK_GATING, pwm->hwpwm); in sun4i_pwm_disable()
308 struct sun4i_pwm_chip *pwm; in sun4i_pwm_probe() local
316 pwm = devm_kzalloc(&pdev->dev, sizeof(*pwm), GFP_KERNEL); in sun4i_pwm_probe()
317 if (!pwm) in sun4i_pwm_probe()
321 pwm->base = devm_ioremap_resource(&pdev->dev, res); in sun4i_pwm_probe()
322 if (IS_ERR(pwm->base)) in sun4i_pwm_probe()
323 return PTR_ERR(pwm->base); in sun4i_pwm_probe()
325 pwm->clk = devm_clk_get(&pdev->dev, NULL); in sun4i_pwm_probe()
326 if (IS_ERR(pwm->clk)) in sun4i_pwm_probe()
327 return PTR_ERR(pwm->clk); in sun4i_pwm_probe()
329 pwm->data = match->data; in sun4i_pwm_probe()
330 pwm->chip.dev = &pdev->dev; in sun4i_pwm_probe()
331 pwm->chip.ops = &sun4i_pwm_ops; in sun4i_pwm_probe()
332 pwm->chip.base = -1; in sun4i_pwm_probe()
333 pwm->chip.npwm = pwm->data->npwm; in sun4i_pwm_probe()
334 pwm->chip.can_sleep = true; in sun4i_pwm_probe()
335 pwm->chip.of_xlate = of_pwm_xlate_with_flags; in sun4i_pwm_probe()
336 pwm->chip.of_pwm_n_cells = 3; in sun4i_pwm_probe()
338 spin_lock_init(&pwm->ctrl_lock); in sun4i_pwm_probe()
340 ret = pwmchip_add(&pwm->chip); in sun4i_pwm_probe()
346 platform_set_drvdata(pdev, pwm); in sun4i_pwm_probe()
348 ret = clk_prepare_enable(pwm->clk); in sun4i_pwm_probe()
354 val = sun4i_pwm_readl(pwm, PWM_CTRL_REG); in sun4i_pwm_probe()
355 for (i = 0; i < pwm->chip.npwm; i++) in sun4i_pwm_probe()
357 pwm->chip.pwms[i].polarity = PWM_POLARITY_INVERSED; in sun4i_pwm_probe()
358 clk_disable_unprepare(pwm->clk); in sun4i_pwm_probe()
363 pwmchip_remove(&pwm->chip); in sun4i_pwm_probe()
369 struct sun4i_pwm_chip *pwm = platform_get_drvdata(pdev); in sun4i_pwm_remove() local
371 return pwmchip_remove(&pwm->chip); in sun4i_pwm_remove()