Skip to content

Commit 0d99d0f

Browse files
committed
drm: apple: dptx: Issue HPD event early on gpio/type-c disconnect
Atomic modesets during a display disconnect may result in unrecoverable state if the set_digital_out_mode() DCP firmware call fails. Mark the connector as early as possible as disconnected to make this more unlikely. TODO: investigate set_digital_out_mode() failure handling Signed-off-by: Janne Grunau <j@jannau.net>
1 parent 07b105c commit 0d99d0f

1 file changed

Lines changed: 14 additions & 1 deletion

File tree

  • drivers/gpu/drm/apple

drivers/gpu/drm/apple/dcp.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,14 @@ static int dcp_dptx_connect(struct apple_dcp *dcp, u32 port)
424424
return ret;
425425
}
426426

427+
static void disconnected_hpd_event(struct apple_connector *con)
428+
{
429+
if (con) {
430+
con->connected = 0;
431+
drm_kms_helper_connector_hotplug_event(&con->base);
432+
}
433+
}
434+
427435
static int dcp_dptx_disconnect(struct apple_dcp *dcp, u32 port)
428436
{
429437
dev_info(dcp->dev, "%s(port=%d)\n", __func__, port);
@@ -449,6 +457,8 @@ int dcp_dptx_disconnect_oob(struct platform_device *pdev, u32 port)
449457
{
450458
struct apple_dcp *dcp = platform_get_drvdata(pdev);
451459

460+
disconnected_hpd_event(dcp->connector);
461+
452462
if (dcp->avep)
453463
av_service_disconnect(dcp);
454464

@@ -675,8 +685,10 @@ void dcp_poweroff(struct platform_device *pdev)
675685

676686
if (dcp->hdmi_hpd) {
677687
bool connected = gpiod_get_value_cansleep(dcp->hdmi_hpd);
678-
if (!connected)
688+
if (!connected) {
689+
disconnected_hpd_event(dcp->connector);
679690
dcp_dptx_disconnect(dcp, 0);
691+
}
680692
}
681693
}
682694
EXPORT_SYMBOL(dcp_poweroff);
@@ -1261,6 +1273,7 @@ static int dcp_platform_suspend(struct device *dev)
12611273

12621274
if (dcp->hdmi_hpd_irq) {
12631275
disable_irq(dcp->hdmi_hpd_irq);
1276+
disconnected_hpd_event(dcp->connector);
12641277
dcp_dptx_disconnect(dcp, 0);
12651278
}
12661279
/*

0 commit comments

Comments
 (0)