Lines Matching refs:pwm

3  * drivers/pwm/pwm-vt8500.c
16 #include <linux/pwm.h>
28 #define REG_CTRL(pwm) (((pwm) << 4) + 0x00)
29 #define REG_SCALAR(pwm) (((pwm) << 4) + 0x04)
30 #define REG_PERIOD(pwm) (((pwm) << 4) + 0x08)
31 #define REG_DUTY(pwm) (((pwm) << 4) + 0x0C)
69 static int vt8500_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
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);
123 static int vt8500_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
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);
143 static void vt8500_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)
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);
157 struct pwm_device *pwm,
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);
176 static int vt8500_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
180 bool enabled = pwm->state.enabled;
182 if (state->polarity != pwm->state.polarity) {
188 vt8500_pwm_disable(chip, pwm);
193 err = vt8500_pwm_set_polarity(chip, pwm, state->polarity);
200 vt8500_pwm_disable(chip, pwm);
207 * pwm->state.period && state->duty_cycle == pwm->state.duty_cycle
210 * pwm->state might not be configured in hardware.
212 err = vt8500_pwm_config(pwm->chip, pwm, state->duty_cycle, state->period);
217 err = vt8500_pwm_enable(chip, pwm);
228 { .compatible = "via,vt8500-pwm", },
292 .name = "vt8500-pwm",