Commit 724a4b40 authored by Chris Park's avatar Chris Park Committed by Alex Deucher
Browse files

drm/amd/display: Implement HDMI Read Request



[Why]
Read Request provides alterative method to polling to
the HDMI sinks that support it.

[How]
Implement Read Request where interrupt can be generated
by the sink.

Reviewed-by: default avatarJoshua Aberback <joshua.aberback@amd.com>
Signed-off-by: default avatarChris Park <chris.park@amd.com>
Signed-off-by: default avatarZaeem Mohamed <zaeem.mohamed@amd.com>
Tested-by: default avatarMark Broadworth <mark.broadworth@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent f53d0f48
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1436,6 +1436,7 @@ struct dc_scratch_space {
	enum signal_type connector_signal;
	enum dc_irq_source irq_source_hpd;
	enum dc_irq_source irq_source_hpd_rx;/* aka DP Short Pulse  */
	enum dc_irq_source irq_source_read_request;/* Read Request */

	bool is_hpd_filter_disabled;
	bool dp_ss_off;
+1 −0
Original line number Diff line number Diff line
@@ -210,6 +210,7 @@ struct dc_edid_caps {

	bool edid_hdmi;
	bool hdr_supported;
	bool rr_capable;

	struct dc_panel_patch panel_patch;
};
+14 −0
Original line number Diff line number Diff line
@@ -411,6 +411,20 @@ enum dc_irq_source dal_irq_get_rx_source(
	}
}

enum dc_irq_source dal_irq_get_read_request(
	const struct gpio *irq)
{
	enum gpio_id id = dal_gpio_get_id(irq);

	switch (id) {
	case GPIO_ID_HPD:
		return (enum dc_irq_source)(DC_IRQ_SOURCE_DCI2C_RR_DDC1 +
			dal_gpio_get_enum(irq));
	default:
		return DC_IRQ_SOURCE_INVALID;
	}
}

enum gpio_result dal_irq_setup_hpd_filter(
	struct gpio *irq,
	struct gpio_hpd_config *config)
+7 −0
Original line number Diff line number Diff line
@@ -168,6 +168,13 @@ enum dc_irq_source {
	DC_IRQ_SOURCE_DC5_VLINE2,
	DC_IRQ_SOURCE_DC6_VLINE2,

	DC_IRQ_SOURCE_DCI2C_RR_DDC1,
	DC_IRQ_SOURCE_DCI2C_RR_DDC2,
	DC_IRQ_SOURCE_DCI2C_RR_DDC3,
	DC_IRQ_SOURCE_DCI2C_RR_DDC4,
	DC_IRQ_SOURCE_DCI2C_RR_DDC5,
	DC_IRQ_SOURCE_DCI2C_RR_DDC6,

	DAL_IRQ_SOURCES_NUMBER
};

+4 −0
Original line number Diff line number Diff line
@@ -464,6 +464,7 @@ static bool construct_phy(struct dc_link *link,

	link->irq_source_hpd = DC_IRQ_SOURCE_INVALID;
	link->irq_source_hpd_rx = DC_IRQ_SOURCE_INVALID;
	link->irq_source_read_request = DC_IRQ_SOURCE_INVALID;
	link->link_status.dpcd_caps = &link->dpcd_caps;

	link->dc = init_params->dc;
@@ -514,6 +515,9 @@ static bool construct_phy(struct dc_link *link,
	case CONNECTOR_ID_HDMI_TYPE_A:
		link->connector_signal = SIGNAL_TYPE_HDMI_TYPE_A;

		if (link->hpd_gpio)
			link->irq_source_read_request =
					dal_irq_get_read_request(link->hpd_gpio);
		break;
	case CONNECTOR_ID_SINGLE_LINK_DVID:
	case CONNECTOR_ID_SINGLE_LINK_DVII:
Loading