Skip to content

Commit 6c87f69

Browse files
svenpeter42jannau
authored andcommitted
drm: apple: Add oob hotplug event
Signed-off-by: Sven Peter <sven@svenpeter.dev>
1 parent 64c1390 commit 6c87f69

3 files changed

Lines changed: 39 additions & 0 deletions

File tree

drivers/gpu/drm/apple/apple_drv.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,22 @@ apple_connector_detect(struct drm_connector *connector, bool force)
189189
connector_status_disconnected;
190190
}
191191

192+
static void apple_connector_oob_hotplug(struct drm_connector *connector,
193+
enum drm_connector_status status)
194+
{
195+
struct apple_connector *apple_connector = to_apple_connector(connector);
196+
197+
printk("#### oob_hotplug status:0x%x ####\n", (u32)status);
198+
199+
if (status == connector_status_connected)
200+
dcp_dptx_connect_oob(apple_connector->dcp, 0);
201+
else if (status == connector_status_disconnected)
202+
dcp_dptx_disconnect_oob(apple_connector->dcp, 0);
203+
else
204+
dev_err(&apple_connector->dcp->dev, "unexpected connector status"
205+
":0x%x in oob_hotplug event\n", (u32)status);
206+
}
207+
192208
static void apple_crtc_atomic_enable(struct drm_crtc *crtc,
193209
struct drm_atomic_state *state)
194210
{
@@ -277,6 +293,7 @@ static const struct drm_connector_funcs apple_connector_funcs = {
277293
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
278294
.detect = apple_connector_detect,
279295
.debugfs_init = apple_connector_debugfs_init,
296+
.oob_hotplug_event = apple_connector_oob_hotplug,
280297
};
281298

282299
static const struct drm_connector_helper_funcs apple_connector_helper_funcs = {

drivers/gpu/drm/apple/dcp.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,17 @@ static int dcp_dptx_connect(struct apple_dcp *dcp, u32 port)
397397
return ret;
398398
}
399399

400+
int dcp_dptx_connect_oob(struct platform_device *pdev, u32 port)
401+
{
402+
struct apple_dcp *dcp = platform_get_drvdata(pdev);
403+
int err = dcp_dptx_connect(dcp, port);
404+
if (err < 0)
405+
return err;
406+
dptxport_set_hpd(dcp->dptxport[port].service, true);
407+
return 0;
408+
}
409+
EXPORT_SYMBOL_GPL(dcp_dptx_connect_oob);
410+
400411
static int dcp_dptx_disconnect(struct apple_dcp *dcp, u32 port)
401412
{
402413
dev_info(dcp->dev, "%s(port=%d)\n", __func__, port);
@@ -411,6 +422,14 @@ static int dcp_dptx_disconnect(struct apple_dcp *dcp, u32 port)
411422
return 0;
412423
}
413424

425+
int dcp_dptx_disconnect_oob(struct platform_device *pdev, u32 port)
426+
{
427+
struct apple_dcp *dcp = platform_get_drvdata(pdev);
428+
dptxport_set_hpd(dcp->dptxport[port].service, false);
429+
return dcp_dptx_disconnect(dcp, port);
430+
}
431+
EXPORT_SYMBOL_GPL(dcp_dptx_disconnect_oob);
432+
414433
static irqreturn_t dcp_dp2hdmi_hpd(int irq, void *data)
415434
{
416435
struct apple_dcp *dcp = data;

drivers/gpu/drm/apple/dcp.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ bool dcp_crtc_mode_fixup(struct drm_crtc *crtc,
5252
void dcp_set_dimensions(struct apple_dcp *dcp);
5353
void dcp_send_message(struct apple_dcp *dcp, u8 endpoint, u64 message);
5454

55+
int dcp_dptx_connect_oob(struct platform_device *pdev, u32 port);
56+
int dcp_dptx_disconnect_oob(struct platform_device *pdev, u32 port);
57+
5558
int iomfb_start_rtkit(struct apple_dcp *dcp);
5659
void iomfb_shutdown(struct apple_dcp *dcp);
5760
/* rtkit message handler for IOMFB messages */

0 commit comments

Comments
 (0)