aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/clk/clk-pwm.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/clk/clk-pwm.c b/drivers/clk/clk-pwm.c
index 883045814dac..1630a1f085f7 100644
--- a/drivers/clk/clk-pwm.c
+++ b/drivers/clk/clk-pwm.c
@@ -59,6 +59,7 @@ static int clk_pwm_probe(struct platform_device *pdev)
59 struct clk_init_data init; 59 struct clk_init_data init;
60 struct clk_pwm *clk_pwm; 60 struct clk_pwm *clk_pwm;
61 struct pwm_device *pwm; 61 struct pwm_device *pwm;
62 struct pwm_args pargs;
62 const char *clk_name; 63 const char *clk_name;
63 struct clk *clk; 64 struct clk *clk;
64 int ret; 65 int ret;
@@ -71,22 +72,28 @@ static int clk_pwm_probe(struct platform_device *pdev)
71 if (IS_ERR(pwm)) 72 if (IS_ERR(pwm))
72 return PTR_ERR(pwm); 73 return PTR_ERR(pwm);
73 74
74 if (!pwm->period) { 75 pwm_get_args(pwm, &pargs);
76 if (!pargs.period) {
75 dev_err(&pdev->dev, "invalid PWM period\n"); 77 dev_err(&pdev->dev, "invalid PWM period\n");
76 return -EINVAL; 78 return -EINVAL;
77 } 79 }
78 80
79 if (of_property_read_u32(node, "clock-frequency", &clk_pwm->fixed_rate)) 81 if (of_property_read_u32(node, "clock-frequency", &clk_pwm->fixed_rate))
80 clk_pwm->fixed_rate = NSEC_PER_SEC / pwm->period; 82 clk_pwm->fixed_rate = NSEC_PER_SEC / pargs.period;
81 83
82 if (pwm->period != NSEC_PER_SEC / clk_pwm->fixed_rate && 84 if (pargs.period != NSEC_PER_SEC / clk_pwm->fixed_rate &&
83 pwm->period != DIV_ROUND_UP(NSEC_PER_SEC, clk_pwm->fixed_rate)) { 85 pargs.period != DIV_ROUND_UP(NSEC_PER_SEC, clk_pwm->fixed_rate)) {
84 dev_err(&pdev->dev, 86 dev_err(&pdev->dev,
85 "clock-frequency does not match PWM period\n"); 87 "clock-frequency does not match PWM period\n");
86 return -EINVAL; 88 return -EINVAL;
87 } 89 }
88 90
89 ret = pwm_config(pwm, (pwm->period + 1) >> 1, pwm->period); 91 /*
92 * FIXME: pwm_apply_args() should be removed when switching to the
93 * atomic PWM API.
94 */
95 pwm_apply_args(pwm);
96 ret = pwm_config(pwm, (pargs.period + 1) >> 1, pargs.period);
90 if (ret < 0) 97 if (ret < 0)
91 return ret; 98 return ret;
92 99