mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 03:24:45 +01:00
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>
This commit is contained in:
parent
6cb52cba47
commit
b489216902
5 changed files with 25 additions and 20 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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)) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue