static void __init exynos4_clk_register_finpll(struct samsung_clk_provider *ctx)
 {
        struct samsung_fixed_rate_clock fclk;
-       struct clk *clk;
-       unsigned long finpll_f = 24000000;
+       unsigned long finpll_f;
+       unsigned int parent;
        char *parent_name;
        unsigned int xom = exynos4_get_xom();
 
        parent_name = xom & 1 ? "xusbxti" : "xxti";
-       clk = clk_get(NULL, parent_name);
-       if (IS_ERR(clk)) {
+       parent = xom & 1 ? CLK_XUSBXTI : CLK_XXTI;
+
+       finpll_f = clk_hw_get_rate(ctx->clk_data.hws[parent]);
+       if (!finpll_f) {
                pr_err("%s: failed to lookup parent clock %s, assuming "
                        "fin_pll clock frequency is 24MHz\n", __func__,
                        parent_name);
-       } else {
-               finpll_f = clk_get_rate(clk);
+               finpll_f = 24000000;
        }
 
        fclk.id = CLK_FIN_PLL;