diff mbox series

[v2] drm/scdc-helper: Pimp SCDC debugs

Message ID 20230403223652.18848-1-ville.syrjala@linux.intel.com
State Handled Elsewhere
Headers show
Series [v2] drm/scdc-helper: Pimp SCDC debugs | expand

Commit Message

Ville Syrjälä April 3, 2023, 10:36 p.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Include the device and connector information in the SCDC
debugs. Makes it easier to figure out who did what.

v2: Rely on connector->ddc (Maxime)

Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Emma Anholt <emma@anholt.net>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: intel-gfx@lists.freedesktop.org
Cc: linux-tegra@vger.kernel.org
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/bridge/synopsys/dw-hdmi.c |  8 ++--
 drivers/gpu/drm/display/drm_scdc_helper.c | 46 +++++++++++++++--------
 drivers/gpu/drm/i915/display/intel_ddi.c  |  4 +-
 drivers/gpu/drm/i915/display/intel_hdmi.c |  8 +---
 drivers/gpu/drm/tegra/sor.c               | 15 +++-----
 drivers/gpu/drm/vc4/vc4_hdmi.c            | 21 ++++++-----
 include/drm/display/drm_scdc_helper.h     |  7 ++--
 7 files changed, 59 insertions(+), 50 deletions(-)

Comments

Laurent Pinchart April 4, 2023, 2:21 a.m. UTC | #1
Hi Ville,

Thank you for the patch.

On Tue, Apr 04, 2023 at 01:36:52AM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Include the device and connector information in the SCDC
> debugs. Makes it easier to figure out who did what.
> 
> v2: Rely on connector->ddc (Maxime)
> 
> Cc: Andrzej Hajda <andrzej.hajda@intel.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Robert Foss <rfoss@kernel.org>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Emma Anholt <emma@anholt.net>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: intel-gfx@lists.freedesktop.org
> Cc: linux-tegra@vger.kernel.org
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

> ---
>  drivers/gpu/drm/bridge/synopsys/dw-hdmi.c |  8 ++--
>  drivers/gpu/drm/display/drm_scdc_helper.c | 46 +++++++++++++++--------
>  drivers/gpu/drm/i915/display/intel_ddi.c  |  4 +-
>  drivers/gpu/drm/i915/display/intel_hdmi.c |  8 +---
>  drivers/gpu/drm/tegra/sor.c               | 15 +++-----
>  drivers/gpu/drm/vc4/vc4_hdmi.c            | 21 ++++++-----
>  include/drm/display/drm_scdc_helper.h     |  7 ++--
>  7 files changed, 59 insertions(+), 50 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> index aa51c61a78c7..603bb3c51027 100644
> --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> @@ -1426,9 +1426,9 @@ void dw_hdmi_set_high_tmds_clock_ratio(struct dw_hdmi *hdmi,
>  	/* Control for TMDS Bit Period/TMDS Clock-Period Ratio */
>  	if (dw_hdmi_support_scdc(hdmi, display)) {
>  		if (mtmdsclock > HDMI14_MAX_TMDSCLK)
> -			drm_scdc_set_high_tmds_clock_ratio(hdmi->ddc, 1);
> +			drm_scdc_set_high_tmds_clock_ratio(&hdmi->connector, 1);
>  		else
> -			drm_scdc_set_high_tmds_clock_ratio(hdmi->ddc, 0);
> +			drm_scdc_set_high_tmds_clock_ratio(&hdmi->connector, 0);
>  	}
>  }
>  EXPORT_SYMBOL_GPL(dw_hdmi_set_high_tmds_clock_ratio);
> @@ -2116,7 +2116,7 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
>  				min_t(u8, bytes, SCDC_MIN_SOURCE_VERSION));
>  
>  			/* Enabled Scrambling in the Sink */
> -			drm_scdc_set_scrambling(hdmi->ddc, 1);
> +			drm_scdc_set_scrambling(&hdmi->connector, 1);
>  
>  			/*
>  			 * To activate the scrambler feature, you must ensure
> @@ -2132,7 +2132,7 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
>  			hdmi_writeb(hdmi, 0, HDMI_FC_SCRAMBLER_CTRL);
>  			hdmi_writeb(hdmi, (u8)~HDMI_MC_SWRSTZ_TMDSSWRST_REQ,
>  				    HDMI_MC_SWRSTZ);
> -			drm_scdc_set_scrambling(hdmi->ddc, 0);
> +			drm_scdc_set_scrambling(&hdmi->connector, 0);
>  		}
>  	}
>  
> diff --git a/drivers/gpu/drm/display/drm_scdc_helper.c b/drivers/gpu/drm/display/drm_scdc_helper.c
> index c3ad4ab2b456..6d2f244e5830 100644
> --- a/drivers/gpu/drm/display/drm_scdc_helper.c
> +++ b/drivers/gpu/drm/display/drm_scdc_helper.c
> @@ -26,6 +26,8 @@
>  #include <linux/delay.h>
>  
>  #include <drm/display/drm_scdc_helper.h>
> +#include <drm/drm_connector.h>
> +#include <drm/drm_device.h>
>  #include <drm/drm_print.h>
>  
>  /**
> @@ -140,7 +142,7 @@ EXPORT_SYMBOL(drm_scdc_write);
>  
>  /**
>   * drm_scdc_get_scrambling_status - what is status of scrambling?
> - * @adapter: I2C adapter for DDC channel
> + * @connector: connector
>   *
>   * Reads the scrambler status over SCDC, and checks the
>   * scrambling status.
> @@ -148,14 +150,16 @@ EXPORT_SYMBOL(drm_scdc_write);
>   * Returns:
>   * True if the scrambling is enabled, false otherwise.
>   */
> -bool drm_scdc_get_scrambling_status(struct i2c_adapter *adapter)
> +bool drm_scdc_get_scrambling_status(struct drm_connector *connector)
>  {
>  	u8 status;
>  	int ret;
>  
> -	ret = drm_scdc_readb(adapter, SCDC_SCRAMBLER_STATUS, &status);
> +	ret = drm_scdc_readb(connector->ddc, SCDC_SCRAMBLER_STATUS, &status);
>  	if (ret < 0) {
> -		DRM_DEBUG_KMS("Failed to read scrambling status: %d\n", ret);
> +		drm_dbg_kms(connector->dev,
> +			    "[CONNECTOR:%d:%s] Failed to read scrambling status: %d\n",
> +			    connector->base.id, connector->name, ret);
>  		return false;
>  	}
>  
> @@ -165,7 +169,7 @@ EXPORT_SYMBOL(drm_scdc_get_scrambling_status);
>  
>  /**
>   * drm_scdc_set_scrambling - enable scrambling
> - * @adapter: I2C adapter for DDC channel
> + * @connector: connector
>   * @enable: bool to indicate if scrambling is to be enabled/disabled
>   *
>   * Writes the TMDS config register over SCDC channel, and:
> @@ -175,14 +179,17 @@ EXPORT_SYMBOL(drm_scdc_get_scrambling_status);
>   * Returns:
>   * True if scrambling is set/reset successfully, false otherwise.
>   */
> -bool drm_scdc_set_scrambling(struct i2c_adapter *adapter, bool enable)
> +bool drm_scdc_set_scrambling(struct drm_connector *connector,
> +			     bool enable)
>  {
>  	u8 config;
>  	int ret;
>  
> -	ret = drm_scdc_readb(adapter, SCDC_TMDS_CONFIG, &config);
> +	ret = drm_scdc_readb(connector->ddc, SCDC_TMDS_CONFIG, &config);
>  	if (ret < 0) {
> -		DRM_DEBUG_KMS("Failed to read TMDS config: %d\n", ret);
> +		drm_dbg_kms(connector->dev,
> +			    "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n",
> +			    connector->base.id, connector->name, ret);
>  		return false;
>  	}
>  
> @@ -191,9 +198,11 @@ bool drm_scdc_set_scrambling(struct i2c_adapter *adapter, bool enable)
>  	else
>  		config &= ~SCDC_SCRAMBLING_ENABLE;
>  
> -	ret = drm_scdc_writeb(adapter, SCDC_TMDS_CONFIG, config);
> +	ret = drm_scdc_writeb(connector->ddc, SCDC_TMDS_CONFIG, config);
>  	if (ret < 0) {
> -		DRM_DEBUG_KMS("Failed to enable scrambling: %d\n", ret);
> +		drm_dbg_kms(connector->dev,
> +			    "[CONNECTOR:%d:%s] Failed to enable scrambling: %d\n",
> +			    connector->base.id, connector->name, ret);
>  		return false;
>  	}
>  
> @@ -203,7 +212,7 @@ EXPORT_SYMBOL(drm_scdc_set_scrambling);
>  
>  /**
>   * drm_scdc_set_high_tmds_clock_ratio - set TMDS clock ratio
> - * @adapter: I2C adapter for DDC channel
> + * @connector: connector
>   * @set: ret or reset the high clock ratio
>   *
>   *
> @@ -230,14 +239,17 @@ EXPORT_SYMBOL(drm_scdc_set_scrambling);
>   * Returns:
>   * True if write is successful, false otherwise.
>   */
> -bool drm_scdc_set_high_tmds_clock_ratio(struct i2c_adapter *adapter, bool set)
> +bool drm_scdc_set_high_tmds_clock_ratio(struct drm_connector *connector,
> +					bool set)
>  {
>  	u8 config;
>  	int ret;
>  
> -	ret = drm_scdc_readb(adapter, SCDC_TMDS_CONFIG, &config);
> +	ret = drm_scdc_readb(connector->ddc, SCDC_TMDS_CONFIG, &config);
>  	if (ret < 0) {
> -		DRM_DEBUG_KMS("Failed to read TMDS config: %d\n", ret);
> +		drm_dbg_kms(connector->dev,
> +			    "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n",
> +			    connector->base.id, connector->name, ret);
>  		return false;
>  	}
>  
> @@ -246,9 +258,11 @@ bool drm_scdc_set_high_tmds_clock_ratio(struct i2c_adapter *adapter, bool set)
>  	else
>  		config &= ~SCDC_TMDS_BIT_CLOCK_RATIO_BY_40;
>  
> -	ret = drm_scdc_writeb(adapter, SCDC_TMDS_CONFIG, config);
> +	ret = drm_scdc_writeb(connector->ddc, SCDC_TMDS_CONFIG, config);
>  	if (ret < 0) {
> -		DRM_DEBUG_KMS("Failed to set TMDS clock ratio: %d\n", ret);
> +		drm_dbg_kms(connector->dev,
> +			    "[CONNECTOR:%d:%s] Failed to set TMDS clock ratio: %d\n",
> +			    connector->base.id, connector->name, ret);
>  		return false;
>  	}
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index dc294717bcdf..d0bb3a52ae5c 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -3974,8 +3974,8 @@ static int intel_hdmi_reset_link(struct intel_encoder *encoder,
>  
>  	ret = drm_scdc_readb(adapter, SCDC_TMDS_CONFIG, &config);
>  	if (ret < 0) {
> -		drm_err(&dev_priv->drm, "Failed to read TMDS config: %d\n",
> -			ret);
> +		drm_err(&dev_priv->drm, "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n",
> +			connector->base.base.id, connector->base.name, ret);
>  		return 0;
>  	}
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index c7e9e1fbed37..a690a5616506 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -2646,11 +2646,8 @@ bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,
>  				       bool scrambling)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
>  	struct drm_scrambling *sink_scrambling =
>  		&connector->display_info.hdmi.scdc.scrambling;
> -	struct i2c_adapter *adapter =
> -		intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
>  
>  	if (!sink_scrambling->supported)
>  		return true;
> @@ -2661,9 +2658,8 @@ bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,
>  		    str_yes_no(scrambling), high_tmds_clock_ratio ? 40 : 10);
>  
>  	/* Set TMDS bit clock ratio to 1/40 or 1/10, and enable/disable scrambling */
> -	return drm_scdc_set_high_tmds_clock_ratio(adapter,
> -						  high_tmds_clock_ratio) &&
> -		drm_scdc_set_scrambling(adapter, scrambling);
> +	return drm_scdc_set_high_tmds_clock_ratio(connector, high_tmds_clock_ratio) &&
> +		drm_scdc_set_scrambling(connector, scrambling);
>  }
>  
>  static u8 chv_port_to_ddc_pin(struct drm_i915_private *dev_priv, enum port port)
> diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
> index 8af632740673..34af6724914f 100644
> --- a/drivers/gpu/drm/tegra/sor.c
> +++ b/drivers/gpu/drm/tegra/sor.c
> @@ -2140,10 +2140,8 @@ static void tegra_sor_hdmi_disable_scrambling(struct tegra_sor *sor)
>  
>  static void tegra_sor_hdmi_scdc_disable(struct tegra_sor *sor)
>  {
> -	struct i2c_adapter *ddc = sor->output.ddc;
> -
> -	drm_scdc_set_high_tmds_clock_ratio(ddc, false);
> -	drm_scdc_set_scrambling(ddc, false);
> +	drm_scdc_set_high_tmds_clock_ratio(&sor->output.connector, false);
> +	drm_scdc_set_scrambling(&sor->output.connector, false);
>  
>  	tegra_sor_hdmi_disable_scrambling(sor);
>  }
> @@ -2168,10 +2166,8 @@ static void tegra_sor_hdmi_enable_scrambling(struct tegra_sor *sor)
>  
>  static void tegra_sor_hdmi_scdc_enable(struct tegra_sor *sor)
>  {
> -	struct i2c_adapter *ddc = sor->output.ddc;
> -
> -	drm_scdc_set_high_tmds_clock_ratio(ddc, true);
> -	drm_scdc_set_scrambling(ddc, true);
> +	drm_scdc_set_high_tmds_clock_ratio(&sor->output.connector, true);
> +	drm_scdc_set_scrambling(&sor->output.connector, true);
>  
>  	tegra_sor_hdmi_enable_scrambling(sor);
>  }
> @@ -2179,9 +2175,8 @@ static void tegra_sor_hdmi_scdc_enable(struct tegra_sor *sor)
>  static void tegra_sor_hdmi_scdc_work(struct work_struct *work)
>  {
>  	struct tegra_sor *sor = container_of(work, struct tegra_sor, scdc.work);
> -	struct i2c_adapter *ddc = sor->output.ddc;
>  
> -	if (!drm_scdc_get_scrambling_status(ddc)) {
> +	if (!drm_scdc_get_scrambling_status(&sor->output.connector)) {
>  		DRM_DEBUG_KMS("SCDC not scrambled\n");
>  		tegra_sor_hdmi_scdc_enable(sor);
>  	}
> diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
> index 464c3cc8e6fb..06713d8b82b5 100644
> --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
> +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
> @@ -885,7 +885,8 @@ static void vc4_hdmi_set_infoframes(struct drm_encoder *encoder)
>  static void vc4_hdmi_enable_scrambling(struct drm_encoder *encoder)
>  {
>  	struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
> -	struct drm_device *drm = vc4_hdmi->connector.dev;
> +	struct drm_connector *connector = &vc4_hdmi->connector;
> +	struct drm_device *drm = connector->dev;
>  	const struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
>  	unsigned long flags;
>  	int idx;
> @@ -903,8 +904,8 @@ static void vc4_hdmi_enable_scrambling(struct drm_encoder *encoder)
>  	if (!drm_dev_enter(drm, &idx))
>  		return;
>  
> -	drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, true);
> -	drm_scdc_set_scrambling(vc4_hdmi->ddc, true);
> +	drm_scdc_set_high_tmds_clock_ratio(connector, true);
> +	drm_scdc_set_scrambling(connector, true);
>  
>  	spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
>  	HDMI_WRITE(HDMI_SCRAMBLER_CTL, HDMI_READ(HDMI_SCRAMBLER_CTL) |
> @@ -922,7 +923,8 @@ static void vc4_hdmi_enable_scrambling(struct drm_encoder *encoder)
>  static void vc4_hdmi_disable_scrambling(struct drm_encoder *encoder)
>  {
>  	struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
> -	struct drm_device *drm = vc4_hdmi->connector.dev;
> +	struct drm_connector *connector = &vc4_hdmi->connector;
> +	struct drm_device *drm = connector->dev;
>  	unsigned long flags;
>  	int idx;
>  
> @@ -944,8 +946,8 @@ static void vc4_hdmi_disable_scrambling(struct drm_encoder *encoder)
>  		   ~VC5_HDMI_SCRAMBLER_CTL_ENABLE);
>  	spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
>  
> -	drm_scdc_set_scrambling(vc4_hdmi->ddc, false);
> -	drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, false);
> +	drm_scdc_set_scrambling(connector, false);
> +	drm_scdc_set_high_tmds_clock_ratio(connector, false);
>  
>  	drm_dev_exit(idx);
>  }
> @@ -955,12 +957,13 @@ static void vc4_hdmi_scrambling_wq(struct work_struct *work)
>  	struct vc4_hdmi *vc4_hdmi = container_of(to_delayed_work(work),
>  						 struct vc4_hdmi,
>  						 scrambling_work);
> +	struct drm_connector *connector = &vc4_hdmi->connector;
>  
> -	if (drm_scdc_get_scrambling_status(vc4_hdmi->ddc))
> +	if (drm_scdc_get_scrambling_status(connector))
>  		return;
>  
> -	drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, true);
> -	drm_scdc_set_scrambling(vc4_hdmi->ddc, true);
> +	drm_scdc_set_high_tmds_clock_ratio(connector, true);
> +	drm_scdc_set_scrambling(connector, true);
>  
>  	queue_delayed_work(system_wq, &vc4_hdmi->scrambling_work,
>  			   msecs_to_jiffies(SCRAMBLING_POLLING_DELAY_MS));
> diff --git a/include/drm/display/drm_scdc_helper.h b/include/drm/display/drm_scdc_helper.h
> index ded01fd948b4..34600476a1b9 100644
> --- a/include/drm/display/drm_scdc_helper.h
> +++ b/include/drm/display/drm_scdc_helper.h
> @@ -28,6 +28,7 @@
>  
>  #include <drm/display/drm_scdc.h>
>  
> +struct drm_connector;
>  struct i2c_adapter;
>  
>  ssize_t drm_scdc_read(struct i2c_adapter *adapter, u8 offset, void *buffer,
> @@ -71,9 +72,9 @@ static inline int drm_scdc_writeb(struct i2c_adapter *adapter, u8 offset,
>  	return drm_scdc_write(adapter, offset, &value, sizeof(value));
>  }
>  
> -bool drm_scdc_get_scrambling_status(struct i2c_adapter *adapter);
> +bool drm_scdc_get_scrambling_status(struct drm_connector *connector);
>  
> -bool drm_scdc_set_scrambling(struct i2c_adapter *adapter, bool enable);
> -bool drm_scdc_set_high_tmds_clock_ratio(struct i2c_adapter *adapter, bool set);
> +bool drm_scdc_set_scrambling(struct drm_connector *connector, bool enable);
> +bool drm_scdc_set_high_tmds_clock_ratio(struct drm_connector *connector, bool set);
>  
>  #endif
Maxime Ripard April 4, 2023, 8:06 a.m. UTC | #2
On Tue, Apr 04, 2023 at 01:36:52AM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Include the device and connector information in the SCDC
> debugs. Makes it easier to figure out who did what.
> 
> v2: Rely on connector->ddc (Maxime)
> 
> Cc: Andrzej Hajda <andrzej.hajda@intel.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Robert Foss <rfoss@kernel.org>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Emma Anholt <emma@anholt.net>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: intel-gfx@lists.freedesktop.org
> Cc: linux-tegra@vger.kernel.org
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Acked-by: Maxime Ripard <maxime@cerno.tech>

Thanks!
Maxime
Andrzej Hajda April 4, 2023, 8:13 a.m. UTC | #3
On 04.04.2023 00:36, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Include the device and connector information in the SCDC
> debugs. Makes it easier to figure out who did what.
>
> v2: Rely on connector->ddc (Maxime)
>
> Cc: Andrzej Hajda <andrzej.hajda@intel.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Robert Foss <rfoss@kernel.org>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Emma Anholt <emma@anholt.net>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: intel-gfx@lists.freedesktop.org
> Cc: linux-tegra@vger.kernel.org
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reviewed-by: Andrzej Hajda <andrzej.hajda@intel.com>

Regards
Andrzej
> ---
>   drivers/gpu/drm/bridge/synopsys/dw-hdmi.c |  8 ++--
>   drivers/gpu/drm/display/drm_scdc_helper.c | 46 +++++++++++++++--------
>   drivers/gpu/drm/i915/display/intel_ddi.c  |  4 +-
>   drivers/gpu/drm/i915/display/intel_hdmi.c |  8 +---
>   drivers/gpu/drm/tegra/sor.c               | 15 +++-----
>   drivers/gpu/drm/vc4/vc4_hdmi.c            | 21 ++++++-----
>   include/drm/display/drm_scdc_helper.h     |  7 ++--
>   7 files changed, 59 insertions(+), 50 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> index aa51c61a78c7..603bb3c51027 100644
> --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> @@ -1426,9 +1426,9 @@ void dw_hdmi_set_high_tmds_clock_ratio(struct dw_hdmi *hdmi,
>   	/* Control for TMDS Bit Period/TMDS Clock-Period Ratio */
>   	if (dw_hdmi_support_scdc(hdmi, display)) {
>   		if (mtmdsclock > HDMI14_MAX_TMDSCLK)
> -			drm_scdc_set_high_tmds_clock_ratio(hdmi->ddc, 1);
> +			drm_scdc_set_high_tmds_clock_ratio(&hdmi->connector, 1);
>   		else
> -			drm_scdc_set_high_tmds_clock_ratio(hdmi->ddc, 0);
> +			drm_scdc_set_high_tmds_clock_ratio(&hdmi->connector, 0);
>   	}
>   }
>   EXPORT_SYMBOL_GPL(dw_hdmi_set_high_tmds_clock_ratio);
> @@ -2116,7 +2116,7 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
>   				min_t(u8, bytes, SCDC_MIN_SOURCE_VERSION));
>   
>   			/* Enabled Scrambling in the Sink */
> -			drm_scdc_set_scrambling(hdmi->ddc, 1);
> +			drm_scdc_set_scrambling(&hdmi->connector, 1);
>   
>   			/*
>   			 * To activate the scrambler feature, you must ensure
> @@ -2132,7 +2132,7 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
>   			hdmi_writeb(hdmi, 0, HDMI_FC_SCRAMBLER_CTRL);
>   			hdmi_writeb(hdmi, (u8)~HDMI_MC_SWRSTZ_TMDSSWRST_REQ,
>   				    HDMI_MC_SWRSTZ);
> -			drm_scdc_set_scrambling(hdmi->ddc, 0);
> +			drm_scdc_set_scrambling(&hdmi->connector, 0);
>   		}
>   	}
>   
> diff --git a/drivers/gpu/drm/display/drm_scdc_helper.c b/drivers/gpu/drm/display/drm_scdc_helper.c
> index c3ad4ab2b456..6d2f244e5830 100644
> --- a/drivers/gpu/drm/display/drm_scdc_helper.c
> +++ b/drivers/gpu/drm/display/drm_scdc_helper.c
> @@ -26,6 +26,8 @@
>   #include <linux/delay.h>
>   
>   #include <drm/display/drm_scdc_helper.h>
> +#include <drm/drm_connector.h>
> +#include <drm/drm_device.h>
>   #include <drm/drm_print.h>
>   
>   /**
> @@ -140,7 +142,7 @@ EXPORT_SYMBOL(drm_scdc_write);
>   
>   /**
>    * drm_scdc_get_scrambling_status - what is status of scrambling?
> - * @adapter: I2C adapter for DDC channel
> + * @connector: connector
>    *
>    * Reads the scrambler status over SCDC, and checks the
>    * scrambling status.
> @@ -148,14 +150,16 @@ EXPORT_SYMBOL(drm_scdc_write);
>    * Returns:
>    * True if the scrambling is enabled, false otherwise.
>    */
> -bool drm_scdc_get_scrambling_status(struct i2c_adapter *adapter)
> +bool drm_scdc_get_scrambling_status(struct drm_connector *connector)
>   {
>   	u8 status;
>   	int ret;
>   
> -	ret = drm_scdc_readb(adapter, SCDC_SCRAMBLER_STATUS, &status);
> +	ret = drm_scdc_readb(connector->ddc, SCDC_SCRAMBLER_STATUS, &status);
>   	if (ret < 0) {
> -		DRM_DEBUG_KMS("Failed to read scrambling status: %d\n", ret);
> +		drm_dbg_kms(connector->dev,
> +			    "[CONNECTOR:%d:%s] Failed to read scrambling status: %d\n",
> +			    connector->base.id, connector->name, ret);
>   		return false;
>   	}
>   
> @@ -165,7 +169,7 @@ EXPORT_SYMBOL(drm_scdc_get_scrambling_status);
>   
>   /**
>    * drm_scdc_set_scrambling - enable scrambling
> - * @adapter: I2C adapter for DDC channel
> + * @connector: connector
>    * @enable: bool to indicate if scrambling is to be enabled/disabled
>    *
>    * Writes the TMDS config register over SCDC channel, and:
> @@ -175,14 +179,17 @@ EXPORT_SYMBOL(drm_scdc_get_scrambling_status);
>    * Returns:
>    * True if scrambling is set/reset successfully, false otherwise.
>    */
> -bool drm_scdc_set_scrambling(struct i2c_adapter *adapter, bool enable)
> +bool drm_scdc_set_scrambling(struct drm_connector *connector,
> +			     bool enable)
>   {
>   	u8 config;
>   	int ret;
>   
> -	ret = drm_scdc_readb(adapter, SCDC_TMDS_CONFIG, &config);
> +	ret = drm_scdc_readb(connector->ddc, SCDC_TMDS_CONFIG, &config);
>   	if (ret < 0) {
> -		DRM_DEBUG_KMS("Failed to read TMDS config: %d\n", ret);
> +		drm_dbg_kms(connector->dev,
> +			    "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n",
> +			    connector->base.id, connector->name, ret);
>   		return false;
>   	}
>   
> @@ -191,9 +198,11 @@ bool drm_scdc_set_scrambling(struct i2c_adapter *adapter, bool enable)
>   	else
>   		config &= ~SCDC_SCRAMBLING_ENABLE;
>   
> -	ret = drm_scdc_writeb(adapter, SCDC_TMDS_CONFIG, config);
> +	ret = drm_scdc_writeb(connector->ddc, SCDC_TMDS_CONFIG, config);
>   	if (ret < 0) {
> -		DRM_DEBUG_KMS("Failed to enable scrambling: %d\n", ret);
> +		drm_dbg_kms(connector->dev,
> +			    "[CONNECTOR:%d:%s] Failed to enable scrambling: %d\n",
> +			    connector->base.id, connector->name, ret);
>   		return false;
>   	}
>   
> @@ -203,7 +212,7 @@ EXPORT_SYMBOL(drm_scdc_set_scrambling);
>   
>   /**
>    * drm_scdc_set_high_tmds_clock_ratio - set TMDS clock ratio
> - * @adapter: I2C adapter for DDC channel
> + * @connector: connector
>    * @set: ret or reset the high clock ratio
>    *
>    *
> @@ -230,14 +239,17 @@ EXPORT_SYMBOL(drm_scdc_set_scrambling);
>    * Returns:
>    * True if write is successful, false otherwise.
>    */
> -bool drm_scdc_set_high_tmds_clock_ratio(struct i2c_adapter *adapter, bool set)
> +bool drm_scdc_set_high_tmds_clock_ratio(struct drm_connector *connector,
> +					bool set)
>   {
>   	u8 config;
>   	int ret;
>   
> -	ret = drm_scdc_readb(adapter, SCDC_TMDS_CONFIG, &config);
> +	ret = drm_scdc_readb(connector->ddc, SCDC_TMDS_CONFIG, &config);
>   	if (ret < 0) {
> -		DRM_DEBUG_KMS("Failed to read TMDS config: %d\n", ret);
> +		drm_dbg_kms(connector->dev,
> +			    "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n",
> +			    connector->base.id, connector->name, ret);
>   		return false;
>   	}
>   
> @@ -246,9 +258,11 @@ bool drm_scdc_set_high_tmds_clock_ratio(struct i2c_adapter *adapter, bool set)
>   	else
>   		config &= ~SCDC_TMDS_BIT_CLOCK_RATIO_BY_40;
>   
> -	ret = drm_scdc_writeb(adapter, SCDC_TMDS_CONFIG, config);
> +	ret = drm_scdc_writeb(connector->ddc, SCDC_TMDS_CONFIG, config);
>   	if (ret < 0) {
> -		DRM_DEBUG_KMS("Failed to set TMDS clock ratio: %d\n", ret);
> +		drm_dbg_kms(connector->dev,
> +			    "[CONNECTOR:%d:%s] Failed to set TMDS clock ratio: %d\n",
> +			    connector->base.id, connector->name, ret);
>   		return false;
>   	}
>   
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index dc294717bcdf..d0bb3a52ae5c 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -3974,8 +3974,8 @@ static int intel_hdmi_reset_link(struct intel_encoder *encoder,
>   
>   	ret = drm_scdc_readb(adapter, SCDC_TMDS_CONFIG, &config);
>   	if (ret < 0) {
> -		drm_err(&dev_priv->drm, "Failed to read TMDS config: %d\n",
> -			ret);
> +		drm_err(&dev_priv->drm, "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n",
> +			connector->base.base.id, connector->base.name, ret);
>   		return 0;
>   	}
>   
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index c7e9e1fbed37..a690a5616506 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -2646,11 +2646,8 @@ bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,
>   				       bool scrambling)
>   {
>   	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
>   	struct drm_scrambling *sink_scrambling =
>   		&connector->display_info.hdmi.scdc.scrambling;
> -	struct i2c_adapter *adapter =
> -		intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
>   
>   	if (!sink_scrambling->supported)
>   		return true;
> @@ -2661,9 +2658,8 @@ bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,
>   		    str_yes_no(scrambling), high_tmds_clock_ratio ? 40 : 10);
>   
>   	/* Set TMDS bit clock ratio to 1/40 or 1/10, and enable/disable scrambling */
> -	return drm_scdc_set_high_tmds_clock_ratio(adapter,
> -						  high_tmds_clock_ratio) &&
> -		drm_scdc_set_scrambling(adapter, scrambling);
> +	return drm_scdc_set_high_tmds_clock_ratio(connector, high_tmds_clock_ratio) &&
> +		drm_scdc_set_scrambling(connector, scrambling);
>   }
>   
>   static u8 chv_port_to_ddc_pin(struct drm_i915_private *dev_priv, enum port port)
> diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
> index 8af632740673..34af6724914f 100644
> --- a/drivers/gpu/drm/tegra/sor.c
> +++ b/drivers/gpu/drm/tegra/sor.c
> @@ -2140,10 +2140,8 @@ static void tegra_sor_hdmi_disable_scrambling(struct tegra_sor *sor)
>   
>   static void tegra_sor_hdmi_scdc_disable(struct tegra_sor *sor)
>   {
> -	struct i2c_adapter *ddc = sor->output.ddc;
> -
> -	drm_scdc_set_high_tmds_clock_ratio(ddc, false);
> -	drm_scdc_set_scrambling(ddc, false);
> +	drm_scdc_set_high_tmds_clock_ratio(&sor->output.connector, false);
> +	drm_scdc_set_scrambling(&sor->output.connector, false);
>   
>   	tegra_sor_hdmi_disable_scrambling(sor);
>   }
> @@ -2168,10 +2166,8 @@ static void tegra_sor_hdmi_enable_scrambling(struct tegra_sor *sor)
>   
>   static void tegra_sor_hdmi_scdc_enable(struct tegra_sor *sor)
>   {
> -	struct i2c_adapter *ddc = sor->output.ddc;
> -
> -	drm_scdc_set_high_tmds_clock_ratio(ddc, true);
> -	drm_scdc_set_scrambling(ddc, true);
> +	drm_scdc_set_high_tmds_clock_ratio(&sor->output.connector, true);
> +	drm_scdc_set_scrambling(&sor->output.connector, true);
>   
>   	tegra_sor_hdmi_enable_scrambling(sor);
>   }
> @@ -2179,9 +2175,8 @@ static void tegra_sor_hdmi_scdc_enable(struct tegra_sor *sor)
>   static void tegra_sor_hdmi_scdc_work(struct work_struct *work)
>   {
>   	struct tegra_sor *sor = container_of(work, struct tegra_sor, scdc.work);
> -	struct i2c_adapter *ddc = sor->output.ddc;
>   
> -	if (!drm_scdc_get_scrambling_status(ddc)) {
> +	if (!drm_scdc_get_scrambling_status(&sor->output.connector)) {
>   		DRM_DEBUG_KMS("SCDC not scrambled\n");
>   		tegra_sor_hdmi_scdc_enable(sor);
>   	}
> diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
> index 464c3cc8e6fb..06713d8b82b5 100644
> --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
> +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
> @@ -885,7 +885,8 @@ static void vc4_hdmi_set_infoframes(struct drm_encoder *encoder)
>   static void vc4_hdmi_enable_scrambling(struct drm_encoder *encoder)
>   {
>   	struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
> -	struct drm_device *drm = vc4_hdmi->connector.dev;
> +	struct drm_connector *connector = &vc4_hdmi->connector;
> +	struct drm_device *drm = connector->dev;
>   	const struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
>   	unsigned long flags;
>   	int idx;
> @@ -903,8 +904,8 @@ static void vc4_hdmi_enable_scrambling(struct drm_encoder *encoder)
>   	if (!drm_dev_enter(drm, &idx))
>   		return;
>   
> -	drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, true);
> -	drm_scdc_set_scrambling(vc4_hdmi->ddc, true);
> +	drm_scdc_set_high_tmds_clock_ratio(connector, true);
> +	drm_scdc_set_scrambling(connector, true);
>   
>   	spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
>   	HDMI_WRITE(HDMI_SCRAMBLER_CTL, HDMI_READ(HDMI_SCRAMBLER_CTL) |
> @@ -922,7 +923,8 @@ static void vc4_hdmi_enable_scrambling(struct drm_encoder *encoder)
>   static void vc4_hdmi_disable_scrambling(struct drm_encoder *encoder)
>   {
>   	struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
> -	struct drm_device *drm = vc4_hdmi->connector.dev;
> +	struct drm_connector *connector = &vc4_hdmi->connector;
> +	struct drm_device *drm = connector->dev;
>   	unsigned long flags;
>   	int idx;
>   
> @@ -944,8 +946,8 @@ static void vc4_hdmi_disable_scrambling(struct drm_encoder *encoder)
>   		   ~VC5_HDMI_SCRAMBLER_CTL_ENABLE);
>   	spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
>   
> -	drm_scdc_set_scrambling(vc4_hdmi->ddc, false);
> -	drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, false);
> +	drm_scdc_set_scrambling(connector, false);
> +	drm_scdc_set_high_tmds_clock_ratio(connector, false);
>   
>   	drm_dev_exit(idx);
>   }
> @@ -955,12 +957,13 @@ static void vc4_hdmi_scrambling_wq(struct work_struct *work)
>   	struct vc4_hdmi *vc4_hdmi = container_of(to_delayed_work(work),
>   						 struct vc4_hdmi,
>   						 scrambling_work);
> +	struct drm_connector *connector = &vc4_hdmi->connector;
>   
> -	if (drm_scdc_get_scrambling_status(vc4_hdmi->ddc))
> +	if (drm_scdc_get_scrambling_status(connector))
>   		return;
>   
> -	drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, true);
> -	drm_scdc_set_scrambling(vc4_hdmi->ddc, true);
> +	drm_scdc_set_high_tmds_clock_ratio(connector, true);
> +	drm_scdc_set_scrambling(connector, true);
>   
>   	queue_delayed_work(system_wq, &vc4_hdmi->scrambling_work,
>   			   msecs_to_jiffies(SCRAMBLING_POLLING_DELAY_MS));
> diff --git a/include/drm/display/drm_scdc_helper.h b/include/drm/display/drm_scdc_helper.h
> index ded01fd948b4..34600476a1b9 100644
> --- a/include/drm/display/drm_scdc_helper.h
> +++ b/include/drm/display/drm_scdc_helper.h
> @@ -28,6 +28,7 @@
>   
>   #include <drm/display/drm_scdc.h>
>   
> +struct drm_connector;
>   struct i2c_adapter;
>   
>   ssize_t drm_scdc_read(struct i2c_adapter *adapter, u8 offset, void *buffer,
> @@ -71,9 +72,9 @@ static inline int drm_scdc_writeb(struct i2c_adapter *adapter, u8 offset,
>   	return drm_scdc_write(adapter, offset, &value, sizeof(value));
>   }
>   
> -bool drm_scdc_get_scrambling_status(struct i2c_adapter *adapter);
> +bool drm_scdc_get_scrambling_status(struct drm_connector *connector);
>   
> -bool drm_scdc_set_scrambling(struct i2c_adapter *adapter, bool enable);
> -bool drm_scdc_set_high_tmds_clock_ratio(struct i2c_adapter *adapter, bool set);
> +bool drm_scdc_set_scrambling(struct drm_connector *connector, bool enable);
> +bool drm_scdc_set_high_tmds_clock_ratio(struct drm_connector *connector, bool set);
>   
>   #endif
Thierry Reding April 4, 2023, 11:28 a.m. UTC | #4
On Tue, Apr 04, 2023 at 01:36:52AM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Include the device and connector information in the SCDC
> debugs. Makes it easier to figure out who did what.
> 
> v2: Rely on connector->ddc (Maxime)
> 
> Cc: Andrzej Hajda <andrzej.hajda@intel.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Robert Foss <rfoss@kernel.org>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Emma Anholt <emma@anholt.net>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: intel-gfx@lists.freedesktop.org
> Cc: linux-tegra@vger.kernel.org
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/bridge/synopsys/dw-hdmi.c |  8 ++--
>  drivers/gpu/drm/display/drm_scdc_helper.c | 46 +++++++++++++++--------
>  drivers/gpu/drm/i915/display/intel_ddi.c  |  4 +-
>  drivers/gpu/drm/i915/display/intel_hdmi.c |  8 +---
>  drivers/gpu/drm/tegra/sor.c               | 15 +++-----
>  drivers/gpu/drm/vc4/vc4_hdmi.c            | 21 ++++++-----
>  include/drm/display/drm_scdc_helper.h     |  7 ++--
>  7 files changed, 59 insertions(+), 50 deletions(-)

Acked-by: Thierry Reding <treding@nvidia.com>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index aa51c61a78c7..603bb3c51027 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -1426,9 +1426,9 @@  void dw_hdmi_set_high_tmds_clock_ratio(struct dw_hdmi *hdmi,
 	/* Control for TMDS Bit Period/TMDS Clock-Period Ratio */
 	if (dw_hdmi_support_scdc(hdmi, display)) {
 		if (mtmdsclock > HDMI14_MAX_TMDSCLK)
-			drm_scdc_set_high_tmds_clock_ratio(hdmi->ddc, 1);
+			drm_scdc_set_high_tmds_clock_ratio(&hdmi->connector, 1);
 		else
-			drm_scdc_set_high_tmds_clock_ratio(hdmi->ddc, 0);
+			drm_scdc_set_high_tmds_clock_ratio(&hdmi->connector, 0);
 	}
 }
 EXPORT_SYMBOL_GPL(dw_hdmi_set_high_tmds_clock_ratio);
@@ -2116,7 +2116,7 @@  static void hdmi_av_composer(struct dw_hdmi *hdmi,
 				min_t(u8, bytes, SCDC_MIN_SOURCE_VERSION));
 
 			/* Enabled Scrambling in the Sink */
-			drm_scdc_set_scrambling(hdmi->ddc, 1);
+			drm_scdc_set_scrambling(&hdmi->connector, 1);
 
 			/*
 			 * To activate the scrambler feature, you must ensure
@@ -2132,7 +2132,7 @@  static void hdmi_av_composer(struct dw_hdmi *hdmi,
 			hdmi_writeb(hdmi, 0, HDMI_FC_SCRAMBLER_CTRL);
 			hdmi_writeb(hdmi, (u8)~HDMI_MC_SWRSTZ_TMDSSWRST_REQ,
 				    HDMI_MC_SWRSTZ);
-			drm_scdc_set_scrambling(hdmi->ddc, 0);
+			drm_scdc_set_scrambling(&hdmi->connector, 0);
 		}
 	}
 
diff --git a/drivers/gpu/drm/display/drm_scdc_helper.c b/drivers/gpu/drm/display/drm_scdc_helper.c
index c3ad4ab2b456..6d2f244e5830 100644
--- a/drivers/gpu/drm/display/drm_scdc_helper.c
+++ b/drivers/gpu/drm/display/drm_scdc_helper.c
@@ -26,6 +26,8 @@ 
 #include <linux/delay.h>
 
 #include <drm/display/drm_scdc_helper.h>
+#include <drm/drm_connector.h>
+#include <drm/drm_device.h>
 #include <drm/drm_print.h>
 
 /**
@@ -140,7 +142,7 @@  EXPORT_SYMBOL(drm_scdc_write);
 
 /**
  * drm_scdc_get_scrambling_status - what is status of scrambling?
- * @adapter: I2C adapter for DDC channel
+ * @connector: connector
  *
  * Reads the scrambler status over SCDC, and checks the
  * scrambling status.
@@ -148,14 +150,16 @@  EXPORT_SYMBOL(drm_scdc_write);
  * Returns:
  * True if the scrambling is enabled, false otherwise.
  */
-bool drm_scdc_get_scrambling_status(struct i2c_adapter *adapter)
+bool drm_scdc_get_scrambling_status(struct drm_connector *connector)
 {
 	u8 status;
 	int ret;
 
-	ret = drm_scdc_readb(adapter, SCDC_SCRAMBLER_STATUS, &status);
+	ret = drm_scdc_readb(connector->ddc, SCDC_SCRAMBLER_STATUS, &status);
 	if (ret < 0) {
-		DRM_DEBUG_KMS("Failed to read scrambling status: %d\n", ret);
+		drm_dbg_kms(connector->dev,
+			    "[CONNECTOR:%d:%s] Failed to read scrambling status: %d\n",
+			    connector->base.id, connector->name, ret);
 		return false;
 	}
 
@@ -165,7 +169,7 @@  EXPORT_SYMBOL(drm_scdc_get_scrambling_status);
 
 /**
  * drm_scdc_set_scrambling - enable scrambling
- * @adapter: I2C adapter for DDC channel
+ * @connector: connector
  * @enable: bool to indicate if scrambling is to be enabled/disabled
  *
  * Writes the TMDS config register over SCDC channel, and:
@@ -175,14 +179,17 @@  EXPORT_SYMBOL(drm_scdc_get_scrambling_status);
  * Returns:
  * True if scrambling is set/reset successfully, false otherwise.
  */
-bool drm_scdc_set_scrambling(struct i2c_adapter *adapter, bool enable)
+bool drm_scdc_set_scrambling(struct drm_connector *connector,
+			     bool enable)
 {
 	u8 config;
 	int ret;
 
-	ret = drm_scdc_readb(adapter, SCDC_TMDS_CONFIG, &config);
+	ret = drm_scdc_readb(connector->ddc, SCDC_TMDS_CONFIG, &config);
 	if (ret < 0) {
-		DRM_DEBUG_KMS("Failed to read TMDS config: %d\n", ret);
+		drm_dbg_kms(connector->dev,
+			    "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n",
+			    connector->base.id, connector->name, ret);
 		return false;
 	}
 
@@ -191,9 +198,11 @@  bool drm_scdc_set_scrambling(struct i2c_adapter *adapter, bool enable)
 	else
 		config &= ~SCDC_SCRAMBLING_ENABLE;
 
-	ret = drm_scdc_writeb(adapter, SCDC_TMDS_CONFIG, config);
+	ret = drm_scdc_writeb(connector->ddc, SCDC_TMDS_CONFIG, config);
 	if (ret < 0) {
-		DRM_DEBUG_KMS("Failed to enable scrambling: %d\n", ret);
+		drm_dbg_kms(connector->dev,
+			    "[CONNECTOR:%d:%s] Failed to enable scrambling: %d\n",
+			    connector->base.id, connector->name, ret);
 		return false;
 	}
 
@@ -203,7 +212,7 @@  EXPORT_SYMBOL(drm_scdc_set_scrambling);
 
 /**
  * drm_scdc_set_high_tmds_clock_ratio - set TMDS clock ratio
- * @adapter: I2C adapter for DDC channel
+ * @connector: connector
  * @set: ret or reset the high clock ratio
  *
  *
@@ -230,14 +239,17 @@  EXPORT_SYMBOL(drm_scdc_set_scrambling);
  * Returns:
  * True if write is successful, false otherwise.
  */
-bool drm_scdc_set_high_tmds_clock_ratio(struct i2c_adapter *adapter, bool set)
+bool drm_scdc_set_high_tmds_clock_ratio(struct drm_connector *connector,
+					bool set)
 {
 	u8 config;
 	int ret;
 
-	ret = drm_scdc_readb(adapter, SCDC_TMDS_CONFIG, &config);
+	ret = drm_scdc_readb(connector->ddc, SCDC_TMDS_CONFIG, &config);
 	if (ret < 0) {
-		DRM_DEBUG_KMS("Failed to read TMDS config: %d\n", ret);
+		drm_dbg_kms(connector->dev,
+			    "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n",
+			    connector->base.id, connector->name, ret);
 		return false;
 	}
 
@@ -246,9 +258,11 @@  bool drm_scdc_set_high_tmds_clock_ratio(struct i2c_adapter *adapter, bool set)
 	else
 		config &= ~SCDC_TMDS_BIT_CLOCK_RATIO_BY_40;
 
-	ret = drm_scdc_writeb(adapter, SCDC_TMDS_CONFIG, config);
+	ret = drm_scdc_writeb(connector->ddc, SCDC_TMDS_CONFIG, config);
 	if (ret < 0) {
-		DRM_DEBUG_KMS("Failed to set TMDS clock ratio: %d\n", ret);
+		drm_dbg_kms(connector->dev,
+			    "[CONNECTOR:%d:%s] Failed to set TMDS clock ratio: %d\n",
+			    connector->base.id, connector->name, ret);
 		return false;
 	}
 
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index dc294717bcdf..d0bb3a52ae5c 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -3974,8 +3974,8 @@  static int intel_hdmi_reset_link(struct intel_encoder *encoder,
 
 	ret = drm_scdc_readb(adapter, SCDC_TMDS_CONFIG, &config);
 	if (ret < 0) {
-		drm_err(&dev_priv->drm, "Failed to read TMDS config: %d\n",
-			ret);
+		drm_err(&dev_priv->drm, "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n",
+			connector->base.base.id, connector->base.name, ret);
 		return 0;
 	}
 
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index c7e9e1fbed37..a690a5616506 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -2646,11 +2646,8 @@  bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,
 				       bool scrambling)
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
 	struct drm_scrambling *sink_scrambling =
 		&connector->display_info.hdmi.scdc.scrambling;
-	struct i2c_adapter *adapter =
-		intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
 
 	if (!sink_scrambling->supported)
 		return true;
@@ -2661,9 +2658,8 @@  bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,
 		    str_yes_no(scrambling), high_tmds_clock_ratio ? 40 : 10);
 
 	/* Set TMDS bit clock ratio to 1/40 or 1/10, and enable/disable scrambling */
-	return drm_scdc_set_high_tmds_clock_ratio(adapter,
-						  high_tmds_clock_ratio) &&
-		drm_scdc_set_scrambling(adapter, scrambling);
+	return drm_scdc_set_high_tmds_clock_ratio(connector, high_tmds_clock_ratio) &&
+		drm_scdc_set_scrambling(connector, scrambling);
 }
 
 static u8 chv_port_to_ddc_pin(struct drm_i915_private *dev_priv, enum port port)
diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
index 8af632740673..34af6724914f 100644
--- a/drivers/gpu/drm/tegra/sor.c
+++ b/drivers/gpu/drm/tegra/sor.c
@@ -2140,10 +2140,8 @@  static void tegra_sor_hdmi_disable_scrambling(struct tegra_sor *sor)
 
 static void tegra_sor_hdmi_scdc_disable(struct tegra_sor *sor)
 {
-	struct i2c_adapter *ddc = sor->output.ddc;
-
-	drm_scdc_set_high_tmds_clock_ratio(ddc, false);
-	drm_scdc_set_scrambling(ddc, false);
+	drm_scdc_set_high_tmds_clock_ratio(&sor->output.connector, false);
+	drm_scdc_set_scrambling(&sor->output.connector, false);
 
 	tegra_sor_hdmi_disable_scrambling(sor);
 }
@@ -2168,10 +2166,8 @@  static void tegra_sor_hdmi_enable_scrambling(struct tegra_sor *sor)
 
 static void tegra_sor_hdmi_scdc_enable(struct tegra_sor *sor)
 {
-	struct i2c_adapter *ddc = sor->output.ddc;
-
-	drm_scdc_set_high_tmds_clock_ratio(ddc, true);
-	drm_scdc_set_scrambling(ddc, true);
+	drm_scdc_set_high_tmds_clock_ratio(&sor->output.connector, true);
+	drm_scdc_set_scrambling(&sor->output.connector, true);
 
 	tegra_sor_hdmi_enable_scrambling(sor);
 }
@@ -2179,9 +2175,8 @@  static void tegra_sor_hdmi_scdc_enable(struct tegra_sor *sor)
 static void tegra_sor_hdmi_scdc_work(struct work_struct *work)
 {
 	struct tegra_sor *sor = container_of(work, struct tegra_sor, scdc.work);
-	struct i2c_adapter *ddc = sor->output.ddc;
 
-	if (!drm_scdc_get_scrambling_status(ddc)) {
+	if (!drm_scdc_get_scrambling_status(&sor->output.connector)) {
 		DRM_DEBUG_KMS("SCDC not scrambled\n");
 		tegra_sor_hdmi_scdc_enable(sor);
 	}
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 464c3cc8e6fb..06713d8b82b5 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -885,7 +885,8 @@  static void vc4_hdmi_set_infoframes(struct drm_encoder *encoder)
 static void vc4_hdmi_enable_scrambling(struct drm_encoder *encoder)
 {
 	struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
-	struct drm_device *drm = vc4_hdmi->connector.dev;
+	struct drm_connector *connector = &vc4_hdmi->connector;
+	struct drm_device *drm = connector->dev;
 	const struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
 	unsigned long flags;
 	int idx;
@@ -903,8 +904,8 @@  static void vc4_hdmi_enable_scrambling(struct drm_encoder *encoder)
 	if (!drm_dev_enter(drm, &idx))
 		return;
 
-	drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, true);
-	drm_scdc_set_scrambling(vc4_hdmi->ddc, true);
+	drm_scdc_set_high_tmds_clock_ratio(connector, true);
+	drm_scdc_set_scrambling(connector, true);
 
 	spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
 	HDMI_WRITE(HDMI_SCRAMBLER_CTL, HDMI_READ(HDMI_SCRAMBLER_CTL) |
@@ -922,7 +923,8 @@  static void vc4_hdmi_enable_scrambling(struct drm_encoder *encoder)
 static void vc4_hdmi_disable_scrambling(struct drm_encoder *encoder)
 {
 	struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
-	struct drm_device *drm = vc4_hdmi->connector.dev;
+	struct drm_connector *connector = &vc4_hdmi->connector;
+	struct drm_device *drm = connector->dev;
 	unsigned long flags;
 	int idx;
 
@@ -944,8 +946,8 @@  static void vc4_hdmi_disable_scrambling(struct drm_encoder *encoder)
 		   ~VC5_HDMI_SCRAMBLER_CTL_ENABLE);
 	spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
 
-	drm_scdc_set_scrambling(vc4_hdmi->ddc, false);
-	drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, false);
+	drm_scdc_set_scrambling(connector, false);
+	drm_scdc_set_high_tmds_clock_ratio(connector, false);
 
 	drm_dev_exit(idx);
 }
@@ -955,12 +957,13 @@  static void vc4_hdmi_scrambling_wq(struct work_struct *work)
 	struct vc4_hdmi *vc4_hdmi = container_of(to_delayed_work(work),
 						 struct vc4_hdmi,
 						 scrambling_work);
+	struct drm_connector *connector = &vc4_hdmi->connector;
 
-	if (drm_scdc_get_scrambling_status(vc4_hdmi->ddc))
+	if (drm_scdc_get_scrambling_status(connector))
 		return;
 
-	drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, true);
-	drm_scdc_set_scrambling(vc4_hdmi->ddc, true);
+	drm_scdc_set_high_tmds_clock_ratio(connector, true);
+	drm_scdc_set_scrambling(connector, true);
 
 	queue_delayed_work(system_wq, &vc4_hdmi->scrambling_work,
 			   msecs_to_jiffies(SCRAMBLING_POLLING_DELAY_MS));
diff --git a/include/drm/display/drm_scdc_helper.h b/include/drm/display/drm_scdc_helper.h
index ded01fd948b4..34600476a1b9 100644
--- a/include/drm/display/drm_scdc_helper.h
+++ b/include/drm/display/drm_scdc_helper.h
@@ -28,6 +28,7 @@ 
 
 #include <drm/display/drm_scdc.h>
 
+struct drm_connector;
 struct i2c_adapter;
 
 ssize_t drm_scdc_read(struct i2c_adapter *adapter, u8 offset, void *buffer,
@@ -71,9 +72,9 @@  static inline int drm_scdc_writeb(struct i2c_adapter *adapter, u8 offset,
 	return drm_scdc_write(adapter, offset, &value, sizeof(value));
 }
 
-bool drm_scdc_get_scrambling_status(struct i2c_adapter *adapter);
+bool drm_scdc_get_scrambling_status(struct drm_connector *connector);
 
-bool drm_scdc_set_scrambling(struct i2c_adapter *adapter, bool enable);
-bool drm_scdc_set_high_tmds_clock_ratio(struct i2c_adapter *adapter, bool set);
+bool drm_scdc_set_scrambling(struct drm_connector *connector, bool enable);
+bool drm_scdc_set_high_tmds_clock_ratio(struct drm_connector *connector, bool set);
 
 #endif