Lines Matching refs:pc

122 static int sti_pwm_get_prescale(struct sti_pwm_chip *pc, unsigned long period,
125 struct sti_pwm_compat_data *cdata = pc->cdata;
130 clk_rate = clk_get_rate(pc->pwm_clk);
132 dev_err(pc->dev, "failed to get clock rate\n");
166 struct sti_pwm_chip *pc = to_sti_pwmchip(chip);
167 struct sti_pwm_compat_data *cdata = pc->cdata;
169 struct pwm_device *cur = pc->cur;
170 struct device *dev = pc->dev;
174 ncfg = hweight_long(pc->configured);
195 ret = clk_enable(pc->pwm_clk);
199 ret = clk_enable(pc->cpt_clk);
204 ret = sti_pwm_get_prescale(pc, period_ns, &prescale);
210 ret = regmap_field_write(pc->prescale_low, value);
216 ret = regmap_field_write(pc->prescale_high, value);
229 ret = regmap_write(pc->regmap, PWM_OUT_VAL(pwm->hwpwm), value);
233 ret = regmap_field_write(pc->pwm_cpt_int_en, 0);
235 set_bit(pwm->hwpwm, &pc->configured);
236 pc->cur = pwm;
245 clk_disable(pc->pwm_clk);
246 clk_disable(pc->cpt_clk);
252 struct sti_pwm_chip *pc = to_sti_pwmchip(chip);
253 struct device *dev = pc->dev;
260 mutex_lock(&pc->sti_pwm_lock);
262 if (!pc->en_count) {
263 ret = clk_enable(pc->pwm_clk);
267 ret = clk_enable(pc->cpt_clk);
271 ret = regmap_field_write(pc->pwm_out_en, 1);
279 pc->en_count++;
282 mutex_unlock(&pc->sti_pwm_lock);
288 struct sti_pwm_chip *pc = to_sti_pwmchip(chip);
290 mutex_lock(&pc->sti_pwm_lock);
292 if (--pc->en_count) {
293 mutex_unlock(&pc->sti_pwm_lock);
297 regmap_field_write(pc->pwm_out_en, 0);
299 clk_disable(pc->pwm_clk);
300 clk_disable(pc->cpt_clk);
302 mutex_unlock(&pc->sti_pwm_lock);
307 struct sti_pwm_chip *pc = to_sti_pwmchip(chip);
309 clear_bit(pwm->hwpwm, &pc->configured);
315 struct sti_pwm_chip *pc = to_sti_pwmchip(chip);
316 struct sti_pwm_compat_data *cdata = pc->cdata;
318 struct device *dev = pc->dev;
332 regmap_write(pc->regmap, PWM_CPT_EDGE(pwm->hwpwm), CPT_EDGE_RISING);
333 regmap_field_write(pc->pwm_cpt_int_en, BIT(pwm->hwpwm));
336 ret = regmap_field_write(pc->pwm_cpt_en, 1);
346 regmap_write(pc->regmap, PWM_CPT_EDGE(pwm->hwpwm), CPT_EDGE_DISABLED);
371 effective_ticks = clk_get_rate(pc->cpt_clk);
388 regmap_field_write(pc->pwm_cpt_en, 0);
397 struct sti_pwm_chip *pc = to_sti_pwmchip(chip);
398 struct sti_pwm_compat_data *cdata = pc->cdata;
399 struct device *dev = pc->dev;
436 struct sti_pwm_chip *pc = data;
437 struct device *dev = pc->dev;
444 ret = regmap_field_read(pc->pwm_cpt_int_stat, &cpt_int_stat);
451 ddata = &pc->cdata->ddata[devicenum];
469 regmap_read(pc->regmap,
476 regmap_read(pc->regmap, PWM_CPT_EDGE(devicenum), &reg);
478 regmap_write(pc->regmap, PWM_CPT_EDGE(devicenum), reg);
484 regmap_write(pc->regmap,
500 regmap_write(pc->regmap, PWM_INT_ACK, PWM_INT_ACK_MASK);
505 static int sti_pwm_probe_dt(struct sti_pwm_chip *pc)
507 struct device *dev = pc->dev;
509 struct sti_pwm_compat_data *cdata = pc->cdata;
513 pc->prescale_low = devm_regmap_field_alloc(dev, pc->regmap,
515 if (IS_ERR(pc->prescale_low))
516 return PTR_ERR(pc->prescale_low);
518 pc->prescale_high = devm_regmap_field_alloc(dev, pc->regmap,
520 if (IS_ERR(pc->prescale_high))
521 return PTR_ERR(pc->prescale_high);
523 pc->pwm_out_en = devm_regmap_field_alloc(dev, pc->regmap,
525 if (IS_ERR(pc->pwm_out_en))
526 return PTR_ERR(pc->pwm_out_en);
528 pc->pwm_cpt_en = devm_regmap_field_alloc(dev, pc->regmap,
530 if (IS_ERR(pc->pwm_cpt_en))
531 return PTR_ERR(pc->pwm_cpt_en);
533 pc->pwm_cpt_int_en = devm_regmap_field_alloc(dev, pc->regmap,
535 if (IS_ERR(pc->pwm_cpt_int_en))
536 return PTR_ERR(pc->pwm_cpt_int_en);
538 pc->pwm_cpt_int_stat = devm_regmap_field_alloc(dev, pc->regmap,
540 if (PTR_ERR_OR_ZERO(pc->pwm_cpt_int_stat))
541 return PTR_ERR(pc->pwm_cpt_int_stat);
561 struct sti_pwm_chip *pc;
578 chip = devm_pwmchip_alloc(dev, max(pwm_num_devs, cpt_num_devs), sizeof(*pc));
581 pc = to_sti_pwmchip(chip);
587 pc->mmio = devm_platform_ioremap_resource(pdev, 0);
588 if (IS_ERR(pc->mmio))
589 return PTR_ERR(pc->mmio);
591 pc->regmap = devm_regmap_init_mmio(dev, pc->mmio,
593 if (IS_ERR(pc->regmap))
594 return PTR_ERR(pc->regmap);
601 pdev->name, pc);
617 pc->cdata = cdata;
618 pc->dev = dev;
619 pc->en_count = 0;
620 mutex_init(&pc->sti_pwm_lock);
622 ret = sti_pwm_probe_dt(pc);
627 pc->pwm_clk = of_clk_get_by_name(dev->of_node, "pwm");
628 if (IS_ERR(pc->pwm_clk)) {
630 return PTR_ERR(pc->pwm_clk);
633 ret = clk_prepare(pc->pwm_clk);
641 pc->cpt_clk = of_clk_get_by_name(dev->of_node, "capture");
642 if (IS_ERR(pc->cpt_clk)) {
644 return PTR_ERR(pc->cpt_clk);
647 ret = clk_prepare(pc->cpt_clk);
669 clk_unprepare(pc->pwm_clk);
670 clk_unprepare(pc->cpt_clk);
682 struct sti_pwm_chip *pc = to_sti_pwmchip(chip);
686 clk_unprepare(pc->pwm_clk);
687 clk_unprepare(pc->cpt_clk);