From patchwork Wed Apr 2 06:12:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcus Folkesson X-Patchwork-Id: 14035611 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 25F58C28B20 for ; Wed, 2 Apr 2025 07:23:44 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BAF4710E6C7; Wed, 2 Apr 2025 07:23:37 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ixbdvtbd"; dkim-atps=neutral Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com [209.85.208.177]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2D6D110E082 for ; Wed, 2 Apr 2025 06:12:43 +0000 (UTC) Received: by mail-lj1-f177.google.com with SMTP id 38308e7fff4ca-30bfd4d4c63so59952381fa.2 for ; Tue, 01 Apr 2025 23:12:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743574361; x=1744179161; darn=lists.freedesktop.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=LqLYe1FqZ+fWkZUMEsoaaGbBxE6T5DwROgxnXgSu3vs=; b=ixbdvtbd+qnf2CCoRFfyjh/pama11H9tMT994dRVOGbvMmjUwqE0tfRFxUsj3meI9M BUVvw9NSA2nKvylpcy/P8suUPXPnjyaOlnqoLVbioMS3m5Rvqe60QIyhrKEo5rgnUbNc K5jZI+xpXQRio5Fqi1JXBQ/FGGA2RAtH7qC2KUedVzw4l96DvxqyNIU3/7ZQqWAaRIt2 MnrM+/blU4WqyhL1SrJYifJVAVp3MWhvVBkPxYItJaED4PjrFcFX9ImAmomGVUyW7t50 /8Cn4MlPMImehgOsCtoBoGBlaWK6DQWfjiyTHD++J/pu1p+STWwcRn8MkFred9vuooN5 dBRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743574361; x=1744179161; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LqLYe1FqZ+fWkZUMEsoaaGbBxE6T5DwROgxnXgSu3vs=; b=ouDSRqIHNnv9o/S79wmA20gcGwBWlZfO+lSP8yjzTtg2Sw00M9Og88cQgTrax1urI6 tIxB6Kgyufqj4dB5i5McUaLYlosSRD2U9+IIQYKZt7AHUgiLUkAQqu5zC8tMq4gn3EYx QDF/vNvUoxGSp+NGTmRZ9SAkdj+ywXL8ackDPWMgVXRLXfGgl68H8dNn2H4+NvU6A0T3 hPrusySmk2MhYv/0rTEML2mW72vg+NElU7rNbVUVJitP/Ffc60G7SzgmNaMC3eagfq6X 26d51tDkNYN+Ub5q/16T2u4Ep2InHh/+LMHWjZJp8cO/HLeiJY+wSakTTjY0p/hGDrQQ NTaw== X-Gm-Message-State: AOJu0YzCstntVnvs6eiWKKYF96aGy6Nr92byZZgPwYsH1rsXcYd3ivEV gn3TKFu/APE8clMif68RvvBn31THYbOjNllwokEyPiJibPxYrtu6 X-Gm-Gg: ASbGncvvudEQbxZ1Y9xFSFk5guKE+llhI+wsMOlTq9a06kwaG44bnjQ0c/rgrDQdJmW //MnjeiQjWMw6+h0/bt8yZ9HT3QgD5n5RgVMhYqmmA1i03uKqGn4gsqFKI4zH9RizHZvSmSwX0T HNQe2DhfkttTEcksHg8WUHCZzdlGWGvJoRQhTzhaRKY7SfZDl5DcSEWJciaZ6cw44qfqco65IPN 0PFJUkbClsTreGBkEdxOcs+yMoR+gD3XyjBNnG+xJx5Nshe/hDbnHZ0vAO9j1N7sM6+cu5fqGB7 /tkirt5FgxBH1BcQo3uIxMQwKtveRo+3XbvhG4aIWtT4Q1Ej5Ruvuc/RAdacv9tcrEGUjL8BO5K pi+EPlAS69Xxf X-Google-Smtp-Source: AGHT+IEOlVRNPfK6XvZfZI9GoCa8bFyIWYRL1kIm15RePsFCTW23VErkrA/u4u5KJPijLSBDY2ITUQ== X-Received: by 2002:a05:651c:312c:b0:30c:50fd:9afe with SMTP id 38308e7fff4ca-30eecd2b14amr21036011fa.9.1743574361185; Tue, 01 Apr 2025 23:12:41 -0700 (PDT) Received: from [192.168.1.11] (83-233-6-197.cust.bredband2.com. [83.233.6.197]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-30dd2aa9118sm19336801fa.14.2025.04.01.23.12.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Apr 2025 23:12:40 -0700 (PDT) From: Marcus Folkesson Date: Wed, 02 Apr 2025 08:12:10 +0200 Subject: [PATCH 1/3] dt-bindings: st7571-i2c: Add Sitronix ST7571 panel bindings MIME-Version: 1.0 Message-Id: <20250402-st7571-v1-1-351d6b9eeb4a@gmail.com> References: <20250402-st7571-v1-0-351d6b9eeb4a@gmail.com> In-Reply-To: <20250402-st7571-v1-0-351d6b9eeb4a@gmail.com> To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Marcus Folkesson X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2472; i=marcus.folkesson@gmail.com; h=from:subject:message-id; bh=qYfHo2KQHvNKc0ra0XY4yHSyf5lMppizDiG5nIkJLrQ=; b=owEBbQKS/ZANAwAIAYiATm9ZXVIyAcsmYgBn7NVH8bUZmUp+sDXnx+1m2Gbpsf0NJOj4/LoGp SQm5Bf40QiJAjMEAAEIAB0WIQQFUaLotmy1TWTBLGWIgE5vWV1SMgUCZ+zVRwAKCRCIgE5vWV1S MnfYD/9J49Orcaqbp7AXaRVq0lPTsokYkxYNLdJ/05TEhccGTRtZpDcgy3CtoMDFudImM9/+c6V 8p7q5yQLaoq4WVfes6wtYlrfZ/13wdGlTkfh5zxuaAvdYdL5zs3MJ2ustdg0j+HF65lWmoPrgET VMBbhQEUOIwZ+5+h3tLZDgNbPs+lB2FbRnCDxHK0AtB3sg53EHQjMXBZgF2fn9Rggilcuno4WPW XvFrs51gq4gNMqkp3yn9txSMAuIlOjuev/fmFiQRNV514VRqz7VbT5ni3TLed3D+fw8npOYOLqj +vIXk1+a8ZuzS5LOzf20+Swrc2Kj9yrGVhW+7oyfCWBbdQ14QPIQrfrtHhmdMFPUvxQFmR87Eyl H/DXyvKKCSM3SlcWJBjzuYyOT+CdfALX64N0CdTnPKQBt8Yx9VNFyQ+y6UEEG6fODQqSaZXrSWx HlKVwEQFerc7JFyr4zA6N2PL0e87FrY4RW6pSzwTqIVaT5RqSmIX2qJaXShR8uaA5c0RDbhMsNI ncYga/CEXV9k3LJCxl/jMkE1Ga/SK7FsAd9YnkVLqe000He1Qa40E2qBhnvcvCmYAmyL+Mr7OwG zdKjqVZ1FzEux9Jlj+iXO8sPOeLc6NPu9SGdPpBnN2QO9SZcJEeFqno3nTin/N5JA9osXUjmXsw GeAf8A21a35u8mA== X-Developer-Key: i=marcus.folkesson@gmail.com; a=openpgp; fpr=AB91D46C7E0F6E6FB2AB640EC0FE25D598F6C127 X-Mailman-Approved-At: Wed, 02 Apr 2025 07:23:36 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Sitronix ST7571 is a 4bit gray scale dot matrix LCD controller. The controller has a SPI, I2C and 8bit parallel interface, this is for the I2C interface only. Signed-off-by: Marcus Folkesson --- .../bindings/display/sitronix,st7571-i2c.yaml | 71 ++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/Documentation/devicetree/bindings/display/sitronix,st7571-i2c.yaml b/Documentation/devicetree/bindings/display/sitronix,st7571-i2c.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6e5e0994a98db646a37bb17c4289332546c9266e --- /dev/null +++ b/Documentation/devicetree/bindings/display/sitronix,st7571-i2c.yaml @@ -0,0 +1,71 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/sitronix,st7571-i2c.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Sitronix ST7571 Display Panels + +maintainers: + - Marcus Folkesson + +properties: + compatible: + const: sitronix,st7571-i2c + + reg: + description: I2C address of the LCD controller + maxItems: 1 + + sitronix,panel-width-mm: + description: physical panel width [mm] + + sitronix,panel-height-mm: + description: physical panel height [mm] + + sitronix,panel-nlines: + description: Number of lines in the panel + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 1 + maximum: 128 + default: 128 + + sitronix,panel-start-line: + description: Start line of the panel + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + maximum: 127 + default: 0 + + reset-gpios: + description: GPIO connected to the RST_N signal. + maxItems: 1 + +required: + - compatible + - reg + - reset-gpios + - sitronix,panel-width-mm + - sitronix,panel-height-mm + +additionalProperties: false + +examples: + - | + #include + # + i2c { + #address-cells = <1>; + #size-cells = <0>; + + display@3f { + compatible = "sitronix,st7571-i2c"; + reg = <0x3f>; + + reset-gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>; + sitronix,panel-width-mm = <37>; + sitronix,panel-height-mm = <27>; + sitronix,panel-nlines = <96>; + sitronix,panel-start-line = <0>; + }; + }; From patchwork Wed Apr 2 06:12:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcus Folkesson X-Patchwork-Id: 14035612 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 78CF9C3601A for ; Wed, 2 Apr 2025 07:23:45 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B214C10E6C8; Wed, 2 Apr 2025 07:23:38 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="F0Ch8Mnu"; dkim-atps=neutral Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) by gabe.freedesktop.org (Postfix) with ESMTPS id D548810E082 for ; Wed, 2 Apr 2025 06:12:44 +0000 (UTC) Received: by mail-lj1-f180.google.com with SMTP id 38308e7fff4ca-30613802a04so64329921fa.2 for ; Tue, 01 Apr 2025 23:12:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743574363; x=1744179163; darn=lists.freedesktop.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=cV5ZHUICuxYNvHb937fMWFTBE1PnQy7W5glkS0eNxdA=; b=F0Ch8MnuhmrOmwZXjL+OqqW/YmiHZzXMwDTiYdWTuE1997r4g11XvQLN37vt9S4in6 5w+jbjZ8F0e7TP2YZY3HD9zrL7bvKD8ZwuY1ugaQCm9Kdq6VLaaXAfi/zkgUPLuqvQh3 AsatFuRoE4rtNX0nX4bk/oVNmDbCb13ArEcMYRb2/yk+F8mgaq83aXsywILn+k+FGNgS TdmhFEaktAxkCbRHbc6ICwTw+YVRK7d1o7MLWgdNN1BZBokPBQkrXLrzJClpPiVEwoKx 9AKZJampooU8AP5AgmkpcVUnMOSjqqxyzy+1fGbdrn45eFSdqiOi3DnxZPWM5UFrbsw5 BGRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743574363; x=1744179163; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cV5ZHUICuxYNvHb937fMWFTBE1PnQy7W5glkS0eNxdA=; b=gIgXG9xbbTjFltZF8FZzJeqD80/VTHclUt9s4qhQIftOI6IjRhvAkTgP1PvveIIoww l/LX8+BFlP7JVJYvOi6xM+iG99oDLB0V59YcBOEdi56S/VeUQ58WI1KaufgJ1tGieAqR XM2cf4zkZtqQ+zEKLAWCoRGQLJrgH7pXybQN/f+BTnA0XQW2ptMyBMN3dkBjnfCnn6Ss 4t9YuthfCBSYHUYQoMf9vkbeSdbCpb72mZuptCGR/UARJfWYnH8xNFqouClp6hQUWivW xpYnTz2BxEzTZIMPyLk3rdy9drzCVOGSTzRdj6lGBhJSzNX7falzwBNjx8WpWULPNNa3 MYwA== X-Gm-Message-State: AOJu0YzNDaOd5pB5h7p7NWP5ZHL4tZWeUlL7p7qZDYcqaYZJGSIN8+aC kkQ8Z2zJkoJIAKTyG2irctQxD9iSeKJJlvnnPX8D/9smGOY7ROeT X-Gm-Gg: ASbGncuMgCtnY+9oM9qVFeM8fMqdltJO/EIC9sTHaMvN68ggt4BRhKIY5VZ7iSDNaFx N2i3KeLB6VFxJfObqJ8+Qkj1ZQdkUBxad0PBBAujziPjGD0+h/WTqsbM0Pci2kVEQ4lHeG1K5m4 KMIC2iMgkJ5dvy8XjQ5a0TQOr6J59+1ymnveGtAZvlodJPfYtwIu/ffyAmBJyXYsKMs+cHBtsH9 84xVTBeDXvCnJtC0ij2EUpeirfjUNDfBP+qX5xk2IIw7gi0GC7KJUPVl+YJRbQCoAwsHHwpNyGz MTbrN+dtacKPIY0kQUw0YMBag3ay4ITyK8Oz8rBkEZeYsxiMptvd+JCrGuiuAiFKPYzvy2rXZ8Z dvcESDmJaAklv X-Google-Smtp-Source: AGHT+IHUj/Ty9pge8mfDlUOKnw6ytZHiet7VpbtZXmZmXojKYPFOv1Gq3ZqDeYGdlJUdlZePoxZnjQ== X-Received: by 2002:a05:651c:220d:b0:30b:b9e4:13c5 with SMTP id 38308e7fff4ca-30ef90ccfd1mr3413681fa.4.1743574362795; Tue, 01 Apr 2025 23:12:42 -0700 (PDT) Received: from [192.168.1.11] (83-233-6-197.cust.bredband2.com. [83.233.6.197]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-30dd2aa9118sm19336801fa.14.2025.04.01.23.12.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Apr 2025 23:12:41 -0700 (PDT) From: Marcus Folkesson Date: Wed, 02 Apr 2025 08:12:11 +0200 Subject: [PATCH 2/3] drm/st7571-i2c: add support for Sitronix ST7571 LCD controller MIME-Version: 1.0 Message-Id: <20250402-st7571-v1-2-351d6b9eeb4a@gmail.com> References: <20250402-st7571-v1-0-351d6b9eeb4a@gmail.com> In-Reply-To: <20250402-st7571-v1-0-351d6b9eeb4a@gmail.com> To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Marcus Folkesson X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=18061; i=marcus.folkesson@gmail.com; h=from:subject:message-id; bh=rVktkbhZ73qxhxvZdI9XYvy0vnRRMgoRCdhnvs8LSms=; b=owEBbQKS/ZANAwAIAYiATm9ZXVIyAcsmYgBn7NVM4LNkqygoDLJOBkg20tJVmzcYus9680fly SskpFIKZEyJAjMEAAEIAB0WIQQFUaLotmy1TWTBLGWIgE5vWV1SMgUCZ+zVTAAKCRCIgE5vWV1S MsaGD/oCrpPWO1u0rg3G0BqD9nVmzHRtsjZ0WdnmyjkT9nF+BMCEvo8Uggi9LoglvvQHW3cS1i+ h0fTiOBWRAUIov40EmGUs+JAw/VbXqq1HwcCQ/5TU2QxuDOB04F+RJhR/mXLX6YbnWfzfo744S4 lKXJbcX/drXtj1HItgDWbqZYv32Gg410KYqz4N+HD4dyTcfFYRJ/Lgs4fq4DDZk9Gq8dwkpHjiU nHWdureiFq+knrXm+Sa3AQ6VN2hy0FpVTrYYhH/ct9BnRIv5kjsKOpTfoW6+tsHhCpBAwJvMGdF EPb/sveXo5gQjVnUymftzyKz5CEUzveDPyoFeVRzLh0fbnvNBNcmz1+kznG4BPMaK0OzoheQiOy 6L1g6onUMBRK0FASpqWpcXGzsMv4fccD9gK8S3XD133X47VFeK7TUxJ16HRNaP6f4fOzsMW2jfM RsoK+fkbzxOKua6zp2idQ9jOBDUC6temS7ItKvPXmUOvAO4x6PqdYdmjhzV8A/sPUhoiwnXQJ4u TDm518O45+gnEoAXGyAj2XDXD8hbo7o3PAI3N8bKwJieYhLAsJGClMUtB82FSjTkOJlAGThhU2K +dF28+ZoEvvLD/h/Z5ceZyMUo3aA5I8pjwYVTpERNYFyfiGjWCS+Y3S4u69v3//ip11DaVQGyIz m6sPSFxwTS9u4hQ== X-Developer-Key: i=marcus.folkesson@gmail.com; a=openpgp; fpr=AB91D46C7E0F6E6FB2AB640EC0FE25D598F6C127 X-Mailman-Approved-At: Wed, 02 Apr 2025 07:23:36 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Sitronix ST7571 is a 4bit gray scale dot matrix LCD controller. The controller has a SPI, I2C and 8bit parallel interface, this driver is for the I2C interface only. Signed-off-by: Marcus Folkesson --- drivers/gpu/drm/tiny/Kconfig | 12 + drivers/gpu/drm/tiny/Makefile | 1 + drivers/gpu/drm/tiny/st7571-i2c.c | 563 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 576 insertions(+) diff --git a/drivers/gpu/drm/tiny/Kconfig b/drivers/gpu/drm/tiny/Kconfig index 94cbdb1337c07f1628a33599a7130369b9d59d98..14096031e7c2d8f73c06c88e08f35aa5a3790a54 100644 --- a/drivers/gpu/drm/tiny/Kconfig +++ b/drivers/gpu/drm/tiny/Kconfig @@ -232,6 +232,18 @@ config TINYDRM_ST7586 If M is selected the module will be called st7586. +config TINYDRM_ST7571_I2C + tristate "DRM support for Sitronix ST7571 display panels (I2C)" + depends on DRM && I2C + select DRM_KMS_HELPER + select DRM_GEM_DMA_HELPER + select DRM_GEM_SHMEM_HELPER + select REGMAP_I2C + help + DRM driver for Sitronix ST7571 panels controlled over I2C. + + if M is selected the module will be called st7571-i2c. + config TINYDRM_ST7735R tristate "DRM support for Sitronix ST7715R/ST7735R display panels" depends on DRM && SPI diff --git a/drivers/gpu/drm/tiny/Makefile b/drivers/gpu/drm/tiny/Makefile index 60816d2eb4ff93b87228ed8eadd60a0a33a1144b..343813a965e13326bbb8520a5c34d272ec7821d5 100644 --- a/drivers/gpu/drm/tiny/Makefile +++ b/drivers/gpu/drm/tiny/Makefile @@ -17,3 +17,4 @@ obj-$(CONFIG_TINYDRM_REPAPER) += repaper.o obj-$(CONFIG_TINYDRM_SHARP_MEMORY) += sharp-memory.o obj-$(CONFIG_TINYDRM_ST7586) += st7586.o obj-$(CONFIG_TINYDRM_ST7735R) += st7735r.o +obj-$(CONFIG_TINYDRM_ST7571_I2C) += st7571-i2c.o diff --git a/drivers/gpu/drm/tiny/st7571-i2c.c b/drivers/gpu/drm/tiny/st7571-i2c.c new file mode 100644 index 0000000000000000000000000000000000000000..c26ecf8a4fd2115b808b126cccda74ea9079cd7c --- /dev/null +++ b/drivers/gpu/drm/tiny/st7571-i2c.c @@ -0,0 +1,563 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Driver for Sitronix ST7571, a 4 level gray scale dot matrix LCD controller + * + * Copyright (C) 2025 Marcus Folkesson + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ST7571_COMMAND_MODE (0x00) +#define ST7571_DATA_MODE (0x40) + +/* Normal mode command set */ +#define ST7571_DISPLAY_OFF (0xae) +#define ST7571_DISPLAY_ON (0xaf) +#define ST7571_OSC_ON (0xab) +#define ST7571_SET_COLUMN_LSB(c) (0x00 | ((c) & 0xf)) +#define ST7571_SET_COLUMN_MSB(c) (0x10 | ((c) >> 4)) +#define ST7571_SET_COM0_LSB(x) ((x) & 0x7f) +#define ST7571_SET_COM0_MSB (0x44) +#define ST7571_SET_COM_SCAN_DIR(d) (0xc0 | (((d) << 3) & 0x8)) +#define ST7571_SET_CONTRAST_LSB(c) ((c) & 0x3f) +#define ST7571_SET_CONTRAST_MSB (0x81) +#define ST7571_SET_DISPLAY_DUTY_LSB(d) ((d) & 0xff) +#define ST7571_SET_DISPLAY_DUTY_MSB (0x48) +#define ST7571_SET_ENTIRE_DISPLAY_ON(p) (0xa4 | ((p) & 0x1)) +#define ST7571_SET_LCD_BIAS(b) (0x50 | ((b) & 0x7)) +#define ST7571_SET_MODE_LSB(m) ((m) & 0xfc) +#define ST7571_SET_MODE_MSB (0x38) +#define ST7571_SET_PAGE(p) (0xb0 | (p)) +#define ST7571_SET_POWER(p) (0x28 | ((p) & 0x7)) +#define ST7571_SET_REGULATOR_REG(r) (0x20 | ((r) & 0x7)) +#define ST7571_SET_REVERSE(r) (0xa6 | ((r) & 0x1)) +#define ST7571_SET_SEG_SCAN_DIR(d) (0xa0 | ((d) & 0x1)) +#define ST7571_SET_START_LINE_LSB(l) ((l) & 0x3f) +#define ST7571_SET_START_LINE_MSB (0x40) + +/* Extension command set 3 */ +#define ST7571_COMMAND_SET_3 (0x7b) +#define ST7571_SET_COLOR_MODE(c) (0x10 | ((c) & 0x1)) +#define ST7571_COLOR_MODE_BLACKWHITE (1) +#define ST7571_COLOR_MODE_GRAY (0) +#define ST7571_COMMAND_SET_NORMAL (0x00) + +#define DRIVER_NAME "st7571-i2c" +#define DRIVER_DESC "ST7571 DRM driver" +#define DRIVER_MAJOR 1 +#define DRIVER_MINOR 0 + +#define to_st7571(_dev) container_of(_dev, struct st7571_device, dev) + +struct st7571_device { + struct drm_device dev; + struct drm_simple_display_pipe pipe; + struct drm_connector conn; + struct drm_display_mode mode; + struct regmap *regmap; + struct i2c_client *client; + struct gpio_desc *reset; + u8 bpp; + u32 width_mm; + u32 height_mm; + u32 nlines; + u32 startline; + bool ignore_nak; +}; + +static int st7571_regmap_write(void *context, const void *data, size_t count) +{ + struct i2c_client *client = context; + struct st7571_device *st7571 = i2c_get_clientdata(client); + int ret; + + struct i2c_msg msg = { + .addr = st7571->client->addr, + .flags = st7571->ignore_nak ? I2C_M_IGNORE_NAK : 0, + .len = count, + .buf = (u8 *)data + }; + + ret = i2c_transfer(st7571->client->adapter, &msg, 1); + if (ret < 0) + return ret; + + return 0; +} + +static int st7571_regmap_read(void *context, const void *reg_buf, + size_t reg_size, void *val_buf, size_t val_size) +{ + return -EOPNOTSUPP; +} + +static int st7571_send_command_list(struct st7571_device *st7571, + const u8 *cmd_list, size_t len) +{ + int ret; + + for (int i = 0; i < len; i++) { + ret = regmap_write(st7571->regmap, ST7571_COMMAND_MODE, cmd_list[i]); + if (ret < 0) + return ret; + } + + return ret; +} + +static inline u8 st7571_transform_xy(const char *p, int x, int y) +{ + int xrest = x % 8; + u8 result = 0; + + /* + * Transforms an (x, y) pixel coordinate into a vertical 8-bit + * column from the framebuffer. It calculates the corresponding byte in the + * framebuffer, extracts the bit at the given x position across 8 consecutive + * rows, and packs those bits into a single byte. + * + * Return an 8-bit value representing a vertical column of pixels. + */ + x = x / 8; + y = (y / 8) * 8; + + for (int i = 0; i < 8; i++) { + int row_idx = y + i; + u8 byte = p[row_idx * 16 + x]; + u8 bit = (byte >> (7-xrest)) & 1; + + result |= (bit << i); + } + + return result; +} + +static int st7571_set_position(struct st7571_device *st7571, int x, int y) +{ + u8 cmd_list[] = { + ST7571_SET_COLUMN_LSB(x), + ST7571_SET_COLUMN_MSB(x), + ST7571_SET_PAGE(y/8), + }; + + return st7571_send_command_list(st7571, cmd_list, ARRAY_SIZE(cmd_list)); +} + +static int st7571_fb_blit_rect(struct drm_framebuffer *fb, + const struct iosys_map *vmap, + struct drm_rect *rect) +{ + struct st7571_device *st7571 = to_st7571(fb->dev); + + char row[256]; + char *pixel = vmap->vaddr; + int x1 = rect->x1 * st7571->bpp; + int x2 = rect->x2 * st7571->bpp; + + for (int y = rect->y1; y < rect->y2; y += 8) { + for (int x = x1; x < x2; x++) + row[x] = st7571_transform_xy(pixel, x, y); + + st7571_set_position(st7571, rect->x1, y); + + /* TODO: Investige why we can't write multiple bytes at once */ + for (int x = x1; x < x2; x++) + regmap_bulk_write(st7571->regmap, ST7571_DATA_MODE, row + x, 1); + } + + return 0; +} + +static int st7571_fb_blit_fullscreen(struct drm_framebuffer *fb, + const struct iosys_map *map) +{ + struct drm_rect fullscreen = { + .x1 = 0, + .x2 = fb->width, + .y1 = 0, + .y2 = fb->height, + }; + + return st7571_fb_blit_rect(fb, map, &fullscreen); +} + +static int st7571_conn_get_modes(struct drm_connector *conn) +{ + struct st7571_device *st7571 = to_st7571(conn->dev); + + return drm_connector_helper_get_modes_fixed(conn, &st7571->mode); +} + +static const struct drm_connector_helper_funcs st7571_conn_helper_funcs = { + .get_modes = st7571_conn_get_modes, +}; + +static const struct drm_connector_funcs st7571_conn_funcs = { + .fill_modes = drm_helper_probe_single_connector_modes, + .destroy = drm_connector_cleanup, + .reset = drm_atomic_helper_connector_reset, + .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, + .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, +}; + +static int st7571_conn_init(struct st7571_device *st7571) +{ + drm_connector_helper_add(&st7571->conn, &st7571_conn_helper_funcs); + return drm_connector_init(&st7571->dev, &st7571->conn, + &st7571_conn_funcs, DRM_MODE_CONNECTOR_Unknown); + +} + + +static void st7571_pipe_enable(struct drm_simple_display_pipe *pipe, + struct drm_crtc_state *crtc_state, + struct drm_plane_state *plane_state) +{ + struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(plane_state); + + st7571_fb_blit_fullscreen(plane_state->fb, &shadow_plane_state->data[0]); +} + +static void st7571_pipe_update(struct drm_simple_display_pipe *pipe, + struct drm_plane_state *old_state) +{ + struct drm_plane_state *state = pipe->plane.state; + struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(state); + struct drm_rect rect; + + if (state->fb && drm_atomic_helper_damage_merged(old_state, state, &rect)) + st7571_fb_blit_rect(state->fb, &shadow_plane_state->data[0], &rect); +} + +static const struct drm_simple_display_pipe_funcs st7571_pipe_funcs = { + .enable = st7571_pipe_enable, + .update = st7571_pipe_update, + DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS, +}; + +static const uint32_t st7571_formats[] = { + DRM_FORMAT_C1, + DRM_FORMAT_C2, +}; + +static const uint64_t st7571_modifiers[] = { + DRM_FORMAT_MOD_LINEAR, + DRM_FORMAT_MOD_INVALID +}; + +static int st7571_pipe_init(struct st7571_device *st7571) +{ + return drm_simple_display_pipe_init(&st7571->dev, + &st7571->pipe, + &st7571_pipe_funcs, + st7571_formats, + ARRAY_SIZE(st7571_formats), + st7571_modifiers, + &st7571->conn); +} + +static int st7571_set_pixel_format(struct st7571_device *st7571, + u32 pixel_format) +{ + u8 cmd_list[] = { + ST7571_COMMAND_SET_3, + ST7571_SET_COLOR_MODE(ST7571_COLOR_MODE_BLACKWHITE), + ST7571_COMMAND_SET_NORMAL, + }; + + switch (pixel_format) { + case DRM_FORMAT_C1: + cmd_list[1] = ST7571_SET_COLOR_MODE(ST7571_COLOR_MODE_BLACKWHITE); + st7571->bpp = 1; + break; + case DRM_FORMAT_C2: + cmd_list[1] = ST7571_SET_COLOR_MODE(ST7571_COLOR_MODE_GRAY); + st7571->bpp = 2; + break; + default: + return -EINVAL; + } + + return st7571_send_command_list(st7571, cmd_list, ARRAY_SIZE(cmd_list)); +} + +static struct drm_framebuffer* +st7571_fb_create(struct drm_device *dev, struct drm_file *file_priv, + const struct drm_mode_fb_cmd2 *mode_cmd) +{ + int ret = st7571_set_pixel_format(to_st7571(dev), mode_cmd->pixel_format); + + if (ret) + return ERR_PTR(ret); + + return drm_gem_fb_create_with_dirty(dev, file_priv, mode_cmd); +} + +static const struct drm_mode_config_funcs st7571_mode_config_funcs = { + .fb_create = st7571_fb_create, + .atomic_check = drm_atomic_helper_check, + .atomic_commit = drm_atomic_helper_commit, +}; + +static int st7571_mode_config_init(struct st7571_device *st7571) +{ + struct drm_device *dev = &st7571->dev; + int ret; + + ret = drmm_mode_config_init(dev); + if (ret) + return ret; + + dev->mode_config.min_width = 0; + dev->mode_config.min_height = 0; + dev->mode_config.max_width = 128; + dev->mode_config.max_height = 128; + dev->mode_config.preferred_depth = 1; + dev->mode_config.prefer_shadow = 0; + dev->mode_config.funcs = &st7571_mode_config_funcs; + + return 0; +} + +DEFINE_DRM_GEM_FOPS(st7571_fops); + +static const struct drm_driver st7571_driver = { + .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC, + + .name = DRIVER_NAME, + .desc = DRIVER_DESC, + .major = DRIVER_MAJOR, + .minor = DRIVER_MINOR, + + .fops = &st7571_fops, + DRM_GEM_SHMEM_DRIVER_OPS, + DRM_FBDEV_DMA_DRIVER_OPS, +}; + +static const struct regmap_bus st7571_regmap_bus = { + .read = st7571_regmap_read, + .write = st7571_regmap_write, +}; + +static const struct regmap_config st7571_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + .use_single_write = true, +}; + +static int st7571_parse_dt(struct st7571_device *st7571) +{ + struct device *dev = &st7571->client->dev; + struct device_node *np = dev->of_node; + + of_property_read_u32(np, "sitronix,panel-width-mm", &st7571->width_mm); + of_property_read_u32(np, "sitronix,panel-height-mm", &st7571->height_mm); + of_property_read_u32(np, "sitronix,panel-start-line", &st7571->startline); + of_property_read_u32(np, "sitronix,panel-nlines", &st7571->nlines); + + if (st7571->width_mm == 0 || st7571->height_mm == 0) { + dev_err(dev, "Invalid panel dimensions\n"); + return -EINVAL; + } + + /* Default to 128 lines if not specified */ + if (!st7571->nlines) + st7571->nlines = 128; + + if (st7571->startline + st7571->nlines > 128) { + dev_err(dev, "Invalid line configuration (start-line=%i, nlines=%i)\n", + st7571->startline, st7571->nlines); + return -EINVAL; + } + + st7571->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); + if (IS_ERR(st7571->reset)) + return PTR_ERR(st7571->reset); + + return 0; +} + +static void st7571_create_mode(struct st7571_device *st7571) +{ + struct drm_display_mode st7571_mode = { + DRM_SIMPLE_MODE(128, st7571->nlines, st7571->width_mm, st7571->height_mm), + }; + + memcpy(&st7571->mode, &st7571_mode, sizeof(st7571_mode)); +} + +static void st7571_reset(struct st7571_device *st7571) +{ + gpiod_set_value_cansleep(st7571->reset, 0); + mdelay(20); + gpiod_set_value_cansleep(st7571->reset, 1); +} + +static int st7571_initialize(struct st7571_device *st7571) +{ + /* + * Most of the initialization sequence is taken directly from the + * referential initial code in the ST7571 datasheet. + */ + u8 commands[] = { + ST7571_DISPLAY_OFF, + ST7571_SET_MODE_MSB, + + ST7571_SET_MODE_LSB(0x94), + ST7571_SET_SEG_SCAN_DIR(0), + ST7571_SET_COM_SCAN_DIR(1), + + ST7571_SET_COM0_MSB, + ST7571_SET_COM0_LSB(0x00), + + ST7571_SET_START_LINE_MSB, + ST7571_SET_START_LINE_LSB(st7571->startline), + + ST7571_OSC_ON, + ST7571_SET_REGULATOR_REG(5), + ST7571_SET_CONTRAST_MSB, + ST7571_SET_CONTRAST_LSB(0x33), + ST7571_SET_LCD_BIAS(0x04), + ST7571_SET_DISPLAY_DUTY_MSB, + ST7571_SET_DISPLAY_DUTY_LSB(st7571->nlines), + + + ST7571_SET_POWER(0x4), /* Power Control, VC: ON, VR: OFF, VF: OFF */ + ST7571_SET_POWER(0x6), /* Power Control, VC: ON, VR: ON, VF: OFF */ + ST7571_SET_POWER(0x7), /* Power Control, VC: ON, VR: ON, VF: ON */ + + ST7571_SET_REVERSE(0), + ST7571_SET_ENTIRE_DISPLAY_ON(0), + + ST7571_DISPLAY_ON, + }; + + /* Perform a reset before initializing the controller */ + st7571_reset(st7571); + + return st7571_send_command_list(st7571, commands, ARRAY_SIZE(commands)); +} + + +static int st7571_probe(struct i2c_client *client) +{ + struct drm_device *dev; + struct st7571_device *st7571; + int ret; + + st7571 = devm_drm_dev_alloc(&client->dev, &st7571_driver, + struct st7571_device, dev); + if (IS_ERR(st7571)) + return PTR_ERR(st7571); + + dev = &st7571->dev; + st7571->client = client; + i2c_set_clientdata(client, st7571); + + ret = st7571_parse_dt(st7571); + if (ret) + return ret; + + /* Create mode with parsed values */ + st7571_create_mode(st7571); + + /* + * The chip nacks some messages but still works as expected. + * If the adapter does not support protocol mangling do + * not set the I2C_M_IGNORE_NAK flag at the expense * of possible + * cruft in the logs. + */ + if (i2c_check_functionality(client->adapter, I2C_FUNC_PROTOCOL_MANGLING)) + st7571->ignore_nak = true; + + st7571->regmap = devm_regmap_init(&client->dev, &st7571_regmap_bus, + client, &st7571_regmap_config); + if (IS_ERR(st7571->regmap)) { + dev_err(&client->dev, "Failed to initialize regmap\n"); + return PTR_ERR(st7571->regmap); + } + + ret = st7571_initialize(st7571); + if (ret) + return ret; + + ret = st7571_mode_config_init(st7571); + if (ret) + return ret; + + ret = st7571_conn_init(st7571); + if (ret < 0) + return ret; + + ret = st7571_pipe_init(st7571); + if (ret < 0) + return ret; + + drm_plane_enable_fb_damage_clips(&st7571->pipe.plane); + drm_mode_config_reset(dev); + + ret = drm_dev_register(dev, 0); + if (ret) + return ret; + + drm_client_setup(dev, NULL); + return 0; +} + +static void st7571_remove(struct i2c_client *client) +{ + struct st7571_device *st7571 = i2c_get_clientdata(client); + + drm_dev_unplug(&st7571->dev); + drm_atomic_helper_shutdown(&st7571->dev); +} + +static const struct of_device_id st7571_of_match[] = { + { .compatible = "sitronix,st7571-i2c" }, + {}, +}; +MODULE_DEVICE_TABLE(of, st7571_of_match); + + +static const struct i2c_device_id st7571_id[] = { + { "st7571-i2c", 0 }, + { } +}; +MODULE_DEVICE_TABLE(i2c, st7571_id); + +static struct i2c_driver st7571_i2c_driver = { + .driver = { + .name = "st7571-i2c", + .of_match_table = st7571_of_match, + }, + .probe = st7571_probe, + .remove = st7571_remove, + .id_table = st7571_id, +}; + +module_i2c_driver(st7571_i2c_driver); + +MODULE_AUTHOR("Marcus Folkesson "); +MODULE_DESCRIPTION("DRM Driver for Sitronix ST7571 LCD controller"); +MODULE_LICENSE("GPL"); From patchwork Wed Apr 2 06:12:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcus Folkesson X-Patchwork-Id: 14035609 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5EC22C28B20 for ; Wed, 2 Apr 2025 07:23:39 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A369D10E087; Wed, 2 Apr 2025 07:23:37 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Q64eF9gb"; dkim-atps=neutral Received: from mail-lj1-f174.google.com (mail-lj1-f174.google.com [209.85.208.174]) by gabe.freedesktop.org (Postfix) with ESMTPS id F0B2310E082 for ; Wed, 2 Apr 2025 06:12:46 +0000 (UTC) Received: by mail-lj1-f174.google.com with SMTP id 38308e7fff4ca-30db1bc464dso55765641fa.0 for ; Tue, 01 Apr 2025 23:12:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743574364; x=1744179164; darn=lists.freedesktop.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=N5IKCpj0oMEBpJadgyoV7jDPfWfy4VMRLV22ZDS4/uw=; b=Q64eF9gbwliYieRSNOZ8RYHbpF4+7DmjOfJhotujJKv+agBwRWWFRfO1qMIJ0OAbOS D0vTUZU1FySmsP/s/HZBPImvGdTaxE+gbXL+MDuuF4cm337HpqSqeZ5qgheWFZYsMn0V 57WYTrjvenrvPV+yo1QgWjyYJQDBabG6yUlyiXjhSiZRycH/YWeqsKRzaEKY0X4AM4LA B2zDaKZcjXHld1Cgghws7Nt/F/GqQFzqlEezYt3VNRDJza4pBwJKj2JmtdR6hSotaf3h 8O6PO2q4aXB5chkcsdIkcPJbX+jDrv8UFfoEUFBOI31N2Jz0LHnThBTOh7VKJUMv+Apt 6AZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743574364; x=1744179164; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=N5IKCpj0oMEBpJadgyoV7jDPfWfy4VMRLV22ZDS4/uw=; b=cEV7ZNavTa55vQe2CN1X8cQj72i0mNOF4PBfSDouOiCQuv1Xk+dAL+L80s9YgButsx cjg5YjlICayvCJCrf5bhjRiPFjiqr3fh7GA6ffpnLifKSvVmAyY53+yOWw97dyfbkjyh 8lnaNipuorVPwr49OHNxtjn1cKDDsH7g0XL0JbhVWTL0ysB2NZwFo2EVEZOHHO2T5led tfx6g+hqSNrba5OaKPprB+RYeaFAVmNxKQW2BJUb3or2bhUK+f5eL+IkmJqGLIltqsXg W63lgG/fdAUtbDii6o+CHTOUO+w45zOhvZXadOjGNoGXxHYCmm/SAsoeFBkCbFM3U6R1 Z/xA== X-Gm-Message-State: AOJu0YxhfkcUbHLt1Em72nhsmC4wZE07ajypsAQLIJQJwE5Zm7+bR0ks bsVdt9UQAgR5G7s5M3+oORFxVBb/biUHkyNIZ2yIrpOHMJKolfkM X-Gm-Gg: ASbGncuYP52uVf10VDWxdEs7hNeoEfkf0T5R1drG+Qg7WdziaFocuKctPCFda6rKlZX WAaOrCv+7N5RAl6j9n/HDv43SoiKEvRcxKPAGNtPOBXanaVLVqGSmuN67SYvHGYGWya4Sf1uAuh /KMXFBnje4uGBMJw4l6SvxWlOux7ZC8B2IUtGbxK4GSJWN0ooluQlhJb4SxSTX466LdgUnt8P4w i5AOop9OrkKwf57O93Ohm89qX7iHHuqTUlaU1oA2Q7NK8KZHm2PbZXhRoTiJbNwT0Y9HBf/7gMH wk7VER56oElSskZQjZoSFiHS6oKXagBFEpO/b3j7WTDDzKTV7rtt5j2MrRJx+51+3VPv30tUkLp D1tNZqUQBZR2c X-Google-Smtp-Source: AGHT+IE3Xek1eWBz2rPg/t6DOGrGPCI4yOiCOyocMpZtm9LdLXUZyNdRj/gglChvFsmeZjOHr95wtw== X-Received: by 2002:a2e:bd81:0:b0:30b:c3ce:ea1f with SMTP id 38308e7fff4ca-30ef90f9907mr3124251fa.15.1743574364342; Tue, 01 Apr 2025 23:12:44 -0700 (PDT) Received: from [192.168.1.11] (83-233-6-197.cust.bredband2.com. [83.233.6.197]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-30dd2aa9118sm19336801fa.14.2025.04.01.23.12.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Apr 2025 23:12:43 -0700 (PDT) From: Marcus Folkesson Date: Wed, 02 Apr 2025 08:12:12 +0200 Subject: [PATCH 3/3] MAINTAINERS: add antry for Sitronix ST7571 LCD controller MIME-Version: 1.0 Message-Id: <20250402-st7571-v1-3-351d6b9eeb4a@gmail.com> References: <20250402-st7571-v1-0-351d6b9eeb4a@gmail.com> In-Reply-To: <20250402-st7571-v1-0-351d6b9eeb4a@gmail.com> To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Marcus Folkesson X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=957; i=marcus.folkesson@gmail.com; h=from:subject:message-id; bh=dtSEtwC8H+CpvFv+jyq4hRv6iC0m6GDU67J6rIoLIGY=; b=owEBbQKS/ZANAwAIAYiATm9ZXVIyAcsmYgBn7NVRO6OWWtMvHUt6pKtvaDRkAxJB+E4FWveSD H7kL6SpjMmJAjMEAAEIAB0WIQQFUaLotmy1TWTBLGWIgE5vWV1SMgUCZ+zVUQAKCRCIgE5vWV1S Mp5eD/9A+/xujBrr5sGpXr7f1PH4ivOZCIFLSfbwEkx/HY65z2asgyJAnubDQMywXXS0C9Ka+L4 OTnlNtwpzkj6QTK4v8Tc1RrTTxB7LwlhAY503AQAYOM08b0uaLIXLtrczqD4eFkXhThnbkNSGYE X7Jnm+5P3dVDjMETJB0ZCREBzz3142pnA63FEBOKYLWbE9rUeVnQ/zpZHuG1hM3cdNO8wBLdaHM fMaBX0e17nWAZFRCTCVcMnDY0hdenx3Q14oolOWJdvByY/DMB/UYME15AVwWuTxh2ybwyT8qzqg wpGLpQ3z2jZEw4QMkBvPf65ya/3BSuElidSCb7d4v3WEtmb7sGOjsydlAnZsUjSARc2omG0Kuce vIWkbqMwQbI0S0oKDdAvFF8rrS+6CjKbK2p5cHagEoRSF4YGmPj00eCA1H1HOvdaN6UrKkT/nmO RW58J4mBTFkgndNRg3wGZnoz8jduoDu6ZDY3oil/3H5CAKJp0OWmVCjIsncgZclxwb0YMPqUeRH sjHZrZC2Okl2JxREG77x142l8nWjx+4osKxPX6z6/6Azcjg+qc8PUvQ1P7XLlJHzI3DPc5ucyF3 qzx53gR2RQeyqfZSByiQlSBXWExZaf/6/bkWrOgH3uQwIVRwD2dlhf+Ar8qXtxtpzepIyDB6r64 xYfPdEN4d5g1H4w== X-Developer-Key: i=marcus.folkesson@gmail.com; a=openpgp; fpr=AB91D46C7E0F6E6FB2AB640EC0FE25D598F6C127 X-Mailman-Approved-At: Wed, 02 Apr 2025 07:23:36 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Add MAINTAINERS entry for the Sitronix ST7571 dot matrix LCD controller. Signed-off-by: Marcus Folkesson --- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 889bd4a59551c9bc125f94944a6e1c7e3ef2de83..00d19d45679f6d18a7e9c9e619b7642176b7ef95 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7572,6 +7572,13 @@ T: git https://gitlab.freedesktop.org/drm/misc/kernel.git F: Documentation/devicetree/bindings/display/sitronix,st7586.txt F: drivers/gpu/drm/tiny/st7586.c +DRM DRIVER FOR SITRONIX ST7571 PANELS +M: Marcus Folkesson +S: Maintained +T: git git://anongit.freedesktop.org/drm/drm-misc +F: Documentation/devicetree/bindings/display/sitronix,st7571-i2c.yaml +F: drivers/gpu/drm/tiny/st7571-i2c.c + DRM DRIVER FOR SITRONIX ST7701 PANELS M: Jagan Teki S: Maintained