Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d843f9d authored by Egbert Eich's avatar Egbert Eich Committed by Daniel Vetter
Browse files

DRM/I915: Add enum hpd_pin to intel_encoder.



To clean up hotplug support we add a new enum to intel_encoder:
enum hpd_pin. It allows the encoder to request a hpd line but leave
the details which IRQ is responsible on which chipset generation
to i915_irq.c.
This way requesting hotplug support will become really simple on
the encoder/connector level.

Signed-off-by: default avatarEgbert Eich <eich@suse.de>
Acked-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent fa00abe0
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -86,6 +86,19 @@ enum port {
};
#define port_name(p) ((p) + 'A')

enum hpd_pin {
	HPD_NONE = 0,
	HPD_PORT_A = HPD_NONE, /* PORT_A is internal */
	HPD_TV = HPD_NONE,     /* TV is known to be unreliable */
	HPD_CRT,
	HPD_SDVO_B,
	HPD_SDVO_C,
	HPD_PORT_B,
	HPD_PORT_C,
	HPD_PORT_D,
	HPD_NUM_PINS
};

#define I915_GEM_GPU_DOMAINS \
	(I915_GEM_DOMAIN_RENDER | \
	 I915_GEM_DOMAIN_SAMPLER | \
+2 −0
Original line number Diff line number Diff line
@@ -776,6 +776,8 @@ void intel_crt_init(struct drm_device *dev)

	crt->base.disable = intel_disable_crt;
	crt->base.enable = intel_enable_crt;
	if (I915_HAS_HOTPLUG(dev))
		crt->base.hpd_pin = HPD_CRT;
	if (HAS_DDI(dev))
		crt->base.get_hw_state = intel_ddi_get_hw_state;
	else
+4 −0
Original line number Diff line number Diff line
@@ -2821,18 +2821,22 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
	/* Set up the DDC bus. */
	switch (port) {
	case PORT_A:
		intel_encoder->hpd_pin = HPD_PORT_A;
		name = "DPDDC-A";
		break;
	case PORT_B:
		dev_priv->hotplug_supported_mask |= PORTB_HOTPLUG_INT_STATUS;
		intel_encoder->hpd_pin = HPD_PORT_B;
		name = "DPDDC-B";
		break;
	case PORT_C:
		dev_priv->hotplug_supported_mask |= PORTC_HOTPLUG_INT_STATUS;
		intel_encoder->hpd_pin = HPD_PORT_C;
		name = "DPDDC-C";
		break;
	case PORT_D:
		dev_priv->hotplug_supported_mask |= PORTD_HOTPLUG_INT_STATUS;
		intel_encoder->hpd_pin = HPD_PORT_D;
		name = "DPDDC-D";
		break;
	default:
+1 −0
Original line number Diff line number Diff line
@@ -168,6 +168,7 @@ struct intel_encoder {
	 * it is connected to in the pipe parameter. */
	bool (*get_hw_state)(struct intel_encoder *, enum pipe *pipe);
	int crtc_mask;
	enum hpd_pin hpd_pin;
};

struct intel_panel {
+4 −0
Original line number Diff line number Diff line
@@ -988,17 +988,21 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
	switch (port) {
	case PORT_B:
		intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
		intel_encoder->hpd_pin = HPD_PORT_B;
		dev_priv->hotplug_supported_mask |= PORTB_HOTPLUG_INT_STATUS;
		break;
	case PORT_C:
		intel_hdmi->ddc_bus = GMBUS_PORT_DPC;
		intel_encoder->hpd_pin = HPD_PORT_C;
		dev_priv->hotplug_supported_mask |= PORTC_HOTPLUG_INT_STATUS;
		break;
	case PORT_D:
		intel_hdmi->ddc_bus = GMBUS_PORT_DPD;
		intel_encoder->hpd_pin = HPD_PORT_D;
		dev_priv->hotplug_supported_mask |= PORTD_HOTPLUG_INT_STATUS;
		break;
	case PORT_A:
		intel_encoder->hpd_pin = HPD_PORT_A;
		/* Internal port only for eDP. */
	default:
		BUG();
Loading