From patchwork Wed Mar 18 07:32:53 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4505 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 027C53F0C6 for ; Wed, 18 Mar 2026 08:34:14 +0100 (CET) Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-4853b5b0fafsf80996175e9.3 for ; Wed, 18 Mar 2026 00:34:13 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1773819253; cv=pass; d=google.com; s=arc-20240605; b=WvVL4GmzM3+a6QMOyQ+E0FiZzp68nLmX9tnf2euZm3J8HnKNJ2XOVV5IQ6Y00pnKPA KHFWWo0st/2A8s9datjpqPIflgWfWBO2Sh6JBGIMM6eqx8w2MiIokhlLfM2CpQKA0Nzf OV/7F0Uu94GGs2lTJ71QVpE0y9o6Qr/flhLqcdgPrh2P+hYlBpVko3hzcdPlBNwVhrA4 IM3diZMACEclFpBm1GpGkSirOaS+A7zKASS/+4cA0v4r15DIQlitBLYPvKsN3+Mz8KQj 27Pd4JcqmsmZKfXdAa6MEggbzLAfufbI9GgaOOf9dygLm2H0Jn5iLURqTUesTyZicd9c tDOg== 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=kpwRtPwuSVbxy2K5D64NZ76DHLA/LuaU5WVwXPyQOz0=; fh=aK4zq3XFOmZ92mV5jfwFCodeVAs1VoXD1f/rE1++ZEI=; b=aiLiJSNzDnqePwsEH0ErJKt/RSRcJcLKxS6CeYpgtiGr2Ylxud7phqYZiuchBSHJ0I m+dQmQZV2dmwbD2PpZqw28W91R3C2IXeVFIEEpjs7R1MJOh23/D1GevutMp2YXDqX/+U m1ULNHvCORSyCMDDVKSYlvqwrXDLiCeOdZsFGAaYnqYQgwpd+Y0PWtWkL5DdpWSTCEhY WI7crx9wna8o9pLk3m982waj4PlFFzylgxo3Cv5jkIWvX3ZCnANf81840eXART5RPb7E UL5AThoBIeI4FYfF0Aww44iCjmP8tGwMwRWzkvBBdKmKFTazxpnspp46ekO8jtDbPV2I fMgw==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=Bhm+rbAt; 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=1773819253; x=1774424053; 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=kpwRtPwuSVbxy2K5D64NZ76DHLA/LuaU5WVwXPyQOz0=; b=kXGsSxZeW5B2x7oZSL8k/f80hn+abSViBZkO1bG6Ez3JcP3BHkhEoX5PHDVUSx0zP3 rmfgyxXYvUZtpIlWYkJnRGhCj1Ihv6uvOKDwgDeTTCJmojQ/z+YWdRonavZWsD8IhpsX C0SSDDK3IWjl7pELcDyD4FLJ48UsKS1AFbrtE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773819253; x=1774424053; 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=kpwRtPwuSVbxy2K5D64NZ76DHLA/LuaU5WVwXPyQOz0=; b=kwvuxO8bBS4GIZTw3QWUzbJtmhsxIekCh/q47N4oLlqLyJ01RsBrzog0OT3IL4/VZd fJwb30FJ3o6Irs4WHOd3tmg0vksNcid2N52cISePBegW4Vhl4T0wNo3nu29arkajVYqJ SfhutvZjPOe2Lr4iwhI7HCGfqT7qYpBquaBos5UmYgfDkfHMtF4jSEld5LLcu2HZQjj3 W+mZJhkCDyWIRcbRWz8QiPisEiAS9RMlMWFQDMstP4aTmkaFVEzhxTd1tuH8aCehhnyr 1G7M+LoU1ywjPa4lvTKLDxH5pAjN5w5BkBhkdF2T02ydZOnJGrtT8xf03Z++XDj8L25l AiXA== X-Forwarded-Encrypted: i=2; AJvYcCU0qxO9oVbfP+8Ae3lao+SycdzU/tugJwLHk8UlJFBYNYAGxb5xwyrUKgKdEIlTgfK0dqjZs/VzjPvCnLSF@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0Yzd4/wcVzgw4+jt0HJe/jo8PRbE6g1m3vI7F9LFAJzLQBbBIHtg pQUnDubSrf3CF/3iSW9Nvz4EFRh7LQ1yFeI9TaEglj2Nv5iZj8CYIyxQn26H4JDtFicX3g== X-Received: by 2002:a05:600c:8b45:b0:485:3ff1:d5c3 with SMTP id 5b1f17b1804b1-486f442e5fbmr36748185e9.5.1773819253546; Wed, 18 Mar 2026 00:34:13 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h="AV1CL+FS9SZhoe+hwZhvyvit+MdWkFLNpBy8PevhdYAzIhyX5Q==" Received: by 2002:a05:600c:1913:b0:485:4542:7db2 with SMTP id 5b1f17b1804b1-485558e4324ls40244675e9.1.-pod-prod-02-eu; Wed, 18 Mar 2026 00:34:12 -0700 (PDT) X-Received: by 2002:a05:6000:1841:b0:43b:3c32:d8fb with SMTP id ffacd0b85a97d-43b527c7959mr3396025f8f.44.1773819251603; Wed, 18 Mar 2026 00:34:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773819251; cv=none; d=google.com; s=arc-20240605; b=PRD7inaFYtTXm2IZk5rRXo2HIS3m/FN2Xv4g8oxiPpyz+I62+57ASqpVMJtAqjcnua EZw6Gq32+mLWsNZLYDJ5Zcdfxk39pIrzdv56jfnkTna9l7sfKveSE5wJ7FjRRp/uxDV4 W7Nm+v29+iOLTPlOsRk6Xz80yXjMP4OONMcKbQU9NnCzYj2GC4fLu2hi+JMGm+8DUXuV TYvK4irDmS07t3srgDaIPO+A+ZAkzT3oc9StBSjkYpbVbrewx8vBdKb9AsgTMfco6+3C TzDJN2HrWhE5HTdlzb6xD7v9YdR0INtxGGPtRg1AkVWsLnkpM+B2ZeCS7MzO+RGhwe4B J5MA== 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=3iJZ4A+Z3YuQkOwuMAleN5q9lsTUW1qlL9ybdzQtN3g=; fh=AdINyqa0RrhYjILkNDREXbEInCFvYIP+gW50d4EJsQ0=; b=f+ZJx3lChozWguhxSLRYEha4P5GwMfF++qvlaKY0ZcKBMIXGdW26Ygnyx9JEyQqzxL 65BeInu+dmK4SKmXYxD6qy7NNfyO1cSXWkQnQ2RA/mfAnfGDNPKGdIL4Nz1rKP0MR0HJ ncK4JUNpHU+vZ0eFg3JXdLmibwdd0wTJMaLcVDHCvZcTvlnMO8LD/UjED0C4eGgIKaHa r7fCDrpjDFwOEJMluNpL8PBCKy2xDKwJd4sHTToqzj4M4M8TFD7CClJ+85aN62cL7O+Z XWg8LetA6qAAcsP8+WKI2hLyKKU5ylnauDZ9H+OoQzLVz17C0C5ZxP+5EfpcYqzH3E6c vLHQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=Bhm+rbAt; 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-43b51859844sor411187f8f.4.2026.03.18.00.34.11 for (Google Transport Security); Wed, 18 Mar 2026 00:34:11 -0700 (PDT) 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: ATEYQzyBSk5LmsGjWc/hzu9ScseEUHlVQzcWJIvBlbtXRl0NAK+z2Y6JpZZsmKDrGZ3 YrwqByd1peLSfglwn2ikMIQCnI0hKkC6SZmH75u2LYvAiXxxEG3ptvpO90B2lLGmHsLg8aYyjnk fy6jGtrnzxm+BPApVnboVfKvd9h0CpW0hKCosq1gp5192708ddoOJOl9dH344jDHV77C6PzKJJ5 IO1+qzhgZZWWRd7LLEn+GTpeDV12LEk3hfGlAYBVTor04hof5tVDe5dCDS7D7PODJ5+lgPDOceg GHDyE79chVH3ssVVS0y2jV4RpQrd/czw5OdQ5/dmLYKyPRYeSY0I/7JAiXGT15j/u+YmAmLHH0U 76OK5J/T1DwuJO7wMmKfBrTbHbPNcG0tIW0xC3YZUbNkZZL1V8qgerB9Yf2qrnHrMmB1kc6zO05 9ICFICEo8sLbdSpg8n2B59VCVPYSAsyToB45j2bf8yNiDJXDTqLYjZRZuC0KVcNkrrulE4xKzps WdVySePUaMk9qLr8eWirBdIOY5V+AtuuU6cKg6UQKzy/QGRyEk2ETTqmtIMH3x3UQlVMrZfZdfI X1H5QslefZwzG7ETXrJ3jA== X-Received: by 2002:a7b:cd98:0:b0:485:30d4:6b98 with SMTP id 5b1f17b1804b1-486f443c6f1mr24907585e9.15.1773819251003; Wed, 18 Mar 2026 00:34:11 -0700 (PDT) Received: from dario-ThinkPad-P14s-Gen-5.homenet.telecomitalia.it (host-87-9-97-160.retail.telecomitalia.it. [87.9.97.160]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-486f45f7e96sm25615765e9.0.2026.03.18.00.34.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2026 00:34:10 -0700 (PDT) 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: [PATCH v5 4/4] drm/panel: ilitek-ili9806e: add Rocktech RK050HR345-CT106A SPI panel Date: Wed, 18 Mar 2026 08:32:53 +0100 Message-ID: <20260318073346.18041-5-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260318073346.18041-1-dario.binacchi@amarulasolutions.com> References: <20260318073346.18041-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=Bhm+rbAt; 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: , Add support for the Rocktech RK050HR345-CT106A panel based on the Ilitek ILI9806E controller using the SPI bus. The driver is designed to be easily extensible to support other panels with different initialization sequences and display timings by providing a specific descriptor structure for each model. Signed-off-by: Dario Binacchi --- Changes in v5: - Add Reviewed-by tag of Neil Armstrong for patches: - 1/4 drm/panel: ilitek-ili9806e: rename to specific DSI driver - 2/4 drm/panel: ilitek-ili9806e: split core and DSI logic Changes in v4: - Fix "WARNING: unmet direct dependencies detected for DRM_PANEL_ILITEK_ILI9806E_CORE" reported by kernel test robot Changes in v3: - Add Reviewed-by tag of Rob Herring Changes in v2: - Introduce DRM_PANEL_ILITEK_ILI9806E_CORE hidden kconfig option. - Split core and DSI logic. - Restore vdd-supply as required for both DSI and SPI types in the dt-bindings. - Dop useless settings in case of rocktech,rk050hr345-ct106a in the dt-bindings. MAINTAINERS | 1 + drivers/gpu/drm/panel/Kconfig | 12 + drivers/gpu/drm/panel/Makefile | 1 + .../drm/panel/panel-ilitek-ili9806e-core.c | 31 +- .../gpu/drm/panel/panel-ilitek-ili9806e-spi.c | 323 ++++++++++++++++++ 5 files changed, 355 insertions(+), 13 deletions(-) create mode 100644 drivers/gpu/drm/panel/panel-ilitek-ili9806e-spi.c diff --git a/MAINTAINERS b/MAINTAINERS index fcb91fe8d061..15e88008bd14 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -8027,6 +8027,7 @@ F: drivers/gpu/drm/panel/panel-ilitek-ili9805.c DRM DRIVER FOR ILITEK ILI9806E PANELS M: Michael Walle +M: Dario Binacchi S: Maintained F: drivers/gpu/drm/panel/panel-ilitek-ili9806e-* diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig index 7fc20421cba5..ec12850fc231 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -270,6 +270,18 @@ config DRM_PANEL_ILITEK_ILI9806E_DSI Say Y if you want to enable support for panels based on the Ilitek ILI9806E controller using DSI. +config DRM_PANEL_ILITEK_ILI9806E_SPI + tristate "Ilitek ILI9806E-based RGB SPI panel" + depends on OF + depends on SPI + depends on BACKLIGHT_CLASS_DEVICE + select DRM_MIPI_DBI + select VIDEOMODE_HELPERS + select DRM_PANEL_ILITEK_ILI9806E_CORE + help + Say Y if you want to enable support for panels based on the + Ilitek ILI9806E controller using SPI. + config DRM_PANEL_ILITEK_ILI9881C tristate "Ilitek ILI9881C-based panels" depends on OF diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile index f56dafb36499..948c4a2d58ff 100644 --- a/drivers/gpu/drm/panel/Makefile +++ b/drivers/gpu/drm/panel/Makefile @@ -28,6 +28,7 @@ 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_ILI9806E_SPI) += panel-ilitek-ili9806e-spi.o obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9881C) += panel-ilitek-ili9881c.o obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9882T) += panel-ilitek-ili9882t.o obj-$(CONFIG_DRM_PANEL_INNOLUX_EJ030NA) += panel-innolux-ej030na.o diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9806e-core.c b/drivers/gpu/drm/panel/panel-ilitek-ili9806e-core.c index c088685d9d85..be2cf1440155 100644 --- a/drivers/gpu/drm/panel/panel-ilitek-ili9806e-core.c +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9806e-core.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -20,15 +21,11 @@ struct ili9806e { void *transport; struct drm_panel panel; + unsigned int num_supplies; 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); @@ -44,7 +41,7 @@ int ili9806e_power_on(struct device *dev) gpiod_set_value(ctx->reset_gpio, 1); - ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); + ret = regulator_bulk_enable(ctx->num_supplies, ctx->supplies); if (ret) { dev_err(dev, "regulator bulk enable failed: %d\n", ret); return ret; @@ -65,7 +62,7 @@ int ili9806e_power_off(struct device *dev) gpiod_set_value(ctx->reset_gpio, 1); - ret = regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); + ret = regulator_bulk_disable(ctx->num_supplies, ctx->supplies); if (ret) dev_err(dev, "regulator bulk disable failed: %d\n", ret); @@ -78,7 +75,8 @@ int ili9806e_probe(struct device *dev, void *transport, int connector_type) { struct ili9806e *ctx; - int i, ret; + bool set_prepare_prev_first = false; + int ret; ctx = devm_kzalloc(dev, sizeof(struct ili9806e), GFP_KERNEL); if (!ctx) @@ -87,11 +85,16 @@ int ili9806e_probe(struct device *dev, void *transport, dev_set_drvdata(dev, ctx); ctx->transport = transport; - for (i = 0; i < ARRAY_SIZE(ctx->supplies); i++) - ctx->supplies[i].supply = regulator_names[i]; + ctx->supplies[ctx->num_supplies++].supply = "vdd"; + if (of_device_is_compatible(dev->of_node, + "densitron,dmt028vghmcmi-1d") || + of_device_is_compatible(dev->of_node, + "ortustech,com35h3p70ulc")) { + ctx->supplies[ctx->num_supplies++].supply = "vccio"; + set_prepare_prev_first = true; + } - ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies), - ctx->supplies); + ret = devm_regulator_bulk_get(dev, ctx->num_supplies, ctx->supplies); if (ret) return dev_err_probe(dev, ret, "failed to get regulators\n"); @@ -106,7 +109,9 @@ int ili9806e_probe(struct device *dev, void *transport, if (ret) return dev_err_probe(dev, ret, "Failed to get backlight\n"); - ctx->panel.prepare_prev_first = true; + if (set_prepare_prev_first) + ctx->panel.prepare_prev_first = true; + drm_panel_add(&ctx->panel); return 0; diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9806e-spi.c b/drivers/gpu/drm/panel/panel-ilitek-ili9806e-spi.c new file mode 100644 index 000000000000..9d10b0d28f52 --- /dev/null +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9806e-spi.c @@ -0,0 +1,323 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * SPI interface to the Ilitek ILI9806E panel. + * + * Copyright (c) 2026 Amarula Solutions, Dario Binacchi + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include