linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ARM: s3c2440: fix AC97 and camera clock registration
@ 2010-11-17 10:22 Fabian Godehardt
  2010-11-25  8:01 ` Kukjin Kim
  0 siblings, 1 reply; 3+ messages in thread
From: Fabian Godehardt @ 2010-11-17 10:22 UTC (permalink / raw)
  To: linux-arm-kernel

This patch fixes 2 problems:
 - it sets the correct bitmask of the AC97 flag on the control-bit field
 - it increases the usage counter of both clocks because they get decreased
   on clock registration (a few lines later)

Maybe it is a better idea to check the usage counter on clk_disable() so
it can not reach values <0.

Signed-off-by: Fabian Godehardt <fg@emlix.com>
---
 arch/arm/mach-s3c2440/clock.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-s3c2440/clock.c b/arch/arm/mach-s3c2440/clock.c
index 3dc2426..0fc8461 100644
--- a/arch/arm/mach-s3c2440/clock.c
+++ b/arch/arm/mach-s3c2440/clock.c
@@ -93,6 +93,7 @@ static struct clk s3c2440_clk_cam = {
 	.id		= -1,
 	.enable		= s3c2410_clkcon_enable,
 	.ctrlbit	= S3C2440_CLKCON_CAMERA,
+	.usage		= 1,
 };
 
 static struct clk s3c2440_clk_cam_upll = {
@@ -108,7 +109,8 @@ static struct clk s3c2440_clk_ac97 = {
 	.name		= "ac97",
 	.id		= -1,
 	.enable		= s3c2410_clkcon_enable,
-	.ctrlbit	= S3C2440_CLKCON_CAMERA,
+	.ctrlbit	= S3C2440_CLKCON_AC97,
+	.usage		= 1,
 };
 
 static int s3c2440_clk_add(struct sys_device *sysdev)
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH] ARM: s3c2440: fix AC97 and camera clock registration
  2010-11-17 10:22 [PATCH] ARM: s3c2440: fix AC97 and camera clock registration Fabian Godehardt
@ 2010-11-25  8:01 ` Kukjin Kim
  2010-11-29  6:39   ` Fabian Godehardt
  0 siblings, 1 reply; 3+ messages in thread
From: Kukjin Kim @ 2010-11-25  8:01 UTC (permalink / raw)
  To: linux-arm-kernel

Fabian Godehardt wrote:
> 
> This patch fixes 2 problems:
>  - it sets the correct bitmask of the AC97 flag on the control-bit field
>  - it increases the usage counter of both clocks because they get
decreased
>    on clock registration (a few lines later)
> 
> Maybe it is a better idea to check the usage counter on clk_disable() so
> it can not reach values <0.
> 
> Signed-off-by: Fabian Godehardt <fg@emlix.com>
> ---
>  arch/arm/mach-s3c2440/clock.c |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/arm/mach-s3c2440/clock.c b/arch/arm/mach-s3c2440/clock.c
> index 3dc2426..0fc8461 100644
> --- a/arch/arm/mach-s3c2440/clock.c
> +++ b/arch/arm/mach-s3c2440/clock.c
> @@ -93,6 +93,7 @@ static struct clk s3c2440_clk_cam = {
>  	.id		= -1,
>  	.enable		= s3c2410_clkcon_enable,
>  	.ctrlbit	= S3C2440_CLKCON_CAMERA,
> +	.usage		= 1,
>  };
> 
>  static struct clk s3c2440_clk_cam_upll = {
> @@ -108,7 +109,8 @@ static struct clk s3c2440_clk_ac97 = {
>  	.name		= "ac97",
>  	.id		= -1,
>  	.enable		= s3c2410_clkcon_enable,
> -	.ctrlbit	= S3C2440_CLKCON_CAMERA,
> +	.ctrlbit	= S3C2440_CLKCON_AC97,

Ok.

> +	.usage		= 1,
>  };
> 
>  static int s3c2440_clk_add(struct sys_device *sysdev)
> --
> 1.6.6.1

How about following for fix usage field?

diff --git a/arch/arm/mach-s3c2440/clock.c b/arch/arm/mach-s3c2440/clock.c
index 3dc2426..2f393cb 100644
--- a/arch/arm/mach-s3c2440/clock.c
+++ b/arch/arm/mach-s3c2440/clock.c
@@ -108,11 +108,12 @@ static struct clk s3c2440_clk_ac97 = {
        .name           = "ac97",
        .id             = -1,
        .enable         = s3c2410_clkcon_enable,
-       .ctrlbit        = S3C2440_CLKCON_CAMERA,
+       .ctrlbit        = S3C2440_CLKCON_AC97,
 };

 static int s3c2440_clk_add(struct sys_device *sysdev)
 {
+       unsigned long clkcon  = __raw_readl(S3C2410_CLKCON);
        struct clk *clock_upll;
        struct clk *clock_h;
        struct clk *clock_p;
@@ -130,6 +131,9 @@ static int s3c2440_clk_add(struct sys_device *sysdev)
        s3c2440_clk_ac97.parent = clock_p;
        s3c2440_clk_cam_upll.parent = clock_upll;

+       s3c2440_clk_cam.usage = clkcon & s3c2440_clk_cam.ctrlbit ? 1 : 0;
+       s3c2440_clk_ac97.usage = clkcon & s3c2440_clk_ac97.ctrlbit ? 1 : 0;
+
        s3c24xx_register_clock(&s3c2440_clk_ac97);
        s3c24xx_register_clock(&s3c2440_clk_cam);
        s3c24xx_register_clock(&s3c2440_clk_cam_upll);

Thanks.

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

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH] ARM: s3c2440: fix AC97 and camera clock registration
  2010-11-25  8:01 ` Kukjin Kim
@ 2010-11-29  6:39   ` Fabian Godehardt
  0 siblings, 0 replies; 3+ messages in thread
From: Fabian Godehardt @ 2010-11-29  6:39 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

> How about following for fix usage field?
> 
> diff --git a/arch/arm/mach-s3c2440/clock.c b/arch/arm/mach-s3c2440/clock.c
> index 3dc2426..2f393cb 100644
> --- a/arch/arm/mach-s3c2440/clock.c
> +++ b/arch/arm/mach-s3c2440/clock.c
> @@ -108,11 +108,12 @@ static struct clk s3c2440_clk_ac97 = {
>         .name           = "ac97",
>         .id             = -1,
>         .enable         = s3c2410_clkcon_enable,
> -       .ctrlbit        = S3C2440_CLKCON_CAMERA,
> +       .ctrlbit        = S3C2440_CLKCON_AC97,
>  };
> 
>  static int s3c2440_clk_add(struct sys_device *sysdev)
>  {
> +       unsigned long clkcon  = __raw_readl(S3C2410_CLKCON);

Yes, you are right. The clocks should be checked :).

>         struct clk *clock_upll;
>         struct clk *clock_h;
>         struct clk *clock_p;
> @@ -130,6 +131,9 @@ static int s3c2440_clk_add(struct sys_device *sysdev)
>         s3c2440_clk_ac97.parent = clock_p;
>         s3c2440_clk_cam_upll.parent = clock_upll;
> 
> +       s3c2440_clk_cam.usage = clkcon & s3c2440_clk_cam.ctrlbit ? 1 : 0;
> +       s3c2440_clk_ac97.usage = clkcon & s3c2440_clk_ac97.ctrlbit ? 1 : 0;
> +
>         s3c24xx_register_clock(&s3c2440_clk_ac97);
>         s3c24xx_register_clock(&s3c2440_clk_cam);
>         s3c24xx_register_clock(&s3c2440_clk_cam_upll);
> 

But in the following lines the clocks are disabled again. So if the usage was 
set to '0' on the check above, we get '-1' again.
I would prefer to use your code and additionally do the check again before the 
clocks are disabled. Something like this:

-		clk_disable(&s3c2440_clk_ac97);
-		clk_disable(&s3c2440_clk_cam);
+		if (s3c2440_clk_ac97.usage)
+			clk_disable(&s3c2440_clk_ac97);
+
+		if (s3c2440_clk_cam.usage)
+			clk_disable(&s3c2440_clk_cam);


Mit freundlichen Gr??en/With kind regards

Fabian Godehardt

-- 
Dipl.-Ing. (FH) Fabian Godehardt, emlix GmbH, http://www.emlix.com
Fon +49 551 30664-0, Fax -11, Bahnhofsallee 1b, 37081 G?ttingen, Germany
Sitz der Gesellschaft: G?ttingen, Amtsgericht G?ttingen HR B 3160
Gesch?ftsf?hrer: Dr. Uwe Kracke, Ust-IdNr.: DE 205 198 055

emlix - your embedded linux partner

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-11-29  6:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-17 10:22 [PATCH] ARM: s3c2440: fix AC97 and camera clock registration Fabian Godehardt
2010-11-25  8:01 ` Kukjin Kim
2010-11-29  6:39   ` Fabian Godehardt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).