]> www.infradead.org Git - users/willy/xarray.git/commitdiff
drm/i915/display: add intel_dig_port_alloc()
authorJani Nikula <jani.nikula@intel.com>
Tue, 29 Jul 2025 11:17:08 +0000 (14:17 +0300)
committerJani Nikula <jani.nikula@intel.com>
Tue, 12 Aug 2025 18:23:38 +0000 (21:23 +0300)
Add a common allocator function for struct intel_digital_port, with some
member default initialization to deduplicate them from everywhere
else. This is similar to intel_connector_alloc().

At least for now, place this in intel_encoder.[ch]. We don't have a
dedicated file for dig port stuff, and there wouldn't be much to add
there anyway. A digital port is a sort of subclass of encoder, so the
location isn't far off the mark.

Reviewed-by: Dibin Moolakadan Subrahmanian <dibin.moolakadan.subrahmanian@intel.com>
Link: https://lore.kernel.org/r/4d2da1a40698f85014140f586405b19795437e81.1753787803.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/g4x_dp.c
drivers/gpu/drm/i915/display/g4x_hdmi.c
drivers/gpu/drm/i915/display/intel_ddi.c
drivers/gpu/drm/i915/display/intel_encoder.c
drivers/gpu/drm/i915/display/intel_encoder.h

index 846dbd8ae93103c937f52f65c5fbde67d51fb98d..aa159f9ce12fd392163b9a61981a33d884388d51 100644 (file)
@@ -1300,12 +1300,10 @@ bool g4x_dp_init(struct intel_display *display,
                drm_dbg_kms(display->drm, "No VBT child device for DP-%c\n",
                            port_name(port));
 
-       dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL);
+       dig_port = intel_dig_port_alloc();
        if (!dig_port)
                return false;
 
-       dig_port->aux_ch = AUX_CH_NONE;
-
        intel_connector = intel_connector_alloc();
        if (!intel_connector)
                goto err_connector_alloc;
@@ -1315,8 +1313,6 @@ bool g4x_dp_init(struct intel_display *display,
 
        intel_encoder->devdata = devdata;
 
-       mutex_init(&dig_port->hdcp.mutex);
-
        if (drm_encoder_init(display->drm, &intel_encoder->base,
                             &intel_dp_enc_funcs, DRM_MODE_ENCODER_TMDS,
                             "DP %c", port_name(port)))
@@ -1386,7 +1382,6 @@ bool g4x_dp_init(struct intel_display *display,
        }
 
        dig_port->dp.output_reg = output_reg;
-       dig_port->max_lanes = 4;
 
        intel_encoder->type = INTEL_OUTPUT_DP;
        intel_encoder->power_domain = intel_display_power_ddi_lanes_domain(display, port);
index 2610f5702fb9a7b5591b70114b996cfed40748e7..108ebd97f9e44bf40b201a00f2df6c8b2ffbd19a 100644 (file)
@@ -19,6 +19,7 @@
 #include "intel_display_types.h"
 #include "intel_dp_aux.h"
 #include "intel_dpio_phy.h"
+#include "intel_encoder.h"
 #include "intel_fdi.h"
 #include "intel_fifo_underrun.h"
 #include "intel_hdmi.h"
@@ -690,12 +691,10 @@ bool g4x_hdmi_init(struct intel_display *display,
                drm_dbg_kms(display->drm, "No VBT child device for HDMI-%c\n",
                            port_name(port));
 
-       dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL);
+       dig_port = intel_dig_port_alloc();
        if (!dig_port)
                return false;
 
-       dig_port->aux_ch = AUX_CH_NONE;
-
        intel_connector = intel_connector_alloc();
        if (!intel_connector)
                goto err_connector_alloc;
@@ -704,8 +703,6 @@ bool g4x_hdmi_init(struct intel_display *display,
 
        intel_encoder->devdata = devdata;
 
-       mutex_init(&dig_port->hdcp.mutex);
-
        if (drm_encoder_init(display->drm, &intel_encoder->base,
                             &intel_hdmi_enc_funcs, DRM_MODE_ENCODER_TMDS,
                             "HDMI %c", port_name(port)))
@@ -767,8 +764,6 @@ bool g4x_hdmi_init(struct intel_display *display,
                intel_encoder->cloneable |= BIT(INTEL_OUTPUT_HDMI);
 
        dig_port->hdmi.hdmi_reg = hdmi_reg;
-       dig_port->dp.output_reg = INVALID_MMIO_REG;
-       dig_port->max_lanes = 4;
 
        intel_infoframe_init(dig_port);
 
index 866ed3e4666458de510f521060398ad125f1b202..18040f2c8c0d531be0494b8e300fdfd5346b029b 100644 (file)
@@ -5158,12 +5158,10 @@ void intel_ddi_init(struct intel_display *display,
                            phy_name(phy));
        }
 
-       dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL);
+       dig_port = intel_dig_port_alloc();
        if (!dig_port)
                return;
 
-       dig_port->aux_ch = AUX_CH_NONE;
-
        encoder = &dig_port->base;
        encoder->devdata = devdata;
 
@@ -5201,9 +5199,6 @@ void intel_ddi_init(struct intel_display *display,
 
        intel_encoder_link_check_init(encoder, intel_ddi_link_check);
 
-       mutex_init(&dig_port->hdcp.mutex);
-       dig_port->hdcp.num_streams = 0;
-
        encoder->hotplug = intel_ddi_hotplug;
        encoder->compute_output_type = intel_ddi_compute_output_type;
        encoder->compute_config = intel_ddi_compute_config;
@@ -5341,7 +5336,6 @@ void intel_ddi_init(struct intel_display *display,
 
        dig_port->ddi_a_4_lanes = DISPLAY_VER(display) < 11 && ddi_buf_ctl & DDI_A_4_LANES;
 
-       dig_port->dp.output_reg = INVALID_MMIO_REG;
        dig_port->max_lanes = intel_ddi_max_lanes(dig_port);
 
        if (need_aux_ch(encoder, init_dp)) {
index 4e2b77b8767890e11245103346635edb64a5e78b..2ffe1f251ef804d289bcda96e9dada8928deeb11 100644 (file)
@@ -103,3 +103,21 @@ void intel_encoder_shutdown_all(struct intel_display *display)
                if (encoder->shutdown_complete)
                        encoder->shutdown_complete(encoder);
 }
+
+struct intel_digital_port *intel_dig_port_alloc(void)
+{
+       struct intel_digital_port *dig_port;
+
+       dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL);
+       if (!dig_port)
+               return NULL;
+
+       dig_port->hdmi.hdmi_reg = INVALID_MMIO_REG;
+       dig_port->dp.output_reg = INVALID_MMIO_REG;
+       dig_port->aux_ch = AUX_CH_NONE;
+       dig_port->max_lanes = 4;
+
+       mutex_init(&dig_port->hdcp.mutex);
+
+       return dig_port;
+}
index e1d3aeab7c00f56c9db6ebff956f3f2e421c6cb6..ace0fe1a8f27a1686edf2590e740faf4c5a51c87 100644 (file)
@@ -6,6 +6,7 @@
 #ifndef __INTEL_ENCODER_H__
 #define __INTEL_ENCODER_H__
 
+struct intel_digital_port;
 struct intel_display;
 struct intel_encoder;
 
@@ -20,4 +21,6 @@ void intel_encoder_shutdown_all(struct intel_display *display);
 void intel_encoder_block_all_hpds(struct intel_display *display);
 void intel_encoder_unblock_all_hpds(struct intel_display *display);
 
+struct intel_digital_port *intel_dig_port_alloc(void);
+
 #endif /* __INTEL_ENCODER_H__ */