From nobody Fri Jun 19 22:21:31 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (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 5257C2F9984 for ; Tue, 21 Apr 2026 17:29:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776792558; cv=none; b=rrY0zmBmgYIWlJsQojTZ68dYMhvIMXUFDS0fD/DYKL2TEa/DXynR7soNkufO1kX1imvXs1JT02j7R8cf8n6sfm4bcHVjKhgttypZnyFDrwW+R6RLdLNQwS7BJ3g0RdaBX324B96RJKNaemt6mt2JumV4gdY5o0XpsAui2UQsN1s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776792558; c=relaxed/simple; bh=VT6F7pP5zpkVt+Q6oy48vr3dMiUpqgOtr+S2bUDTP+s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IV8QSOO8XHZt/9Jho6PlYVSO/XJ0lgCcEmuSAqZEf8yO123v8RRcR2oeYEWqsoeu1KwDVQN6LkPXo9hSEWDD8zC8ugyzf/7CrMZM1hZyL7ioLuMxz/V5sbeR6F+oDk0JLz8scrzmUQDrVdMVxOou2+CMIUmSVD2O8gXaNctPrCM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=A+/qwkjI; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="A+/qwkjI" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4891f625344so26854905e9.0 for ; Tue, 21 Apr 2026 10:29:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776792555; x=1777397355; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LH2h0hmWtthS7ZoPVC0SQxbSn/Bs9GnEe+2qEICPqmg=; b=A+/qwkjIRSxhjPxF20/zJ827jm/u6U4BKlt42hPjfZulRlfKRrp2TQ+CJwNYNVkOhh Zbq319qujBTv+QNM9nz/budKqx+xVnuJOdEasgSfigqeN21fgnUvn2O4WwWA214/4G/5 lkq7y5SZ5aQGIV06nKjHJiIHaisBnA51NeGdefX90DpL8OnM2fXidw/3iD7nlLoXZ0s6 pcfO3Aj2qJFpDJAcIVTVehbELzfR3bcXBxTR2srS+uZWTvq0D2QQ3UwxxW9szQJ+/Xsi MOXKNjcXE5Wr43agko72ElD+ue0QHDB1DNaH5Ig8K4erSZOQKAColBJpNlo8HmMIWbIK dDSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776792555; x=1777397355; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=LH2h0hmWtthS7ZoPVC0SQxbSn/Bs9GnEe+2qEICPqmg=; b=kYKsuMmP8j4KQB3MJ8IIpuC9MIqRADNnWZO+LTlHxFUgf+ydosDhA0s18GkB0Zd0Hc hz2+LT1QhfWTRsCYE3YjQp1nWab8FLclhvEkHdSvSMquZxSMuakNvC1MT3W9eMwmBCw5 ATpyinAPHL5/k6wN0MetUh9utmvWHnp2IILE80K31j0XXF+u6SJ+l71x1vCvJQYdCCER 85RIaODuFwMXg1ketfCMf7VkZ9bUUJMise9AjUlHLV4ptOVTsGYENNaUenbp0ftn2k7s vDic/GpMQD5e92hLqmjTyn3oNd1CUN1Q5eQpTwzP6Wy92w5VOvYrLOwiQOX0g9XcVHAv Zgjw== X-Forwarded-Encrypted: i=1; AFNElJ8pkY+CLEZkaXI2+T5IaxNLyx9CjcM5l9WbOnYukp1pMVOO08Vfe7i2aPzbYgDsUGe+2JPCDMeJiPUaEhY=@vger.kernel.org X-Gm-Message-State: AOJu0Yw8uiFk0PZ/Y1OFhzAhsq03Wt4TUb081PIZVolZzFZGasspcZ2O 8p5VRWru5vuog/DQ/AzsgGFtT3jCrqj5yN1FV14hmabRP4brp8LEblsi X-Gm-Gg: AeBDiesptTDNUpMAlD8wWljlYDsPYMMKrVv09GgXNUbCCBcq35fMK1jg+WBPQBTIh5B 8lDq5hJQ1dRKZwxTL5qD61o99SN+XtKEae6EZofWVR5ydl55/DeVBjAhB6R5GyIuP17ZTbX8We8 34QmHVOKC6iS5ANTHatoJ0f3TMDhpV1TFXdpuFzJBO8hOahuQmYxCPx5nEfMLn1FlzE0HOxBG14 kXQgN0HFhAFQp9/KkdpgzgI4FGpbMMjSqpceWPFM63ut1sv08N8Fb74u4yAspqVZ2EypHJAoaQz 8KiKmo9ZbXF3pmzaEfWTSYKqR+Eh2Ia4rWAsJBaTIXDXVw1tnFMI9H0enIsSqlAs4pLjAlERUhW DANd3o8Li0mDtbm+zC/6u1+drmIbVH7X5/vy0aUaQaydjIngv3pQS464SQK6esQgouchausIeAZ RShLWrm9h8cWCMj07hw+Jl0a99Kvpnzjl/2dvZrlu8phYecNwcvU+JY/bj3xs= X-Received: by 2002:a05:600c:c112:b0:486:fe83:861c with SMTP id 5b1f17b1804b1-488fb896910mr211023925e9.7.1776792555368; Tue, 21 Apr 2026 10:29:15 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a758:8a01:de57:c37d:677b:c772]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a525a0b1asm57445855e9.2.2026.04.21.10.29.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Apr 2026 10:29:15 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Geert Uytterhoeven , Magnus Damm Cc: Biju Das , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Prabhakar Mahadev Lad , Biju Das , Tommaso Merciai , Conor Dooley Subject: [PATCH v2 1/3] dt-bindings: mfd: syscon: Document the LVDS_CMN syscon for the RZ/G3L Date: Tue, 21 Apr 2026 18:29:03 +0100 Message-ID: <20260421172910.218497-2-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260421172910.218497-1-biju.das.jz@bp.renesas.com> References: <20260421172910.218497-1-biju.das.jz@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Biju Das The RZ/G3{E,L} SoCs have an LVDS Common (LVDS_CMN) region which is common to all LVDS channels. The RZ/G3L has single-link, but the RZ/G3E has both single and dual-link. Use the syscon interface to access these registers for scalability. Signed-off-by: Tommaso Merciai Acked-by: Conor Dooley Signed-off-by: Biju Das --- v1->v2: * Collected tag. --- Documentation/devicetree/bindings/mfd/syscon.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/mfd/syscon.yaml b/Documentat= ion/devicetree/bindings/mfd/syscon.yaml index e22867088063..9c81010d5a74 100644 --- a/Documentation/devicetree/bindings/mfd/syscon.yaml +++ b/Documentation/devicetree/bindings/mfd/syscon.yaml @@ -221,6 +221,7 @@ properties: - nxp,s32g3-gpr - qcom,apq8064-mmss-sfpb - qcom,apq8064-sps-sic + - renesas,r9a08g046-lvds-cmn - rockchip,px30-qos - rockchip,rk3036-qos - rockchip,rk3066-qos --=20 2.43.0 From nobody Fri Jun 19 22:21:31 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (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 7B344304972 for ; Tue, 21 Apr 2026 17:29:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776792560; cv=none; b=IHNakkzm5nVikEz4M7dKOvqKkqEK+LY2pXfXNEJZKTucLo7jsJh8aoMoL7ZNbUBLXq2HbebNFHKqS/fGJRK4xkulgPo+piAb87UJg2dhCdf6oKcwstyzJIdXpZJT99ZPI7N67539QDNk9s0LYJWZOEwuOo79TRdziz6CqwZBJ/E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776792560; c=relaxed/simple; bh=Ps1/0vkkzrRtMA4BgvshaoM7YLzQaURgvp8bGQL24aE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M7NyAtPMsCtSglhpkcj6UeCUlsqnRbGXJ5WpjKOl/cFkInP57nOf1JYGEajEbhlApdCuV9W81dUyxrd/D7t6v3qUx/nIwe4DwSIvXo36x+dl/T1ujP/KH4xGIG+eMueLrqA2pUANnEluC8IVZ8JOi2QPotqZ3y/snf8539D3M2A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XuJQxFzf; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XuJQxFzf" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-488e1a8ac40so57433395e9.2 for ; Tue, 21 Apr 2026 10:29:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776792557; x=1777397357; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nXrLm53G+XO/vzNjvyvj6ec5ugmd6jDhCT4ykP0A6dc=; b=XuJQxFzfYTjVdx3qpNUXlakyhVm+xbzdHWUWaiTXNvNiAnsUxNvfhoE/HLqRDSSZyp T5a6u9J0uiUd+hhkWTsuwLg/UaW+8vOuRBO72ApBhr+T9jcJevwdH4FTR2MZx2lYEyeZ OhUPDQP1pTrc7Aun9+ehxbXnMdoUl7AnCmgoITk0o6X3Oz8RR/yPrEqsyCmiZTPbTE/Z A36zREp4ncB4xZL5N1PFbRrxWfcPZiKcXbVsVfQ8r1uBS07zwNigVZeBdpq7f2w94iNJ U8EcUBjkMJ+6F/Hw4FujO1OmZDgM+q7le8AY9UVYVZseSsviPfSChxHYvqAEx/qBIBho jO/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776792557; x=1777397357; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=nXrLm53G+XO/vzNjvyvj6ec5ugmd6jDhCT4ykP0A6dc=; b=Ps+9gJRLkuBg5OYznO/cInQyzK8XrKb/mRMLbPbn78+Is4mBFuBA13NCxXmm1+odxt gJe+vAjerSjZekTpy6iJFc/WUf6wl052z7rJe9oudkpf6w+wesPHVSFYLeXgiQAlRSjU 7fwWbK873bkEWY9/ACLUKkxU2weRG5WXOW6lw34CvnGXogLLsnFXfrIZO1NDGFjKaNRF 5EoHABaFEdWjzfHoHHtp9Z3cEijVJtx7Yf7p3p8Qmwj0vnLdIH+s+umjyqGeOm3p/t4s QjjNc3mgVo/DM+RPX2Zltc/oBqQVf0DzSrzX12eldO01oMYcjFNO4zZq4dGuUjpwOJpR QVvg== X-Forwarded-Encrypted: i=1; AFNElJ/U3Pc5yT20TCyxRrKCeNepEWOA//GTM+PeihwXMrbyAUDwvyts4kOkj2lchRpcVv99bTMd9ZehQTiX2m8=@vger.kernel.org X-Gm-Message-State: AOJu0Ywjqw5cyih5v0InjmbZXOUkPmu64g7bnsYy587btJEHbAxNvQic C69ZIxzjcqAcuhxNjnvlNi6ggsskX1CXIqrwH3bDDQhlBvH6AT+L6BAR X-Gm-Gg: AeBDievKcBfvOb7iXFhE6BoLSZ5tGUb4gD0vl4DRbZQ8k3KJ2z2Kd+f1y99DTy+/orx ZK8X6tGX6JzYQhYBj/bstc0J/x8w4AZtGedXRc192PRNUAfKv0WGavAxAIPEc5qfryF+aU7KAlM 3X7fqCZXiXaZXYiWsUcM4qQu/uFPS7FiI4zl8/gTbKltW6rshD+tkLf6sL0ouXtzimaLe97XcCm JirNqrPacF/nP0uzeY5s9LPA9cOyHifdyhpSK9f/4LYrUHnoMlClimNZgo+KLhpDGEU2X1T1BMB HMqYiPQLNcHwWy4GOZ52Bny/LvqR/e9pvHQdGMls9EHGuq6CHFvu36oybNSUH/O5d884dJt7uu0 9/UfM6TE3XwFkTPqMwaaslGvPCsv6WGABL7Z+YrkHyaGd+hHOPs5/ECKrCeAT8MsI7Djkm4TeaO C1NbLrgd/lLG2uJ4BOQoxT6ScRIdrJosqZZqfqUqP6kJKiEvZ+LOVdqjs7Nos= X-Received: by 2002:a05:600c:8b2e:b0:488:b749:8482 with SMTP id 5b1f17b1804b1-488fb7469b3mr295630145e9.4.1776792556705; Tue, 21 Apr 2026 10:29:16 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a758:8a01:de57:c37d:677b:c772]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a525a0b1asm57445855e9.2.2026.04.21.10.29.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Apr 2026 10:29:16 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Geert Uytterhoeven , Magnus Damm Cc: Biju Das , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Tommaso Merciai , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Prabhakar Mahadev Lad , Biju Das , Conor Dooley Subject: [PATCH v2 2/3] dt-bindings: display: bridge: Document Renesas RZ/G3L LVDS encoder Date: Tue, 21 Apr 2026 18:29:04 +0100 Message-ID: <20260421172910.218497-3-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260421172910.218497-1-biju.das.jz@bp.renesas.com> References: <20260421172910.218497-1-biju.das.jz@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Biju Das Document the LVDS encoder IP found on the RZ/G3L SoC. It supports single-link mode. LVDS and the DSI interface share a peripheral clock and the MIPI_DSI_PRESET_N reset signal. However, the LVDS module cannot be used at the same time as MIPI-DSI. Signed-off-by: Tommaso Merciai Acked-by: Conor Dooley Signed-off-by: Biju Das --- v1->v2: * Collected tag. --- .../bridge/renesas,r9a08g046-lvds.yaml | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/bridge/renesa= s,r9a08g046-lvds.yaml diff --git a/Documentation/devicetree/bindings/display/bridge/renesas,r9a08= g046-lvds.yaml b/Documentation/devicetree/bindings/display/bridge/renesas,r= 9a08g046-lvds.yaml new file mode 100644 index 000000000000..b1f6d020ae7b --- /dev/null +++ b/Documentation/devicetree/bindings/display/bridge/renesas,r9a08g046-lv= ds.yaml @@ -0,0 +1,128 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/bridge/renesas,r9a08g046-lvds.y= aml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas RZ/G3L LVDS Encoder + +maintainers: + - Biju Das + - Tommaso Merciai + +description: | + This binding describe the LVDS encoder embedded in the Renesas RZ/G3L + SoC. The encoder can operate in LVDS Single-link mode with 4 lanes + (Data) + 1 lane (Clock). + +properties: + compatible: + const: renesas,r9a08g046-lvds + + reg: + maxItems: 1 + + clocks: + items: + - description: Peripheral clock + - description: PHY clock + - description: Dot clock + + clock-names: + items: + - const: pclk + - const: phyclk + - const: dotclk + + resets: + items: + - description: LVDS_RESET_N + - description: MIPI_DSI_PRESET_N + - description: MIPI_DSI_CMN_RSTB + - description: MIPI_DSI_ARESET_N + + reset-names: + items: + - const: lvdrst + - const: prst + - const: rst + - const: arst + + power-domains: + maxItems: 1 + + ports: + $ref: /schemas/graph.yaml#/properties/ports + + properties: + port@0: + $ref: /schemas/graph.yaml#/properties/port + description: Input channel, directly connected to the Display Unit. + + port@1: + $ref: /schemas/graph.yaml#/properties/port + description: | + Output channel, directly connected to the LVDS panel or bridge. + + required: + - port@0 + - port@1 + +required: + - compatible + - reg + - clocks + - clock-names + - resets + - reset-names + - power-domains + - ports + +additionalProperties: false + +examples: + - | + #include + + lvds-cmn@108a0000 { + compatible =3D "renesas,r9a08g046-lvds-cmn", + "simple-mfd", "syscon"; + reg =3D <0x108a0000 0x10000>; + #address-cells =3D <1>; + #size-cells =3D <1>; + + lvds0: lvds@10 { + compatible =3D "renesas,r9a08g046-lvds"; + reg =3D <0x10 0x8>; + clocks =3D <&cpg CPG_MOD R9A08G046_MIPI_DSI_PCLK>, + <&cpg CPG_MOD R9A08G046_LVDS_PLLCLK>, + <&cpg CPG_MOD R9A08G046_LVDS_CLK_DOT0>; + clock-names =3D "pclk", "phyclk", "dotclk"; + resets =3D <&cpg R9A08G046_LVDS_RESET_N>, + <&cpg R9A08G046_MIPI_DSI_PRESET_N>, + <&cpg R9A08G046_MIPI_DSI_CMN_RSTB>, + <&cpg R9A08G046_MIPI_DSI_ARESET_N>; + reset-names =3D "lvdrst", "prst", "rst", "arst"; + power-domains =3D <&cpg>; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0>; + lvds0_in: endpoint { + remote-endpoint =3D <&du_out_lvds0>; + }; + }; + + port@1 { + reg =3D <1>; + lvds0_out: endpoint { + remote-endpoint =3D <&panel_in>; + }; + }; + }; + }; + }; +... --=20 2.43.0 From nobody Fri Jun 19 22:21:31 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (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 9D74F306D2A for ; Tue, 21 Apr 2026 17:29:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776792563; cv=none; b=Ga8frDK0+82pjp7ZPyCdkC9JNVHIqL8XuR0xd1FVwgVk8bFWdmvwSGPoOgCg54bs+YLpcAh1nDWh4aAeWTxy46frmNgPh2qyvUmWKTwEnIRGCxiNlY73A8nOHhu2j4oSRd+QZzjJDATHGBk8RFd4RbXYvs903+jN2M+mZydCHvw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776792563; c=relaxed/simple; bh=2xm5CEmROHLJtK6rw42iI632IYWA6Y9otPAb7imiYFE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PKgRD5al7MFECNHGIPKpvg2AI3SUK0gKkr2d28NZ5Zsg7xApIpEVno3pDeqpgc3ggRTBAQbYs/Ic8EcSQ+ilhF4s3MMXirF0RI71NSsWrjP9RTnAK2c3clnOr3wGafs5p416BuEkbsms+YNBhvK/4pS5JfjVM0KQ9z4AidL3d50= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mxGq58a+; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mxGq58a+" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-488af9fdaa7so28672535e9.1 for ; Tue, 21 Apr 2026 10:29:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776792558; x=1777397358; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4Eo4cos6iOs2QlAA15r5L7hzrPOpyuNUq7YQebe52Hk=; b=mxGq58a+iDhAmp05fIM1zsc9aYuyafR75NEqb4sElwqaC+uBJodI7lJrWeXftf/iVt gPVFQXb7gnlCRoxKFN1NwAphqEXve/IJvq2qSp+0PODWy1xPycrd2GylFcxPpoe7ZQAA w56KVGKTpu/NChDabNC+4YyuFKlTU5UZ6Co3PBwbzT/N9lFuydpUO67pR72jKG7T1J5U zh6of7QJTjv8vrvCbdc2JlX99nX60CFN0DxvLFXG9047CyY09rs2RDjp/kXgwU5F5m5Q b9nqPtAEhN96XLXmWOe1dA9Q2JxhRS83Popzt1rm5FpuxnevmdbHNfBElGgS4AyX7sOW /9Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776792558; x=1777397358; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=4Eo4cos6iOs2QlAA15r5L7hzrPOpyuNUq7YQebe52Hk=; b=pnV/WYtDH6Hi091Hugu9qp1zuR0S1pJDHHXQt36ptozJoRnhVFeMg76SsbqVDlnwFD 4p+JYZs5WcJk4wUh8kdwIWY8MxPDkhCrsKpvJYZUT2DtxsRj57d6Bt3/u15qbYl2Gd6G jVZ0lWUKbz062KKEGTVzOSCA+Fjr1p/S2WIkHQUO8h9j2hFuYdEtTmK8fo+90lPwYSgn U2Q1UrfxVG+3C5yE0kSkqzUT4FU6egpCpukjZipT4xD/CiBwGpsha66ukx8ZDDQ4agPb qmtPAmfilJ/glkY0OSffrsCTsuU1NhKQxSe1WpxwZGyaGix2W492FlgE1s/LG8Jyb+SC x4TA== X-Gm-Message-State: AOJu0YwskpckO16YHU5jm3WWZ9SVVqi/Q4IbXdKBGqsfWXVP53PTNNLM zQS+vDUjQNUtFoarzxE8WKPBSjxaLd7XBIUzprUifK4xB1Flz3tnfP58 X-Gm-Gg: AeBDievegfkY3c1XgK95jRoitX9dG46fypbReNmiK+ywalpj4LGOyVFCJELpvwdn5hM lbmEHGrIrHd9U5Xlc82nPmakGu4k7HffKt0SYyzUAjhmFOIKMSoCwAbE5WtJIdEFfqFwtNsKd/p GId5KGpwf01dmDfOSA/hXbjUdidTIs3p62x7KL+hn9lWP6tabJq48UJsIBq8oUWddmg3aXdLFOR CLd9y7iNYek1O1L+vJ87+cjBAezswF+f7U2PH8m2xmb821rTegcw1MPaLiVfSrpKQnHm5szGzsi TnPHoHq71SblXe272vJd1id5/A0TAtSrYMxB4RrnSqzW5JdFobKtrc0mdz6vh5Nhd92GACfrBIJ pMWx2l45zxDDMNxg2H6YpWaIzW9y/Z/sXSrYqRDY3hYA2UjhXMr5y/cHsfKAL/sJgUdcRHH+GIQ gbh7RcMjscksOQ9Nd84y2iHvUG/hM2u4PMpaDnc966phuKEnBP/1nk6oERY98= X-Received: by 2002:a05:600c:8587:b0:488:a797:f0ac with SMTP id 5b1f17b1804b1-488fb7880bdmr189424205e9.28.1776792557801; Tue, 21 Apr 2026 10:29:17 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a758:8a01:de57:c37d:677b:c772]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a525a0b1asm57445855e9.2.2026.04.21.10.29.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Apr 2026 10:29:17 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Biju Das , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philipp Zabel , Geert Uytterhoeven , Magnus Damm Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, Prabhakar Mahadev Lad , Biju Das , Tommaso Merciai Subject: [PATCH v2 3/3] drm: renesas: rz-du: Add support for RZ/G3L LVDS encoder Date: Tue, 21 Apr 2026 18:29:05 +0100 Message-ID: <20260421172910.218497-4-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260421172910.218497-1-biju.das.jz@bp.renesas.com> References: <20260421172910.218497-1-biju.das.jz@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Biju Das Add support for the RZ/G3L LVDS encoder driver. It operates in single-link mode with 4 lanes (Data) + 1 lane (Clock) and supports pixel clock rates from 25 to 87 MHz. The LVDS module cannot be used at the same time as MIPI-DSI. However, LVDS and the DSI interface share a peripheral clock and the MIPI_DSI_PRESET_N reset signal. Also, the MIPI_DSI_CMN_RSTB and MIPI_DSI_ARESET_N reset signals must be asserted before using the LVDS module. Signed-off-by: Tommaso Merciai Signed-off-by: Biju Das --- v1->v2: * Dropped unused function rzg3l_lvds_is_connected() and removed the=20 corresponding header file rzg3l_lvds.h * Dropped next_bridge from struct rzg3l_lvds instead using bridge's next_bridge. * Replaced pm_runtime_resume_and_get()->pm_runtime_get_sync() as atomic_enable doesn't fail and for each enable there always will be an atomic_disable() call. * Started using DEFINE_RUNTIME_DEV_PM_OPS for PM callback. * Replaced rzg3l_lvds_parse_dt() with devm_drm_of_get_bridge() in probe() * Started using reset_control_bulk_*() in rzg3l_lvds_pm_runtime_{suspend, resume}() --- drivers/gpu/drm/renesas/rz-du/Kconfig | 13 + drivers/gpu/drm/renesas/rz-du/Makefile | 1 + drivers/gpu/drm/renesas/rz-du/rzg3l_lvds.c | 285 ++++++++++++++++++ .../gpu/drm/renesas/rz-du/rzg3l_lvds_regs.h | 26 ++ 4 files changed, 325 insertions(+) create mode 100644 drivers/gpu/drm/renesas/rz-du/rzg3l_lvds.c create mode 100644 drivers/gpu/drm/renesas/rz-du/rzg3l_lvds_regs.h diff --git a/drivers/gpu/drm/renesas/rz-du/Kconfig b/drivers/gpu/drm/renesa= s/rz-du/Kconfig index 7f2ef7137ae5..cbfc7b6bccb8 100644 --- a/drivers/gpu/drm/renesas/rz-du/Kconfig +++ b/drivers/gpu/drm/renesas/rz-du/Kconfig @@ -26,3 +26,16 @@ config DRM_RZG2L_MIPI_DSI def_tristate DRM_RZG2L_DU depends on DRM_RZG2L_USE_MIPI_DSI select DRM_MIPI_DSI + +config DRM_RZG3L_USE_LVDS + bool "RZ/G3L DU LVDS Encoder Support" + depends on DRM_BRIDGE && OF + default DRM_RZG2L_DU + help + Enable support for the RZ/G3L Display Unit embedded LVDS encoders. + +config DRM_RZG3L_LVDS + def_tristate DRM_RZG2L_DU + depends on DRM_RZG3L_USE_LVDS + select DRM_KMS_HELPER + select DRM_PANEL diff --git a/drivers/gpu/drm/renesas/rz-du/Makefile b/drivers/gpu/drm/renes= as/rz-du/Makefile index 2987900ea6b6..46decb7ac4f1 100644 --- a/drivers/gpu/drm/renesas/rz-du/Makefile +++ b/drivers/gpu/drm/renesas/rz-du/Makefile @@ -8,3 +8,4 @@ rzg2l-du-drm-$(CONFIG_VIDEO_RENESAS_VSP1) +=3D rzg2l_du_vsp= .o obj-$(CONFIG_DRM_RZG2L_DU) +=3D rzg2l-du-drm.o =20 obj-$(CONFIG_DRM_RZG2L_MIPI_DSI) +=3D rzg2l_mipi_dsi.o +obj-$(CONFIG_DRM_RZG3L_LVDS) +=3D rzg3l_lvds.o diff --git a/drivers/gpu/drm/renesas/rz-du/rzg3l_lvds.c b/drivers/gpu/drm/r= enesas/rz-du/rzg3l_lvds.c new file mode 100644 index 000000000000..60fd63b7be93 --- /dev/null +++ b/drivers/gpu/drm/renesas/rz-du/rzg3l_lvds.c @@ -0,0 +1,285 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * RZ/G3L LVDS Encoder Driver + * + * Copyright (C) 2026 Renesas Electronics Corporation + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "rzg3l_lvds_regs.h" + +enum rzg3l_lvds_mode { + RZG3L_LVDS_MODE_JEIDA =3D 0, + RZG3L_LVDS_MODE_JEIDA_MIRROR =3D 1, + RZG3L_LVDS_MODE_MODE2 =3D 2, + RZG3L_LVDS_MODE_MODE2_MIRROR =3D 3, + RZG3L_LVDS_MODE_VESA =3D 4, + RZG3L_LVDS_MODE_VESA_MIRROR =3D 5, + RZG3L_LVDS_MODE_MODE6 =3D 6, + RZG3L_LVDS_MODE_MODE6_MIRROR =3D 7, +}; + +struct rzg3l_lvds { + struct device *dev; + struct reset_control *prstc; + struct reset_control *lvd_rstc; + struct regmap *regmap; + struct drm_bridge bridge; +}; + +#define bridge_to_rzg3l_lvds(b) \ + container_of(b, struct rzg3l_lvds, bridge) + +/* -----------------------------------------------------------------------= ------ + * Bridge + */ + +static void rzg3l_lvds_atomic_enable(struct drm_bridge *bridge, + struct drm_atomic_state *state) +{ + struct rzg3l_lvds *lvds =3D bridge_to_rzg3l_lvds(bridge); + const struct drm_bridge_state *bridge_state; + int ret; + u32 fmt; + + /* Get the LVDS format from the bridge state. */ + bridge_state =3D drm_atomic_get_new_bridge_state(state, bridge); + if (!bridge_state) { + dev_err(lvds->dev, "failed to get bridge state\n"); + return; + } + + switch (bridge_state->output_bus_cfg.format) { + case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA: + fmt =3D RZG3L_LVDS_MODE_JEIDA; + break; + case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG: + fmt =3D RZG3L_LVDS_MODE_VESA; + break; + default: + fmt =3D RZG3L_LVDS_MODE_VESA; + dev_warn(lvds->dev, "Unsupported bus fmt 0x%04x\n", + bridge_state->output_bus_cfg.format); + break; + } + + ret =3D pm_runtime_get_sync(lvds->dev); + if (ret < 0) { + dev_err(lvds->dev, "pm_runtime_get_sync error\n"); + return; + } + + regmap_update_bits(lvds->regmap, LVDS_0_PHY_OFFSET, + LVDS_0_PHY_CH_EN_BGR, LVDS_0_PHY_CH_EN_BGR); + fsleep(20); + + regmap_update_bits(lvds->regmap, LVDS_0_PHY_OFFSET, + LVDS_0_PHY_CH_EN_LDO, LVDS_0_PHY_CH_EN_LDO); + fsleep(10); + + regmap_write(lvds->regmap, LVDS_CMN, LVDS_CMN_RST_PHY0_SEL); + regmap_update_bits(lvds->regmap, LVDS_0_CTL_OFFSET, + LVDS_0_CTL_FMT_SEL_MSK, + FIELD_PREP(LVDS_0_CTL_FMT_SEL_MSK, fmt)); + regmap_update_bits(lvds->regmap, LVDS_0_PHY_OFFSET, + LVDS_0_PHY_CH_IO_EN_MSK, LVDS_0_PHY_CH_IO_EN); + regmap_write(lvds->regmap, LVDS_CMN, + LVDS_CMN_RST_PHY0_SEL | LVDS_CMN_PHY_RESET); + fsleep(100); +} + +static void rzg3l_lvds_atomic_disable(struct drm_bridge *bridge, + struct drm_atomic_state *state) +{ + struct rzg3l_lvds *lvds =3D bridge_to_rzg3l_lvds(bridge); + + regmap_update_bits(lvds->regmap, LVDS_CMN, LVDS_CMN_PHY_RESET, 0); + regmap_update_bits(lvds->regmap, LVDS_0_PHY_OFFSET, + LVDS_0_PHY_CH_IO_EN_MSK, 0); + regmap_update_bits(lvds->regmap, LVDS_0_PHY_OFFSET, + LVDS_0_PHY_CH_EN_LDO, 0); + regmap_update_bits(lvds->regmap, LVDS_0_PHY_OFFSET, + LVDS_0_PHY_CH_EN_BGR, 0); + + pm_runtime_put(lvds->dev); +} + +static int rzg3l_lvds_attach(struct drm_bridge *bridge, + struct drm_encoder *encoder, + enum drm_bridge_attach_flags flags) +{ + struct rzg3l_lvds *lvds =3D bridge_to_rzg3l_lvds(bridge); + + if (!lvds->bridge.next_bridge) + return 0; + + return drm_bridge_attach(encoder, lvds->bridge.next_bridge, bridge, flags= ); +} + +static enum drm_mode_status +rzg3l_lvds_bridge_mode_valid(struct drm_bridge *bridge, + const struct drm_display_info *info, + const struct drm_display_mode *mode) +{ + if (mode->clock > 87000) + return MODE_CLOCK_HIGH; + + if (mode->clock < 25000) + return MODE_CLOCK_LOW; + + return MODE_OK; +} + +static const struct drm_bridge_funcs rzg3l_lvds_bridge_ops =3D { + .attach =3D rzg3l_lvds_attach, + .atomic_duplicate_state =3D drm_atomic_helper_bridge_duplicate_state, + .atomic_destroy_state =3D drm_atomic_helper_bridge_destroy_state, + .atomic_reset =3D drm_atomic_helper_bridge_reset, + .atomic_enable =3D rzg3l_lvds_atomic_enable, + .atomic_disable =3D rzg3l_lvds_atomic_disable, + .mode_valid =3D rzg3l_lvds_bridge_mode_valid, +}; + +/* -----------------------------------------------------------------------= ------ + * Power Management + */ + +static int rzg3l_lvds_pm_runtime_suspend(struct device *dev) +{ + struct rzg3l_lvds *lvds =3D dev_get_drvdata(dev); + struct reset_control_bulk_data resets[] =3D { + { .rstc =3D lvds->lvd_rstc }, + { .rstc =3D lvds->prstc }, + }; + + return reset_control_bulk_assert(ARRAY_SIZE(resets), resets); +} + +static int rzg3l_lvds_pm_runtime_resume(struct device *dev) +{ + struct rzg3l_lvds *lvds =3D dev_get_drvdata(dev); + struct reset_control_bulk_data resets[] =3D { + { .rstc =3D lvds->prstc }, + { .rstc =3D lvds->lvd_rstc }, + }; + + return reset_control_bulk_deassert(ARRAY_SIZE(resets), resets); +} + +static DEFINE_RUNTIME_DEV_PM_OPS(rzg3l_lvds_pm_ops, + rzg3l_lvds_pm_runtime_suspend, + rzg3l_lvds_pm_runtime_resume, NULL); + +/* -----------------------------------------------------------------------= ------ + * Probe & Remove + */ + +static int rzg3l_lvds_probe(struct platform_device *pdev) +{ + struct reset_control *rstc, *arstc; + struct device *dev =3D &pdev->dev; + struct drm_bridge *next_bridge; + struct rzg3l_lvds *lvds; + int ret; + + lvds =3D devm_drm_bridge_alloc(dev, struct rzg3l_lvds, bridge, + &rzg3l_lvds_bridge_ops); + if (IS_ERR(lvds)) + return PTR_ERR(lvds); + + lvds->dev =3D dev; + lvds->bridge.of_node =3D pdev->dev.of_node; + + lvds->regmap =3D syscon_node_to_regmap(dev->of_node->parent); + if (IS_ERR(lvds->regmap)) + return PTR_ERR(lvds->regmap); + + rstc =3D devm_reset_control_get_optional_exclusive(dev, "rst"); + if (IS_ERR(rstc)) + return dev_err_probe(dev, PTR_ERR(rstc), "failed to get rst\n"); + + arstc =3D devm_reset_control_get_optional_exclusive(dev, "arst"); + if (IS_ERR(arstc)) + return dev_err_probe(dev, PTR_ERR(arstc), + "failed to get arst\n"); + + lvds->prstc =3D devm_reset_control_get_shared(dev, "prst"); + if (IS_ERR(lvds->prstc)) + return dev_err_probe(dev, PTR_ERR(lvds->prstc), + "failed to get prst\n"); + + lvds->lvd_rstc =3D devm_reset_control_get_shared(dev, "lvdrst"); + if (IS_ERR(lvds->lvd_rstc)) + return dev_err_probe(dev, PTR_ERR(lvds->lvd_rstc), + "failed to get core reset\n"); + + platform_set_drvdata(pdev, lvds); + ret =3D devm_pm_runtime_enable(dev); + if (ret) + return dev_err_probe(dev, ret, "Failed to enable Runtime PM\n"); + + next_bridge =3D devm_drm_of_get_bridge(dev, dev->of_node, 1, 0); + if (IS_ERR(next_bridge)) + return dev_err_probe(dev, PTR_ERR(next_bridge), + "failed to get next bridge\n"); + + lvds->bridge.next_bridge =3D next_bridge; + ret =3D reset_control_assert(rstc); + if (ret < 0) + return ret; + + ret =3D reset_control_assert(arstc); + if (ret < 0) + return ret; + + ret =3D devm_drm_bridge_add(dev, &lvds->bridge); + if (ret) + return dev_err_probe(dev, ret, + "Failed to register drm bridge\n"); + + return ret; +} + +static const struct of_device_id rzg3l_lvds_of_table[] =3D { + { .compatible =3D "renesas,r9a08g046-lvds" }, + { /* sentinel */ } +}; + +MODULE_DEVICE_TABLE(of, rzg3l_lvds_of_table); + +static struct platform_driver rzg3l_lvds_platform_driver =3D { + .probe =3D rzg3l_lvds_probe, + .driver =3D { + .name =3D "rzg3l-lvds", + .pm =3D pm_ptr(&rzg3l_lvds_pm_ops), + .of_match_table =3D rzg3l_lvds_of_table, + }, +}; + +module_platform_driver(rzg3l_lvds_platform_driver); + +MODULE_AUTHOR("Biju Das "); +MODULE_AUTHOR("Tommaso Merciai "); +MODULE_DESCRIPTION("Renesas RZ/G3L LVDS Encoder Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/gpu/drm/renesas/rz-du/rzg3l_lvds_regs.h b/drivers/gpu/= drm/renesas/rz-du/rzg3l_lvds_regs.h new file mode 100644 index 000000000000..281b7648f168 --- /dev/null +++ b/drivers/gpu/drm/renesas/rz-du/rzg3l_lvds_regs.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * RZ/G3L LVDS Interface Registers Definitions + * + * Copyright (C) 2026 Renesas Electronics Corporation + * + */ + +#ifndef __RZG3L_LVDS_REGS_H__ +#define __RZG3L_LVDS_REGS_H__ + +#define LVDS_CMN 0x00 +#define LVDS_CMN_RST_PHY0_SEL (1 << 24) +#define LVDS_CMN_RST_PHY0_SEL_CH0 (1 << 24) +#define LVDS_CMN_PHY_RESET (1 << 0) + +#define LVDS_0_PHY_OFFSET 0x10 +#define LVDS_0_PHY_CH_IO_EN_MSK (0x1f) +#define LVDS_0_PHY_CH_IO_EN (LVDS_0_PHY_CH_IO_EN_MSK << 0) +#define LVDS_0_PHY_CH_EN_BGR BIT(8) +#define LVDS_0_PHY_CH_EN_LDO BIT(9) + +#define LVDS_0_CTL_OFFSET 0x14 +#define LVDS_0_CTL_FMT_SEL_MSK GENMASK(23, 20) + +#endif /* __RZG3L_LVDS_REGS_H__ */ --=20 2.43.0