From patchwork Thu Feb 26 08:47:01 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4493 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 9229D3F10C for ; Thu, 26 Feb 2026 09:47:23 +0100 (CET) Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-43997e095cdsf312594f8f.3 for ; Thu, 26 Feb 2026 00:47:23 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1772095643; cv=pass; d=google.com; s=arc-20240605; b=PqeOvjGIyk8iU9DGX4UJ78C9hBCz5QrlNXB1D66SFAqnG/ASisLr9Gmz0IJH/iZI90 1oTxcOxUlYMhB/uCdvjzKHKXahpzFrK+SAYDEmQ75HZ2aJUE6gLDNTprHv5LvT3WK/qu rqSwWV7rmjq+DK+CDpDdcQvYhzpz9Vyh4VEw4A1SXGxTMH340aC8lmYHI6xq+dxU1fOj bMJueCEpbgA8H7TTF7Gw3Jb1GvYTRh41HRTQHyiT34LRtuLh+681E5WbXRVZHABe7gUk DLm3k0ddLdnhGoASgJhH9X7XfBhC/w1lONdxK5V7OfImud+wYtTypN6pbe22YdUZmcHo cdIQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=qzkw+GWgbv16sg6e7u5Vy6koz0r9/bakcdtHtVb5IbE=; fh=uxUOVGCmhskqX/0iC3Kds6if1PzQGrNKmN/r60+gIgQ=; b=G8gC5KHVLDOcTERjk/h51j268CSwr4UnMjXT2JeUsU70iTL+xxzphG0ZVagQ+G/A3t kn8y6EpbqI4BlGejsUe/ebccTxrI9GhvbKeJZE28oHJomhH3+jo0Ry4BZEdZYJzbdfHF If2V9j3/ZJiNsMO1rcfJpQZUWBNdTncw0KovOR6mwpwqOAA7wR+iT13PeGZbXOToT1kR LgxnLkHei/wwE4cBeUiRRegPu8HeLH/vHJLd1F8O4W9f13Lt8gSougBf/kCyj7zApHBd bc4o6TxQtt2/CuEAqOo7GPoQAtb61aiH/N4xTAK4yXEBugfrcIh7K/IudI/EouCCdSx/ iTOA==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=qJfpjUkv; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=neutral header.i=@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; t=1772095643; x=1772700443; darn=patchwork.amarulasolutions.com; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=qzkw+GWgbv16sg6e7u5Vy6koz0r9/bakcdtHtVb5IbE=; b=MFPFRcKypjoNyHaDmFAd2YxYhExFRoXPq3eN2ndE3A4Y4o5M60VxkTplXt00HQ+eHO pDcTrXc0c53IN0ieTZpBs7HCSeZe9wdeVCuJW6mUsdJRZWXBxBOkjSCak4DQwgRt+4Fa Zs3/u28u8xdy2cVdVuHEXSDY5hbU0khQ1Gxqg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772095643; x=1772700443; h=list-unsubscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-beenthere:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=qzkw+GWgbv16sg6e7u5Vy6koz0r9/bakcdtHtVb5IbE=; b=UCmdC+B+XEBLe+WrreG/JwaF8bliCsldb8mZ5f+LMSM+e81gQpOLVtisQbHNbOuCV0 VXA2CNaB4N0n7TXQHz2scke8rmMDJz1Ysg383MbqH6Gbw5SDnrZW0luw7gSPDGTWBsYu aMeBgabda3CMlOm4leYJKK6p84kCpA0rfLnuBtnceWZUKdKWhwVOD2FBjYgwyD6mbsGg lJAv10fbGKF+7HXjCWlGl1flqwUL2z36+wxpPlxtUM7PyWgaxdDGr6Dw5C3kIAjgZfUq 9MdVsnVecYaC8fnMSkxs9xkgt15YxQBSF937EefZS778ktG4k1w+L+3wfLf/5/XxZKOZ TcXg== X-Forwarded-Encrypted: i=2; AJvYcCUTO4zIblq5q5wNJ4nMk/kFwmtmXMbYzxwk2cG2nW9j2gS59/tpHBC4T4EeGCfIcOlwiankIKjhPhMRzeW9@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0YxKqG7S4du8zng9xFf8ZY/KXc2jRD0M4gq6P9YZoHOEhcxMn4p3 n6GfECtTpq/wvSrBktm33fC2NUzUyFAqntpklWK9baj7YKREKQZsro5Obk2BgaoP/g69hz580x4 pEw== X-Received: by 2002:a05:6000:2c11:b0:435:9cd5:bb2a with SMTP id ffacd0b85a97d-439942aba61mr6003105f8f.24.1772095642935; Thu, 26 Feb 2026 00:47:22 -0800 (PST) X-BeenThere: linux-amarula@amarulasolutions.com; h="AV1CL+E9tVBrdO0WgqGbAcgyxwfQ41PHDzZMNe6nbd4rZIeCIg==" Received: by 2002:a5d:5f45:0:b0:426:cb20:6c35 with SMTP id ffacd0b85a97d-43990182190ls1000924f8f.0.-pod-prod-06-eu; Thu, 26 Feb 2026 00:47:21 -0800 (PST) X-Received: by 2002:a05:6000:290b:b0:436:8f7e:a479 with SMTP id ffacd0b85a97d-439942abb7bmr6249907f8f.17.1772095640606; Thu, 26 Feb 2026 00:47:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772095640; cv=none; d=google.com; s=arc-20240605; b=AZ0LurO4LBTWQyyRPUt9MBeboIhNaEaabwU9hfme6lbE8OBlMKTlUZw/CWjr9QDhLQ ixg//6svGIe/bGi/RdXhHNYC6sz4GHwiDGuKCW2/1yn3r46Jv1OJHRrtBHrLQ7OL2Rh0 oLiboma2Qi2EVIxGW+jmhbVAM1wUK05QVCEdhpKcK5dIwke12Z96UUefGLQAgXs6RjlC HIpOjGl8DQ4Kz9QBUJ9Gx/SB8WugoBiht3/EZHgLxB/+4/9TgRXzJXO0OzscYbIzm6aN 05ZlyZe7ykuWEmtmUlI6l9hXNGJ2xQIuW2HaCRxcFLbnj5VA8P4BAhKEN1ldnfsUz+ul /Y2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=7Gz2hLRf9thY7Y4IL7mf20V5pomIiOvMEviOrABeY6U=; fh=AdINyqa0RrhYjILkNDREXbEInCFvYIP+gW50d4EJsQ0=; b=Yo35ni1VCeKWQP95TfAdRTBpECNPs7503qoHW5r1uF3uzMexvhxJiAWuUcY8CFbqG5 PzkspjdzNxD7JnIIRbX0bst4bpmIgwEVMlXJsqjsOtW+NgYH2s5T6N1snAQ7ieL2nt7v VO9RhJk6/LYJTljzWHtPkpD2GkVvuh+AJaSnm97HvL3g4z/zmfHittajoQqG15llOCX5 Gw4/5xJGeXF5E3J/j5E89oL+17/zrn5yskiOy7Ax8sKk/8O5l+AP48QKr/dCFVO7i6Hw QkFr97iPsLP0igS6cUabblELAyXlMkiJ+H+1xJlArKjWM/oaQdh41+gQx/SXVmzUJmVe ycpA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=qJfpjUkv; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=neutral header.i=@amarulasolutions.com Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id ffacd0b85a97d-43970d643f6sor2380296f8f.13.2026.02.26.00.47.20 for (Google Transport Security); Thu, 26 Feb 2026 00:47:20 -0800 (PST) Received-SPF: pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; X-Gm-Gg: ATEYQzy1Y+dwrsD7gQ6qT9OL4qlDMe6ms202s3XNxSJWsUVPwJb1vif7Qr65ehNfhoX 3EhYjU/6bjZ2HMQ8boLaRpMpTAcVuk4dGAF2+GCr/0qQndZG+hK/GO7G6KznhF82cNmGYmSdlCj Fq7IAFjgSJ+gh8zLeQx0UYgqTSeGu5gZM2pmmWYEvqjxlTfHHnVqugXER9oyx8vNc43FfL2ALkv L0qkEqtlAf/lqQkv1FLzrLvWQzCXmWlRbB1NIPz/h9kdEHF+B44cX8iqrm1lPQ85QlYuKn5bLS6 47tObyoNiEsYYL5xESMvymTJH9zAmZ+8pcWGeBBT0M9x24yZs4NL/8LFL9XQq8KVqnUCAlkWNVr IClwCYEMQUg3fDhjt7wnEOdNevsFdOMg2Gj674M4cadHywzC+luUoPeaUA4x+Gk/d7GkQg+g3Lm IplIB/f/0VhUvQxLBSnqDn2EfKPtadc/XvSpmIbyZDjoAq1l4ATvEX/HQxKCENSpLDqrQDHn68A CIBvFrFrdD28VJLkKStUyocqcuE90rw9PJgSsc8MvVa7SuVnQzGjyJuUbTwx3bbxrSjaww1tI5W PGld93KyIguvkyZrae3HJHJ6 X-Received: by 2002:a05:600c:1381:b0:483:7783:5373 with SMTP id 5b1f17b1804b1-483c21a5835mr56480305e9.23.1772095640070; Thu, 26 Feb 2026 00:47:20 -0800 (PST) Received: from dario-ThinkPad-P14s-Gen-5.homenet.telecomitalia.it (host-95-248-31-95.retail.telecomitalia.it. [95.248.31.95]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483bfb85c58sm31581075e9.9.2026.02.26.00.47.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Feb 2026 00:47:19 -0800 (PST) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: linux-amarula@amarulasolutions.com, Dario Binacchi , David Airlie , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Michael Walle , Neil Armstrong , Simona Vetter , Thomas Zimmermann , dri-devel@lists.freedesktop.org Subject: [RESEND PATCH v4 2/4] drm/panel: ilitek-ili9806e: split core and DSI logic Date: Thu, 26 Feb 2026 09:47:01 +0100 Message-ID: <20260226084713.2566672-3-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260226084713.2566672-1-dario.binacchi@amarulasolutions.com> References: <20260226084713.2566672-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 X-Original-Sender: dario.binacchi@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=qJfpjUkv; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=neutral header.i=@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , Split the driver to support multiple transport buses. The core logic (power, GPIO, backlight) is moved to a dedicated core module, while DSI-specific code is restricted to the DSI module. Introduce DRM_PANEL_ILITEK_ILI9806E_CORE as a hidden Kconfig symbol selected by the bus-specific configuration. Signed-off-by: Dario Binacchi --- Changes in v4: - Fix "WARNING: unmet direct dependencies detected for DRM_PANEL_ILITEK_ILI9806E_CORE" reported by kernel test robot MAINTAINERS | 2 +- drivers/gpu/drm/panel/Kconfig | 4 + drivers/gpu/drm/panel/Makefile | 1 + .../drm/panel/panel-ilitek-ili9806e-core.c | 129 +++++++++++++++ .../drm/panel/panel-ilitek-ili9806e-core.h | 15 ++ .../gpu/drm/panel/panel-ilitek-ili9806e-dsi.c | 151 +++++------------- 6 files changed, 193 insertions(+), 109 deletions(-) create mode 100644 drivers/gpu/drm/panel/panel-ilitek-ili9806e-core.c create mode 100644 drivers/gpu/drm/panel/panel-ilitek-ili9806e-core.h diff --git a/MAINTAINERS b/MAINTAINERS index 8bd673456cda..46bd910ba2c4 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -8032,7 +8032,7 @@ F: drivers/gpu/drm/panel/panel-ilitek-ili9805.c DRM DRIVER FOR ILITEK ILI9806E PANELS M: Michael Walle S: Maintained -F: drivers/gpu/drm/panel/panel-ilitek-ili9806e-dsi.c +F: drivers/gpu/drm/panel/panel-ilitek-ili9806e-* DRM DRIVER FOR JADARD JD9365DA-H3 MIPI-DSI LCD PANELS M: Jagan Teki diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig index 142f32a1d256..7fc20421cba5 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -257,11 +257,15 @@ config DRM_PANEL_ILITEK_ILI9805 Say Y if you want to enable support for panels based on the Ilitek ILI9805 controller. +config DRM_PANEL_ILITEK_ILI9806E_CORE + tristate + config DRM_PANEL_ILITEK_ILI9806E_DSI tristate "Ilitek ILI9806E-based DSI panels" depends on OF depends on DRM_MIPI_DSI depends on BACKLIGHT_CLASS_DEVICE + select DRM_PANEL_ILITEK_ILI9806E_CORE help Say Y if you want to enable support for panels based on the Ilitek ILI9806E controller using DSI. diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile index 2ceeec7e2110..f56dafb36499 100644 --- a/drivers/gpu/drm/panel/Makefile +++ b/drivers/gpu/drm/panel/Makefile @@ -26,6 +26,7 @@ obj-$(CONFIG_DRM_PANEL_HYDIS_HV101HD1) += panel-hydis-hv101hd1.o obj-$(CONFIG_DRM_PANEL_ILITEK_IL9322) += panel-ilitek-ili9322.o obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9341) += panel-ilitek-ili9341.o obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9805) += panel-ilitek-ili9805.o +obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9806E_CORE) += panel-ilitek-ili9806e-core.o obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9806E_DSI) += panel-ilitek-ili9806e-dsi.o obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9881C) += panel-ilitek-ili9881c.o obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9882T) += panel-ilitek-ili9882t.o diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9806e-core.c b/drivers/gpu/drm/panel/panel-ilitek-ili9806e-core.c new file mode 100644 index 000000000000..c088685d9d85 --- /dev/null +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9806e-core.c @@ -0,0 +1,129 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Ilitek ILI9806E core driver. + * + * Copyright (c) 2026 Amarula Solutions, Dario Binacchi + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include "panel-ilitek-ili9806e-core.h" + +struct ili9806e { + void *transport; + struct drm_panel panel; + + struct regulator_bulk_data supplies[2]; + struct gpio_desc *reset_gpio; +}; + +static const char * const regulator_names[] = { + "vdd", + "vccio", +}; + +void *ili9806e_get_transport(struct drm_panel *panel) +{ + struct ili9806e *ctx = container_of(panel, struct ili9806e, panel); + + return ctx->transport; +} +EXPORT_SYMBOL_GPL(ili9806e_get_transport); + +int ili9806e_power_on(struct device *dev) +{ + struct ili9806e *ctx = dev_get_drvdata(dev); + int ret; + + gpiod_set_value(ctx->reset_gpio, 1); + + ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); + if (ret) { + dev_err(dev, "regulator bulk enable failed: %d\n", ret); + return ret; + } + + usleep_range(10000, 20000); + gpiod_set_value(ctx->reset_gpio, 0); + usleep_range(10000, 20000); + + return 0; +} +EXPORT_SYMBOL_GPL(ili9806e_power_on); + +int ili9806e_power_off(struct device *dev) +{ + struct ili9806e *ctx = dev_get_drvdata(dev); + int ret; + + gpiod_set_value(ctx->reset_gpio, 1); + + ret = regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); + if (ret) + dev_err(dev, "regulator bulk disable failed: %d\n", ret); + + return ret; +} +EXPORT_SYMBOL_GPL(ili9806e_power_off); + +int ili9806e_probe(struct device *dev, void *transport, + const struct drm_panel_funcs *funcs, + int connector_type) +{ + struct ili9806e *ctx; + int i, ret; + + ctx = devm_kzalloc(dev, sizeof(struct ili9806e), GFP_KERNEL); + if (!ctx) + return -ENOMEM; + + dev_set_drvdata(dev, ctx); + ctx->transport = transport; + + for (i = 0; i < ARRAY_SIZE(ctx->supplies); i++) + ctx->supplies[i].supply = regulator_names[i]; + + ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies), + ctx->supplies); + if (ret) + return dev_err_probe(dev, ret, "failed to get regulators\n"); + + ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); + if (IS_ERR(ctx->reset_gpio)) + return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio), + "Failed to get reset-gpios\n"); + + drm_panel_init(&ctx->panel, dev, funcs, connector_type); + + ret = drm_panel_of_backlight(&ctx->panel); + if (ret) + return dev_err_probe(dev, ret, "Failed to get backlight\n"); + + ctx->panel.prepare_prev_first = true; + drm_panel_add(&ctx->panel); + + return 0; + +} +EXPORT_SYMBOL_GPL(ili9806e_probe); + +void ili9806e_remove(struct device *dev) +{ + struct ili9806e *ctx = dev_get_drvdata(dev); + + drm_panel_remove(&ctx->panel); +} +EXPORT_SYMBOL_GPL(ili9806e_remove); + +MODULE_AUTHOR("Dario Binacchi "); +MODULE_AUTHOR("Gunnar Dibbern "); +MODULE_AUTHOR("Michael Walle "); +MODULE_DESCRIPTION("Ilitek ILI9806E Controller Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9806e-core.h b/drivers/gpu/drm/panel/panel-ilitek-ili9806e-core.h new file mode 100644 index 000000000000..dddece62cf42 --- /dev/null +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9806e-core.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef _PANEL_ILITEK_ILI9806E_CORE_H +#define _PANEL_ILITEK_ILI9806E_CORE_H + +void *ili9806e_get_transport(struct drm_panel *panel); +int ili9806e_power_off(struct device *dev); +int ili9806e_power_on(struct device *dev); + +int ili9806e_probe(struct device *dev, void *transport, + const struct drm_panel_funcs *funcs, + int connector_type); +void ili9806e_remove(struct device *dev); + +#endif /* _PANEL_ILITEK_ILI9806E_CORE_H */ diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9806e-dsi.c b/drivers/gpu/drm/panel/panel-ilitek-ili9806e-dsi.c index c337c4f1a1c7..ecdbed8d4a3a 100644 --- a/drivers/gpu/drm/panel/panel-ilitek-ili9806e-dsi.c +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9806e-dsi.c @@ -1,15 +1,12 @@ // SPDX-License-Identifier: GPL-2.0 -#include #include #include #include -#include #include #include #include #include -#include #include #include @@ -18,7 +15,9 @@ #include