Lines Matching refs:vt8500

3  * drivers/pwm/pwm-vt8500.c
56 static inline void vt8500_pwm_busy_wait(struct vt8500_chip *vt8500, int nr, u8 bitmask)
61 while ((readl(vt8500->base + REG_STATUS) & mask) && --loops)
65 dev_warn(vt8500->chip.dev, "Waiting for status bits 0x%x to clear timed out\n",
72 struct vt8500_chip *vt8500 = to_vt8500_chip(chip);
78 err = clk_enable(vt8500->clk);
84 c = clk_get_rate(vt8500->clk);
97 clk_disable(vt8500->clk);
105 writel(prescale, vt8500->base + REG_SCALAR(pwm->hwpwm));
106 vt8500_pwm_busy_wait(vt8500, pwm->hwpwm, STATUS_SCALAR_UPDATE);
108 writel(pv, vt8500->base + REG_PERIOD(pwm->hwpwm));
109 vt8500_pwm_busy_wait(vt8500, pwm->hwpwm, STATUS_PERIOD_UPDATE);
111 writel(dc, vt8500->base + REG_DUTY(pwm->hwpwm));
112 vt8500_pwm_busy_wait(vt8500, pwm->hwpwm, STATUS_DUTY_UPDATE);
114 val = readl(vt8500->base + REG_CTRL(pwm->hwpwm));
116 writel(val, vt8500->base + REG_CTRL(pwm->hwpwm));
117 vt8500_pwm_busy_wait(vt8500, pwm->hwpwm, STATUS_CTRL_UPDATE);
119 clk_disable(vt8500->clk);
125 struct vt8500_chip *vt8500 = to_vt8500_chip(chip);
129 err = clk_enable(vt8500->clk);
135 val = readl(vt8500->base + REG_CTRL(pwm->hwpwm));
137 writel(val, vt8500->base + REG_CTRL(pwm->hwpwm));
138 vt8500_pwm_busy_wait(vt8500, pwm->hwpwm, STATUS_CTRL_UPDATE);
145 struct vt8500_chip *vt8500 = to_vt8500_chip(chip);
148 val = readl(vt8500->base + REG_CTRL(pwm->hwpwm));
150 writel(val, vt8500->base + REG_CTRL(pwm->hwpwm));
151 vt8500_pwm_busy_wait(vt8500, pwm->hwpwm, STATUS_CTRL_UPDATE);
153 clk_disable(vt8500->clk);
160 struct vt8500_chip *vt8500 = to_vt8500_chip(chip);
163 val = readl(vt8500->base + REG_CTRL(pwm->hwpwm));
170 writel(val, vt8500->base + REG_CTRL(pwm->hwpwm));
171 vt8500_pwm_busy_wait(vt8500, pwm->hwpwm, STATUS_CTRL_UPDATE);
228 { .compatible = "via,vt8500-pwm", },
235 struct vt8500_chip *vt8500;
244 vt8500 = devm_kzalloc(&pdev->dev, sizeof(*vt8500), GFP_KERNEL);
245 if (vt8500 == NULL)
248 vt8500->chip.dev = &pdev->dev;
249 vt8500->chip.ops = &vt8500_pwm_ops;
250 vt8500->chip.npwm = VT8500_NR_PWMS;
252 vt8500->clk = devm_clk_get(&pdev->dev, NULL);
253 if (IS_ERR(vt8500->clk)) {
255 return PTR_ERR(vt8500->clk);
258 vt8500->base = devm_platform_ioremap_resource(pdev, 0);
259 if (IS_ERR(vt8500->base))
260 return PTR_ERR(vt8500->base);
262 ret = clk_prepare(vt8500->clk);
268 ret = pwmchip_add(&vt8500->chip);
271 clk_unprepare(vt8500->clk);
275 platform_set_drvdata(pdev, vt8500);
281 struct vt8500_chip *vt8500 = platform_get_drvdata(pdev);
283 pwmchip_remove(&vt8500->chip);
285 clk_unprepare(vt8500->clk);
292 .name = "vt8500-pwm",