clk_pwm
clk_pwm = devm_kzalloc(&pdev->dev, sizeof(*clk_pwm), GFP_KERNEL);
if (!clk_pwm)
if (of_property_read_u32(node, "clock-frequency", &clk_pwm->fixed_rate))
clk_pwm->fixed_rate = div64_u64(NSEC_PER_SEC, pargs.period);
if (!clk_pwm->fixed_rate) {
if (pargs.period != NSEC_PER_SEC / clk_pwm->fixed_rate &&
pargs.period != DIV_ROUND_UP(NSEC_PER_SEC, clk_pwm->fixed_rate)) {
pwm_init_state(pwm, &clk_pwm->state);
pwm_set_relative_duty_cycle(&clk_pwm->state, 1, 2);
clk_pwm->state.enabled = true;
clk_pwm->pwm = pwm;
clk_pwm->hw.init = &init;
ret = devm_clk_hw_register(&pdev->dev, &clk_pwm->hw);
return of_clk_add_hw_provider(node, of_clk_hw_simple_get, &clk_pwm->hw);
static inline struct clk_pwm *to_clk_pwm(struct clk_hw *hw)
return container_of(hw, struct clk_pwm, hw);
struct clk_pwm *clk_pwm = to_clk_pwm(hw);
return pwm_apply_atomic(clk_pwm->pwm, &clk_pwm->state);
struct clk_pwm *clk_pwm = to_clk_pwm(hw);
struct pwm_state state = clk_pwm->state;
pwm_apply_atomic(clk_pwm->pwm, &state);
struct clk_pwm *clk_pwm = to_clk_pwm(hw);
return pwm_apply_might_sleep(clk_pwm->pwm, &clk_pwm->state);
struct clk_pwm *clk_pwm = to_clk_pwm(hw);
pwm_disable(clk_pwm->pwm);
struct clk_pwm *clk_pwm = to_clk_pwm(hw);
return clk_pwm->fixed_rate;
struct clk_pwm *clk_pwm = to_clk_pwm(hw);
ret = pwm_get_state_hw(clk_pwm->pwm, &state);
struct clk_pwm *clk_pwm;
[CLK_PWM] = &clk_pwm.common.hw,
[CLK_PWM] = &clk_pwm.common.hw,
static CV1800_GATE(clk_pwm, clk_pwm_parents,
struct clk *clk_pwm;
clk_pwm = chn[i].clks[SPRD_PWM_CHN_OUTPUT_CLK].clk;
chn[i].clk_rate = clk_get_rate(clk_pwm);