Loading drivers/gpu/drm/msm/dp/dp_display.c +43 −0 Original line number Diff line number Diff line Loading @@ -2628,6 +2628,46 @@ static void dp_display_wakeup_phy_layer(struct dp_display *dp_display, hpd->wakeup_phy(hpd, wakeup); } static int dp_display_get_display_type(struct dp_display *dp_display, const char **display_type) { struct dp_display_private *dp; if (!dp_display || !display_type) { pr_err("invalid input\n"); return -EINVAL; } dp = container_of(dp_display, struct dp_display_private, dp_display); *display_type = dp->parser->display_type; return 0; } static int dp_display_mst_get_fixed_topology_display_type( struct dp_display *dp_display, u32 strm_id, const char **display_type) { struct dp_display_private *dp; if (!dp_display || !display_type) { pr_err("invalid input\n"); return -EINVAL; } if (strm_id >= DP_STREAM_MAX) { pr_err("invalid stream id:%d\n", strm_id); return -EINVAL; } dp = container_of(dp_display, struct dp_display_private, dp_display); *display_type = dp->parser->mst_fixed_display_type[strm_id]; return 0; } static int dp_display_probe(struct platform_device *pdev) { int rc = 0; Loading Loading @@ -2706,6 +2746,9 @@ static int dp_display_probe(struct platform_device *pdev) dp_display_mst_get_fixed_topology_port; g_dp_display->wakeup_phy_layer = dp_display_wakeup_phy_layer; g_dp_display->get_display_type = dp_display_get_display_type; g_dp_display->mst_get_fixed_topology_display_type = dp_display_mst_get_fixed_topology_display_type; rc = component_add(&pdev->dev, &dp_display_comp_ops); if (rc) { Loading drivers/gpu/drm/msm/dp/dp_display.h +5 −0 Original line number Diff line number Diff line Loading @@ -130,6 +130,11 @@ struct dp_display { struct drm_connector *connector, char *pps_cmd); void (*wakeup_phy_layer)(struct dp_display *dp_display, bool wakeup); int (*get_display_type)(struct dp_display *dp_display, const char **display_type); int (*mst_get_fixed_topology_display_type)( struct dp_display *dp_display, u32 strm_id, const char **display_type); }; int dp_display_get_num_of_displays(void); Loading drivers/gpu/drm/msm/dp/dp_drm.c +13 −0 Original line number Diff line number Diff line Loading @@ -532,6 +532,19 @@ int dp_connector_get_modes(struct drm_connector *connector, return rc; } int dp_connnector_set_info_blob(struct drm_connector *connector, void *info, void *display, struct msm_mode_info *mode_info) { struct dp_display *dp_display = display; const char *display_type = NULL; dp_display->get_display_type(dp_display, &display_type); sde_kms_info_add_keystr(info, "display type", display_type); return 0; } int dp_drm_bridge_init(void *data, struct drm_encoder *encoder) { int rc = 0; Loading drivers/gpu/drm/msm/dp/dp_drm.h +12 −1 Original line number Diff line number Diff line /* * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -114,6 +114,17 @@ int dp_connector_get_info(struct drm_connector *connector, */ void dp_connector_post_open(struct drm_connector *connector, void *display); /** * dp_conn_set_info_blob - callback to perform info blob initialization * @connector: Pointer to drm connector structure * @info: Pointer to sde connector info structure * @display: Pointer to private display handle * @mode_info: Pointer to mode info structure * Returns: Zero on success */ int dp_connnector_set_info_blob(struct drm_connector *connector, void *info, void *display, struct msm_mode_info *mode_info); int dp_drm_bridge_init(void *display, struct drm_encoder *encoder); Loading drivers/gpu/drm/msm/dp/dp_mst_drm.c +26 −1 Original line number Diff line number Diff line Loading @@ -1706,12 +1706,37 @@ static void dp_mst_destroy_fixed_connector(struct drm_dp_mst_topology_mgr *mgr, dp_mst_destroy_connector(mgr, connector); } static int dp_mst_fixed_connnector_set_info_blob( struct drm_connector *connector, void *info, void *display, struct msm_mode_info *mode_info) { struct sde_connector *c_conn = to_sde_connector(connector); struct dp_display *dp_display = display; struct dp_mst_private *mst = dp_display->dp_mst_prv_info; const char *display_type = NULL; int i; for (i = 0; i < MAX_DP_MST_DRM_BRIDGES; i++) { if (mst->mst_bridge[i].base.encoder != c_conn->encoder) continue; dp_display->mst_get_fixed_topology_display_type(dp_display, mst->mst_bridge[i].id, &display_type); sde_kms_info_add_keystr(info, "display type", display_type); break; } return 0; } static struct drm_connector * dp_mst_drm_fixed_connector_init(struct dp_display *dp_display, struct drm_encoder *encoder) { static const struct sde_connector_ops dp_mst_connector_ops = { .post_init = NULL, .set_info_blob = dp_mst_fixed_connnector_set_info_blob, .detect = dp_mst_fixed_connector_detect, .get_modes = dp_mst_connector_get_modes, .mode_valid = dp_mst_connector_mode_valid, Loading Loading
drivers/gpu/drm/msm/dp/dp_display.c +43 −0 Original line number Diff line number Diff line Loading @@ -2628,6 +2628,46 @@ static void dp_display_wakeup_phy_layer(struct dp_display *dp_display, hpd->wakeup_phy(hpd, wakeup); } static int dp_display_get_display_type(struct dp_display *dp_display, const char **display_type) { struct dp_display_private *dp; if (!dp_display || !display_type) { pr_err("invalid input\n"); return -EINVAL; } dp = container_of(dp_display, struct dp_display_private, dp_display); *display_type = dp->parser->display_type; return 0; } static int dp_display_mst_get_fixed_topology_display_type( struct dp_display *dp_display, u32 strm_id, const char **display_type) { struct dp_display_private *dp; if (!dp_display || !display_type) { pr_err("invalid input\n"); return -EINVAL; } if (strm_id >= DP_STREAM_MAX) { pr_err("invalid stream id:%d\n", strm_id); return -EINVAL; } dp = container_of(dp_display, struct dp_display_private, dp_display); *display_type = dp->parser->mst_fixed_display_type[strm_id]; return 0; } static int dp_display_probe(struct platform_device *pdev) { int rc = 0; Loading Loading @@ -2706,6 +2746,9 @@ static int dp_display_probe(struct platform_device *pdev) dp_display_mst_get_fixed_topology_port; g_dp_display->wakeup_phy_layer = dp_display_wakeup_phy_layer; g_dp_display->get_display_type = dp_display_get_display_type; g_dp_display->mst_get_fixed_topology_display_type = dp_display_mst_get_fixed_topology_display_type; rc = component_add(&pdev->dev, &dp_display_comp_ops); if (rc) { Loading
drivers/gpu/drm/msm/dp/dp_display.h +5 −0 Original line number Diff line number Diff line Loading @@ -130,6 +130,11 @@ struct dp_display { struct drm_connector *connector, char *pps_cmd); void (*wakeup_phy_layer)(struct dp_display *dp_display, bool wakeup); int (*get_display_type)(struct dp_display *dp_display, const char **display_type); int (*mst_get_fixed_topology_display_type)( struct dp_display *dp_display, u32 strm_id, const char **display_type); }; int dp_display_get_num_of_displays(void); Loading
drivers/gpu/drm/msm/dp/dp_drm.c +13 −0 Original line number Diff line number Diff line Loading @@ -532,6 +532,19 @@ int dp_connector_get_modes(struct drm_connector *connector, return rc; } int dp_connnector_set_info_blob(struct drm_connector *connector, void *info, void *display, struct msm_mode_info *mode_info) { struct dp_display *dp_display = display; const char *display_type = NULL; dp_display->get_display_type(dp_display, &display_type); sde_kms_info_add_keystr(info, "display type", display_type); return 0; } int dp_drm_bridge_init(void *data, struct drm_encoder *encoder) { int rc = 0; Loading
drivers/gpu/drm/msm/dp/dp_drm.h +12 −1 Original line number Diff line number Diff line /* * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -114,6 +114,17 @@ int dp_connector_get_info(struct drm_connector *connector, */ void dp_connector_post_open(struct drm_connector *connector, void *display); /** * dp_conn_set_info_blob - callback to perform info blob initialization * @connector: Pointer to drm connector structure * @info: Pointer to sde connector info structure * @display: Pointer to private display handle * @mode_info: Pointer to mode info structure * Returns: Zero on success */ int dp_connnector_set_info_blob(struct drm_connector *connector, void *info, void *display, struct msm_mode_info *mode_info); int dp_drm_bridge_init(void *display, struct drm_encoder *encoder); Loading
drivers/gpu/drm/msm/dp/dp_mst_drm.c +26 −1 Original line number Diff line number Diff line Loading @@ -1706,12 +1706,37 @@ static void dp_mst_destroy_fixed_connector(struct drm_dp_mst_topology_mgr *mgr, dp_mst_destroy_connector(mgr, connector); } static int dp_mst_fixed_connnector_set_info_blob( struct drm_connector *connector, void *info, void *display, struct msm_mode_info *mode_info) { struct sde_connector *c_conn = to_sde_connector(connector); struct dp_display *dp_display = display; struct dp_mst_private *mst = dp_display->dp_mst_prv_info; const char *display_type = NULL; int i; for (i = 0; i < MAX_DP_MST_DRM_BRIDGES; i++) { if (mst->mst_bridge[i].base.encoder != c_conn->encoder) continue; dp_display->mst_get_fixed_topology_display_type(dp_display, mst->mst_bridge[i].id, &display_type); sde_kms_info_add_keystr(info, "display type", display_type); break; } return 0; } static struct drm_connector * dp_mst_drm_fixed_connector_init(struct dp_display *dp_display, struct drm_encoder *encoder) { static const struct sde_connector_ops dp_mst_connector_ops = { .post_init = NULL, .set_info_blob = dp_mst_fixed_connnector_set_info_blob, .detect = dp_mst_fixed_connector_detect, .get_modes = dp_mst_connector_get_modes, .mode_valid = dp_mst_connector_mode_valid, Loading