89 lines
3.1 KiB
Diff
89 lines
3.1 KiB
Diff
From ae3436a5e7c2ef4f92938133bd99f92fc47ea34e Mon Sep 17 00:00:00 2001
|
|
From: Johan Jonker <jbx6244@gmail.com>
|
|
Date: Thu, 2 Nov 2023 14:42:04 +0100
|
|
Subject: [PATCH] drm/rockchip: rk3066_hdmi: Switch encoder hooks to atomic
|
|
|
|
The rk3066_hdmi encoder still uses the non atomic variants
|
|
of enable and disable. Convert to their atomic equivalents.
|
|
In atomic mode there is no need to save the adjusted mode,
|
|
so remove the mode_set function.
|
|
|
|
Signed-off-by: Johan Jonker <jbx6244@gmail.com>
|
|
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
|
Link: https://patchwork.freedesktop.org/patch/msgid/034c3446-d619-f4c3-3aaa-ab51dc19d07f@gmail.com
|
|
---
|
|
drivers/gpu/drm/rockchip/rk3066_hdmi.c | 35 +++++++++++++-------------
|
|
1 file changed, 17 insertions(+), 18 deletions(-)
|
|
|
|
--- a/drivers/gpu/drm/rockchip/rk3066_hdmi.c
|
|
+++ b/drivers/gpu/drm/rockchip/rk3066_hdmi.c
|
|
@@ -54,7 +54,6 @@ struct rk3066_hdmi {
|
|
unsigned int tmdsclk;
|
|
|
|
struct hdmi_data_info hdmi_data;
|
|
- struct drm_display_mode previous_mode;
|
|
};
|
|
|
|
static struct rk3066_hdmi *encoder_to_rk3066_hdmi(struct drm_encoder *encoder)
|
|
@@ -386,21 +385,21 @@ static int rk3066_hdmi_setup(struct rk30
|
|
return 0;
|
|
}
|
|
|
|
-static void
|
|
-rk3066_hdmi_encoder_mode_set(struct drm_encoder *encoder,
|
|
- struct drm_display_mode *mode,
|
|
- struct drm_display_mode *adj_mode)
|
|
+static void rk3066_hdmi_encoder_enable(struct drm_encoder *encoder,
|
|
+ struct drm_atomic_state *state)
|
|
{
|
|
struct rk3066_hdmi *hdmi = encoder_to_rk3066_hdmi(encoder);
|
|
+ struct drm_connector_state *conn_state;
|
|
+ struct drm_crtc_state *crtc_state;
|
|
+ int mux, val;
|
|
|
|
- /* Store the display mode for plugin/DPMS poweron events. */
|
|
- drm_mode_copy(&hdmi->previous_mode, adj_mode);
|
|
-}
|
|
+ conn_state = drm_atomic_get_new_connector_state(state, &hdmi->connector);
|
|
+ if (WARN_ON(!conn_state))
|
|
+ return;
|
|
|
|
-static void rk3066_hdmi_encoder_enable(struct drm_encoder *encoder)
|
|
-{
|
|
- struct rk3066_hdmi *hdmi = encoder_to_rk3066_hdmi(encoder);
|
|
- int mux, val;
|
|
+ crtc_state = drm_atomic_get_new_crtc_state(state, conn_state->crtc);
|
|
+ if (WARN_ON(!crtc_state))
|
|
+ return;
|
|
|
|
mux = drm_of_encoder_active_endpoint_id(hdmi->dev->of_node, encoder);
|
|
if (mux)
|
|
@@ -413,10 +412,11 @@ static void rk3066_hdmi_encoder_enable(s
|
|
DRM_DEV_DEBUG(hdmi->dev, "hdmi encoder enable select: vop%s\n",
|
|
(mux) ? "1" : "0");
|
|
|
|
- rk3066_hdmi_setup(hdmi, &hdmi->previous_mode);
|
|
+ rk3066_hdmi_setup(hdmi, &crtc_state->adjusted_mode);
|
|
}
|
|
|
|
-static void rk3066_hdmi_encoder_disable(struct drm_encoder *encoder)
|
|
+static void rk3066_hdmi_encoder_disable(struct drm_encoder *encoder,
|
|
+ struct drm_atomic_state *state)
|
|
{
|
|
struct rk3066_hdmi *hdmi = encoder_to_rk3066_hdmi(encoder);
|
|
|
|
@@ -448,10 +448,9 @@ rk3066_hdmi_encoder_atomic_check(struct
|
|
|
|
static const
|
|
struct drm_encoder_helper_funcs rk3066_hdmi_encoder_helper_funcs = {
|
|
- .enable = rk3066_hdmi_encoder_enable,
|
|
- .disable = rk3066_hdmi_encoder_disable,
|
|
- .mode_set = rk3066_hdmi_encoder_mode_set,
|
|
- .atomic_check = rk3066_hdmi_encoder_atomic_check,
|
|
+ .atomic_check = rk3066_hdmi_encoder_atomic_check,
|
|
+ .atomic_enable = rk3066_hdmi_encoder_enable,
|
|
+ .atomic_disable = rk3066_hdmi_encoder_disable,
|
|
};
|
|
|
|
static enum drm_connector_status
|