Lines Matching refs:meson

123 	struct meson_pwm *meson = to_meson_pwm(chip);
124 struct meson_pwm_channel *channel = &meson->channels[pwm->hwpwm];
140 struct meson_pwm *meson = to_meson_pwm(chip);
141 struct meson_pwm_channel *channel = &meson->channels[pwm->hwpwm];
146 static int meson_pwm_calc(struct meson_pwm *meson, struct pwm_device *pwm,
149 struct meson_pwm_channel *channel = &meson->channels[pwm->hwpwm];
172 dev_err(meson->chip.dev, "invalid source clock frequency\n");
176 dev_dbg(meson->chip.dev, "fin_freq: %lu Hz\n", fin_freq);
180 dev_err(meson->chip.dev, "unable to get period cnt\n");
184 dev_dbg(meson->chip.dev, "period=%llu cnt=%u\n", period, cnt);
195 dev_dbg(meson->chip.dev, "duty=%llu duty_cnt=%u\n", duty, duty_cnt);
206 static void meson_pwm_enable(struct meson_pwm *meson, struct pwm_device *pwm)
208 struct meson_pwm_channel *channel = &meson->channels[pwm->hwpwm];
218 dev_err(meson->chip.dev, "setting clock rate failed\n");
220 spin_lock_irqsave(&meson->lock, flags);
224 writel(value, meson->base + channel_data->reg_offset);
226 value = readl(meson->base + REG_MISC_AB);
228 writel(value, meson->base + REG_MISC_AB);
230 spin_unlock_irqrestore(&meson->lock, flags);
233 static void meson_pwm_disable(struct meson_pwm *meson, struct pwm_device *pwm)
238 spin_lock_irqsave(&meson->lock, flags);
240 value = readl(meson->base + REG_MISC_AB);
242 writel(value, meson->base + REG_MISC_AB);
244 spin_unlock_irqrestore(&meson->lock, flags);
250 struct meson_pwm *meson = to_meson_pwm(chip);
251 struct meson_pwm_channel *channel = &meson->channels[pwm->hwpwm];
272 meson_pwm_enable(meson, pwm);
274 meson_pwm_disable(meson, pwm);
277 err = meson_pwm_calc(meson, pwm, state);
281 meson_pwm_enable(meson, pwm);
290 struct meson_pwm *meson = to_meson_pwm(chip);
295 channel = &meson->channels[pwm->hwpwm];
307 struct meson_pwm *meson = to_meson_pwm(chip);
315 channel = &meson->channels[pwm->hwpwm];
318 value = readl(meson->base + REG_MISC_AB);
321 value = readl(meson->base + channel_data->reg_offset);
405 .compatible = "amlogic,meson-gxbb-pwm",
409 .compatible = "amlogic,meson-gxbb-ao-pwm",
413 .compatible = "amlogic,meson-axg-ee-pwm",
417 .compatible = "amlogic,meson-axg-ao-pwm",
421 .compatible = "amlogic,meson-g12a-ee-pwm",
425 .compatible = "amlogic,meson-g12a-ao-pwm-ab",
429 .compatible = "amlogic,meson-g12a-ao-pwm-cd",
436 static int meson_pwm_init_channels(struct meson_pwm *meson)
439 struct device *dev = meson->chip.dev;
444 for (i = 0; i < meson->data->num_parents; i++) {
446 mux_parent_data[i].name = meson->data->parent_names[i];
449 for (i = 0; i < meson->chip.npwm; i++) {
450 struct meson_pwm_channel *channel = &meson->channels[i];
460 init.num_parents = meson->data->num_parents;
462 channel->mux.reg = meson->base + REG_MISC_AB;
467 channel->mux.lock = &meson->lock;
487 channel->div.reg = meson->base + REG_MISC_AB;
492 channel->div.lock = &meson->lock;
510 channel->gate.reg = meson->base + REG_MISC_AB;
514 channel->gate.lock = &meson->lock;
535 struct meson_pwm *meson;
538 meson = devm_kzalloc(&pdev->dev, sizeof(*meson), GFP_KERNEL);
539 if (!meson)
542 meson->base = devm_platform_ioremap_resource(pdev, 0);
543 if (IS_ERR(meson->base))
544 return PTR_ERR(meson->base);
546 spin_lock_init(&meson->lock);
547 meson->chip.dev = &pdev->dev;
548 meson->chip.ops = &meson_pwm_ops;
549 meson->chip.npwm = MESON_NUM_PWMS;
551 meson->data = of_device_get_match_data(&pdev->dev);
553 err = meson_pwm_init_channels(meson);
557 err = devm_pwmchip_add(&pdev->dev, &meson->chip);
568 .name = "meson-pwm",