From nobody Fri Sep 25 23:49:23 2026 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (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 F22D1478E38 for ; Mon, 7 Sep 2026 11:52:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788781963; cv=none; b=fAaUWQ3c/RbDmhZMcJJRROQuMGWXG89nprkxlK1GD3g3ioZQWvdIh08Rl7gGHjvWawpVCPFSiQ+/e+eKvC4wru9wQLLWu71vF0z05mEFIqPI4G78BiXY7NNGofdMw0dMWzQi0pLrH9pLFcpC5f9x32MH0toeCNnFQLpDs1Wn0Dg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788781963; c=relaxed/simple; bh=qTroyC/eouHh6FV6jHO0fBzSC5cZJgKW04iNQGXGDys=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HMLuJePQIFsO42eyfeyTZtPXEbbFFjk3s78hECu0pNr2SZ0Zaj69xT7KiBllaojauDuTKGzMiUxGXssm/J/fh9WZVE3BPAz6BpsXfOsjK+wSvnegl1PoT8GdlIodUwavf1PEt0Yzl30s3SHROxas8xYRVJv0n34gm5t97AtOtYg= 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=AOZ3+MrF; arc=none smtp.client-ip=209.85.221.54 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="AOZ3+MrF" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-482ea739de2so2319608f8f.0 for ; Mon, 07 Sep 2026 04:52:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788781960; x=1789386760; 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:content-type; bh=tKFJorjn7zfsDROh07dztN5ti3ZHf/iVGFIzCs+Axs0=; b=AOZ3+MrFOBjYEEJpmKmf3AUpZSDuM2NKTjJRIElU3Z5EF9GeBIl4m7o8AOj14fw2Uq 8N1cWOYgEvIvt4X3B2DDqmJUn/qjzLUleiSUqe2vFarPzrdefg36AgYFtDnqonQQxMjT yRZlf33qwp5gNYg9VUVi/FpXs5E/2EHXJ7ZICjBVn4daBH81du1TkWw5J1wjNf9bOXlP QWdIYc8u5gs2J5hYvCJUFN7LUZF/L07NR01Mbvdd1qYqoJ028AcZfE1g43YVnTCGk+YH Vwwjar/OyjxNcDXv16S9gszRWRZ7iVEdl9xkCsCHMpHYl14cl63WZiLSC4y9oxVURViR a58w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788781960; x=1789386760; 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:content-type; bh=tKFJorjn7zfsDROh07dztN5ti3ZHf/iVGFIzCs+Axs0=; b=b/G2sZ+nN9yZcjw2uKFh4OZm3/oT569vm6cyYOL22jWR6oJPPveDRnFNBANqMqiUNC ClSh1zlZCBtJLmF2tpShUzM3+FbfUXiaanb+8pVgmO2qzzZYnP/g6plUA0uZTeOz2/UG W+tWvqiUeVavz3Qd6ouD8DRP8NTCPV1MxKwhxsa/qX0wS0e83l7SgNuyexJE4p77V2XG 3gtiQcpLjJnRLCy4qJ4nlKONPoPNrLB4ion0+7O2rqg3Wpxa2HpNrMnkb1aorxYWguhv JN0qg9kYS5qub167eixIzANsR7To/VY7yTQyMi4ZCRHzu+azxLT+9tfFyequCHGYmVIf LsSA== X-Forwarded-Encrypted: i=1; AKwUvByFZSlqX1hpihdS4mUIL2BSEyzKNEWA+BvpLYKsdIJDTUnd2ed+CwtQM2Mi37MWY75y/7MCTE9IwxUd9ww=@vger.kernel.org X-Gm-Message-State: AFuF++lLRtG/ftp17i7fyNvolZgbxmObfKSUCRDGyJMNGHH28BHFDWD9 Buk1GyBMIbihJTK4XBy0occzUw+ejRTxkJzAyq7iRq2UuTdQnxHUZLHX X-Gm-Gg: AYBFou0s/Uf95/LgCRdQnAfU/ibhmRd/v+eR0qiu2ZfNajRsaDlZrAygi55UYEJJNtK GG8Ct7WfimnWvua42pQKJOtcALiljFcqwVga1ZtsphMr7dlQPXzr3J77TAbwEK4mL03CwkyLije mNsF8dSROs8SxrXugM4ajojy6vlF7NR/WcGzc419YUNpIYmp75ZEaEXv/avaPEDUlmKJI+f0VwV qJGyGwDbFo97OvYGMJaGiojIEL01PXpKQ/QP7EMBCe+1D9aTidxNGVlZW0g5dQSDcBV20e8HECM Qk4ZepdripgTCX2ACxml5W4KA/8Qc1Si99kSmNTVdIPi/GpByZZxhAM6w/8mFncNFmRiwlS/G99 yRPEHxS0aksJ/x26zvpSORl/ktscjV0BaxAPbeLutEX8qfJZOntvMG0GSOoHcVP4zGClbjeqW5Z n1gVoZYdvytH/zbJyPbgBkCUTYmz2AbHPw3rqKaMe3wQlQXj6wcUfZRCNcHE5xQ05a X-Received: by 2002:a05:6000:220f:b0:485:8c16:a350 with SMTP id ffacd0b85a97d-4858c16a62emr20292762f8f.40.1788781960074; Mon, 07 Sep 2026 04:52:40 -0700 (PDT) Received: from Empers0n ([193.23.219.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4858d2693e8sm26830718f8f.3.2026.09.07.04.52.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Sep 2026 04:52:39 -0700 (PDT) From: Vsevolod Nevorotov To: neil.armstrong@linaro.org, robh@kernel.org, krzk+dt@kernel.org Cc: jesszhan0024@gmail.com, conor+dt@kernel.org, airlied@gmail.com, simona@ffwll.ch, mripard@kernel.org, tzimmermann@suse.de, maarten.lankhorst@linux.intel.com, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Vsevolod Nevorotov Subject: [PATCH 1/2] dt-bindings: display: panel: Add Samsung AMS662ZS01 Date: Mon, 7 Sep 2026 18:51:29 +0700 Message-ID: <20260907115130.95394-2-sevanevorotov29@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260907115130.95394-1-sevanevorotov29@gmail.com> References: <20260907115130.95394-1-sevanevorotov29@gmail.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" Add Device Tree binding documentation for the Samsung AMS662ZS01 FHD+ AMOLED DSI panel found in the OnePlus 9RT smartphone. Signed-off-by: Vsevolod Nevorotov --- .../display/panel/samsung,ams662zs01.yaml | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/panel/samsung= ,ams662zs01.yaml diff --git a/Documentation/devicetree/bindings/display/panel/samsung,ams662= zs01.yaml b/Documentation/devicetree/bindings/display/panel/samsung,ams662z= s01.yaml new file mode 100644 index 00000000000..b2697d140ed --- /dev/null +++ b/Documentation/devicetree/bindings/display/panel/samsung,ams662zs01.ya= ml @@ -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/samsung,ams662zs01.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Samsung AMS662ZS01 DSI Display Panel + +maintainers: + - Vsevolod Nevorotov + +allOf: + - $ref: panel-common.yaml# + +properties: + compatible: + const: samsung,ams662zs01 + + reg: + maxItems: 1 + + reset-gpios: + maxItems: 1 + + vout-gpios: + maxItems: 1 + description: Panel VOUT enable GPIO line + + vddio-supply: + description: 1.8V I/O power supply + + vdd-supply: + description: 3.0V core power supply + + port: true + +required: + - compatible + - reg + - reset-gpios + - vddio-supply + - vdd-supply + - port + +additionalProperties: false + +examples: + - | + #include + + dsi { + #address-cells =3D <1>; + #size-cells =3D <0>; + + panel@0 { + compatible =3D "samsung,ams662zs01"; + reg =3D <0>; + + reset-gpios =3D <&tlmm 24 GPIO_ACTIVE_LOW>; + vout-gpios =3D <&tlmm 25 GPIO_ACTIVE_HIGH>; + + vddio-supply =3D <&vreg_l12c_1p8>; + vdd-supply =3D <&vreg_l13c_3p0>; + + pinctrl-names =3D "default", "sleep"; + pinctrl-0 =3D <&mdp_vsync_active>; + pinctrl-1 =3D <&mdp_vsync_active>; + + port { + panel_in: endpoint { + remote-endpoint =3D <&mdss_dsi0_out>; + }; + }; + }; + }; --=20 2.55.0 From nobody Fri Sep 25 23:49:23 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 C62A448823A for ; Mon, 7 Sep 2026 11:52:51 +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=1788781973; cv=none; b=QkZY3NLYMFHm2wKbdDN6s1+8IHeXTrCWBKE5V5oicPCK/FTJPgz8tQvw33/kAC55y+VX2KSGzsJxhul+kJ75NCtDJW7qoPQXW9wQCmOSoVQlQ2BAwZZFidHfDVsdh8T6G8EicgJQuKSmrpTt2PTget5YYuAAwQdNxBKaYug7c1I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788781973; c=relaxed/simple; bh=amn/RFS6smWPBd7o2YH5YZXbbloLAPzDGopj96clkUs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bEEkvwJYG2OmUP32JTuCJeUxEB9GumU3SVzZH3HdNn6R5gAxNlvasZM39/ROP+BUH0VhA88G2z+5vzWnQB3Id3bLXPj4XoZFDza1pe1di7WrevuxHOUs/Evg/cUYnqqltkLS/eWuEeu/GGcIl7i2dOnDmAAmR/rEaAHrXsHpXOY= 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=S7EqESRX; arc=none smtp.client-ip=209.85.128.51 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="S7EqESRX" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-49cd77e0f95so29116795e9.3 for ; Mon, 07 Sep 2026 04:52:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788781970; x=1789386770; 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:content-type; bh=D7R3VJcHDlomCHsnFsSOZiYtq/P5zAezYH17tYJWimU=; b=S7EqESRXalBcfYg+v8yaiLIq2F4oLA2ux02488laTqQntcgKelmMcu939PprvViJcA KyBVJTaazgdH+SDgtF4JOLOolm0NBCLjiTKzeI9T07vdMrr7r25StdphdNQBhHfmXk8+ WBMckDXDYa9HgOH3/+DSL7KRZI6mJnN4i/QViqHh8E0z0HO6uZeQ02X6JqHLHYFXjp4T /aaSzLcnEnYUF0RWvKVD6nerHiFMvL0JsgUrXZGJG9n9YzT11v4sqpM2RO4w5JHu7xhx jDso3RI2o5wXlIYUWse8Sr1hHgtgbjYRHbZIUhk5Qg/+olze2I4tA8AdQ6tY5B4qFlms Qk7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788781970; x=1789386770; 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:content-type; bh=D7R3VJcHDlomCHsnFsSOZiYtq/P5zAezYH17tYJWimU=; b=n/KgBF5dscMlLMU45qkya+Q6rEBlvpVnUa9uacx68WtS+mIizNAEwLHedxTbwWziDH Ycr3NyLcXVK9jKEzX5YniKEAdP9tVw30OsWDt++62D+nA1Hh1bTGs18ZZtsEr7oN2f1r htDxDAlB52m7CcniozlmwyIZV+DDBs8dvJIJrTJXc+NPHzCKR9Zro6raRAqamHTlMcA7 IX8OEmQpKtObvHKw0JQRDDaOmNekEEfVCxNciMlOO0eLVDwv/ZhBLDO1n7gWpHEUCGhu mG9XxwXQugZDmvkAAo5ANlhsmf1cW/KOz+S87Yx9nPmPhtomSonFKGcego3Nwwig5iDt ntcQ== X-Forwarded-Encrypted: i=1; AKwUvBx39ykygTsjFMhmwWZIkSFp9bqfkXJ6/iLqsuNScP7GDnR6C/iYkBd/1UPbHq+NLdU9R7yKbogSdWc8Hjc=@vger.kernel.org X-Gm-Message-State: AFuF++l2uT9Rb6w7JkwhmLf/RWd9HP1VtSr9HD5JlfvfZ0yP+VwhqE4S WxlYJCIDzHnystswxk6aUQYC0fBVHMUBZDp5wc+/6/bAt/aizOzyousy X-Gm-Gg: AYBFou2F8UNz3+PKaEPnzYVRGXGyALmWPRFtDOun/ZlPAwscjYqAqVyQ/GeePuPqQcB 3fsMJ3Iu+0dSkvbp5KJ73b/ybO0DLgdhTmcnGgL/GisYTDr6jAc8bjyba6OtO/cZ+XyPPEPr132 mz6x+jOixHurJDhUrWYSIlHpFtiGb5+U2kd120h31xVzOdeV/M6o8X8eDaGTGVlih+e2yZPfjOT syFRP/L5CTxYLP8pL7eUVAFngjo57HqTQn0AS39Y5Ik4xxLZFzXRBZ7E4a612+jOiPAvkQEX+AS SJn5nbRrmDcHYOZNOMMYa8G7ZLdQlQGaw1zReqaKQEfoSXTMH/4zVxnfG4I4wTE7SpM2jiWkZe7 9miLVnQX4zp0uP4VYxSBfJ+BwIwMl7ZQodC5CFoUnEwuJLwugaPYmVVyn1Fanitp+c2dkadqUrf WstPxd3kZ8/km+hPgoDogst6gO15RTVBtYysS5U0SE6s3zC5anN5TkIXLiER7Et5Lr3sheKIJkN 00= X-Received: by 2002:a05:600c:4fc5:b0:49c:fe18:6dd5 with SMTP id 5b1f17b1804b1-49cfe186dfemr187825235e9.29.1788781969872; Mon, 07 Sep 2026 04:52:49 -0700 (PDT) Received: from Empers0n ([193.23.219.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4858d2693e8sm26830718f8f.3.2026.09.07.04.52.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Sep 2026 04:52:49 -0700 (PDT) From: Vsevolod Nevorotov To: neil.armstrong@linaro.org, robh@kernel.org, krzk+dt@kernel.org Cc: jesszhan0024@gmail.com, conor+dt@kernel.org, airlied@gmail.com, simona@ffwll.ch, mripard@kernel.org, tzimmermann@suse.de, maarten.lankhorst@linux.intel.com, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Vsevolod Nevorotov Subject: [PATCH 2/2] drm/panel: Add Samsung AMS662ZS01 panel driver Date: Mon, 7 Sep 2026 18:51:30 +0700 Message-ID: <20260907115130.95394-3-sevanevorotov29@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260907115130.95394-1-sevanevorotov29@gmail.com> References: <20260907115130.95394-1-sevanevorotov29@gmail.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" Add support for the Samsung AMS662ZS01 AMOLED display panel used in the OnePlus 9RT (martini) smartphone. The panel operates in Command Mode with DSC (Display Stream Compression) enabled at 1080x2400 resolution at 60Hz. Signed-off-by: Vsevolod Nevorotov --- drivers/gpu/drm/panel/Kconfig | 13 + drivers/gpu/drm/panel/Makefile | 1 + .../gpu/drm/panel/panel-samsung-ams662zs01.c | 398 ++++++++++++++++++ 3 files changed, 412 insertions(+) create mode 100644 drivers/gpu/drm/panel/panel-samsung-ams662zs01.c diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig index cbdf7b8f7f7..c94116ca42c 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -904,6 +904,19 @@ config DRM_PANEL_SAMSUNG_AMS639RQ08 Say Y or M here if you want to enable support for the Samsung AMS639RQ08 FHD Plus (2340x1080@60Hz) CMD mode panel. =20 +config DRM_PANEL_SAMSUNG_AMS662ZS01 + tristate "Samsung AMS662ZS01 panel" + depends on GPIOLIB && OF && REGULATOR + depends on DRM_MIPI_DSI + depends on BACKLIGHT_CLASS_DEVICE + select DRM_DISPLAY_HELPER + select DRM_DISPLAY_DSC_HELPER + help + Say Y or M here if you want to enable support for the + Samsung AMS662ZS01 FHD Plus (1080x2400@60Hz) DSC CMD mode panel. + This panel is connected via MIPI DSI interface and is + primarily found in the OnePlus 9RT smartphone. + config DRM_PANEL_SAMSUNG_S6E88A0_AMS427AP24 tristate "Samsung AMS427AP24 panel with S6E88A0 controller" depends on GPIOLIB && OF && REGULATOR diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile index 3b523cf3783..fc5cfc4dd6b 100644 --- a/drivers/gpu/drm/panel/Makefile +++ b/drivers/gpu/drm/panel/Makefile @@ -88,6 +88,7 @@ obj-$(CONFIG_DRM_PANEL_RENESAS_R69328) +=3D panel-renesas= -r69328.o obj-$(CONFIG_DRM_PANEL_RONBO_RB070D30) +=3D panel-ronbo-rb070d30.o obj-$(CONFIG_DRM_PANEL_SAMSUNG_AMS581VF01) +=3D panel-samsung-ams581vf01.o obj-$(CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08) +=3D panel-samsung-ams639rq08.o +obj-$(CONFIG_DRM_PANEL_SAMSUNG_AMS662ZS01) +=3D panel-samsung-ams662zs01.o obj-$(CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20) +=3D panel-samsung-atna33xc20.o obj-$(CONFIG_DRM_PANEL_SAMSUNG_DB7430) +=3D panel-samsung-db7430.o obj-$(CONFIG_DRM_PANEL_SAMSUNG_LD9040) +=3D panel-samsung-ld9040.o diff --git a/drivers/gpu/drm/panel/panel-samsung-ams662zs01.c b/drivers/gpu= /drm/panel/panel-samsung-ams662zs01.c new file mode 100644 index 00000000000..52e7e75c08b --- /dev/null +++ b/drivers/gpu/drm/panel/panel-samsung-ams662zs01.c @@ -0,0 +1,398 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Samsung AMS662ZS01 6.62" 1080x2400 AMOLED DSI command-mode panel with D= SC. + * + * Found on the OnePlus 9RT (oneplus,martini). Both panel revisions the ve= ndor + * tree carries -- "samsung ams662zs01 fhd cmd mode dsc dsi panel" and its + * dvt respin, which the martini bootloader hands off as + * msm_drm.dsi_display0=3Dqcom,mdss_dsi_samsung_ams662zs01_dvt_dsc_cmd -- = share + * one initialisation sequence and one set of timings; the revisions diffe= r only + * in the HBM/fingerprint brightness tables, which this driver does not us= e. + * + * Command sequences and timings transcribed from + * arch/arm64/boot/dts/vendor/qcom/display/dsi-panel-samsung_ams662zs01_dv= t_dsc_cmd.dtsi + * in the vendor kernel (timing0, the 60 Hz mode). + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include