[Intel-gfx] [PATCH] drm/i915: enforce bitbanging for i2c

Jani Nikula jani.nikula at intel.com
Tue Aug 21 11:03:49 CEST 2012


On Tue, 21 Aug 2012, Daniel Vetter <daniel.vetter at ffwll.ch> wrote:
> Now that we have also have a workaround for crt to fallback to
> bitbanging in some cases and then restore gmbus again, we need to
> ensure that we don't try to enable gmbus on broken hw (like i830M).
> Previously only sdvo had a bit-banging fallback, and sdvo is gen3+
> only, so no issue with that.
>
> Enforce this by tracking separately whether gmbus even could work.
>
> This issue has been introduced in
>
> commit f1a2f5b7c5f0941d23eef0a095c0b99bf8d051e6
> Author: Jani Nikula <jani.nikula at intel.com>
> Date:   Mon Aug 13 13:22:35 2012 +0300
>
>     drm/i915: fall back to bit-banging if GMBUS fails in CRT EDID
>     reads
>
> Found by code-inspection, no bug report afaik.

I don't see how my patch could enable or try GMBUS if force_bit has been
set to true. On i830 the first attempt will be bit-banging, as before,
and there will be no fallback because bit-banging is already enabled.

I don't think this patch is necessary, but by all means prove me
wrong. ;)

BR,
Jani.

>
> Cc: Jani Nikula <jani.nikula at intel.com>
> Cc: stable at vger.kernel.org
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
>  drivers/gpu/drm/i915/i915_drv.h  |    1 +
>  drivers/gpu/drm/i915/intel_i2c.c |    5 ++++-
>  2 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index a2382a1..365df4c 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -382,6 +382,7 @@ struct intel_fbc_work;
>  struct intel_gmbus {
>  	struct i2c_adapter adapter;
>  	bool force_bit;
> +	bool always_bit;
>  	u32 reg0;
>  	u32 gpio_reg;
>  	struct i2c_algo_bit_data bit_algo;
> diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c
> index b9755f6..e79f316 100644
> --- a/drivers/gpu/drm/i915/intel_i2c.c
> +++ b/drivers/gpu/drm/i915/intel_i2c.c
> @@ -492,7 +492,7 @@ int intel_setup_gmbus(struct drm_device *dev)
>  
>  		/* gmbus seems to be broken on i830 */
>  		if (IS_I830(dev))
> -			bus->force_bit = true;
> +			bus->always_bit = bus->force_bit = true;
>  
>  		intel_gpio_setup(bus, port);
>  
> @@ -533,6 +533,9 @@ void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit)
>  {
>  	struct intel_gmbus *bus = to_intel_gmbus(adapter);
>  
> +	if (bus->always_bit)
> +		force_bit = true;
> +
>  	bus->force_bit = force_bit;
>  }
>  
> -- 
> 1.7.10.4



More information about the Intel-gfx mailing list