Lines Matching refs:rz_mtu3_pwm

132 rz_mtu3_get_channel(struct rz_mtu3_pwm_chip *rz_mtu3_pwm, u32 hwpwm)  in rz_mtu3_get_channel()  argument
134 struct rz_mtu3_pwm_channel *priv = rz_mtu3_pwm->channel_data; in rz_mtu3_get_channel()
145 static bool rz_mtu3_pwm_is_ch_enabled(struct rz_mtu3_pwm_chip *rz_mtu3_pwm, in rz_mtu3_pwm_is_ch_enabled() argument
152 priv = rz_mtu3_get_channel(rz_mtu3_pwm, hwpwm); in rz_mtu3_pwm_is_ch_enabled()
167 struct rz_mtu3_pwm_chip *rz_mtu3_pwm = to_rz_mtu3_pwm_chip(chip); in rz_mtu3_pwm_request() local
172 priv = rz_mtu3_get_channel(rz_mtu3_pwm, pwm->hwpwm); in rz_mtu3_pwm_request()
173 ch = priv - rz_mtu3_pwm->channel_data; in rz_mtu3_pwm_request()
175 mutex_lock(&rz_mtu3_pwm->lock); in rz_mtu3_pwm_request()
181 if (!rz_mtu3_pwm->user_count[ch]) { in rz_mtu3_pwm_request()
184 mutex_unlock(&rz_mtu3_pwm->lock); in rz_mtu3_pwm_request()
189 rz_mtu3_pwm->user_count[ch]++; in rz_mtu3_pwm_request()
190 mutex_unlock(&rz_mtu3_pwm->lock); in rz_mtu3_pwm_request()
197 struct rz_mtu3_pwm_chip *rz_mtu3_pwm = to_rz_mtu3_pwm_chip(chip); in rz_mtu3_pwm_free() local
201 priv = rz_mtu3_get_channel(rz_mtu3_pwm, pwm->hwpwm); in rz_mtu3_pwm_free()
202 ch = priv - rz_mtu3_pwm->channel_data; in rz_mtu3_pwm_free()
204 mutex_lock(&rz_mtu3_pwm->lock); in rz_mtu3_pwm_free()
205 rz_mtu3_pwm->user_count[ch]--; in rz_mtu3_pwm_free()
206 if (!rz_mtu3_pwm->user_count[ch]) in rz_mtu3_pwm_free()
209 mutex_unlock(&rz_mtu3_pwm->lock); in rz_mtu3_pwm_free()
214 struct rz_mtu3_pwm_chip *rz_mtu3_pwm = to_rz_mtu3_pwm_chip(chip); in rz_mtu3_pwm_enable() local
224 priv = rz_mtu3_get_channel(rz_mtu3_pwm, pwm->hwpwm); in rz_mtu3_pwm_enable()
225 ch = priv - rz_mtu3_pwm->channel_data; in rz_mtu3_pwm_enable()
234 mutex_lock(&rz_mtu3_pwm->lock); in rz_mtu3_pwm_enable()
235 if (!rz_mtu3_pwm->enable_count[ch]) in rz_mtu3_pwm_enable()
238 rz_mtu3_pwm->enable_count[ch]++; in rz_mtu3_pwm_enable()
239 mutex_unlock(&rz_mtu3_pwm->lock); in rz_mtu3_pwm_enable()
246 struct rz_mtu3_pwm_chip *rz_mtu3_pwm = to_rz_mtu3_pwm_chip(chip); in rz_mtu3_pwm_disable() local
250 priv = rz_mtu3_get_channel(rz_mtu3_pwm, pwm->hwpwm); in rz_mtu3_pwm_disable()
251 ch = priv - rz_mtu3_pwm->channel_data; in rz_mtu3_pwm_disable()
259 mutex_lock(&rz_mtu3_pwm->lock); in rz_mtu3_pwm_disable()
260 rz_mtu3_pwm->enable_count[ch]--; in rz_mtu3_pwm_disable()
261 if (!rz_mtu3_pwm->enable_count[ch]) in rz_mtu3_pwm_disable()
264 mutex_unlock(&rz_mtu3_pwm->lock); in rz_mtu3_pwm_disable()
272 struct rz_mtu3_pwm_chip *rz_mtu3_pwm = to_rz_mtu3_pwm_chip(chip); in rz_mtu3_pwm_get_state() local
279 state->enabled = rz_mtu3_pwm_is_ch_enabled(rz_mtu3_pwm, pwm->hwpwm); in rz_mtu3_pwm_get_state()
286 priv = rz_mtu3_get_channel(rz_mtu3_pwm, pwm->hwpwm); in rz_mtu3_pwm_get_state()
299 state->period = DIV_ROUND_UP_ULL(tmp, rz_mtu3_pwm->rate); in rz_mtu3_pwm_get_state()
301 state->duty_cycle = DIV_ROUND_UP_ULL(tmp, rz_mtu3_pwm->rate); in rz_mtu3_pwm_get_state()
321 struct rz_mtu3_pwm_chip *rz_mtu3_pwm = to_rz_mtu3_pwm_chip(chip); in rz_mtu3_pwm_config() local
330 priv = rz_mtu3_get_channel(rz_mtu3_pwm, pwm->hwpwm); in rz_mtu3_pwm_config()
331 ch = priv - rz_mtu3_pwm->channel_data; in rz_mtu3_pwm_config()
333 period_cycles = mul_u64_u32_div(state->period, rz_mtu3_pwm->rate, in rz_mtu3_pwm_config()
335 prescale = rz_mtu3_pwm_calculate_prescale(rz_mtu3_pwm, period_cycles); in rz_mtu3_pwm_config()
343 if (rz_mtu3_pwm->enable_count[ch] > 1) { in rz_mtu3_pwm_config()
344 if (rz_mtu3_pwm->prescale[ch] > prescale) in rz_mtu3_pwm_config()
347 prescale = rz_mtu3_pwm->prescale[ch]; in rz_mtu3_pwm_config()
352 duty_cycles = mul_u64_u32_div(state->duty_cycle, rz_mtu3_pwm->rate, in rz_mtu3_pwm_config()
371 if (rz_mtu3_pwm->prescale[ch] != prescale && rz_mtu3_pwm->enable_count[ch]) in rz_mtu3_pwm_config()
386 if (rz_mtu3_pwm->prescale[ch] != prescale) { in rz_mtu3_pwm_config()
392 rz_mtu3_pwm->prescale[ch] = prescale; in rz_mtu3_pwm_config()
394 if (rz_mtu3_pwm->enable_count[ch]) in rz_mtu3_pwm_config()
408 struct rz_mtu3_pwm_chip *rz_mtu3_pwm = to_rz_mtu3_pwm_chip(chip); in rz_mtu3_pwm_apply() local
422 mutex_lock(&rz_mtu3_pwm->lock); in rz_mtu3_pwm_apply()
424 mutex_unlock(&rz_mtu3_pwm->lock); in rz_mtu3_pwm_apply()
444 struct rz_mtu3_pwm_chip *rz_mtu3_pwm = to_rz_mtu3_pwm_chip(chip); in rz_mtu3_pwm_pm_runtime_suspend() local
446 clk_disable_unprepare(rz_mtu3_pwm->clk); in rz_mtu3_pwm_pm_runtime_suspend()
454 struct rz_mtu3_pwm_chip *rz_mtu3_pwm = to_rz_mtu3_pwm_chip(chip); in rz_mtu3_pwm_pm_runtime_resume() local
456 return clk_prepare_enable(rz_mtu3_pwm->clk); in rz_mtu3_pwm_pm_runtime_resume()
466 struct rz_mtu3_pwm_chip *rz_mtu3_pwm = to_rz_mtu3_pwm_chip(chip); in rz_mtu3_pwm_pm_disable() local
468 clk_rate_exclusive_put(rz_mtu3_pwm->clk); in rz_mtu3_pwm_pm_disable()
476 struct rz_mtu3_pwm_chip *rz_mtu3_pwm; in rz_mtu3_pwm_probe() local
483 sizeof(*rz_mtu3_pwm)); in rz_mtu3_pwm_probe()
486 rz_mtu3_pwm = to_rz_mtu3_pwm_chip(chip); in rz_mtu3_pwm_probe()
488 rz_mtu3_pwm->clk = parent_ddata->clk; in rz_mtu3_pwm_probe()
494 rz_mtu3_pwm->channel_data[j].mtu = &parent_ddata->channels[i]; in rz_mtu3_pwm_probe()
495 rz_mtu3_pwm->channel_data[j].mtu->dev = dev; in rz_mtu3_pwm_probe()
496 rz_mtu3_pwm->channel_data[j].map = &channel_map[j]; in rz_mtu3_pwm_probe()
500 mutex_init(&rz_mtu3_pwm->lock); in rz_mtu3_pwm_probe()
502 ret = clk_prepare_enable(rz_mtu3_pwm->clk); in rz_mtu3_pwm_probe()
506 clk_rate_exclusive_get(rz_mtu3_pwm->clk); in rz_mtu3_pwm_probe()
508 rz_mtu3_pwm->rate = clk_get_rate(rz_mtu3_pwm->clk); in rz_mtu3_pwm_probe()
513 if (rz_mtu3_pwm->rate > NSEC_PER_SEC) { in rz_mtu3_pwm_probe()
515 clk_rate_exclusive_put(rz_mtu3_pwm->clk); in rz_mtu3_pwm_probe()
536 clk_disable_unprepare(rz_mtu3_pwm->clk); in rz_mtu3_pwm_probe()