2020-05-27 13:12:04 +00:00
|
|
|
From 3cf4a365b833d7a2e7622ad5569b9d54aebbe593 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Maxime Ripard <maxime@cerno.tech>
|
|
|
|
Date: Thu, 19 Dec 2019 16:25:26 +0100
|
|
|
|
Subject: [PATCH] drm/vc4: hdmi: Add reset callback
|
|
|
|
|
|
|
|
The BCM2711 and BCM283x HDMI controllers use a slightly different reset
|
|
|
|
sequence, so let's add a callback to reset the controller.
|
|
|
|
|
|
|
|
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/vc4/vc4_hdmi.c | 17 ++++++++++++-----
|
|
|
|
drivers/gpu/drm/vc4/vc4_hdmi.h | 3 +++
|
|
|
|
2 files changed, 15 insertions(+), 5 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
|
|
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
|
|
|
@@ -68,6 +68,15 @@ static int vc4_hdmi_debugfs_regs(struct
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
+static void vc4_hdmi_reset(struct vc4_hdmi *vc4_hdmi)
|
|
|
|
+{
|
|
|
|
+ HDMI_WRITE(HDMI_SW_RESET_CONTROL,
|
|
|
|
+ VC4_HDMI_SW_RESET_HDMI |
|
|
|
|
+ VC4_HDMI_SW_RESET_FORMAT_DETECT);
|
|
|
|
+
|
|
|
|
+ HDMI_WRITE(HDMI_SW_RESET_CONTROL, 0);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
static enum drm_connector_status
|
|
|
|
vc4_hdmi_connector_detect(struct drm_connector *connector, bool force)
|
|
|
|
{
|
|
|
|
@@ -372,11 +381,8 @@ static void vc4_hdmi_encoder_enable(stru
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
- HDMI_WRITE(HDMI_SW_RESET_CONTROL,
|
|
|
|
- VC4_HDMI_SW_RESET_HDMI |
|
|
|
|
- VC4_HDMI_SW_RESET_FORMAT_DETECT);
|
|
|
|
-
|
|
|
|
- HDMI_WRITE(HDMI_SW_RESET_CONTROL, 0);
|
|
|
|
+ if (vc4_hdmi->variant->reset)
|
|
|
|
+ vc4_hdmi->variant->reset(vc4_hdmi);
|
|
|
|
|
|
|
|
/* PHY should be in reset, like
|
|
|
|
* vc4_hdmi_encoder_disable() does.
|
2020-10-01 13:22:00 +00:00
|
|
|
@@ -1422,6 +1428,7 @@ static const struct vc4_hdmi_variant bcm
|
2020-05-27 13:12:04 +00:00
|
|
|
.num_registers = ARRAY_SIZE(vc4_hdmi_fields),
|
|
|
|
|
|
|
|
.init_resources = vc4_hdmi_init_resources,
|
|
|
|
+ .reset = vc4_hdmi_reset,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const struct of_device_id vc4_hdmi_dt_match[] = {
|
|
|
|
--- a/drivers/gpu/drm/vc4/vc4_hdmi.h
|
|
|
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
|
|
|
|
@@ -35,6 +35,9 @@ struct vc4_hdmi_variant {
|
|
|
|
* clocks, etc) for that variant.
|
|
|
|
*/
|
|
|
|
int (*init_resources)(struct vc4_hdmi *vc4_hdmi);
|
|
|
|
+
|
|
|
|
+ /* Callback to reset the HDMI block */
|
|
|
|
+ void (*reset)(struct vc4_hdmi *vc4_hdmi);
|
|
|
|
};
|
|
|
|
|
|
|
|
/* HDMI audio information */
|