Skip to content

Commit

Permalink
pwm: tegra: Read PWM clock source rate in driver init
Browse files Browse the repository at this point in the history
It is required to know the PWM clock source frequency to calculate the
PWM period.

In driver, the clock source frequency of the PWM does not get change
and, hence, get the clock source frequency in driver init. Get this
values later for period calculation from pwm_config().

This will help in avoiding the clock call for getting clock rate in the
pwm_config() each time.

Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
  • Loading branch information
Laxman Dewangan authored and Thierry Reding committed Apr 13, 2017
1 parent c40c461 commit 46fa8bc
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion drivers/pwm/pwm-tegra.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ struct tegra_pwm_chip {
struct clk *clk;
struct reset_control*rst;

unsigned long clk_rate;

void __iomem *regs;

const struct tegra_pwm_soc *soc;
Expand Down Expand Up @@ -94,7 +96,7 @@ static int tegra_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
* Compute the prescaler value for which (1 << PWM_DUTY_WIDTH)
* cycles at the PWM clock rate will take period_ns nanoseconds.
*/
rate = clk_get_rate(pc->clk) >> PWM_DUTY_WIDTH;
rate = pc->clk_rate >> PWM_DUTY_WIDTH;

/* Consider precision in PWM_SCALE_WIDTH rate calculation */
hz = DIV_ROUND_CLOSEST_ULL(100ULL * NSEC_PER_SEC, period_ns);
Expand Down Expand Up @@ -199,6 +201,9 @@ static int tegra_pwm_probe(struct platform_device *pdev)
if (IS_ERR(pwm->clk))
return PTR_ERR(pwm->clk);

/* Read PWM clock rate from source */
pwm->clk_rate = clk_get_rate(pwm->clk);

pwm->rst = devm_reset_control_get(&pdev->dev, "pwm");
if (IS_ERR(pwm->rst)) {
ret = PTR_ERR(pwm->rst);
Expand Down

0 comments on commit 46fa8bc

Please sign in to comment.