[PATCH] ARM: s3c2440: fix AC97 and camera clock registration

Fabian Godehardt fg at emlix.com
Mon Nov 29 01:39:20 EST 2010


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



More information about the linux-arm-kernel mailing list