From patchwork Sat Feb 22 17:58:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luca Weiss X-Patchwork-Id: 13986803 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 C97A9C021B6 for ; Sat, 22 Feb 2025 17:58:24 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A3C8F10E15C; Sat, 22 Feb 2025 17:58:17 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=lucaweiss.eu header.i=@lucaweiss.eu header.b="rPANDz/Z"; dkim-atps=neutral Received: from ahti.lucaweiss.eu (ahti.lucaweiss.eu [128.199.32.197]) by gabe.freedesktop.org (Postfix) with ESMTPS id D5AA810E0E5 for ; Sat, 22 Feb 2025 17:58:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lucaweiss.eu; s=s1; t=1740247093; bh=9sTFrUSIaXiC/a6HGkCf0NeCEy/CQy9eg6+/LWUf/z8=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=rPANDz/Zm8jng4H/W+oPivhEMXhURPJFwhlrEj8nsH7ytl/ujiS9g1OJ/rpNBs+3P 6VcXuRq9dO9qn0FmiAlKFgZfHd1/dBVvTIyrRcwlOvPIN1+8W6z5Yf1w2pNDQusjaf NaIy4cxBYYXeXHX+XVrCrnexUOPMuYTi11R4j4y4= From: Luca Weiss Date: Sat, 22 Feb 2025 18:58:04 +0100 Subject: [PATCH 1/4] dt-bindings: vendor-prefixes: document Shenzhen DJN Optronics Technology MIME-Version: 1.0 Message-Id: <20250222-fp3-display-v1-1-ccd812e16952@lucaweiss.eu> References: <20250222-fp3-display-v1-0-ccd812e16952@lucaweiss.eu> In-Reply-To: <20250222-fp3-display-v1-0-ccd812e16952@lucaweiss.eu> To: ~postmarketos/upstreaming@lists.sr.ht, phone-devel@vger.kernel.org, Neil Armstrong , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Luca Weiss X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=854; i=luca@lucaweiss.eu; h=from:subject:message-id; bh=9sTFrUSIaXiC/a6HGkCf0NeCEy/CQy9eg6+/LWUf/z8=; b=owEBbQKS/ZANAwAIAXLYQ7idTddWAcsmYgBnuhAxesS9PiufpYIyX/I5BSN7vk1/Peq4qz5G/ ABsZE+5SXKJAjMEAAEIAB0WIQQ5utIvCCzakboVj/py2EO4nU3XVgUCZ7oQMQAKCRBy2EO4nU3X Vp88D/993hkFvRFps1P7B05YZ/phVscPfzFqCsKij6rNOTddUvz2pIXPoEB/iAyU5usR71Kemlq aBC9yES5supye5j+I8mn6TRqu1gJl0Y4pNEtaWosK8xa3LH3JP4FwYzfOvjhZ6Q9xqdv6QCGTNL EOp46kViSbkNJBSOiZfZlv/I1OkHA0JzncLMKzFgTkHBk0DAKWzE8Ku6WMtZJUzXi2AYatkgB/o zx7/fpyXTNSrAMH6QDIUSepckZtNRAEyetYG0zukFLZBzCjewbOIEtVqa0UeluFJMnwi+l2maSB wCwYlPiYJTZkPNmN/mcrtxEqEIomabJtz86WfLt+KazfSIXUrwCSq5vBxNIr6qgnD7bU0kWBM2n A+Bl3n09Ac29hR3M+sOcRoXxJvX0a+gTl4Nn/gr6Q10fizhcYJx4EKFjR9jTo7czgLGV+H0aKvN fKCyDxdfzkouC1ytogG3t69V8aqAFpO2097tPXkH4b/uPbX/pCL8/bL3e0+gQ6VyLrj6ckVyDAZ 5R89Z4a4LeYFRwUqAuPkaXAqV2SmCKGDcLi51+h4raz1w60Xxu0NxodV61Yo8ywZ12nIgDWE2tN ysfd2SFJUqKPiblV5WznqaTxTU2J/R0/FgObCQ4+i2ceswF6dfLr4c/3C5t1to0esXoinfjTfz1 4HulOWWqhrRlmbg== X-Developer-Key: i=luca@lucaweiss.eu; a=openpgp; fpr=BD04DA24C971B8D587B2B8D7FAF69CF6CD2D02CD 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 the vendor prefix for DJN (http://en.djnlcd.com/). Signed-off-by: Luca Weiss --- Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml index da01616802c76830a520594a69bd6a2e0231df0d..ee2dca4f372263c7a79ea17f4a9411939bd0531a 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml @@ -390,6 +390,8 @@ patternProperties: description: Diodes, Inc. "^dioo,.*": description: Dioo Microcircuit Co., Ltd + "^djn,.*": + description: Shenzhen DJN Optronics Technology Co., Ltd "^dlc,.*": description: DLC Display Co., Ltd. "^dlg,.*": From patchwork Sat Feb 22 17:58:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luca Weiss X-Patchwork-Id: 13986804 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 DF813C021B5 for ; Sat, 22 Feb 2025 17:58:25 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 26AA410E258; Sat, 22 Feb 2025 17:58:18 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=lucaweiss.eu header.i=@lucaweiss.eu header.b="Aqa+ragB"; dkim-atps=neutral Received: from ahti.lucaweiss.eu (ahti.lucaweiss.eu [128.199.32.197]) by gabe.freedesktop.org (Postfix) with ESMTPS id D59EB10E052 for ; Sat, 22 Feb 2025 17:58:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lucaweiss.eu; s=s1; t=1740247094; bh=uOTZ6w5F/QVUfzYDDHW1oSDwuDIcbKSfDmjsbQ08n8M=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Aqa+ragBgDTY6nh25HY4HOXyRN/U9dnvsIBfc5tbSsFw96cjRzbnZki/Gi58y8bVu lL3wvitX2CgAVr9bOWw4l+XCDb5b++Be5gWJ2ZonJNi88K/ZiPecvGrrNz/8GlHIGk rHxulfQhbDXf0By0e1TsGEDtc/ae/RPNIFSbRxCI= From: Luca Weiss Date: Sat, 22 Feb 2025 18:58:05 +0100 Subject: [PATCH 2/4] dt-bindings: display: panel: Add Himax HX83112B MIME-Version: 1.0 Message-Id: <20250222-fp3-display-v1-2-ccd812e16952@lucaweiss.eu> References: <20250222-fp3-display-v1-0-ccd812e16952@lucaweiss.eu> In-Reply-To: <20250222-fp3-display-v1-0-ccd812e16952@lucaweiss.eu> To: ~postmarketos/upstreaming@lists.sr.ht, phone-devel@vger.kernel.org, Neil Armstrong , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Luca Weiss X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2253; i=luca@lucaweiss.eu; h=from:subject:message-id; bh=uOTZ6w5F/QVUfzYDDHW1oSDwuDIcbKSfDmjsbQ08n8M=; b=owEBbQKS/ZANAwAIAXLYQ7idTddWAcsmYgBnuhAy2zK2gofuVwCEFjaW4Dk7ucYCGIT+QxvYi VwdQ87xbJOJAjMEAAEIAB0WIQQ5utIvCCzakboVj/py2EO4nU3XVgUCZ7oQMgAKCRBy2EO4nU3X VjspD/0ZDU4ZmU2PbTqUxEx4jwWkjKRaUTjbndEjvWc2jRg2rIzDMFiKRlhpF2P1NpsW1VeTnRm TwRq9gGnXotpqI7HC5HM+UltpxGIVyPCJp/SAt0NpDrmmiZp8z5Oqak/kAFDOijxT42gi+s98nN rk/ObWlZRtUBHOJNlBvN8VOTqC5UV+qXvOZNh0XtAiQg7cHhxPkaNSv/Xfhfqdo1oxRq0WUpx/J rJ+JTJBgwBQQRpEMFwgjQQT+teggx3DbxUzFatL9KZq/QSXc2mZ/ZGufHhl3u/ysvOplFJQtxeZ /BbAWPCXSK1yGixEX9WLfM1W6IuIM2pTn6EWK1rcbkiLDUY4kiRLY2HSFqOlhB48JWHfLI+Gqo6 UGm1SN+W2rgKrcOBNA76ZRbspwU53/ggGKSXu436XM3go+qg3UdcZmR6qVJji16OvtRnG5pySs5 zxcOhaP4XqjSA89A1OI9YmT/zkt8X54ppk9hKl4GmFf2W/RGv9DCicbo4oZ5w/9cv9Q+qNISWff MJGvV5jZx2BQVzADYJphc2XhSXaf0uj+5rYKIhVnHUXftT8S7un4L+OeYU0ueXTgcx4PsBmz7gn IyjDNE4xCIijXJJZ+GHAZpc9e38gKeLXvxYV4TieZsuGtkDqTvlNCCTXYT/0V9LKACQCG4tJcgY fb0TU7eXXM7UXdg== X-Developer-Key: i=luca@lucaweiss.eu; a=openpgp; fpr=BD04DA24C971B8D587B2B8D7FAF69CF6CD2D02CD 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" Himax HX83112B is a display driver IC used to drive LCD DSI panels. Describe it and the Fairphone 3 panel from DJN using it. Signed-off-by: Luca Weiss --- .../bindings/display/panel/himax,hx83112b.yaml | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/Documentation/devicetree/bindings/display/panel/himax,hx83112b.yaml b/Documentation/devicetree/bindings/display/panel/himax,hx83112b.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e6bd4b33d40be98e479d84617aea6d2af0df70e4 --- /dev/null +++ b/Documentation/devicetree/bindings/display/panel/himax,hx83112b.yaml @@ -0,0 +1,75 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/panel/himax,hx83112b.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Himax HX83112B-based DSI display panels + +maintainers: + - Luca Weiss + +description: + The Himax HX83112B is a generic DSI Panel IC used to control + LCD panels. + +allOf: + - $ref: panel-common.yaml# + +properties: + compatible: + contains: + const: djn,fairphone-fp3-panel + + reg: + maxItems: 1 + + iovcc-supply: + description: I/O voltage rail + + vsn-supply: + description: Positive source voltage rail + + vsp-supply: + description: Negative source voltage rail + + port: true + +required: + - compatible + - reg + - reset-gpios + - iovcc-supply + - vsn-supply + - vsp-supply + - port + +unevaluatedProperties: false + +examples: + - | + #include + + dsi { + #address-cells = <1>; + #size-cells = <0>; + + panel@0 { + compatible = "djn,fairphone-fp3-panel"; + reg = <0>; + + reset-gpios = <&tlmm 61 GPIO_ACTIVE_LOW>; + + iovcc-supply = <&pm8953_l6>; + vsn-supply = <&pmi632_lcdb_ncp>; + vsp-supply = <&pmi632_lcdb_ldo>; + + port { + panel_in_0: endpoint { + remote-endpoint = <&dsi0_out>; + }; + }; + }; + }; + +... From patchwork Sat Feb 22 17:58:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luca Weiss X-Patchwork-Id: 13986802 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 C0DE0C021B2 for ; Sat, 22 Feb 2025 17:58:23 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A1CC410E0E5; Sat, 22 Feb 2025 17:58:17 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=lucaweiss.eu header.i=@lucaweiss.eu header.b="Ni+5jsBW"; dkim-atps=neutral Received: from ahti.lucaweiss.eu (ahti.lucaweiss.eu [128.199.32.197]) by gabe.freedesktop.org (Postfix) with ESMTPS id DA86E10E15C for ; Sat, 22 Feb 2025 17:58:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lucaweiss.eu; s=s1; t=1740247094; bh=DLlM/zIk2mJj+8LyDcVP/WgvP7lc/bPIn0VwmGnPM9k=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Ni+5jsBWKmfWnZTV8oxEXtSosiHVZGQEB+SZ6JvLutqhSOqPUzu+0CcKAzQkP8UDd PRDroZVTnvVa4/BYspAtzfzBScmTMV7R+yNYc53TdLh2XsmUGW1cY33bki+gP4eG7T MegfNHt8P6cUJCkNkKVrK8mDiNOx31Jl4xfCxWH8= From: Luca Weiss Date: Sat, 22 Feb 2025 18:58:06 +0100 Subject: [PATCH 3/4] drm/panel: Add driver for DJN HX83112B LCD panel MIME-Version: 1.0 Message-Id: <20250222-fp3-display-v1-3-ccd812e16952@lucaweiss.eu> References: <20250222-fp3-display-v1-0-ccd812e16952@lucaweiss.eu> In-Reply-To: <20250222-fp3-display-v1-0-ccd812e16952@lucaweiss.eu> To: ~postmarketos/upstreaming@lists.sr.ht, phone-devel@vger.kernel.org, Neil Armstrong , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Luca Weiss X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=18929; i=luca@lucaweiss.eu; h=from:subject:message-id; bh=DLlM/zIk2mJj+8LyDcVP/WgvP7lc/bPIn0VwmGnPM9k=; b=owEBbQKS/ZANAwAIAXLYQ7idTddWAcsmYgBnuhAzvkIvj132zMZ7O+gNK3LjIv5T+CTIdf6of jHNeoS+EjmJAjMEAAEIAB0WIQQ5utIvCCzakboVj/py2EO4nU3XVgUCZ7oQMwAKCRBy2EO4nU3X VmxbD/9iEu9In7BnfBzw46sHPSorsMzLt3miy5GA/gChg2VXTuvwlhtbQEukIyFhTwXi4Fy1Hqv a7mXoOnEtFs3K4cVOfm4ax3bPCRY8ujWZ0qcJ63i+cYNCGIatjgaaKPxBp/AU6V2tw90AAaZcJ6 XgaDUBQdCADjqojcMlCnGpohraPW/urLpQDlnLVAv8P9Eh3fQuC1OOpy2rnCj0rdpiWw5N8z07v B9Gnhpw5ctBV0PU7rVYXYXDNIYPEn0kJ55ZeVJ3mcWyWchCxRpcOIF2BHds/CI7O3OARZkAjn0k uegOP3j36Yjiuhupoln8cbmblukxz6wOffPr0ucbjt/3zr9uc6lKsYgk4I94DZTpS5uXvF1+A01 OGyUofnEnfnzXdF8jTFcDsjV1xPZxg6oAsmCUXhGJJZ5vgwPRLKOkMDDEJUYbn3BBZMjau7VSji 4YtUa+NZcHmjSwYI0z0eEc9ZGjNhMzNxr71bDoYpAtm2w159BnXmU4ggNf6wzUQvexKERilbP5E si3GpZJEthDp3zXHaRs75wCY/n9LucGAgByogp6X7jHqAC3XlQLyRryeKjCvfH++bmg/rEfnM2b dGCbsy9eI+GhLkmxO0Lh2N7IbtS/UC4E9hy4pKTFs8oz72SYtrOTeKrHrLYybfHvSSocTRvHYfK yMkkvne/ToiFgWQ== X-Developer-Key: i=luca@lucaweiss.eu; a=openpgp; fpr=BD04DA24C971B8D587B2B8D7FAF69CF6CD2D02CD 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 support for the 2160x1080 LCD panel from DJN bundled with a HX83112B driver IC, as found on the Fairphone 3 smartphone. Signed-off-by: Luca Weiss --- drivers/gpu/drm/panel/Kconfig | 10 + drivers/gpu/drm/panel/Makefile | 1 + drivers/gpu/drm/panel/panel-himax-hx83112b.c | 430 +++++++++++++++++++++++++++ 3 files changed, 441 insertions(+) diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig index d7469c565d1db8b8e974dd6c45d03d9352d99d63..b32e300c563a3fd94134d61140f66cad18b4ebb6 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -173,6 +173,16 @@ config DRM_PANEL_HIMAX_HX83112A Say Y here if you want to enable support for Himax HX83112A-based display panels, such as the one found in the Fairphone 4 smartphone. +config DRM_PANEL_HIMAX_HX83112B + tristate "Himax HX83112B-based DSI panel" + depends on OF + depends on DRM_MIPI_DSI + depends on BACKLIGHT_CLASS_DEVICE + select DRM_KMS_HELPER + help + Say Y here if you want to enable support for Himax HX83112B-based + display panels, such as the one found in the Fairphone 3 smartphone. + config DRM_PANEL_HIMAX_HX8394 tristate "HIMAX HX8394 MIPI-DSI LCD panels" depends on OF diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile index 7dcf72646cacff11bab90c78e3b8b1f357e5f14a..6257c3cd48b57b808c95c2e535f5624fd0e06efa 100644 --- a/drivers/gpu/drm/panel/Makefile +++ b/drivers/gpu/drm/panel/Makefile @@ -18,6 +18,7 @@ obj-$(CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02) += panel-feixin-k101-im2ba02.o obj-$(CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D) += panel-feiyang-fy07024di26a30d.o obj-$(CONFIG_DRM_PANEL_HIMAX_HX83102) += panel-himax-hx83102.o obj-$(CONFIG_DRM_PANEL_HIMAX_HX83112A) += panel-himax-hx83112a.o +obj-$(CONFIG_DRM_PANEL_HIMAX_HX83112B) += panel-himax-hx83112b.o obj-$(CONFIG_DRM_PANEL_HIMAX_HX8394) += panel-himax-hx8394.o obj-$(CONFIG_DRM_PANEL_ILITEK_IL9322) += panel-ilitek-ili9322.o obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9341) += panel-ilitek-ili9341.o diff --git a/drivers/gpu/drm/panel/panel-himax-hx83112b.c b/drivers/gpu/drm/panel/panel-himax-hx83112b.c new file mode 100644 index 0000000000000000000000000000000000000000..031531b47a8814071bc5b7f5f28ed48ba08dab80 --- /dev/null +++ b/drivers/gpu/drm/panel/panel-himax-hx83112b.c @@ -0,0 +1,430 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree. + * Copyright (c) 2025 Luca Weiss + */ + +#include +#include +#include +#include +#include +#include + +#include