Lines Matching refs:atmel_pwm
116 struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); in atmel_pwm_calculate_cprd_and_pres() local
120 cycles *= clk_get_rate(atmel_pwm->clk); in atmel_pwm_calculate_cprd_and_pres()
123 for (*pres = 0; cycles > atmel_pwm->data->cfg.max_period; cycles >>= 1) in atmel_pwm_calculate_cprd_and_pres()
126 if (*pres > atmel_pwm->data->cfg.max_pres) { in atmel_pwm_calculate_cprd_and_pres()
149 struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); in atmel_pwm_update_cdty() local
152 if (atmel_pwm->data->regs.duty_upd == in atmel_pwm_update_cdty()
153 atmel_pwm->data->regs.period_upd) { in atmel_pwm_update_cdty()
154 val = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, PWM_CMR); in atmel_pwm_update_cdty()
156 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWM_CMR, val); in atmel_pwm_update_cdty()
159 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, in atmel_pwm_update_cdty()
160 atmel_pwm->data->regs.duty_upd, cdty); in atmel_pwm_update_cdty()
167 struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); in atmel_pwm_set_cprd_cdty() local
169 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, in atmel_pwm_set_cprd_cdty()
170 atmel_pwm->data->regs.duty, cdty); in atmel_pwm_set_cprd_cdty()
171 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, in atmel_pwm_set_cprd_cdty()
172 atmel_pwm->data->regs.period, cprd); in atmel_pwm_set_cprd_cdty()
178 struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); in atmel_pwm_disable() local
185 mutex_lock(&atmel_pwm->isr_lock); in atmel_pwm_disable()
186 atmel_pwm->updated_pwms |= atmel_pwm_readl(atmel_pwm, PWM_ISR); in atmel_pwm_disable()
188 while (!(atmel_pwm->updated_pwms & (1 << pwm->hwpwm)) && in atmel_pwm_disable()
191 atmel_pwm->updated_pwms |= atmel_pwm_readl(atmel_pwm, PWM_ISR); in atmel_pwm_disable()
194 mutex_unlock(&atmel_pwm->isr_lock); in atmel_pwm_disable()
195 atmel_pwm_writel(atmel_pwm, PWM_DIS, 1 << pwm->hwpwm); in atmel_pwm_disable()
203 while ((atmel_pwm_readl(atmel_pwm, PWM_SR) & (1 << pwm->hwpwm)) && in atmel_pwm_disable()
208 clk_disable(atmel_pwm->clk); in atmel_pwm_disable()
214 struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); in atmel_pwm_apply() local
226 cprd = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, in atmel_pwm_apply()
227 atmel_pwm->data->regs.period); in atmel_pwm_apply()
246 ret = clk_enable(atmel_pwm->clk); in atmel_pwm_apply()
254 val = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, PWM_CMR); in atmel_pwm_apply()
260 atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWM_CMR, val); in atmel_pwm_apply()
262 mutex_lock(&atmel_pwm->isr_lock); in atmel_pwm_apply()
263 atmel_pwm->updated_pwms |= atmel_pwm_readl(atmel_pwm, PWM_ISR); in atmel_pwm_apply()
264 atmel_pwm->updated_pwms &= ~(1 << pwm->hwpwm); in atmel_pwm_apply()
265 mutex_unlock(&atmel_pwm->isr_lock); in atmel_pwm_apply()
266 atmel_pwm_writel(atmel_pwm, PWM_ENA, 1 << pwm->hwpwm); in atmel_pwm_apply()
342 struct atmel_pwm_chip *atmel_pwm; in atmel_pwm_probe() local
346 atmel_pwm = devm_kzalloc(&pdev->dev, sizeof(*atmel_pwm), GFP_KERNEL); in atmel_pwm_probe()
347 if (!atmel_pwm) in atmel_pwm_probe()
350 mutex_init(&atmel_pwm->isr_lock); in atmel_pwm_probe()
351 atmel_pwm->data = of_device_get_match_data(&pdev->dev); in atmel_pwm_probe()
352 atmel_pwm->updated_pwms = 0; in atmel_pwm_probe()
355 atmel_pwm->base = devm_ioremap_resource(&pdev->dev, res); in atmel_pwm_probe()
356 if (IS_ERR(atmel_pwm->base)) in atmel_pwm_probe()
357 return PTR_ERR(atmel_pwm->base); in atmel_pwm_probe()
359 atmel_pwm->clk = devm_clk_get(&pdev->dev, NULL); in atmel_pwm_probe()
360 if (IS_ERR(atmel_pwm->clk)) in atmel_pwm_probe()
361 return PTR_ERR(atmel_pwm->clk); in atmel_pwm_probe()
363 ret = clk_prepare(atmel_pwm->clk); in atmel_pwm_probe()
369 atmel_pwm->chip.dev = &pdev->dev; in atmel_pwm_probe()
370 atmel_pwm->chip.ops = &atmel_pwm_ops; in atmel_pwm_probe()
371 atmel_pwm->chip.of_xlate = of_pwm_xlate_with_flags; in atmel_pwm_probe()
372 atmel_pwm->chip.of_pwm_n_cells = 3; in atmel_pwm_probe()
373 atmel_pwm->chip.base = -1; in atmel_pwm_probe()
374 atmel_pwm->chip.npwm = 4; in atmel_pwm_probe()
376 ret = pwmchip_add(&atmel_pwm->chip); in atmel_pwm_probe()
382 platform_set_drvdata(pdev, atmel_pwm); in atmel_pwm_probe()
387 clk_unprepare(atmel_pwm->clk); in atmel_pwm_probe()
393 struct atmel_pwm_chip *atmel_pwm = platform_get_drvdata(pdev); in atmel_pwm_remove() local
395 clk_unprepare(atmel_pwm->clk); in atmel_pwm_remove()
396 mutex_destroy(&atmel_pwm->isr_lock); in atmel_pwm_remove()
398 return pwmchip_remove(&atmel_pwm->chip); in atmel_pwm_remove()