All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joonyoung Shim <jy0922.shim@samsung.com>
To: Kukjin Kim <kgene.kim@samsung.com>
Cc: 'Kyungmin Park' <kyungmin.park@samsung.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-samsung-soc@vger.kernel.org, ben-linux@fluff.org
Subject: Re: [PATCH] ARM: SAMSUNG: Add clk enable/disable of pwm
Date: Thu, 03 Nov 2011 19:20:36 +0900	[thread overview]
Message-ID: <4EB26AF4.8040601@samsung.com> (raw)
In-Reply-To: <019301cc9a08$17c69d50$4753d7f0$%kim@samsung.com>

11/03/2011 06:08 PM, Kukjin Kim 쓴 글:
> Kyungmin Park wrote:
>> On 11/3/11, Kyungmin Park<kyungmin.park@samsung.com>  wrote:
>>> On 11/3/11, Joonyoung Shim<jy0922.shim@samsung.com>  wrote:
>>>> 11/03/2011 04:46 PM, Kukjin Kim 쓴 글:
>>>>> Joonyoung Shim wrote:
>>>>>> 11/03/2011 10:59 AM, Kukjin Kim 쓴 글:
>>>>>>> Joonyoung Shim wrote:
>>>>>>>> PWM timers use pclk("timers" clk) as parent clk. If this pclk is the
>>>>>>>> disabled state when PWM driver is probed, then it causes wrong read
>>>>>>>> and
>>>>>>>> write operation about registers of PWM.
>>>>>>>>
>>>>>>>> Signed-off-by: Joonyoung Shim<jy0922.shim@samsung.com>
>>>>>>>> Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
>>>>>>>> ---
>>>>>>>>     arch/arm/plat-samsung/pwm.c |    7 +++++++
>>>>>>>>     1 files changed, 7 insertions(+), 0 deletions(-)
>>>>>>>>
>>>>>>>> diff --git a/arch/arm/plat-samsung/pwm.c
>>>>>>>> b/arch/arm/plat-samsung/pwm.c
>>>>>>>> index f37457c..dc1185d 100644
>>>>>>>> --- a/arch/arm/plat-samsung/pwm.c
>>>>>>>> +++ b/arch/arm/plat-samsung/pwm.c
>>>>>>>> @@ -299,6 +299,9 @@ static int s3c_pwm_probe(struct platform_device
>>>>>>>> *pdev)
>>>>>>>>     		goto err_clk_tin;
>>>>>>>>     	}
>>>>>>>>
>>>>>>>> +	clk_enable(pwm->clk);
>>>>>>>> +	clk_enable(pwm->clk_div);
>>>>>>>> +
>>>>>>>>     	local_irq_save(flags);
>>>>>>>>
>>>>>>>>     	tcon = __raw_readl(S3C2410_TCON);
>>>>>>>> @@ -326,6 +329,8 @@ static int s3c_pwm_probe(struct platform_device
>>>>>>>> *pdev)
>>>>>>>>     	return 0;
>>>>>>>>
>>>>>>>>      err_clk_tdiv:
>>>>>>>> +	clk_disable(pwm->clk_div);
>>>>>>>> +	clk_disable(pwm->clk);
>>>>>>>>     	clk_put(pwm->clk_div);
>>>>>>>>
>>>>>>>>      err_clk_tin:
>>>>>>>> @@ -340,6 +345,8 @@ static int __devexit s3c_pwm_remove(struct
>>>>>>>> platform_device *pdev)
>>>>>>>>     {
>>>>>>>>     	struct pwm_device *pwm = platform_get_drvdata(pdev);
>>>>>>>>
>>>>>>>> +	clk_disable(pwm->clk_div);
>>>>>>>> +	clk_disable(pwm->clk);
>>>>>>>>     	clk_put(pwm->clk_div);
>>>>>>>>     	clk_put(pwm->clk);
>>>>>>>>     	kfree(pwm);
>>>>>>>> --
>>>>>>>> 1.7.5.4
>>>>>>> Well, I wonder when this is needed. I think it should be enabled
>>>>>>> during
>>>>>>> kernel booting...
>>>>>> The exynos4 machine using just timer turns on "timer" clock in the
>>>>>> past,
>>>>>> but "timer" clock is disable state when boot since MCT is used. MCT
>>>>>> doesn't control "timer" clock.
>>>>>>
>>>>>> I think pwm driver should control(enable/disable) using clocks
>>>>>> regardless of their parents clock.
>>>>>>
>>>>> I mean, why that is disabled when kernel boot...
>>>>>
>>>> Please see arch/arm/mach-exynos4/clock.c
>>>> There is "timers' clock in the clk init_clocks_off[].
>> One more, Don't assume some clocks are enabled at bootloader. user can
>> use any bootloader and any configuration.
>>
> Kyungmin,
> NO! I didn't. Just I thought your bootloader disables the clock and why it is needed.
>
> Anyway, Joonyoung,
> How about following? And it seems enough...
> --
> diff --git a/arch/arm/plat-samsung/pwm-clock.c b/arch/arm/plat-samsung/pwm-clock.c
> index a35ff3b..37a159b 100644
> --- a/arch/arm/plat-samsung/pwm-clock.c
> +++ b/arch/arm/plat-samsung/pwm-clock.c
> @@ -449,6 +449,8 @@ __init void s3c_pwmclk_init(void)
>   		return;
>   	}
>
> +	clk_enable(clk_timers);
> +
>   	for (clk = 0; clk<  ARRAY_SIZE(clk_timer_scaler); clk++)
>   		clk_timer_scaler[clk].parent = clk_timers;
>   

No, there is no the reason "timers" clock turns on always.

> --
> Or needs separate clk_enable like following?
>
> diff --git a/arch/arm/plat-samsung/pwm.c b/arch/arm/plat-samsung/pwm.c
> index f37457c..7a77e36 100644
> --- a/arch/arm/plat-samsung/pwm.c
> +++ b/arch/arm/plat-samsung/pwm.c
> @@ -292,6 +292,8 @@ static int s3c_pwm_probe(struct platform_device *pdev)
>   		goto err_alloc;
>   	}
>
> +	clk_enable(pwm->clk);
> +
>   	pwm->clk_div = clk_get(dev, "pwm-tdiv");
>   	if (IS_ERR(pwm->clk_div)) {
>   		dev_err(dev, "failed to get pwm tdiv clk\n");
> @@ -299,6 +301,8 @@ static int s3c_pwm_probe(struct platform_device *pdev)
>   		goto err_clk_tin;
>   	}
>
> +	clk_enable(pwm->clk_div);
> +
>   	local_irq_save(flags);
>
>   	tcon = __raw_readl(S3C2410_TCON);
> @@ -326,9 +330,11 @@ static int s3c_pwm_probe(struct platform_device *pdev)
>   	return 0;
>
>   err_clk_tdiv:
> +	clk_disable(pwm->clk_div);
>   	clk_put(pwm->clk_div);
>
>   err_clk_tin:
> +	clk_disable(pwm->clk);
>   	clk_put(pwm->clk);
>
>   err_alloc:
> --

I don't care about this.

>
> BTW, I think this is not really needed for this merge window because the pwm.c is used for only s3c24xx and as you know, it doesn't matter because of arch/arm/plat-samsung/time.c. And if required, this can be fixed during -rc.

It's the problem to assume that the related clocks turned on by other
and the pwm is used for exynos4 also.

> Thanks.
>
> Best regards,
> Kgene.
> --
> Kukjin Kim<kgene.kim@samsung.com>, Senior Engineer,
> SW Solution Development Team, Samsung Electronics Co., Ltd.
>
>

WARNING: multiple messages have this Message-ID (diff)
From: jy0922.shim@samsung.com (Joonyoung Shim)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: SAMSUNG: Add clk enable/disable of pwm
Date: Thu, 03 Nov 2011 19:20:36 +0900	[thread overview]
Message-ID: <4EB26AF4.8040601@samsung.com> (raw)
In-Reply-To: <019301cc9a08$17c69d50$4753d7f0$%kim@samsung.com>

11/03/2011 06:08 PM, Kukjin Kim ? ?:
> Kyungmin Park wrote:
>> On 11/3/11, Kyungmin Park<kyungmin.park@samsung.com>  wrote:
>>> On 11/3/11, Joonyoung Shim<jy0922.shim@samsung.com>  wrote:
>>>> 11/03/2011 04:46 PM, Kukjin Kim ? ?:
>>>>> Joonyoung Shim wrote:
>>>>>> 11/03/2011 10:59 AM, Kukjin Kim ? ?:
>>>>>>> Joonyoung Shim wrote:
>>>>>>>> PWM timers use pclk("timers" clk) as parent clk. If this pclk is the
>>>>>>>> disabled state when PWM driver is probed, then it causes wrong read
>>>>>>>> and
>>>>>>>> write operation about registers of PWM.
>>>>>>>>
>>>>>>>> Signed-off-by: Joonyoung Shim<jy0922.shim@samsung.com>
>>>>>>>> Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
>>>>>>>> ---
>>>>>>>>     arch/arm/plat-samsung/pwm.c |    7 +++++++
>>>>>>>>     1 files changed, 7 insertions(+), 0 deletions(-)
>>>>>>>>
>>>>>>>> diff --git a/arch/arm/plat-samsung/pwm.c
>>>>>>>> b/arch/arm/plat-samsung/pwm.c
>>>>>>>> index f37457c..dc1185d 100644
>>>>>>>> --- a/arch/arm/plat-samsung/pwm.c
>>>>>>>> +++ b/arch/arm/plat-samsung/pwm.c
>>>>>>>> @@ -299,6 +299,9 @@ static int s3c_pwm_probe(struct platform_device
>>>>>>>> *pdev)
>>>>>>>>     		goto err_clk_tin;
>>>>>>>>     	}
>>>>>>>>
>>>>>>>> +	clk_enable(pwm->clk);
>>>>>>>> +	clk_enable(pwm->clk_div);
>>>>>>>> +
>>>>>>>>     	local_irq_save(flags);
>>>>>>>>
>>>>>>>>     	tcon = __raw_readl(S3C2410_TCON);
>>>>>>>> @@ -326,6 +329,8 @@ static int s3c_pwm_probe(struct platform_device
>>>>>>>> *pdev)
>>>>>>>>     	return 0;
>>>>>>>>
>>>>>>>>      err_clk_tdiv:
>>>>>>>> +	clk_disable(pwm->clk_div);
>>>>>>>> +	clk_disable(pwm->clk);
>>>>>>>>     	clk_put(pwm->clk_div);
>>>>>>>>
>>>>>>>>      err_clk_tin:
>>>>>>>> @@ -340,6 +345,8 @@ static int __devexit s3c_pwm_remove(struct
>>>>>>>> platform_device *pdev)
>>>>>>>>     {
>>>>>>>>     	struct pwm_device *pwm = platform_get_drvdata(pdev);
>>>>>>>>
>>>>>>>> +	clk_disable(pwm->clk_div);
>>>>>>>> +	clk_disable(pwm->clk);
>>>>>>>>     	clk_put(pwm->clk_div);
>>>>>>>>     	clk_put(pwm->clk);
>>>>>>>>     	kfree(pwm);
>>>>>>>> --
>>>>>>>> 1.7.5.4
>>>>>>> Well, I wonder when this is needed. I think it should be enabled
>>>>>>> during
>>>>>>> kernel booting...
>>>>>> The exynos4 machine using just timer turns on "timer" clock in the
>>>>>> past,
>>>>>> but "timer" clock is disable state when boot since MCT is used. MCT
>>>>>> doesn't control "timer" clock.
>>>>>>
>>>>>> I think pwm driver should control(enable/disable) using clocks
>>>>>> regardless of their parents clock.
>>>>>>
>>>>> I mean, why that is disabled when kernel boot...
>>>>>
>>>> Please see arch/arm/mach-exynos4/clock.c
>>>> There is "timers' clock in the clk init_clocks_off[].
>> One more, Don't assume some clocks are enabled at bootloader. user can
>> use any bootloader and any configuration.
>>
> Kyungmin,
> NO! I didn't. Just I thought your bootloader disables the clock and why it is needed.
>
> Anyway, Joonyoung,
> How about following? And it seems enough...
> --
> diff --git a/arch/arm/plat-samsung/pwm-clock.c b/arch/arm/plat-samsung/pwm-clock.c
> index a35ff3b..37a159b 100644
> --- a/arch/arm/plat-samsung/pwm-clock.c
> +++ b/arch/arm/plat-samsung/pwm-clock.c
> @@ -449,6 +449,8 @@ __init void s3c_pwmclk_init(void)
>   		return;
>   	}
>
> +	clk_enable(clk_timers);
> +
>   	for (clk = 0; clk<  ARRAY_SIZE(clk_timer_scaler); clk++)
>   		clk_timer_scaler[clk].parent = clk_timers;
>   

No, there is no the reason "timers" clock turns on always.

> --
> Or needs separate clk_enable like following?
>
> diff --git a/arch/arm/plat-samsung/pwm.c b/arch/arm/plat-samsung/pwm.c
> index f37457c..7a77e36 100644
> --- a/arch/arm/plat-samsung/pwm.c
> +++ b/arch/arm/plat-samsung/pwm.c
> @@ -292,6 +292,8 @@ static int s3c_pwm_probe(struct platform_device *pdev)
>   		goto err_alloc;
>   	}
>
> +	clk_enable(pwm->clk);
> +
>   	pwm->clk_div = clk_get(dev, "pwm-tdiv");
>   	if (IS_ERR(pwm->clk_div)) {
>   		dev_err(dev, "failed to get pwm tdiv clk\n");
> @@ -299,6 +301,8 @@ static int s3c_pwm_probe(struct platform_device *pdev)
>   		goto err_clk_tin;
>   	}
>
> +	clk_enable(pwm->clk_div);
> +
>   	local_irq_save(flags);
>
>   	tcon = __raw_readl(S3C2410_TCON);
> @@ -326,9 +330,11 @@ static int s3c_pwm_probe(struct platform_device *pdev)
>   	return 0;
>
>   err_clk_tdiv:
> +	clk_disable(pwm->clk_div);
>   	clk_put(pwm->clk_div);
>
>   err_clk_tin:
> +	clk_disable(pwm->clk);
>   	clk_put(pwm->clk);
>
>   err_alloc:
> --

I don't care about this.

>
> BTW, I think this is not really needed for this merge window because the pwm.c is used for only s3c24xx and as you know, it doesn't matter because of arch/arm/plat-samsung/time.c. And if required, this can be fixed during -rc.

It's the problem to assume that the related clocks turned on by other
and the pwm is used for exynos4 also.

> Thanks.
>
> Best regards,
> Kgene.
> --
> Kukjin Kim<kgene.kim@samsung.com>, Senior Engineer,
> SW Solution Development Team, Samsung Electronics Co., Ltd.
>
>

  parent reply	other threads:[~2011-11-03 10:20 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-25  1:21 [PATCH] ARM: SAMSUNG: Add clk enable/disable of pwm Joonyoung Shim
2011-10-25  1:21 ` Joonyoung Shim
2011-11-03  1:59 ` Kukjin Kim
2011-11-03  1:59   ` Kukjin Kim
2011-11-03  2:24   ` Joonyoung Shim
2011-11-03  2:24     ` Joonyoung Shim
2011-11-03  7:46     ` Kukjin Kim
2011-11-03  7:46       ` Kukjin Kim
2011-11-03  7:53       ` Joonyoung Shim
2011-11-03  7:53         ` Joonyoung Shim
2011-11-03  8:25         ` Kyungmin Park
2011-11-03  8:25           ` Kyungmin Park
2011-11-03  8:28           ` Kyungmin Park
2011-11-03  8:28             ` Kyungmin Park
2011-11-03  9:08             ` Kukjin Kim
2011-11-03  9:08               ` Kukjin Kim
2011-11-03  9:10               ` Russell King - ARM Linux
2011-11-03  9:10                 ` Russell King - ARM Linux
2011-11-03  9:43               ` Kyungmin Park
2011-11-03  9:43                 ` Kyungmin Park
2011-11-03 10:20               ` Joonyoung Shim [this message]
2011-11-03 10:20                 ` Joonyoung Shim
2011-11-04  5:01                 ` Kukjin Kim
2011-11-04  5:01                   ` Kukjin Kim

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=4EB26AF4.8040601@samsung.com \
    --to=jy0922.shim@samsung.com \
    --cc=ben-linux@fluff.org \
    --cc=kgene.kim@samsung.com \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    /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.