Lines Matching refs:pwm_chip
36 struct pwm_chip chip;
66 static inline struct hibvt_pwm_chip *to_hibvt_pwm_chip(struct pwm_chip *chip)
83 static void hibvt_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
91 static void hibvt_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)
99 static void hibvt_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
117 static void hibvt_pwm_set_polarity(struct pwm_chip *chip,
131 static void hibvt_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
152 static int hibvt_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
193 struct hibvt_pwm_chip *pwm_chip;
198 pwm_chip = devm_kzalloc(&pdev->dev, sizeof(*pwm_chip), GFP_KERNEL);
199 if (pwm_chip == NULL)
202 pwm_chip->clk = devm_clk_get(&pdev->dev, NULL);
203 if (IS_ERR(pwm_chip->clk)) {
205 PTR_ERR(pwm_chip->clk));
206 return PTR_ERR(pwm_chip->clk);
209 pwm_chip->chip.ops = &hibvt_pwm_ops;
210 pwm_chip->chip.dev = &pdev->dev;
211 pwm_chip->chip.base = -1;
212 pwm_chip->chip.npwm = soc->num_pwms;
213 pwm_chip->chip.of_xlate = of_pwm_xlate_with_flags;
214 pwm_chip->chip.of_pwm_n_cells = 3;
215 pwm_chip->soc = soc;
218 pwm_chip->base = devm_ioremap_resource(&pdev->dev, res);
219 if (IS_ERR(pwm_chip->base))
220 return PTR_ERR(pwm_chip->base);
222 ret = clk_prepare_enable(pwm_chip->clk);
226 pwm_chip->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
227 if (IS_ERR(pwm_chip->rstc)) {
228 clk_disable_unprepare(pwm_chip->clk);
229 return PTR_ERR(pwm_chip->rstc);
232 reset_control_assert(pwm_chip->rstc);
234 reset_control_deassert(pwm_chip->rstc);
236 ret = pwmchip_add(&pwm_chip->chip);
238 clk_disable_unprepare(pwm_chip->clk);
242 for (i = 0; i < pwm_chip->chip.npwm; i++) {
243 hibvt_pwm_set_bits(pwm_chip->base, PWM_CTRL_ADDR(i),
247 platform_set_drvdata(pdev, pwm_chip);
254 struct hibvt_pwm_chip *pwm_chip;
256 pwm_chip = platform_get_drvdata(pdev);
258 reset_control_assert(pwm_chip->rstc);
260 reset_control_deassert(pwm_chip->rstc);
262 clk_disable_unprepare(pwm_chip->clk);
264 return pwmchip_remove(&pwm_chip->chip);