On Tue, 21 Aug 2012, Daniel Vetter <[email protected]> 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 <[email protected]>
> 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 <[email protected]>
> Cc: [email protected]
> Signed-off-by: Daniel Vetter <[email protected]>
> ---
>  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
_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to