Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp951565pxk; Mon, 31 Aug 2020 06:05:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzAfKassY9QF0sXlPSGjMKNYxeL78YYKzicaLtbWkK14Lmzlr8cZXKJrXyUeCrQDB4ihFcE X-Received: by 2002:a50:fc83:: with SMTP id f3mr1245004edq.102.1598879120321; Mon, 31 Aug 2020 06:05:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598879120; cv=none; d=google.com; s=arc-20160816; b=0hl41pPsZ0KRXQUc38VSs/gksOMMUj5nZ6rgAIGLwXuyLaKOddGOzr3IRuIhRFEy1+ cOPvkp3Yu5FZgsxuCq5FpLE7CsYW6x60kpw2cc/2nXc0DqBWZlHH3G2NP+wCs8iCSVRS +humpjmPCClIaV8DJO0+eBi/8ySluDmQGiz33vkLWeR556IsOy6hukMgpUm5EWRt6qGs CykffdydUmf9yjALr/CccSQoybsLdyXx8n/mCHmcYJTBXqyT/oiTzys+qdGWOcsxyfCv tGzgZu1Sy/s3BO+Kf3YJr8lKzbLG8YxnT/U+zZsBrYJJKUxx7k+rPXkbO91auOUAQoFZ fsRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=+LHPvergv9JOkc07dMLH/z6MgF4Iu1IXQz+MYRIw4ms=; b=DshrgxX6zGVU1kuBl7jY1l9uejYkQQxFWGnQwSFjGHM6lFErlJd0CfmX9WP0ZXxWiM kj0JakPU7zDfolZiuKKuYUcvGw791nfVByQwDhYczNNqcLrJKVjhrMfAURujpOLHyPVL GjOW6gUPdF2CJx9aoXQFl8a0LX8kUAUfkqpiuLJSjXgxXSYcsG118Ct3+3GfWh4XhH0Y tF7qMzHy0+8eXWLxOC5vjaH8ZQpG25YwQeBSo23vu46mle+Vi5+/5mBUG0aNQcUN8W8a g3vHnpZiKn6jWTEpozSKcSISaVhdwyahlB2RK3R2N9FUermgZWIY2Vfyd65bNBQC2Sg+ qLyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=JlFI0aBJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r2si5102903edc.37.2020.08.31.06.04.57; Mon, 31 Aug 2020 06:05:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=JlFI0aBJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727902AbgHaNDe (ORCPT + 99 others); Mon, 31 Aug 2020 09:03:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60560 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727852AbgHaNDN (ORCPT ); Mon, 31 Aug 2020 09:03:13 -0400 Received: from mail-pj1-x1044.google.com (mail-pj1-x1044.google.com [IPv6:2607:f8b0:4864:20::1044]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B92BC061573 for ; Mon, 31 Aug 2020 06:03:13 -0700 (PDT) Received: by mail-pj1-x1044.google.com with SMTP id nv17so3106787pjb.3 for ; Mon, 31 Aug 2020 06:03:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+LHPvergv9JOkc07dMLH/z6MgF4Iu1IXQz+MYRIw4ms=; b=JlFI0aBJMRV0V6ERyv/Umtpl9BgCfore/uqnaZiTtFqkjNpv6g4rQcb5axrwGg78aX 6fpYcc+CMqbmJ6XTs21M4chGSxO02Y5HMzAhEyTZ+bNGkIrklrGcyYNmYhTteZld1cAn OKL4JuC60JL1HvCK40q0ebzZU0mHzugKBPjBwk91D5JYCFSTWgpfR7uQ/9Z3uQfoYmBA Bx5qPBtFvyBSh4UaGwYq4BxRyJFtMNA3HGurkbgv6fSDBw0EfVzW+t89WB5/lctMrbe9 ANCpd3xlSFsEEX+bfaUqyQgj0ZwM6FMl0Q4a5fdJ3n+S5oyX72EZgkXBI5MrpnSCDKso POUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+LHPvergv9JOkc07dMLH/z6MgF4Iu1IXQz+MYRIw4ms=; b=jGFj9sYJ5qJnvxksOAqNtneCMWEzBsRk57MXKuohFy0r37r1zwlBRpPk00ScUKw4Sa fxjoPEvgeQfaYbmoiGbExS3KJk+gR84Q18LpM0puaQCkUHfLFKPIjmZQG7I/stREf14r GBR7iUiecXF1pKnoPgkdf9JYM7i/82kDhEOgADSTIJgbpOJvOCjogDSuJTw7xG8NIU1c DRiIImqbLsACDqQf8I17aWPAiZ5QaNZ9XpBsZj6ieskpWxVHL/pfM4YhmAz6UwH0dZph CIoGEeu1mKif2aRXMSJmbweFMCEM3KVfJRBO4g453W+2qhGPnT7vBXC/vli6u6EUHmEZ BoJA== X-Gm-Message-State: AOAM532A/y7j/NUPVK8SY/1H5CQpJvq6gXdnpg5iggdQ76nFQD2kvLMG QYUwp6Er9Bg8pXqMubWQf39MSQ== X-Received: by 2002:a17:90a:fcc:: with SMTP id 70mr1247879pjz.220.1598878992774; Mon, 31 Aug 2020 06:03:12 -0700 (PDT) Received: from nagraj.local ([49.206.21.239]) by smtp.gmail.com with ESMTPSA id l21sm7400580pgb.35.2020.08.31.06.03.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2020 06:03:11 -0700 (PDT) From: Sumit Semwal To: Thierry Reding , Sam Ravnborg Cc: David Airlie , Daniel Vetter , Mauro Carvalho Chehab , "David S . Miller" , Rob Herring , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, Bjorn Andersson , Sumit Semwal , Benni Steini Subject: [PATCH v6 2/2] drm: panel: Add novatek nt36672a panel driver Date: Mon, 31 Aug 2020 18:32:51 +0530 Message-Id: <20200831130251.19769-3-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200831130251.19769-1-sumit.semwal@linaro.org> References: <20200831130251.19769-1-sumit.semwal@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Novatek NT36672a is a generic DSI IC that drives command and video mode panels. Add the driver for it. Right now adding support for some Poco F1 phones that have an LCD panel from Tianma connected with this IC, with a resolution of 1080x2246 that operates in DSI video mode. During testing, Benni Steini helped us fix the reset sequence timing (from 10ms to 20ms), to get the bootanimation to work on Android. With current AOSP, we need to increase it to 200ms - this seems to be a safe high value to avoid a white screen occasionally. Signed-off-by: Sumit Semwal Cc: Benni Steini --- v2: increase reset sequence timing to a safe 200ms v4: Since "0425662fdf05: drm: Nuke mode->vrefresh", we have to calculate vrefresh on demand. Update for it. v5: Fixed review comments from Sam: - rebased on top of drm-misc-next remove return of drm_panel_add() remove drm_panel_detach() - renamed the panel driver file to reflect that this is a novatek nt36672a display driver and not only for tianma panels. Adjusted some internal names also to reflect the same. - corrected changelog to add info about the generic Novatek DSI IC - corrected compatible string accordingly - removed pinctrl - used drm_panel* API for prepare/unprepare/disable/remove v6: Fixed few review comments on v5 from Sam: - add dev_err_probe() support - move DRM_* error printing to dev_err() - removed a few unnecessary bits --- MAINTAINERS | 7 + drivers/gpu/drm/panel/Kconfig | 10 + drivers/gpu/drm/panel/Makefile | 1 + .../gpu/drm/panel/panel-novatek-nt36672a.c | 740 ++++++++++++++++++ 4 files changed, 758 insertions(+) create mode 100644 drivers/gpu/drm/panel/panel-novatek-nt36672a.c diff --git a/MAINTAINERS b/MAINTAINERS index 01fb9ee6b951..aeecade2d65f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -5619,6 +5619,13 @@ T: git git://anongit.freedesktop.org/drm/drm-misc F: Documentation/devicetree/bindings/display/ste,mcde.txt F: drivers/gpu/drm/mcde/ +DRM DRIVER FOR TIANMA NT36672A PANELS +M: Sumit Semwal +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/panel/tianma,nt36672a-panel.yaml +F: drivers/gpu/drm/panel/panel-tianma-nt36672a.c + DRM DRIVER FOR TDFX VIDEO CARDS S: Orphan / Obsolete F: drivers/gpu/drm/tdfx/ diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig index 8d97d07c5871..02600f12a063 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -208,6 +208,16 @@ config DRM_PANEL_NOVATEK_NT35510 around the Novatek NT35510 display controller, such as some Hydis panels. +config DRM_PANEL_NOVATEK_NT36672A + tristate "Novatek NT36672A DSI panel" + depends on OF + depends on DRM_MIPI_DSI + depends on BACKLIGHT_CLASS_DEVICE + help + Say Y here if you want to enable support for the panels built + around the Novatek NT36672A display controller, such as some + Tianma panels used in a few Xiaomi Poco F1 mobile phone. + config DRM_PANEL_NOVATEK_NT39016 tristate "Novatek NT39016 RGB/SPI panel" depends on OF && SPI diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile index 15a4e7752951..4a36eb45f670 100644 --- a/drivers/gpu/drm/panel/Makefile +++ b/drivers/gpu/drm/panel/Makefile @@ -19,6 +19,7 @@ obj-$(CONFIG_DRM_PANEL_LG_LB035Q02) += panel-lg-lb035q02.o obj-$(CONFIG_DRM_PANEL_LG_LG4573) += panel-lg-lg4573.o obj-$(CONFIG_DRM_PANEL_NEC_NL8048HL11) += panel-nec-nl8048hl11.o obj-$(CONFIG_DRM_PANEL_NOVATEK_NT35510) += panel-novatek-nt35510.o +obj-$(CONFIG_DRM_PANEL_NOVATEK_NT36672A) += panel-novatek-nt36672a.o obj-$(CONFIG_DRM_PANEL_NOVATEK_NT39016) += panel-novatek-nt39016.o obj-$(CONFIG_DRM_PANEL_MANTIX_MLAF057WE51) += panel-mantix-mlaf057we51.o obj-$(CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO) += panel-olimex-lcd-olinuxino.o diff --git a/drivers/gpu/drm/panel/panel-novatek-nt36672a.c b/drivers/gpu/drm/panel/panel-novatek-nt36672a.c new file mode 100644 index 000000000000..675e9d52f3c4 --- /dev/null +++ b/drivers/gpu/drm/panel/panel-novatek-nt36672a.c @@ -0,0 +1,740 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2020 Linaro Ltd + * Author: Sumit Semwal + * + * This driver is for the DSI interface to panels using the NT36672A display driver IC + * from Novatek. + * Currently supported are the Tianma FHD+ panels found in some Xiaomi phones, including + * some variants of the Poco F1 phone. + * + * Panels using the Novatek NT37762A IC should add appropriate configuration per-panel and + * use this driver. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include