[U-Boot] [PATCH 2/5] arm: exynos: add display clocks for Exynos5800

Ajay kumar ajaynumb at gmail.com
Mon Dec 8 06:37:06 CET 2014


On Fri, Dec 5, 2014 at 9:02 PM, Minkyu Kang <promsoft at gmail.com> wrote:
> Dear Ajay Kumar,
>
> On 5 December 2014 at 23:13, Ajay Kumar <ajaykumar.rs at samsung.com> wrote:
>
>> Add get_lcd_clk and set_lcd_clk callbacks for Exynos5800 needed by
>> exynos video driver.
>>
>> Signed-off-by: Ajay Kumar <ajaykumar.rs at samsung.com>
>> ---
>>  arch/arm/cpu/armv7/exynos/clock.c      |   63
>> +++++++++++++++++++++++++++++++-
>>  arch/arm/include/asm/arch-exynos/clk.h |    3 ++
>>  2 files changed, 64 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/arm/cpu/armv7/exynos/clock.c
>> b/arch/arm/cpu/armv7/exynos/clock.c
>> index 8fab135..1a34ad6 100644
>> --- a/arch/arm/cpu/armv7/exynos/clock.c
>> +++ b/arch/arm/cpu/armv7/exynos/clock.c
>> @@ -1066,6 +1066,36 @@ static unsigned long exynos5420_get_lcd_clk(void)
>>         return pclk;
>>  }
>>
>> +static unsigned long exynos5800_get_lcd_clk(void)
>> +{
>> +       struct exynos5420_clock *clk =
>> +               (struct exynos5420_clock *)samsung_get_base_clock();
>> +       unsigned long sclk;
>> +       unsigned sel;
>>
>
> just unsigned? why don't you specify in detail?
>
>
>> +       unsigned ratio;
>> +
>> +       sel = (readl(&clk->src_disp10) >> 4) & 7;
>>
>
> please add comment how you get "sel" from disp10.
> and if 7 means mask then please use 0x7. it looks more clearly.
>
> +
>> +       /*
>> +        * Mapping of CLK_SRC_DISP10 CLKMUX_FIMD1 [6:4] values into
>> +        * PLLs. The first element is a placeholder to bypass the
>> +        * default settig.
>> +        */
>> +       const int reg_map[] = {0, CPLL, DPLL, MPLL, SPLL,
>> +                              IPLL, EPLL,  RPLL};
>>
>
> please don't define local variable at middle of function.
> you can move it to top of the function or
> it seems to use sel is true then you can move it into the if statement.
>
>
>> +       if (sel)
>> +               sclk = get_pll_clk(reg_map[sel]);
>> +       else
>> +               sclk = 24000000;
>>
>
> please define this value.
>
>
>> +       /*
>> +        * CLK_DIV_DISP10
>> +        * FIMD1_RATIO [3:0]
>> +        */
>> +       ratio = readl(&clk->div_disp10) & 0xf;
>> +
>> +       return sclk / (ratio + 1);
>> +}
>> +
>>  void exynos4_set_lcd_clk(void)
>>  {
>>         struct exynos4_clock *clk =
>> @@ -1197,6 +1227,31 @@ void exynos5420_set_lcd_clk(void)
>>         writel(cfg, &clk->div_disp10);
>>  }
>>
>> +void exynos5800_set_lcd_clk(void)
>> +{
>> +       struct exynos5420_clock *clk =
>> +               (struct exynos5420_clock *)samsung_get_base_clock();
>> +       unsigned int cfg;
>> +
>> +       /*
>> +        * Use RPLL for pixel clock
>> +        * CLK_SRC_DISP10 CLKMUX_FIMD1 [6:4]
>> +        * ==================
>> +        * 111: SCLK_RPLL
>> +        */
>> +       cfg = readl(&clk->src_disp10) | (7 << 4);
>> +       writel(cfg, &clk->src_disp10);
>> +
>> +       /*
>> +        * CLK_DIV_DISP10
>> +        * FIMD1_RATIO          [3:0]
>> +        */
>> +       cfg = readl(&clk->div_disp10);
>> +       cfg &= ~(0xf << 0);
>> +       cfg |= (0 << 0);
>>
>
> it looks meaningless.
>
>
>> +       writel(cfg, &clk->div_disp10);
>> +}
>> +
>>  void exynos4_set_mipi_clk(void)
>>  {
>>         struct exynos4_clock *clk =
>> @@ -1669,8 +1724,10 @@ unsigned long get_lcd_clk(void)
>>         if (cpu_is_exynos4())
>>                 return exynos4_get_lcd_clk();
>>         else {
>> -               if (proid_is_exynos5420() || proid_is_exynos5800())
>> +               if (proid_is_exynos5420())
>>                         return exynos5420_get_lcd_clk();
>> +               else if (proid_is_exynos5800())
>> +                       return exynos5800_get_lcd_clk();
>>                 else
>>                         return exynos5_get_lcd_clk();
>>         }
>> @@ -1683,8 +1740,10 @@ void set_lcd_clk(void)
>>         else {
>>                 if (proid_is_exynos5250())
>>                         exynos5_set_lcd_clk();
>> -               else if (proid_is_exynos5420() || proid_is_exynos5800())
>> +               else if (proid_is_exynos5420())
>>                         exynos5420_set_lcd_clk();
>> +               else
>> +                       exynos5800_set_lcd_clk();
>>         }
>>  }
>>
>> diff --git a/arch/arm/include/asm/arch-exynos/clk.h
>> b/arch/arm/include/asm/arch-exynos/clk.h
>> index db24dc0..bf3d348 100644
>> --- a/arch/arm/include/asm/arch-exynos/clk.h
>> +++ b/arch/arm/include/asm/arch-exynos/clk.h
>> @@ -16,6 +16,9 @@
>>  #define BPLL   5
>>  #define RPLL   6
>>  #define SPLL   7
>> +#define CPLL   8
>> +#define DPLL   9
>> +#define IPLL   10
>>
>>  #define MASK_PRE_RATIO(x)      (0xff << ((x << 4) + 8))
>>  #define MASK_RATIO(x)          (0xf << (x << 4))
>> --
>> 1.7.9.5
>>
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot at lists.denx.de
>> http://lists.denx.de/mailman/listinfo/u-boot
>>
>
>
> Thanks,
> Minkyu Kang.
> --
> from. prom.
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>


More information about the U-Boot mailing list