From mboxrd@z Thu Jan 1 00:00:00 1970 From: laurent.pinchart@ideasonboard.com (Laurent Pinchart) Date: Fri, 14 Sep 2018 12:34:47 +0300 Subject: [PATCH v2 3/8] drm/bridge: simplify bridge timing info In-Reply-To: <20180912183222.25414-4-stefan@agner.ch> References: <20180912183222.25414-1-stefan@agner.ch> <20180912183222.25414-4-stefan@agner.ch> Message-ID: <1573320.Q96Iu7qNKK@avalon> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Stefan, On Wednesday, 12 September 2018 21:32:17 EEST Stefan Agner wrote: > Bridges are typically connected to a parallel display signal with > pixel clock, sync signals and data lines. Parallel display signals > are also used in lower-end embedded display panels. For parallel > display panels we currently do not specify setup/hold times. From > discussions on the mailing list it seems not convincing that this > is currently really required for bridges either. > > Remove setup/hold timings again to better align timing information > of displays and briges. The setup and hold timings were the result of a long discussion with Linux Walleij, who was confronted with a system that didn't work properly unless he flipped the clock polarity. His initial patch contradicted the bridge datasheet, and after investigating we found out that timings played a major role. In a nutshell, given the setup and hold time requirements, the polarity on the driving side depends on the pixel clock frequency. As the frequency increases, when the half clock period reaches the setup time, you can't latch on the opposite edge anymore or you will violate the setup time. The component connected to the bridge thus needs to select a driving edge based on the sampling edge of the bridge, on the bridge's setup time requirement, and on the pixel clock frequency. > Signed-off-by: Stefan Agner > --- > drivers/gpu/drm/bridge/dumb-vga-dac.c | 17 +++++------------ > include/drm/drm_bridge.h | 14 -------------- > 2 files changed, 5 insertions(+), 26 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/dumb-vga-dac.c > b/drivers/gpu/drm/bridge/dumb-vga-dac.c index d5aa0f931ef2..b2309ad228cf > 100644 > --- a/drivers/gpu/drm/bridge/dumb-vga-dac.c > +++ b/drivers/gpu/drm/bridge/dumb-vga-dac.c > @@ -229,14 +229,14 @@ static int dumb_vga_remove(struct platform_device > *pdev) /* > * We assume the ADV7123 DAC is the "default" for historical reasons > * Information taken from the ADV7123 datasheet, revision D. > - * NOTE: the ADV7123EP seems to have other timings and need a new timings > - * set if used. > */ > static const struct drm_bridge_timings default_dac_timings = { > - /* Timing specifications, datasheet page 7 */ > + /* > + * From Timing diagram, datasheet page 7. The bridge samples > + * on pixel clocks positive edge, hence the display controller > + * should drive signals on the negative edge. > + */ > .input_bus_flags = DRM_BUS_FLAG_PIXDATA_NEGEDGE, > - .setup_time_ps = 500, > - .hold_time_ps = 1500, > }; > > /* > @@ -246,10 +246,6 @@ static const struct drm_bridge_timings > default_dac_timings = { static const struct drm_bridge_timings > ti_ths8134_dac_timings = { /* From timing diagram, datasheet page 9 */ > .input_bus_flags = DRM_BUS_FLAG_PIXDATA_NEGEDGE, > - /* From datasheet, page 12 */ > - .setup_time_ps = 3000, > - /* I guess this means latched input */ > - .hold_time_ps = 0, > }; > > /* > @@ -259,9 +255,6 @@ static const struct drm_bridge_timings > ti_ths8134_dac_timings = { static const struct drm_bridge_timings > ti_ths8135_dac_timings = { /* From timing diagram, datasheet page 14 */ > .input_bus_flags = DRM_BUS_FLAG_PIXDATA_NEGEDGE, > - /* From datasheet, page 16 */ > - .setup_time_ps = 2000, > - .hold_time_ps = 500, > }; > > static const struct of_device_id dumb_vga_match[] = { > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > index 45e90f4b46c3..1a1d08350eaf 100644 > --- a/include/drm/drm_bridge.h > +++ b/include/drm/drm_bridge.h > @@ -251,20 +251,6 @@ struct drm_bridge_timings { > * &drm_display_info->bus_flags. > */ > u32 input_bus_flags; > - /** > - * @setup_time_ps: > - * > - * Defines the time in picoseconds the input data lines must be > - * stable before the clock edge. > - */ > - u32 setup_time_ps; > - /** > - * @hold_time_ps: > - * > - * Defines the time in picoseconds taken for the bridge to sample the > - * input signal after the clock edge. > - */ > - u32 hold_time_ps; > }; > > /** -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v2 3/8] drm/bridge: simplify bridge timing info Date: Fri, 14 Sep 2018 12:34:47 +0300 Message-ID: <1573320.Q96Iu7qNKK@avalon> References: <20180912183222.25414-1-stefan@agner.ch> <20180912183222.25414-4-stefan@agner.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180912183222.25414-4-stefan@agner.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Stefan Agner Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, max.krummenacher@toradex.com, kernel@pengutronix.de, marcel.ziswiler@toradex.com, airlied@linux.ie, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, robh+dt@kernel.org, linux-imx@nxp.com, fabio.estevam@nxp.com, sean@poorly.run, shawnguo@kernel.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org SGkgU3RlZmFuLAoKT24gV2VkbmVzZGF5LCAxMiBTZXB0ZW1iZXIgMjAxOCAyMTozMjoxNyBFRVNU IFN0ZWZhbiBBZ25lciB3cm90ZToKPiBCcmlkZ2VzIGFyZSB0eXBpY2FsbHkgY29ubmVjdGVkIHRv IGEgcGFyYWxsZWwgZGlzcGxheSBzaWduYWwgd2l0aAo+IHBpeGVsIGNsb2NrLCBzeW5jIHNpZ25h bHMgYW5kIGRhdGEgbGluZXMuIFBhcmFsbGVsIGRpc3BsYXkgc2lnbmFscwo+IGFyZSBhbHNvIHVz ZWQgaW4gbG93ZXItZW5kIGVtYmVkZGVkIGRpc3BsYXkgcGFuZWxzLiBGb3IgcGFyYWxsZWwKPiBk aXNwbGF5IHBhbmVscyB3ZSBjdXJyZW50bHkgZG8gbm90IHNwZWNpZnkgc2V0dXAvaG9sZCB0aW1l cy4gRnJvbQo+IGRpc2N1c3Npb25zIG9uIHRoZSBtYWlsaW5nIGxpc3QgaXQgc2VlbXMgbm90IGNv bnZpbmNpbmcgdGhhdCB0aGlzCj4gaXMgY3VycmVudGx5IHJlYWxseSByZXF1aXJlZCBmb3IgYnJp ZGdlcyBlaXRoZXIuCj4gCj4gUmVtb3ZlIHNldHVwL2hvbGQgdGltaW5ncyBhZ2FpbiB0byBiZXR0 ZXIgYWxpZ24gdGltaW5nIGluZm9ybWF0aW9uCj4gb2YgZGlzcGxheXMgYW5kIGJyaWdlcy4KClRo ZSBzZXR1cCBhbmQgaG9sZCB0aW1pbmdzIHdlcmUgdGhlIHJlc3VsdCBvZiBhIGxvbmcgZGlzY3Vz c2lvbiB3aXRoIExpbnV4IApXYWxsZWlqLCB3aG8gd2FzIGNvbmZyb250ZWQgd2l0aCBhIHN5c3Rl bSB0aGF0IGRpZG4ndCB3b3JrIHByb3Blcmx5IHVubGVzcyBoZSAKZmxpcHBlZCB0aGUgY2xvY2sg cG9sYXJpdHkuIEhpcyBpbml0aWFsIHBhdGNoIGNvbnRyYWRpY3RlZCB0aGUgYnJpZGdlIApkYXRh c2hlZXQsIGFuZCBhZnRlciBpbnZlc3RpZ2F0aW5nIHdlIGZvdW5kIG91dCB0aGF0IHRpbWluZ3Mg cGxheWVkIGEgbWFqb3IgCnJvbGUuCgpJbiBhIG51dHNoZWxsLCBnaXZlbiB0aGUgc2V0dXAgYW5k IGhvbGQgdGltZSByZXF1aXJlbWVudHMsIHRoZSBwb2xhcml0eSBvbiB0aGUgCmRyaXZpbmcgc2lk ZSBkZXBlbmRzIG9uIHRoZSBwaXhlbCBjbG9jayBmcmVxdWVuY3kuIEFzIHRoZSBmcmVxdWVuY3kg aW5jcmVhc2VzLCAKd2hlbiB0aGUgaGFsZiBjbG9jayBwZXJpb2QgcmVhY2hlcyB0aGUgc2V0dXAg dGltZSwgeW91IGNhbid0IGxhdGNoIG9uIHRoZSAKb3Bwb3NpdGUgZWRnZSBhbnltb3JlIG9yIHlv dSB3aWxsIHZpb2xhdGUgdGhlIHNldHVwIHRpbWUuIFRoZSBjb21wb25lbnQgCmNvbm5lY3RlZCB0 byB0aGUgYnJpZGdlIHRodXMgbmVlZHMgdG8gc2VsZWN0IGEgZHJpdmluZyBlZGdlIGJhc2VkIG9u IHRoZSAKc2FtcGxpbmcgZWRnZSBvZiB0aGUgYnJpZGdlLCBvbiB0aGUgYnJpZGdlJ3Mgc2V0dXAg dGltZSByZXF1aXJlbWVudCwgYW5kIG9uIAp0aGUgcGl4ZWwgY2xvY2sgZnJlcXVlbmN5LgoKPiBT aWduZWQtb2ZmLWJ5OiBTdGVmYW4gQWduZXIgPHN0ZWZhbkBhZ25lci5jaD4KPiAtLS0KPiAgZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9kdW1iLXZnYS1kYWMuYyB8IDE3ICsrKysrLS0tLS0tLS0tLS0t Cj4gIGluY2x1ZGUvZHJtL2RybV9icmlkZ2UuaCAgICAgICAgICAgICAgfCAxNCAtLS0tLS0tLS0t LS0tLQo+ICAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0p Cj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZHVtYi12Z2EtZGFjLmMK PiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZHVtYi12Z2EtZGFjLmMgaW5kZXggZDVhYTBmOTMx ZWYyLi5iMjMwOWFkMjI4Y2YKPiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L2R1bWItdmdhLWRhYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kdW1iLXZnYS1k YWMuYwo+IEBAIC0yMjksMTQgKzIyOSwxNCBAQCBzdGF0aWMgaW50IGR1bWJfdmdhX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCj4gKnBkZXYpIC8qCj4gICAqIFdlIGFzc3VtZSB0aGUgQURW NzEyMyBEQUMgaXMgdGhlICJkZWZhdWx0IiBmb3IgaGlzdG9yaWNhbCByZWFzb25zCj4gICAqIElu Zm9ybWF0aW9uIHRha2VuIGZyb20gdGhlIEFEVjcxMjMgZGF0YXNoZWV0LCByZXZpc2lvbiBELgo+ IC0gKiBOT1RFOiB0aGUgQURWNzEyM0VQIHNlZW1zIHRvIGhhdmUgb3RoZXIgdGltaW5ncyBhbmQg bmVlZCBhIG5ldyB0aW1pbmdzCj4gLSAqIHNldCBpZiB1c2VkLgo+ICAgKi8KPiAgc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fYnJpZGdlX3RpbWluZ3MgZGVmYXVsdF9kYWNfdGltaW5ncyA9IHsKPiAt CS8qIFRpbWluZyBzcGVjaWZpY2F0aW9ucywgZGF0YXNoZWV0IHBhZ2UgNyAqLwo+ICsJLyoKPiAr CSAqIEZyb20gVGltaW5nIGRpYWdyYW0sIGRhdGFzaGVldCBwYWdlIDcuIFRoZSBicmlkZ2Ugc2Ft cGxlcwo+ICsJICogb24gcGl4ZWwgY2xvY2tzIHBvc2l0aXZlIGVkZ2UsIGhlbmNlIHRoZSBkaXNw bGF5IGNvbnRyb2xsZXIKPiArCSAqIHNob3VsZCBkcml2ZSBzaWduYWxzIG9uIHRoZSBuZWdhdGl2 ZSBlZGdlLgo+ICsJICovCj4gIAkuaW5wdXRfYnVzX2ZsYWdzID0gRFJNX0JVU19GTEFHX1BJWERB VEFfTkVHRURHRSwKPiAtCS5zZXR1cF90aW1lX3BzID0gNTAwLAo+IC0JLmhvbGRfdGltZV9wcyA9 IDE1MDAsCj4gIH07Cj4gCj4gIC8qCj4gQEAgLTI0NiwxMCArMjQ2LDYgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fYnJpZGdlX3RpbWluZ3MKPiBkZWZhdWx0X2RhY190aW1pbmdzID0geyBzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfdGltaW5ncwo+IHRpX3RoczgxMzRfZGFjX3RpbWlu Z3MgPSB7IC8qIEZyb20gdGltaW5nIGRpYWdyYW0sIGRhdGFzaGVldCBwYWdlIDkgKi8KPiAgCS5p bnB1dF9idXNfZmxhZ3MgPSBEUk1fQlVTX0ZMQUdfUElYREFUQV9ORUdFREdFLAo+IC0JLyogRnJv bSBkYXRhc2hlZXQsIHBhZ2UgMTIgKi8KPiAtCS5zZXR1cF90aW1lX3BzID0gMzAwMCwKPiAtCS8q IEkgZ3Vlc3MgdGhpcyBtZWFucyBsYXRjaGVkIGlucHV0ICovCj4gLQkuaG9sZF90aW1lX3BzID0g MCwKPiAgfTsKPiAKPiAgLyoKPiBAQCAtMjU5LDkgKzI1NSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2JyaWRnZV90aW1pbmdzCj4gdGlfdGhzODEzNF9kYWNfdGltaW5ncyA9IHsgc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX3RpbWluZ3MKPiB0aV90aHM4MTM1X2RhY190aW1pbmdz ID0geyAvKiBGcm9tIHRpbWluZyBkaWFncmFtLCBkYXRhc2hlZXQgcGFnZSAxNCAqLwo+ICAJLmlu cHV0X2J1c19mbGFncyA9IERSTV9CVVNfRkxBR19QSVhEQVRBX05FR0VER0UsCj4gLQkvKiBGcm9t IGRhdGFzaGVldCwgcGFnZSAxNiAqLwo+IC0JLnNldHVwX3RpbWVfcHMgPSAyMDAwLAo+IC0JLmhv bGRfdGltZV9wcyA9IDUwMCwKPiAgfTsKPiAKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZp Y2VfaWQgZHVtYl92Z2FfbWF0Y2hbXSA9IHsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJt X2JyaWRnZS5oIGIvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4gaW5kZXggNDVlOTBmNGI0NmMz Li4xYTFkMDgzNTBlYWYgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4g KysrIGIvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4gQEAgLTI1MSwyMCArMjUxLDYgQEAgc3Ry dWN0IGRybV9icmlkZ2VfdGltaW5ncyB7Cj4gIAkgKiAmZHJtX2Rpc3BsYXlfaW5mby0+YnVzX2Zs YWdzLgo+ICAJICovCj4gIAl1MzIgaW5wdXRfYnVzX2ZsYWdzOwo+IC0JLyoqCj4gLQkgKiBAc2V0 dXBfdGltZV9wczoKPiAtCSAqCj4gLQkgKiBEZWZpbmVzIHRoZSB0aW1lIGluIHBpY29zZWNvbmRz IHRoZSBpbnB1dCBkYXRhIGxpbmVzIG11c3QgYmUKPiAtCSAqIHN0YWJsZSBiZWZvcmUgdGhlIGNs b2NrIGVkZ2UuCj4gLQkgKi8KPiAtCXUzMiBzZXR1cF90aW1lX3BzOwo+IC0JLyoqCj4gLQkgKiBA aG9sZF90aW1lX3BzOgo+IC0JICoKPiAtCSAqIERlZmluZXMgdGhlIHRpbWUgaW4gcGljb3NlY29u ZHMgdGFrZW4gZm9yIHRoZSBicmlkZ2UgdG8gc2FtcGxlIHRoZQo+IC0JICogaW5wdXQgc2lnbmFs IGFmdGVyIHRoZSBjbG9jayBlZGdlLgo+IC0JICovCj4gLQl1MzIgaG9sZF90aW1lX3BzOwo+ICB9 Owo+IAo+ICAvKioKCgotLSAKUmVnYXJkcywKCkxhdXJlbnQgUGluY2hhcnQKCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 35607ECDFD0 for ; Fri, 14 Sep 2018 09:34:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D4CB220861 for ; Fri, 14 Sep 2018 09:34:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Jf+lCZVn" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D4CB220861 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728273AbeINOsQ (ORCPT ); Fri, 14 Sep 2018 10:48:16 -0400 Received: from perceval.ideasonboard.com ([213.167.242.64]:60972 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727670AbeINOsQ (ORCPT ); Fri, 14 Sep 2018 10:48:16 -0400 Received: from avalon.localnet (unknown [IPv6:2a02:a03f:44f6:3500:d929:375b:d608:66c7]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id A995ACE; Fri, 14 Sep 2018 11:34:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1536917674; bh=ekbC+Fmc9r/TdCMqKs69qWNQdUBTr3EVeUsUOf4idOY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Jf+lCZVn6BZ/b0soQ6LE58U7/HtBpd6WJV8j8BDVlL+l45yepzdpaRUEPHNgtj5E7 FCwsPNlxa6/5sujYQ3BJNqOuiVSJkG/rPrKnfDylNWpY/NICA3b5EU4ATQzHrs4C6c rsz1gG9jEqUYUN1N4qx/QSsILNij2x4mmgH1HCWk= From: Laurent Pinchart To: Stefan Agner Cc: linus.walleij@linaro.org, airlied@linux.ie, robh+dt@kernel.org, mark.rutland@arm.com, shawnguo@kernel.org, s.hauer@pengutronix.de, p.zabel@pengutronix.de, kernel@pengutronix.de, fabio.estevam@nxp.com, linux-imx@nxp.com, architt@codeaurora.org, a.hajda@samsung.com, gustavo@padovan.org, maarten.lankhorst@linux.intel.com, sean@poorly.run, marcel.ziswiler@toradex.com, max.krummenacher@toradex.com, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 3/8] drm/bridge: simplify bridge timing info Date: Fri, 14 Sep 2018 12:34:47 +0300 Message-ID: <1573320.Q96Iu7qNKK@avalon> Organization: Ideas on Board Oy In-Reply-To: <20180912183222.25414-4-stefan@agner.ch> References: <20180912183222.25414-1-stefan@agner.ch> <20180912183222.25414-4-stefan@agner.ch> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Stefan, On Wednesday, 12 September 2018 21:32:17 EEST Stefan Agner wrote: > Bridges are typically connected to a parallel display signal with > pixel clock, sync signals and data lines. Parallel display signals > are also used in lower-end embedded display panels. For parallel > display panels we currently do not specify setup/hold times. From > discussions on the mailing list it seems not convincing that this > is currently really required for bridges either. > > Remove setup/hold timings again to better align timing information > of displays and briges. The setup and hold timings were the result of a long discussion with Linux Walleij, who was confronted with a system that didn't work properly unless he flipped the clock polarity. His initial patch contradicted the bridge datasheet, and after investigating we found out that timings played a major role. In a nutshell, given the setup and hold time requirements, the polarity on the driving side depends on the pixel clock frequency. As the frequency increases, when the half clock period reaches the setup time, you can't latch on the opposite edge anymore or you will violate the setup time. The component connected to the bridge thus needs to select a driving edge based on the sampling edge of the bridge, on the bridge's setup time requirement, and on the pixel clock frequency. > Signed-off-by: Stefan Agner > --- > drivers/gpu/drm/bridge/dumb-vga-dac.c | 17 +++++------------ > include/drm/drm_bridge.h | 14 -------------- > 2 files changed, 5 insertions(+), 26 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/dumb-vga-dac.c > b/drivers/gpu/drm/bridge/dumb-vga-dac.c index d5aa0f931ef2..b2309ad228cf > 100644 > --- a/drivers/gpu/drm/bridge/dumb-vga-dac.c > +++ b/drivers/gpu/drm/bridge/dumb-vga-dac.c > @@ -229,14 +229,14 @@ static int dumb_vga_remove(struct platform_device > *pdev) /* > * We assume the ADV7123 DAC is the "default" for historical reasons > * Information taken from the ADV7123 datasheet, revision D. > - * NOTE: the ADV7123EP seems to have other timings and need a new timings > - * set if used. > */ > static const struct drm_bridge_timings default_dac_timings = { > - /* Timing specifications, datasheet page 7 */ > + /* > + * From Timing diagram, datasheet page 7. The bridge samples > + * on pixel clocks positive edge, hence the display controller > + * should drive signals on the negative edge. > + */ > .input_bus_flags = DRM_BUS_FLAG_PIXDATA_NEGEDGE, > - .setup_time_ps = 500, > - .hold_time_ps = 1500, > }; > > /* > @@ -246,10 +246,6 @@ static const struct drm_bridge_timings > default_dac_timings = { static const struct drm_bridge_timings > ti_ths8134_dac_timings = { /* From timing diagram, datasheet page 9 */ > .input_bus_flags = DRM_BUS_FLAG_PIXDATA_NEGEDGE, > - /* From datasheet, page 12 */ > - .setup_time_ps = 3000, > - /* I guess this means latched input */ > - .hold_time_ps = 0, > }; > > /* > @@ -259,9 +255,6 @@ static const struct drm_bridge_timings > ti_ths8134_dac_timings = { static const struct drm_bridge_timings > ti_ths8135_dac_timings = { /* From timing diagram, datasheet page 14 */ > .input_bus_flags = DRM_BUS_FLAG_PIXDATA_NEGEDGE, > - /* From datasheet, page 16 */ > - .setup_time_ps = 2000, > - .hold_time_ps = 500, > }; > > static const struct of_device_id dumb_vga_match[] = { > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > index 45e90f4b46c3..1a1d08350eaf 100644 > --- a/include/drm/drm_bridge.h > +++ b/include/drm/drm_bridge.h > @@ -251,20 +251,6 @@ struct drm_bridge_timings { > * &drm_display_info->bus_flags. > */ > u32 input_bus_flags; > - /** > - * @setup_time_ps: > - * > - * Defines the time in picoseconds the input data lines must be > - * stable before the clock edge. > - */ > - u32 setup_time_ps; > - /** > - * @hold_time_ps: > - * > - * Defines the time in picoseconds taken for the bridge to sample the > - * input signal after the clock edge. > - */ > - u32 hold_time_ps; > }; > > /** -- Regards, Laurent Pinchart