From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [DVO][PATCH] drm/i915: Fall back to bit banging mode for DVO transmitter detection Date: Fri, 19 Apr 2013 11:14:14 +0200 Message-ID: <20130419091414.GS6169@phenom.ffwll.local> References: <5171034E.1020204@elsoft.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: Content-Disposition: inline In-Reply-To: <5171034E.1020204@elsoft.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: =?iso-8859-1?Q?=22David_M=FCller_=28ELSOFT_AG=29=22?= Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org On Fri, Apr 19, 2013 at 10:41:50AM +0200, "David M=FCller (ELSOFT AG)" wrot= e: > Hello > = > As discussed in this thread > http://lists.freedesktop.org/archives/dri-devel/2013-April/037411.html > GMBUS based DVO transmitter detection seems to be unreliable which could > result in an unusable DVO port. > = > The attached patch fixes this by falling back to bit banging mode for > the time DVO transmitter detection is in progress. > = > Signed-off-by: David M=FCller > Tested-by: David M=FCller > = > --- > diff -dpurN a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/int= el_dvo.c > --- a/drivers/gpu/drm/i915/intel_dvo.c 2012-12-11 10:09:35.113446850 +0100 > +++ b/drivers/gpu/drm/i915/intel_dvo.c 2013-04-19 07:21:54.054546365 +0200 > @@ -449,6 +449,7 @@ void intel_dvo_init(struct drm_device *d > const struct intel_dvo_device *dvo =3D &intel_dvo_devices[i]; > struct i2c_adapter *i2c; > int gpio; > + bool dvoinit; > = > /* Allow the I2C driver info to specify the GPIO to be used in > * special cases, but otherwise default to what's defined > @@ -468,7 +469,17 @@ void intel_dvo_init(struct drm_device *d > i2c =3D intel_gmbus_get_adapter(dev_priv, gpio); > = > intel_dvo->dev =3D *dvo; > - if (!dvo->dev_ops->init(&intel_dvo->dev, i2c)) > + > + /* GMBUS NAK handling seems to be unstable, hence let the > + * transmitter detection run in bit banging mode for now. > + */ > + intel_gmbus_force_bit(i2c, true); > + > + dvoinit =3D dvo->dev_ops->init(&intel_dvo->dev, i2c); > + > + intel_gmbus_force_bit(i2c, false); Shouldn't we keep the dvo i2c line in bit-banging mode always, i.e. restore gmbus mode only when dvo init failed? I suspect that for fickle hw not just init will fail ... -Daniel > + > + if (!dvoinit) > continue; > = > intel_encoder->type =3D INTEL_OUTPUT_DVO; -- = Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch