Lines Matching refs:atmel_pwm
110 struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); in atmel_pwm_config() local
123 div = (unsigned long long)clk_get_rate(atmel_pwm->clk) * period_ns; in atmel_pwm_config()
142 ret = clk_enable(atmel_pwm->clk); in atmel_pwm_config()
149 val = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, PWM_CMR); in atmel_pwm_config()
151 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWM_CMR, val); in atmel_pwm_config()
152 atmel_pwm->config(chip, pwm, dty, prd); in atmel_pwm_config()
153 mutex_lock(&atmel_pwm->isr_lock); in atmel_pwm_config()
154 atmel_pwm->updated_pwms |= atmel_pwm_readl(atmel_pwm, PWM_ISR); in atmel_pwm_config()
155 atmel_pwm->updated_pwms &= ~(1 << pwm->hwpwm); in atmel_pwm_config()
156 mutex_unlock(&atmel_pwm->isr_lock); in atmel_pwm_config()
158 clk_disable(atmel_pwm->clk); in atmel_pwm_config()
165 struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); in atmel_pwm_config_v1() local
169 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWMV1_CUPD, dty); in atmel_pwm_config_v1()
171 val = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, PWM_CMR); in atmel_pwm_config_v1()
173 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWM_CMR, val); in atmel_pwm_config_v1()
185 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWMV1_CDTY, dty); in atmel_pwm_config_v1()
186 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWMV1_CPRD, prd); in atmel_pwm_config_v1()
192 struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); in atmel_pwm_config_v2() local
199 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWMV2_CDTYUPD, dty); in atmel_pwm_config_v2()
205 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWMV2_CDTY, dty); in atmel_pwm_config_v2()
206 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWMV2_CPRD, prd); in atmel_pwm_config_v2()
213 struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); in atmel_pwm_set_polarity() local
217 val = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, PWM_CMR); in atmel_pwm_set_polarity()
224 ret = clk_enable(atmel_pwm->clk); in atmel_pwm_set_polarity()
230 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWM_CMR, val); in atmel_pwm_set_polarity()
232 clk_disable(atmel_pwm->clk); in atmel_pwm_set_polarity()
239 struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); in atmel_pwm_enable() local
242 ret = clk_enable(atmel_pwm->clk); in atmel_pwm_enable()
248 atmel_pwm_writel(atmel_pwm, PWM_ENA, 1 << pwm->hwpwm); in atmel_pwm_enable()
255 struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); in atmel_pwm_disable() local
262 mutex_lock(&atmel_pwm->isr_lock); in atmel_pwm_disable()
263 atmel_pwm->updated_pwms |= atmel_pwm_readl(atmel_pwm, PWM_ISR); in atmel_pwm_disable()
265 while (!(atmel_pwm->updated_pwms & (1 << pwm->hwpwm)) && in atmel_pwm_disable()
268 atmel_pwm->updated_pwms |= atmel_pwm_readl(atmel_pwm, PWM_ISR); in atmel_pwm_disable()
271 mutex_unlock(&atmel_pwm->isr_lock); in atmel_pwm_disable()
272 atmel_pwm_writel(atmel_pwm, PWM_DIS, 1 << pwm->hwpwm); in atmel_pwm_disable()
274 clk_disable(atmel_pwm->clk); in atmel_pwm_disable()
347 struct atmel_pwm_chip *atmel_pwm; in atmel_pwm_probe() local
355 atmel_pwm = devm_kzalloc(&pdev->dev, sizeof(*atmel_pwm), GFP_KERNEL); in atmel_pwm_probe()
356 if (!atmel_pwm) in atmel_pwm_probe()
360 atmel_pwm->base = devm_ioremap_resource(&pdev->dev, res); in atmel_pwm_probe()
361 if (IS_ERR(atmel_pwm->base)) in atmel_pwm_probe()
362 return PTR_ERR(atmel_pwm->base); in atmel_pwm_probe()
364 atmel_pwm->clk = devm_clk_get(&pdev->dev, NULL); in atmel_pwm_probe()
365 if (IS_ERR(atmel_pwm->clk)) in atmel_pwm_probe()
366 return PTR_ERR(atmel_pwm->clk); in atmel_pwm_probe()
368 ret = clk_prepare(atmel_pwm->clk); in atmel_pwm_probe()
374 atmel_pwm->chip.dev = &pdev->dev; in atmel_pwm_probe()
375 atmel_pwm->chip.ops = &atmel_pwm_ops; in atmel_pwm_probe()
378 atmel_pwm->chip.of_xlate = of_pwm_xlate_with_flags; in atmel_pwm_probe()
379 atmel_pwm->chip.of_pwm_n_cells = 3; in atmel_pwm_probe()
382 atmel_pwm->chip.base = -1; in atmel_pwm_probe()
383 atmel_pwm->chip.npwm = 4; in atmel_pwm_probe()
384 atmel_pwm->chip.can_sleep = true; in atmel_pwm_probe()
385 atmel_pwm->config = data->config; in atmel_pwm_probe()
386 atmel_pwm->updated_pwms = 0; in atmel_pwm_probe()
387 mutex_init(&atmel_pwm->isr_lock); in atmel_pwm_probe()
389 ret = pwmchip_add(&atmel_pwm->chip); in atmel_pwm_probe()
395 platform_set_drvdata(pdev, atmel_pwm); in atmel_pwm_probe()
400 clk_unprepare(atmel_pwm->clk); in atmel_pwm_probe()
406 struct atmel_pwm_chip *atmel_pwm = platform_get_drvdata(pdev); in atmel_pwm_remove() local
408 clk_unprepare(atmel_pwm->clk); in atmel_pwm_remove()
409 mutex_destroy(&atmel_pwm->isr_lock); in atmel_pwm_remove()
411 return pwmchip_remove(&atmel_pwm->chip); in atmel_pwm_remove()