RFC ARM LPC32xx AMBA apb_pclk changes
Kevin Wells
wellsk40 at gmail.com
Tue Aug 3 16:40:51 EDT 2010
>> > This is a first cut at adding apb_pclk support for the AMBA bus driver.
>> >
>> > The temporary clock enable/disable wrappers around the amba_register
>> > function will no longer be needed. A "apb_pclk" con_id wasn't added,
>> > using only the matching device IDs used by the AMBA drivers. Because
>> > the AMBA driver attempts to turn off the LCD clock prior to exist, the
>> > workaround for the LCD clock enable needs to be handled with
>> > clk_enable so it will stay on after the AMBA driver disables it's clock.
>>
>> I think the clcd driver should be fixed not to do the first disable,
>> rather than work-around the problem like this.
>
> Something like this:
>
> diff --git a/drivers/video/amba-clcd.c b/drivers/video/amba-clcd.c
> index afe21e6..1c2c683 100644
> --- a/drivers/video/amba-clcd.c
> +++ b/drivers/video/amba-clcd.c
> @@ -80,7 +80,10 @@ static void clcdfb_disable(struct clcd_fb *fb)
> /*
> * Disable CLCD clock source.
> */
> - clk_disable(fb->clk);
> + if (fb->clk_enabled) {
> + fb->clk_enabled = false;
> + clk_disable(fb->clk);
> + }
> }
>
> static void clcdfb_enable(struct clcd_fb *fb, u32 cntl)
> @@ -88,7 +91,10 @@ static void clcdfb_enable(struct clcd_fb *fb, u32 cntl)
> /*
> * Enable the CLCD clock source.
> */
> - clk_enable(fb->clk);
> + if (!fb->clk_enabled) {
> + fb->clk_enabled = true;
> + clk_enable(fb->clk);
> + }
>
> /*
> * Bring up by first enabling..
> diff --git a/include/linux/amba/clcd.h b/include/linux/amba/clcd.h
> index ca16c38..be33b3a 100644
> --- a/include/linux/amba/clcd.h
> +++ b/include/linux/amba/clcd.h
> @@ -150,6 +150,7 @@ struct clcd_fb {
> u16 off_cntl;
> u32 clcd_cntl;
> u32 cmap[16];
> + bool clk_enabled;
> };
>
> static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs)
>
>
I'll get a patch for this change and the amba pclk changes for the
pl11x up a little later..thanks!
More information about the linux-arm-kernel
mailing list