|
@@ -1127,3 +1127,41 @@ static void __init sun6i_pll6_clk_setup(struct device_node *node)
|
|
}
|
|
}
|
|
CLK_OF_DECLARE(sun6i_pll6, "allwinner,sun6i-a31-pll6-clk",
|
|
CLK_OF_DECLARE(sun6i_pll6, "allwinner,sun6i-a31-pll6-clk",
|
|
sun6i_pll6_clk_setup);
|
|
sun6i_pll6_clk_setup);
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * sun6i display
|
|
|
|
+ *
|
|
|
|
+ * rate = parent_rate / (m + 1);
|
|
|
|
+ */
|
|
|
|
+static void sun6i_display_factors(struct factors_request *req)
|
|
|
|
+{
|
|
|
|
+ u8 m;
|
|
|
|
+
|
|
|
|
+ if (req->rate > req->parent_rate)
|
|
|
|
+ req->rate = req->parent_rate;
|
|
|
|
+
|
|
|
|
+ m = DIV_ROUND_UP(req->parent_rate, req->rate);
|
|
|
|
+
|
|
|
|
+ req->rate = req->parent_rate / m;
|
|
|
|
+ req->m = m - 1;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static const struct clk_factors_config sun6i_display_config = {
|
|
|
|
+ .mshift = 0,
|
|
|
|
+ .mwidth = 4,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct factors_data sun6i_display_data __initconst = {
|
|
|
|
+ .enable = 31,
|
|
|
|
+ .mux = 24,
|
|
|
|
+ .muxmask = BIT(2) | BIT(1) | BIT(0),
|
|
|
|
+ .table = &sun6i_display_config,
|
|
|
|
+ .getter = sun6i_display_factors,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void __init sun6i_display_setup(struct device_node *node)
|
|
|
|
+{
|
|
|
|
+ sunxi_factors_clk_setup(node, &sun6i_display_data);
|
|
|
|
+}
|
|
|
|
+CLK_OF_DECLARE(sun6i_display, "allwinner,sun6i-a31-display-clk",
|
|
|
|
+ sun6i_display_setup);
|