[PATCH] ARM: s3c2440: fix AC97 and camera clock registration
Kukjin Kim
kgene.kim at samsung.com
Thu Nov 25 03:01:08 EST 2010
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 at 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 at samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.
More information about the linux-arm-kernel
mailing list