* [PATCH] clk: mxs: source LCD clock from PLL instead of from ref_xtal
@ 2013-09-23 7:50 Hector Palacios
2013-09-23 12:34 ` Fabio Estevam
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Hector Palacios @ 2013-09-23 7:50 UTC (permalink / raw)
To: linux-arm-kernel
The lcd clock hierarchy is as follows:
ref_clk (24MHz)-----\
+--+ lcdif_sel (MUX type)
frac1_clk (480Mhz)--/ |
\--+ lcdif_div (DIV type)
|
\-- lcdif (GATE type)
The mxsfb driver retrieves the 'lcdif_div' clock from the DT, but the
'lcdif_sel' is by default sourced from 'ref_clk' which is a fixed 24MHz.
This means the pixel clock can only be 24MHz or a power-of-two divisor
of that frequency (12, 6, 3...) which is a very poor divisor granularity.
Since the driver doesn't know about the different clocks that can
source its clk parent from, we must select the PLL (480MHz) to be the
parent during the general clocks initialization. This allows for much
better divisor granularity and for more accurate frequencies for LCD
displays.
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
Tested-by: Fabio Estevam <fabio.estevam@freescale.com>
CC: Maxime Rippard <maxime.ripard@free-electrons.com>
CC: Marek Vasut <marex@denx.de>
CC: Alexandre Belloni <alexandre.belloni@free-electrons.com>
CC: Gwenhael Goavec-Merou <gwenhael.goavec-merou@armadeus.com>
---
drivers/clk/mxs/clk-imx28.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/clk/mxs/clk-imx28.c b/drivers/clk/mxs/clk-imx28.c
index 4faf0af..882ec3f 100644
--- a/drivers/clk/mxs/clk-imx28.c
+++ b/drivers/clk/mxs/clk-imx28.c
@@ -246,6 +246,12 @@ int __init mx28_clocks_init(void)
clk_data.clk_num = ARRAY_SIZE(clks);
of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
+ /*
+ * Select PLL as the parent source of lcdif_sel clk to have a finer
+ * granularity when calculating the LCD pixelclock
+ */
+ clk_set_parent(clks[lcdif_sel], clks[ref_pix]);
+
clk_register_clkdev(clks[enet_out], NULL, "enet_out");
for (i = 0; i < ARRAY_SIZE(clks_init_on); i++)
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH] clk: mxs: source LCD clock from PLL instead of from ref_xtal
2013-09-23 7:50 [PATCH] clk: mxs: source LCD clock from PLL instead of from ref_xtal Hector Palacios
@ 2013-09-23 12:34 ` Fabio Estevam
2013-09-23 12:42 ` Shawn Guo
2013-09-23 15:23 ` Marek Vasut
2 siblings, 0 replies; 4+ messages in thread
From: Fabio Estevam @ 2013-09-23 12:34 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Sep 23, 2013 at 4:50 AM, Hector Palacios
<hector.palacios@digi.com> wrote:
> The lcd clock hierarchy is as follows:
>
> ref_clk (24MHz)-----\
> +--+ lcdif_sel (MUX type)
> frac1_clk (480Mhz)--/ |
> \--+ lcdif_div (DIV type)
> |
> \-- lcdif (GATE type)
>
> The mxsfb driver retrieves the 'lcdif_div' clock from the DT, but the
> 'lcdif_sel' is by default sourced from 'ref_clk' which is a fixed 24MHz.
> This means the pixel clock can only be 24MHz or a power-of-two divisor
> of that frequency (12, 6, 3...) which is a very poor divisor granularity.
>
> Since the driver doesn't know about the different clocks that can
> source its clk parent from, we must select the PLL (480MHz) to be the
> parent during the general clocks initialization. This allows for much
> better divisor granularity and for more accurate frequencies for LCD
> displays.
>
> Signed-off-by: Hector Palacios <hector.palacios@digi.com>
> Tested-by: Fabio Estevam <fabio.estevam@freescale.com>
> CC: Maxime Rippard <maxime.ripard@free-electrons.com>
> CC: Marek Vasut <marex@denx.de>
> CC: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> CC: Gwenhael Goavec-Merou <gwenhael.goavec-merou@armadeus.com>
You added a lot of people on Cc, but you missed the clk maintaner
(Mike Turquette) :-)
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] clk: mxs: source LCD clock from PLL instead of from ref_xtal
2013-09-23 7:50 [PATCH] clk: mxs: source LCD clock from PLL instead of from ref_xtal Hector Palacios
2013-09-23 12:34 ` Fabio Estevam
@ 2013-09-23 12:42 ` Shawn Guo
2013-09-23 15:23 ` Marek Vasut
2 siblings, 0 replies; 4+ messages in thread
From: Shawn Guo @ 2013-09-23 12:42 UTC (permalink / raw)
To: linux-arm-kernel
Copy Mike who will help apply the patch.
On Mon, Sep 23, 2013 at 09:50:23AM +0200, Hector Palacios wrote:
> The lcd clock hierarchy is as follows:
>
> ref_clk (24MHz)-----\
> +--+ lcdif_sel (MUX type)
> frac1_clk (480Mhz)--/ |
> \--+ lcdif_div (DIV type)
> |
> \-- lcdif (GATE type)
>
> The mxsfb driver retrieves the 'lcdif_div' clock from the DT, but the
> 'lcdif_sel' is by default sourced from 'ref_clk' which is a fixed 24MHz.
> This means the pixel clock can only be 24MHz or a power-of-two divisor
> of that frequency (12, 6, 3...) which is a very poor divisor granularity.
>
> Since the driver doesn't know about the different clocks that can
> source its clk parent from, we must select the PLL (480MHz) to be the
> parent during the general clocks initialization. This allows for much
> better divisor granularity and for more accurate frequencies for LCD
> displays.
>
> Signed-off-by: Hector Palacios <hector.palacios@digi.com>
> Tested-by: Fabio Estevam <fabio.estevam@freescale.com>
> CC: Maxime Rippard <maxime.ripard@free-electrons.com>
> CC: Marek Vasut <marex@denx.de>
> CC: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> CC: Gwenhael Goavec-Merou <gwenhael.goavec-merou@armadeus.com>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
> ---
> drivers/clk/mxs/clk-imx28.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/clk/mxs/clk-imx28.c b/drivers/clk/mxs/clk-imx28.c
> index 4faf0af..882ec3f 100644
> --- a/drivers/clk/mxs/clk-imx28.c
> +++ b/drivers/clk/mxs/clk-imx28.c
> @@ -246,6 +246,12 @@ int __init mx28_clocks_init(void)
> clk_data.clk_num = ARRAY_SIZE(clks);
> of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
>
> + /*
> + * Select PLL as the parent source of lcdif_sel clk to have a finer
> + * granularity when calculating the LCD pixelclock
> + */
> + clk_set_parent(clks[lcdif_sel], clks[ref_pix]);
> +
> clk_register_clkdev(clks[enet_out], NULL, "enet_out");
>
> for (i = 0; i < ARRAY_SIZE(clks_init_on); i++)
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] clk: mxs: source LCD clock from PLL instead of from ref_xtal
2013-09-23 7:50 [PATCH] clk: mxs: source LCD clock from PLL instead of from ref_xtal Hector Palacios
2013-09-23 12:34 ` Fabio Estevam
2013-09-23 12:42 ` Shawn Guo
@ 2013-09-23 15:23 ` Marek Vasut
2 siblings, 0 replies; 4+ messages in thread
From: Marek Vasut @ 2013-09-23 15:23 UTC (permalink / raw)
To: linux-arm-kernel
Dear Hector Palacios,
> The lcd clock hierarchy is as follows:
>
> ref_clk (24MHz)-----\
> +--+ lcdif_sel (MUX type)
> frac1_clk (480Mhz)--/ |
> \--+ lcdif_div (DIV type)
>
> \-- lcdif (GATE type)
>
> The mxsfb driver retrieves the 'lcdif_div' clock from the DT, but the
> 'lcdif_sel' is by default sourced from 'ref_clk' which is a fixed 24MHz.
> This means the pixel clock can only be 24MHz or a power-of-two divisor
> of that frequency (12, 6, 3...) which is a very poor divisor granularity.
>
> Since the driver doesn't know about the different clocks that can
> source its clk parent from, we must select the PLL (480MHz) to be the
> parent during the general clocks initialization. This allows for much
> better divisor granularity and for more accurate frequencies for LCD
> displays.
>
> Signed-off-by: Hector Palacios <hector.palacios@digi.com>
> Tested-by: Fabio Estevam <fabio.estevam@freescale.com>
> CC: Maxime Rippard <maxime.ripard@free-electrons.com>
> CC: Marek Vasut <marex@denx.de>
> CC: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> CC: Gwenhael Goavec-Merou <gwenhael.goavec-merou@armadeus.com>
> ---
> drivers/clk/mxs/clk-imx28.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/clk/mxs/clk-imx28.c b/drivers/clk/mxs/clk-imx28.c
> index 4faf0af..882ec3f 100644
> --- a/drivers/clk/mxs/clk-imx28.c
> +++ b/drivers/clk/mxs/clk-imx28.c
> @@ -246,6 +246,12 @@ int __init mx28_clocks_init(void)
> clk_data.clk_num = ARRAY_SIZE(clks);
> of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
>
> + /*
> + * Select PLL as the parent source of lcdif_sel clk to have a finer
> + * granularity when calculating the LCD pixelclock
> + */
> + clk_set_parent(clks[lcdif_sel], clks[ref_pix]);
> +
> clk_register_clkdev(clks[enet_out], NULL, "enet_out");
>
> for (i = 0; i < ARRAY_SIZE(clks_init_on); i++)
On M28EVK:
Tested-by: Marek Vasut <marex@denx.de>
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-09-23 15:23 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-23 7:50 [PATCH] clk: mxs: source LCD clock from PLL instead of from ref_xtal Hector Palacios
2013-09-23 12:34 ` Fabio Estevam
2013-09-23 12:42 ` Shawn Guo
2013-09-23 15:23 ` Marek Vasut
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).