From patchwork Tue Dec 1 22:55:39 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Wahren X-Patchwork-Id: 551053 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40EB314029E for ; Wed, 2 Dec 2015 09:56:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757286AbbLAW4p (ORCPT ); Tue, 1 Dec 2015 17:56:45 -0500 Received: from mout.kundenserver.de ([217.72.192.75]:57772 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757287AbbLAW4o (ORCPT ); Tue, 1 Dec 2015 17:56:44 -0500 Received: from localhost.localdomain ([95.91.39.67]) by mrelayeu.kundenserver.de (mreue102) with ESMTPSA (Nemesis) id 0MF3Up-1a5ojI1VJj-00GHAw; Tue, 01 Dec 2015 23:56:03 +0100 From: Stefan Wahren To: Thierry Reding , Stephen Warren , Lee Jones , Eric Anholt Cc: Remi Pommarel , linux-pwm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rpi-kernel@lists.infradead.org, Stefan Wahren Subject: [PATCH 1/3] pwm: bcm2835: calculate scaler in pwm_config Date: Tue, 1 Dec 2015 22:55:39 +0000 Message-Id: <1449010541-3767-2-git-send-email-stefan.wahren@i2se.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1449010541-3767-1-git-send-email-stefan.wahren@i2se.com> References: <1449010541-3767-1-git-send-email-stefan.wahren@i2se.com> X-Provags-ID: V03:K0:ztFTzistsXCBJqai9Mr2aNN5a3cVJQFzThpSDFR9iFt56eohQAD gqbbfsPAkGBAuDkL4kW0QnQUmxk2bvvu2bQejJsoLiqiJzx7xaDDuD91nVPxz/IN9deBl5R ChxnqS/AZnjp6Xa0LM4rHkgrOFI21wLLZBXZiSeCu43OBXIOm/aHvaqWtFLtrkQmIbj44H8 xvYOZXM4kagWTh/A0nXQg== X-UI-Out-Filterresults: notjunk:1; V01:K0:OLH3xfvhrSM=:SG8yemerrGqvf7XR735KIa /CRxETuelR+PdUzQKKIUlWEK9q0b/b/eu3XSCskBfvLd3ij/VVTgRidvEKBH8Awan0vzTm9Y7 2OO/zksJ169y95TczuiCwqA3F0G3NbVXYPL7yXHCmqged6THhD3h7R58rGfQ1qKQEI4cguecZ ekNEw3w4rF6AgfLVNPmyidwNzg6qDtQ/yebzzC3ExygPvD99cbc6/Ssu1vhw5XZg9zuoOhF9I Ir57RjwhxBxWjH0jC6WmtswNTjh+pf7CxyzKneuy2CVC6/Unw7pwsxnl2VicW0YTUJzmTi8tY gREVxK9qnIzv+qAnZ6Km2dWQVXzBfybvk16sI9jBAouiAH0WENgInKgjmof6hP26YFkNf2HC1 B5Y1u69WY8D7CMYQs80Wp0FGZJnG98M/AI3syB6VD075WYHg2g3gAsoEqWf6nM+hGrIv4H3FM V+p4fGmLD3hLmJdx8KvgnWMXrVG784/SzrfSjY/1Ef9+UuTRBceEpg/GetLJ99W0lLvG1KcyE Raj+LCK4nwBek8XZODWg08sn+i0SsGy+NBnnT2hyY7+LqG3qLhnXJI6NwjqGof2HIi0g1hTD4 hHwGei64X9/4//sStqJKOA2dBz19/DMFjEYk+a0c0tCmZ3zsoI33qxHyh9XjYQpbtZG8+2jOQ 1EayEwqlKSbjbaNFP+1z9WIY8znnNFN8cTKwoVXt+wGZ3avhbpblXDPqz0og3eY6x96w= Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org Currently pwm-bcm2835 assumes a fixed clock rate and stores the resulting scaler in the driver structure. But with the upcoming PWM clock support for clk-bcm2835 the rate could change. So calculate the scaler in pwm_config. Signed-off-by: Stefan Wahren --- drivers/pwm/pwm-bcm2835.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/drivers/pwm/pwm-bcm2835.c b/drivers/pwm/pwm-bcm2835.c index b4c7f95..174cca9 100644 --- a/drivers/pwm/pwm-bcm2835.c +++ b/drivers/pwm/pwm-bcm2835.c @@ -29,7 +29,6 @@ struct bcm2835_pwm { struct pwm_chip chip; struct device *dev; - unsigned long scaler; void __iomem *base; struct clk *clk; }; @@ -66,6 +65,7 @@ static int bcm2835_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, int duty_ns, int period_ns) { struct bcm2835_pwm *pc = to_bcm2835_pwm(chip); + unsigned long scaler = NSEC_PER_SEC / clk_get_rate(pc->clk); if (period_ns <= MIN_PERIOD) { dev_err(pc->dev, "period %d not supported, minimum %d\n", @@ -73,8 +73,8 @@ static int bcm2835_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, return -EINVAL; } - writel(duty_ns / pc->scaler, pc->base + DUTY(pwm->hwpwm)); - writel(period_ns / pc->scaler, pc->base + PERIOD(pwm->hwpwm)); + writel(duty_ns / scaler, pc->base + DUTY(pwm->hwpwm)); + writel(period_ns / scaler, pc->base + PERIOD(pwm->hwpwm)); return 0; } @@ -156,8 +156,6 @@ static int bcm2835_pwm_probe(struct platform_device *pdev) if (ret) return ret; - pc->scaler = NSEC_PER_SEC / clk_get_rate(pc->clk); - pc->chip.dev = &pdev->dev; pc->chip.ops = &bcm2835_pwm_ops; pc->chip.npwm = 2;