Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/msm/dp: support setting the DP subconnector type

Read the downstream port info and set the subconnector type accordingly.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Patchwork: https://patchwork.freedesktop.org/patch/555531/
Link: https://lore.kernel.org/r/20230903222432.2894093-1-dmitry.baryshkov@linaro.org

+14 -1
+8 -1
drivers/gpu/drm/msm/dp/dp_display.c
··· 364 364 } 365 365 366 366 /* reset video pattern flag on disconnect */ 367 - if (!hpd) 367 + if (!hpd) { 368 368 dp->panel->video_test = false; 369 + drm_dp_set_subconnector_property(dp->dp_display.connector, 370 + connector_status_disconnected, 371 + dp->panel->dpcd, dp->panel->downstream_ports); 372 + } 369 373 370 374 dp->dp_display.is_connected = hpd; 371 375 ··· 396 392 goto end; 397 393 398 394 dp_link_process_request(dp->link); 395 + 396 + drm_dp_set_subconnector_property(dp->dp_display.connector, connector_status_connected, 397 + dp->panel->dpcd, dp->panel->downstream_ports); 399 398 400 399 edid = dp->panel->edid; 401 400
+5
drivers/gpu/drm/msm/dp/dp_panel.c
··· 161 161 } 162 162 } 163 163 164 + rc = drm_dp_read_downstream_info(panel->aux, dp_panel->dpcd, 165 + dp_panel->downstream_ports); 166 + if (rc) 167 + return rc; 168 + 164 169 kfree(dp_panel->edid); 165 170 dp_panel->edid = NULL; 166 171
+1
drivers/gpu/drm/msm/dp/dp_panel.h
··· 36 36 struct dp_panel { 37 37 /* dpcd raw data */ 38 38 u8 dpcd[DP_RECEIVER_CAP_SIZE]; 39 + u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS]; 39 40 40 41 struct dp_link_info link_info; 41 42 struct drm_dp_desc desc;