Lines Matching refs:pc
181 static void configure_polarity(struct ehrpwm_pwm_chip *pc, int chan)
196 if (pc->polarity[chan] == PWM_POLARITY_INVERSED)
204 if (pc->polarity[chan] == PWM_POLARITY_INVERSED)
211 ehrpwm_modify(pc->mmio_base, aqctl_reg, aqctl_mask, aqctl_val);
221 struct ehrpwm_pwm_chip *pc = to_ehrpwm_pwm_chip(chip);
230 c = pc->clk_rate;
239 c = pc->clk_rate;
250 if (pc->period_cycles[i] &&
251 (pc->period_cycles[i] != period_cycles)) {
266 pc->period_cycles[pwm->hwpwm] = period_cycles;
278 ehrpwm_modify(pc->mmio_base, TBCTL, TBCTL_CLKDIV_MASK, tb_divval);
285 ehrpwm_modify(pc->mmio_base, TBCTL, TBCTL_PRDLD_MASK, TBCTL_PRDLD_SHDW);
287 ehrpwm_write(pc->mmio_base, TBPRD, period_cycles);
290 ehrpwm_modify(pc->mmio_base, TBCTL, TBCTL_CTRMODE_MASK,
300 ehrpwm_write(pc->mmio_base, cmp_reg, duty_cycles);
311 struct ehrpwm_pwm_chip *pc = to_ehrpwm_pwm_chip(chip);
314 pc->polarity[pwm->hwpwm] = polarity;
321 struct ehrpwm_pwm_chip *pc = to_ehrpwm_pwm_chip(chip);
338 ehrpwm_modify(pc->mmio_base, AQSFRC, AQSFRC_RLDCSF_MASK,
341 ehrpwm_modify(pc->mmio_base, AQCSFRC, aqcsfrc_mask, aqcsfrc_val);
344 configure_polarity(pc, pwm->hwpwm);
347 ret = clk_enable(pc->tbclk);
350 dev_name(pc->chip.dev), ret);
359 struct ehrpwm_pwm_chip *pc = to_ehrpwm_pwm_chip(chip);
372 ehrpwm_modify(pc->mmio_base, AQSFRC, AQSFRC_RLDCSF_MASK,
374 ehrpwm_modify(pc->mmio_base, AQCSFRC, aqcsfrc_mask, aqcsfrc_val);
379 ehrpwm_modify(pc->mmio_base, AQSFRC, AQSFRC_RLDCSF_MASK,
382 ehrpwm_modify(pc->mmio_base, AQCSFRC, aqcsfrc_mask, aqcsfrc_val);
385 clk_disable(pc->tbclk);
393 struct ehrpwm_pwm_chip *pc = to_ehrpwm_pwm_chip(chip);
401 pc->period_cycles[pwm->hwpwm] = 0;
423 struct ehrpwm_pwm_chip *pc;
428 pc = devm_kzalloc(&pdev->dev, sizeof(*pc), GFP_KERNEL);
429 if (!pc)
445 pc->clk_rate = clk_get_rate(clk);
446 if (!pc->clk_rate) {
451 pc->chip.dev = &pdev->dev;
452 pc->chip.ops = &ehrpwm_pwm_ops;
453 pc->chip.of_xlate = of_pwm_xlate_with_flags;
454 pc->chip.of_pwm_n_cells = 3;
455 pc->chip.base = -1;
456 pc->chip.npwm = NUM_PWM_CHANNEL;
459 pc->mmio_base = devm_ioremap_resource(&pdev->dev, r);
460 if (IS_ERR(pc->mmio_base))
461 return PTR_ERR(pc->mmio_base);
464 pc->tbclk = devm_clk_get(&pdev->dev, "tbclk");
465 if (IS_ERR(pc->tbclk)) {
467 return PTR_ERR(pc->tbclk);
470 ret = clk_prepare(pc->tbclk);
476 ret = pwmchip_add(&pc->chip);
482 platform_set_drvdata(pdev, pc);
488 clk_unprepare(pc->tbclk);
495 struct ehrpwm_pwm_chip *pc = platform_get_drvdata(pdev);
497 clk_unprepare(pc->tbclk);
501 return pwmchip_remove(&pc->chip);
505 static void ehrpwm_pwm_save_context(struct ehrpwm_pwm_chip *pc)
507 pm_runtime_get_sync(pc->chip.dev);
509 pc->ctx.tbctl = ehrpwm_read(pc->mmio_base, TBCTL);
510 pc->ctx.tbprd = ehrpwm_read(pc->mmio_base, TBPRD);
511 pc->ctx.cmpa = ehrpwm_read(pc->mmio_base, CMPA);
512 pc->ctx.cmpb = ehrpwm_read(pc->mmio_base, CMPB);
513 pc->ctx.aqctla = ehrpwm_read(pc->mmio_base, AQCTLA);
514 pc->ctx.aqctlb = ehrpwm_read(pc->mmio_base, AQCTLB);
515 pc->ctx.aqsfrc = ehrpwm_read(pc->mmio_base, AQSFRC);
516 pc->ctx.aqcsfrc = ehrpwm_read(pc->mmio_base, AQCSFRC);
518 pm_runtime_put_sync(pc->chip.dev);
521 static void ehrpwm_pwm_restore_context(struct ehrpwm_pwm_chip *pc)
523 ehrpwm_write(pc->mmio_base, TBPRD, pc->ctx.tbprd);
524 ehrpwm_write(pc->mmio_base, CMPA, pc->ctx.cmpa);
525 ehrpwm_write(pc->mmio_base, CMPB, pc->ctx.cmpb);
526 ehrpwm_write(pc->mmio_base, AQCTLA, pc->ctx.aqctla);
527 ehrpwm_write(pc->mmio_base, AQCTLB, pc->ctx.aqctlb);
528 ehrpwm_write(pc->mmio_base, AQSFRC, pc->ctx.aqsfrc);
529 ehrpwm_write(pc->mmio_base, AQCSFRC, pc->ctx.aqcsfrc);
530 ehrpwm_write(pc->mmio_base, TBCTL, pc->ctx.tbctl);
535 struct ehrpwm_pwm_chip *pc = dev_get_drvdata(dev);
538 ehrpwm_pwm_save_context(pc);
540 for (i = 0; i < pc->chip.npwm; i++) {
541 struct pwm_device *pwm = &pc->chip.pwms[i];
555 struct ehrpwm_pwm_chip *pc = dev_get_drvdata(dev);
558 for (i = 0; i < pc->chip.npwm; i++) {
559 struct pwm_device *pwm = &pc->chip.pwms[i];
568 ehrpwm_pwm_restore_context(pc);