mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-28 01:28:59 +00:00
1343acc8cd
Deleted (upstreamed): bcm27xx/patches-5.10/950-0669-drm-vc4-hdmi-Make-sure-the-device-is-powered-with-CE.patch [1] bcm27xx/patches-5.10/950-0672-drm-vc4-hdmi-Move-initial-register-read-after-pm_run.patch [1] gemini/patches-5.10/0003-ARM-dts-gemini-NAS4220-B-fis-index-block-with-128-Ki.patch [2] Manually rebased: bcm27xx/patches-5.10/950-0675-drm-vc4-hdmi-Drop-devm-interrupt-handler-for-CEC-int.patch Manually reverted: generic/pending-5.10/860-Revert-ASoC-mediatek-Check-for-error-clk-pointer.patch [3] [1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.10.94&id=55b10b88ac8654fc2f31518aa349a2e643b37f18 [2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.10.94&id=958a8819d41420d7a74ed922a09cacc0ba3a4218 [3] https://lore.kernel.org/all/trinity-2a727d96-0335-4d03-8f30-e22a0e10112d-1643363480085@3c-app-gmx-bap33/ Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com> Signed-off-by: Daniel Golle <daniel@makrotopia.org>
103 lines
3.9 KiB
Diff
103 lines
3.9 KiB
Diff
From 6d15419acb9914041e90bc88044d87bbcdcfec00 Mon Sep 17 00:00:00 2001
|
|
From: Maxime Ripard <maxime@cerno.tech>
|
|
Date: Tue, 15 Dec 2020 16:42:41 +0100
|
|
Subject: [PATCH] drm/vc4: hdmi: Use the connector state pixel rate for
|
|
the PHY
|
|
|
|
The PHY initialisation parameters are not based on the pixel clock but
|
|
the TMDS clock rate which can be the pixel clock in the standard case,
|
|
but could be adjusted based on some parameters like the bits per color.
|
|
|
|
Since the TMDS clock rate is stored in our custom connector state
|
|
already, let's reuse it from there instead of computing it again.
|
|
|
|
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
|
|
Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|
---
|
|
drivers/gpu/drm/vc4/vc4_hdmi.c | 2 +-
|
|
drivers/gpu/drm/vc4/vc4_hdmi.h | 11 +++++------
|
|
drivers/gpu/drm/vc4/vc4_hdmi_phy.c | 8 +++++---
|
|
3 files changed, 11 insertions(+), 10 deletions(-)
|
|
|
|
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
|
@@ -762,7 +762,7 @@ static void vc4_hdmi_encoder_pre_crtc_co
|
|
}
|
|
|
|
if (vc4_hdmi->variant->phy_init)
|
|
- vc4_hdmi->variant->phy_init(vc4_hdmi, mode);
|
|
+ vc4_hdmi->variant->phy_init(vc4_hdmi, vc4_conn_state);
|
|
|
|
HDMI_WRITE(HDMI_SCHEDULER_CONTROL,
|
|
HDMI_READ(HDMI_SCHEDULER_CONTROL) |
|
|
--- a/drivers/gpu/drm/vc4/vc4_hdmi.h
|
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
|
|
@@ -21,10 +21,9 @@ to_vc4_hdmi_encoder(struct drm_encoder *
|
|
return container_of(encoder, struct vc4_hdmi_encoder, base.base);
|
|
}
|
|
|
|
-struct drm_display_mode;
|
|
-
|
|
struct vc4_hdmi;
|
|
struct vc4_hdmi_register;
|
|
+struct vc4_hdmi_connector_state;
|
|
|
|
enum vc4_hdmi_phy_channel {
|
|
PHY_LANE_0 = 0,
|
|
@@ -77,9 +76,9 @@ struct vc4_hdmi_variant {
|
|
void (*set_timings)(struct vc4_hdmi *vc4_hdmi,
|
|
struct drm_display_mode *mode);
|
|
|
|
- /* Callback to initialize the PHY according to the mode */
|
|
+ /* Callback to initialize the PHY according to the connector state */
|
|
void (*phy_init)(struct vc4_hdmi *vc4_hdmi,
|
|
- struct drm_display_mode *mode);
|
|
+ struct vc4_hdmi_connector_state *vc4_conn_state);
|
|
|
|
/* Callback to disable the PHY */
|
|
void (*phy_disable)(struct vc4_hdmi *vc4_hdmi);
|
|
@@ -199,13 +198,13 @@ conn_state_to_vc4_hdmi_conn_state(struct
|
|
}
|
|
|
|
void vc4_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
|
|
- struct drm_display_mode *mode);
|
|
+ struct vc4_hdmi_connector_state *vc4_conn_state);
|
|
void vc4_hdmi_phy_disable(struct vc4_hdmi *vc4_hdmi);
|
|
void vc4_hdmi_phy_rng_enable(struct vc4_hdmi *vc4_hdmi);
|
|
void vc4_hdmi_phy_rng_disable(struct vc4_hdmi *vc4_hdmi);
|
|
|
|
void vc5_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
|
|
- struct drm_display_mode *mode);
|
|
+ struct vc4_hdmi_connector_state *vc4_conn_state);
|
|
void vc5_hdmi_phy_disable(struct vc4_hdmi *vc4_hdmi);
|
|
void vc5_hdmi_phy_rng_enable(struct vc4_hdmi *vc4_hdmi);
|
|
void vc5_hdmi_phy_rng_disable(struct vc4_hdmi *vc4_hdmi);
|
|
--- a/drivers/gpu/drm/vc4/vc4_hdmi_phy.c
|
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi_phy.c
|
|
@@ -127,7 +127,8 @@
|
|
|
|
#define OSCILLATOR_FREQUENCY 54000000
|
|
|
|
-void vc4_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi, struct drm_display_mode *mode)
|
|
+void vc4_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
|
|
+ struct vc4_hdmi_connector_state *conn_state)
|
|
{
|
|
/* PHY should be in reset, like
|
|
* vc4_hdmi_encoder_disable() does.
|
|
@@ -339,11 +340,12 @@ static void vc5_hdmi_reset_phy(struct vc
|
|
HDMI_WRITE(HDMI_TX_PHY_POWERDOWN_CTL, BIT(10));
|
|
}
|
|
|
|
-void vc5_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi, struct drm_display_mode *mode)
|
|
+void vc5_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
|
|
+ struct vc4_hdmi_connector_state *conn_state)
|
|
{
|
|
const struct phy_lane_settings *chan0_settings, *chan1_settings, *chan2_settings, *clock_settings;
|
|
const struct vc4_hdmi_variant *variant = vc4_hdmi->variant;
|
|
- unsigned long long pixel_freq = mode->clock * 1000;
|
|
+ unsigned long long pixel_freq = conn_state->pixel_rate;
|
|
unsigned long long vco_freq;
|
|
unsigned char word_sel;
|
|
u8 vco_sel, vco_div;
|