Lines Matching refs:pwm
18 #include <linux/pwm.h>
72 static int berlin_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
80 return pwm_set_chip_data(pwm, channel);
83 static void berlin_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm)
85 struct berlin_pwm_channel *channel = pwm_get_chip_data(pwm);
93 struct berlin_pwm_chip *pwm = to_berlin_pwm_chip(chip);
98 cycles = clk_get_rate(pwm->clk);
115 value = berlin_pwm_readl(pwm, pwm_dev->hwpwm, BERLIN_PWM_CONTROL);
120 berlin_pwm_writel(pwm, pwm_dev->hwpwm, value, BERLIN_PWM_CONTROL);
122 berlin_pwm_writel(pwm, pwm_dev->hwpwm, duty, BERLIN_PWM_DUTY);
123 berlin_pwm_writel(pwm, pwm_dev->hwpwm, period, BERLIN_PWM_TCNT);
132 struct berlin_pwm_chip *pwm = to_berlin_pwm_chip(chip);
135 value = berlin_pwm_readl(pwm, pwm_dev->hwpwm, BERLIN_PWM_CONTROL);
142 berlin_pwm_writel(pwm, pwm_dev->hwpwm, value, BERLIN_PWM_CONTROL);
149 struct berlin_pwm_chip *pwm = to_berlin_pwm_chip(chip);
152 value = berlin_pwm_readl(pwm, pwm_dev->hwpwm, BERLIN_PWM_EN);
154 berlin_pwm_writel(pwm, pwm_dev->hwpwm, value, BERLIN_PWM_EN);
162 struct berlin_pwm_chip *pwm = to_berlin_pwm_chip(chip);
165 value = berlin_pwm_readl(pwm, pwm_dev->hwpwm, BERLIN_PWM_EN);
167 berlin_pwm_writel(pwm, pwm_dev->hwpwm, value, BERLIN_PWM_EN);
181 { .compatible = "marvell,berlin-pwm" },
188 struct berlin_pwm_chip *pwm;
192 pwm = devm_kzalloc(&pdev->dev, sizeof(*pwm), GFP_KERNEL);
193 if (!pwm)
197 pwm->base = devm_ioremap_resource(&pdev->dev, res);
198 if (IS_ERR(pwm->base))
199 return PTR_ERR(pwm->base);
201 pwm->clk = devm_clk_get(&pdev->dev, NULL);
202 if (IS_ERR(pwm->clk))
203 return PTR_ERR(pwm->clk);
205 ret = clk_prepare_enable(pwm->clk);
209 pwm->chip.dev = &pdev->dev;
210 pwm->chip.ops = &berlin_pwm_ops;
211 pwm->chip.base = -1;
212 pwm->chip.npwm = 4;
213 pwm->chip.of_xlate = of_pwm_xlate_with_flags;
214 pwm->chip.of_pwm_n_cells = 3;
216 ret = pwmchip_add(&pwm->chip);
219 clk_disable_unprepare(pwm->clk);
223 platform_set_drvdata(pdev, pwm);
230 struct berlin_pwm_chip *pwm = platform_get_drvdata(pdev);
233 ret = pwmchip_remove(&pwm->chip);
234 clk_disable_unprepare(pwm->clk);
242 struct berlin_pwm_chip *pwm = dev_get_drvdata(dev);
245 for (i = 0; i < pwm->chip.npwm; i++) {
248 channel = pwm_get_chip_data(&pwm->chip.pwms[i]);
252 channel->enable = berlin_pwm_readl(pwm, i, BERLIN_PWM_ENABLE);
253 channel->ctrl = berlin_pwm_readl(pwm, i, BERLIN_PWM_CONTROL);
254 channel->duty = berlin_pwm_readl(pwm, i, BERLIN_PWM_DUTY);
255 channel->tcnt = berlin_pwm_readl(pwm, i, BERLIN_PWM_TCNT);
258 clk_disable_unprepare(pwm->clk);
265 struct berlin_pwm_chip *pwm = dev_get_drvdata(dev);
269 ret = clk_prepare_enable(pwm->clk);
273 for (i = 0; i < pwm->chip.npwm; i++) {
276 channel = pwm_get_chip_data(&pwm->chip.pwms[i]);
280 berlin_pwm_writel(pwm, i, channel->ctrl, BERLIN_PWM_CONTROL);
281 berlin_pwm_writel(pwm, i, channel->duty, BERLIN_PWM_DUTY);
282 berlin_pwm_writel(pwm, i, channel->tcnt, BERLIN_PWM_TCNT);
283 berlin_pwm_writel(pwm, i, channel->enable, BERLIN_PWM_ENABLE);
297 .name = "berlin-pwm",