Skip to content

Commit 724a4b4

Browse files
Chris Parkalexdeucher
authored andcommitted
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: Joshua Aberback <[email protected]> Signed-off-by: Chris Park <[email protected]> Signed-off-by: Zaeem Mohamed <[email protected]> Tested-by: Mark Broadworth <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent f53d0f4 commit 724a4b4

File tree

6 files changed

+30
-0
lines changed

6 files changed

+30
-0
lines changed

drivers/gpu/drm/amd/display/dc/dc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1436,6 +1436,7 @@ struct dc_scratch_space {
14361436
enum signal_type connector_signal;
14371437
enum dc_irq_source irq_source_hpd;
14381438
enum dc_irq_source irq_source_hpd_rx;/* aka DP Short Pulse */
1439+
enum dc_irq_source irq_source_read_request;/* Read Request */
14391440

14401441
bool is_hpd_filter_disabled;
14411442
bool dp_ss_off;

drivers/gpu/drm/amd/display/dc/dc_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ struct dc_edid_caps {
210210

211211
bool edid_hdmi;
212212
bool hdr_supported;
213+
bool rr_capable;
213214

214215
struct dc_panel_patch panel_patch;
215216
};

drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,20 @@ enum dc_irq_source dal_irq_get_rx_source(
411411
}
412412
}
413413

414+
enum dc_irq_source dal_irq_get_read_request(
415+
const struct gpio *irq)
416+
{
417+
enum gpio_id id = dal_gpio_get_id(irq);
418+
419+
switch (id) {
420+
case GPIO_ID_HPD:
421+
return (enum dc_irq_source)(DC_IRQ_SOURCE_DCI2C_RR_DDC1 +
422+
dal_gpio_get_enum(irq));
423+
default:
424+
return DC_IRQ_SOURCE_INVALID;
425+
}
426+
}
427+
414428
enum gpio_result dal_irq_setup_hpd_filter(
415429
struct gpio *irq,
416430
struct gpio_hpd_config *config)

drivers/gpu/drm/amd/display/dc/irq_types.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,13 @@ enum dc_irq_source {
168168
DC_IRQ_SOURCE_DC5_VLINE2,
169169
DC_IRQ_SOURCE_DC6_VLINE2,
170170

171+
DC_IRQ_SOURCE_DCI2C_RR_DDC1,
172+
DC_IRQ_SOURCE_DCI2C_RR_DDC2,
173+
DC_IRQ_SOURCE_DCI2C_RR_DDC3,
174+
DC_IRQ_SOURCE_DCI2C_RR_DDC4,
175+
DC_IRQ_SOURCE_DCI2C_RR_DDC5,
176+
DC_IRQ_SOURCE_DCI2C_RR_DDC6,
177+
171178
DAL_IRQ_SOURCES_NUMBER
172179
};
173180

drivers/gpu/drm/amd/display/dc/link/link_factory.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,7 @@ static bool construct_phy(struct dc_link *link,
464464

465465
link->irq_source_hpd = DC_IRQ_SOURCE_INVALID;
466466
link->irq_source_hpd_rx = DC_IRQ_SOURCE_INVALID;
467+
link->irq_source_read_request = DC_IRQ_SOURCE_INVALID;
467468
link->link_status.dpcd_caps = &link->dpcd_caps;
468469

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

518+
if (link->hpd_gpio)
519+
link->irq_source_read_request =
520+
dal_irq_get_read_request(link->hpd_gpio);
517521
break;
518522
case CONNECTOR_ID_SINGLE_LINK_DVID:
519523
case CONNECTOR_ID_SINGLE_LINK_DVII:

drivers/gpu/drm/amd/display/include/gpio_service_interface.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ enum dc_irq_source dal_irq_get_source(
8686
enum dc_irq_source dal_irq_get_rx_source(
8787
const struct gpio *irq);
8888

89+
enum dc_irq_source dal_irq_get_read_request(
90+
const struct gpio *irq);
91+
8992
enum gpio_result dal_irq_setup_hpd_filter(
9093
struct gpio *irq,
9194
struct gpio_hpd_config *config);

0 commit comments

Comments
 (0)