diff options
-rw-r--r-- | drivers/clk/clk-pwm.c | 17 |
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 | ||