|
@@ -59,6 +59,7 @@ static int clk_pwm_probe(struct platform_device *pdev)
|
|
|
struct clk_init_data init;
|
|
|
struct clk_pwm *clk_pwm;
|
|
|
struct pwm_device *pwm;
|
|
|
+ struct pwm_args pargs;
|
|
|
const char *clk_name;
|
|
|
struct clk *clk;
|
|
|
int ret;
|
|
@@ -71,22 +72,28 @@ static int clk_pwm_probe(struct platform_device *pdev)
|
|
|
if (IS_ERR(pwm))
|
|
|
return PTR_ERR(pwm);
|
|
|
|
|
|
- if (!pwm->period) {
|
|
|
+ pwm_get_args(pwm, &pargs);
|
|
|
+ if (!pargs.period) {
|
|
|
dev_err(&pdev->dev, "invalid PWM period\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
if (of_property_read_u32(node, "clock-frequency", &clk_pwm->fixed_rate))
|
|
|
- clk_pwm->fixed_rate = NSEC_PER_SEC / pwm->period;
|
|
|
+ clk_pwm->fixed_rate = NSEC_PER_SEC / pargs.period;
|
|
|
|
|
|
- if (pwm->period != NSEC_PER_SEC / clk_pwm->fixed_rate &&
|
|
|
- pwm->period != DIV_ROUND_UP(NSEC_PER_SEC, 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)) {
|
|
|
dev_err(&pdev->dev,
|
|
|
"clock-frequency does not match PWM period\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- ret = pwm_config(pwm, (pwm->period + 1) >> 1, pwm->period);
|
|
|
+ /*
|
|
|
+ * FIXME: pwm_apply_args() should be removed when switching to the
|
|
|
+ * atomic PWM API.
|
|
|
+ */
|
|
|
+ pwm_apply_args(pwm);
|
|
|
+ ret = pwm_config(pwm, (pargs.period + 1) >> 1, pargs.period);
|
|
|
if (ret < 0)
|
|
|
return ret;
|
|
|
|