Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915/display: add intel_dig_port_alloc()

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>

+25 -20
+1 -6
drivers/gpu/drm/i915/display/g4x_dp.c
··· 1300 1300 drm_dbg_kms(display->drm, "No VBT child device for DP-%c\n", 1301 1301 port_name(port)); 1302 1302 1303 - dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL); 1303 + dig_port = intel_dig_port_alloc(); 1304 1304 if (!dig_port) 1305 1305 return false; 1306 - 1307 - dig_port->aux_ch = AUX_CH_NONE; 1308 1306 1309 1307 intel_connector = intel_connector_alloc(); 1310 1308 if (!intel_connector) ··· 1312 1314 encoder = &intel_encoder->base; 1313 1315 1314 1316 intel_encoder->devdata = devdata; 1315 - 1316 - mutex_init(&dig_port->hdcp.mutex); 1317 1317 1318 1318 if (drm_encoder_init(display->drm, &intel_encoder->base, 1319 1319 &intel_dp_enc_funcs, DRM_MODE_ENCODER_TMDS, ··· 1382 1386 } 1383 1387 1384 1388 dig_port->dp.output_reg = output_reg; 1385 - dig_port->max_lanes = 4; 1386 1389 1387 1390 intel_encoder->type = INTEL_OUTPUT_DP; 1388 1391 intel_encoder->power_domain = intel_display_power_ddi_lanes_domain(display, port);
+2 -7
drivers/gpu/drm/i915/display/g4x_hdmi.c
··· 19 19 #include "intel_display_types.h" 20 20 #include "intel_dp_aux.h" 21 21 #include "intel_dpio_phy.h" 22 + #include "intel_encoder.h" 22 23 #include "intel_fdi.h" 23 24 #include "intel_fifo_underrun.h" 24 25 #include "intel_hdmi.h" ··· 691 690 drm_dbg_kms(display->drm, "No VBT child device for HDMI-%c\n", 692 691 port_name(port)); 693 692 694 - dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL); 693 + dig_port = intel_dig_port_alloc(); 695 694 if (!dig_port) 696 695 return false; 697 - 698 - dig_port->aux_ch = AUX_CH_NONE; 699 696 700 697 intel_connector = intel_connector_alloc(); 701 698 if (!intel_connector) ··· 702 703 intel_encoder = &dig_port->base; 703 704 704 705 intel_encoder->devdata = devdata; 705 - 706 - mutex_init(&dig_port->hdcp.mutex); 707 706 708 707 if (drm_encoder_init(display->drm, &intel_encoder->base, 709 708 &intel_hdmi_enc_funcs, DRM_MODE_ENCODER_TMDS, ··· 764 767 intel_encoder->cloneable |= BIT(INTEL_OUTPUT_HDMI); 765 768 766 769 dig_port->hdmi.hdmi_reg = hdmi_reg; 767 - dig_port->dp.output_reg = INVALID_MMIO_REG; 768 - dig_port->max_lanes = 4; 769 770 770 771 intel_infoframe_init(dig_port); 771 772
+1 -7
drivers/gpu/drm/i915/display/intel_ddi.c
··· 5158 5158 phy_name(phy)); 5159 5159 } 5160 5160 5161 - dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL); 5161 + dig_port = intel_dig_port_alloc(); 5162 5162 if (!dig_port) 5163 5163 return; 5164 - 5165 - dig_port->aux_ch = AUX_CH_NONE; 5166 5164 5167 5165 encoder = &dig_port->base; 5168 5166 encoder->devdata = devdata; ··· 5198 5200 } 5199 5201 5200 5202 intel_encoder_link_check_init(encoder, intel_ddi_link_check); 5201 - 5202 - mutex_init(&dig_port->hdcp.mutex); 5203 - dig_port->hdcp.num_streams = 0; 5204 5203 5205 5204 encoder->hotplug = intel_ddi_hotplug; 5206 5205 encoder->compute_output_type = intel_ddi_compute_output_type; ··· 5336 5341 5337 5342 dig_port->ddi_a_4_lanes = DISPLAY_VER(display) < 11 && ddi_buf_ctl & DDI_A_4_LANES; 5338 5343 5339 - dig_port->dp.output_reg = INVALID_MMIO_REG; 5340 5344 dig_port->max_lanes = intel_ddi_max_lanes(dig_port); 5341 5345 5342 5346 if (need_aux_ch(encoder, init_dp)) {
+18
drivers/gpu/drm/i915/display/intel_encoder.c
··· 103 103 if (encoder->shutdown_complete) 104 104 encoder->shutdown_complete(encoder); 105 105 } 106 + 107 + struct intel_digital_port *intel_dig_port_alloc(void) 108 + { 109 + struct intel_digital_port *dig_port; 110 + 111 + dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL); 112 + if (!dig_port) 113 + return NULL; 114 + 115 + dig_port->hdmi.hdmi_reg = INVALID_MMIO_REG; 116 + dig_port->dp.output_reg = INVALID_MMIO_REG; 117 + dig_port->aux_ch = AUX_CH_NONE; 118 + dig_port->max_lanes = 4; 119 + 120 + mutex_init(&dig_port->hdcp.mutex); 121 + 122 + return dig_port; 123 + }
+3
drivers/gpu/drm/i915/display/intel_encoder.h
··· 6 6 #ifndef __INTEL_ENCODER_H__ 7 7 #define __INTEL_ENCODER_H__ 8 8 9 + struct intel_digital_port; 9 10 struct intel_display; 10 11 struct intel_encoder; 11 12 ··· 20 19 21 20 void intel_encoder_block_all_hpds(struct intel_display *display); 22 21 void intel_encoder_unblock_all_hpds(struct intel_display *display); 22 + 23 + struct intel_digital_port *intel_dig_port_alloc(void); 23 24 24 25 #endif /* __INTEL_ENCODER_H__ */