From nobody Wed Jun 17 06:27:22 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7B5243328FD for ; Mon, 27 Apr 2026 15:22:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777303353; cv=none; b=hmdOjD0hGudTedZPtADfArCCtfL2cPMGgVqLxpjVavZnVreYwkPShC5cHHL2vmMbafYmqJ/ueRyUzSVwZTt65IdXWqnw+c+dZw2+Yc7X+MWzwqbu74cIX86FPoKY0PBfwCIzUVOLCBqLUU+jjs8uFFjZHNr5nkMwpKJiZkPMJn4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777303353; c=relaxed/simple; bh=nufcdi2qkof5Ww/gaEmoLUgX8VGg/jPNZzUufn8zrLM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=o5zeYe81s81P1HYU0G11CALpNbpUdcFIxTAQAesOTZ/wPeCGzJ/Wx+LWPHvwkQWHO+QaDdtQ6+NNmGwc69cu/fqfPxub4jBbhNd39KBmK1RJND5G5YgmSRjGwymTYvLDQ2s7Pe9dEdL4YJXE+HCwjPus7WO/fm3Hxs6mJSt8ego= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=imd-tec.com; spf=pass smtp.mailfrom=imd-tec.com; dkim=pass (2048-bit key) header.d=imd-tec.com header.i=@imd-tec.com header.b=FIXrUM3S; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=imd-tec.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=imd-tec.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=imd-tec.com header.i=@imd-tec.com header.b="FIXrUM3S" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4891cd41959so86957675e9.3 for ; Mon, 27 Apr 2026 08:22:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=imd-tec.com; s=google; t=1777303350; x=1777908150; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=kxIlr02u0245SQX0aOke1TpITzvCVNhVlaMNlcxWD0s=; b=FIXrUM3SkvLJUlRdLRDFtKLwAAjt3YQ+GkTqCQBoQ/QWWH3fVspeIvpNqeEND2x77E 8MozIRxpOY8wsBdvNrVDxDqgTtBwWDPg7g6Yz7bk/LfysFuLbruZAi2G5OoC6optn0qD 4heIHGc/qyIb90OlG+4kQ4WoKB/uFDD4UIMAf5N5mJTLraaeOVkrZV65fWlHpscDmecZ xmNx042RHmdPPmBeOCywB1i9i5kf+BvKnMGpzf8pDXuahkznmQ4fG4WmFhJAp0rIa1Zm RRqvAnz7Cm27PCOeYmVEcpAx0C5CrJSxboUeGkdsOenjYHllHErgaWBhOitFbfrECCOE MZ+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777303350; x=1777908150; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=kxIlr02u0245SQX0aOke1TpITzvCVNhVlaMNlcxWD0s=; b=V1Nlk67QMN8LiriTRat6svhVxutyLq2KcSsdz3KKgb9plvU50Zt27cSQoaciUzK9WM XtXUtAthEfBe3VkEsdfYNXHOOgjgN/XoYwjlonF4ASBPnDZOkx0kabe/VHypElmelNm0 QGEL4XE+/N5lHJcPMNN3ns3rabTLaCBfakR5/wZlsLphk8sYkcJ7EtJ7AR8E2n1N+WSU 0OdL/2gvuoik3jtAnaMPkI4jKoeSqUh5mwGRWtZdvX2CFiSsdJ12n96xyPu2wZtvNu/h f32kRagydwSmVIalB9YFRVB/K1SimaKRYJMcaaM84dSnSCBMJi+epGxVXqbalE9AA+ib OBhw== X-Forwarded-Encrypted: i=1; AFNElJ93dZF5KMyv0IGedIEK3RdKc6oTauz9Hu76EWaoqrfGWH6CN2j1JKnQ6X4ipz/cCEc+6yEil+1ihr7cYvk=@vger.kernel.org X-Gm-Message-State: AOJu0Yxg4YuNKE31pjrm8gKV3gHXKNM3UAM5kz5Fjc9mD82xzw4Ponjb Gz6cZMfOh03nG1xa6InFZDEA84s01cZNg3gva4HEDKyZ0k3kR9AaDWzndKimEmEWOlk= X-Gm-Gg: AeBDiesl1FxhgqNI1XHW3K/ELj8QvnWkln0IrBVZArxrh4YzIG6MbaUdoePiU6OY+lW 8Hq5c0PHmQ8udpzzvSQaIZHqSFUefOLPInxv55zdhopMf5PjLxA3IOJ8St60IA55ifE3GuVpnBz WulJH5xsOjY88bKI93k6C7d1giFZ+kLKo84XVw1MCIVEkVF0gulF7Q21/ectbUYxD23OJbqeHDu 4r3Mnq0q3TQVBAB5+UIOI/lEAVWa1QNOnGlkBlIpXNixoeb4K3eq7g+vOys5/2J6BQPE3wNXPOF oARCUjl/0qicbYa0PGbjqkQWRSPpe7cW6xOlH8ju+dvVqdJqjXOdNUd5N0YfkQynsTbxPTK9z/f d9KRlYQ+z6a8HuxGf1Z4JCbyO4uKt5CYyAZJ6GRfT3R8lNBGwMfxeJ4/hL9saEYbE7oQSJoOAIR TXuAkQj1TaaV9t6xOJoL54HhhbeS2cyWuFbIl7gmdixxmO8GQ7aJ1yadyppbrCz6fKV0qVsdpxK X1Ph0RVT0AGX4GOueLKy1fxuXDUyA== X-Received: by 2002:a05:600c:4f92:b0:48a:f18:ece4 with SMTP id 5b1f17b1804b1-48a0f18edf7mr408561105e9.24.1777303349827; Mon, 27 Apr 2026 08:22:29 -0700 (PDT) Received: from [127.0.1.1] ([82.71.135.85]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488fc0f8188sm861247695e9.2.2026.04.27.08.22.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Apr 2026 08:22:29 -0700 (PDT) From: William Bright Date: Mon, 27 Apr 2026 16:21:09 +0100 Subject: [PATCH 1/2] dt-bindings: display: panel: Add TSD TST070WSBE-196C panel Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260427-imdt-dsi-display-v1-1-bb2768de120b@imd-tec.com> References: <20260427-imdt-dsi-display-v1-0-bb2768de120b@imd-tec.com> In-Reply-To: <20260427-imdt-dsi-display-v1-0-bb2768de120b@imd-tec.com> To: Neil Armstrong , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, William Bright X-Mailer: b4 0.15.2 Add device tree binding documentation for the TSD TST070WSBE-196C, a 7" 1024x600 MIPI-DSI TFT LCD panel using an EK79007AD controller. The panel is connected via a 4-lane MIPI-DSI video interface. Signed-off-by: William Bright Reviewed-by: Krzysztof Kozlowski --- .../display/panel/tsd,tst070wsbe-196c.yaml | 64 ++++++++++++++++++= ++++ 1 file changed, 64 insertions(+) diff --git a/Documentation/devicetree/bindings/display/panel/tsd,tst070wsbe= -196c.yaml b/Documentation/devicetree/bindings/display/panel/tsd,tst070wsbe= -196c.yaml new file mode 100644 index 000000000000..fe3f45aa4575 --- /dev/null +++ b/Documentation/devicetree/bindings/display/panel/tsd,tst070wsbe-196c.y= aml @@ -0,0 +1,64 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/panel/tsd,tst070wsbe-196c.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: TSD TST070WSBE-196C 7" 1024x600 MIPI-DSI TFT LCD panel + +maintainers: + - William Bright + +description: | + The TSD TST070WSBE-196C is a 7" 1024x600 TFT LCD panel module with an + EK79007AD controller, connected via a 4-lane MIPI-DSI video interface. + +allOf: + - $ref: panel-common.yaml + +properties: + compatible: + const: tsd,tst070wsbe-196c + + reg: + maxItems: 1 + description: DSI virtual channel + + backlight: true + reset-gpios: true + power-supply: true + port: true + +required: + - compatible + - reg + - reset-gpios + - power-supply + - port + +additionalProperties: false + +examples: + - | + #include + + dsi { + #address-cells =3D <1>; + #size-cells =3D <0>; + + panel@0 { + compatible =3D "tsd,tst070wsbe-196c"; + reg =3D <0>; + + reset-gpios =3D <&tlmm 133 GPIO_ACTIVE_LOW>; + power-supply =3D <&display_panel_pwr_en>; + backlight =3D <&backlight>; + + port { + panel_in: endpoint { + remote-endpoint =3D <&dsi_out>; + }; + }; + }; + }; +... --=20 2.43.0 From nobody Wed Jun 17 06:27:22 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C3FF33372A for ; Mon, 27 Apr 2026 15:22:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777303354; cv=none; b=GVqXTGX3n9a/HMT7C/87hCAdtw8MpL40tl6qPm4nqQ8LCGjlZDbFgeSmWIC8ZYv/H1h8wifN3FK3nXPxOEfbs+Ec9xSYjoVs2mqV3K+B3yYJ52hdbxRGlxtc7/gMKRc2bHAuEwOfvPbvYe2D+5FvRtuY8P/3x1NnHoC3I9av8FM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777303354; c=relaxed/simple; bh=c/GUjtFdMpaXGSx7flx2uMuqCQ7tz/ZYDJJJvOysAMM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=H/vwB9PqVYEthjg++ESUyPhhQ7HtgZGOHo5FZfV4Tw3hrfGZUsIXiy5YtgCOuZZuqWHVLNZKMcp0Aoj27PB6OI0G87ATbKc05uK1V/fZR//R7VzyoVOYpYAA8BX8IGvKsWL6QT4S6cU+9aE/MNVbn31KHJ1sYAhLL6TFpF9tKjY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=imd-tec.com; spf=pass smtp.mailfrom=imd-tec.com; dkim=pass (2048-bit key) header.d=imd-tec.com header.i=@imd-tec.com header.b=aFkAH6od; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=imd-tec.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=imd-tec.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=imd-tec.com header.i=@imd-tec.com header.b="aFkAH6od" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-488af96f6b2so136674455e9.0 for ; Mon, 27 Apr 2026 08:22:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=imd-tec.com; s=google; t=1777303351; x=1777908151; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=pie8QbWldg5VNEJDsI0ovz0KroQYVuPXc4fMQ9N0ZIk=; b=aFkAH6odWsEWeAGk54eknFnbNnw2rLBc4HXi8yvH/eULkCS1ZWCKWIjly2PhbMIjYr OYSCxyYAB3aqHuGHXc4Isi+UgDkStE0qntyeONzaZmBCCPnLjMRsfJrOaB8Phak3Tw55 +1OZqhDDBUdJjJ1DblCL3DrEsPNUZQRBKE0qHW8u4jZaZZEQJMAouSdtbGzr9hKYEJsc Ndt1Fec8YoXR1kDuprqd+zlRRJpY11OvVh14cAYRsA26Ow+pZ/iEKgzjrC9uIdDbEmvW jlIdBJhqeKgLsga0EHGIiAtE+4VUx7kYZXCX1Z9PtP9Zll9qkKt0sFRR6pLMkOddg3GG TRrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777303351; x=1777908151; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=pie8QbWldg5VNEJDsI0ovz0KroQYVuPXc4fMQ9N0ZIk=; b=GSLu8OA47+cY6XnEs4TqY7yIY2GvfkUwCdpLn8n5EgU+j81lENXh0/6PyLLSIWyfZZ 1gIyKszOYkBnq0tUvPMncNx4U3v3UbsdlCoz4znoIgsfSCKyeejiGeIWlZX9GZrJNwMm 9+VwMZWU+egRgD94d+6CYRdzLMusBoYFMlyuNbqvOOXV+8QJ2Wb7V43JTNfCx3QHk0fc ledHhlAxhByfeBdSkEOcsZ/V93SnIfyBLCdPMn8wIKF5tWzi2D9m2Xa/N0UH8uZa2VSu Zvm5SqSabtMQQvUqQ8ifvcBnNMLJf0HBmpl7EKgrQmJKDoNk2A+90HkjahETh0W9VUuH M1QA== X-Forwarded-Encrypted: i=1; AFNElJ9W1PpwbSTluqRI1nYhCawQ7XB8yp5EgXTAgHASLwt+0MBQHM4tOY9V3gMJNB68/WCMfjyofHMD0GHpjGE=@vger.kernel.org X-Gm-Message-State: AOJu0Yxd24WheinPHmj0X3h5+kgnvDgIMP/jbD/A4aMS1fYgkYkzdsDz y9OxI1XcjtzhZ5dM5T4e3/jSXA4Som7PiZKpa7Um1bIiRPIU4ZWaXeErk/QKUx3ohiE= X-Gm-Gg: AeBDietWQP3h7MuZkF+fTR/HEtcxxETMbmBfxSxBJHXFqOJPFh/z4p79pLdSUMzMvvj 3gF6HMaoPYx+T1ToXCAsS0EF4Uob1FKzb+7RI14YJdggJxmvgb3Mc28tRaZoIM8PgxyQTQX0in5 /InWspXdY/BLPLk8pKyZbf8eVtFwa4Jvq/2wYoqQE3gtb8+jIByoWmHAyBCZfYXy8eqLc6jqMAo Pc7Wbt7cf1/vrAZ5ev/zETpOOHvfKY5AaEpObT5BNp24LUB84J74KCyG+yPYHaR1U5oObiGSSCZ rgNJsX6TPdu7InlyPwhhnfYHvxqFVA0D/rcPcUnGhA1oiOHiYwEPzOtHuEFkz6Tvy1vmxtMbznN dK+AK21nL0+GbQH9BiciC42T2Go49MMhNxxKky2kZh8PwZWVvNhkR1fWweE7KqWOdU/uC2u6z4m 8u1GIF8S3Hwa5N3kv/AfmOa8o6EenctK9ajnduHQL9G5FK5LxOLMRUHtwlfwvKsv0g0gQ7wKpSa aoaYASJaK/oYgJtPHlxXslfGhyAXw== X-Received: by 2002:a05:600c:4509:b0:489:e126:b757 with SMTP id 5b1f17b1804b1-489e126ba91mr422703385e9.25.1777303350864; Mon, 27 Apr 2026 08:22:30 -0700 (PDT) Received: from [127.0.1.1] ([82.71.135.85]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488fc0f8188sm861247695e9.2.2026.04.27.08.22.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Apr 2026 08:22:30 -0700 (PDT) From: William Bright Date: Mon, 27 Apr 2026 16:21:10 +0100 Subject: [PATCH 2/2] drm/panel: Add TSD TST070WSBE-196C 7" DSI panel driver Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260427-imdt-dsi-display-v1-2-bb2768de120b@imd-tec.com> References: <20260427-imdt-dsi-display-v1-0-bb2768de120b@imd-tec.com> In-Reply-To: <20260427-imdt-dsi-display-v1-0-bb2768de120b@imd-tec.com> To: Neil Armstrong , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, William Bright X-Mailer: b4 0.15.2 Add a dedicated panel driver for the TSD TST070WSBE-196C, a 7" 1024x600 MIPI-DSI TFT LCD panel using an EK79007AD controller. The driver supports power supply control, reset and enable GPIOs, and the backlight framework. The initial driver was built mostly using "linux-mdss-dsi-panel-driver-generator" [1], reading the downstream file "dsi-panel-imdt-tst070wsbe165c-video.dtsi" [2]. [1] https://github.com/msm8916-mainline/linux-mdss-dsi-panel-driver-generat= or [2] https://raw.githubusercontent.com/imd-tec/meta-imdt-qcom/refs/heads/kir= kstone/recipes-display/displaydevicetree/displaydevicetree/0001-Initial-bri= ngup-of-IMDT-Display-3.patch Signed-off-by: William Bright --- MAINTAINERS | 6 + drivers/gpu/drm/panel/Kconfig | 9 ++ drivers/gpu/drm/panel/Makefile | 1 + drivers/gpu/drm/panel/panel-tsd-tst070wsbe-196c.c | 168 ++++++++++++++++++= ++++ 4 files changed, 184 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index ae8a01f30ff4..6e80d9916a10 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -8414,6 +8414,12 @@ T: git https://gitlab.freedesktop.org/drm/misc/kerne= l.git F: Documentation/devicetree/bindings/display/panel/tpo,tpg110.yaml F: drivers/gpu/drm/panel/panel-tpo-tpg110.c =20 +DRM DRIVER FOR TSD TST070WSBE-196C PANEL +M: William Bright +S: Maintained +F: Documentation/devicetree/bindings/display/panel/tsd,tst070wsbe-196c.yaml +F: drivers/gpu/drm/panel/panel-tsd-tst070wsbe-196c.c + DRM DRIVER FOR USB DISPLAYLINK VIDEO ADAPTERS M: Dave Airlie R: Sean Paul diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig index d6863b28ddc5..aef00b43c1f1 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -1227,6 +1227,15 @@ config DRM_PANEL_TRULY_NT35597_WQXGA Say Y here if you want to enable support for Truly NT35597 WQXGA Dual D= SI Video Mode panel =20 +config DRM_PANEL_TSD_TST070WSBE_196C + tristate "TSD TST070WSBE-196C 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 TSD TST070WSBE-196C + 1024x600 7" MIPI DSI panel with an EK79007AD controller. + config DRM_PANEL_VISIONOX_G2647FB105 tristate "Visionox G2647FB105" depends on OF diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile index a4291dc3905b..1653fe7b45c5 100644 --- a/drivers/gpu/drm/panel/Makefile +++ b/drivers/gpu/drm/panel/Makefile @@ -121,6 +121,7 @@ obj-$(CONFIG_DRM_PANEL_TPO_TD028TTEC1) +=3D panel-tpo-t= d028ttec1.o obj-$(CONFIG_DRM_PANEL_TPO_TD043MTEA1) +=3D panel-tpo-td043mtea1.o obj-$(CONFIG_DRM_PANEL_TPO_TPG110) +=3D panel-tpo-tpg110.o obj-$(CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA) +=3D panel-truly-nt35597.o +obj-$(CONFIG_DRM_PANEL_TSD_TST070WSBE_196C) +=3D panel-tsd-tst070wsbe-196c= .o obj-$(CONFIG_DRM_PANEL_VISIONOX_G2647FB105) +=3D panel-visionox-g2647fb105= .o obj-$(CONFIG_DRM_PANEL_VISIONOX_RM69299) +=3D panel-visionox-rm69299.o obj-$(CONFIG_DRM_PANEL_VISIONOX_RM692E5) +=3D panel-visionox-rm692e5.o diff --git a/drivers/gpu/drm/panel/panel-tsd-tst070wsbe-196c.c b/drivers/gp= u/drm/panel/panel-tsd-tst070wsbe-196c.c new file mode 100644 index 000000000000..7b639728b3bf --- /dev/null +++ b/drivers/gpu/drm/panel/panel-tsd-tst070wsbe-196c.c @@ -0,0 +1,168 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Generated with linux-mdss-dsi-panel-driver-generator from vendor device= tree. + * Copyright (c) 2026 IMD Technologies Ltd + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +struct tst070wsbe_196c { + struct drm_panel panel; + struct mipi_dsi_device *dsi; + struct regulator *supply; + struct gpio_desc *reset_gpio; +}; + +static inline struct tst070wsbe_196c *to_tst070wsbe_196c(struct drm_panel = *panel) +{ + return container_of_const(panel, struct tst070wsbe_196c, panel); +} + +static void tst070wsbe_196c_reset(struct tst070wsbe_196c *ctx) +{ + gpiod_set_value_cansleep(ctx->reset_gpio, 1); + msleep(200); + gpiod_set_value_cansleep(ctx->reset_gpio, 0); + msleep(20); +} + +static int tst070wsbe_196c_prepare(struct drm_panel *panel) +{ + struct tst070wsbe_196c *ctx =3D to_tst070wsbe_196c(panel); + int ret; + + ret =3D regulator_enable(ctx->supply); + if (ret < 0) + return ret; + + msleep(20); + + tst070wsbe_196c_reset(ctx); + + return 0; +} + +static int tst070wsbe_196c_unprepare(struct drm_panel *panel) +{ + struct tst070wsbe_196c *ctx =3D to_tst070wsbe_196c(panel); + + gpiod_set_value_cansleep(ctx->reset_gpio, 1); + regulator_disable(ctx->supply); + + return 0; +} + +static const struct drm_display_mode tst070wsbe_196c_mode =3D { + .clock =3D (1024 + 160 + 12 + 160) * (600 + 12 + 10 + 23) * 60 / 1000, + .hdisplay =3D 1024, + .hsync_start =3D 1024 + 160, + .hsync_end =3D 1024 + 160 + 12, + .htotal =3D 1024 + 160 + 12 + 160, + .vdisplay =3D 600, + .vsync_start =3D 600 + 12, + .vsync_end =3D 600 + 12 + 10, + .vtotal =3D 600 + 12 + 10 + 23, + .width_mm =3D 190, + .height_mm =3D 121, + .type =3D DRM_MODE_TYPE_DRIVER, +}; + +static int tst070wsbe_196c_get_modes(struct drm_panel *panel, + struct drm_connector *connector) +{ + return drm_connector_helper_get_modes_fixed(connector, + &tst070wsbe_196c_mode); +} + +static const struct drm_panel_funcs tst070wsbe_196c_panel_funcs =3D { + .prepare =3D tst070wsbe_196c_prepare, + .unprepare =3D tst070wsbe_196c_unprepare, + .get_modes =3D tst070wsbe_196c_get_modes, +}; + +static int tst070wsbe_196c_probe(struct mipi_dsi_device *dsi) +{ + struct device *dev =3D &dsi->dev; + struct tst070wsbe_196c *ctx; + int ret; + + ctx =3D devm_drm_panel_alloc(dev, struct tst070wsbe_196c, panel, + &tst070wsbe_196c_panel_funcs, + DRM_MODE_CONNECTOR_DSI); + if (IS_ERR(ctx)) + return PTR_ERR(ctx); + + ctx->supply =3D devm_regulator_get(dev, "power"); + if (IS_ERR(ctx->supply)) + return dev_err_probe(dev, PTR_ERR(ctx->supply), + "Failed to get power regulator\n"); + + ctx->reset_gpio =3D devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); + if (IS_ERR(ctx->reset_gpio)) + return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio), + "Failed to get reset-gpios\n"); + + ctx->dsi =3D dsi; + mipi_dsi_set_drvdata(dsi, ctx); + + dsi->lanes =3D 4; + dsi->format =3D MIPI_DSI_FMT_RGB888; + dsi->mode_flags =3D MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_LPM; + + ctx->panel.prepare_prev_first =3D true; + + ret =3D drm_panel_of_backlight(&ctx->panel); + if (ret) + return dev_err_probe(dev, ret, "Failed to get backlight\n"); + + drm_panel_add(&ctx->panel); + + ret =3D mipi_dsi_attach(dsi); + if (ret < 0) { + drm_panel_remove(&ctx->panel); + return dev_err_probe(dev, ret, "Failed to attach to DSI host\n"); + } + + return 0; +} + +static void tst070wsbe_196c_remove(struct mipi_dsi_device *dsi) +{ + struct tst070wsbe_196c *ctx =3D mipi_dsi_get_drvdata(dsi); + int ret; + + ret =3D mipi_dsi_detach(dsi); + if (ret < 0) + dev_err(&dsi->dev, "Failed to detach from DSI host: %d\n", ret); + + drm_panel_remove(&ctx->panel); +} + +static const struct of_device_id tst070wsbe_196c_of_match[] =3D { + { .compatible =3D "tsd,tst070wsbe-196c" }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, tst070wsbe_196c_of_match); + +static struct mipi_dsi_driver tst070wsbe_196c_driver =3D { + .probe =3D tst070wsbe_196c_probe, + .remove =3D tst070wsbe_196c_remove, + .driver =3D { + .name =3D "panel-tsd-tst070wsbe-196c", + .of_match_table =3D tst070wsbe_196c_of_match, + }, +}; +module_mipi_dsi_driver(tst070wsbe_196c_driver); + +MODULE_AUTHOR("William Bright "); +MODULE_DESCRIPTION("DRM driver for TSD TST070WSBE-196C 7\" MIPI-DSI panel"= ); +MODULE_LICENSE("GPL"); --=20 2.43.0