[Intel-gfx] [PATCH 1/3] drm/i915: turn the eDP VDD on for any i2c transactions
Jani Nikula
jani.nikula at linux.intel.com
Thu Oct 31 09:14:00 CET 2013
On the series,
Reviewed-by: Jani Nikula <jani.nikula at intel.com>
On Wed, 30 Oct 2013, Paulo Zanoni <przanoni at gmail.com> wrote:
> From: Paulo Zanoni <paulo.r.zanoni at intel.com>
>
> If the eDP output is disabled, then we try to use /dev/i2c-X file to
> do i2c transations, we get a WARN from intel_dp_check_edp() saying
> we're trying to do AUX communication with the panel off. So this
> commit reorganizes the code so we enable the VDD at
> intel_dp_i2c_aux_ch() instead of just the callers inside i915.ko.
>
> This fixes the i2c subtest from the pc8 test of intel-gpu-tools on
> machines that have eDP panels.
>
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
> ---
> drivers/gpu/drm/i915/intel_dp.c | 29 +++++++++++++++++------------
> 1 file changed, 17 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index b3cc333..05d0424 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -623,6 +623,7 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,
> int reply_bytes;
> int ret;
>
> + ironlake_edp_panel_vdd_on(intel_dp);
> intel_dp_check_edp(intel_dp);
> /* Set up the command byte */
> if (mode & MODE_I2C_READ)
> @@ -665,7 +666,7 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,
> reply, reply_bytes);
> if (ret < 0) {
> DRM_DEBUG_KMS("aux_ch failed %d\n", ret);
> - return ret;
> + goto out;
> }
>
> switch (reply[0] & AUX_NATIVE_REPLY_MASK) {
> @@ -676,7 +677,8 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,
> break;
> case AUX_NATIVE_REPLY_NACK:
> DRM_DEBUG_KMS("aux_ch native nack\n");
> - return -EREMOTEIO;
> + ret = -EREMOTEIO;
> + goto out;
> case AUX_NATIVE_REPLY_DEFER:
> /*
> * For now, just give more slack to branch devices. We
> @@ -694,7 +696,8 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,
> default:
> DRM_ERROR("aux_ch invalid native reply 0x%02x\n",
> reply[0]);
> - return -EREMOTEIO;
> + ret = -EREMOTEIO;
> + goto out;
> }
>
> switch (reply[0] & AUX_I2C_REPLY_MASK) {
> @@ -702,22 +705,29 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,
> if (mode == MODE_I2C_READ) {
> *read_byte = reply[1];
> }
> - return reply_bytes - 1;
> + ret = reply_bytes - 1;
> + goto out;
> case AUX_I2C_REPLY_NACK:
> DRM_DEBUG_KMS("aux_i2c nack\n");
> - return -EREMOTEIO;
> + ret = -EREMOTEIO;
> + goto out;
> case AUX_I2C_REPLY_DEFER:
> DRM_DEBUG_KMS("aux_i2c defer\n");
> udelay(100);
> break;
> default:
> DRM_ERROR("aux_i2c invalid reply 0x%02x\n", reply[0]);
> - return -EREMOTEIO;
> + ret = -EREMOTEIO;
> + goto out;
> }
> }
>
> DRM_ERROR("too many retries, giving up\n");
> - return -EREMOTEIO;
> + ret = -EREMOTEIO;
> +
> +out:
> + ironlake_edp_panel_vdd_off(intel_dp, false);
> + return ret;
> }
>
> static int
> @@ -739,9 +749,7 @@ intel_dp_i2c_init(struct intel_dp *intel_dp,
> intel_dp->adapter.algo_data = &intel_dp->algo;
> intel_dp->adapter.dev.parent = intel_connector->base.kdev;
>
> - ironlake_edp_panel_vdd_on(intel_dp);
> ret = i2c_dp_aux_add_bus(&intel_dp->adapter);
> - ironlake_edp_panel_vdd_off(intel_dp, false);
> return ret;
> }
>
> @@ -3498,7 +3506,6 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
> intel_dp_init_panel_power_sequencer_registers(dev, intel_dp,
> &power_seq);
>
> - ironlake_edp_panel_vdd_on(intel_dp);
> edid = drm_get_edid(connector, &intel_dp->adapter);
> if (edid) {
> if (drm_add_edid_modes(connector, edid)) {
> @@ -3530,8 +3537,6 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
> fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
> }
>
> - ironlake_edp_panel_vdd_off(intel_dp, false);
> -
> intel_panel_init(&intel_connector->panel, fixed_mode);
> intel_panel_setup_backlight(connector);
>
> --
> 1.8.3.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Jani Nikula, Intel Open Source Technology Center
More information about the Intel-gfx
mailing list