drm/vc4: hdmi: Change CSC callback prototype
authorMaxime Ripard <maxime@cerno.tech>
Thu, 20 Jan 2022 15:16:19 +0000 (16:16 +0100)
committerMaxime Ripard <maxime@cerno.tech>
Tue, 25 Jan 2022 09:03:25 +0000 (10:03 +0100)
In order to support the YUV output, we'll need the atomic state to know
what is the state of the associated property in the CSC setup callback.

Let's change the prototype of that callback to allow us to access it.

Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20220120151625.594595-11-maxime@cerno.tech
drivers/gpu/drm/vc4/vc4_hdmi.c
drivers/gpu/drm/vc4/vc4_hdmi.h

index 3a3c8201c660d7ada5ce6e097255da24c3b48504..e3121eb5f605fbdf844bb9a6e888169cea6ac174 100644 (file)
@@ -735,6 +735,7 @@ static void vc4_hdmi_encoder_disable(struct drm_encoder *encoder)
 }
 
 static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi,
+                              struct drm_connector_state *state,
                               const struct drm_display_mode *mode)
 {
        unsigned long flags;
@@ -821,6 +822,7 @@ static void vc5_hdmi_set_csc_coeffs(struct vc4_hdmi *vc4_hdmi,
 }
 
 static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi,
+                              struct drm_connector_state *state,
                               const struct drm_display_mode *mode)
 {
        unsigned long flags;
@@ -1143,13 +1145,16 @@ static void vc4_hdmi_encoder_pre_crtc_enable(struct drm_encoder *encoder,
                                             struct drm_atomic_state *state)
 {
        struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
+       struct drm_connector *connector = &vc4_hdmi->connector;
        struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
+       struct drm_connector_state *conn_state =
+               drm_atomic_get_new_connector_state(state, connector);
        unsigned long flags;
 
        mutex_lock(&vc4_hdmi->mutex);
 
        if (vc4_hdmi->variant->csc_setup)
-               vc4_hdmi->variant->csc_setup(vc4_hdmi, mode);
+               vc4_hdmi->variant->csc_setup(vc4_hdmi, conn_state, mode);
 
        spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
        HDMI_WRITE(HDMI_FIFO_CTL, VC4_HDMI_FIFO_CTL_MASTER_SLAVE_N);
index 4a5536975bf68d83066243fc3b0acdcfadb7ebd6..2b6aaafc020ab76172a6b6fabb8b6c8952b20a1a 100644 (file)
@@ -77,6 +77,7 @@ struct vc4_hdmi_variant {
 
        /* Callback to enable / disable the CSC */
        void (*csc_setup)(struct vc4_hdmi *vc4_hdmi,
+                         struct drm_connector_state *state,
                          const struct drm_display_mode *mode);
 
        /* Callback to configure the video timings in the HDMI block */