aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0660-drm-amd-dal-Remove-connector.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0660-drm-amd-dal-Remove-connector.patch')
-rw-r--r--common/recipes-kernel/linux/files/0660-drm-amd-dal-Remove-connector.patch1170
1 files changed, 1170 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0660-drm-amd-dal-Remove-connector.patch b/common/recipes-kernel/linux/files/0660-drm-amd-dal-Remove-connector.patch
new file mode 100644
index 00000000..4255fbfe
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0660-drm-amd-dal-Remove-connector.patch
@@ -0,0 +1,1170 @@
+From 4a73a01e394537a888a0842062d3c5f0eef5ddd6 Mon Sep 17 00:00:00 2001
+From: Harry Wentland <harry.wentland@amd.com>
+Date: Thu, 17 Dec 2015 22:14:58 -0500
+Subject: [PATCH 0660/1110] drm/amd/dal: Remove connector
+
+We're programming hpd filter but no hpd polling.
+
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+---
+ drivers/gpu/drm/amd/dal/dc/Makefile | 2 +-
+ drivers/gpu/drm/amd/dal/dc/connector/Makefile | 10 -
+ drivers/gpu/drm/amd/dal/dc/connector/connector.h | 39 --
+ .../gpu/drm/amd/dal/dc/connector/connector_base.c | 421 ---------------------
+ .../drm/amd/dal/dc/connector/connector_signals.c | 238 ------------
+ drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 188 +++++++--
+ drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c | 1 -
+ drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c | 1 -
+ drivers/gpu/drm/amd/dal/dc/inc/core_types.h | 1 -
+ .../gpu/drm/amd/dal/include/connector_interface.h | 82 ----
+ 10 files changed, 161 insertions(+), 822 deletions(-)
+ delete mode 100644 drivers/gpu/drm/amd/dal/dc/connector/Makefile
+ delete mode 100644 drivers/gpu/drm/amd/dal/dc/connector/connector.h
+ delete mode 100644 drivers/gpu/drm/amd/dal/dc/connector/connector_base.c
+ delete mode 100644 drivers/gpu/drm/amd/dal/dc/connector/connector_signals.c
+ delete mode 100644 drivers/gpu/drm/amd/dal/include/connector_interface.h
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/Makefile b/drivers/gpu/drm/amd/dal/dc/Makefile
+index 285e30d..0ab2c18 100644
+--- a/drivers/gpu/drm/amd/dal/dc/Makefile
++++ b/drivers/gpu/drm/amd/dal/dc/Makefile
+@@ -2,7 +2,7 @@
+ # Makefile for Display Core (dc) component.
+ #
+
+-DC_LIBS = adapter asic_capability audio basics bios calcs connector \
++DC_LIBS = adapter asic_capability audio basics bios calcs \
+ dcs gpio gpu i2caux irq dce_base
+
+ ifdef CONFIG_DRM_AMD_DAL_DCE11_0
+diff --git a/drivers/gpu/drm/amd/dal/dc/connector/Makefile b/drivers/gpu/drm/amd/dal/dc/connector/Makefile
+deleted file mode 100644
+index ebd4115..0000000
+--- a/drivers/gpu/drm/amd/dal/dc/connector/Makefile
++++ /dev/null
+@@ -1,10 +0,0 @@
+-#
+-# Makefile for the 'connector' sub-component of DAL.
+-# It provides the control and status of HW connectors blocks.
+-
+-
+-CONNECTOR = connector_base.o connector_signals.o
+-
+-AMD_DAL_CONNECTOR = $(addprefix $(AMDDALPATH)/dc/connector/,$(CONNECTOR))
+-
+-AMD_DAL_FILES += $(AMD_DAL_CONNECTOR)
+diff --git a/drivers/gpu/drm/amd/dal/dc/connector/connector.h b/drivers/gpu/drm/amd/dal/dc/connector/connector.h
+deleted file mode 100644
+index 7d6057b..0000000
+--- a/drivers/gpu/drm/amd/dal/dc/connector/connector.h
++++ /dev/null
+@@ -1,39 +0,0 @@
+-/*
+- * Copyright 2012-15 Advanced Micro Devices, Inc.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included in
+- * all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+- * OTHER DEALINGS IN THE SOFTWARE.
+- *
+- * Authors: AMD
+- *
+- */
+-
+-#ifndef __DAL_CONNECTOR_H__
+-#define __DAL_CONNECTOR_H__
+-
+-#include "include/connector_interface.h"
+-
+-extern const uint32_t number_of_default_signals;
+-extern const uint32_t number_of_signals;
+-
+-/* Indexed by enum connector_id */
+-extern const struct connector_signals default_signals[];
+-/* Indexed by enum connector_id */
+-extern const struct connector_signals supported_signals[];
+-
+-#endif
+diff --git a/drivers/gpu/drm/amd/dal/dc/connector/connector_base.c b/drivers/gpu/drm/amd/dal/dc/connector/connector_base.c
+deleted file mode 100644
+index 34005fd..0000000
+--- a/drivers/gpu/drm/amd/dal/dc/connector/connector_base.c
++++ /dev/null
+@@ -1,421 +0,0 @@
+-/*
+- * Copyright 2012-15 Advanced Micro Devices, Inc.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included in
+- * all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+- * OTHER DEALINGS IN THE SOFTWARE.
+- *
+- * Authors: AMD
+- *
+- */
+-
+-#include "dal_services.h"
+-
+-#include "connector.h"
+-#include "include/irq_interface.h"
+-#include "include/ddc_interface.h"
+-#include "include/connector_interface.h"
+-
+-struct connector {
+- struct graphics_object_id id;
+- uint32_t input_signals;
+- uint32_t output_signals;
+- struct adapter_service *as;
+- struct connector_feature_support features;
+- struct connector_signals default_signals;
+- struct dc_context *ctx;
+-};
+-
+-static bool connector_construct(
+- struct connector *connector,
+- struct dc_context *ctx,
+- struct adapter_service *as,
+- struct graphics_object_id go_id)
+-{
+- bool hw_ddc_polling = false;
+- struct ddc *ddc;
+- struct irq *hpd;
+- enum connector_id connector_id;
+- uint32_t signals_vector = 0;
+- uint32_t signals_num = 0;
+- uint32_t i;
+-
+- if (!as) {
+- BREAK_TO_DEBUGGER();
+- return false;
+- }
+-
+- connector->as = as;
+- connector->id = go_id;
+- connector->features.ddc_line = CHANNEL_ID_UNKNOWN;
+- connector->features.hpd_line = HPD_SOURCEID_UNKNOWN;
+- connector->ctx = ctx;
+-
+- ddc = dal_adapter_service_obtain_ddc(as, connector->id);
+- hpd = dal_adapter_service_obtain_hpd_irq(as, connector->id);
+-
+- connector_id = dal_graphics_object_id_get_connector_id(go_id);
+-
+- /* Initialize DDC line */
+- if (ddc) {
+- switch (dal_ddc_get_line(ddc)) {
+- case GPIO_DDC_LINE_DDC1:
+- connector->features.ddc_line = CHANNEL_ID_DDC1;
+- break;
+- case GPIO_DDC_LINE_DDC2:
+- connector->features.ddc_line = CHANNEL_ID_DDC2;
+- break;
+- case GPIO_DDC_LINE_DDC3:
+- connector->features.ddc_line = CHANNEL_ID_DDC3;
+- break;
+- case GPIO_DDC_LINE_DDC4:
+- connector->features.ddc_line = CHANNEL_ID_DDC4;
+- break;
+- case GPIO_DDC_LINE_DDC5:
+- connector->features.ddc_line = CHANNEL_ID_DDC5;
+- break;
+- case GPIO_DDC_LINE_DDC6:
+- connector->features.ddc_line = CHANNEL_ID_DDC6;
+- break;
+- case GPIO_DDC_LINE_DDC_VGA:
+- connector->features.ddc_line = CHANNEL_ID_DDC_VGA;
+- break;
+- case GPIO_DDC_LINE_I2C_PAD:
+- connector->features.ddc_line = CHANNEL_ID_I2C_PAD;
+- break;
+- default:
+- BREAK_TO_DEBUGGER();
+- break;
+- }
+-
+- /* Initialize HW DDC polling support
+- * On DCE6.0 only DDC lines support HW polling (I2cPad does not)
+- */
+-
+- if (dal_adapter_service_is_feature_supported(
+- FEATURE_ENABLE_HW_EDID_POLLING)) {
+- switch (dal_ddc_get_line(ddc)) {
+- case GPIO_DDC_LINE_DDC1:
+- case GPIO_DDC_LINE_DDC2:
+- case GPIO_DDC_LINE_DDC3:
+- case GPIO_DDC_LINE_DDC4:
+- case GPIO_DDC_LINE_DDC5:
+- case GPIO_DDC_LINE_DDC6:
+- case GPIO_DDC_LINE_DDC_VGA:
+- hw_ddc_polling = true;
+- break;
+- default:
+- break;
+- }
+- }
+-
+- dal_adapter_service_release_ddc(as, ddc);
+- }
+-
+- /* Initialize HPD line */
+- if (hpd) {
+- switch (dal_irq_get_source(hpd)) {
+- case DC_IRQ_SOURCE_HPD1:
+- connector->features.hpd_line = HPD_SOURCEID1;
+- break;
+- case DC_IRQ_SOURCE_HPD2:
+- connector->features.hpd_line = HPD_SOURCEID2;
+- break;
+- case DC_IRQ_SOURCE_HPD3:
+- connector->features.hpd_line = HPD_SOURCEID3;
+- break;
+- case DC_IRQ_SOURCE_HPD4:
+- connector->features.hpd_line = HPD_SOURCEID4;
+- break;
+- case DC_IRQ_SOURCE_HPD5:
+- connector->features.hpd_line = HPD_SOURCEID5;
+- break;
+- case DC_IRQ_SOURCE_HPD6:
+- connector->features.hpd_line = HPD_SOURCEID6;
+- break;
+- default:
+- BREAK_TO_DEBUGGER();
+- break;
+- }
+-
+- dal_adapter_service_release_irq(as, hpd);
+- }
+-
+- if ((uint32_t)connector_id >= number_of_default_signals &&
+- (uint32_t)connector_id >= number_of_signals)
+- return false;
+-
+- /* Initialize default signals */
+- connector->default_signals = default_signals[connector_id];
+-
+- /* Fill supported signals */
+- signals_num = supported_signals[connector_id].number_of_signals;
+- for (i = 0; i < signals_num; i++)
+- signals_vector |= supported_signals[connector_id].signal[i];
+-
+- /* Connector supports same set for input and output signals */
+- connector->input_signals = signals_vector;
+- connector->output_signals = signals_vector;
+-
+- switch (connector_id) {
+- case CONNECTOR_ID_VGA:
+- if (hw_ddc_polling
+- && connector->features.ddc_line != CHANNEL_ID_UNKNOWN)
+- connector->features.HW_DDC_POLLING = true;
+- break;
+- case CONNECTOR_ID_SINGLE_LINK_DVII:
+- case CONNECTOR_ID_DUAL_LINK_DVII:
+- if (connector->features.hpd_line != HPD_SOURCEID_UNKNOWN)
+- connector->features.HPD_FILTERING = true;
+- if (hw_ddc_polling
+- && connector->features.ddc_line != CHANNEL_ID_UNKNOWN)
+- connector->features.HW_DDC_POLLING = true;
+- break;
+- case CONNECTOR_ID_SINGLE_LINK_DVID:
+- case CONNECTOR_ID_DUAL_LINK_DVID:
+- case CONNECTOR_ID_HDMI_TYPE_A:
+- case CONNECTOR_ID_LVDS:
+- case CONNECTOR_ID_DISPLAY_PORT:
+- case CONNECTOR_ID_EDP:
+- if (connector->features.hpd_line != HPD_SOURCEID_UNKNOWN)
+- connector->features.HPD_FILTERING = true;
+- break;
+- default:
+- connector->features.HPD_FILTERING = false;
+- connector->features.HW_DDC_POLLING = false;
+- break;
+- }
+-
+- return true;
+-}
+-
+-struct connector *dal_connector_create(
+- struct dc_context *ctx,
+- struct adapter_service *as,
+- struct graphics_object_id go_id)
+-{
+- struct connector *connector = NULL;
+-
+- connector = dc_service_alloc(ctx, sizeof(struct connector));
+-
+- if (!connector) {
+- BREAK_TO_DEBUGGER();
+- return NULL;
+- }
+-
+- if (connector_construct(connector, ctx, as, go_id))
+- return connector;
+-
+- BREAK_TO_DEBUGGER();
+-
+- dc_service_free(ctx, connector);
+-
+- return NULL;
+-}
+-
+-void dal_connector_destroy(struct connector **connector)
+-{
+- if (!connector || !*connector) {
+- BREAK_TO_DEBUGGER();
+- return;
+- }
+-
+- dc_service_free((*connector)->ctx, *connector);
+-
+- *connector = NULL;
+-}
+-
+-uint32_t dal_connector_enumerate_output_signals(
+- const struct connector *connector)
+-{
+- return connector->output_signals;
+-}
+-
+-uint32_t dal_connector_enumerate_input_signals(
+- const struct connector *connector)
+-{
+- return connector->input_signals;
+-}
+-
+-struct connector_signals dal_connector_get_default_signals(
+- const struct connector *connector)
+-{
+- return connector->default_signals;
+-}
+-
+-const struct graphics_object_id dal_connector_get_graphics_object_id(
+- const struct connector *connector)
+-{
+- return connector->id;
+-}
+-
+-/*
+- * Function: program_hpd_filter
+- *
+- * @brief
+- * Programs HPD filter on associated HPD line
+- *
+- * @param [in] delay_on_connect_in_ms: Connect filter timeout
+- * @param [in] delay_on_disconnect_in_ms: Disconnect filter timeout
+- *
+- * @return
+- * true on success, false otherwise
+- */
+-bool dal_connector_program_hpd_filter(
+- const struct connector *connector,
+- const uint32_t delay_on_connect_in_ms,
+- const uint32_t delay_on_disconnect_in_ms)
+-{
+- bool result = false;
+-
+- struct irq *hpd;
+-
+- /* Verify feature is supported */
+-
+- if (!connector->features.HPD_FILTERING)
+- return result;
+-
+- /* Obtain HPD handle */
+-
+- hpd = dal_adapter_service_obtain_hpd_irq(
+- connector->as, connector->id);
+-
+- if (!hpd)
+- return result;
+-
+- /* Setup HPD filtering */
+-
+- if (GPIO_RESULT_OK == dal_irq_open(hpd)) {
+- struct gpio_hpd_config config;
+-
+- config.delay_on_connect = delay_on_connect_in_ms;
+- config.delay_on_disconnect = delay_on_disconnect_in_ms;
+-
+- dal_irq_setup_hpd_filter(hpd, &config);
+-
+- dal_irq_close(hpd);
+-
+- result = true;
+- } else {
+- ASSERT_CRITICAL(false);
+- }
+-
+- /* Release HPD handle */
+-
+- dal_adapter_service_release_irq(connector->as, hpd);
+-
+- return result;
+-}
+-
+-/*
+- * Function: setup_ddc_polling
+- *
+- * @brief
+- * Enables/Disables HW polling on associated DDC line
+- *
+- * @param [in] ddc_config: Specifies polling mode
+- *
+- * @return
+- * true on success, false otherwise
+- */
+-static bool setup_ddc_polling(
+- const struct connector *connector,
+- enum gpio_ddc_config_type ddc_config)
+-{
+- bool result = false;
+-
+- struct ddc *ddc;
+-
+- /* Verify feature is supported */
+-
+- if (!connector->features.HW_DDC_POLLING)
+- return result;
+-
+- /* Obtain DDC handle */
+-
+- ddc = dal_adapter_service_obtain_ddc(
+- connector->as, connector->id);
+-
+- if (!ddc) {
+- BREAK_TO_DEBUGGER();
+- return result;
+- }
+-
+- /* Setup DDC polling */
+-
+- if (GPIO_RESULT_OK == dal_ddc_open(ddc, GPIO_MODE_HARDWARE,
+- GPIO_DDC_CONFIG_TYPE_MODE_I2C)) {
+- dal_ddc_set_config(ddc, ddc_config);
+-
+- dal_ddc_close(ddc);
+-
+- result = true;
+- } else {
+- BREAK_TO_DEBUGGER();
+- }
+-
+- /* Release DDC handle */
+-
+- dal_adapter_service_release_ddc(connector->as, ddc);
+-
+- return result;
+-}
+-
+-/*
+- * Function: enable_ddc_polling
+- *
+- * @brief
+- * Enables HW polling on associated DDC line
+- *
+- * @param [in] is_poll_for_connect: Specifies polling mode
+- *
+- * @return
+- * true on success, false otherwise
+- */
+-bool dal_connector_enable_ddc_polling(
+- const struct connector *connector,
+- const bool is_poll_for_connect)
+-{
+- enum gpio_ddc_config_type ddc_config = is_poll_for_connect ?
+- GPIO_DDC_CONFIG_TYPE_POLL_FOR_CONNECT :
+- GPIO_DDC_CONFIG_TYPE_POLL_FOR_DISCONNECT;
+-
+- return setup_ddc_polling(connector, ddc_config);
+-}
+-
+-/*
+- * Function: disable_ddc_polling
+- *
+- * @brief
+- * Disables HW polling on associated DDC line
+- *
+- * @return
+- * true on success, false otherwise
+- */
+-bool dal_connector_disable_ddc_polling(const struct connector *connector)
+-{
+- return setup_ddc_polling(connector,
+- GPIO_DDC_CONFIG_TYPE_DISABLE_POLLING);
+-}
+-
+-void dal_connector_get_features(
+- const struct connector *con,
+- struct connector_feature_support *cfs)
+-{
+- dc_service_memmove(cfs, &con->features,
+- sizeof(struct connector_feature_support));
+-}
+diff --git a/drivers/gpu/drm/amd/dal/dc/connector/connector_signals.c b/drivers/gpu/drm/amd/dal/dc/connector/connector_signals.c
+deleted file mode 100644
+index 3a5d75b..0000000
+--- a/drivers/gpu/drm/amd/dal/dc/connector/connector_signals.c
++++ /dev/null
+@@ -1,238 +0,0 @@
+-/*
+- * Copyright 2012-15 Advanced Micro Devices, Inc.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included in
+- * all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+- * OTHER DEALINGS IN THE SOFTWARE.
+- *
+- * Authors: AMD
+- *
+- */
+-
+-#include "dal_services.h"
+-
+-#include "connector.h"
+-
+-static const enum signal_type signals_none[] = {
+- SIGNAL_TYPE_NONE
+-};
+-
+-static const enum signal_type signals_single_link_dvii[] = {
+- SIGNAL_TYPE_DVI_SINGLE_LINK,
+- SIGNAL_TYPE_RGB
+-};
+-
+-static const enum signal_type signals_dual_link_dvii[] = {
+- SIGNAL_TYPE_DVI_DUAL_LINK,
+- SIGNAL_TYPE_DVI_SINGLE_LINK,
+- SIGNAL_TYPE_RGB
+-};
+-
+-static const enum signal_type signals_single_link_dvid[] = {
+- SIGNAL_TYPE_DVI_SINGLE_LINK
+-};
+-
+-static const enum signal_type signals_dual_link_dvid[] = {
+- SIGNAL_TYPE_DVI_DUAL_LINK,
+- SIGNAL_TYPE_DVI_SINGLE_LINK,
+-};
+-
+-static const enum signal_type signals_vga[] = {
+- SIGNAL_TYPE_RGB
+-};
+-
+-static const enum signal_type signals_hdmi_type_a[] = {
+- SIGNAL_TYPE_DVI_SINGLE_LINK,
+- SIGNAL_TYPE_HDMI_TYPE_A
+-};
+-
+-static const enum signal_type signals_lvds[] = {
+- SIGNAL_TYPE_LVDS
+-};
+-
+-static const enum signal_type signals_pcie[] = {
+- SIGNAL_TYPE_DVI_SINGLE_LINK,
+- SIGNAL_TYPE_HDMI_TYPE_A,
+- SIGNAL_TYPE_DISPLAY_PORT
+-};
+-
+-static const enum signal_type signals_hardcode_dvi[] = {
+- SIGNAL_TYPE_NONE
+-};
+-
+-static const enum signal_type signals_displayport[] = {
+- SIGNAL_TYPE_DVI_SINGLE_LINK,
+- SIGNAL_TYPE_HDMI_TYPE_A,
+- SIGNAL_TYPE_DISPLAY_PORT,
+- SIGNAL_TYPE_DISPLAY_PORT_MST
+-};
+-
+-static const enum signal_type signals_edp[] = {
+- SIGNAL_TYPE_EDP
+-};
+-
+-static const enum signal_type signals_wireless[] = {
+- SIGNAL_TYPE_WIRELESS
+-};
+-
+-static const enum signal_type signals_miracast[] = {
+- SIGNAL_TYPE_WIRELESS
+-};
+-
+-static const enum signal_type default_signals_none[] = {
+- SIGNAL_TYPE_NONE
+-};
+-
+-static const enum signal_type default_signals_single_link_dvii[] = {
+- SIGNAL_TYPE_DVI_SINGLE_LINK,
+- SIGNAL_TYPE_RGB
+-};
+-
+-static const enum signal_type default_signals_dual_link_dvii[] = {
+- SIGNAL_TYPE_DVI_DUAL_LINK,
+- SIGNAL_TYPE_RGB
+-};
+-
+-static const enum signal_type default_signals_single_link_dvid[] = {
+- SIGNAL_TYPE_DVI_SINGLE_LINK
+-};
+-
+-static const enum signal_type default_signals_dual_link_dvid[] = {
+- SIGNAL_TYPE_DVI_DUAL_LINK,
+-};
+-
+-static const enum signal_type default_signals_vga[] = {
+- SIGNAL_TYPE_RGB
+-};
+-
+-static const enum signal_type default_signals_hdmi_type_a[] = {
+- SIGNAL_TYPE_HDMI_TYPE_A
+-};
+-
+-static const enum signal_type default_signals_lvds[] = {
+- SIGNAL_TYPE_LVDS
+-};
+-
+-static const enum signal_type default_signals_pcie[] = {
+- SIGNAL_TYPE_DISPLAY_PORT
+-};
+-
+-static const enum signal_type default_signals_hardcode_dvi[] = {
+- SIGNAL_TYPE_NONE
+-};
+-
+-static const enum signal_type default_signals_displayport[] = {
+- SIGNAL_TYPE_DISPLAY_PORT
+-};
+-
+-static const enum signal_type default_signals_edp[] = {
+- SIGNAL_TYPE_EDP
+-};
+-
+-static const enum signal_type default_signals_wireless[] = {
+- SIGNAL_TYPE_WIRELESS
+-};
+-
+-static const enum signal_type default_signals_miracast[] = {
+- SIGNAL_TYPE_WIRELESS
+-};
+-
+-/*
+- * Signal arrays
+- */
+-
+-#define SIGNALS_ARRAY_ELEM(a) {a, ARRAY_SIZE(a)}
+-
+-/* Indexed by enum connector_id */
+-const struct connector_signals default_signals[] = {
+- SIGNALS_ARRAY_ELEM(default_signals_none),
+- SIGNALS_ARRAY_ELEM(default_signals_single_link_dvii),
+- SIGNALS_ARRAY_ELEM(default_signals_dual_link_dvii),
+- SIGNALS_ARRAY_ELEM(default_signals_single_link_dvid),
+- SIGNALS_ARRAY_ELEM(default_signals_dual_link_dvid),
+- SIGNALS_ARRAY_ELEM(default_signals_vga),
+- /* Composite */
+- SIGNALS_ARRAY_ELEM(default_signals_none),
+- /* S Video */
+- SIGNALS_ARRAY_ELEM(default_signals_none),
+- /* YPbPr */
+- SIGNALS_ARRAY_ELEM(default_signals_none),
+- /* DConnector */
+- SIGNALS_ARRAY_ELEM(default_signals_none),
+- /* 9pinDIN */
+- SIGNALS_ARRAY_ELEM(default_signals_none),
+- /* SCART */
+- SIGNALS_ARRAY_ELEM(default_signals_none),
+- SIGNALS_ARRAY_ELEM(default_signals_hdmi_type_a),
+- /* Not Used */
+- SIGNALS_ARRAY_ELEM(default_signals_none),
+- SIGNALS_ARRAY_ELEM(default_signals_lvds),
+- /* 7pin DIN*/
+- SIGNALS_ARRAY_ELEM(default_signals_none),
+- SIGNALS_ARRAY_ELEM(default_signals_pcie),
+- /* CrossFire */
+- SIGNALS_ARRAY_ELEM(default_signals_none),
+- SIGNALS_ARRAY_ELEM(default_signals_hardcode_dvi),
+- SIGNALS_ARRAY_ELEM(default_signals_displayport),
+- SIGNALS_ARRAY_ELEM(default_signals_edp),
+- /* MXM*/
+- SIGNALS_ARRAY_ELEM(default_signals_none),
+- SIGNALS_ARRAY_ELEM(default_signals_wireless),
+- SIGNALS_ARRAY_ELEM(default_signals_miracast)
+-};
+-
+-const uint32_t number_of_default_signals = ARRAY_SIZE(default_signals);
+-
+-/* Indexed by enum connector_id */
+-const struct connector_signals supported_signals[] = {
+- SIGNALS_ARRAY_ELEM(signals_none),
+- SIGNALS_ARRAY_ELEM(signals_single_link_dvii),
+- SIGNALS_ARRAY_ELEM(signals_dual_link_dvii),
+- SIGNALS_ARRAY_ELEM(signals_single_link_dvid),
+- SIGNALS_ARRAY_ELEM(signals_dual_link_dvid),
+- SIGNALS_ARRAY_ELEM(signals_vga),
+- /* Composite */
+- SIGNALS_ARRAY_ELEM(signals_none),
+- /* S Video */
+- SIGNALS_ARRAY_ELEM(signals_none),
+- /* YPbPr */
+- SIGNALS_ARRAY_ELEM(signals_none),
+- /* DConnector */
+- SIGNALS_ARRAY_ELEM(signals_none),
+- /* 9pinDIN */
+- SIGNALS_ARRAY_ELEM(signals_none),
+- /* SCART */
+- SIGNALS_ARRAY_ELEM(signals_none),
+- SIGNALS_ARRAY_ELEM(signals_hdmi_type_a),
+- /* Note Used */
+- SIGNALS_ARRAY_ELEM(signals_none),
+- SIGNALS_ARRAY_ELEM(signals_lvds),
+- /* 7pin DIN*/
+- SIGNALS_ARRAY_ELEM(signals_none),
+- SIGNALS_ARRAY_ELEM(signals_pcie),
+- /* CrossFire */
+- SIGNALS_ARRAY_ELEM(signals_none),
+- SIGNALS_ARRAY_ELEM(signals_hardcode_dvi),
+- SIGNALS_ARRAY_ELEM(signals_displayport),
+- SIGNALS_ARRAY_ELEM(signals_edp),
+- /* MXM */
+- SIGNALS_ARRAY_ELEM(signals_none),
+- SIGNALS_ARRAY_ELEM(signals_wireless),
+- SIGNALS_ARRAY_ELEM(signals_miracast)
+-};
+-
+-const uint32_t number_of_signals = ARRAY_SIZE(supported_signals);
+diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
+index 2211f38..3347174 100644
+--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
+@@ -29,7 +29,6 @@
+ #include "core_dc.h"
+ #include "adapter_service_interface.h"
+ #include "grph_object_id.h"
+-#include "connector_interface.h"
+ #include "gpio_service_interface.h"
+ #include "ddc_service_interface.h"
+ #include "core_status.h"
+@@ -45,6 +44,10 @@
+ LOG_MAJOR_HW_TRACE, LOG_MINOR_HW_TRACE_HOTPLUG, \
+ __VA_ARGS__)
+
++#define DELAY_ON_CONNECT_IN_MS 500
++#define DELAY_ON_DISCONNECT_IN_MS 500
++
++
+ /*******************************************************************************
+ * Private structures
+ ******************************************************************************/
+@@ -55,9 +58,6 @@
+ ******************************************************************************/
+ static void destruct(struct core_link *link)
+ {
+- if (link->connector)
+- dal_connector_destroy(&link->connector);
+-
+ if (link->ddc)
+ dal_ddc_service_destroy(&link->ddc);
+
+@@ -65,6 +65,73 @@ static void destruct(struct core_link *link)
+ link->ctx->dc->hwss.encoder_destroy(&link->link_enc);
+ }
+
++/*
++ * Function: program_hpd_filter
++ *
++ * @brief
++ * Programs HPD filter on associated HPD line
++ *
++ * @param [in] delay_on_connect_in_ms: Connect filter timeout
++ * @param [in] delay_on_disconnect_in_ms: Disconnect filter timeout
++ *
++ * @return
++ * true on success, false otherwise
++ */
++static bool program_hpd_filter(
++ const struct core_link *link)
++{
++ bool result = false;
++
++ struct irq *hpd;
++
++ /* Verify feature is supported */
++
++ switch (link->public.connector_signal) {
++ case SIGNAL_TYPE_DVI_SINGLE_LINK:
++ case SIGNAL_TYPE_DVI_DUAL_LINK:
++ case SIGNAL_TYPE_HDMI_TYPE_A:
++ case SIGNAL_TYPE_LVDS:
++ case SIGNAL_TYPE_DISPLAY_PORT:
++ case SIGNAL_TYPE_DISPLAY_PORT_MST:
++ case SIGNAL_TYPE_EDP:
++ /* program hpd filter */
++ break;
++ default:
++ /* don't program hpd filter */
++ return false;
++ }
++
++ /* Obtain HPD handle */
++ hpd = dal_adapter_service_obtain_hpd_irq(
++ link->adapter_srv, link->link_id);
++
++ if (!hpd)
++ return result;
++
++ /* Setup HPD filtering */
++
++ if (dal_irq_open(hpd) == GPIO_RESULT_OK) {
++ struct gpio_hpd_config config;
++
++ config.delay_on_connect = DELAY_ON_CONNECT_IN_MS;
++ config.delay_on_disconnect = DELAY_ON_DISCONNECT_IN_MS;
++
++ dal_irq_setup_hpd_filter(hpd, &config);
++
++ dal_irq_close(hpd);
++
++ result = true;
++ } else {
++ ASSERT_CRITICAL(false);
++ }
++
++ /* Release HPD handle */
++
++ dal_adapter_service_release_irq(link->adapter_srv, hpd);
++
++ return result;
++}
++
+ static bool detect_sink(struct core_link *link)
+ {
+ uint32_t is_hpd_high = 0;
+@@ -651,6 +718,91 @@ void dc_link_detect(const struct dc_link *dc_link)
+ return;
+ }
+
++static enum hpd_source_id get_hpd_line(
++ struct core_link *link,
++ struct adapter_service *as)
++{
++ struct irq *hpd;
++ enum hpd_source_id hpd_id = HPD_SOURCEID_UNKNOWN;
++
++ hpd = dal_adapter_service_obtain_hpd_irq(as, link->link_id);
++
++ if (hpd) {
++ switch (dal_irq_get_source(hpd)) {
++ case DC_IRQ_SOURCE_HPD1:
++ hpd_id = HPD_SOURCEID1;
++ break;
++ case DC_IRQ_SOURCE_HPD2:
++ hpd_id = HPD_SOURCEID2;
++ break;
++ case DC_IRQ_SOURCE_HPD3:
++ hpd_id = HPD_SOURCEID3;
++ break;
++ case DC_IRQ_SOURCE_HPD4:
++ hpd_id = HPD_SOURCEID4;
++ break;
++ case DC_IRQ_SOURCE_HPD5:
++ hpd_id = HPD_SOURCEID5;
++ break;
++ case DC_IRQ_SOURCE_HPD6:
++ hpd_id = HPD_SOURCEID6;
++ break;
++ default:
++ BREAK_TO_DEBUGGER();
++ break;
++ }
++
++ dal_adapter_service_release_irq(as, hpd);
++ }
++
++ return hpd_id;
++}
++
++static enum channel_id get_ddc_line(struct core_link *link, struct adapter_service *as)
++{
++ struct ddc *ddc;
++ enum channel_id channel = CHANNEL_ID_UNKNOWN;
++
++ ddc = dal_adapter_service_obtain_ddc(as, link->link_id);
++
++ if (ddc) {
++ switch (dal_ddc_get_line(ddc)) {
++ case GPIO_DDC_LINE_DDC1:
++ channel = CHANNEL_ID_DDC1;
++ break;
++ case GPIO_DDC_LINE_DDC2:
++ channel = CHANNEL_ID_DDC2;
++ break;
++ case GPIO_DDC_LINE_DDC3:
++ channel = CHANNEL_ID_DDC3;
++ break;
++ case GPIO_DDC_LINE_DDC4:
++ channel = CHANNEL_ID_DDC4;
++ break;
++ case GPIO_DDC_LINE_DDC5:
++ channel = CHANNEL_ID_DDC5;
++ break;
++ case GPIO_DDC_LINE_DDC6:
++ channel = CHANNEL_ID_DDC6;
++ break;
++ case GPIO_DDC_LINE_DDC_VGA:
++ channel = CHANNEL_ID_DDC_VGA;
++ break;
++ case GPIO_DDC_LINE_I2C_PAD:
++ channel = CHANNEL_ID_I2C_PAD;
++ break;
++ default:
++ BREAK_TO_DEBUGGER();
++ break;
++ }
++
++ dal_adapter_service_release_ddc(as, ddc);
++ }
++
++ return channel;
++}
++
++
+ static bool construct(
+ struct core_link *link,
+ const struct link_init_data *init_params)
+@@ -661,7 +813,6 @@ static bool construct(
+ struct ddc_service_init_data ddc_service_init_data = { 0 };
+ struct dc_context *dc_ctx = init_params->ctx;
+ struct encoder_init_data enc_init_data = { 0 };
+- struct connector_feature_support cfs = { 0 };
+ struct integrated_info info = {{{ 0 }}};
+
+ link->dc = init_params->dc;
+@@ -732,13 +883,6 @@ static bool construct(
+ init_params->connector_index,
+ link->public.connector_signal);
+
+- link->connector = dal_connector_create(dc_ctx, as, link->link_id);
+- if (NULL == link->connector) {
+- DC_ERROR("Failed to create connector object!\n");
+- goto create_fail;
+- }
+-
+-
+ hpd_gpio = dal_adapter_service_obtain_hpd_irq(as, link->link_id);
+
+ if (hpd_gpio != NULL) {
+@@ -756,15 +900,13 @@ static bool construct(
+ goto create_fail;
+ }
+
+- dal_connector_get_features(link->connector, &cfs);
+-
+ enc_init_data.adapter_service = as;
+ enc_init_data.ctx = dc_ctx;
+ enc_init_data.encoder = dal_adapter_service_get_src_obj(
+ as, link->link_id, 0);
+ enc_init_data.connector = link->link_id;
+- enc_init_data.channel = cfs.ddc_line;
+- enc_init_data.hpd_source = cfs.hpd_line;
++ enc_init_data.channel = get_ddc_line(link, as);
++ enc_init_data.hpd_source = get_hpd_line(link, as);
+ link->link_enc = dc_ctx->dc->hwss.encoder_create(&enc_init_data);
+
+ if( link->link_enc == NULL) {
+@@ -819,13 +961,7 @@ static bool construct(
+ * If GPIO isn't programmed correctly HPD might not rise or drain
+ * fast enough, leading to bounces.
+ */
+-#define DELAY_ON_CONNECT_IN_MS 500
+-#define DELAY_ON_DISCONNECT_IN_MS 500
+-
+- dal_connector_program_hpd_filter(
+- link->connector,
+- DELAY_ON_CONNECT_IN_MS,
+- DELAY_ON_DISCONNECT_IN_MS);
++ program_hpd_filter(link);
+
+ return true;
+
+@@ -1126,10 +1262,7 @@ bool dc_link_set_backlight_level(const struct dc_link *public, uint32_t level)
+
+ void core_link_resume(struct core_link *link)
+ {
+- dal_connector_program_hpd_filter(
+- link->connector,
+- DELAY_ON_CONNECT_IN_MS,
+- DELAY_ON_DISCONNECT_IN_MS);
++ program_hpd_filter(link);
+ }
+
+
+@@ -1279,4 +1412,3 @@ void core_link_disable_stream(
+ disable_link(stream);
+
+ }
+-
+diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c
+index c0390e1..787091f 100644
+--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c
++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c
+@@ -5,7 +5,6 @@
+ #include "inc/core_types.h"
+ #include "link_hwss.h"
+ #include "ddc_service_interface.h"
+-#include "connector_interface.h"
+ #include "core_status.h"
+ #include "dpcd_defs.h"
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c
+index 5ed0380..715aa9f 100644
+--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c
++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c
+@@ -6,7 +6,6 @@
+ #include "include/ddc_service_types.h"
+ #include "include/i2caux_interface.h"
+ #include "link_hwss.h"
+-#include "include/connector_interface.h"
+ #include "hw_sequencer.h"
+ #include "include/ddc_service_interface.h"
+ #include "dc_helpers.h"
+diff --git a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
+index dc871ad..26f5002 100644
+--- a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
++++ b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h
+@@ -205,7 +205,6 @@ struct core_link {
+ uint8_t connector_index; /* this will be mapped to the HPD pins */
+
+ struct adapter_service *adapter_srv;
+- struct connector *connector;
+ struct link_encoder *link_enc;
+ struct ddc_service *ddc;
+ struct graphics_object_id link_id;
+diff --git a/drivers/gpu/drm/amd/dal/include/connector_interface.h b/drivers/gpu/drm/amd/dal/include/connector_interface.h
+deleted file mode 100644
+index e09af7e..0000000
+--- a/drivers/gpu/drm/amd/dal/include/connector_interface.h
++++ /dev/null
+@@ -1,82 +0,0 @@
+-/*
+- * Copyright 2012-15 Advanced Micro Devices, Inc.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included in
+- * all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+- * OTHER DEALINGS IN THE SOFTWARE.
+- *
+- * Authors: AMD
+- *
+- */
+-
+-#ifndef __DAL_CONNECTOR_INTERFACE_H__
+-#define __DAL_CONNECTOR_INTERFACE_H__
+-
+-#include "adapter_service_interface.h"
+-#include "signal_types.h"
+-
+-/* forward declaration */
+-struct connector;
+-
+-struct connector_signals {
+- const enum signal_type *signal;
+- uint32_t number_of_signals;
+-};
+-
+-struct connector_feature_support {
+- bool HPD_FILTERING:1;
+- bool HW_DDC_POLLING:1;
+- enum hpd_source_id hpd_line;
+- enum channel_id ddc_line;
+-};
+-
+-void dal_connector_get_features(
+- const struct connector *con,
+- struct connector_feature_support *cfs);
+-
+-struct connector *dal_connector_create(
+- struct dc_context *ctx,
+- struct adapter_service *as,
+- struct graphics_object_id go_id);
+-
+-void dal_connector_destroy(struct connector **connector);
+-
+-void dal_connector_destroy(struct connector **connector);
+-
+-const struct graphics_object_id dal_connector_get_graphics_object_id(
+- const struct connector *connector);
+-
+-uint32_t dal_connector_enumerate_output_signals(
+- const struct connector *connector);
+-uint32_t dal_connector_enumerate_input_signals(
+- const struct connector *connector);
+-
+-struct connector_signals dal_connector_get_default_signals(
+- const struct connector *connector);
+-
+-bool dal_connector_program_hpd_filter(
+- const struct connector *connector,
+- const uint32_t delay_on_connect_in_ms,
+- const uint32_t delay_on_disconnect_in_ms);
+-
+-bool dal_connector_enable_ddc_polling(
+- const struct connector *connector,
+- const bool is_poll_for_connect);
+-
+-bool dal_connector_disable_ddc_polling(const struct connector *connector);
+-
+-#endif
+--
+2.7.4
+