Lines Matching defs:ddata
79 struct pwm_sifive_ddata *ddata = pwm_sifive_chip_to_ddata(chip);
81 mutex_lock(&ddata->lock);
82 ddata->user_count++;
83 mutex_unlock(&ddata->lock);
90 struct pwm_sifive_ddata *ddata = pwm_sifive_chip_to_ddata(chip);
92 mutex_lock(&ddata->lock);
93 ddata->user_count--;
94 mutex_unlock(&ddata->lock);
97 /* Called holding ddata->lock */
98 static void pwm_sifive_update_clock(struct pwm_sifive_ddata *ddata,
112 scale_pow = div64_ul(ddata->approx_period * (u64)rate, NSEC_PER_SEC);
117 writel(val, ddata->regs + PWM_SIFIVE_PWMCFG);
121 ddata->real_period = DIV_ROUND_UP_ULL(num, rate);
122 dev_dbg(ddata->parent,
123 "New real_period = %u ns\n", ddata->real_period);
129 struct pwm_sifive_ddata *ddata = pwm_sifive_chip_to_ddata(chip);
132 inactive = readl(ddata->regs + PWM_SIFIVE_PWMCMP(pwm->hwpwm));
141 val = readl(ddata->regs + PWM_SIFIVE_PWMCFG);
145 state->period = ddata->real_period;
146 state->duty_cycle = DIV_ROUND_UP_ULL((u64)duty * ddata->real_period,
156 struct pwm_sifive_ddata *ddata = pwm_sifive_chip_to_ddata(chip);
189 mutex_lock(&ddata->lock);
190 if (state->period != ddata->approx_period) {
197 if (ddata->user_count != 1 && ddata->approx_period) {
198 mutex_unlock(&ddata->lock);
201 ddata->approx_period = state->period;
202 pwm_sifive_update_clock(ddata, clk_get_rate(ddata->clk));
204 mutex_unlock(&ddata->lock);
212 ret = clk_enable(ddata->clk);
219 writel(inactive, ddata->regs + PWM_SIFIVE_PWMCMP(pwm->hwpwm));
222 clk_disable(ddata->clk);
238 struct pwm_sifive_ddata *ddata =
242 mutex_lock(&ddata->lock);
243 pwm_sifive_update_clock(ddata, ndata->new_rate);
244 mutex_unlock(&ddata->lock);
253 struct pwm_sifive_ddata *ddata;
259 chip = devm_pwmchip_alloc(dev, 4, sizeof(*ddata));
263 ddata = pwm_sifive_chip_to_ddata(chip);
264 ddata->parent = dev;
265 mutex_init(&ddata->lock);
268 ddata->regs = devm_platform_ioremap_resource(pdev, 0);
269 if (IS_ERR(ddata->regs))
270 return PTR_ERR(ddata->regs);
272 ddata->clk = devm_clk_get_prepared(dev, NULL);
273 if (IS_ERR(ddata->clk))
274 return dev_err_probe(dev, PTR_ERR(ddata->clk),
277 ret = clk_enable(ddata->clk);
283 val = readl(ddata->regs + PWM_SIFIVE_PWMCFG);
288 val = readl(ddata->regs + PWM_SIFIVE_PWMCMP(i));
298 ret = clk_enable(ddata->clk);
306 clk_disable(ddata->clk);
311 ddata->notifier.notifier_call = pwm_sifive_clock_notifier;
312 ret = clk_notifier_register(ddata->clk, &ddata->notifier);
330 clk_notifier_unregister(ddata->clk, &ddata->notifier);
333 clk_disable(ddata->clk);
343 struct pwm_sifive_ddata *ddata = pwm_sifive_chip_to_ddata(chip);
348 clk_notifier_unregister(ddata->clk, &ddata->notifier);
353 clk_disable(ddata->clk);