From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH] drm/i915: enforce bitbanging for i2c Date: Tue, 21 Aug 2012 12:03:49 +0300 Message-ID: <87txvwboqy.fsf@intel.com> References: <1345538269-27765-1-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 9A6319E912 for ; Tue, 21 Aug 2012 02:00:04 -0700 (PDT) In-Reply-To: <1345538269-27765-1-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: Intel Graphics Development Cc: Daniel Vetter , stable@vger.kernel.org List-Id: intel-gfx@lists.freedesktop.org On Tue, 21 Aug 2012, Daniel Vetter 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 > 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 > Cc: stable@vger.kernel.org > Signed-off-by: Daniel Vetter > --- > 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