From b572376bedc67f334d005dabd7727dd318eeba44 Mon Sep 17 00:00:00 2001 From: Alistair Delva Date: Fri, 17 Apr 2020 11:23:00 -0700 Subject: [PATCH] ANDROID: GKI: Add 'dsc_info' to struct drm_dp_mst_port Resolves an abi diff. Also adds setter/getter functions which are also exported. Bug: 152417756 Signed-off-by: Alistair Delva Change-Id: Ieb567ae1915446720ed2e77651a9a49f1e295360 --- drivers/gpu/drm/drm_dp_mst_topology.c | 36 +++++++++++++++++++++++++++ include/drm/drm_dp_mst_helper.h | 23 +++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index fa944e0da91a..3a766ce818d6 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -1810,6 +1810,42 @@ int drm_dp_send_power_updown_phy(struct drm_dp_mst_topology_mgr *mgr, } EXPORT_SYMBOL(drm_dp_send_power_updown_phy); +int drm_dp_mst_get_dsc_info(struct drm_dp_mst_topology_mgr *mgr, + struct drm_dp_mst_port *port, + struct drm_dp_mst_dsc_info *dsc_info) +{ + if (!dsc_info) + return -EINVAL; + + port = drm_dp_get_validated_port_ref(mgr, port); + if (!port) + return -EINVAL; + + memcpy(dsc_info, &port->dsc_info, sizeof(struct drm_dp_mst_dsc_info)); + drm_dp_put_port(port); + + return 0; +} +EXPORT_SYMBOL_GPL(drm_dp_mst_get_dsc_info); + +int drm_dp_mst_update_dsc_info(struct drm_dp_mst_topology_mgr *mgr, + struct drm_dp_mst_port *port, + struct drm_dp_mst_dsc_info *dsc_info) +{ + if (!dsc_info) + return -EINVAL; + + port = drm_dp_get_validated_port_ref(mgr, port); + if (!port) + return -EINVAL; + + memcpy(&port->dsc_info, dsc_info, sizeof(struct drm_dp_mst_dsc_info)); + drm_dp_put_port(port); + + return 0; +} +EXPORT_SYMBOL_GPL(drm_dp_mst_update_dsc_info); + static int drm_dp_create_payload_step1(struct drm_dp_mst_topology_mgr *mgr, int id, struct drm_dp_payload *payload) diff --git a/include/drm/drm_dp_mst_helper.h b/include/drm/drm_dp_mst_helper.h index df3892782b62..f2bb8040bf17 100644 --- a/include/drm/drm_dp_mst_helper.h +++ b/include/drm/drm_dp_mst_helper.h @@ -27,6 +27,7 @@ #include struct drm_dp_mst_branch; +struct drm_dp_mst_port; /** * struct drm_dp_vcpi - Virtual Channel Payload Identifier @@ -42,6 +43,18 @@ struct drm_dp_vcpi { int num_slots; }; +struct drm_dp_mst_dsc_dpcd_cache { + bool valid; + bool use_parent_dpcd; + u8 dsc_dpcd[16]; +}; + +struct drm_dp_mst_dsc_info { + bool dsc_support; + struct drm_dp_mst_port *dsc_port; + struct drm_dp_mst_dsc_dpcd_cache dsc_dpcd_cache; +}; + /** * struct drm_dp_mst_port - MST port * @kref: reference count for this port. @@ -100,6 +113,8 @@ struct drm_dp_mst_port { bool has_audio; bool fec_capable; + + struct drm_dp_mst_dsc_info dsc_info; }; /** @@ -637,4 +652,12 @@ int drm_dp_atomic_release_vcpi_slots(struct drm_atomic_state *state, int drm_dp_send_power_updown_phy(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, bool power_up); +int drm_dp_mst_get_dsc_info(struct drm_dp_mst_topology_mgr *mgr, + struct drm_dp_mst_port *port, + struct drm_dp_mst_dsc_info *dsc_info); + +int drm_dp_mst_update_dsc_info(struct drm_dp_mst_topology_mgr *mgr, + struct drm_dp_mst_port *port, + struct drm_dp_mst_dsc_info *dsc_info); + #endif