From: Minkyu Kang <mk7.kang@samsung.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 3/9 v2] Exynos: pwm: Fix two bugs in the exynos pwm configuration code
Date: Thu, 28 Mar 2013 14:53:11 +0900 [thread overview]
Message-ID: <5153DAC7.3070000@samsung.com> (raw)
In-Reply-To: <1362049164-10297-4-git-send-email-akshay.s@samsung.com>
Dear Akshay,
On 28/02/13 19:59, Akshay Saraswat wrote:
> First, the "div" value was being used incorrectly to compute the frequency of
> the PWM timer. The value passed in is a constant which reflects the value
> that would be found in a configuration register, 0 to 4. That should
> correspond to a scaling factor of 1, 2, 4, 8, or 16, 1 << div, but div + 1 was
> being used instead.
>
> Second, the reset value of the timers were being calculated to give an overall
> frequency, thrown out, and set to a maximum value. This was done so that PWM 4
> could be used as the system clock by counting down from a high value, but it
> was applied indiscriminantly. It should at most be applied only to PWM 4.
>
> This change also takes the opportunity to tidy up the pwm_init function.
>
> Test with command "sf probe 1:0; time sf read 40008000 0 1000".
> Try with different numbers of bytes and see that sane values are obtained
> Build and boot U-boot with this patch, backlight works properly.
>
> Signed-off-by: Gabe Black <gabeblack@google.com>
> Signed-off-by: Akshay Saraswat <akshay.s@samsung.com>
> Acked-by: Simon Glass <sjg@chromium.org>
> ---
> Changes since v1:
> - Added "Acked-by: Simon Glass".
>
> arch/arm/cpu/armv7/s5p-common/pwm.c | 24 ++++++++++++++----------
> 1 file changed, 14 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/cpu/armv7/s5p-common/pwm.c b/arch/arm/cpu/armv7/s5p-common/pwm.c
> index 3147f59..02156d1 100644
> --- a/arch/arm/cpu/armv7/s5p-common/pwm.c
> +++ b/arch/arm/cpu/armv7/s5p-common/pwm.c
> @@ -143,7 +143,7 @@ int pwm_init(int pwm_id, int div, int invert)
> u32 val;
> const struct s5p_timer *pwm =
> (struct s5p_timer *)samsung_get_base_timer();
> - unsigned long timer_rate_hz;
> + unsigned long ticks_per_period;
> unsigned int offset, prescaler;
>
> /*
> @@ -167,20 +167,24 @@ int pwm_init(int pwm_id, int div, int invert)
> val |= (div & 0xf) << MUX_DIV_SHIFT(pwm_id);
> writel(val, &pwm->tcfg1);
>
> - timer_rate_hz = get_pwm_clk() / ((prescaler + 1) *
> - (div + 1));
> + if (pwm_id == 4) {
> + /*
> + * TODO(sjg): Use this as a countdown timer for now. We count
> + * down from the maximum value to 0, then reset.
> + */
> + ticks_per_period = -1UL;
> + } else {
> + const unsigned long pwm_hz = 1000;
> + unsigned long timer_rate_hz = get_pwm_clk() /
> + ((prescaler + 1) * (1 << div));
good catch. thanks.
>
> - timer_rate_hz = timer_rate_hz / CONFIG_SYS_HZ;
> + ticks_per_period = timer_rate_hz / pwm_hz;
why don't you use CONFIG_SYS_HZ?
pwm_hz seems to constant.
> + }
>
> /* set count value */
> offset = pwm_id * 3;
>
> - /*
> - * TODO(sjg): Use this as a countdown timer for now. We count down
> - * from the maximum value to 0, then reset.
> - */
> - timer_rate_hz = -1;
> - writel(timer_rate_hz, &pwm->tcntb0 + offset);
> + writel(ticks_per_period, &pwm->tcntb0 + offset);
>
> val = readl(&pwm->tcon) & ~(0xf << TCON_OFFSET(pwm_id));
> if (invert && (pwm_id < 4))
>
Thanks,
Minkyu Kang.
next prev parent reply other threads:[~2013-03-28 5:53 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-28 10:59 [U-Boot] [PATCH 0/9 v2] Fix and Re-organise PWM Timer Akshay Saraswat
2013-02-28 10:59 ` [U-Boot] [PATCH 1/9 v2] Exynos: Change get_timer() to work correctly Akshay Saraswat
2013-03-28 5:52 ` Minkyu Kang
2013-02-28 10:59 ` [U-Boot] [PATCH 2/9 v2] Exynos: Add timer_get_us function Akshay Saraswat
2013-02-28 10:59 ` [U-Boot] [PATCH 3/9 v2] Exynos: pwm: Fix two bugs in the exynos pwm configuration code Akshay Saraswat
2013-03-28 5:53 ` Minkyu Kang [this message]
2013-02-28 10:59 ` [U-Boot] [PATCH 4/9 v2] Exynos: Avoid a divide by zero by specifying a non-zero period for pwm 4 Akshay Saraswat
2013-03-28 5:53 ` Minkyu Kang
2013-02-28 10:59 ` [U-Boot] [PATCH 5/9 v2] Exynos: Tidy up the pwm_config function in the exynos pwm driver Akshay Saraswat
2013-02-28 10:59 ` [U-Boot] [PATCH 6/9 v2] Exynos: Add peripherial id for pwm Akshay Saraswat
2013-02-28 10:59 ` [U-Boot] [PATCH 7/9 v2] Exynos: clock: Add generic api to get the clk freq Akshay Saraswat
2013-02-28 13:37 ` Simon Glass
2013-03-28 5:52 ` Minkyu Kang
2013-02-28 10:59 ` [U-Boot] [PATCH 8/9 v2] Exynos: clock: Correct pwm source clk selection Akshay Saraswat
2013-02-28 10:59 ` [U-Boot] [PATCH 9/9 v2] Exynos: pwm: Use generic api to get pwm clk freq Akshay Saraswat
2013-02-28 13:40 ` Simon Glass
2013-03-28 5:52 ` Minkyu Kang
-- strict thread matches above, loose matches on Subject: below --
2013-03-28 14:20 [U-Boot] [PATCH 3/9 v2] Exynos: pwm: Fix two bugs in the exynos pwm configuration code Akshay Saraswat
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5153DAC7.3070000@samsung.com \
--to=mk7.kang@samsung.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.