From patchwork Thu May 31 12:41:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 137370 Delivered-To: patch@linaro.org Received: by 2002:a2e:9706:0:0:0:0:0 with SMTP id r6-v6csp6549196lji; Thu, 31 May 2018 05:41:37 -0700 (PDT) X-Google-Smtp-Source: ADUXVKLZ5Yl0dFRnp1n/7mW9mPuwSqIEjODWksX/3Hk1a4bHxvqQ85sgT6fw1yFwfuckvS9gjnVQ X-Received: by 2002:a63:2b46:: with SMTP id r67-v6mr5311622pgr.89.1527770497261; Thu, 31 May 2018 05:41:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527770497; cv=none; d=google.com; s=arc-20160816; b=i7J2/thpb0HXwmGBWm7/1s2eJOi4HG3erAQv0DqjMYuc3H0kodX2cNt6XslvlGIz/y 4NEFAC93o+XlnfN6xG9VnkFawS3JBEXCulGRMY/e0cGzEToWPZyE7c9Qib35TgBe49DJ MmKzDS64O+CftdWMHJvTuNQTEvuaL0f29ksF97YXCkPeyKjjwo8iABdS6S+4rdDjwW3t UsJ9ruI/yOvZ3TjDp7vd9291gZmI1nVw7IzVkCutbcGPhhezxAJXPzC+DoD3NAiFFuP/ fupvAlNKWfJWWLqV5nZYX6Q6jaR+wIsyKOAtNlmK4KVNwsSn1xkOG9Jf7H9q307wfD5o 7ZWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=TyxR1bFkkr69KAhBs8t0z8NS0A1p2Pmu+3WXaOKqnhM=; b=Tamm0QH75wCPBWATEVNjMNw0QTB4K+56t+kUkhPZ0V8lI11Rkt0dAxJM1HVVaiz5+f C/Mye2RKed1yVP90v15aAcMLTYY/0mcD0J+iA89rpyy1+2S5LzGJwK5mHPlqyKlMKTiX 6kjz8cWxJe+qx5YLDt9HhNBfjx9GohchHkncWyhYsBCf7wpilN8qCMvyrKNDK3XJnaje icnm24w4wvZVbqgsXUtzQfJyt/+eJ43te6lNFl0CQId/iDjrKq1kA2R4TNSGIJEBdHRt PzKdPbNSNVn5bl2SGQYSqcVpi49jeEff3nlw6A6wnXb4gtN4/oV6Ob/JtVkPIYov4V0p C9AQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@ti.com header.s=ti-com-17Q1 header.b=YYwav/Hm; spf=pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-omap-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 7-v6si38961584pff.154.2018.05.31.05.41.37; Thu, 31 May 2018 05:41:37 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@ti.com header.s=ti-com-17Q1 header.b=YYwav/Hm; spf=pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-omap-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755039AbeEaMlg (ORCPT + 5 others); Thu, 31 May 2018 08:41:36 -0400 Received: from fllnx210.ext.ti.com ([198.47.19.17]:49770 "EHLO fllnx210.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755030AbeEaMlf (ORCPT ); Thu, 31 May 2018 08:41:35 -0400 Received: from dlelxv90.itg.ti.com ([172.17.2.17]) by fllnx210.ext.ti.com (8.15.1/8.15.1) with ESMTP id w4VCfUpG026094; Thu, 31 May 2018 07:41:30 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1527770490; bh=c4tyg1jZv7fD6Yu781Q5C4k9qLVE9HTkhjdjP2HFWHc=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=YYwav/Hm1f4YV85VIzXCRe4zTYVYvpCr6SLZn7VhWGjbcUyHq3u4N/U5qtJsVK/8P 2QpiRgfKO8aQoIPCc8Rg1snOFFBhTZKwyd5iHqdVF+3kzxHg+JthwfXUWL7WhOXlEd /D8SvSYxnOOAgs8DxFe9zaOMB1jLdIxEvcWu7LCI= Received: from DLEE100.ent.ti.com (dlee100.ent.ti.com [157.170.170.30]) by dlelxv90.itg.ti.com (8.14.3/8.13.8) with ESMTP id w4VCfUH4006534; Thu, 31 May 2018 07:41:30 -0500 Received: from DLEE105.ent.ti.com (157.170.170.35) by DLEE100.ent.ti.com (157.170.170.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1466.3; Thu, 31 May 2018 07:41:30 -0500 Received: from dlep32.itg.ti.com (157.170.170.100) by DLEE105.ent.ti.com (157.170.170.35) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1466.3 via Frontend Transport; Thu, 31 May 2018 07:41:30 -0500 Received: from deskari.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by dlep32.itg.ti.com (8.14.3/8.13.8) with ESMTP id w4VCfQS2002799; Thu, 31 May 2018 07:41:28 -0500 From: Tomi Valkeinen To: , , Laurent Pinchart , Peter Ujfalusi , Jyri Sarha , Benoit Parrot CC: Tomi Valkeinen Subject: [RFC PATCH 1/6] drm: Add support for extracting sync signal drive edge from videomode Date: Thu, 31 May 2018 15:41:04 +0300 Message-ID: <20180531124109.3209-2-tomi.valkeinen@ti.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180531124109.3209-1-tomi.valkeinen@ti.com> References: <20180531124109.3209-1-tomi.valkeinen@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org From: Peter Ujfalusi The sync in some panels needs to be driven by different edge of the pixel clock compared to data. This is reflected by the DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in videmode flags. Add similar similar definitions for bus_flags and convert the sync drive edge via drm_bus_flags_from_videomode(). Signed-off-by: Peter Ujfalusi Signed-off-by: Tomi Valkeinen Signed-off-by: Jyri Sarha --- drivers/gpu/drm/drm_modes.c | 15 +++++++++++---- include/drm/drm_connector.h | 4 ++++ 2 files changed, 15 insertions(+), 4 deletions(-) -- Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index e82b61e08f8c..1661bfc55687 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c @@ -659,10 +659,12 @@ EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode); * drm_bus_flags_from_videomode - extract information about pixelclk and * DE polarity from videomode and store it in a separate variable * @vm: videomode structure to use - * @bus_flags: information about pixelclk and DE polarity will be stored here + * @bus_flags: information about pixelclk, sync and DE polarity will be stored + * here * - * Sets DRM_BUS_FLAG_DE_(LOW|HIGH) and DRM_BUS_FLAG_PIXDATA_(POS|NEG)EDGE - * in @bus_flags according to DISPLAY_FLAGS found in @vm + * Sets DRM_BUS_FLAG_DE_(LOW|HIGH), DRM_BUS_FLAG_PIXDATA_(POS|NEG)EDGE and + * DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in @bus_flags according to DISPLAY_FLAGS + * found in @vm */ void drm_bus_flags_from_videomode(const struct videomode *vm, u32 *bus_flags) { @@ -672,6 +674,11 @@ void drm_bus_flags_from_videomode(const struct videomode *vm, u32 *bus_flags) if (vm->flags & DISPLAY_FLAGS_PIXDATA_NEGEDGE) *bus_flags |= DRM_BUS_FLAG_PIXDATA_NEGEDGE; + if (vm->flags & DISPLAY_FLAGS_SYNC_POSEDGE) + *bus_flags |= DRM_BUS_FLAG_SYNC_POSEDGE; + if (vm->flags & DISPLAY_FLAGS_SYNC_NEGEDGE) + *bus_flags |= DRM_BUS_FLAG_SYNC_NEGEDGE; + if (vm->flags & DISPLAY_FLAGS_DE_LOW) *bus_flags |= DRM_BUS_FLAG_DE_LOW; if (vm->flags & DISPLAY_FLAGS_DE_HIGH) @@ -684,7 +691,7 @@ EXPORT_SYMBOL_GPL(drm_bus_flags_from_videomode); * of_get_drm_display_mode - get a drm_display_mode from devicetree * @np: device_node with the timing specification * @dmode: will be set to the return value - * @bus_flags: information about pixelclk and DE polarity + * @bus_flags: information about pixelclk, sync and DE polarity * @index: index into the list of display timings in devicetree * * This function is expensive and should only be used, if only one mode is to be diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 675cc3f8cf85..8fa901637f00 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -290,6 +290,10 @@ struct drm_display_info { #define DRM_BUS_FLAG_DATA_MSB_TO_LSB (1<<4) /* data is transmitted LSB to MSB on the bus */ #define DRM_BUS_FLAG_DATA_LSB_TO_MSB (1<<5) +/* drive sync on pos. edge */ +#define DRM_BUS_FLAG_SYNC_POSEDGE (1<<6) +/* drive sync on neg. edge */ +#define DRM_BUS_FLAG_SYNC_NEGEDGE (1<<7) /** * @bus_flags: Additional information (like pixel signal polarity) for