From patchwork Wed Feb 4 17:31:20 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4461 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 6C7BB3F09C for ; Wed, 4 Feb 2026 18:32:11 +0100 (CET) Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-48057c39931sf627465e9.0 for ; Wed, 04 Feb 2026 09:32:11 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1770226331; cv=pass; d=google.com; s=arc-20240605; b=fX5bqIoE2INH7jq6LKCa2QN9zFn6EN+cZ6YyFd/h1h9pMdbkFfwEA/nzNlPoNO20og 1EPyHPef4SfA+bKTt7knBQDzBWSULK861V3POa35q3mNrRWc9/DnbMl1HB3It+ftPJAY jOeHuAyuD/xUKRGw8zwHq8y8+L1u2Q+j03GTBtdpRsiDF00DcddF/6xAYHOMjxTOpNjC AMPAaWpeHQ1pBLu9cYPk9IoikP7J9hTSMHCx/+5uVY+FYEJbIUlCIIb17n9qvlbCeeuu DTKqPNFAQ3OIY6G7Ft3x+n4C/aKNoCi1j9lju7Y8bgWsVaN4Vj3NhXR2xt4kBUjr4nlW H9fA== 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=OQKaSucZ4mVXmB/smuHCL2szc1djqyYso8fRFgsTAGQ=; fh=c5RuTc44KlV3y2FaK88nYsgYzIYRpoEu2o1M41lXYS8=; b=KelRuQseQdWCNVO1qSmyA2Zy23ODZ8ZJKUIxMuQjwjOaovPkHA8EVbOyWdYk6SxRPC EIHGnJrYarx7dTeoZo12Syfan9TzT2bJY1vS62y0r29V9RHO6vf7/ui3dxg2YyEQsvPt td+li1+vGKHoKpuY7NT66FeE4xFvUKhfmcIu0idiBy1y/AjIKm43niMo5qg11RtgYLKn utYJojNKo5sJrvzTuOCFN7Yr9KkDrbPVa52Ipxp4+yfz1N3mkpe3nVLMgIaxuGqlZMLA u/YHcZHWmkoGreU7E/Emq6fj0J06son2i/8D5uVt4cPTaGjzO/py3d2nyNL7exSrOnzM F2Wg==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b="BLZ8A/VT"; 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=1770226331; x=1770831131; 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=OQKaSucZ4mVXmB/smuHCL2szc1djqyYso8fRFgsTAGQ=; b=LU4fB33zsa2EyG9yslcmCXmhbe0twbTTd1bKjXvDD+j9XZBx7+vyhA6iCyUoVAiU3G m6hL7dOuuyzr8OxAyjA9RwzHlERe53TN1vibn3RozdJapSEiv/ufldytkyY2rJIXviIV u4EypKT7qbnpVkyiRyOnwycUSGUnIbox58zsU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770226331; x=1770831131; 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=OQKaSucZ4mVXmB/smuHCL2szc1djqyYso8fRFgsTAGQ=; b=bP1hxlAhA0ZaHLTki7xXKm/IluaA6nPvSGGY26MjBCJDq1WAqKDSggolg6eN2HlTNC JK2AWFq7xhxL0pPC8eeoSDKfuIZoCaGMWL+Cf780ro2lb+65pJruDHhUjPmX6z3rfFdi fclNt5ACdO3jOR9Y+F2doVt5unvLR6BZB4ErRxPvw1y0olQFB85/hX51CeUo0rW5D8/4 pLDHeKYFBHpYvHATNSspstKAaZ4jZ13VRWhEtriRO7JvrI5xuzMRi046hK96t2z+hT4x rffpUaEpTrCDf3pQM90A0BEVNOaWzWn5xZSV8jVN4gWHn/6b/PtUF7Prf91UfwKsAZCZ koqQ== X-Forwarded-Encrypted: i=2; AJvYcCXHzSHi7aQFi+jZmCZYYl+2HLHSVRtWqSVzj7KX6ElffYMlzP9OyZXwt2/K73kDeX2loxku+fCQcMba0Ueo@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0YzT+YvZUwwY3xqHCXfu/HEHCmk2XEwcE83WqgWx/G9dM2pDvOXd SQ5Uf6jdM3qDX4Rud1id45fKT6piCVMnBnwXEY+U4FmkrU9GHU2VKCUEZi1QwGX1PnAg1g== X-Received: by 2002:a05:600c:1daa:b0:47a:9560:5944 with SMTP id 5b1f17b1804b1-4830e98ad5fmr52256145e9.34.1770226330970; Wed, 04 Feb 2026 09:32:10 -0800 (PST) X-BeenThere: linux-amarula@amarulasolutions.com; h="AV1CL+F1k0VJC09+SB3hqE5yBsNaMz8BFIg4ibxqbl8ZX1zn7g==" Received: by 2002:a05:600c:1c01:b0:477:a252:a832 with SMTP id 5b1f17b1804b1-48317597de5ls570525e9.1.-pod-prod-05-eu; Wed, 04 Feb 2026 09:32:09 -0800 (PST) X-Received: by 2002:a05:600c:6290:b0:483:aa2:6bce with SMTP id 5b1f17b1804b1-4830e98629bmr50215055e9.30.1770226328784; Wed, 04 Feb 2026 09:32:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770226328; cv=none; d=google.com; s=arc-20240605; b=WJfj2zmmAzpdKFK3cGJpSp5ep+o364aFxC+eho1UL81ao+QrhH59gpVaLP8UeuS9Ft gPWzzYHxtABlwZZc099Evw/kJAJlxiDMP08eESaUxUpyQ3kB4AzdfBZ7Aio/8KUUub5E UhMTv4QCLyVUqsyI382h03T1vdka107txZSabTJ3plANaQR0U6goNCqhH0tGI451f9ik 6yxtEi9D88ravqJs0B+qcoGYhLM9+CIROpb61U7vryzxQR/yWlYSiCnbKzZCNnQlK6H3 S83ILyZE7+qz1lvCGc5MWELX/cVVv5NPamHDnyTfH/Esi5YHcnqSHoEZKXOjhRgqRm3u RbnA== 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=56cCjkyiFGGSWDGk4AV1x6YlDxOaWx0uym+YCUTB630=; fh=AdINyqa0RrhYjILkNDREXbEInCFvYIP+gW50d4EJsQ0=; b=XjNSr415Bj/dTMmrSAKI8a35SHn60omR1ubQEytrerZblasErVinsVYgHAZYuUDhq7 9y3XVcTSFFiLBuexE/A8fHfqBwOR++LryAovvE7Bx6ERzCGt7UdQdL3TPP+eZw4M+Bo8 mtleQl/vcoCcuZOqUITcZOGr7EnWv5WHfY9rn04YQa//2c+cniMGyg993rUiEw95uuY4 dMhizwemFgPFZRKRdfPvPx6IrSgOwmT4j8v3wh6et0VLk7v1HcIBe5NIyZ2mGFPv4Y+o igLVQlU7oAXzqD5AUwgoCiL+MvIoj+tAoIlJjYMaZZ5R74fWFZR4k0YRKKh9cEyi4Ac1 FSNQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b="BLZ8A/VT"; 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 5b1f17b1804b1-4830eb35358sor3775785e9.16.2026.02.04.09.32.08 for (Google Transport Security); Wed, 04 Feb 2026 09:32:08 -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: AZuq6aK9JbTneTqJFTfUU0oxaEkLQKNSTmgb44o6jgfjLzAnLObEACs7t9w7SY6ErUI I4ONLx3Br5VYImyH+/Zr+KSwQZ8NnIPZTP/e0vmSkbFM88V3l6PYapiIrbbf2m7BNgbS/ukgEW5 cl5mxtfStI7jT7be1SQmGMeH3CR7K8+XYzK07yj1snjTuekEi4jW3b0zIK/4Wg4gd8Cs63ogBPl d0An2ttiwuLPpYn9HXd14aUjZlJyNzv8G6e9owGL8N9adi6eK4j0dNQYo8Z+eG9exhAV0d/I4U6 QgmA2CClum+1C/AKfT7dG1saz9iP/S65gPJb6RjaHjlfKpjAiXjvsph7BPawudGM9QjLGOKBazw TfoElszwbHDPsYNqiaN0skZoFbmQvoCo2JTQhQ6fKiEIYO5WK8dAXvQvBRk5LrcQTbsIBnipaiK OZo8siqYqMgdtV8Cb+jkfeKIByLBMX2yBtphuzIt1zgp6zk27kkUudm53BS+bGjAyCjyARB0q5A DEdlMkfQEoHRL+QcAJLb9SrFkHkVLO3/w== X-Received: by 2002:a05:600c:1d99:b0:47d:264e:b35a with SMTP id 5b1f17b1804b1-4830e9344dcmr55725005e9.13.1770226328241; Wed, 04 Feb 2026 09:32:08 -0800 (PST) Received: from dario-ThinkPad-P14s-Gen-5.amarulasolutions.com ([2.196.42.58]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-436180640f2sm7241565f8f.39.2026.02.04.09.32.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Feb 2026 09:32:07 -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 v4 4/4] drm/panel: ilitek-ili9806e: add Rocktech RK050HR345-CT106A SPI panel Date: Wed, 4 Feb 2026 18:31:20 +0100 Message-ID: <20260204173154.337674-5-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260204173154.337674-1-dario.binacchi@amarulasolutions.com> References: <20260204173154.337674-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="BLZ8A/VT"; 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 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 1daf45133c39..d43551c908f3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7916,6 +7916,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 cbfee8abba0c..a76e64b34c06 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 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