Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5ed400dd authored by Jean-Francois Moine's avatar Jean-Francois Moine Committed by Maxime Ripard
Browse files

clk: sunxi: Add sun6i/8i display support



Add the clock type which is used by the sun6i/8i families for video display.

Signed-off-by: default avatarJean-Francois Moine <moinejf@free.fr>
Acked-by: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarMaxime Ripard <maxime.ripard@free-electrons.com>
parent 8f076761
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ Required properties:
	"allwinner,sun9i-a80-usb-mod-clk" - for usb gates + resets on A80
	"allwinner,sun9i-a80-usb-phy-clk" - for usb phy gates + resets on A80
	"allwinner,sun4i-a10-ve-clk" - for the Video Engine clock
	"allwinner,sun6i-a31-display-clk" - for the display clocks

Required properties for all clocks:
- reg : shall be the control register address for the clock.
+38 −0
Original line number Diff line number Diff line
@@ -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",
	       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);