From patchwork Wed Jan 14 16:16:19 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4434 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-ej1-f70.google.com (mail-ej1-f70.google.com [209.85.218.70]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id B8A803F987 for ; Wed, 14 Jan 2026 17:16:49 +0100 (CET) Received: by mail-ej1-f70.google.com with SMTP id a640c23a62f3a-b831e10ba03sf2221166b.1 for ; Wed, 14 Jan 2026 08:16:49 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1768407409; cv=pass; d=google.com; s=arc-20240605; b=jaofZjSLsvi517xAKa2C2BzQGA4jvfSOK0TgAh1M5oHxAfwv9DIf6ee6LDcuOC6K7r +4wnO6R6Cr/UAR8fL9Qt1J2Uj9hFud9EAxf1PyhYyzwh/xMgb5GLHloULmNREktMMiSF g3bxi9FSWiwggMUewXJ8q2cl0qJ0x5onRUb24HtMI0VQQEIi0VOUEdOrkQQ0dRuNXf+4 IZjfLfeZ7eunlhlNifyw8I2tsNIk7yv7AiAKm9X5/M3fshDh9SJAOevEZGPJu839G39l dDZOO20OjmVS7wn8NwV8u4yVujqx5ko93KFFt4AccDT+oEbnC5AnXx+fOij0i1eAHADL 4Ebg== 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=xemUaTS3L1rnl6n0hsuKm2/Ga0ReATSZtMkbzxJxjTs=; fh=X0eDxP35xJXKOZlYN7DvnmcUpN8PbIjaKtBAktEEaok=; b=LQH6iqgq/qOHdD3nNdEyHDMyKm1ZQWja58Q8rhXxtgpiq3as4AdHRoWjVjwlonpr0o p7sgBUKwonRTxcx2m8bku+f25ktAi+nAAutPmf4YdjXMmiGaKCln7qOvs1mOaAUS14WO R2WqtyXUkQ3MrRPvCzNNw+bVVr0yQ/G9lfQ9sSDFSvx7NcgsyAw0FRNBXEh3U2VAl06u 6zaeA9n5aUto6UzsR+6cX8mdp1KheesCtDIEvaF4SQPlWXJuVJEFjOjRox4lrls9JV5J bZ98XKnaer7cA6XlAZ2TXlY0G/KQNzx4vm7BOwiVyX5WFYaEvs+UK6uFtzmWIbk5iKiU XqOQ==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=famd0CqV; 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=1768407409; x=1769012209; 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=xemUaTS3L1rnl6n0hsuKm2/Ga0ReATSZtMkbzxJxjTs=; b=nMaC0EDmA5G5mOQg5b8wZndE9Pnctingz9Ms+kqArWW1ilt6MMei/LGFJl63hHxdoO FQmdRWHGg0QZAtC3qzsoXUNyJYkklPnoKtCRT+r0/BA5Rpr/Jy+fvlCRDwbJXMpCyYc6 jlp++F23aRLO3cfMjMlBvSMiQHxh5bmGkemTA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768407409; x=1769012209; 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=xemUaTS3L1rnl6n0hsuKm2/Ga0ReATSZtMkbzxJxjTs=; b=olE4fuSCv3qa9bY9B2/jaeqGz3gpsPkzX03R5hQ8inNU4v2BYqtzQHiSLZqAJdb4Qp w4N9qxCIJ+DR6OpNEAc1+mIEUKY0g8fRQ/1YTIiTQXrqs46+NpoJwFRaVPXpwBMAAYao wtcBrbmHMeBJ/tXwjPOju+z4Gkre2/a3tEF9R6dC5ag1aALx5W9YEgv/o9kbdBnorlu3 Nzz78cxbmPpxxcBWj39fekMxegxYIbH+MyraRZgpphlGDKQgGxsJtcIxBtxgLWjNmImj Jiq+YLVANYam3kVjKwfpbZijG8Qm8xKFiF/kmbHcVK00Zlg+z/e1hmbIOdqt50qEiYHn 098g== X-Forwarded-Encrypted: i=2; AJvYcCXPazolIca0pQo9J2+cHKitdurPQZu/eiBAovuPWsDBXWtUOxG6rUzWYum6pyj6ycypHiP7/FRp25QmYXcE@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0YyjmeyoXV5NjRDdNcGB1BAoQcZHzqSnZ8LKQBAeTTewjWf48TPg RwhIlqP66FJpHMLjlsV85S1yrATUvtYf5UXEUsLNgHA7l9a/kWEWG03GAZ+Ui8s4SluwzQ== X-Received: by 2002:a05:6402:2547:b0:653:af6c:12c4 with SMTP id 4fb4d7f45d1cf-653ee146faamr2293821a12.6.1768407409300; Wed, 14 Jan 2026 08:16:49 -0800 (PST) X-BeenThere: linux-amarula@amarulasolutions.com; h="AV1CL+H7MkKLWilfaGMb91RDftJ93OfA0iMlZAeikW8BBMoIHw==" Received: by 2002:a05:6402:20c4:10b0:647:a4b1:7993 with SMTP id 4fb4d7f45d1cf-650748c8f82ls3914792a12.1.-pod-prod-03-eu; Wed, 14 Jan 2026 08:16:47 -0800 (PST) X-Received: by 2002:a17:907:d16:b0:b86:f558:ecaa with SMTP id a640c23a62f3a-b87676caa70mr230892466b.27.1768407407337; Wed, 14 Jan 2026 08:16:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1768407407; cv=none; d=google.com; s=arc-20240605; b=L9jJbIra2IXX8grTvmQ394kHUpvaEe26kWcmEHS7Q6mle6+y172iENvRoowXFrN0k3 an5bjs/xuvtHfRry80uLVMNA6HFz+xhOOzajLCYIsh7PoxX3PwejMY+2nrg5XMKx40nw ZHfdp9lzVzbQueNDEwckPyU29MAeUEi+6d1VY5pWvhGZfCgl0xUKMm2LqLkdrRZyAO5o I0mK54zimGo9QIpp7Yru0S1LJj0zMEllcWS5P3fgfU7FFt9EyvuaHyUbZZvpZDIf3QKd H7Te4ZLkdebEBbo7kxpLr4pJoHZ+fF+Rq+Dc6glwtYiiydhsVEpsa+ArKmM6jahc4vNj PTMQ== 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=OwbdqD4esV5rFpOMyfingdbEhuuUPk8cb1Cjg4dlWpk=; fh=AdINyqa0RrhYjILkNDREXbEInCFvYIP+gW50d4EJsQ0=; b=bsZbWe4ueJLR5UjbzMLcYr5Fa5zK9ta9EaVHh6KXrIOa4wcnn9gpcahmFSKVVUg4iF or+OyYrkAGNBSNWD8BrNpvkl2NNdkbUxB6Myl8NLqWKPB1o3eHYvPhaFj/gyTE1rY6qW AMt5xfFQ6SJyziWOlNGQd1dB3+2w6u0DDm21DsWY2Pp0bhj6Xpgq9l68CWprVSGHHLfR cV8dsIVjJUQxPEjdj3GQz9i0cJqOYiOpdu6KZ2Hn8T9cYJ+G3/P7PLcBiYPqF7+j0Gv6 Og5g8C+ojYYRP462m66T1eg4Ci6a63Ctk4HdPvNczy5mjt+LOSlMN7efGxXlSpDYe4jR ifQg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=famd0CqV; 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 a640c23a62f3a-b8764fb16c0sor60924166b.24.2026.01.14.08.16.47 for (Google Transport Security); Wed, 14 Jan 2026 08:16:47 -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: AY/fxX51f+sduyejFk8S1fOfbT639uLPx74tr+/uZe6vJ3MoIC4K+9fJF0bY2RCzFQS nc8xm7WKMN3CS7mvSesk71PVVL+q8GaQWB9OWL3DRg49FQcRbmiLVv1svArKLk1ABC6+7LShgB9 oYMs/yy+SVOMhi+GWJ5RJh1Xlia+dHrLTnYV0qb7drclIkFSW+xObNq7MOl55sYXCXMbhGoLx/U 4JBrNnbVMMZwvpeyj9RxtQBT2dMGTV7JnzKzqlgqwywAZqxc6XthG6/mNNPH+eJWCVMjIKVrke3 6vWMm3i71hQq+wqOKkQ8qmRh3YRFfXS0dqb6kB4MCVGz8XFpFp78k0F6xpNjGTDYQt/aG81pPFz nSeyfgOpMI/tNj5yp+SyviAWzHjAlbNU50iblZTjgLuMHo4ptS9JgdB3THtC0NF7UDdN7/ccXya h63cRXtigH08Zl9ISLzxjDLgfmZbY20lToraD7hWkppC5BqiQc/8ctIQZNr8H4UFga4OSJJJhQR gRji/tOlJFwt9XMOwiuChV6NV0srBvjLUuIELGHZB3EkBBgOxp74A1hmGPMARMxs2+zdA== X-Received: by 2002:a17:907:97cc:b0:b79:fe73:3b18 with SMTP id a640c23a62f3a-b87676a0ec8mr194194266b.22.1768407406765; Wed, 14 Jan 2026 08:16:46 -0800 (PST) Received: from dario-ThinkPad-P14s-Gen-5.amarulasolutions.com (93-47-52-235.ip111.fastwebnet.it. [93.47.52.235]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b876dd0e9ffsm152281566b.37.2026.01.14.08.16.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Jan 2026 08:16:46 -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: [PATCH v2 4/4] drm/panel: ilitek-ili9806e: add Rocktech RK050HR345-CT106A SPI panel Date: Wed, 14 Jan 2026 17:16:19 +0100 Message-ID: <20260114161636.1076706-5-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260114161636.1076706-1-dario.binacchi@amarulasolutions.com> References: <20260114161636.1076706-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=famd0CqV; 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 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 | 10 + 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, 353 insertions(+), 13 deletions(-) create mode 100644 drivers/gpu/drm/panel/panel-ilitek-ili9806e-spi.c diff --git a/MAINTAINERS b/MAINTAINERS index 67117d8cf483..5d2000f10643 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7912,6 +7912,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 333e981eda96..d1cb04e838c5 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -270,6 +270,16 @@ 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 SPI + select DRM_PANEL_ILITEK_ILI9806E_CORE + select DRM_MIPI_DBI + select VIDEOMODE_HELPERS + 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 13034cadb8d8..3697687651fe 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