Lines Matching refs:sun4i_pwm
116 struct sun4i_pwm_chip *sun4i_pwm = to_sun4i_pwm_chip(chip); in sun4i_pwm_get_state() local
121 clk_rate = clk_get_rate(sun4i_pwm->clk); in sun4i_pwm_get_state()
123 val = sun4i_pwm_readl(sun4i_pwm, PWM_CTRL_REG); in sun4i_pwm_get_state()
131 sun4i_pwm->data->has_direct_mod_clk_output) { in sun4i_pwm_get_state()
140 sun4i_pwm->data->has_prescaler_bypass) in sun4i_pwm_get_state()
159 val = sun4i_pwm_readl(sun4i_pwm, PWM_CH_PRD(pwm->hwpwm)); in sun4i_pwm_get_state()
168 static int sun4i_pwm_calculate(struct sun4i_pwm_chip *sun4i_pwm, in sun4i_pwm_calculate() argument
176 clk_rate = clk_get_rate(sun4i_pwm->clk); in sun4i_pwm_calculate()
178 *bypass = sun4i_pwm->data->has_direct_mod_clk_output && in sun4i_pwm_calculate()
188 if (sun4i_pwm->data->has_prescaler_bypass) { in sun4i_pwm_calculate()
234 struct sun4i_pwm_chip *sun4i_pwm = to_sun4i_pwm_chip(chip); in sun4i_pwm_apply() local
245 ret = clk_prepare_enable(sun4i_pwm->clk); in sun4i_pwm_apply()
252 ret = sun4i_pwm_calculate(sun4i_pwm, state, &duty, &period, &prescaler, in sun4i_pwm_apply()
257 clk_disable_unprepare(sun4i_pwm->clk); in sun4i_pwm_apply()
261 spin_lock(&sun4i_pwm->ctrl_lock); in sun4i_pwm_apply()
262 ctrl = sun4i_pwm_readl(sun4i_pwm, PWM_CTRL_REG); in sun4i_pwm_apply()
264 if (sun4i_pwm->data->has_direct_mod_clk_output) { in sun4i_pwm_apply()
268 sun4i_pwm_writel(sun4i_pwm, ctrl, PWM_CTRL_REG); in sun4i_pwm_apply()
269 spin_unlock(&sun4i_pwm->ctrl_lock); in sun4i_pwm_apply()
279 sun4i_pwm_writel(sun4i_pwm, ctrl, PWM_CTRL_REG); in sun4i_pwm_apply()
286 sun4i_pwm_writel(sun4i_pwm, val, PWM_CH_PRD(pwm->hwpwm)); in sun4i_pwm_apply()
287 sun4i_pwm->next_period[pwm->hwpwm] = jiffies + in sun4i_pwm_apply()
300 sun4i_pwm_writel(sun4i_pwm, ctrl, PWM_CTRL_REG); in sun4i_pwm_apply()
302 spin_unlock(&sun4i_pwm->ctrl_lock); in sun4i_pwm_apply()
309 if (time_before(now, sun4i_pwm->next_period[pwm->hwpwm])) { in sun4i_pwm_apply()
310 delay_us = jiffies_to_usecs(sun4i_pwm->next_period[pwm->hwpwm] - in sun4i_pwm_apply()
318 spin_lock(&sun4i_pwm->ctrl_lock); in sun4i_pwm_apply()
319 ctrl = sun4i_pwm_readl(sun4i_pwm, PWM_CTRL_REG); in sun4i_pwm_apply()
322 sun4i_pwm_writel(sun4i_pwm, ctrl, PWM_CTRL_REG); in sun4i_pwm_apply()
323 spin_unlock(&sun4i_pwm->ctrl_lock); in sun4i_pwm_apply()
325 clk_disable_unprepare(sun4i_pwm->clk); in sun4i_pwm_apply()