[PATCH 09/16] clk: samsung: pll: Use new registration method for PLL45xx

Yadwinder Singh Brar yadi.brar01 at gmail.com
Wed Aug 21 09:17:10 EDT 2013


>  };
>
> +static struct __initdata samsung_pll_clock exynos4210_plls[nr_plls] = {

NIT: __initdata should be at last.

> +       [apll] = PLL_A(pll_4508, fout_apll, "fout_apll", "fin_pll", APLL_LOCK,
> +               APLL_CON0, "fout_apll", NULL),
> +       [mpll] = PLL_A(pll_4508, fout_mpll, "fout_mpll", "fin_pll",
> +               E4210_MPLL_LOCK, E4210_MPLL_CON0, "fout_mpll", NULL),
> +};
> +
>  static struct samsung_pll_clock exynos4x12_plls[nr_plls] __initdata = {
>         [apll] = PLL(pll_35xx, fout_apll, "fout_apll", "fin_pll",
>                         APLL_LOCK, APLL_CON0, NULL),
> @@ -1004,7 +1012,7 @@ static void __init exynos4_clk_init(struct device_node *np,
>                                     enum exynos4_soc exynos4_soc,
>                                     void __iomem *reg_base, unsigned long xom)
>  {
> -       struct clk *apll, *mpll, *epll, *vpll;
> +       struct clk *epll, *vpll;
>
>         reg_base = of_iomap(np, 0);
>         if (!reg_base)
> @@ -1026,17 +1034,13 @@ static void __init exynos4_clk_init(struct device_node *np,
>         exynos4_clk_register_finpll(xom);
>
>         if (exynos4_soc == EXYNOS4210) {
> -               apll = samsung_clk_register_pll45xx("fout_apll", "fin_pll",
> -                                       reg_base + APLL_CON0, pll_4508);
> -               mpll = samsung_clk_register_pll45xx("fout_mpll", "fin_pll",
> -                                       reg_base + E4210_MPLL_CON0, pll_4508);
> +               samsung_clk_register_pll(exynos4210_plls,
> +                                       ARRAY_SIZE(exynos4210_plls), reg_base);
>                 epll = samsung_clk_register_pll46xx("fout_epll", "fin_pll",
>                                         reg_base + EPLL_CON0, pll_4600);
>                 vpll = samsung_clk_register_pll46xx("fout_vpll", "mout_vpllsrc",
>                                         reg_base + VPLL_CON0, pll_4650c);
>
> -               samsung_clk_add_lookup(apll, fout_apll);
> -               samsung_clk_add_lookup(mpll, fout_mpll);
>                 samsung_clk_add_lookup(epll, fout_epll);
>                 samsung_clk_add_lookup(vpll, fout_vpll);
>         } else {
> diff --git a/drivers/clk/samsung/clk-pll.c b/drivers/clk/samsung/clk-pll.c
> index 0775554..b0398d2 100644
> --- a/drivers/clk/samsung/clk-pll.c
> +++ b/drivers/clk/samsung/clk-pll.c
> @@ -280,18 +280,10 @@ static const struct clk_ops samsung_pll36xx_clk_min_ops = {
>  #define PLL45XX_PDIV_SHIFT     (8)
>  #define PLL45XX_SDIV_SHIFT     (0)
>
> -struct samsung_clk_pll45xx {
> -       struct clk_hw           hw;
> -       enum pll45xx_type       type;
> -       const void __iomem      *con_reg;
> -};
> -
> -#define to_clk_pll45xx(_hw) container_of(_hw, struct samsung_clk_pll45xx, hw)
> -
>  static unsigned long samsung_pll45xx_recalc_rate(struct clk_hw *hw,
>                                 unsigned long parent_rate)
>  {
> -       struct samsung_clk_pll45xx *pll = to_clk_pll45xx(hw);
> +       struct samsung_clk_pll *pll = to_clk_pll(hw);
>         u32 mdiv, pdiv, sdiv, pll_con;
>         u64 fvco = parent_rate;
>
> @@ -313,43 +305,6 @@ static const struct clk_ops samsung_pll45xx_clk_ops = {
>         .recalc_rate = samsung_pll45xx_recalc_rate,
>  };
>
> -struct clk * __init samsung_clk_register_pll45xx(const char *name,
> -                       const char *pname, const void __iomem *con_reg,
> -                       enum pll45xx_type type)
> -{
> -       struct samsung_clk_pll45xx *pll;
> -       struct clk *clk;
> -       struct clk_init_data init;
> -
> -       pll = kzalloc(sizeof(*pll), GFP_KERNEL);
> -       if (!pll) {
> -               pr_err("%s: could not allocate pll clk %s\n", __func__, name);
> -               return NULL;
> -       }
> -
> -       init.name = name;
> -       init.ops = &samsung_pll45xx_clk_ops;
> -       init.flags = CLK_GET_RATE_NOCACHE;
> -       init.parent_names = &pname;
> -       init.num_parents = 1;
> -
> -       pll->hw.init = &init;
> -       pll->con_reg = con_reg;
> -       pll->type = type;
> -
> -       clk = clk_register(NULL, &pll->hw);
> -       if (IS_ERR(clk)) {
> -               pr_err("%s: failed to register pll clock %s\n", __func__,
> -                               name);
> -               kfree(pll);
> -       }
> -
> -       if (clk_register_clkdev(clk, name, NULL))
> -               pr_err("%s: failed to register lookup for %s", __func__, name);
> -
> -       return clk;
> -}
> -
>  /*
>   * PLL46xx Clock Type
>   */
> @@ -724,6 +679,11 @@ static void __init _samsung_clk_register_pll(struct samsung_pll_clock *pll_clk,
>                 else
>                         init.ops = &samsung_pll35xx_clk_ops;
>                 break;
> +       case pll_4500:
> +       case pll_4502:
> +       case pll_4508:
> +               init.ops = &samsung_pll45xx_clk_ops;
> +               break;
>         /* clk_ops for 36xx and 2650 are similar */
>         case pll_36xx:
>         case pll_2650:
> diff --git a/drivers/clk/samsung/clk-pll.h b/drivers/clk/samsung/clk-pll.h
> index 2f70e88..f3faf24 100644
> --- a/drivers/clk/samsung/clk-pll.h
> +++ b/drivers/clk/samsung/clk-pll.h
> @@ -17,6 +17,9 @@ enum samsung_pll_type {
>         pll_36xx,
>         pll_2550,
>         pll_2650,
> +       pll_4500,
> +       pll_4502,
> +       pll_4508
>  };
>
>  #define PLL_35XX_RATE(_rate, _m, _p, _s)                       \
> @@ -46,21 +49,12 @@ struct samsung_pll_rate_table {
>         unsigned int kdiv;
>  };
>
> -enum pll45xx_type {
> -       pll_4500,
> -       pll_4502,
> -       pll_4508
> -};
> -
>  enum pll46xx_type {
>         pll_4600,
>         pll_4650,
>         pll_4650c,
>  };
>
> -extern struct clk * __init samsung_clk_register_pll45xx(const char *name,
> -                       const char *pname, const void __iomem *con_reg,
> -                       enum pll45xx_type type);
>  extern struct clk * __init samsung_clk_register_pll46xx(const char *name,
>                         const char *pname, const void __iomem *con_reg,
>                         enum pll46xx_type type);
> --
> 1.8.3.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the linux-arm-kernel mailing list