Lines Matching refs:ddata

62 	struct pwm_sifive_ddata *ddata = pwm_sifive_chip_to_ddata(chip);
64 mutex_lock(&ddata->lock);
65 ddata->user_count++;
66 mutex_unlock(&ddata->lock);
73 struct pwm_sifive_ddata *ddata = pwm_sifive_chip_to_ddata(chip);
75 mutex_lock(&ddata->lock);
76 ddata->user_count--;
77 mutex_unlock(&ddata->lock);
80 /* Called holding ddata->lock */
81 static void pwm_sifive_update_clock(struct pwm_sifive_ddata *ddata,
95 scale_pow = div64_ul(ddata->approx_period * (u64)rate, NSEC_PER_SEC);
100 writel(val, ddata->regs + PWM_SIFIVE_PWMCFG);
104 ddata->real_period = div64_ul(num, rate);
105 dev_dbg(ddata->parent,
106 "New real_period = %u ns\n", ddata->real_period);
112 struct pwm_sifive_ddata *ddata = pwm_sifive_chip_to_ddata(chip);
115 duty = readl(ddata->regs + PWM_SIFIVE_PWMCMP(pwm->hwpwm));
119 val = readl(ddata->regs + PWM_SIFIVE_PWMCFG);
123 state->period = ddata->real_period;
125 (u64)duty * ddata->real_period >> PWM_SIFIVE_CMPWIDTH;
134 struct pwm_sifive_ddata *ddata = pwm_sifive_chip_to_ddata(chip);
163 mutex_lock(&ddata->lock);
164 if (state->period != ddata->approx_period) {
171 if (ddata->user_count != 1 && ddata->approx_period) {
172 mutex_unlock(&ddata->lock);
175 ddata->approx_period = state->period;
176 pwm_sifive_update_clock(ddata, clk_get_rate(ddata->clk));
178 mutex_unlock(&ddata->lock);
186 ret = clk_enable(ddata->clk);
193 writel(frac, ddata->regs + PWM_SIFIVE_PWMCMP(pwm->hwpwm));
196 clk_disable(ddata->clk);
212 struct pwm_sifive_ddata *ddata =
216 mutex_lock(&ddata->lock);
217 pwm_sifive_update_clock(ddata, ndata->new_rate);
218 mutex_unlock(&ddata->lock);
227 struct pwm_sifive_ddata *ddata;
233 chip = devm_pwmchip_alloc(dev, 4, sizeof(*ddata));
237 ddata = pwm_sifive_chip_to_ddata(chip);
238 ddata->parent = dev;
239 mutex_init(&ddata->lock);
242 ddata->regs = devm_platform_ioremap_resource(pdev, 0);
243 if (IS_ERR(ddata->regs))
244 return PTR_ERR(ddata->regs);
246 ddata->clk = devm_clk_get_prepared(dev, NULL);
247 if (IS_ERR(ddata->clk))
248 return dev_err_probe(dev, PTR_ERR(ddata->clk),
251 ret = clk_enable(ddata->clk);
257 val = readl(ddata->regs + PWM_SIFIVE_PWMCFG);
262 val = readl(ddata->regs + PWM_SIFIVE_PWMCMP(i));
272 ret = clk_enable(ddata->clk);
280 clk_disable(ddata->clk);
285 ddata->notifier.notifier_call = pwm_sifive_clock_notifier;
286 ret = clk_notifier_register(ddata->clk, &ddata->notifier);
304 clk_notifier_unregister(ddata->clk, &ddata->notifier);
307 clk_disable(ddata->clk);
317 struct pwm_sifive_ddata *ddata = pwm_sifive_chip_to_ddata(chip);
322 clk_notifier_unregister(ddata->clk, &ddata->notifier);
327 clk_disable(ddata->clk);