77 lines
2.9 KiB
Diff
77 lines
2.9 KiB
Diff
From aaa1465c9f277628d4e0c9d08289fba7cf43416e Mon Sep 17 00:00:00 2001
|
|
From: Ondrej Jirman <megi@xff.cz>
|
|
Date: Fri, 3 Jun 2022 19:22:34 +0200
|
|
Subject: [PATCH 201/391] drm/sun4i: tcon: hand over the duty to keep TCON0
|
|
clock to CCU on A64
|
|
|
|
As the A64 CCU driver has already the ability to keep TCON0 clock stable
|
|
when HDMI changes its parent's clock, do not protect TCON0 clock on A64
|
|
in the TCON driver to allow PLL-Video0 gets changed by HDMI (the CCU
|
|
will then restore the TCON0 clock rate).
|
|
|
|
Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
|
|
|
|
# Conflicts:
|
|
# drivers/gpu/drm/sun4i/sun4i_tcon.c
|
|
---
|
|
drivers/gpu/drm/sun4i/sun4i_tcon.c | 15 +++++++++++++--
|
|
drivers/gpu/drm/sun4i/sun4i_tcon.h | 1 +
|
|
2 files changed, 14 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
|
|
index efe3eb7b7..057714a6a 100644
|
|
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
|
|
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
|
|
@@ -108,9 +108,11 @@ static void sun4i_tcon_channel_set_status(struct sun4i_tcon *tcon, int channel,
|
|
|
|
if (enabled) {
|
|
clk_prepare_enable(clk);
|
|
- clk_rate_exclusive_get(clk);
|
|
+ if (!tcon->quirks->clk_kept_by_ccu)
|
|
+ clk_rate_exclusive_get(clk);
|
|
} else {
|
|
- clk_rate_exclusive_put(clk);
|
|
+ if (!tcon->quirks->clk_kept_by_ccu)
|
|
+ clk_rate_exclusive_put(clk);
|
|
clk_disable_unprepare(clk);
|
|
}
|
|
}
|
|
@@ -1551,6 +1553,14 @@ static const struct sun4i_tcon_quirks sun8i_a33_quirks = {
|
|
.supports_lvds = true,
|
|
};
|
|
|
|
+static const struct sun4i_tcon_quirks sun50i_a64_lcd_quirks = {
|
|
+ .supports_lvds = true,
|
|
+ .has_channel_0 = true,
|
|
+ .clk_kept_by_ccu = true,
|
|
+ .dclk_min_div = 1,
|
|
+ .setup_lvds_phy = sun6i_tcon_setup_lvds_phy,
|
|
+};
|
|
+
|
|
static const struct sun4i_tcon_quirks sun8i_a83t_lcd_quirks = {
|
|
.supports_lvds = true,
|
|
.has_channel_0 = true,
|
|
@@ -1609,6 +1619,7 @@ const struct of_device_id sun4i_tcon_of_table[] = {
|
|
{ .compatible = "allwinner,sun9i-a80-tcon-tv", .data = &sun9i_a80_tcon_tv_quirks },
|
|
{ .compatible = "allwinner,sun20i-d1-tcon-lcd", .data = &sun20i_d1_lcd_quirks },
|
|
{ .compatible = "allwinner,sun20i-d1-tcon-tv", .data = &sun8i_r40_tv_quirks },
|
|
+ { .compatible = "allwinner,sun50i-a64-tcon-lcd", .data = &sun50i_a64_lcd_quirks },
|
|
{ }
|
|
};
|
|
MODULE_DEVICE_TABLE(of, sun4i_tcon_of_table);
|
|
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.h b/drivers/gpu/drm/sun4i/sun4i_tcon.h
|
|
index 97df39db2..745e1c473 100644
|
|
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.h
|
|
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.h
|
|
@@ -250,6 +250,7 @@ struct sun4i_tcon_quirks {
|
|
bool needs_edp_reset; /* a80 edp reset needed for tcon0 access */
|
|
bool supports_lvds; /* Does the TCON support an LVDS output? */
|
|
bool polarity_in_ch0; /* some tcon1 channels have polarity bits in tcon0 pol register */
|
|
+ bool clk_kept_by_ccu; /* On A64 we rely on CCU to keep TCON0 clock stable */
|
|
u8 dclk_min_div; /* minimum divider for TCON0 DCLK */
|
|
|
|
/* callback to handle tcon muxing options */
|
|
--
|
|
2.35.3
|
|
|