Update kernel to ab/13436148

Change-Id: Ib124e6c968b36ea146ec37979e5337120adaa64d
diff --git a/BUILD.bazel b/BUILD.bazel
new file mode 100644
index 0000000..188920d
--- /dev/null
+++ b/BUILD.bazel
@@ -0,0 +1,273 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
+load(
+    "//build/kernel/kleaf:kernel.bzl",
+    "kernel_abi",
+    "kernel_build",
+    "kernel_build_config",
+    "kernel_dtstree",
+    "kernel_images",
+    "kernel_module_group",
+    "kernel_modules_install",
+    "kernel_unstripped_modules_archive",
+    "merged_kernel_uapi_headers",
+)
+load("//private/devices/google/common/kleaf:create_file.bzl", "create_file")
+load("//private/devices/google/gs201:constants.bzl", "GS201_DTBS", "GS201_MODULE_OUTS")
+load(":constants.bzl", "TANGORPRO_DTBOS", "TANGORPRO_MODULE_OUTS")
+
+exports_files(["tangorpro_defconfig"])
+
+kernel_build_config(
+    name = "build_config",
+    srcs = [
+        # do not sort
+        "//private/devices/google/gs201:build_config",
+    ],
+)
+
+kernel_dtstree(
+    name = "dtstree",
+    srcs = glob(["dts/**"]) + [
+        "//private/google-modules/soc/gs:gs.dt-bindings",
+    ],
+    makefile = "dts/Makefile",
+)
+
+create_file(
+    name = "kconfig_ext",
+    srcs = [
+        # do not sort
+        "//private/devices/google/gs201:kconfig_ext",
+        "Kconfig.ext.tangorpro",
+    ],
+    out = "Kconfig.ext",
+)
+
+filegroup(
+    name = "defconfig_fragments",
+    srcs = [
+        # do not sort
+        "//private/devices/google/gs201:defconfig_fragments",
+        "tangorpro_defconfig",
+    ],
+)
+
+filegroup(
+    name = "kernel_sources",
+    srcs = [
+        # keep sorted
+        "//private/devices/google/gs201:kernel_sources",
+        "//private/google-modules/touch/common:touch.common.kconfig",
+    ],
+)
+
+kernel_build(
+    name = "kernel",
+    srcs = [":kernel_sources"],
+    outs = [
+        ".config",
+    ] + [
+        "gs201/{}".format(dtb)
+        for dtb in GS201_DTBS
+    ],
+    base_kernel = "//common:kernel_aarch64",
+    build_config = ":build_config",
+    collect_unstripped_modules = True,
+    defconfig_fragments = [":defconfig_fragments"],
+    dtstree = ":dtstree",
+    kconfig_ext = ":kconfig_ext",
+    kmi_symbol_list = "//common:android/abi_gki_aarch64_pixel",
+    make_goals = [
+        "modules",
+        "dtbs",
+    ],
+    module_outs = GS201_MODULE_OUTS + TANGORPRO_MODULE_OUTS,
+    strip_modules = True,
+)
+
+kernel_build(
+    name = "_dtbos",
+    srcs = [":kernel_sources"],
+    outs = TANGORPRO_DTBOS,
+    base_kernel = "//common:kernel_aarch64",
+    build_config = ":build_config",
+    dtstree = ":dtstree",
+    make_goals = ["dtbs"],
+)
+
+filegroup(
+    name = "dtbos",
+    srcs = [":_dtbos/" + dtbo for dtbo in TANGORPRO_DTBOS],
+    visibility = ["//private/devices/google/gs201:__subpackages__"],
+)
+
+kernel_module_group(
+    name = "kernel_ext_modules",
+    srcs = [
+        # FIXME: SoC modules need to be loaded first or the device will crash.
+        #        Module dependencies should not rely on the order. This needs be fixed.
+        "//private/devices/google/gs201:kernel_ext_modules",
+    ] + [
+        # keep sorted
+        "//private/devices/google/tangorpro/display:drm_panel.google",
+        "//private/devices/google/tangorpro/pogo:pogo_transport",
+        "//private/google-modules/amplifiers/cs35l41",
+        "//private/google-modules/amplifiers/snd_soc_wm_adsp:snd-soc-wm-adsp",
+        "//private/google-modules/bluetooth/broadcom:bluetooth.broadcom",
+        "//private/google-modules/fingerprint/fpc",
+        "//private/google-modules/gps/broadcom/bcm47765",
+        "//private/google-modules/touch/common:touch.common",
+        "//private/google-modules/touch/common/usi:touch.common.usi",
+        "//private/google-modules/touch/novatek/nt36xxx",
+        "//private/google-modules/uwb/qorvo/dw3000/kernel:uwb.dw3000",
+        "//private/google-modules/wlan/dhd43752p:synadhd",
+    ],
+    visibility = ["//private/devices/google/gs201:__subpackages__"],
+)
+
+kernel_modules_install(
+    name = "kernel_modules_install",
+    kernel_build = ":kernel",
+    kernel_modules = [":kernel_ext_modules"],
+)
+
+kernel_unstripped_modules_archive(
+    name = "kernel_unstripped_modules_archive",
+    kernel_build = ":kernel",
+    kernel_modules = [":kernel_ext_modules"],
+)
+
+merged_kernel_uapi_headers(
+    name = "merged_kernel_uapi_headers",
+    kernel_build = ":kernel",
+    kernel_modules = [":kernel_ext_modules"],
+)
+
+create_file(
+    name = "vendor_ramdisk_modules_list",
+    srcs = [
+        # do not sort
+        "//private/devices/google/gs201:vendor_ramdisk_modules_list",
+        "vendor_ramdisk.modules.tangorpro",
+    ],
+    out = "vendor_ramdisk.modules",
+)
+
+create_file(
+    name = "system_dlkm_modules_list",
+    srcs = ["//private/devices/google/gs201:system_dlkm_modules_list"],
+    out = "system_dlkm.modules",
+)
+
+create_file(
+    name = "system_dlkm_props",
+    srcs = ["//private/devices/google/gs201:system_dlkm_props"],
+    out = "system_dlkm.props",
+)
+
+create_file(
+    name = "vendor_dlkm_modules_list",
+    srcs = ["//private/devices/google/gs201:vendor_dlkm_modules_list"],
+    out = "vendor_dlkm.modules",
+)
+
+create_file(
+    name = "vendor_dlkm_modules_blocklist",
+    srcs = [
+        # do not sort
+        "//private/devices/google/gs201:vendor_dlkm_modules_blocklist",
+        "vendor_dlkm.blocklist.tangorpro",
+    ],
+    out = "vendor_dlkm.blocklist",
+)
+
+create_file(
+    name = "vendor_dlkm_props",
+    srcs = ["//private/devices/google/gs201:vendor_dlkm_props"],
+    out = "vendor_dlkm.props",
+)
+
+filegroup(
+    name = "insmod_cfgs",
+    srcs = glob(["insmod_cfg/*.cfg"]),
+)
+
+kernel_images(
+    name = "kernel_images",
+    base_kernel_images = "//common:kernel_aarch64_images",
+    # TODO: b/362627953 - Remove dtb.img
+    boot_image_outs = [
+        "dtb.img",
+        "vendor_kernel_boot.img",
+    ],
+    build_dtbo = True,
+    build_initramfs = True,
+    build_system_dlkm = True,
+    build_vendor_dlkm = True,
+    build_vendor_kernel_boot = True,
+    dtbo_srcs = [":dtbos"],
+    kernel_build = ":kernel",
+    kernel_modules_install = ":kernel_modules_install",
+    modules_list = ":vendor_ramdisk_modules_list",
+    ramdisk_compression = "lz4",
+    system_dlkm_modules_list = ":system_dlkm_modules_list",
+    system_dlkm_props = ":system_dlkm_props",
+    vendor_dlkm_archive = True,
+    vendor_dlkm_etc_files = [":insmod_cfgs"],
+    vendor_dlkm_modules_blocklist = ":vendor_dlkm_modules_blocklist",
+    vendor_dlkm_modules_list = ":vendor_dlkm_modules_list",
+    vendor_dlkm_props = ":vendor_dlkm_props",
+    deps = ["//private/devices/google/common:sepolicy"],
+)
+
+copy_to_dist_dir(
+    name = "dist",
+    data = [
+        # keep sorted
+        ":dtbos",
+        ":insmod_cfgs",
+        ":kernel",
+        ":kernel_images",
+        ":kernel_modules_install",
+        ":kernel_unstripped_modules_archive",
+        ":merged_kernel_uapi_headers",
+        "//common:android/abi_gki_aarch64_pixel",
+        "//common:kernel_aarch64",
+        "//common:kernel_aarch64_gki_boot_image",
+        "//common:kernel_aarch64_headers",
+        "//private/devices/google/common:kernel_gki_modules",
+    ] + select({
+        "//private/devices/google/common:enable_download_fips140": ["@gki_prebuilt_fips140//fips140.ko"],
+        "//private/devices/google/common:disable_download_fips140": [],
+    }),
+    dist_dir = "out/tangorpro/dist",
+    flat = True,
+    log = "info",
+)
+
+# For ABI monitoring
+kernel_abi(
+    name = "kernel_abi",
+    kernel_build = ":kernel",
+    kernel_modules = [":kernel_ext_modules"],
+    kmi_symbol_list_add_only = True,
+    module_grouping = False,
+)
+
+# For compatibility
+alias(
+    name = "gs201_soc.tangorpro",
+    actual = "//private/devices/google/gs201:gs201_soc",
+)
+
+alias(
+    name = "gs201_tangorpro_dist",
+    actual = ":dist",
+)
+
+alias(
+    name = "gs201_tangorpro_abi_update_symbol_list",
+    actual = ":kernel_abi_update_symbol_list",
+)
diff --git a/Kconfig.ext.tangorpro b/Kconfig.ext.tangorpro
new file mode 100644
index 0000000..069c50b
--- /dev/null
+++ b/Kconfig.ext.tangorpro
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+source "$(KCONFIG_EXT_MODULES_PREFIX)private/google-modules/touch/common/Kconfig"
diff --git a/build_tangorpro.sh b/build_tangorpro.sh
new file mode 100755
index 0000000..59720a0
--- /dev/null
+++ b/build_tangorpro.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+parameters=
+if [ "${BUILD_AOSP_KERNEL}" = "1" ]; then
+  echo "WARNING: BUILD_AOSP_KERNEL is deprecated." \
+    "Use --kernel_package=@//aosp instead." >&2
+  parameters="--kernel_package=@//aosp"
+fi
+
+if [ "${BUILD_STAGING_KERNEL}" = "1" ]; then
+  echo "WARNING: BUILD_STAGING_KERNEL is deprecated." \
+    "Use --kernel_package=@//aosp-staging instead." >&2
+  parameters="--kernel_package=@//aosp-staging"
+fi
+
+exec tools/bazel run \
+    ${parameters} \
+    --config=stamp \
+    --config=tangorpro \
+    //private/devices/google/tangorpro:gs201_tangorpro_dist "$@"
diff --git a/constants.bzl b/constants.bzl
new file mode 100644
index 0000000..5b5f502
--- /dev/null
+++ b/constants.bzl
@@ -0,0 +1,23 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+"""
+Tangorpro constants.
+"""
+
+TANGORPRO_DTBOS = [
+    "gs201-tangorpro-dev2.dtbo",
+    "gs201-tangorpro-evt2.dtbo",
+    "gs201-tangorpro-evt2-bezelblack.dtbo",
+    "gs201-tangorpro-evt2-wingboard.dtbo",
+    "gs201-tangorpro-dvt1.dtbo",
+    "gs201-tangorpro-pvt1.dtbo",
+    "gs201-tangorpro-mp.dtbo",
+]
+
+TANGORPRO_MODULE_OUTS = [
+    # keep sorted
+    "drivers/leds/leds-pwm.ko",
+    "drivers/regulator/rt4801-regulator.ko",
+    "drivers/regulator/tps65132-regulator.ko",
+    "drivers/video/backlight/lp855x_bl.ko",
+]
diff --git a/device.bazelrc b/device.bazelrc
new file mode 100644
index 0000000..dd06dd0
--- /dev/null
+++ b/device.bazelrc
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# Copyright (C) 2022 Google LLC
+
+build:tangorpro --//private/devices/google/common:kernel=//private/devices/google/tangorpro:kernel
+build:tangorpro --//private/google-modules/soc/gs:gs_soc_module=//private/devices/google/tangorpro:gs201_soc.tangorpro
diff --git a/display/BUILD.bazel b/display/BUILD.bazel
new file mode 100644
index 0000000..81624af
--- /dev/null
+++ b/display/BUILD.bazel
@@ -0,0 +1,29 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+load("//build/kernel/kleaf:kernel.bzl", "kernel_module")
+
+kernel_module(
+    name = "drm_panel.google",
+    srcs = glob([
+        "**/*.c",
+        "**/*.h",
+    ]) + [
+        "Kbuild",
+        "//private/google-modules/display/samsung:headers",
+        "//private/google-modules/display/samsung/include:headers",
+        "//private/google-modules/soc/gs:gs_soc_headers",
+    ],
+    outs = [
+        "panel-boe-ts110f5mlg0.ko",
+        "panel-csot-ppa957db2d.ko",
+    ],
+    kernel_build = "//private/devices/google/common:kernel",
+    visibility = [
+        "//private/devices/google:__subpackages__",
+        "//private/google-modules/display:__pkg__",
+        "//private/google-modules/soc/gs:__pkg__",
+    ],
+    deps = [
+        "//private/google-modules/display/samsung:display.samsung",
+    ],
+)
diff --git a/display/Kbuild b/display/Kbuild
new file mode 100644
index 0000000..8521c31
--- /dev/null
+++ b/display/Kbuild
@@ -0,0 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0
+
+obj-$(CONFIG_DRM_PANEL_BOE_TS110F5MLG0)		+= panel-boe-ts110f5mlg0.o
+obj-$(CONFIG_DRM_PANEL_CSOT_PPA957DB2D)		+= panel-csot-ppa957db2d.o
diff --git a/display/Makefile b/display/Makefile
new file mode 100644
index 0000000..3c9f8b2
--- /dev/null
+++ b/display/Makefile
@@ -0,0 +1,21 @@
+M ?= $(shell pwd)
+
+KBASE_PATH_RELATIVE = $(M)
+
+KBUILD_OPTIONS += CONFIG_DRM_PANEL_BOE_TS110F5MLG0=m
+KBUILD_OPTIONS += CONFIG_DRM_PANEL_CSOT_PPA957DB2D=m
+
+EXTRA_CFLAGS += -DDYNAMIC_DEBUG_MODULE=1
+EXTRA_CFLAGS += -I$(KERNEL_SRC)/../private/google-modules/display/common/include
+EXTRA_CFLAGS += -I$(KERNEL_SRC)/../private/google-modules/display/samsung
+EXTRA_CFLAGS += -I$(KERNEL_SRC)/../private/google-modules/display/samsung/include/uapi
+EXTRA_CFLAGS += -Werror
+
+EXTRA_SYMBOLS += $(OUT_DIR)/../private/google-modules/display/samsung/Module.symvers
+
+modules modules_install clean:
+	$(MAKE) -C $(KERNEL_SRC) M=$(M) W=1 \
+	$(KBUILD_OPTIONS) \
+	EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
+	KBUILD_EXTRA_SYMBOLS="$(EXTRA_SYMBOLS)" \
+	$(@)
diff --git a/display/panel-boe-ts110f5mlg0.c b/display/panel-boe-ts110f5mlg0.c
new file mode 100644
index 0000000..6468b1d
--- /dev/null
+++ b/display/panel-boe-ts110f5mlg0.c
@@ -0,0 +1,683 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * MIPI-DSI based BOE TS110F5M-LG0 LCD panel driver.
+ *
+ * Copyright (c) 2021 Google Inc.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_platform.h>
+#include <linux/kthread.h>
+#include <uapi/linux/sched/types.h>
+#include <video/mipi_display.h>
+
+#include "panel/panel-samsung-drv.h"
+
+#define TS110F5MLG0_WRCTRLD_DD_BIT	0x08
+#define TS110F5MLG0_WRCTRLD_BL_BIT	0x04
+#define TS110F5MLG0_WRCTRLD_BCTRL_BIT	0x20
+#define TS110F5MLG0_PANEL_ID_REG	0x00
+#define TS110F5MLG0_PANEL_ID_LEN	37
+
+#if TS110F5MLG0_PANEL_ID_LEN >= PANEL_ID_MAX
+	#error PANEL_ID_MAX should be greater than TS110F5MLG0_PANEL_ID_LEN
+#endif
+
+static const u8 display_on[] = { 0x29 };
+static const u8 display_off[] = { 0x28 };
+static const u8 sleep_out[] = { 0x11 };
+static const u8 sleep_in[] = { 0x10 };
+
+static const u32 ts110f5mlg0_panel_rev[] = {
+	PANEL_REV_PROTO1,
+	PANEL_REV_PROTO2,
+	PANEL_REV_EVT1,
+	PANEL_REV_EVT1_1,
+	PANEL_REV_EVT2,
+	PANEL_REV_DVT1,
+	PANEL_REV_PVT,
+};
+
+static const struct exynos_dsi_cmd ts110f5mlg0_init_cmds[] = {
+	/* CMD2, Page0 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x20),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	EXYNOS_DSI_CMD_SEQ(0x5A, 0x14),
+
+	/* CMD2, Page3 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x23),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* 12 bits PWM */
+	EXYNOS_DSI_CMD_SEQ(0x00, 0x80),
+	/* PWM freq 3kHz */
+	EXYNOS_DSI_CMD_SEQ(0x08, 0x04),
+	/* APL_THD */
+	EXYNOS_DSI_CMD_SEQ(0x11, 0x02),
+	EXYNOS_DSI_CMD_SEQ(0x12, 0x80),
+	/* APL_COMP */
+	EXYNOS_DSI_CMD_SEQ(0x15, 0x83),
+	EXYNOS_DSI_CMD_SEQ(0x16, 0x0C),
+
+	/* CMD2, Page5 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x25),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	EXYNOS_DSI_CMD_SEQ(0x13, 0x02),
+	EXYNOS_DSI_CMD_SEQ(0x14, 0x41),
+
+	/* CMD2, Page6 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x26),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	EXYNOS_DSI_CMD_SEQ(0x01, 0xB0),
+	EXYNOS_DSI_CMD_SEQ(0x02, 0x31),
+	EXYNOS_DSI_CMD_SEQ(0x32, 0x9F),
+
+	/* CMD2, Page7 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x27),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	EXYNOS_DSI_CMD_SEQ(0x5B, 0x02),
+
+	/* Error flag detection */
+	EXYNOS_DSI_CMD_SEQ(0xD0, 0x31),
+	EXYNOS_DSI_CMD_SEQ(0xD1, 0x84),
+	EXYNOS_DSI_CMD_SEQ(0xD2, 0x30),
+	EXYNOS_DSI_CMD_SEQ(0xDE, 0x03),
+	EXYNOS_DSI_CMD_SEQ(0xDF, 0x02),
+
+	/* CMD2, Page4 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x24),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	EXYNOS_DSI_CMD_SEQ(0xC2, 0xDA),
+	/* CMD1 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x10),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* Only Write Secondary */
+	EXYNOS_DSI_CMD_SEQ(0xB9, 0x05),
+	/* CMD2, Page4 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x24),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	EXYNOS_DSI_CMD_SEQ(0xC2, 0xDF),
+	/* CMD1 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x10),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* Write Primary & Secondary */
+	EXYNOS_DSI_CMD_SEQ(0xB9, 0x02),
+
+	/* CMD3, PageA */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0xE0),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* VCOM Driving Ability */
+	EXYNOS_DSI_CMD_SEQ(0x14, 0x60),
+	EXYNOS_DSI_CMD_SEQ(0x16, 0xC0),
+
+	/* CMD3, PageB */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0xF0),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* Secondary osc workaround */
+	EXYNOS_DSI_CMD_SEQ(0x3A, 0x08),
+
+	/* CMD1 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x10),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* Only Write Secondary */
+	EXYNOS_DSI_CMD_SEQ(0xB9, 0x05),
+
+	/* CMD2, Page0 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x20),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	EXYNOS_DSI_CMD_SEQ(0x18, 0x40),
+
+	/* CMD1 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x10),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* Write Primary & Secondary */
+	EXYNOS_DSI_CMD_SEQ(0xB9, 0x02),
+	EXYNOS_DSI_CMD_SEQ(0x51, 0x0F, 0xFF),
+	EXYNOS_DSI_CMD_SEQ(0x53, 0x24),
+	/* CABC initial OFF */
+	EXYNOS_DSI_CMD_SEQ(0x55, 0x00),
+	/* CMD2, Page2 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x22),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* Set IE parameter */
+	EXYNOS_DSI_CMD_SEQ(0x1A, 0x00),
+	EXYNOS_DSI_CMD_SEQ(0x68, 0x00),
+	EXYNOS_DSI_CMD_SEQ(0xA2, 0x20),
+	EXYNOS_DSI_CMD_SEQ(0x56, 0x77),
+	/* Set IE dark fine tune parameter */
+	EXYNOS_DSI_CMD_SEQ(0x58, 0x10),
+	/* Set IE bright fine tune parameter */
+	EXYNOS_DSI_CMD_SEQ(0x59, 0x1F),
+	/* Set IE dimming mode */
+	EXYNOS_DSI_CMD_SEQ(0x6A, 0x21),
+
+	/* CMD1 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x10),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* BBh (MIPI via/bypass RAM) */
+	EXYNOS_DSI_CMD_SEQ(0xBB, 0x13),
+	/* VBP + VFP = 200 + 26 = 226 */
+	EXYNOS_DSI_CMD_SEQ(0x3B, 0x03, 0xC8, 0x1A, 0x04, 0x04),
+
+	/* b/201704777: Flip 180 degrees */
+	EXYNOS_DSI_CMD_SEQ(0x36, 0x03),
+
+	EXYNOS_DSI_CMD(sleep_out, 120),
+	EXYNOS_DSI_CMD(display_on, 0)
+};
+static DEFINE_EXYNOS_CMD_SET(ts110f5mlg0_init);
+
+static const struct exynos_dsi_cmd ts110f5mlg0_off_cmds[] = {
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x10),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	EXYNOS_DSI_CMD(display_off, 20),
+	EXYNOS_DSI_CMD(sleep_in, 100),
+};
+static DEFINE_EXYNOS_CMD_SET(ts110f5mlg0_off);
+
+/**
+ * struct ts110f5mlg0_panel - panel specific info
+ * This struct maintains ts110f5mlg0 panel specific information, any fixed details about
+ * panel should most likely go into struct exynos_panel or exynos_panel_desc
+ */
+struct ts110f5mlg0_panel {
+	/** @base: base panel struct */
+	struct exynos_panel base;
+
+	/** @i2c_pwr: i2c power supply */
+	struct regulator *i2c_pwr;
+
+	/** @avdd: avdd regulator for TDDI */
+	struct regulator *avdd;
+
+	/** @avee: avee regulator for TDDI */
+	struct regulator *avee;
+
+	/** @avdd_uV: microVolt of avdd */
+	u32 avdd_uV;
+
+	/** @avee_uV: microVolt of avee */
+	u32 avee_uV;
+};
+
+#define to_spanel(ctx) container_of(ctx, struct ts110f5mlg0_panel, base)
+
+static void ts110f5mlg0_reset(struct exynos_panel *ctx)
+{
+	dev_dbg(ctx->dev, "%s +\n", __func__);
+
+	if (ctx->panel_state == PANEL_STATE_BLANK) {
+		gpiod_set_value(ctx->reset_gpio, 0);
+		usleep_range(1000, 1100);
+	}
+	gpiod_set_value(ctx->reset_gpio, 1);
+	usleep_range(1000, 1100);
+	gpiod_set_value(ctx->reset_gpio, 0);
+	usleep_range(1000, 1100);
+	gpiod_set_value(ctx->reset_gpio, 1);
+	usleep_range(10000, 10100);
+
+	dev_dbg(ctx->dev, "%s -\n", __func__);
+}
+
+static int ts110f5mlg0_prepare(struct drm_panel *panel)
+{
+	struct exynos_panel *ctx =
+		container_of(panel, struct exynos_panel, panel);
+
+	dev_dbg(ctx->dev, "%s +\n", __func__);
+
+	exynos_panel_set_power(ctx, true);
+	usleep_range(18500, 18600);
+	ts110f5mlg0_reset(ctx);
+
+	dev_dbg(ctx->dev, "%s -\n", __func__);
+
+	return 0;
+}
+
+static int ts110f5mlg0_enable(struct drm_panel *panel)
+{
+	struct exynos_panel *ctx;
+
+	ctx = container_of(panel, struct exynos_panel, panel);
+
+	exynos_panel_init(ctx);
+	exynos_panel_send_cmd_set(ctx, &ts110f5mlg0_init_cmd_set);
+	ctx->enabled = true;
+
+	return 0;
+}
+
+static void ts110f5mlg0_set_cabc_mode(struct exynos_panel *ctx,
+					enum exynos_cabc_mode cabc_mode)
+{
+	u8 mode;
+
+	switch (cabc_mode) {
+	case CABC_UI_MODE:
+		mode = 0x01;
+		break;
+	case CABC_STILL_MODE:
+		mode = 0x02;
+		break;
+	case CABC_MOVIE_MODE:
+		/* CABC MOVING MODE & IE */
+		mode = 0x83;
+		break;
+	default:
+		mode = 0x00;
+	}
+	EXYNOS_DCS_WRITE_SEQ(ctx, 0x55, mode);
+
+	dev_dbg(ctx->dev, "%s CABC state: %u\n", __func__, mode);
+}
+
+static int ts110f5mlg0_read_id(struct exynos_panel *ctx)
+{
+	struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
+	int read_bytes = 0;
+	u8 i;
+
+	if (ctx->panel_rev < PANEL_REV_EVT2) {
+		/* hardcode 0 as reading id is not supported in this panel_rev */
+		dev_info(ctx->dev, "read_id is not supported in panel_rev: 0x%x\n", ctx->panel_rev);
+		strlcpy(ctx->panel_id, "0", PANEL_ID_MAX);
+		return 0;
+	}
+
+	/* Change to CMD2, Page2 */
+	EXYNOS_DCS_WRITE_SEQ(ctx, 0xFF, 0x22);
+	EXYNOS_DCS_WRITE_SEQ(ctx, 0xFB, 0x01);
+
+	/* Serial number is stored in different registers, use loop to read it. */
+	for (i = 0; i < TS110F5MLG0_PANEL_ID_LEN; ++i) {
+		read_bytes = mipi_dsi_dcs_read(dsi, TS110F5MLG0_PANEL_ID_REG + i,
+				ctx->panel_id + i, 1);
+		if (read_bytes != 1)
+			break;
+	}
+
+	/* Switch back to CMD1 */
+	EXYNOS_DCS_WRITE_SEQ(ctx, 0xFF, 0x10);
+	EXYNOS_DCS_WRITE_SEQ(ctx, 0xFB, 0x01);
+
+	if (read_bytes != 1) {
+		dev_warn(ctx->dev, "Unable to read panel id (%d)\n", read_bytes);
+		strlcpy(ctx->panel_id, "0", PANEL_ID_MAX);
+		return -EIO;
+	}
+
+	ctx->panel_id[TS110F5MLG0_PANEL_ID_LEN] = '\0';
+
+	return 0;
+}
+
+static void ts110f5mlg0_update_wrctrld(struct exynos_panel *ctx)
+{
+	u8 val = TS110F5MLG0_WRCTRLD_BCTRL_BIT |
+			TS110F5MLG0_WRCTRLD_BL_BIT;
+
+	if (ctx->dimming_on)
+		val |= TS110F5MLG0_WRCTRLD_DD_BIT;
+
+	dev_dbg(ctx->dev,
+		"%s(wrctrld:0x%x, dimming: %s)\n",
+		__func__, val, ctx->dimming_on ? "on" : "off");
+
+	EXYNOS_DCS_WRITE_SEQ(ctx, MIPI_DCS_WRITE_CONTROL_DISPLAY, val);
+}
+
+static void ts110f5mlg0_set_dimming_on(struct exynos_panel *ctx,
+					bool dimming_on)
+{
+	ctx->dimming_on = dimming_on;
+	ts110f5mlg0_update_wrctrld(ctx);
+}
+
+static void ts110f5mlg0_get_panel_rev(struct exynos_panel *ctx, u32 id)
+{
+	/* extract command 0xDB */
+	u8 build_code = (id & 0xFF00) >> 8;
+	u8 rev = build_code >> 4;
+
+	if (rev >= ARRAY_SIZE(ts110f5mlg0_panel_rev)) {
+		ctx->panel_rev = PANEL_REV_LATEST;
+		dev_warn(ctx->dev,
+			"unknown rev from panel (0x%x), default to latest\n",
+			rev);
+	} else {
+		ctx->panel_rev = ts110f5mlg0_panel_rev[rev];
+		dev_info(ctx->dev, "panel_rev: 0x%x\n", ctx->panel_rev);
+	}
+}
+
+static int ts110f5mlg0_parse_regualtors(struct exynos_panel *ctx)
+{
+	struct device *dev = ctx->dev;
+	struct ts110f5mlg0_panel *spanel = to_spanel(ctx);
+	int count, i, ret;
+
+	ctx->vddi = devm_regulator_get(dev, "vddi");
+	if (IS_ERR(ctx->vddi)) {
+		dev_err(ctx->dev, "failed to get panel vddi\n");
+		return -EPROBE_DEFER;
+	}
+
+	/* The i2c power source and backlight enable (BL_EN) use the same hardware pin.
+	 * We should be cautious when controlling this hardware pin (b/244526124).
+	 */
+	spanel->i2c_pwr = devm_regulator_get_optional(dev, "i2c-pwr");
+	if (PTR_ERR_OR_ZERO(spanel->i2c_pwr)) {
+		dev_err(ctx->dev, "failed to get display i2c-pwr\n");
+		return -EPROBE_DEFER;
+	}
+
+	/* log the device tree status for every display bias source */
+	count = of_property_count_elems_of_size(dev->of_node, "disp_bias", sizeof(u32));
+	if (count <= 0) {
+		dev_err(ctx->dev, "failed to parse disp_bias entry\n");
+		return -EINVAL;
+	}
+	for (i = 0; i < count; ++i) {
+		struct device_node *dev_node = of_parse_phandle(dev->of_node, "disp_bias", i);
+
+		if (of_device_is_available(dev_node))
+			dev_info(ctx->dev, "%s is enabled by bootloader\n", dev_node->full_name);
+		else
+			dev_dbg(ctx->dev, "%s is disabled by bootloader\n", dev_node->full_name);
+	}
+
+	spanel->avdd = devm_regulator_get_optional(dev, "disp_avdd");
+	if (PTR_ERR_OR_ZERO(spanel->avdd)) {
+		dev_err(ctx->dev, "failed to get disp_avdd provider\n");
+		return -EPROBE_DEFER;
+	}
+
+	spanel->avee = devm_regulator_get_optional(dev, "disp_avee");
+	if (PTR_ERR_OR_ZERO(spanel->avee)) {
+		dev_err(ctx->dev, "failed to get disp_avee provider\n");
+		return -EPROBE_DEFER;
+	}
+
+	ret = of_property_read_u32(dev->of_node, "avdd-microvolt", &spanel->avdd_uV);
+	if (ret) {
+		dev_err(ctx->dev, "failed to parse avdd-microvolt: %d\n", ret);
+		return ret;
+	}
+	dev_dbg(ctx->dev, "use avdd-microvolt: %d uV\n", spanel->avdd_uV);
+
+	ret = of_property_read_u32(dev->of_node, "avee-microvolt", &spanel->avee_uV);
+	if (ret) {
+		dev_err(ctx->dev, "failed to parse avee-microvolt: %d\n", ret);
+		return ret;
+	}
+	dev_dbg(ctx->dev, "use avee-microvolt: %d uV\n", spanel->avee_uV);
+
+	return 0;
+}
+
+static int ts110f5mlg0_set_power(struct exynos_panel *ctx, bool on)
+{
+	struct ts110f5mlg0_panel *spanel = to_spanel(ctx);
+	int ret;
+
+	if (on) {
+		/* Case 1. set_power when handoff from bootloader.
+		 *    1. i2c_pwr (BL_EN) is left on (use_count = 0)
+		 *    2. ppa957db2d_set_power +
+		 *    3. ppa957db2d_set_power -
+		 *    4. i2c_pwr (BL_EN) is left on (use_count = 0)
+		 *    5. backlight driver turn on i2c_pwr (BL_EN) (use_count = 1)
+		 *
+		 * Case 2. system resume (tap to check tablet is disabled)
+		 *    1. i2c_pwr (BL_EN) is off (use_count = 0)
+		 *    2. ppa957db2d_set_power +
+		 *    3. ppa957db2d_set_power -
+		 *    4. i2c_pwr (BL_EN) is off (use_count = 0)
+		 *    5. backlight driver turn on i2c_pwr (BL_EN) (use_count = 1)
+		 *
+		 * Case 3. system resume (tap to check tablet is enabled)
+		 *    1. i2c_pwr (BL_EN) is off (use_count = 0)
+		 *    2. backlight driver turn on i2c_pwr (BL_EN) (use_count = 1)
+		 */
+		bool i2c_pwr_already_on;
+
+		/* VDDI power */
+		ret = regulator_enable(ctx->vddi);
+		if (ret) {
+			dev_err(ctx->dev, "vddi enable failed\n");
+			return ret;
+		}
+		dev_dbg(ctx->dev, "vddi enable successfully\n");
+		usleep_range(2000, 3000);
+
+		i2c_pwr_already_on = regulator_is_enabled(spanel->i2c_pwr);
+		if (!i2c_pwr_already_on) {
+			/* For case 1, the i2c_pwr (BL_EN) should be turned on manually to
+			 *     configure the AVDD/AVEE voltage level via i2c.
+			 * For case 2, the i2c_pwr (BL_EN) is already turned on (used_count = 0)
+			 *     and should not turned on here. Otherwise, it need to be turned off
+			 *     later to reset the use_count to zero. However turning off will
+			 *     affect the continuous splash feature (black flicker).
+			 */
+			ret = regulator_enable(spanel->i2c_pwr);
+			if (ret) {
+				dev_err(ctx->dev, "i2c_pwr enable failed\n");
+				return ret;
+			}
+			dev_dbg(ctx->dev, "i2c_pwr enable successfully\n");
+			usleep_range(2000, 2500);
+		}
+
+		/* AVDD power */
+		ret = regulator_enable(spanel->avdd);
+		if (ret) {
+			dev_err(ctx->dev, "avdd enable failed\n");
+			return ret;
+		}
+		dev_dbg(ctx->dev, "avdd enable successfully\n");
+
+		/* set voltage twice to fix the problem from tps65132_enable: it doesn't
+		 * restore the voltage register value via regmap_write (SW value and HW value
+		 * are inconsistent). At this time, set the voltage to target value directly
+		 * will not take effect because the direct return condition in
+		 * regulator_set_voltage_unlocked:
+		 * `voltage->min_uV == min_uV && voltage->max_uV == max_uV`
+		 */
+		if (regulator_set_voltage(spanel->avdd, spanel->avdd_uV - 100000,
+			spanel->avdd_uV - 100000) || regulator_set_voltage(spanel->avdd,
+			spanel->avdd_uV, spanel->avdd_uV)) {
+			dev_err(ctx->dev, "avdd set voltage failed\n");
+			/* If regulator_set_voltage fail, the display can still be light on
+			 * with default voltage level, should not return here.
+			 */
+		} else {
+			dev_dbg(ctx->dev, "avdd set voltage successfully\n");
+		}
+		usleep_range(1000, 1100);
+
+		/* AVEE power */
+		ret = regulator_enable(spanel->avee);
+		if (ret) {
+			dev_err(ctx->dev, "avee enable failed\n");
+			return ret;
+		}
+		dev_dbg(ctx->dev, "avee enable successfully\n");
+
+		/* set voltage twice as AVDD */
+		if (regulator_set_voltage(spanel->avee, spanel->avee_uV - 100000,
+			spanel->avee_uV - 100000) || regulator_set_voltage(spanel->avee,
+			spanel->avee_uV, spanel->avee_uV)) {
+			dev_err(ctx->dev, "avee set voltage failed\n");
+			/* If regulator_set_voltage fail, the display can still be light on
+			 * with default voltage level, should not return here.
+			 */
+		} else {
+			dev_dbg(ctx->dev, "avee set voltage successfully\n");
+		}
+		usleep_range(1000, 1100);
+
+		if (!i2c_pwr_already_on) {
+			/* For case 2, the i2c_pwr (BL_EN) should be reset to use_count 0.
+			 * Such that the backlight driver can fully control on the BL_EN.
+			 */
+			if (regulator_disable(spanel->i2c_pwr))
+				dev_err(ctx->dev, "i2c_pwr disable failed\n");
+			else
+				dev_dbg(ctx->dev, "i2c_pwr disable successfully\n");
+		}
+	} else {
+		/* Case 1. system suspend (tap to check tablet is disabled)
+		 *    1. i2c_pwr (BL_EN) is on (use_count = 1)
+		 *    2. backlight driver turn off i2c_pwr (BL_EN) (use_count = 0)
+		 *    3. ppa957db2d_set_power +
+		 *    4. only turn off DISP_PMIC_ENABLE gpio pin, no i2c access here.
+		 *    5. ppa957db2d_set_power -
+		 *
+		 * Case 2. system suspend (tap to check tablet is enabled)
+		 *    1. i2c_pwr (BL_EN) is on (use_count = 1)
+		 *    2. backlight driver turn off i2c_pwr (BL_EN) (use_count = 0)
+		 */
+		gpiod_set_value(ctx->reset_gpio, 0);
+
+		ret = regulator_disable(spanel->avee);
+		if (ret) {
+			dev_err(ctx->dev, "avee disable failed\n");
+			return ret;
+		}
+		dev_dbg(ctx->dev, "avee disable successfully\n");
+		usleep_range(1000, 1100);
+
+		ret = regulator_disable(spanel->avdd);
+		if (ret) {
+			dev_err(ctx->dev, "avdd disable failed\n");
+			return ret;
+		}
+		dev_dbg(ctx->dev, "avdd disable successfully\n");
+		usleep_range(6000, 7000);
+
+		ret = regulator_disable(ctx->vddi);
+		if (ret) {
+			dev_err(ctx->dev, "vddi disable failed\n");
+			return ret;
+		}
+		dev_dbg(ctx->dev, "vddi disable successfully\n");
+	}
+
+	return 0;
+}
+
+static int ts110f5mlg0_panel_probe(struct mipi_dsi_device *dsi)
+{
+	struct ts110f5mlg0_panel *spanel;
+
+	spanel = devm_kzalloc(&dsi->dev, sizeof(*spanel), GFP_KERNEL);
+	if (!spanel)
+		return -ENOMEM;
+
+	return exynos_panel_common_init(dsi, &spanel->base);
+}
+
+static const struct exynos_panel_mode ts110f5mlg0_modes[] = {
+	{
+		/* 1600x2560 @ 60 */
+		.mode = {
+			.clock = 309246,
+			.hdisplay = 1600,
+			.hsync_start = 1600 + 92, // add hfp
+			.hsync_end = 1600 + 92 + 66, // add hsa
+			.htotal = 1600 + 92 + 66 + 92, // add hbp
+			.vdisplay = 2560,
+			.vsync_start = 2560 + 26, // add vfp
+			.vsync_end = 2560 + 26 + 4, // add vsa
+			.vtotal = 2560 + 26 + 4 + 196, // add vbp
+			.flags = 0,
+			.width_mm = 147,
+			.height_mm = 236,
+		},
+		.exynos_mode = {
+			.mode_flags = MIPI_DSI_MODE_VIDEO,
+			.bpc = 8,
+			.dsc = {
+				.enabled = false,
+			},
+		},
+	},
+};
+
+static const struct drm_panel_funcs ts110f5mlg0_drm_funcs = {
+	.disable = exynos_panel_disable,
+	.unprepare = exynos_panel_unprepare,
+	.prepare = ts110f5mlg0_prepare,
+	.enable = ts110f5mlg0_enable,
+	.get_modes = exynos_panel_get_modes,
+};
+
+static const struct exynos_panel_funcs ts110f5mlg0_exynos_funcs = {
+	.read_id = ts110f5mlg0_read_id,
+	.panel_reset = ts110f5mlg0_reset,
+	.set_dimming_on = ts110f5mlg0_set_dimming_on,
+	.set_brightness = exynos_panel_set_brightness,
+	.set_cabc_mode = ts110f5mlg0_set_cabc_mode,
+	.get_panel_rev = ts110f5mlg0_get_panel_rev,
+	.parse_regulators = ts110f5mlg0_parse_regualtors,
+	.set_power = ts110f5mlg0_set_power,
+};
+
+const struct brightness_capability ts110f5mlg0_brightness_capability = {
+	.normal = {
+		.nits = {
+			.min = 2,
+			.max = 500,
+		},
+		.level = {
+			.min = 16,
+			.max = 4095,
+		},
+		.percentage = {
+			.min = 0,
+			.max = 100,
+		},
+	},
+};
+
+static const struct exynos_panel_desc boe_ts110f5mlg0 = {
+	.data_lane_cnt = 4,
+	.max_brightness = 4095,
+	.min_brightness = 16,
+	.lower_min_brightness = 4,
+	.dft_brightness = 1146,
+	/* supported HDR format bitmask : 1(DOLBY_VISION), 2(HDR10), 3(HLG) */
+	.hdr_formats = BIT(2) | BIT(3),
+	.max_luminance = 5000000,
+	.max_avg_luminance = 1200000,
+	.min_luminance = 5,
+	.brt_capability = &ts110f5mlg0_brightness_capability,
+	.modes = ts110f5mlg0_modes,
+	.num_modes = 1,
+	.off_cmd_set = &ts110f5mlg0_off_cmd_set,
+	.panel_func = &ts110f5mlg0_drm_funcs,
+	.exynos_panel_func = &ts110f5mlg0_exynos_funcs,
+};
+
+static const struct of_device_id exynos_panel_of_match[] = {
+	{ .compatible = "boe,ts110f5mlg0", .data = &boe_ts110f5mlg0 },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, exynos_panel_of_match);
+
+static struct mipi_dsi_driver exynos_panel_driver = {
+	.probe = ts110f5mlg0_panel_probe,
+	.remove = exynos_panel_remove,
+	.driver = {
+		.name = "panel-boe-ts110f5mlg0",
+		.of_match_table = exynos_panel_of_match,
+	},
+};
+module_mipi_dsi_driver(exynos_panel_driver);
+
+MODULE_AUTHOR("Ken Huang <kenbshuang@google.com>");
+MODULE_DESCRIPTION("MIPI-DSI based BOE ts110f5mlg0 panel driver");
+MODULE_LICENSE("GPL");
diff --git a/display/panel-csot-ppa957db2d.c b/display/panel-csot-ppa957db2d.c
new file mode 100644
index 0000000..57b6035
--- /dev/null
+++ b/display/panel-csot-ppa957db2d.c
@@ -0,0 +1,684 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * MIPI-DSI based CSOT PPA957DB2-D LCD panel driver.
+ *
+ * Copyright (c) 2022 Google Inc.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_platform.h>
+#include <linux/kthread.h>
+#include <uapi/linux/sched/types.h>
+#include <video/mipi_display.h>
+
+#include "panel/panel-samsung-drv.h"
+
+#define PPA957DB2D_WRCTRLD_DD_BIT	0x08
+#define PPA957DB2D_WRCTRLD_BL_BIT	0x04
+#define PPA957DB2D_WRCTRLD_BCTRL_BIT	0x20
+#define PPA957DB2D_PANEL_ID_REG		0x00
+#define PPA957DB2D_PANEL_ID_LEN		37
+
+#if PPA957DB2D_PANEL_ID_LEN >= PANEL_ID_MAX
+	#error PANEL_ID_MAX should be greater than PPA957DB2D_PANEL_ID_LEN
+#endif
+
+static const u32 ppa957db2d_panel_rev[] = {
+	PANEL_REV_PROTO1,
+	PANEL_REV_PROTO2,
+	PANEL_REV_EVT1,
+	PANEL_REV_EVT1_1,
+	PANEL_REV_EVT2,
+	PANEL_REV_DVT1,
+	PANEL_REV_PVT,
+};
+
+static const struct exynos_dsi_cmd ppa957db2d_init_cmds[] = {
+	/* CMD2, Page3 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x23),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* 12 bits PWM */
+	EXYNOS_DSI_CMD_SEQ(0x00, 0x80),
+	/* PWM freq 3kHz */
+	EXYNOS_DSI_CMD_SEQ(0x08, 0x04),
+
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x10),
+	EXYNOS_DSI_CMD_SEQ(0xB9, 0x05),
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x20),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	EXYNOS_DSI_CMD_SEQ(0x18, 0x40),
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x10),
+	EXYNOS_DSI_CMD_SEQ(0xB9, 0x02),
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0xF0),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	EXYNOS_DSI_CMD_SEQ(0x3A, 0x08),
+
+	/* CMD2, Page7 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x27),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+
+	/* Error flag detection */
+	EXYNOS_DSI_CMD_SEQ(0xD0, 0x31),
+	EXYNOS_DSI_CMD_SEQ(0xD1, 0x84),
+	EXYNOS_DSI_CMD_SEQ(0xD2, 0x30),
+	EXYNOS_DSI_CMD_SEQ(0xDE, 0x03),
+	EXYNOS_DSI_CMD_SEQ(0xDF, 0x02),
+
+	/* CMD2, Page 6 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x26),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+
+	/* Reduce OSC drift */
+	EXYNOS_DSI_CMD_SEQ(0x00, 0x81),
+	EXYNOS_DSI_CMD_SEQ(0x01, 0xB0),
+
+	/* CMD2, Page 2 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x22),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+
+	/* Reduce OSC drift */
+	EXYNOS_DSI_CMD_SEQ(0x9F, 0x50),
+	EXYNOS_DSI_CMD_SEQ(0xA0, 0x50),
+	EXYNOS_DSI_CMD_SEQ(0xA5, 0x00),
+	EXYNOS_DSI_CMD_SEQ(0xA6, 0x00),
+	EXYNOS_DSI_CMD_SEQ(0xA7, 0x00),
+	EXYNOS_DSI_CMD_SEQ(0xA9, 0x50),
+	EXYNOS_DSI_CMD_SEQ(0xAA, 0x20),
+	EXYNOS_DSI_CMD_SEQ(0xAB, 0x20),
+	EXYNOS_DSI_CMD_SEQ(0xAD, 0x10),
+	EXYNOS_DSI_CMD_SEQ(0xB0, 0xFF),
+	EXYNOS_DSI_CMD_SEQ(0xB1, 0xFF),
+	EXYNOS_DSI_CMD_SEQ(0xB2, 0xFF),
+	EXYNOS_DSI_CMD_SEQ(0xB3, 0xFF),
+	EXYNOS_DSI_CMD_SEQ(0xB8, 0x00),
+	EXYNOS_DSI_CMD_SEQ(0xB9, 0x84),
+	EXYNOS_DSI_CMD_SEQ(0xBA, 0x84),
+	EXYNOS_DSI_CMD_SEQ(0xBB, 0x84),
+	EXYNOS_DSI_CMD_SEQ(0xB4, 0xFF),
+	EXYNOS_DSI_CMD_SEQ(0xB5, 0xFF),
+	EXYNOS_DSI_CMD_SEQ(0xBE, 0x05),
+	EXYNOS_DSI_CMD_SEQ(0xBF, 0x84),
+	EXYNOS_DSI_CMD_SEQ(0xC5, 0x00),
+	EXYNOS_DSI_CMD_SEQ(0xC6, 0x6A),
+	EXYNOS_DSI_CMD_SEQ(0xC7, 0x00),
+	EXYNOS_DSI_CMD_SEQ(0xCA, 0x08),
+	EXYNOS_DSI_CMD_SEQ(0xCB, 0x6A),
+	EXYNOS_DSI_CMD_SEQ(0xCE, 0x00),
+	EXYNOS_DSI_CMD_SEQ(0xCF, 0x08),
+	EXYNOS_DSI_CMD_SEQ(0xD0, 0x6A),
+	EXYNOS_DSI_CMD_SEQ(0xD3, 0x08),
+	EXYNOS_DSI_CMD_SEQ(0xD4, 0x6A),
+	EXYNOS_DSI_CMD_SEQ(0xD7, 0x00),
+	EXYNOS_DSI_CMD_SEQ(0xDC, 0x08),
+	EXYNOS_DSI_CMD_SEQ(0xDD, 0x6A),
+	EXYNOS_DSI_CMD_SEQ(0x6F, 0x01),
+	EXYNOS_DSI_CMD_SEQ(0x70, 0x11),
+	EXYNOS_DSI_CMD_SEQ(0x73, 0x01),
+	EXYNOS_DSI_CMD_SEQ(0x74, 0x85),
+	EXYNOS_DSI_CMD_SEQ(0xC0, 0x05),
+	EXYNOS_DSI_CMD_SEQ(0xC1, 0x94),
+	EXYNOS_DSI_CMD_SEQ(0xC2, 0x00),
+
+	/* CMD2, Page A */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x2A),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+
+	/* Reduce OSC drift */
+	EXYNOS_DSI_CMD_SEQ(0x9A, 0x02),
+
+	/* CMD1 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x10),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* Write Primary & Secondary */
+	EXYNOS_DSI_CMD_SEQ(0xB9, 0x02),
+	EXYNOS_DSI_CMD_SEQ(0x51, 0x0F, 0xFF),
+	EXYNOS_DSI_CMD_SEQ(0x53, 0x24),
+	/* CABC initial OFF */
+	EXYNOS_DSI_CMD_SEQ(0x55, 0x00),
+
+	/* CMD2, Page2 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x22),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* Set IE parameter */
+	EXYNOS_DSI_CMD_SEQ(0x1A, 0x00),
+	EXYNOS_DSI_CMD_SEQ(0x68, 0x00),
+	EXYNOS_DSI_CMD_SEQ(0xA2, 0x20),
+	EXYNOS_DSI_CMD_SEQ(0x56, 0x77),
+	/* Set IE dark fine tune parameter */
+	EXYNOS_DSI_CMD_SEQ(0x58, 0x10),
+	/* Set IE bright fine tune parameter */
+	EXYNOS_DSI_CMD_SEQ(0x59, 0x1F),
+	/* Set IE dimming mode */
+	EXYNOS_DSI_CMD_SEQ(0x6A, 0x21),
+
+	/* CMD1 */
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x10),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	/* BBh (MIPI via/bypass RAM) */
+	EXYNOS_DSI_CMD_SEQ(0xBB, 0x13),
+	/* VBP + VFP = 200 + 26 = 226 */
+	EXYNOS_DSI_CMD_SEQ(0x3B, 0x03, 0xC8, 0x1A, 0x04, 0x04),
+
+	/* b/201704777: Flip 180 degrees */
+	EXYNOS_DSI_CMD_SEQ(0x36, 0x03),
+
+	EXYNOS_DSI_CMD_SEQ_DELAY(120, MIPI_DCS_EXIT_SLEEP_MODE),
+	EXYNOS_DSI_CMD_SEQ(MIPI_DCS_SET_DISPLAY_ON)
+};
+static DEFINE_EXYNOS_CMD_SET(ppa957db2d_init);
+
+static const struct exynos_dsi_cmd ppa957db2d_off_cmds[] = {
+	EXYNOS_DSI_CMD_SEQ(0xFF, 0x10),
+	EXYNOS_DSI_CMD_SEQ(0xFB, 0x01),
+	EXYNOS_DSI_CMD_SEQ_DELAY(20, MIPI_DCS_SET_DISPLAY_OFF),
+	EXYNOS_DSI_CMD_SEQ_DELAY(100, MIPI_DCS_ENTER_SLEEP_MODE),
+};
+static DEFINE_EXYNOS_CMD_SET(ppa957db2d_off);
+
+/**
+ * struct ppa957db2d_panel - panel specific info
+ * This struct maintains ppa957db2d panel specific information, any fixed details about
+ * panel should most likely go into struct exynos_panel or exynos_panel_desc
+ */
+struct ppa957db2d_panel {
+	/** @base: base panel struct */
+	struct exynos_panel base;
+
+	/** @i2c_pwr: i2c power supply */
+	struct regulator *i2c_pwr;
+
+	/** @avdd: avdd regulator for TDDI */
+	struct regulator *avdd;
+
+	/** @avee: avee regulator for TDDI */
+	struct regulator *avee;
+
+	/** @avdd_uV: microVolt of avdd */
+	u32 avdd_uV;
+
+	/** @avee_uV: microVolt of avee */
+	u32 avee_uV;
+};
+
+#define to_spanel(ctx) container_of(ctx, struct ppa957db2d_panel, base)
+
+static void ppa957db2d_reset(struct exynos_panel *ctx)
+{
+	dev_dbg(ctx->dev, "%s +\n", __func__);
+
+	if (ctx->panel_state == PANEL_STATE_BLANK) {
+		gpiod_set_value(ctx->reset_gpio, 0);
+		usleep_range(1000, 1100);
+	}
+	gpiod_set_value(ctx->reset_gpio, 1);
+	usleep_range(1000, 1100);
+	gpiod_set_value(ctx->reset_gpio, 0);
+	usleep_range(1000, 1100);
+	gpiod_set_value(ctx->reset_gpio, 1);
+	usleep_range(10000, 10100);
+
+	dev_dbg(ctx->dev, "%s -\n", __func__);
+}
+
+static int ppa957db2d_prepare(struct drm_panel *panel)
+{
+	struct exynos_panel *ctx =
+		container_of(panel, struct exynos_panel, panel);
+
+	dev_dbg(ctx->dev, "%s +\n", __func__);
+
+	exynos_panel_set_power(ctx, true);
+	usleep_range(18500, 18600);
+	ppa957db2d_reset(ctx);
+
+	dev_dbg(ctx->dev, "%s -\n", __func__);
+
+	return 0;
+}
+
+static void ts110f5mlg0_set_cabc_mode(struct exynos_panel *ctx,
+					enum exynos_cabc_mode cabc_mode)
+{
+	u8 mode;
+
+	switch (cabc_mode) {
+	case CABC_UI_MODE:
+		mode = 0x01;
+		break;
+	case CABC_STILL_MODE:
+		mode = 0x02;
+		break;
+	case CABC_MOVIE_MODE:
+		/* CABC MOVING MODE & IE */
+		mode = 0x83;
+		break;
+	default:
+		mode = 0x00;
+	}
+	EXYNOS_DCS_WRITE_SEQ(ctx, 0x55, mode);
+
+	dev_dbg(ctx->dev, "%s CABC state: %u\n", __func__, mode);
+}
+
+static int ppa957db2d_enable(struct drm_panel *panel)
+{
+	struct exynos_panel *ctx;
+
+	ctx = container_of(panel, struct exynos_panel, panel);
+
+	exynos_panel_init(ctx);
+	exynos_panel_send_cmd_set(ctx, &ppa957db2d_init_cmd_set);
+	ctx->enabled = true;
+
+	return 0;
+}
+
+static int ppa957db2d_read_id(struct exynos_panel *ctx)
+{
+	struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
+	int read_bytes = 0;
+	u8 i;
+
+	if (ctx->panel_rev < PANEL_REV_EVT2) {
+		/* hardcode 0 as reading id is not supported in this panel_rev */
+		dev_info(ctx->dev, "read_id is not supported in panel_rev: 0x%x\n", ctx->panel_rev);
+		strlcpy(ctx->panel_id, "0", PANEL_ID_MAX);
+		return 0;
+	}
+
+	/* Change to CMD2, Page2 */
+	EXYNOS_DCS_WRITE_SEQ(ctx, 0xFF, 0x22);
+	EXYNOS_DCS_WRITE_SEQ(ctx, 0xFB, 0x01);
+
+	/* Serial number is stored in different registers, use loop to read it. */
+	for (i = 0; i < PPA957DB2D_PANEL_ID_LEN; ++i) {
+		read_bytes = mipi_dsi_dcs_read(dsi, PPA957DB2D_PANEL_ID_REG + i,
+				ctx->panel_id + i, 1);
+		if (read_bytes != 1)
+			break;
+	}
+
+	/* Switch back to CMD1 */
+	EXYNOS_DCS_WRITE_SEQ(ctx, 0xFF, 0x10);
+	EXYNOS_DCS_WRITE_SEQ(ctx, 0xFB, 0x01);
+
+	if (read_bytes != 1) {
+		dev_warn(ctx->dev, "Unable to read panel id (%d)\n", read_bytes);
+		strlcpy(ctx->panel_id, "0", PANEL_ID_MAX);
+		return -EIO;
+	}
+
+	ctx->panel_id[PPA957DB2D_PANEL_ID_LEN] = '\0';
+
+	return 0;
+}
+
+static void ppa957db2d_update_wrctrld(struct exynos_panel *ctx)
+{
+	u8 val = PPA957DB2D_WRCTRLD_BCTRL_BIT |
+			PPA957DB2D_WRCTRLD_BL_BIT;
+
+	if (ctx->dimming_on)
+		val |= PPA957DB2D_WRCTRLD_DD_BIT;
+
+	dev_dbg(ctx->dev,
+		"%s(wrctrld:0x%x, dimming: %s)\n",
+		__func__, val, ctx->dimming_on ? "on" : "off");
+
+	EXYNOS_DCS_WRITE_SEQ(ctx, MIPI_DCS_WRITE_CONTROL_DISPLAY, val);
+}
+
+static void ppa957db2d_set_dimming_on(struct exynos_panel *ctx,
+					bool dimming_on)
+{
+	ctx->dimming_on = dimming_on;
+	ppa957db2d_update_wrctrld(ctx);
+}
+
+static void ppa957db2d_get_panel_rev(struct exynos_panel *ctx, u32 id)
+{
+	/* extract command 0xDB */
+	u8 build_code = (id & 0xFF00) >> 8;
+	u8 rev = build_code >> 4;
+
+	if (rev >= ARRAY_SIZE(ppa957db2d_panel_rev)) {
+		ctx->panel_rev = PANEL_REV_LATEST;
+		dev_warn(ctx->dev,
+			"unknown rev from panel (0x%x), default to latest\n",
+			rev);
+	} else {
+		ctx->panel_rev = ppa957db2d_panel_rev[rev];
+		dev_info(ctx->dev, "panel_rev: 0x%x\n", ctx->panel_rev);
+	}
+}
+
+static int ppa957db2d_parse_regualtors(struct exynos_panel *ctx)
+{
+	struct device *dev = ctx->dev;
+	struct ppa957db2d_panel *spanel = to_spanel(ctx);
+	int count, i, ret;
+
+	ctx->vddi = devm_regulator_get(dev, "vddi");
+	if (IS_ERR(ctx->vddi)) {
+		dev_err(ctx->dev, "failed to get panel vddi\n");
+		return -EPROBE_DEFER;
+	}
+
+	/* The i2c power source and backlight enable (BL_EN) use the same hardware pin.
+	 * We should be cautious when controlling this hardware pin (b/244526124).
+	 */
+	spanel->i2c_pwr = devm_regulator_get_optional(dev, "i2c-pwr");
+	if (PTR_ERR_OR_ZERO(spanel->i2c_pwr)) {
+		dev_err(ctx->dev, "failed to get display i2c-pwr\n");
+		return -EPROBE_DEFER;
+	}
+
+	/* log the device tree status for every display bias source */
+	count = of_property_count_elems_of_size(dev->of_node, "disp_bias", sizeof(u32));
+	if (count <= 0) {
+		dev_err(ctx->dev, "failed to parse disp_bias entry\n");
+		return -EINVAL;
+	}
+	for (i = 0; i < count; ++i) {
+		struct device_node *dev_node = of_parse_phandle(dev->of_node, "disp_bias", i);
+
+		if (of_device_is_available(dev_node))
+			dev_info(ctx->dev, "%s is enabled by bootloader\n", dev_node->full_name);
+		else
+			dev_dbg(ctx->dev, "%s is disabled by bootloader\n", dev_node->full_name);
+	}
+
+	spanel->avdd = devm_regulator_get_optional(dev, "disp_avdd");
+	if (PTR_ERR_OR_ZERO(spanel->avdd)) {
+		dev_err(ctx->dev, "failed to get disp_avdd provider\n");
+		return -EPROBE_DEFER;
+	}
+
+	spanel->avee = devm_regulator_get_optional(dev, "disp_avee");
+	if (PTR_ERR_OR_ZERO(spanel->avee)) {
+		dev_err(ctx->dev, "failed to get disp_avee provider\n");
+		return -EPROBE_DEFER;
+	}
+
+	ret = of_property_read_u32(dev->of_node, "avdd-microvolt", &spanel->avdd_uV);
+	if (ret) {
+		dev_err(ctx->dev, "failed to parse avdd-microvolt: %d\n", ret);
+		return ret;
+	}
+	dev_dbg(ctx->dev, "use avdd-microvolt: %d uV\n", spanel->avdd_uV);
+
+	ret = of_property_read_u32(dev->of_node, "avee-microvolt", &spanel->avee_uV);
+	if (ret) {
+		dev_err(ctx->dev, "failed to parse avee-microvolt: %d\n", ret);
+		return ret;
+	}
+	dev_dbg(ctx->dev, "use avee-microvolt: %d uV\n", spanel->avee_uV);
+
+	return 0;
+}
+
+static int ppa957db2d_set_power(struct exynos_panel *ctx, bool on)
+{
+	struct ppa957db2d_panel *spanel = to_spanel(ctx);
+	int ret;
+
+	if (on) {
+		/* Case 1. set_power when handoff from bootloader.
+		 *    1. i2c_pwr (BL_EN) is left on (use_count = 0)
+		 *    2. ppa957db2d_set_power +
+		 *    3. ppa957db2d_set_power -
+		 *    4. i2c_pwr (BL_EN) is left on (use_count = 0)
+		 *    5. backlight driver turn on i2c_pwr (BL_EN) (use_count = 1)
+		 *
+		 * Case 2. system resume (tap to check tablet is disabled)
+		 *    1. i2c_pwr (BL_EN) is off (use_count = 0)
+		 *    2. ppa957db2d_set_power +
+		 *    3. ppa957db2d_set_power -
+		 *    4. i2c_pwr (BL_EN) is off (use_count = 0)
+		 *    5. backlight driver turn on i2c_pwr (BL_EN) (use_count = 1)
+		 *
+		 * Case 3. system resume (tap to check tablet is enabled)
+		 *    1. i2c_pwr (BL_EN) is off (use_count = 0)
+		 *    2. backlight driver turn on i2c_pwr (BL_EN) (use_count = 1)
+		 */
+		bool i2c_pwr_already_on;
+
+		/* VDDI power */
+		ret = regulator_enable(ctx->vddi);
+		if (ret) {
+			dev_err(ctx->dev, "vddi enable failed\n");
+			return ret;
+		}
+		dev_dbg(ctx->dev, "vddi enable successfully\n");
+		usleep_range(2000, 3000);
+
+		i2c_pwr_already_on = regulator_is_enabled(spanel->i2c_pwr);
+		if (!i2c_pwr_already_on) {
+			/* For case 1, the i2c_pwr (BL_EN) should be turned on manually to
+			 *     configure the AVDD/AVEE voltage level via i2c.
+			 * For case 2, the i2c_pwr (BL_EN) is already turned on (used_count = 0)
+			 *     and should not turned on here. Otherwise, it need to be turned off
+			 *     later to reset the use_count to zero. However turning off will
+			 *     affect the continuous splash feature (black flicker).
+			 */
+			ret = regulator_enable(spanel->i2c_pwr);
+			if (ret) {
+				dev_err(ctx->dev, "i2c_pwr enable failed\n");
+				return ret;
+			}
+			dev_dbg(ctx->dev, "i2c_pwr enable successfully\n");
+			usleep_range(2000, 2500);
+		}
+
+		/* AVDD power */
+		ret = regulator_enable(spanel->avdd);
+		if (ret) {
+			dev_err(ctx->dev, "avdd enable failed\n");
+			return ret;
+		}
+		dev_dbg(ctx->dev, "avdd enable successfully\n");
+
+		/* set voltage twice to fix the problem from tps65132_enable: it doesn't
+		 * restore the voltage register value via regmap_write (SW value and HW value
+		 * are inconsistent). At this time, set the voltage to target value directly
+		 * will not take effect because the direct return condition in
+		 * regulator_set_voltage_unlocked:
+		 * `voltage->min_uV == min_uV && voltage->max_uV == max_uV`
+		 */
+		if (regulator_set_voltage(spanel->avdd, spanel->avdd_uV - 100000,
+			spanel->avdd_uV - 100000) || regulator_set_voltage(spanel->avdd,
+			spanel->avdd_uV, spanel->avdd_uV)) {
+			dev_err(ctx->dev, "avdd set voltage failed\n");
+			/* If regulator_set_voltage fail, the display can still be light on
+			 * with default voltage level, should not return here.
+			 */
+		} else {
+			dev_dbg(ctx->dev, "avdd set voltage successfully\n");
+		}
+		usleep_range(1000, 1100);
+
+		/* AVEE power */
+		ret = regulator_enable(spanel->avee);
+		if (ret) {
+			dev_err(ctx->dev, "avee enable failed\n");
+			return ret;
+		}
+		dev_dbg(ctx->dev, "avee enable successfully\n");
+
+		/* set voltage twice as AVDD */
+		if (regulator_set_voltage(spanel->avee, spanel->avee_uV - 100000,
+			spanel->avee_uV - 100000) || regulator_set_voltage(spanel->avee,
+			spanel->avee_uV, spanel->avee_uV)) {
+			dev_err(ctx->dev, "avee set voltage failed\n");
+			/* If regulator_set_voltage fail, the display can still be light on
+			 * with default voltage level, should not return here.
+			 */
+		} else {
+			dev_dbg(ctx->dev, "avee set voltage successfully\n");
+		}
+		usleep_range(1000, 1100);
+
+		if (!i2c_pwr_already_on) {
+			/* For case 2, the i2c_pwr (BL_EN) should be reset to use_count 0.
+			 * Such that the backlight driver can fully control on the BL_EN.
+			 */
+			if (regulator_disable(spanel->i2c_pwr))
+				dev_err(ctx->dev, "i2c_pwr disable failed\n");
+			else
+				dev_dbg(ctx->dev, "i2c_pwr disable successfully\n");
+		}
+	} else {
+		/* Case 1. system suspend (tap to check tablet is disabled)
+		 *    1. i2c_pwr (BL_EN) is on (use_count = 1)
+		 *    2. backlight driver turn off i2c_pwr (BL_EN) (use_count = 0)
+		 *    3. ppa957db2d_set_power +
+		 *    4. only turn off DISP_PMIC_ENABLE gpio pin, no i2c access here.
+		 *    5. ppa957db2d_set_power -
+		 *
+		 * Case 2. system suspend (tap to check tablet is enabled)
+		 *    1. i2c_pwr (BL_EN) is on (use_count = 1)
+		 *    2. backlight driver turn off i2c_pwr (BL_EN) (use_count = 0)
+		 */
+		gpiod_set_value(ctx->reset_gpio, 0);
+
+		ret = regulator_disable(spanel->avee);
+		if (ret) {
+			dev_err(ctx->dev, "avee disable failed\n");
+			return ret;
+		}
+		dev_dbg(ctx->dev, "avee disable successfully\n");
+		usleep_range(1000, 1100);
+
+		ret = regulator_disable(spanel->avdd);
+		if (ret) {
+			dev_err(ctx->dev, "avdd disable failed\n");
+			return ret;
+		}
+		dev_dbg(ctx->dev, "avdd disable successfully\n");
+		usleep_range(6000, 7000);
+
+		ret = regulator_disable(ctx->vddi);
+		if (ret) {
+			dev_err(ctx->dev, "vddi disable failed\n");
+			return ret;
+		}
+		dev_dbg(ctx->dev, "vddi disable successfully\n");
+	}
+
+	return 0;
+}
+
+static int ppa957db2d_panel_probe(struct mipi_dsi_device *dsi)
+{
+	struct ppa957db2d_panel *spanel;
+
+	spanel = devm_kzalloc(&dsi->dev, sizeof(*spanel), GFP_KERNEL);
+	if (!spanel)
+		return -ENOMEM;
+
+	return exynos_panel_common_init(dsi, &spanel->base);
+}
+
+static const struct exynos_panel_mode ppa957db2d_modes[] = {
+	{
+		/* 1600x2560 @ 60 */
+		.mode = {
+			.clock = 309246,
+			.hdisplay = 1600,
+			.hsync_start = 1600 + 92, // add hfp
+			.hsync_end = 1600 + 92 + 66, // add hsa
+			.htotal = 1600 + 92 + 66 + 92, // add hbp
+			.vdisplay = 2560,
+			.vsync_start = 2560 + 26, // add vfp
+			.vsync_end = 2560 + 26 + 4, // add vsa
+			.vtotal = 2560 + 26 + 4 + 196, // add vbp
+			.flags = 0,
+			.width_mm = 147,
+			.height_mm = 236,
+		},
+		.exynos_mode = {
+			.mode_flags = MIPI_DSI_MODE_VIDEO,
+			.bpc = 8,
+			.dsc = {
+				.enabled = false,
+			},
+		},
+	},
+};
+
+static const struct drm_panel_funcs ppa957db2d_drm_funcs = {
+	.disable = exynos_panel_disable,
+	.unprepare = exynos_panel_unprepare,
+	.prepare = ppa957db2d_prepare,
+	.enable = ppa957db2d_enable,
+	.get_modes = exynos_panel_get_modes,
+};
+
+static const struct exynos_panel_funcs ppa957db2d_exynos_funcs = {
+	.read_id = ppa957db2d_read_id,
+	.panel_reset = ppa957db2d_reset,
+	.set_dimming_on = ppa957db2d_set_dimming_on,
+	.set_brightness = exynos_panel_set_brightness,
+	.set_cabc_mode = ts110f5mlg0_set_cabc_mode,
+	.get_panel_rev = ppa957db2d_get_panel_rev,
+	.parse_regulators = ppa957db2d_parse_regualtors,
+	.set_power = ppa957db2d_set_power,
+};
+
+const struct brightness_capability ppa957db2d_brightness_capability = {
+	.normal = {
+		.nits = {
+			.min = 2,
+			.max = 500,
+		},
+		.level = {
+			.min = 16,
+			.max = 4095,
+		},
+		.percentage = {
+			.min = 0,
+			.max = 100,
+		},
+	},
+};
+
+static const struct exynos_panel_desc csot_ppa957db2d = {
+	.data_lane_cnt = 4,
+	.max_brightness = 4095,
+	.min_brightness = 16,
+	.lower_min_brightness = 4,
+	.dft_brightness = 1146,
+	/* supported HDR format bitmask : 1(DOLBY_VISION), 2(HDR10), 3(HLG) */
+	.hdr_formats = BIT(2) | BIT(3),
+	.max_luminance = 5000000,
+	.max_avg_luminance = 1200000,
+	.min_luminance = 5,
+	.brt_capability = &ppa957db2d_brightness_capability,
+	.modes = ppa957db2d_modes,
+	.num_modes = 1,
+	.off_cmd_set = &ppa957db2d_off_cmd_set,
+	.panel_func = &ppa957db2d_drm_funcs,
+	.exynos_panel_func = &ppa957db2d_exynos_funcs,
+};
+
+static const struct of_device_id exynos_panel_of_match[] = {
+	{ .compatible = "csot,ppa957db2d", .data = &csot_ppa957db2d },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, exynos_panel_of_match);
+
+static struct mipi_dsi_driver exynos_panel_driver = {
+	.probe = ppa957db2d_panel_probe,
+	.remove = exynos_panel_remove,
+	.driver = {
+		.name = "panel-csot-ppa957db2d",
+		.of_match_table = exynos_panel_of_match,
+	},
+};
+module_mipi_dsi_driver(exynos_panel_driver);
+
+MODULE_AUTHOR("Ken Huang <kenbshuang@google.com>");
+MODULE_DESCRIPTION("MIPI-DSI based CSOT ppa957db2d panel driver");
+MODULE_LICENSE("GPL");
diff --git a/dts/Makefile b/dts/Makefile
new file mode 100644
index 0000000..673b418
--- /dev/null
+++ b/dts/Makefile
@@ -0,0 +1,55 @@
+# SPDX-License-Identifier: GPL-2.0
+
+tangorpro_overlays := \
+        gs201-tangorpro-dev2.dtbo \
+        gs201-tangorpro-evt2.dtbo \
+        gs201-tangorpro-evt2-bezelblack.dtbo \
+        gs201-tangorpro-evt2-wingboard.dtbo \
+        gs201-tangorpro-dvt1.dtbo \
+        gs201-tangorpro-pvt1.dtbo \
+        gs201-tangorpro-mp.dtbo
+
+tangorpro_dtbs := \
+        gs201/gs201-a0.dtb \
+        gs201/gs201-b0.dtb \
+        gs201/gs201-b0_v2-ipop.dtb \
+
+#
+# Usage:
+#   $(call DTBS_overlay_template, overlay, base_dtb, suffix)
+#
+# This is a generic template to create the following construct:
+#   <overlay>-<suffix>-dtbs := <base_dtb>.dtb <overlay>.dtbo
+define DTBS_overlay_template
+	$(1:%.dtbo=%-$(strip $3)-dtbs) := $2 $1
+endef
+
+# Usage:
+#   $(call DTB_object_template, CONFIG_, overlay, suffix)
+#
+# This is a generic template to create the following construct:
+#   dtb-$(CONFIG_) += <overlay>-<suffix>.dtb
+define DTB_object_template
+	dtb-$(strip $1) += $(2:%.dtbo=%-$(strip $3).dtb)
+endef
+
+# Usage:
+#   $(call multi_dtbs_overlay, list_of_base_dtbs, list_of_overlays, CONFIG_)
+#
+# For each (base_dtb,overlay) pair, this will create the following constructs:
+#   <overlay>-<base_dtb>-dtbs := <base_dtb>.dtb <overlay>.dtbo
+#   dtb-$(CONFIG_) += <overlay>-<base_dtb>.dtb
+define multi_dtbs_overlay
+	$(foreach base, $1, \
+		$(foreach overlay, $2, \
+			$(eval $(call DTBS_overlay_template, $(overlay), $(base), $(notdir $(base:%.dtb=%)))) \
+			$(eval $(call DTB_object_template, $3, $(overlay), $(notdir $(base:%.dtb=%))))))
+endef
+
+# Create the -dtbs and dtb-y constructs. We can do this by looping through the
+# base dtbs and apply each overlay to it. Kbuild will use these -dtbs
+# constructs to determine which dtbs are the base dtbs and which are the
+# overlays. For the base dtbs, kbuild will expose the symbols as needed for the
+# overlays. Additionally, kbuild will statically apply the overlay to the base
+# dtb which could be used to verify the overlay applies cleanly.
+$(call multi_dtbs_overlay, $(tangorpro_dtbs), $(tangorpro_overlays), y)
diff --git a/dts/gs201 b/dts/gs201
new file mode 120000
index 0000000..1385beb
--- /dev/null
+++ b/dts/gs201
@@ -0,0 +1 @@
+../../gs201/dts
\ No newline at end of file
diff --git a/dts/gs201-pogo-transport-dev.dtsi b/dts/gs201-pogo-transport-dev.dtsi
new file mode 100644
index 0000000..f874cee
--- /dev/null
+++ b/dts/gs201-pogo-transport-dev.dtsi
@@ -0,0 +1,26 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Google GS201 Pogo transport for Tangorpro DEV
+ *
+ * Copyright (c) 2022 Google, LLC
+ *
+ */
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+	fragment@pogo_transport {
+		target-path = "/";
+		__overlay__ {
+
+			google_pogo: google,pogo {
+				/delete-property/ pogo-acc-capable;
+				/delete-property/ usb-hub-supply;
+				/delete-property/ acc-detect-supply;
+
+				legacy-event-driven;
+			};
+		};
+	};
+};
+
+
diff --git a/dts/gs201-pogo-transport-evt2.dtsi b/dts/gs201-pogo-transport-evt2.dtsi
new file mode 100644
index 0000000..e46f9f2
--- /dev/null
+++ b/dts/gs201-pogo-transport-evt2.dtsi
@@ -0,0 +1,22 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Google GS201 Pogo transport for Tangorpro EVT2
+ *
+ * Copyright (c) 2022 Google, LLC
+ *
+ */
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+	fragment@pogo_transport {
+		target-path = "/";
+		__overlay__ {
+
+			google_pogo: google,pogo {
+				/delete-property/ pogo-acc-capable;
+				pogo-acc-hall-only;
+				legacy-event-driven;
+			};
+		};
+	};
+};
diff --git a/dts/gs201-pogo-transport.dtsi b/dts/gs201-pogo-transport.dtsi
new file mode 100644
index 0000000..22d58ff
--- /dev/null
+++ b/dts/gs201-pogo-transport.dtsi
@@ -0,0 +1,129 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Google GS201 Pogo transport
+ *
+ * Copyright (c) 2022 Google, LLC
+ *
+ */
+#include <dt-bindings/gpio/gpio.h>
+#include <arm64/exynos/exynos-pinctrl.h>
+#include "gs201/gs101-pinctrl.h"
+
+/ {
+	fragment@pogo_transport {
+		target-path = "/";
+		__overlay__ {
+
+			google_pogo: google,pogo {
+				status = "okay";
+				compatible = "pogo-transport";
+				pinctrl-names = "suspend-to-usb", "suspend-to-pogo", "hub";
+				pinctrl-0 = <&pogo_trans_stat
+					     &pogo_trans_acc
+					     &pogo_trans_pogo_sel_usb>;
+				pinctrl-1 = <&pogo_trans_stat
+					     &pogo_trans_pogo_sel_pogo
+					     &pogo_trans_hub_sel_pogo>;
+				pinctrl-2 = <&pogo_trans_stat
+					     &pogo_trans_pogo_sel_hub
+					     &pogo_trans_hub_sel_hub>;
+				interrupt-parent = <&gpa8>;
+				pogo-transport-status = <&gpa8 3 GPIO_ACTIVE_LOW>;
+				pogo-transport-sel = <&gpp1 0 GPIO_ACTIVE_HIGH>;
+				data-phandle = <&max77759tcpc>;
+				pogo-psy-name = "dock";
+				equal-priority;
+				pogo-ovp-en = <&s2mpg12_gpio 2 GPIO_ACTIVE_LOW>;
+
+				hub-embedded;
+				pogo-hub-reset = <&gpp0 0 GPIO_ACTIVE_HIGH>;
+				pogo-hub-sel = <&gpp2 0 GPIO_ACTIVE_HIGH>;
+
+				pogo-acc-capable;
+				pogo-acc-detect = <&gpa8 2 GPIO_ACTIVE_HIGH>;
+
+				usb-hub-supply = <&s_ldo28_reg>;
+				acc-detect-supply = <&m_ldo26_reg>;
+
+				disable-voltage-detection;
+			};
+		};
+	};
+};
+
+/* GPIO_FAR_ALIVE */
+&pinctrl_1 {
+	pogo_trans_acc: pogo-transport-acc-detect {
+		samsung,pins = "gpa8-2";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_EINT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
+		samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+	};
+
+	pogo_trans_stat: pogo-transport-status {
+		samsung,pins = "gpa8-3";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_EINT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+};
+
+/* GPIO_PERIC0 */
+&pinctrl_4 {
+	pogo_trans_pogo_sel_usb: pogo-transport-pogo-sel-usb {
+		samsung,pins = "gpp1-0", "gpp2-0";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+		samsung,pin-con-pdn = <EXYNOS_PIN_PDN_OUT0>;
+		samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	pogo_trans_pogo_sel_pogo: pogo-transport-pogo-sel-pogo {
+		samsung,pins = "gpp1-0";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+		samsung,pin-con-pdn = <EXYNOS_PIN_PDN_OUT1>;
+		samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	pogo_trans_pogo_sel_hub: pogo-transport-pogo-sel-hub {
+		samsung,pins = "gpp1-0";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+		samsung,pin-con-pdn = <EXYNOS_PIN_PDN_OUT0>;
+		samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	pogo_trans_hub_sel_pogo: pogo-transport-hub-sel-pogo {
+		samsung,pins = "gpp2-0";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+		samsung,pin-con-pdn = <EXYNOS_PIN_PDN_OUT0>;
+		samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	pogo_trans_hub_sel_hub: pogo-transport-hub-sel-hub {
+		samsung,pins = "gpp1-0";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+		samsung,pin-con-pdn = <EXYNOS_PIN_PDN_OUT1>;
+		samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	pogo_trans_reset_hub: pogo-transport-reset-hub {
+		samsung,pins = "gpp0-0";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+		samsung,pin-con-pdn = <EXYNOS_PIN_PDN_OUT0>;
+		samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+	};
+};
+
+&hsi2c1_bus {
+	samsung,pins = /*"gpp2-0",*/ "gpp2-1";
+};
diff --git a/dts/gs201-tangorpro-audio.dtsi b/dts/gs201-tangorpro-audio.dtsi
new file mode 100644
index 0000000..fec8063
--- /dev/null
+++ b/dts/gs201-tangorpro-audio.dtsi
@@ -0,0 +1,398 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Google GS202 Tangorpro common audio device tree source
+ *
+ * Copyright (c) 2022 Google, LLC
+ *          https://www.google.com
+ *
+ */
+#include <arm64/exynos/exynos-pinctrl.h>
+#include "gs201/gs101-pinctrl.h"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/sound/google-aoc.h>
+
+&aoc {
+	aoc-board-cfg = "T6P";
+	aoc-board-id = <0x20901>;
+	aoc-board-rev = <0x10000>;
+};
+
+/*
+  cs35l41_1 ==> Left top
+  cs35l41_2 ==> Left bottom
+  cs35l41_3 ==> Right bottom
+  cs35l41_4 ==> Right top
+*/
+
+&dai_be_tdm0_rx {
+	codec {
+		sound-dai = <&cs35l41_1 0>,
+			<&cs35l41_2 0>,
+			<&cs35l41_3 0>,
+			<&cs35l41_4 0>;
+	};
+};
+
+&dai_be_tdm0_tx {
+	codec {
+		sound-dai = <&cs35l41_1 0>,
+			<&cs35l41_2 0>,
+			<&cs35l41_3 0>,
+			<&cs35l41_4 0>;
+	};
+};
+
+&aoc_snd_card {
+	clks {
+		sys {
+			sys@cs35l41_1 {
+				comp = <&cs35l41_1>;
+				src = "BCLK";
+				/* clk id */
+				id = <0>;
+				/* clk source */
+				srcid = <0>;
+				/* in clk multiple */
+				in_mul = <1>;
+				/* out clk multiple */
+				out_mul = <1>;
+			};
+
+			sys@cs35l41_2 {
+				comp = <&cs35l41_2>;
+				src = "BCLK";
+				/* clk id */
+				id = <0>;
+				/* clk source */
+				srcid = <0>;
+				/* in clk multiple */
+				in_mul = <1>;
+				/* out clk multiple */
+				out_mul = <1>;
+			};
+
+			sys@cs35l41_3 {
+				comp = <&cs35l41_3>;
+				src = "BCLK";
+				/* clk id */
+				id = <0>;
+				/* clk source */
+				srcid = <0>;
+				/* in clk multiple */
+				in_mul = <1>;
+				/* out clk multiple */
+				out_mul = <1>;
+			};
+
+			sys@cs35l41_4 {
+				comp = <&cs35l41_4>;
+				src = "BCLK";
+				/* clk id */
+				id = <0>;
+				/* clk source */
+				srcid = <0>;
+				/* in clk multiple */
+				in_mul = <1>;
+				/* out clk multiple */
+				out_mul = <1>;
+			};
+
+		};
+	};
+};
+
+/* GPIO_FAR_ALIVE */
+&pinctrl_1 {
+	cs35l41_1_irq: cs35l41-1-irq {
+		samsung,pins = "gpa6-3"; /* XEINT_3 - AMP1_IRQ_L */
+		samsung,pin-function = <EXYNOS_PIN_FUNC_EINT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	cs35l41_2_irq: cs35l41-2-irq {
+		samsung,pins = "gpa8-6"; /* XEINT_18 - AMP2_IRQ_L */
+		samsung,pin-function = <EXYNOS_PIN_FUNC_EINT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	cs35l41_3_irq: cs35l41-3-irq {
+		samsung,pins = "gpa6-2"; /* XEINT_2 (AMP3_IRQ_L) */
+		samsung,pin-function = <EXYNOS_PIN_FUNC_EINT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	cs35l41_4_irq: cs35l41-4-irq {
+		samsung,pins = "gpa8-4"; /* XEINT_16 (AMP4_IRQ_L) */
+		samsung,pin-function = <EXYNOS_PIN_FUNC_EINT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+};
+
+/* GPIO_PERIC0 */
+&pinctrl_4 {
+	cs35l41_clk: cs35l41-clk {
+		samsung,pins = "gpp14-0"; /* XAPC_USI7_RXD_CLK_SCL - AUDIO_SPI_CLK */
+		samsung,pin-drv = <GS101_PIN_DRV_5_MA>;
+	};
+
+	cs35l41_mosi: cs35l41-mosi {
+		samsung,pins = "gpp14-1"; /* XAPC_USI7_TXD_DO_SDA - AUDIO_SPI_MOSI */
+		samsung,pin-drv = <GS101_PIN_DRV_5_MA>;
+	};
+
+	cs35l41_miso: cs35l41-miso {
+		samsung,pins = "gpp14-2"; /* XAPC_USI7_RTSn_DI - AUDIO_SPI_MISO */
+		samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
+	};
+
+	cs35l41_cs1: cs35l41-cs1 {
+		samsung,pins = "gpp14-3"; /* XAPC_USI7_CTSN_CSN - AUDIO_AMP1_SPI_CS_L */
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	cs35l41_1_rst: cs35l41-1-rst {
+		samsung,pins = "gpp17-1"; /* XAPC_VSYNC8 - AMP1_RESET_L */
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-con-pdn = <EXYNOS_PIN_PDN_PREV>;
+		samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	cs35l41_3_rst: cs35l41-3-rst {
+		samsung,pins = "gpp2-2"; /* XAPC_USI1_RTSn_DI (AMP3_RESET_L) */
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-con-pdn = <EXYNOS_PIN_PDN_PREV>;
+		samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	cs35l41_cs3: cs35l41-cs3 {
+		samsung,pins = "gpp8-3"; /* XAPC_USI4_CTSn_CSn (AUDIO_AMP3_SPI_CS_L) */
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	cs35l41_cs4: cs35l41-cs4 {
+		samsung,pins = "gpp10-3"; /* XAPC_USI5_CTSn_CSn (AUDIO_AMP4_SPI_CS_L) */
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	cs35l41_4_rst: cs35l41-4-rst {
+		samsung,pins = "gpp12-3"; /* XAPC_USI6_CTSn_CSn (AMP4_RESET_L) */
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-con-pdn = <EXYNOS_PIN_PDN_PREV>;
+		samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+	};
+};
+
+/* GPIO_PERIC1 */
+&pinctrl_5 {
+	cs35l41_cs2: cs35l41-cs2 {
+		samsung,pins = "gpp22-1"; /* XAPC_GPIO5 - AUDIO_AMP2_SPI_CS_L */
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	cs35l41_2_rst: cs35l41-2-rst {
+		samsung,pins = "gpp25-2"; /* XAPC_USI13_RTSn_DI - AMP2_RESET_L */
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-con-pdn = <EXYNOS_PIN_PDN_PREV>;
+		samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+	};
+};
+
+&spi7_cs_func {
+	samsung,pins = "gpp14-3";
+	samsung,pin-drv = <GS101_PIN_DRV_5_MA>;
+};
+
+&spi_7 {
+	/* XAPC_USI7 */
+	#address-cells = <1>;
+	#size-cells = <0>;
+	status = "okay";
+
+	pinctrl-names = "default";
+	pinctrl-0 = <&spi7_bus &spi7_cs_func &cs35l41_cs2 &cs35l41_cs3 &cs35l41_cs4
+		     &cs35l41_miso &cs35l41_mosi &cs35l41_clk>;
+	cs-gpios = <&gpp14 3 GPIO_ACTIVE_HIGH>, <&gpp22 1 GPIO_ACTIVE_HIGH>,
+		   <&gpp8 3 GPIO_ACTIVE_HIGH>, <&gpp10 3 GPIO_ACTIVE_HIGH>;
+
+	cs35l41_1: cs35l41@0 {
+		#sound-dai-cells = <1>;
+		compatible = "cirrus,cs35l41";
+		spi-max-frequency = <25000000>;
+		reg = <0>;
+
+		status = "okay";
+
+		pinctrl-names = "default";
+		pinctrl-0 = <&cs35l41_1_irq &cs35l41_1_rst>;
+
+		interrupt-parent = <&gpa6>;
+		interrupts = <3 0 0>;
+
+		reset-gpios = <&gpp17 1 0>;
+
+		VA-supply = <&s_bucka_reg>;
+		VP-supply = <&V_SYS_dummy>;
+
+		cirrus,boost-peak-milliamp = <3500>;
+		cirrus,boost-ind-nanohenry = <1000>;
+		cirrus,boost-cap-microfarad = <30>;
+		cirrus,hw-noise-gate-select = <63>;
+
+		cirrus,asp-sdout-hiz = <3>;
+		cirrus,tuning-has-prefix;
+		cirrus,left-channel-amp;
+
+		cirrus,gpio-config2 {
+			cirrus,gpio-src-select = <0x5>;
+			cirrus,gpio-output-enable;
+		};
+
+		controller-data {
+			cs-gpio = <&gpp14 3 GPIO_ACTIVE_HIGH>;
+			samsung,spi-feedback-delay = <1>;
+			/* SET SPI CS CONTROL TO AUTOMATIC */
+			samsung,spi-chip-select-mode = <1>;
+		};
+	};
+
+
+	cs35l41_2: cs35l41@1 {
+		#sound-dai-cells = <1>;
+		sound-name-prefix = "L2";
+		compatible = "cirrus,cs35l41";
+		spi-max-frequency = <25000000>;
+		reg = <1>;
+
+		status = "okay";
+
+		pinctrl-names = "default";
+		pinctrl-0 = <&cs35l41_2_irq &cs35l41_2_rst>;
+
+		interrupt-parent = <&gpa8>;
+		interrupts = <6 0 0>;
+
+		reset-gpios = <&gpp25 2 0>;
+
+		VA-supply = <&s_bucka_reg>;
+		VP-supply = <&V_SYS_dummy>;
+
+		cirrus,boost-peak-milliamp = <3500>;
+		cirrus,boost-ind-nanohenry = <1000>;
+		cirrus,boost-cap-microfarad = <30>;
+		cirrus,hw-noise-gate-select = <63>;
+
+		cirrus,asp-sdout-hiz = <3>;
+		cirrus,tuning-has-prefix;
+		cirrus,left-channel-amp;
+
+		cirrus,gpio-config2 {
+			cirrus,gpio-src-select = <0x5>;
+			cirrus,gpio-output-enable;
+		};
+
+		controller-data {
+			cs-gpio =<&gpp22 1 GPIO_ACTIVE_HIGH>;
+			samsung,spi-feedback-delay = <1>;
+			/* SET SPI CS CONTROL TO AUTOMATIC */
+			samsung,spi-chip-select-mode = <1>;
+		};
+	};
+
+	cs35l41_3: cs35l41@2 {
+		#sound-dai-cells = <1>;
+		sound-name-prefix = "R2";
+		compatible = "cirrus,cs35l41";
+		spi-max-frequency = <25000000>;
+		reg = <2>;
+
+		status = "okay";
+
+		pinctrl-names = "default";
+		pinctrl-0 = <&cs35l41_3_irq &cs35l41_3_rst>;
+
+		interrupt-parent = <&gpa6>;
+		interrupts = <2 0 0>;
+
+		reset-gpios = <&gpp2 2 0>;
+
+		VA-supply = <&s_bucka_reg>;
+		VP-supply = <&V_SYS_dummy>;
+
+		cirrus,boost-peak-milliamp = <3500>;
+		cirrus,boost-ind-nanohenry = <1000>;
+		cirrus,boost-cap-microfarad = <30>;
+		cirrus,hw-noise-gate-select = <63>;
+
+		cirrus,asp-sdout-hiz = <3>;
+		cirrus,tuning-has-prefix;
+		cirrus,right-channel-amp;
+
+		cirrus,gpio-config2 {
+			cirrus,gpio-src-select = <0x5>;
+			cirrus,gpio-output-enable;
+		};
+
+		controller-data {
+			cs-gpio = <&gpp8 3 GPIO_ACTIVE_HIGH>;
+			samsung,spi-feedback-delay = <1>;
+			/* SET SPI CS CONTROL TO AUTOMATIC */
+			samsung,spi-chip-select-mode = <1>;
+		};
+	};
+
+	cs35l41_4: cs35l41@3 {
+		#sound-dai-cells = <1>;
+		sound-name-prefix = "R";
+		compatible = "cirrus,cs35l41";
+		spi-max-frequency = <25000000>;
+		reg = <3>;
+
+		status = "okay";
+
+		pinctrl-names = "default";
+		pinctrl-0 = <&cs35l41_4_irq &cs35l41_4_rst>;
+
+		interrupt-parent = <&gpa8>;
+		interrupts = <4 0 0>;
+
+		reset-gpios = <&gpp12 3 0>;
+
+		VA-supply = <&s_bucka_reg>;
+		VP-supply = <&V_SYS_dummy>;
+
+		cirrus,boost-peak-milliamp = <3500>;
+		cirrus,boost-ind-nanohenry = <1000>;
+		cirrus,boost-cap-microfarad = <30>;
+		cirrus,hw-noise-gate-select = <63>;
+
+		cirrus,asp-sdout-hiz = <3>;
+		cirrus,tuning-has-prefix;
+		cirrus,right-channel-amp;
+
+		cirrus,gpio-config2 {
+			cirrus,gpio-src-select = <0x5>;
+			cirrus,gpio-output-enable;
+		};
+
+		controller-data {
+			cs-gpio =<&gpp10 3 GPIO_ACTIVE_HIGH>;
+			samsung,spi-feedback-delay = <1>;
+			/* SET SPI CS CONTROL TO AUTOMATIC */
+			samsung,spi-chip-select-mode = <1>;
+		};
+	};
+};
+
+/* remove haptic audio codec */
+/delete-node/ &dai_be_haptic_rx_codec;
+
+/* Sensor: remove 3v3 (LDO5S) */
+&aoc {
+	sensor_power_list = "sensor_1v8";
+};
diff --git a/dts/gs201-tangorpro-battery-data.dtsi b/dts/gs201-tangorpro-battery-data.dtsi
new file mode 100644
index 0000000..1c902da
--- /dev/null
+++ b/dts/gs201-tangorpro-battery-data.dtsi
@@ -0,0 +1,186 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Battery device tree entries
+ *
+ * Copyright 2022 Google LLC
+ *
+ */
+
+maxim,config {
+	maxim,default-a1-0k {
+		maxim,batt-id-kohm = <0>;
+		maxim,model-version = <1>;
+		maxim,fg-model = /bits/ 16 <
+			0x9ff0 0xb620 0xb7f0 0xb9a0 0xbb90 0xbce0 0xbe00 0xbf70
+			0xc000 0xc0c0 0xc3c0 0xc710 0xca60 0xcd90 0xd420 0xda20
+			0x0080 0x0d40 0x0e00 0x0e10 0x12e0 0x1a40 0x1470 0x16b0
+			0x11c0 0x0a80 0x0840 0x08a0 0x08c0 0x06f0 0x0720 0x0720
+			0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200
+			0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200
+		>;
+		maxim,fg-params = /bits/ 16 <
+			/* 0x0036 */	0xf060	/* IAvgEmpty */
+			/* 0x002a */	0x2038	/* RelaxCFG */
+			/* 0x0028 */	0x260e	/* LearnCFG */
+			/* 0x001D */	0x4217	/* Config */
+			/* 0x00BB */	0x0090	/* Config2 */
+			/* 0x0013 */	0x5f00	/* FullSOCthr */
+			/* 0x0035 */	0x0dcc	/* FullCAPRep */
+			/* 0x0018 */	0x0dcc	/* DesignCap */
+			/* 0x0046 */	0x3200	/* dPacc */
+			/* 0x0045 */	0x0373	/* dQacc */
+			/* 0x0023 */	0x0dcc	/* FullCAPNom */
+			/* 0x003A */	0xa05f	/* V_empty */
+			/* 0x0012 */	0x0f00	/* QResidual00 */
+			/* 0x0022 */	0x0780	/* QResidual10 */
+			/* 0x0032 */	0x0400	/* QResidual20 */
+			/* 0x0042 */	0x0280	/* QResidual30 */
+			/* 0x0038 */	0x06c0	/* RCOMP0 */
+			/* 0x0039 */	0x1102	/* TempCo */
+			/* 0x001E */	0x0463	/* ICHGTerm */
+			/* 0x002C */	0xEE0C	/* TGain */
+			/* 0x002D */	0x1DF9	/* TOff */
+			/* 0x00B9 */	0x0012	/* Curve */
+			/* 0x002B */	0x3830	/* MiscCFG */
+			/* 0x0004 */	0x1900	/* AtRate */
+			/* 0x0049 */	0x2441	/* convgcfg */
+			/* 0x0029 */	0xc623	/* FilterCFG */
+			/* 0x003c */	0x2D00	/* TaskPeriod */
+		>;
+	};
+
+	/* 3125_1_101421_RC2_send.002.raw.model.ini.txt http://b/231675666#comment9 */
+	/* change MiscCFG https://b/309375239#comment6 */
+	maxim,cos-a1-1k {
+		maxim,batt-id-kohm = <1>;
+		maxim,model-version = <2>;
+		maxim,force-reset-model-data;
+		maxim,fg-model = /bits/ 16 <
+			0x9ff0 0xb620 0xb7f0 0xb9a0 0xbb90 0xbce0 0xbe00 0xbf70
+			0xc000 0xc0c0 0xc3c0 0xc710 0xca60 0xcd90 0xd420 0xda20
+			0x0080 0x0d40 0x0e00 0x0e10 0x12e0 0x1a40 0x1470 0x16b0
+			0x11c0 0x0a80 0x0840 0x08a0 0x08c0 0x06f0 0x0720 0x0720
+			0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200
+			0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200
+		>;
+		maxim,fg-params = /bits/ 16 <
+			/* 0x0036 */	0xf060	/* IAvgEmpty */
+			/* 0x002a */	0x2038	/* RelaxCFG */
+			/* 0x0028 */	0x260e	/* LearnCFG */
+			/* 0x001D */	0x4217	/* Config */
+			/* 0x00BB */	0x0090	/* Config2 */
+			/* 0x0013 */	0x5f00	/* FullSOCthr */
+			/* 0x0035 */	0x0dcc	/* FullCAPRep */
+			/* 0x0018 */	0x0dcc	/* DesignCap */
+			/* 0x0046 */	0x3200	/* dPacc */
+			/* 0x0045 */	0x0373	/* dQacc */
+			/* 0x0023 */	0x0dcc	/* FullCAPNom */
+			/* 0x003A */	0xa05f	/* V_empty */
+			/* 0x0012 */	0x0f00	/* QResidual00 */
+			/* 0x0022 */	0x0780	/* QResidual10 */
+			/* 0x0032 */	0x0400	/* QResidual20 */
+			/* 0x0042 */	0x0280	/* QResidual30 */
+			/* 0x0038 */	0x06c0	/* RCOMP0 */
+			/* 0x0039 */	0x1102	/* TempCo */
+			/* 0x001E */	0x0463	/* ICHGTerm */
+			/* 0x002C */	0xEE0C	/* TGain */
+			/* 0x002D */	0x1DF9	/* TOff */
+			/* 0x00B9 */	0x0012	/* Curve */
+			/* 0x002B */	0x3870	/* MiscCFG */
+			/* 0x0004 */	0x1900	/* AtRate */
+			/* 0x0049 */	0x2441	/* convgcfg */
+			/* 0x0029 */	0xc623	/* FilterCFG */
+			/* 0x003c */	0x2D00	/* TaskPeriod */
+		>;
+	};
+
+	/* 3242_2_040722_RC2_send.048.raw.model.ini.txt http://b/231675666#comment9 */
+	/* change MiscCFG https://b/309375239#comment6 */
+	maxim,hpt-a1-5k {
+		maxim,batt-id-kohm = <5>;
+		maxim,model-version = <2>;
+		maxim,force-reset-model-data;
+		maxim,fg-model = /bits/ 16 <
+			0xa000 0xb530 0xb730 0xb930 0xbaf0 0xbcb0 0xbd50 0xbea0
+			0xc0c0 0xc240 0xc550 0xc830 0xce00 0xd130 0xd490 0xdad0
+			0x0050 0x09b0 0x0b20 0x0fe0 0x1000 0x1ae0 0x15f0 0x11d0
+			0x0fe0 0x07d0 0x0880 0x07f0 0x07a0 0x06a0 0x0780 0x0780
+			0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200
+			0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200
+		>;
+		maxim,fg-params = /bits/ 16 <
+			/* 0x0036 */	0xf060	/* IAvgEmpty */
+			/* 0x002a */	0x2038	/* RelaxCFG */
+			/* 0x0028 */	0x260e	/* LearnCFG */
+			/* 0x001D */	0x4217	/* Config */
+			/* 0x00BB */	0x0090	/* Config2 */
+			/* 0x0013 */	0x5f00	/* FullSOCthr */
+			/* 0x0035 */	0x0de2	/* FullCAPRep */
+			/* 0x0018 */	0x0de2	/* DesignCap */
+			/* 0x0046 */	0x3200	/* dPacc */
+			/* 0x0045 */	0x0378	/* dQacc */
+			/* 0x0023 */	0x0de2	/* FullCAPNom */
+			/* 0x003A */	0xa05f	/* V_empty */
+			/* 0x0012 */	0x1780	/* QResidual00 */
+			/* 0x0022 */	0x0a80	/* QResidual10 */
+			/* 0x0032 */	0x0400	/* QResidual20 */
+			/* 0x0042 */	0x0400	/* QResidual30 */
+			/* 0x0038 */	0x0760	/* RCOMP0 */
+			/* 0x0039 */	0x0a02	/* TempCo */
+			/* 0x001E */	0x0463	/* ICHGTerm */
+			/* 0x002C */	0xEE0C	/* TGain */
+			/* 0x002D */	0x1DF9	/* TOff */
+			/* 0x00B9 */	0x0012	/* Curve */
+			/* 0x002B */	0x3870	/* MiscCFG */
+			/* 0x0004 */	0x1900	/* AtRate */
+			/* 0x0049 */	0x2441	/* convgcfg */
+			/* 0x0029 */	0xc623	/* FilterCFG */
+			/* 0x003c */	0x2D00	/* TaskPeriod */
+		>;
+	};
+
+	/* for fake battery: 0xFF http://b/201018651#comment13 */
+	maxim,fake-batt-255K {
+		maxim,batt-id-kohm = <255>;
+		maxim,model-version = <1>;
+		maxim,force-reset-model-data;
+		maxim,fg-model = /bits/ 16 <
+			0x9ff0 0xb620 0xb7f0 0xb9a0 0xbb90 0xbce0 0xbe00 0xbf70
+			0xc000 0xc0c0 0xc3c0 0xc710 0xca60 0xcd90 0xd420 0xda20
+			0x0080 0x0d40 0x0e00 0x0e10 0x12e0 0x1a40 0x1470 0x16b0
+			0x11c0 0x0a80 0x0840 0x08a0 0x08c0 0x06f0 0x0720 0x0720
+			0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200
+			0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200 0x0200
+		>;
+		maxim,fg-params = /bits/ 16 <
+			/* 0x0036 */	0xf060	/* IAvgEmpty */
+			/* 0x002a */	0x2038	/* RelaxCFG */
+			/* 0x0028 */	0x260e	/* LearnCFG */
+			/* 0x001D */	0x4217	/* Config */
+			/* 0x00BB */	0x0090	/* Config2 */
+			/* 0x0013 */	0x5f00	/* FullSOCthr */
+			/* 0x0035 */	0x0dcc	/* FullCAPRep */
+			/* 0x0018 */	0x0dcc	/* DesignCap */
+			/* 0x0046 */	0x3200	/* dPacc */
+			/* 0x0045 */	0x0373	/* dQacc */
+			/* 0x0023 */	0x0dcc	/* FullCAPNom */
+			/* 0x003A */	0xa05f	/* V_empty */
+			/* 0x0012 */	0x0f00	/* QResidual00 */
+			/* 0x0022 */	0x0780	/* QResidual10 */
+			/* 0x0032 */	0x0400	/* QResidual20 */
+			/* 0x0042 */	0x0280	/* QResidual30 */
+			/* 0x0038 */	0x06c0	/* RCOMP0 */
+			/* 0x0039 */	0x1102	/* TempCo */
+			/* 0x001E */	0x0463	/* ICHGTerm */
+			/* 0x002C */	0xEE0C	/* TGain */
+			/* 0x002D */	0x1DF9	/* TOff */
+			/* 0x00B9 */	0x0012	/* Curve */
+			/* 0x002B */	0x3830	/* MiscCFG */
+			/* 0x0004 */	0x1900	/* AtRate */
+			/* 0x0049 */	0x2441	/* convgcfg */
+			/* 0x0029 */	0xc623	/* FilterCFG */
+			/* 0x003c */	0x2D00	/* TaskPeriod */
+		>;
+	};
+
+};
diff --git a/dts/gs201-tangorpro-battery.dtsi b/dts/gs201-tangorpro-battery.dtsi
new file mode 100644
index 0000000..a5d5f8c
--- /dev/null
+++ b/dts/gs201-tangorpro-battery.dtsi
@@ -0,0 +1,102 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Battery device tree entries specific to tangorpro
+ *
+ * Copyright 2022 Google,LLC
+ *
+ */
+
+&google_battery {
+	google,chg-battery-capacity = <6900>;
+	google,first-usage-date = <0>;
+};
+
+&max77759_fg {
+	/delete-property/ maxim,force-batt-id;
+	maxim,fg-data {
+		#include "gs201-tangorpro-battery-data.dtsi"
+	};
+};
+
+/ {
+	fragment@battery {
+		target-path = "/";
+		__overlay__ {
+			google_battery: google,battery {
+				/* charge table */
+				google,chg-temp-limits = <80 170 200 430 530>;
+				google,chg-cv-limits = <4100000 4400000>;
+				google,chg-cc-limits = <
+					25  25
+					50  50
+					50  50
+					50   0
+				>;
+
+				google,aact-cv-limits = <4100000 4400000>;
+				google,aact-temp-limits = <80 170 200 430 530>;
+				google,chg-aact-ecc = <0 1000>;
+				google,aact-cc-limits = <
+					25  25
+					50  50
+					50  50
+					50   0
+					25  25
+					45  45
+					45  45
+					45   0
+				>;
+
+				/* bpst */
+				google,bpst-enable;
+				google,bpst-chg-rate = <50>;
+
+				google,ttf-temp-idx= <2>;
+				google,ttf-adapter = <1980>;
+				google,ttf-soc-table =  <83 89  93  96  98  100>;
+				google,ttf-elap-table = <76 105 173 300 390 165>;
+				google,ttf-tier-table = <0 80 100>;
+
+				google,batt-id-1-atl {
+					google,batt-id = <1>;
+					google,aacr-ref-cycles = <100 200 300 400 500 700 800>;
+					google,aacr-ref-fade10 = < 28  41  54  60  70  76  93>;
+					google,aafv-ref-cycles = <
+						200  250  300  350  400  450  500  550
+						600  650  700  750  800  850  900  950
+					>;
+					google,aafv-ref-offset = <
+						  0  10  10  20  20  30  30  40
+						 40  50  50  60  60  70  80  90
+					>;
+				};
+
+				google,batt-id-5-hpt {
+					google,batt-id = <5>;
+					google,aacr-ref-cycles = <100 200 300 400 500 600 700 800>;
+					google,aacr-ref-fade10 = < 28  43  53  57  67  74  78  88>;
+					google,aafv-ref-cycles = <
+						200  250  300  350  400  450  500  550
+						600  650  700  750  800  850  900  950
+					>;
+					google,aafv-ref-offset = <
+						  0  10  10  20  20  30  30  40
+						 40  50  50  60  60  70  80  90
+					>;
+				};
+			};
+			google_bms {
+				nvmem-names = "7-00500";
+				/* pack eeprom is available only with P20+ batteries */
+				google,bee-name = "7-00500";
+
+				/* eeprom layout tracker */
+				google,lotr-version = <1>;
+
+				/* record over temperature time */
+				google,temp-record-thr = <300 350 400>;
+				google,soc-record-thr = <90 90 95>;
+			};
+		};
+	};
+};
diff --git a/dts/gs201-tangorpro-camera-pmic.dtsi b/dts/gs201-tangorpro-camera-pmic.dtsi
new file mode 100644
index 0000000..18839f8
--- /dev/null
+++ b/dts/gs201-tangorpro-camera-pmic.dtsi
@@ -0,0 +1,87 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * gs201 camera PMIC device tree for tangorpro
+ *
+ * Copyright 2022 Google LLC.
+ *
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <arm64/exynos/exynos-pinctrl.h>
+
+&hsi2c_8 {
+	/* SLG51000 */
+	status = "ok";
+	#address-cells = <1>;
+	#size-cells = <0>;
+	slg51000: slg51000@75 {
+		compatible = "dlg,slg51000";
+		reg = <0x75>;
+		status = "ok";
+		dlg,buck-gpios = <&s2mpg13_gpio 3 GPIO_ACTIVE_HIGH>;
+		dlg,cs-gpios = <&s2mpg13_gpio 0 GPIO_ACTIVE_HIGH>;
+		dlg,op-mode = <4>;
+		dlg,reg-init-cells = <2>;
+		dlg,reg-init = <0X2200 0x78>, <0X2300 0xA0>, <0X2700 0xA0>, <0X2900 0xA0>;
+
+		regulators {
+			slg51000_ldo1: ldo1 {
+				regulator-name = "ldo1";
+				regulator-min-microvolt = <2250000>;
+				regulator-max-microvolt = <3300000>;
+			};
+
+			slg51000_ldo2: ldo2 {
+				regulator-name = "ldo2";
+				regulator-min-microvolt = <2250000>;
+				regulator-max-microvolt = <3300000>;
+			};
+
+			slg51000_ldo3: ldo3 {
+				regulator-name = "ldo3";
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <3750000>;
+			};
+
+			slg51000_ldo4: ldo4 {
+				regulator-name = "ldo4";
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <3750000>;
+			};
+
+			slg51000_ldo5: ldo5 {
+				regulator-name = "ldo5";
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <1200000>;
+			};
+
+			slg51000_ldo6: ldo6 {
+				regulator-name = "ldo6";
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <1200000>;
+			};
+
+			slg51000_ldo7: ldo7 {
+				regulator-name = "ldo7";
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <3750000>;
+			};
+
+			slg51000_ldo_dummy: ldo_dummy {
+				regulator-name = "ldo_dummy";
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <3750000>;
+			};
+		};
+
+		slg51000_gpio: slg51000_gpio {
+			gpio-controller;
+			#gpio-cells = <2>;
+			ngpios = <8>;
+			gpio-ranges = <&slg51000_pinctrl 0 0 8>;
+		};
+
+		slg51000_pinctrl: slg51000_pinctrl {
+		};
+	};
+};
diff --git a/dts/gs201-tangorpro-camera.dtsi b/dts/gs201-tangorpro-camera.dtsi
new file mode 100644
index 0000000..6c96ce5
--- /dev/null
+++ b/dts/gs201-tangorpro-camera.dtsi
@@ -0,0 +1,341 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * gs201 camera lwis device tree for tangorpro
+ *
+ * Copyright 2022 Google LLC.
+ *
+ */
+
+#include <dt-bindings/clock/gs201.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <arm64/exynos/exynos-pinctrl.h>
+#include "gs201/gs101-pinctrl.h"
+
+&pinctrl_4 {
+	hsi2c2_bus: hsi2c2-bus {
+		samsung,pin-pud = <EXYNOS_PIN_PULL_UP>;
+	};
+
+	hsi2c2_bus_in: hsi2c2-bus-in {
+		samsung,pins = "gpp4-0", "gpp4-1", "gpp4-2";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+	};
+
+	hsi2c3_bus: hsi2c3-bus {
+		samsung,pin-pud = <EXYNOS_PIN_PULL_UP>;
+	};
+
+	hsi2c3_bus_in: hsi2c3-bus-in {
+		samsung,pins = "gpp6-0", "gpp6-1", "gpp6-3";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+	};
+};
+
+&hsi2c_2 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	gpios = <&gpp4 0 0 &gpp4 1 0>;
+	status = "okay";
+	clock-frequency = <400000>;
+	samsung,reset-before-trans;
+
+	pinctrl-names = "default","on_i2c","off_i2c";
+	pinctrl-0 = <&hsi2c2_bus_in>;
+	pinctrl-1 = <&hsi2c2_bus>;
+	pinctrl-2 = <&hsi2c2_bus_in>;
+};
+
+&hsi2c_3 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	gpios = <&gpp6 0 0 &gpp6 1 0>; /* RCAM_SCL RCAM_SDA */
+	status = "okay";
+	clock-frequency = <400000>;
+	samsung,reset-before-trans;
+
+	pinctrl-names = "default","on_i2c","off_i2c";
+	pinctrl-0 = <&hsi2c3_bus_in>;
+	pinctrl-1 = <&hsi2c3_bus>;
+	pinctrl-2 = <&hsi2c3_bus_in>;
+};
+
+&sensor_mclk4_fn {
+	samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+};
+
+&sensor_mclk4_out {
+	samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+};
+
+&sensor_mclk2_fn {
+	samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+};
+
+&sensor_mclk2_out {
+	samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+};
+
+/ {
+	fragment@lwiscamera {
+		target-path = "/";
+		__overlay__ {
+			/* REAR CAMERA IMX355 */
+			sensor0: sensor@0 {
+				compatible = "google,lwis-i2c-device";
+
+				/* Device node name */
+				node-name = "sensor-medusa-rear";
+
+				/* I2C */
+				i2c-bus = <&hsi2c_3>;
+				i2c-addr = <0x1A>;
+
+				/* Registers */
+				reg-addr-bitwidth = <16>;
+				reg-value-bitwidth = <8>;
+
+				/* GPIOs */
+				reset-gpios = <&gpp6 3 GPIO_ACTIVE_HIGH>;
+
+				clocks =
+					<&clock CIS_CLK3>,
+					<&clock GATE_DFTMUX_CMU_CIS_CLK3>;
+				clock-names =
+					"CIS_CLK3",
+					"GATE_DFTMUX_CMU_CIS_CLK3";
+				clock-rates =
+					<24000000>,
+					<0>;
+
+				/* MCLK Control */
+				pinctrl-names = "mclk_on", "mclk_off";
+				pinctrl-0 = <&sensor_mclk4_fn>;
+				pinctrl-1 = <&sensor_mclk4_out>;
+
+				/* Power supplies */
+				regulators =
+					<&slg51000_ldo2 &slg51000_ldo5
+					 &slg51000_ldo7>;
+				regulator-voltages =
+					<2800000 1200000
+					 1800000>;
+				ldo2-supply = <&slg51000_ldo2>;
+				ldo5-supply = <&slg51000_ldo5>;
+				ldo7-supply = <&slg51000_ldo7>;
+
+				/* Power up sequence */
+				power-up-seqs =
+					"ldo2",
+					"ldo5",
+					"ldo7",
+					"mclk_on",
+					"reset";
+				power-up-seq-types =
+					"regulator",
+					"regulator",
+					"regulator",
+					"pinctrl",
+					"gpio";
+				power-up-seq-delays-us =
+					<0
+					 0
+					 1000
+					 1000
+					 12000>;
+
+				/* Power down sequence */
+				power-down-seqs =
+					"reset",
+					"mclk_off",
+					"ldo7",
+					"ldo5",
+					"ldo2";
+				power-down-seq-types =
+					"gpio",
+					"pinctrl",
+					"regulator",
+					"regulator",
+					"regulator";
+				power-down-seq-delays-us =
+					<0
+					 1000
+					 0
+					 0
+					 0>;
+				transaction-thread-priority = <99>;
+
+				i2c-lock-group-id = <0>;
+			};
+
+			/* FRONT CAMERA IMX355 */
+			sensor1: sensor@1 {
+				compatible = "google,lwis-i2c-device";
+
+				/* Device node name */
+				node-name = "sensor-medusa-front";
+
+				/* I2C */
+				i2c-bus = <&hsi2c_2>;
+				i2c-addr = <0x1A>;
+
+				/* Registers */
+				reg-addr-bitwidth = <16>;
+				reg-value-bitwidth = <8>;
+
+				/* GPIOs */
+				reset-gpios = <&gpp4 2 GPIO_ACTIVE_HIGH>;
+
+				clocks =
+					<&clock CIS_CLK1>,
+					<&clock GATE_DFTMUX_CMU_CIS_CLK1>;
+				clock-names =
+					"CIS_CLK1",
+					"GATE_DFTMUX_CMU_CIS_CLK1";
+				clock-rates =
+					<24000000>,
+					<0>;
+
+				/* MCLK Control */
+				pinctrl-names = "mclk_on", "mclk_off";
+				pinctrl-0 = <&sensor_mclk2_fn>;
+				pinctrl-1 = <&sensor_mclk2_out>;
+
+				/* Power supplies */
+				regulators =
+					<&slg51000_ldo3 &slg51000_ldo6
+					 &slg51000_ldo7>;
+				regulator-voltages =
+					<2800000 1200000
+					 1800000>;
+				ldo3-supply = <&slg51000_ldo3>;
+				ldo6-supply = <&slg51000_ldo6>;
+				ldo7-supply = <&slg51000_ldo7>;
+
+				/* Power up sequence */
+				power-up-seqs =
+					"ldo3",
+					"ldo6",
+					"ldo7",
+					"mclk_on",
+					"reset";
+				power-up-seq-types =
+					"regulator",
+					"regulator",
+					"regulator",
+					"pinctrl",
+					"gpio";
+				power-up-seq-delays-us =
+					<0
+					 0
+					 1000
+					 1000
+					 12000>;
+
+				/* Power down sequence */
+				power-down-seqs =
+					"reset",
+					"mclk_off",
+					"ldo7",
+					"ldo6",
+					"ldo3";
+				power-down-seq-types =
+					"gpio",
+					"pinctrl",
+					"regulator",
+					"regulator",
+					"regulator";
+				power-down-seq-delays-us =
+					<0
+					 1000
+					 0
+					 0
+					 0>;
+				transaction-thread-priority = <99>;
+
+				i2c-lock-group-id = <1>;
+			};
+
+			/* Eeprom m24c64s for imx355-rear */
+			eeprom0: eeprom@0 {
+				compatible = "google,lwis-i2c-device";
+
+				/* Device node name */
+				node-name = "eeprom-smaug-rear";
+
+				/* I2C */
+				i2c-bus = <&hsi2c_3>;
+				i2c-addr = <0x51>;
+
+				/* Registers */
+				reg-addr-bitwidth = <16>;
+				reg-value-bitwidth = <8>;
+
+				/* Power supplies */
+				regulators = <&slg51000_ldo7>;
+				regulator-voltages = <1800000>;
+				ldo7-supply = <&slg51000_ldo7>;
+
+				/* Power up sequence */
+				power-up-seqs =
+					"ldo7";
+				power-up-seq-types =
+					"regulator";
+				power-up-seq-delays-us =
+					<1000>;
+
+				/* Power down sequence */
+				power-down-seqs =
+					"ldo7";
+				power-down-seq-types =
+					"regulator";
+				power-down-seq-delays-us =
+					<1000>;
+
+				i2c-lock-group-id = <0>;
+			};
+
+			/* Eeprom m24c64s for imx355 */
+			eeprom1: eeprom@1 {
+				compatible = "google,lwis-i2c-device";
+
+				/* Device node name */
+				node-name = "eeprom-smaug-front";
+
+				/* I2C */
+				i2c-bus = <&hsi2c_2>;
+				i2c-addr = <0x51>;
+
+				/* Registers */
+				reg-addr-bitwidth = <16>;
+				reg-value-bitwidth = <8>;
+
+				/* Power supplies */
+				regulators = <&slg51000_ldo7>;
+				regulator-voltages = <1800000>;
+				ldo7-supply = <&slg51000_ldo7>;
+
+				/* Power up sequence */
+				power-up-seqs =
+					"ldo7";
+				power-up-seq-types =
+					"regulator";
+				power-up-seq-delays-us =
+					<1000>;
+
+				/* Power down sequence */
+				power-down-seqs =
+					"ldo7";
+				power-down-seq-types =
+					"regulator";
+				power-down-seq-delays-us =
+					<1000>;
+
+				i2c-lock-group-id = <1>;
+			};
+		};
+	};
+};
diff --git a/dts/gs201-tangorpro-charging.dtsi b/dts/gs201-tangorpro-charging.dtsi
new file mode 100644
index 0000000..5f43dab
--- /dev/null
+++ b/dts/gs201-tangorpro-charging.dtsi
@@ -0,0 +1,88 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Battery device tree entries specific to tangorpro
+ *
+ * Copyright 2022 Google,LLC
+ *
+ */
+
+/ {
+	fragment@charging {
+		target-path = "/";
+		__overlay__ {
+
+			google_charger: google,charger {
+				status = "okay";
+				compatible = "google,charger";
+				#cooling-cells = <2>;
+
+				google,chg-power-supply = "main-charger"; /* max77759-charger */
+				google,ext-power-supply = "dock";
+
+				google,bat-power-supply = "battery";
+				google,usb-power-supply = "usb";
+
+				google,fv-max-uv = <4400000>;
+
+				google,thermal-mitigation = <4000000 3000000 2000000 1000000 500000>;
+
+				/* b/170700459 thresholds, updated in b/191070950 */
+				google,bd-resume-abs-temp = <280>;
+				google,bd-resume-soc = <50>;
+				google,bd-resume-time = <14400>;  /* 4 hours */
+				google,bd-resume-temp = <290>;
+				google,bd-trigger-time = <21600>; /* 6 hours */
+				google,bd-trigger-temp = <350>;
+				google,bd-trigger-voltage = <4100000>;
+				google,bd-recharge-voltage = <4080000>;
+				google,bd-drainto-soc = <80>;
+				google,bd-recharge-soc = <79>;
+				/* Enable TEMP-DEFEND */
+				google,bd-temp-enable;
+				google,bd-temp-dry-run;
+
+				/* dock_defend */
+				google,dd-charge-stop-level = <90>;
+				google,dd-charge-start-level = <87>;
+				google,dd-state = <0>;    /* DOCK_DEFEND_ENABLED */
+				google,dd-settings = <1>; /* DOCK_DEFEND_USER_ENABLED */
+				google,dd-trigger-time = <60>; /* 1 mins */
+			};
+
+			google_dock: google,dock {
+				status = "okay";
+				compatible = "google,dock";
+				google,dc-psy-name = "dc";
+				google,psy-type-unknown;
+				pinctrl-names = "default";
+				pinctrl-0 = <&pogo_vout_sw_en>;
+			};
+
+		};
+	};
+};
+
+&pinctrl_4 {
+	/* XAPC_GPIO1 POGO_VOUT_SW_EN */
+	pogo_vout_sw_en: pogo-vout-sw-en {
+		samsung,pins = "gpp0-2";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+		samsung,pin-con-pdn = <EXYNOS_PIN_PDN_PREV>;
+		samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+	};
+};
+
+&max77759_chg {
+	max77759,psy-name = "main-charger";
+	max77759,dc-psy-type-dock;
+
+	max77759,chg-term-voltage = <4350>;
+
+	max77759,dcin-is-dock;
+};
+
+&max77759tcpc {
+	chg-psy-name = "main-charger";
+};
diff --git a/dts/gs201-tangorpro-common.dtsi b/dts/gs201-tangorpro-common.dtsi
new file mode 100644
index 0000000..e28eade
--- /dev/null
+++ b/dts/gs201-tangorpro-common.dtsi
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * tangorpro device tree source
+ *
+ * Copyright 2022 Google,LLC
+ */
+
+#include <dt-bindings/regulator/samsung,s2mpg-regulator.h>
+
+#include "gs201/gs201-common.dtsi"
+#include "gs201/gs201-cloudripper-battery.dtsi"
+#include "gs201/gs201-cloudripper-bcl.dtsi"
+#include "gs201/gs201-cloudripper-gsa-gsc.dtsi"
+#include "gs201/gs201-cloudripper-wlan.dtsi"
+
+#include "gs201/gs201-pantah-pmic.dtsi"
+
+#include "gs201-tangorpro-uwb.dtsi"
+#include "gs201-tangorpro-camera-pmic.dtsi"
+#include "gs201-tangorpro-camera.dtsi"
+#include "gs201-tangorpro-display.dtsi"
+#include "gs201-tangorpro-pmic.dtsi"
+#include "gs201-tangorpro-touch.dtsi"
+#include "gs201-tangorpro-thermal.dtsi"
+#include "gs201-tangorpro-audio.dtsi"
+#include "gs201-tangorpro-battery.dtsi"
+#include "gs201/gs101-faceauth-dma-heap.dtsi"
+#include "gs201-tangorpro-charging.dtsi"
+#include "gs201-tangorpro-usb.dtsi"
+#include "gs201-tangorpro-usecases.dtsi"
+#include "gs201-tangorpro-wlan.dtsi"
+#include "gs201-tangorpro-led.dtsi"
+#include "gs201-tangorpro-fingerprint.dtsi"
+#include "gs201-tangorpro-sbbm.dtsi"
+#include "gs201-tangorpro-typec.dtsi"
+#include "gs201-pogo-transport.dtsi"
+
+/ {
+	fragment@modemif {
+		target-path = "/";
+		__overlay__ {
+			#address-cells = <2>;
+			#size-cells = <1>;
+			cpif {
+				status = "disabled";
+			};
+		};
+	};
+};
+
+&pcie_0 {
+	status = "disabled";
+};
+
+&spi_5 {
+	status = "disabled";
+};
+
+// Configurate gpp2-1 as default input and pull-down
+&hsi2c1_bus {
+	samsung,pins = "gpp2-1";
+	samsung,pin-function = <0>;
+	samsung,pin-pud = <1>;
+};
+
+// Disabled hsi2c_1 due to no module stmvl53l1 (ldaf-irq)
+&hsi2c_1 {
+	status = "disabled";
+};
diff --git a/dts/gs201-tangorpro-dev2.dts b/dts/gs201-tangorpro-dev2.dts
new file mode 100644
index 0000000..d628600
--- /dev/null
+++ b/dts/gs201-tangorpro-dev2.dts
@@ -0,0 +1,28 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Tangorpro device tree source
+ *
+ * Copyright 2022 Google,LLC
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "gs201-tangorpro-common.dtsi"
+#include "gs201-pogo-transport-dev.dtsi"
+
+/ {
+	board_id = <0x30701>;
+	board_rev = <0x20000>;
+	fragment@boardbase {
+		target-path="/";
+		__overlay__ {
+			model = "GS201 TANGORPRO DEV 2.0 based on GS201";
+			compatible = "google,GS201 TANGORPRO", "google,GS201";
+		};
+	};
+};
+
+&serial_0 {
+	status = "okay";
+};
diff --git a/dts/gs201-tangorpro-display-common.dtsi b/dts/gs201-tangorpro-display-common.dtsi
new file mode 100644
index 0000000..cdc04e5
--- /dev/null
+++ b/dts/gs201-tangorpro-display-common.dtsi
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Common display configurations for Tangorpro display.
+ *
+ * Copyright 2022 Google LLC
+ *
+ */
+
+/* 0: normal, 1: bottom up, 2: left up, 3: right up */
+orientation = <0>;
+
+/* i2c power supply */
+i2c-pwr-supply = <&m_ldo25_reg>;
+
+/* reset, power */
+reset-gpios = <&gpa7 1 GPIO_ACTIVE_HIGH>;
+vddi-supply = <&m_ldo24_reg>;
+disp_bias = <&rt4801_bias &tps65132_bias>;
+avdd-microvolt = <TANGORPRO_AVDD_MICROVOLT>;
+avee-microvolt = <TANGORPRO_AVEE_MICROVOLT>;
diff --git a/dts/gs201-tangorpro-display-constants.dtsi b/dts/gs201-tangorpro-display-constants.dtsi
new file mode 100644
index 0000000..c62a2e0
--- /dev/null
+++ b/dts/gs201-tangorpro-display-constants.dtsi
@@ -0,0 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Tangorpro display-specific constants
+ *
+ * Copyright 2022 Google LLC.
+ *
+ */
+#define TANGORPRO_AVDD_MICROVOLT 5500000
+#define TANGORPRO_AVEE_MICROVOLT 5500000
diff --git a/dts/gs201-tangorpro-display.dtsi b/dts/gs201-tangorpro-display.dtsi
new file mode 100644
index 0000000..789865d
--- /dev/null
+++ b/dts/gs201-tangorpro-display.dtsi
@@ -0,0 +1,262 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Display nodes for tangorpro-related boards.
+ *
+ * Copyright 2022 Google LLC
+ *
+ */
+#include "gs201-tangorpro-display-constants.dtsi"
+
+&reserved_memory {
+	#address-cells = <2>;
+	#size-cells = <1>;
+
+	fb_handover: fb_handover {
+		compatible = "exynos,fb_handover";
+		reg = <0x0 0xfac00000 0x01400000>;
+	};
+};
+
+&s2mpu_dpu0 {
+	dma-cons = <&drmdecon0>;
+};
+
+&hsi2c_6 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	status = "okay";
+	clock-frequency = <400000>;
+
+	lp8556_bl: backlight@2c {
+		/*
+		 * If bootloader probed lp8556_bl successfully, it will change
+		 * lp8556_bl to status = "okay" and rt4539_bl to status = "disabled"
+		 */
+		status = "disabled";
+		compatible = "ti,lp8556";
+		reg = <0x2c>;
+
+		bl-name = "lcd-bl";
+		enable-supply = <&m_ldo25_reg>;
+		dev-ctrl = /bits/ 8 <0x81>;
+
+		/* 5 LED strings enabled */
+		led-string-en = /bits/ 8 <0x1f>;
+
+		/* set maximum current at 23mA */
+		rom_cfg1 {
+			rom-addr = /bits/ 8 <0xa1>;
+			rom-val = /bits/ 8 <0x4f>;
+		};
+
+		/* PWM output phase config for 5 LED strings */
+		rom_cfg5 {
+			rom-addr = /bits/ 8 <0xa5>;
+			rom-val = /bits/ 8 <0x14>;
+		};
+	};
+	rt4539_bl: backlight@3c {
+		/*
+		 * If bootloader probed lp8556_bl successfully, it will change
+		 * lp8556_bl to status = "okay" and rt4539_bl to status = "disabled"
+		 */
+		status = "okay";
+		compatible = "richtek,rt4539";
+		reg = <0x3c>;
+
+		bl-name = "lcd-bl";
+		enable-supply = <&m_ldo25_reg>;
+
+		/* LED driver headroom 400mV  */
+		led-headroom = /bits/ 8 <0x00>;
+
+		bit-selection = /bits/ 8 <12>;
+
+		/* 28% (140 nits) initial brightness */
+		initial-brightness = /bits/ 16 <1146>;
+
+		/* DC Mode */
+		dimming-mode = /bits/ 8 <0x04>;
+
+		/* 1225kHz */
+		boost-switch-freq = /bits/ 8 <0x0c>;
+
+		/* 0.5 us */
+		fade-in-out-time-ctrl = /bits/ 8 <0x00>;
+
+		/* 8 ms */
+		slope-time-ctrl = /bits/ 8 <0x02>;
+
+		/* no filter */
+		slope-time-filter = /bits/ 8 <0x00>;
+
+		/* max current 23mA */
+		current-max = /bits/ 8 <0x9b>;
+
+		/* PWM signal multiplied with I2C */
+		brightness-control = /bits/ 8 <0x02>;
+
+		/* 5 LEDS */
+		enabled-leds = /bits/ 8 <0x3e>;
+
+		/* 25V */
+		boost-ovp-selection = /bits/ 8 <0x0f>;
+		led-short-protection;
+		pfm-enable;
+	};
+
+	tps65132_bias: lcd-bias@3e {
+		/*
+		 * If bootloader probed rt4801_bias successfully, it will change
+		 * tps65132_bias to status = "disabled"
+		 */
+		compatible = "ti,tps65132";
+		reg = <0x3e>;
+
+		tps65132_avdd: outp {
+			regulator-name = "disp_avdd";
+			regulator-min-microvolt = <4000000>;
+			regulator-max-microvolt = <TANGORPRO_AVDD_MICROVOLT>;
+			regulator-boot-on;
+			enable-gpios = <&gpp23 1 GPIO_ACTIVE_HIGH>;
+		};
+
+		tps65132_avee: outn {
+			regulator-name = "disp_avee";
+			regulator-min-microvolt = <4000000>;
+			regulator-max-microvolt = <TANGORPRO_AVEE_MICROVOLT>;
+			regulator-boot-on;
+		};
+	};
+
+	rt4801_bias: lcd-bias@73 {
+		/*
+		 * If bootloader probed tps65132_bias successfully, it will change
+		 * rt4801_bias to status = "disabled"
+		 */
+		compatible = "richtek,rt4801";
+		reg = <0x73>;
+		enable-gpios = <&gpp23 1 GPIO_ACTIVE_HIGH>;
+
+		rt4801_avdd: DSVP {
+			regulator-name = "disp_avdd";
+			regulator-min-microvolt = <4000000>;
+			regulator-max-microvolt = <TANGORPRO_AVDD_MICROVOLT>;
+			regulator-boot-on;
+		};
+
+		rt4801_avee: DSVN {
+			regulator-name = "disp_avee";
+			regulator-min-microvolt = <4000000>;
+			regulator-max-microvolt = <TANGORPRO_AVEE_MICROVOLT>;
+			regulator-boot-on;
+		};
+	};
+};
+
+&drmdecon0 {
+	override-hibernation;
+	memory-region = <&fb_handover>;
+	samsung,iommu-identity-map = <0x0 0xFAC00000 0x01400000>;
+};
+
+&dsim_modes {
+	dsim-modes {
+		1600x2560 {
+			mode-name = "1600x2560";
+			pmsk = <
+				0x2 0xA6 0x2 0x2DAB /* p m s k */
+				>;
+			hs-clk = <1021>;
+			esc-clk = <20>;
+		};
+	};
+};
+
+&drmdsim0 {
+	status = "ok";
+	#address-cells = <1>;
+	#size-cells = <0>;
+
+	boe_ts110f5mlg0_m0: panel@0 {
+		compatible = "boe,ts110f5mlg0";
+		label = "boe-ts110f5mlg0";
+		channel = <0>;
+		touch = <&spitouch>;
+		dual-dsi = "main";
+		backlight = <&lp8556_bl>;
+		bl-ctrl-dcs;
+		#include "gs201-tangorpro-display-common.dtsi"
+	};
+	boe_ts110f5mlg0_rt4539_m0: panel@1 {
+		compatible = "boe,ts110f5mlg0";
+		label = "boe-ts110f5mlg0-rt4539";
+		channel = <0>;
+		touch = <&spitouch>;
+		dual-dsi = "main";
+		backlight = <&rt4539_bl>;
+		#include "gs201-tangorpro-display-common.dtsi"
+	};
+	csot_ppa957db2d_m0: panel@2 {
+		compatible = "csot,ppa957db2d";
+		label = "csot-ppa957db2d";
+		channel = <0>;
+		touch = <&spitouch>;
+		dual-dsi = "main";
+		backlight = <&lp8556_bl>;
+		bl-ctrl-dcs;
+		#include "gs201-tangorpro-display-common.dtsi"
+	};
+	csot_ppa957db2d_rt4539_m0: panel@3 {
+		compatible = "csot,ppa957db2d";
+		label = "csot-ppa957db2d-rt4539";
+		channel = <0>;
+		touch = <&spitouch>;
+		dual-dsi = "main";
+		backlight = <&rt4539_bl>;
+		#include "gs201-tangorpro-display-common.dtsi"
+	};
+	panel@4 {
+		compatible = "samsung,emul";
+		label = "samsung-emul";
+		channel = <0>;
+
+		/* reset, power */
+		reset-gpios = <&gpa7 1 GPIO_ACTIVE_HIGH>;
+	};
+};
+
+&drmdsim1 {
+	status = "ok";
+	#address-cells = <1>;
+	#size-cells = <0>;
+
+	boe_ts110f5mlg0_m1: panel@0 {
+		compatible = "boe,ts110f5mlg0";
+		label = "boe-ts110f5mlg0";
+		channel = <0>;
+		touch = <&spitouch>;
+		dual-dsi = "sec";
+	};
+	boe_ts110f5mlg0_rt4539_m1: panel@1 {
+		compatible = "boe,ts110f5mlg0";
+		label = "boe-ts110f5mlg0-rt4539";
+		channel = <0>;
+		touch = <&spitouch>;
+		dual-dsi = "sec";
+	};
+	csot_ppa957db2d_m1: panel@2 {
+		compatible = "csot,ppa957db2d";
+		label = "csot-ppa957db2d";
+		channel = <0>;
+		touch = <&spitouch>;
+		dual-dsi = "sec";
+	};
+	csot_ppa957db2d_rt4539_m1: panel@3 {
+		compatible = "csot,ppa957db2d";
+		label = "csot-ppa957db2d-rt4539";
+		channel = <0>;
+		touch = <&spitouch>;
+		dual-dsi = "sec";
+	};
+};
diff --git a/dts/gs201-tangorpro-dvt1.dts b/dts/gs201-tangorpro-dvt1.dts
new file mode 100644
index 0000000..9f290d6
--- /dev/null
+++ b/dts/gs201-tangorpro-dvt1.dts
@@ -0,0 +1,27 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Tangorpro device tree source
+ *
+ * Copyright 2022 Google,LLC
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "gs201-tangorpro-common.dtsi"
+
+/ {
+	board_id = <0x30704>;
+	board_rev = <0x10000>;
+	fragment@boardbase {
+		target-path="/";
+		__overlay__ {
+			model = "GS201 TANGORPRO DVT 1.0 based on GS201";
+			compatible = "google,GS201 TANGORPRO", "google,GS201";
+		};
+	};
+};
+
+&serial_0 {
+	status = "okay";
+};
diff --git a/dts/gs201-tangorpro-evt2-bezelblack.dts b/dts/gs201-tangorpro-evt2-bezelblack.dts
new file mode 100644
index 0000000..dcdf800
--- /dev/null
+++ b/dts/gs201-tangorpro-evt2-bezelblack.dts
@@ -0,0 +1,28 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Tangorpro device tree source
+ *
+ * Copyright 2022 Google,LLC
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "gs201-tangorpro-common.dtsi"
+#include "gs201-pogo-transport-evt2.dtsi"
+
+/ {
+	board_id = <0x30703>;
+	board_rev = <0x20002>;
+	fragment@boardbase {
+		target-path="/";
+		__overlay__ {
+			model = "GS201 TANGORPRO EVT 2.0 based on GS201";
+			compatible = "google,GS201 TANGORPRO", "google,GS201";
+		};
+	};
+};
+
+&serial_0 {
+	status = "okay";
+};
diff --git a/dts/gs201-tangorpro-evt2-wingboard.dts b/dts/gs201-tangorpro-evt2-wingboard.dts
new file mode 100644
index 0000000..739847a
--- /dev/null
+++ b/dts/gs201-tangorpro-evt2-wingboard.dts
@@ -0,0 +1,28 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Tangorpro device tree source
+ *
+ * Copyright 2022 Google,LLC
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "gs201-tangorpro-common.dtsi"
+#include "gs201-pogo-transport-evt2.dtsi"
+
+/ {
+	board_id = <0x30703>;
+	board_rev = <0x20001>;
+	fragment@boardbase {
+		target-path="/";
+		__overlay__ {
+			model = "GS201 TANGORPRO EVT 2.0 Wingboard based on GS201";
+			compatible = "google,GS201 TANGORPRO", "google,GS201";
+		};
+	};
+};
+
+&serial_0 {
+	status = "okay";
+};
diff --git a/dts/gs201-tangorpro-evt2.dts b/dts/gs201-tangorpro-evt2.dts
new file mode 100644
index 0000000..cb93798
--- /dev/null
+++ b/dts/gs201-tangorpro-evt2.dts
@@ -0,0 +1,27 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Tangorpro device tree source
+ *
+ * Copyright 2022 Google,LLC
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "gs201-tangorpro-common.dtsi"
+#include "gs201-pogo-transport-evt2.dtsi"
+/ {
+	board_id = <0x30703>;
+	board_rev = <0x20000>;
+	fragment@boardbase {
+		target-path="/";
+		__overlay__ {
+			model = "GS201 TANGORPRO EVT 2.0 based on GS201";
+			compatible = "google,GS201 TANGORPRO", "google,GS201";
+		};
+	};
+};
+
+&serial_0 {
+	status = "okay";
+};
diff --git a/dts/gs201-tangorpro-fingerprint.dtsi b/dts/gs201-tangorpro-fingerprint.dtsi
new file mode 100644
index 0000000..2c2eeac
--- /dev/null
+++ b/dts/gs201-tangorpro-fingerprint.dtsi
@@ -0,0 +1,31 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Google Passport-specific fingerprint device tree source
+ *
+ * Copyright 2022 Google, LLC.
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <arm64/exynos/exynos-pinctrl.h>
+
+&pinctrl_4 {
+		fps_rst_power_down: fps_rst_power_down {
+				samsung,pins ="gpp1-1";
+				samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+				samsung,pin-con-pdn = <1>;
+				samsung,pin-pud-pdn = <3>;
+		};
+};
+
+&odm {
+		fpc:fp_fpc1020 {
+				staus = "ok";
+				compatible = "fpc,fpc1020";
+				interrupt-parent = <&gpa9>;
+				interrupts = <2 0>;
+				pinctrl-names = "rst,power_down";
+				pinctrl-0 = <&fps_rst_power_down>;
+				fpc,gpio_rst = <&gpp1 1 GPIO_ACTIVE_LOW>;
+				fpc,gpio_irq = <&gpa9 2 GPIO_ACTIVE_HIGH>;
+		};
+};
diff --git a/dts/gs201-tangorpro-led.dtsi b/dts/gs201-tangorpro-led.dtsi
new file mode 100644
index 0000000..5a7d8d0
--- /dev/null
+++ b/dts/gs201-tangorpro-led.dtsi
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Google Tangotron-specific pwm led device tree source
+ *
+ * Copyright 2021 Google, LLC.
+ */
+
+#include <arm64/exynos/exynos-pinctrl.h>
+#include "gs201/gs101-pinctrl.h"
+
+/ {
+	fragment@pwmleds {
+		target-path = "/";
+		__overlay__ {
+			pwmleds {
+				compatible = "pwm-leds";
+				node-name = "everlight,east16085Oga0";
+				green {
+					label = "green";
+					max-brightness = <4095>;
+					pwms = <&sec_pwm 1 1000000 0>;
+				};
+			};
+		};
+	};
+};
+
+&pinctrl_5 {
+	pwm1_out: pwm1-out {
+		samsung,pins = "gpp27-1";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_2>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
+		samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+	};
+	pwm1_out_sleep: pwm1-out-sleep {
+		samsung,pins = "gpp27-1";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-con-pdn = <EXYNOS_PIN_PDN_PREV>;
+		samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-val = <0>;
+	};
+};
+
+&sec_pwm {
+	pinctrl-0 = <&pwm1_out_sleep>;
+	pinctrl-1 = <&pwm1_out>;
+	pinctrl-2 = <&pwm1_out_sleep>;
+	pinctrl-names = "init", "default", "sleep";
+	status = "okay";
+};
diff --git a/dts/gs201-tangorpro-mp.dts b/dts/gs201-tangorpro-mp.dts
new file mode 100644
index 0000000..3d5b974
--- /dev/null
+++ b/dts/gs201-tangorpro-mp.dts
@@ -0,0 +1,27 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Tangorpro device tree source
+ *
+ * Copyright 2022 Google,LLC
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "gs201-tangorpro-common.dtsi"
+
+/ {
+	board_id = <0x30706>;
+	board_rev = <0x10000>;
+	fragment@boardbase {
+		target-path="/";
+		__overlay__ {
+			model = "GS201 TANGORPRO MP based on GS201";
+			compatible = "google,GS201 TANGORPRO", "google,GS201";
+		};
+	};
+};
+
+&serial_0 {
+	status = "okay";
+};
diff --git a/dts/gs201-tangorpro-pmic.dtsi b/dts/gs201-tangorpro-pmic.dtsi
new file mode 100644
index 0000000..4d08d30
--- /dev/null
+++ b/dts/gs201-tangorpro-pmic.dtsi
@@ -0,0 +1,189 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Tangorpro-specific PMIC settings
+ *
+ * Copyright 2022 Google LLC.
+ *
+ */
+
+/* Display: vddi-supply voltage */
+&m_ldo24_reg {
+	regulator-boot-on;
+	regulator-min-microvolt = <1800000>;
+	regulator-max-microvolt = <1800000>;
+	schematic-name = "L24M_DISP_VDDI";
+	subsys-name = "Display";
+};
+
+/* Display: backlight enable */
+&m_ldo25_reg {
+	regulator-boot-on;
+	/delete-property/ regulator-always-on;
+	regulator-min-microvolt = <1800000>;
+	regulator-max-microvolt = <1800000>;
+	schematic-name = "L25M_DISP_BL";
+	subsys-name = "Display";
+};
+
+/* UWB: Ravenclaw and Tangorpro use LDO[16,17]S for UWB */
+&s_ldo16_reg {
+	regulator-always-on;
+	regulator-initial-mode = <SEC_OPMODE_ON>;
+};
+
+/* UWB: Ravenclaw and Tangorpro use LDO[16,17]S for UWB */
+&s_ldo17_reg {
+	regulator-always-on;
+	regulator-initial-mode = <SEC_OPMODE_ON>;
+};
+
+&m_ldo16_reg {
+	schematic-name = "L16M_SPARE";
+	subsys-name = "Spare";
+};
+
+&m_ldo18_reg {
+	schematic-name = "L18M_SPARE";
+	subsys-name = "Spare";
+};
+
+&m_ldo20_reg {
+	schematic-name = "L20M_DMIC2";
+};
+
+&m_ldo24_reg {
+	schematic-name = "L24M_DISP_VDDI";
+	subsys-name = "Display";
+};
+
+&m_ldo26_reg {
+	schematic-name = "L26M_ACC_DETECT";
+	subsys-name = "Pogo";
+};
+
+&m_ldo27_reg {
+	schematic-name = "L27M_SPARE";
+	subsys-name = "Spare";
+};
+
+&m_ldo28_reg {
+	schematic-name = "L28M_SPARE";
+	subsys-name = "Spare";
+};
+
+&s_buckc_reg {
+	subsys-name = "UFS";
+};
+
+&s_buckd_reg {
+	subsys-name = "UFS";
+};
+
+&s_ldo5_reg {
+	schematic-name = "L5S_SPARE";
+	subsys-name = "Spare";
+};
+
+&s_ldo9_reg {
+	schematic-name = "L9S_SPARE";
+	subsys-name = "Spare";
+};
+
+&s_ldo10_reg {
+	schematic-name = "L10S_SPARE";
+	subsys-name = "Spare";
+};
+
+&s_ldo11_reg {
+	schematic-name = "L11S_SPARE";
+	subsys-name = "Spare";
+};
+
+&s_ldo12_reg {
+	schematic-name = "L12S_SPARE";
+	subsys-name = "Spare";
+};
+
+&s_ldo15_reg {
+	schematic-name = "L15S_FPS";
+};
+
+&s_ldo20_reg {
+	schematic-name = "L20S_DMIC1";
+};
+
+&s_ldo28_reg {
+	schematic-name = "L28S_USB_HUB";
+	subsys-name = "USB";
+};
+
+/* No modem on Tangor Pro */
+/* replace VSYS_PWR_MMWAVE to L1M_ALIVE */
+&ch1 {
+	rail-name = "LDO1M";
+};
+
+/* replace VSYS_PWR_MODEM to L2M_ALIVE */
+&ch2 {
+	rail-name = "LDO2M";
+};
+
+/* replace VSYS_PWR_RFFE to S9M_LLDO3 */
+&ch3 {
+	rail-name = "BUCK9M";
+};
+
+&m_ext4_rail {
+	schematic-name = "VSEN_C1_NC";
+	subsys-name = "Spare";
+};
+
+&m_ext5_rail {
+	schematic-name = "VSEN_C2_NC";
+	subsys-name = "Spare";
+};
+
+&m_ext6_rail {
+	schematic-name = "VSEN_C3_NC";
+	subsys-name = "Spare";
+};
+
+/* replace VSYS_PWR_CAM to L21S_VDD2L_MEM */
+&ch15 {
+	rail-name = "LDO21S";
+};
+
+&s_ext6_rail {
+	schematic-name = "VSEN_C6_NC";
+	subsys-name = "Spare";
+};
+
+/* Unused */
+&m_ldo18_reg {
+	/delete-property/ regulator-always-on;
+};
+
+/* Unused */
+&m_ldo26_reg {
+	/delete-property/ regulator-always-on;
+};
+
+/* Unused */
+&s_ldo5_reg {
+	/delete-property/ regulator-boot-on;
+};
+
+/* Unused */
+&s_ldo9_reg {
+	/delete-property/ regulator-always-on;
+};
+
+/* Unused */
+&s_ldo10_reg {
+	/delete-property/ regulator-always-on;
+};
+
+/* Unused */
+&s_ldo11_reg {
+	/delete-property/ regulator-always-on;
+};
diff --git a/dts/gs201-tangorpro-pvt1.dts b/dts/gs201-tangorpro-pvt1.dts
new file mode 100644
index 0000000..cda5e5a
--- /dev/null
+++ b/dts/gs201-tangorpro-pvt1.dts
@@ -0,0 +1,27 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Tangorpro device tree source
+ *
+ * Copyright 2022 Google,LLC
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "gs201-tangorpro-common.dtsi"
+
+/ {
+	board_id = <0x30705>;
+	board_rev = <0x10000>;
+	fragment@boardbase {
+		target-path="/";
+		__overlay__ {
+			model = "GS201 TANGORPRO PVT 1.0 based on GS201";
+			compatible = "google,GS201 TANGORPRO", "google,GS201";
+		};
+	};
+};
+
+&serial_0 {
+	status = "okay";
+};
diff --git a/dts/gs201-tangorpro-sbbm.dtsi b/dts/gs201-tangorpro-sbbm.dtsi
new file mode 100644
index 0000000..5c1e397
--- /dev/null
+++ b/dts/gs201-tangorpro-sbbm.dtsi
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * SideBand Bit Multiplexer device tree source
+ *
+ * Copyright 2022 Google LLC.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <arm64/exynos/exynos-pinctrl.h>
+#include <dt-bindings/gpio/gpio.h>
+/ {
+	fragment@sbbmux {
+		target-path = "/";
+		__overlay__ {
+			sbb_mux: sbb-mux {
+				compatible = "google,sbb-mux";
+				gpios = <&gpp18 0 0>, <&gpp18 1 0>, <&gpp18 3 0>, <&gpp18 2 0>;
+				gpio_names = "C1_T0__KIBBLE1_TRIG0",
+						"C1_T1__KIBBLE1_TRIG1",
+						"C1_T2__KIBBLE1_TRIG2",
+						"C1_T3__KIBBLE1_TRIG3";
+				default_signals = "gp_region_0", "gp_region_1",
+							"gp_region_2", "gp_region_3";
+			};
+		};
+	};
+};
diff --git a/dts/gs201-tangorpro-thermal.dtsi b/dts/gs201-tangorpro-thermal.dtsi
new file mode 100644
index 0000000..dd1e38d
--- /dev/null
+++ b/dts/gs201-tangorpro-thermal.dtsi
@@ -0,0 +1,147 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Google GS201 tangorpro-specific thermal device tree source
+ *
+ * Copyright (c) 2022 Google, LLC
+ *		https://www.google.com
+ */
+
+#include <dt-bindings/thermal/thermal.h>
+
+&acpm_mfd_bus1 {
+	s2mpg13mfd@2f {
+		gs201_tm1: gs201_spmic_tm1 {
+			compatible = "google,s2mpg13-spmic-thermal";
+			#thermal-sensor-cells = <1>;
+			adc_chan_en = /bits/ 8 <0x3F>;
+		};
+	};
+};
+
+/* Thermal Zones */
+&thermal_zones {
+	neutral_therm {
+		polling-delay-passive = <0>;
+		polling-delay = <0>;
+		thermal-governor = "user_space";
+		thermal-sensors = <&gs201_tm1 0>;
+		trips {
+			trip_config0: trip-config0 {
+				temperature = <125000>;
+				hysteresis = <1000>;
+				type = "passive";
+			};
+		};
+	};
+	quiet_therm {
+		polling-delay-passive = <0>;
+		polling-delay = <0>;
+		thermal-governor = "user_space";
+		thermal-sensors = <&gs201_tm1 1>;
+		trips {
+			trip_config1: trip-config1 {
+				temperature = <62000>;
+				hysteresis = <1000>;
+				type = "passive";
+			};
+			backup_shutdown_sw1: backup-shutdown-sw1 {
+				temperature = <64000>;
+				hysteresis = <1000>;
+				type = "critical";
+			};
+			backup_shutdown_hw1: backup-shutdown-hw1 {
+				temperature = <66000>;
+				hysteresis = <1000>;
+				type = "hot";
+			};
+		};
+	};
+	charger_skin_therm {
+		polling-delay-passive = <0>;
+		polling-delay = <0>;
+		thermal-governor = "user_space";
+		thermal-sensors = <&gs201_tm1 2>;
+		trips {
+			trip_config2: trip-config2 {
+				temperature = <125000>;
+				hysteresis = <1000>;
+				type = "passive";
+			};
+		};
+	};
+	usb_pwr_therm {
+		polling-delay-passive = <0>;
+		polling-delay = <0>;
+		thermal-governor = "user_space";
+		thermal-sensors = <&gs201_tm1 3>;
+		trips {
+			trip_config3: trip-config3 {
+				temperature = <125000>;
+				hysteresis = <1000>;
+				type = "passive";
+			};
+		};
+	};
+	usb_pwr_therm2 {
+		polling-delay-passive = <0>;
+		polling-delay = <0>;
+		thermal-governor = "user_space";
+		thermal-sensors = <&gs201_tm1 4>;
+		trips {
+			trip_config4: trip-config4 {
+				temperature = <125000>;
+				hysteresis = <1000>;
+				type = "passive";
+			};
+		};
+	};
+	disp_therm {
+		polling-delay-passive = <0>;
+		polling-delay = <0>;
+		thermal-governor = "user_space";
+		thermal-sensors = <&gs201_tm1 5>;
+		trips {
+			trip_config5: trip-config5 {
+				temperature = <55000>;
+				hysteresis = <1000>;
+				type = "passive";
+			};
+			backup_shutdown_sw2: backup-shutdown-sw2 {
+				temperature = <57000>;
+				hysteresis = <1000>;
+				type = "critical";
+			};
+			backup_shutdown_hw2: backup-shutdown-hw2 {
+				temperature = <59000>;
+				hysteresis = <1000>;
+				type = "hot";
+			};
+		};
+	};
+	therm_6 {
+		polling-delay-passive = <0>;
+		polling-delay = <0>;
+		thermal-governor = "user_space";
+		thermal-sensors = <&gs201_tm1 6>;
+		trips {
+			trip_config6: trip-config6 {
+				temperature = <125000>;
+				hysteresis = <1000>;
+				type = "passive";
+			};
+		};
+	};
+	therm_7 {
+		polling-delay-passive = <0>;
+		polling-delay = <0>;
+		thermal-governor = "user_space";
+		thermal-sensors = <&gs201_tm1 7>;
+		trips {
+			trip_config7: trip-config7 {
+				temperature = <125000>;
+				hysteresis = <1000>;
+				type = "passive";
+			};
+		};
+	};
+};
diff --git a/dts/gs201-tangorpro-touch.dtsi b/dts/gs201-tangorpro-touch.dtsi
new file mode 100644
index 0000000..0db26af
--- /dev/null
+++ b/dts/gs201-tangorpro-touch.dtsi
@@ -0,0 +1,2163 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Google Tangorpro touch device tree source.
+ *
+ * Copyright 2022 Google Inc.
+ *
+ */
+
+#include <arm64/exynos/exynos-pinctrl.h>
+#include "gs201/gs101-pinctrl.h"
+#include <dt-bindings/regulator/samsung,s2mpg-regulator.h>
+
+&ts_spi_cs_active {
+	samsung,pins = "gpp20-3";
+	samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+	samsung,pin-val = <1>;
+	samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+	samsung,pin-con-pdn = <EXYNOS_PIN_PDN_OUT1>;
+	samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+};
+
+&ts_spi_cs_sleep {
+	samsung,pins = "gpp20-3";
+	samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
+	samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
+	samsung,pin-con-pdn = <EXYNOS_PIN_PDN_INPUT>;
+	samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+};
+
+&spi_0 {
+	cs-gpio = <&gpp20 3 GPIO_ACTIVE_LOW>;
+	num-cs = <1>;
+};
+
+&spitouch {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	status = "ok";
+	compatible = "novatek,NVT-ts-spi";
+	reg = <0>;
+
+	spi-max-frequency = <15000000>;	//4800000,9600000,15000000,19200000
+	novatek,reset-gpio = <&gpp23 2 0>;
+	novatek,irq-gpio = <&gpa7 0 0x2001>; /* IRQF_ONESHOT | IRQF_TRIGGER_RISING */
+	novatek,panel_map = <&boe_ts110f5mlg0_m0 0
+			     &boe_ts110f5mlg0_m1 0
+			     &boe_ts110f5mlg0_rt4539_m0 0
+			     &boe_ts110f5mlg0_rt4539_m1 0
+			     &csot_ppa957db2d_m0 1
+			     &csot_ppa957db2d_m1 1
+			     &csot_ppa957db2d_rt4539_m0 1
+			     &csot_ppa957db2d_rt4539_m1 1>;
+
+	novatek,firmware_names = "novatek_ts_fw.bin",
+				"novatek_ts_fw_csot.bin";
+	novatek,mp_firmware_names = "novatek_ts_mp.bin",
+				"novatek_ts_mp_csot.bin";
+
+	novatek,pen-support;
+	novatek,wgp-stylus;
+
+	goog,ignore-force-active;
+	goog,ignore-screenoff-heatmap;
+	goog,default-grip-disabled;
+	goog,default-palm-disabled;
+	goog,offload-caps-context-channel-types = /bits/ 16 <0x0300>;
+	goog,offload-enabled;
+	goog,v4l2-enabled;
+	goog,touch_offload_id = /bits/ 8 <'t' '6' '0' '0'>;
+	goog,display-resolution = /bits/ 16 <1600 2560>;
+	goog,channel-num = /bits/ 16 <32 50>;
+
+
+	/* 525 */
+	//novatek,swrst-n8-addr = <0x01F01A>;
+
+	/* 672A, 525B, 675, 526, 672C, 523 */
+	novatek,swrst-n8-addr = <0x03F0FE>;
+	novatek,spi-rd-fast-addr = <0x03F310>;
+
+	/* MP */
+	novatek,mp-support-dt;
+
+	/* touchscreen surface resolutions */
+	touchscreen-abs-mt-touch-major-res = <1>;
+	touchscreen-abs-mt-position-x-res = <11>; /* 2560pxls / 235.88mm */
+	touchscreen-abs-mt-position-y-res = <11>; /* 1600pxls / 147.41 */
+
+/*
+ * NVT MP criteria.
+ */
+	novatek-mp-criteria-nvtpid@0 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "novatek-mp-criteria-7803";
+
+		/* MP Config */
+		IC_X_CFG_SIZE = <32>;
+		IC_Y_CFG_SIZE = <50>;
+		IC_KEY_CFG_SIZE = <4>;
+		X_Channel = <32>;
+		Y_Channel = <50>;
+		AIN_X = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31>;
+		AIN_Y = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49>;
+
+		AIN_KEY = <0 1 2 0xFF>;
+
+		/* MP Criteria */
+		PS_Config_Lmt_Short_Rawdata_P = <
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			>;
+
+		PS_Config_Lmt_Short_Rawdata_N = <
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			>;
+
+		PS_Config_Lmt_Open_Rawdata_P = <
+			3353 3550 3565 3591 3591 3581 3570 3560 3525 3536 3544 3553 3551 3532 3511 3494 3514 3563 3578 3596 3593 3579 3571 3564 3602 3607 3617 3621 3621 3599 3579 3592
+			3532 3536 3550 3570 3571 3563 3554 3543 3469 3479 3484 3493 3491 3479 3459 3442 3532 3553 3567 3582 3581 3567 3558 3551 3528 3536 3543 3553 3557 3537 3521 3542
+			3486 3483 3501 3521 3521 3515 3504 3497 3469 3472 3481 3491 3490 3474 3460 3449 3481 3498 3515 3530 3528 3515 3505 3495 3574 3574 3585 3595 3598 3578 3565 3592
+			3500 3495 3516 3536 3535 3528 3518 3505 3467 3472 3481 3488 3493 3476 3458 3432 3533 3547 3568 3586 3578 3571 3558 3544 3523 3525 3536 3546 3557 3540 3523 3536
+			3514 3508 3526 3551 3542 3536 3525 3516 3445 3448 3458 3463 3470 3460 3442 3424 3542 3556 3568 3588 3574 3564 3550 3542 3514 3516 3528 3535 3543 3529 3512 3528
+			3474 3473 3491 3505 3502 3494 3487 3487 3501 3511 3516 3526 3535 3530 3512 3501 3493 3512 3529 3542 3537 3525 3512 3511 3540 3547 3554 3565 3575 3567 3551 3577
+			3477 3477 3495 3509 3507 3497 3477 3477 3446 3455 3460 3472 3479 3476 3448 3451 3523 3539 3556 3563 3557 3543 3522 3525 3525 3533 3537 3550 3561 3554 3528 3565
+			3462 3459 3483 3495 3491 3486 3486 3483 3495 3502 3508 3519 3529 3525 3508 3498 3507 3521 3540 3547 3537 3530 3522 3518 3570 3577 3582 3592 3603 3600 3584 3610
+			3477 3472 3491 3501 3494 3476 3480 3474 3421 3423 3432 3438 3439 3434 3430 3411 3488 3501 3519 3521 3511 3487 3487 3481 3504 3508 3518 3529 3535 3528 3525 3537
+			3480 3476 3495 3502 3502 3494 3487 3487 3455 3458 3466 3477 3480 3481 3476 3455 3480 3495 3512 3515 3512 3502 3488 3486 3546 3550 3560 3572 3579 3577 3565 3581
+			3474 3474 3497 3500 3486 3495 3488 3487 3431 3438 3448 3449 3439 3456 3438 3425 3452 3469 3486 3488 3469 3472 3466 3466 3511 3519 3529 3533 3530 3549 3530 3551
+			3498 3495 3512 3518 3515 3509 3504 3500 3434 3444 3452 3456 3465 3473 3458 3444 3511 3526 3540 3537 3530 3519 3511 3507 3530 3537 3549 3557 3570 3577 3557 3579
+			3460 3463 3481 3470 3479 3476 3473 3466 3413 3420 3424 3421 3444 3452 3434 3420 3465 3480 3497 3479 3484 3479 3470 3467 3474 3481 3483 3480 3507 3512 3495 3518
+			3481 3473 3498 3495 3493 3491 3486 3476 3403 3409 3416 3424 3432 3446 3427 3417 3515 3526 3546 3540 3536 3529 3521 3512 3463 3472 3477 3493 3505 3515 3498 3523
+			3425 3424 3431 3442 3444 3445 3439 3432 3406 3409 3406 3430 3434 3458 3441 3423 3455 3469 3473 3481 3480 3474 3466 3459 3504 3507 3505 3533 3542 3558 3540 3550
+			3483 3480 3501 3494 3495 3491 3479 3476 3393 3395 3404 3417 3421 3434 3424 3404 3470 3488 3502 3494 3493 3486 3474 3472 3474 3477 3487 3501 3507 3518 3504 3512
+			3445 3432 3470 3466 3469 3472 3460 3456 3427 3413 3441 3451 3459 3476 3455 3441 3442 3442 3473 3463 3463 3456 3445 3442 3502 3493 3522 3530 3544 3558 3540 3560
+			3458 3463 3488 3484 3487 3480 3476 3470 3369 3379 3390 3399 3410 3428 3407 3392 3458 3474 3494 3484 3481 3473 3466 3463 3467 3476 3487 3494 3509 3526 3507 3526
+			3424 3427 3446 3434 3435 3427 3421 3416 3374 3382 3389 3403 3411 3432 3421 3406 3477 3495 3512 3495 3493 3481 3476 3473 3423 3432 3438 3452 3463 3480 3465 3486
+			3383 3399 3424 3413 3409 3410 3403 3395 3374 3399 3404 3421 3427 3453 3439 3428 3430 3459 3477 3460 3453 3451 3444 3430 3488 3514 3522 3539 3549 3571 3558 3579
+			3432 3431 3453 3444 3438 3437 3434 3424 3360 3369 3375 3386 3392 3414 3404 3385 3452 3465 3483 3463 3458 3452 3445 3434 3438 3452 3458 3472 3483 3504 3497 3508
+			3424 3432 3444 3430 3432 3431 3420 3413 3382 3388 3402 3420 3424 3446 3441 3421 3417 3439 3446 3430 3428 3418 3404 3404 3488 3493 3505 3516 3525 3547 3542 3554
+			3389 3397 3407 3393 3396 3396 3385 3382 3322 3333 3343 3354 3362 3381 3375 3355 3399 3418 3427 3411 3410 3406 3392 3389 3418 3430 3444 3456 3466 3484 3480 3493
+			3431 3435 3444 3428 3431 3423 3416 3414 3360 3369 3383 3396 3403 3423 3421 3403 3472 3495 3501 3483 3483 3472 3465 3462 3439 3451 3462 3474 3481 3501 3498 3507
+			3378 3390 3393 3381 3383 3376 3371 3368 3306 3320 3333 3343 3354 3369 3372 3365 3400 3423 3427 3410 3410 3397 3390 3388 3403 3414 3425 3434 3448 3460 3459 3480
+			3465 3456 3463 3451 3444 3439 3434 3428 3327 3337 3346 3357 3371 3393 3389 3375 3473 3484 3491 3474 3467 3463 3453 3448 3397 3410 3421 3434 3449 3470 3463 3483
+			3378 3374 3364 3360 3354 3353 3348 3346 3333 3341 3351 3369 3379 3400 3420 3403 3424 3437 3423 3418 3409 3402 3393 3390 3413 3421 3431 3446 3455 3472 3484 3495
+			3379 3381 3369 3360 3362 3361 3355 3353 3295 3302 3312 3327 3333 3354 3376 3354 3430 3451 3438 3424 3423 3417 3411 3404 3376 3385 3393 3410 3416 3432 3448 3453
+			3402 3403 3385 3374 3375 3374 3362 3358 3305 3311 3320 3339 3343 3364 3388 3371 3445 3462 3442 3425 3424 3417 3404 3396 3403 3410 3420 3441 3451 3469 3486 3500
+			3376 3375 3362 3348 3350 3347 3339 3339 3332 3337 3354 3364 3369 3393 3418 3409 3390 3407 3388 3374 3372 3367 3357 3362 3409 3416 3431 3442 3451 3472 3491 3511
+			3302 3294 3274 3262 3260 3255 3246 3248 3208 3214 3232 3245 3257 3274 3295 3297 3311 3319 3298 3278 3276 3266 3252 3256 3288 3294 3311 3323 3337 3351 3372 3393
+			3299 3292 3278 3270 3270 3267 3267 3260 3207 3220 3232 3242 3259 3278 3298 3297 3348 3355 3337 3319 3316 3306 3302 3295 3305 3319 3330 3343 3358 3375 3389 3417
+			3288 3270 3255 3245 3239 3232 3231 3229 3176 3192 3201 3221 3224 3248 3267 3266 3311 3312 3294 3277 3271 3263 3259 3255 3245 3259 3267 3283 3292 3311 3332 3355
+			3304 3288 3273 3263 3257 3262 3253 3249 3210 3220 3232 3249 3255 3278 3301 3301 3327 3322 3306 3294 3288 3283 3273 3264 3308 3315 3327 3346 3355 3374 3395 3418
+			3257 3241 3228 3217 3214 3215 3207 3204 3178 3180 3196 3206 3214 3232 3255 3252 3315 3311 3294 3278 3273 3269 3257 3250 3245 3255 3270 3281 3291 3309 3330 3361
+			3290 3281 3259 3249 3253 3250 3243 3246 3183 3189 3206 3217 3222 3243 3266 3267 3323 3325 3297 3281 3283 3270 3259 3257 3262 3266 3284 3292 3301 3320 3339 3368
+			3271 3252 3238 3215 3220 3213 3203 3201 3162 3169 3183 3196 3201 3221 3245 3248 3299 3298 3280 3256 3257 3246 3238 3239 3274 3280 3298 3305 3313 3332 3350 3382
+			3283 3264 3253 3242 3241 3236 3231 3228 3164 3175 3183 3192 3203 3217 3238 3242 3327 3322 3304 3287 3278 3264 3257 3253 3231 3245 3257 3266 3277 3291 3311 3339
+			3266 3239 3225 3213 3213 3203 3201 3196 3159 3171 3183 3192 3203 3224 3239 3253 3288 3273 3255 3239 3231 3220 3213 3210 3253 3267 3276 3285 3298 3318 3330 3372
+			3285 3250 3235 3225 3220 3218 3210 3206 3133 3137 3148 3161 3168 3190 3211 3221 3309 3294 3276 3259 3252 3249 3238 3235 3234 3243 3252 3266 3276 3294 3312 3346
+			3224 3192 3180 3166 3165 3166 3157 3152 3159 3168 3178 3197 3201 3225 3252 3263 3273 3256 3239 3224 3218 3215 3204 3199 3246 3255 3267 3284 3292 3311 3330 3372
+			3248 3213 3199 3186 3189 3182 3169 3162 3126 3133 3144 3159 3172 3190 3211 3225 3276 3257 3239 3227 3224 3215 3203 3197 3211 3218 3227 3246 3257 3271 3290 3330
+			3242 3213 3192 3179 3183 3178 3166 3166 3124 3133 3147 3158 3169 3186 3207 3229 3273 3257 3235 3218 3220 3208 3193 3192 3206 3211 3227 3236 3248 3262 3276 3318
+			3239 3201 3190 3182 3176 3172 3166 3165 3169 3175 3193 3203 3213 3229 3248 3270 3255 3232 3213 3197 3192 3176 3171 3165 3229 3235 3253 3264 3276 3294 3308 3354
+			3228 3189 3176 3165 3162 3155 3152 3144 3084 3095 3109 3124 3133 3152 3176 3194 3253 3229 3213 3199 3194 3183 3180 3173 3183 3192 3200 3217 3225 3241 3259 3291
+			3241 3203 3189 3176 3175 3166 3165 3161 3126 3130 3141 3157 3166 3183 3204 3222 3301 3274 3256 3242 3236 3224 3220 3214 3225 3232 3243 3259 3271 3284 3301 3337
+			3221 3182 3166 3157 3151 3147 3138 3137 3099 3105 3119 3133 3138 3155 3178 3194 3220 3199 3179 3168 3159 3151 3140 3138 3166 3175 3189 3201 3214 3228 3245 3278
+			3238 3197 3182 3173 3171 3169 3159 3158 3078 3089 3103 3119 3126 3144 3165 3186 3264 3236 3217 3206 3197 3192 3180 3182 3178 3187 3203 3221 3231 3250 3264 3301
+			3189 3155 3141 3131 3133 3122 3116 3116 3054 3063 3075 3091 3096 3116 3134 3152 3162 3140 3120 3108 3108 3096 3087 3088 3140 3145 3159 3173 3182 3199 3211 3241
+			3242 3208 3193 3185 3183 3175 3172 3166 3081 3096 3106 3117 3122 3141 3157 3175 3291 3271 3250 3236 3236 3221 3215 3211 3171 3183 3193 3210 3220 3234 3248 3270
+			>;
+
+		PS_Config_Lmt_Open_Rawdata_N = <
+			1437 1521 1528 1539 1539 1534 1530 1525 1510 1515 1519 1522 1522 1513 1504 1497 1506 1527 1533 1541 1540 1534 1530 1527 1543 1546 1550 1552 1552 1542 1534 1539
+			1513 1515 1521 1530 1530 1527 1523 1518 1486 1491 1493 1497 1496 1491 1482 1475 1513 1522 1528 1535 1534 1528 1525 1522 1512 1515 1518 1522 1524 1516 1509 1518
+			1494 1492 1500 1509 1509 1506 1501 1498 1486 1488 1492 1496 1495 1489 1483 1478 1492 1499 1506 1513 1512 1506 1502 1498 1531 1531 1536 1540 1542 1533 1528 1539
+			1500 1498 1507 1515 1515 1512 1507 1502 1486 1488 1492 1495 1497 1489 1482 1471 1514 1520 1529 1537 1533 1530 1525 1519 1510 1510 1515 1519 1524 1517 1510 1515
+			1506 1503 1511 1522 1518 1515 1510 1507 1476 1477 1482 1484 1487 1483 1475 1467 1518 1524 1529 1537 1531 1527 1521 1518 1506 1507 1512 1515 1518 1512 1505 1512
+			1489 1488 1496 1502 1501 1497 1494 1494 1500 1504 1507 1511 1515 1513 1505 1500 1497 1505 1512 1518 1516 1510 1505 1504 1517 1520 1523 1528 1532 1528 1522 1533
+			1490 1490 1498 1504 1503 1498 1490 1490 1477 1480 1483 1488 1491 1489 1477 1479 1510 1516 1524 1527 1524 1518 1509 1510 1510 1514 1516 1521 1526 1523 1512 1528
+			1483 1482 1492 1498 1496 1494 1494 1492 1498 1501 1503 1508 1512 1510 1503 1499 1503 1509 1517 1520 1516 1513 1509 1507 1530 1533 1535 1539 1544 1543 1536 1547
+			1490 1488 1496 1500 1497 1489 1491 1489 1466 1467 1471 1473 1474 1471 1470 1462 1495 1500 1508 1509 1504 1494 1494 1492 1501 1503 1507 1512 1515 1512 1510 1516
+			1491 1489 1498 1501 1501 1497 1494 1494 1480 1482 1485 1490 1491 1492 1489 1480 1491 1498 1505 1506 1505 1501 1495 1494 1519 1521 1525 1531 1534 1533 1528 1534
+			1489 1489 1498 1500 1494 1498 1495 1494 1470 1473 1477 1478 1474 1481 1473 1468 1479 1486 1494 1495 1486 1488 1485 1485 1504 1508 1512 1514 1513 1521 1513 1522
+			1499 1498 1505 1507 1506 1504 1501 1500 1471 1476 1479 1481 1485 1488 1482 1476 1504 1511 1517 1516 1513 1508 1504 1503 1513 1516 1521 1524 1530 1533 1524 1534
+			1483 1484 1492 1487 1491 1489 1488 1485 1462 1465 1467 1466 1476 1479 1471 1465 1485 1491 1498 1491 1493 1491 1487 1486 1489 1492 1492 1491 1503 1505 1498 1507
+			1492 1488 1499 1498 1497 1496 1494 1489 1458 1461 1464 1467 1471 1477 1468 1464 1506 1511 1519 1517 1515 1512 1509 1505 1484 1488 1490 1497 1502 1506 1499 1510
+			1468 1467 1470 1475 1476 1476 1474 1471 1459 1461 1459 1470 1471 1482 1474 1467 1480 1486 1488 1492 1491 1489 1485 1482 1501 1503 1502 1514 1518 1525 1517 1521
+			1492 1491 1500 1497 1498 1496 1491 1489 1454 1455 1459 1464 1466 1471 1467 1459 1487 1495 1501 1497 1497 1494 1489 1488 1489 1490 1494 1500 1503 1507 1501 1505
+			1476 1471 1487 1485 1486 1488 1483 1481 1468 1462 1474 1479 1482 1489 1480 1474 1475 1475 1488 1484 1484 1481 1476 1475 1501 1497 1509 1513 1519 1525 1517 1525
+			1482 1484 1495 1493 1494 1491 1489 1487 1444 1448 1453 1456 1461 1469 1460 1453 1482 1489 1497 1493 1492 1488 1485 1484 1486 1489 1494 1497 1504 1511 1503 1511
+			1467 1468 1477 1471 1472 1468 1466 1464 1446 1449 1452 1458 1462 1471 1466 1459 1490 1498 1505 1498 1497 1492 1489 1488 1467 1471 1473 1479 1484 1491 1485 1494
+			1450 1456 1467 1462 1461 1461 1458 1455 1446 1456 1459 1466 1468 1480 1474 1469 1470 1482 1490 1483 1480 1479 1476 1470 1495 1506 1509 1516 1521 1530 1525 1534
+			1471 1470 1480 1476 1473 1473 1471 1467 1440 1444 1446 1451 1453 1463 1459 1450 1479 1485 1492 1484 1482 1479 1476 1471 1473 1479 1482 1488 1492 1501 1498 1503
+			1467 1471 1476 1470 1471 1470 1465 1462 1449 1452 1458 1465 1467 1477 1474 1466 1464 1474 1477 1470 1469 1465 1459 1459 1495 1497 1502 1507 1510 1520 1518 1523
+			1452 1456 1460 1454 1455 1455 1450 1449 1423 1428 1432 1437 1441 1449 1446 1438 1456 1465 1468 1462 1461 1459 1453 1452 1465 1470 1476 1481 1485 1493 1491 1497
+			1470 1472 1476 1469 1470 1467 1464 1463 1440 1444 1450 1455 1458 1467 1466 1458 1488 1498 1500 1492 1492 1488 1485 1483 1474 1479 1483 1489 1492 1500 1499 1503
+			1447 1453 1454 1449 1450 1447 1444 1443 1417 1423 1428 1432 1437 1444 1445 1442 1457 1467 1468 1461 1461 1456 1453 1452 1458 1463 1468 1471 1477 1483 1482 1491
+			1485 1481 1484 1479 1476 1474 1471 1469 1426 1430 1434 1438 1444 1454 1452 1446 1488 1493 1496 1489 1486 1484 1480 1477 1456 1461 1466 1471 1478 1487 1484 1492
+			1447 1446 1441 1440 1437 1437 1435 1434 1428 1432 1436 1444 1448 1457 1465 1458 1467 1473 1467 1465 1461 1458 1454 1453 1462 1466 1470 1477 1480 1488 1493 1498
+			1448 1449 1444 1440 1441 1440 1438 1437 1412 1415 1419 1426 1428 1437 1447 1437 1470 1479 1473 1467 1467 1464 1462 1459 1447 1450 1454 1461 1464 1471 1477 1480
+			1458 1458 1450 1446 1446 1446 1441 1439 1416 1419 1423 1431 1432 1441 1452 1444 1476 1483 1475 1468 1467 1464 1459 1455 1458 1461 1465 1474 1479 1486 1494 1500
+			1447 1446 1441 1435 1435 1434 1431 1431 1428 1430 1437 1441 1444 1454 1465 1461 1453 1460 1452 1446 1445 1443 1438 1441 1461 1464 1470 1475 1479 1488 1496 1504
+			1415 1411 1403 1398 1397 1395 1391 1392 1375 1377 1385 1390 1396 1403 1412 1413 1419 1422 1413 1405 1404 1399 1393 1395 1409 1411 1419 1424 1430 1436 1445 1454
+			1414 1411 1405 1401 1401 1400 1400 1397 1374 1380 1385 1389 1396 1405 1413 1413 1435 1438 1430 1422 1421 1417 1415 1412 1416 1422 1427 1432 1439 1446 1452 1464
+			1409 1401 1395 1390 1388 1385 1384 1384 1361 1368 1372 1380 1381 1392 1400 1399 1419 1419 1411 1404 1402 1398 1396 1395 1390 1396 1400 1407 1411 1419 1428 1438
+			1416 1409 1402 1398 1396 1398 1394 1392 1375 1380 1385 1392 1395 1405 1414 1414 1426 1423 1417 1411 1409 1407 1402 1399 1417 1420 1426 1434 1438 1446 1455 1465
+			1396 1389 1383 1378 1377 1378 1374 1373 1362 1363 1369 1374 1377 1385 1395 1393 1420 1419 1411 1405 1402 1401 1396 1393 1390 1395 1401 1406 1410 1418 1427 1440
+			1410 1406 1396 1392 1394 1393 1390 1391 1364 1366 1374 1378 1381 1390 1399 1400 1424 1425 1413 1406 1407 1401 1396 1396 1398 1399 1407 1411 1414 1423 1431 1443
+			1402 1393 1387 1378 1380 1377 1372 1372 1355 1358 1364 1369 1372 1380 1390 1392 1414 1413 1405 1395 1396 1391 1387 1388 1403 1405 1413 1416 1420 1428 1435 1449
+			1407 1399 1394 1389 1389 1387 1384 1383 1356 1360 1364 1368 1372 1378 1387 1389 1426 1423 1416 1408 1405 1399 1396 1394 1384 1390 1396 1399 1404 1410 1419 1431
+			1399 1388 1382 1377 1377 1372 1372 1369 1354 1359 1364 1368 1372 1381 1388 1394 1409 1402 1395 1388 1384 1380 1377 1375 1394 1400 1404 1408 1413 1422 1427 1445
+			1408 1393 1386 1382 1380 1379 1375 1374 1342 1344 1349 1354 1357 1367 1376 1380 1418 1411 1404 1396 1393 1392 1387 1386 1386 1390 1393 1399 1404 1411 1419 1434
+			1381 1368 1363 1357 1356 1357 1353 1351 1354 1357 1362 1370 1372 1382 1393 1398 1402 1395 1388 1381 1379 1378 1373 1371 1391 1395 1400 1407 1411 1419 1427 1445
+			1392 1377 1371 1365 1366 1363 1358 1355 1339 1342 1347 1354 1359 1367 1376 1382 1404 1396 1388 1383 1381 1378 1372 1370 1376 1379 1383 1391 1396 1402 1410 1427
+			1389 1377 1368 1362 1364 1362 1357 1357 1339 1342 1348 1353 1358 1365 1374 1384 1402 1396 1386 1379 1380 1375 1368 1368 1374 1376 1383 1387 1392 1398 1404 1422
+			1388 1372 1367 1363 1361 1359 1357 1356 1358 1360 1368 1372 1377 1384 1392 1401 1395 1385 1377 1370 1368 1361 1359 1356 1384 1386 1394 1399 1404 1411 1417 1437
+			1383 1366 1361 1356 1355 1352 1351 1347 1321 1326 1332 1339 1342 1351 1361 1369 1394 1384 1377 1371 1369 1364 1363 1360 1364 1368 1371 1378 1382 1389 1396 1410
+			1389 1372 1366 1361 1360 1357 1356 1354 1339 1341 1346 1353 1357 1364 1373 1381 1414 1403 1395 1389 1387 1381 1380 1377 1382 1385 1390 1396 1402 1407 1414 1430
+			1380 1363 1357 1353 1350 1348 1345 1344 1328 1330 1336 1342 1345 1352 1362 1369 1380 1371 1362 1357 1354 1350 1345 1345 1357 1360 1366 1372 1377 1383 1390 1405
+			1387 1370 1363 1360 1359 1358 1354 1353 1319 1324 1330 1336 1339 1347 1356 1365 1399 1387 1378 1374 1370 1368 1363 1363 1362 1366 1372 1380 1384 1393 1399 1414
+			1366 1352 1346 1342 1342 1338 1335 1335 1309 1312 1318 1324 1327 1335 1343 1351 1355 1345 1337 1332 1332 1327 1323 1323 1345 1348 1354 1360 1363 1371 1376 1389
+			1389 1375 1368 1365 1364 1360 1359 1357 1320 1327 1331 1336 1338 1346 1353 1360 1410 1402 1393 1387 1387 1380 1378 1376 1359 1364 1368 1375 1380 1386 1392 1401
+			>;
+
+		PS_Config_Lmt_FW_Rawdata_P = <
+			1114 1125 1127 1122 1127 1129 1131 1127 1121 1121 1120 1120 1114 1113 1120 1121 1104 1134 1124 1127 1124 1125 1122 1120 1118 1122 1121 1122 1122 1122 1122 1108
+			1127 1108 1110 1111 1110 1118 1111 1111 1111 1111 1113 1110 1111 1110 1107 1108 1115 1110 1114 1115 1114 1113 1111 1110 1135 1134 1129 1129 1127 1127 1128 1120
+			1104 1096 1097 1100 1101 1103 1101 1103 1118 1115 1115 1117 1113 1120 1117 1131 1110 1111 1107 1108 1108 1111 1111 1113 1118 1132 1138 1142 1138 1136 1128 1104
+			1124 1117 1115 1120 1120 1121 1118 1118 1122 1124 1121 1120 1120 1118 1115 1118 1108 1101 1101 1107 1108 1108 1106 1101 1113 1108 1104 1104 1100 1100 1100 1115
+			1120 1096 1101 1106 1107 1111 1111 1110 1122 1139 1136 1136 1132 1129 1128 1131 1104 1108 1113 1117 1120 1121 1118 1124 1117 1111 1111 1111 1117 1115 1111 1107
+			1104 1117 1122 1127 1124 1122 1121 1117 1132 1121 1117 1114 1111 1113 1110 1110 1120 1120 1121 1120 1124 1125 1127 1127 1115 1103 1106 1104 1101 1101 1101 1111
+			1118 1121 1120 1121 1121 1118 1122 1117 1115 1121 1122 1121 1125 1124 1122 1121 1125 1120 1125 1120 1122 1131 1129 1129 1122 1128 1131 1129 1132 1127 1124 1111
+			1108 1106 1110 1115 1115 1111 1110 1113 1100 1121 1132 1131 1129 1139 1136 1134 1118 1110 1115 1114 1113 1115 1114 1111 1121 1114 1111 1111 1110 1106 1107 1125
+			1113 1124 1120 1121 1114 1118 1114 1111 1118 1122 1121 1120 1118 1118 1117 1117 1124 1124 1125 1124 1127 1135 1134 1131 1115 1118 1114 1113 1114 1113 1113 1107
+			1108 1122 1117 1120 1125 1113 1108 1113 1121 1127 1124 1122 1121 1122 1121 1118 1103 1107 1114 1115 1115 1121 1125 1122 1120 1124 1125 1122 1120 1122 1122 1121
+			1127 1118 1129 1136 1141 1134 1138 1135 1124 1124 1121 1122 1117 1117 1118 1103 1118 1120 1120 1120 1118 1120 1121 1120 1115 1132 1129 1127 1127 1127 1122 1107
+			1106 1122 1110 1100 1103 1104 1104 1103 1129 1128 1127 1127 1125 1118 1111 1113 1104 1111 1107 1104 1107 1104 1106 1107 1120 1120 1118 1118 1118 1115 1110 1115
+			1124 1122 1121 1122 1128 1124 1127 1128 1134 1117 1117 1114 1110 1108 1104 1101 1101 1099 1097 1099 1099 1104 1103 1101 1125 1124 1124 1129 1129 1131 1128 1128
+			1106 1115 1110 1110 1110 1115 1113 1115 1120 1113 1115 1117 1115 1108 1107 1110 1111 1108 1110 1104 1111 1111 1110 1113 1124 1121 1120 1122 1124 1124 1120 1125
+			1107 1107 1115 1106 1108 1108 1104 1108 1108 1122 1121 1122 1121 1121 1122 1124 1120 1121 1120 1120 1115 1117 1120 1120 1122 1121 1117 1118 1120 1113 1107 1108
+			1113 1106 1108 1113 1120 1120 1121 1127 1115 1121 1118 1118 1113 1108 1113 1110 1103 1100 1100 1099 1101 1101 1101 1101 1131 1118 1120 1117 1117 1117 1108 1118
+			1125 1124 1128 1127 1125 1127 1125 1128 1117 1101 1101 1106 1101 1101 1097 1114 1118 1114 1115 1115 1115 1118 1121 1118 1117 1121 1120 1121 1125 1122 1125 1132
+			1121 1129 1120 1115 1121 1114 1114 1118 1111 1104 1104 1106 1106 1106 1106 1117 1124 1122 1122 1121 1127 1122 1128 1129 1124 1118 1118 1118 1113 1120 1117 1120
+			1127 1125 1132 1138 1136 1131 1129 1127 1115 1108 1111 1114 1113 1114 1117 1114 1110 1108 1108 1110 1113 1115 1114 1117 1127 1113 1111 1114 1114 1111 1113 1125
+			1134 1128 1122 1129 1131 1124 1124 1121 1111 1121 1120 1120 1118 1115 1117 1117 1120 1114 1111 1115 1114 1115 1114 1115 1124 1111 1111 1113 1111 1108 1110 1124
+			1111 1114 1115 1106 1114 1110 1113 1115 1113 1120 1114 1114 1115 1113 1113 1114 1120 1117 1115 1113 1113 1117 1117 1117 1111 1111 1113 1111 1110 1110 1106 1127
+			1122 1120 1113 1120 1117 1120 1122 1122 1111 1113 1115 1110 1108 1104 1113 1117 1124 1121 1120 1121 1122 1122 1122 1124 1122 1106 1117 1110 1104 1107 1107 1114
+			1131 1127 1128 1134 1128 1122 1120 1122 1118 1115 1117 1115 1117 1117 1118 1121 1114 1107 1106 1104 1113 1117 1111 1117 1122 1127 1122 1122 1120 1117 1114 1120
+			1121 1115 1118 1110 1118 1120 1120 1117 1124 1122 1115 1114 1111 1115 1111 1115 1120 1115 1113 1111 1111 1108 1118 1118 1103 1101 1100 1104 1099 1099 1106 1111
+			1124 1129 1132 1129 1135 1136 1131 1127 1131 1131 1129 1131 1132 1131 1132 1117 1113 1113 1114 1118 1115 1113 1113 1113 1125 1131 1131 1132 1129 1136 1132 1134
+			1129 1129 1127 1120 1120 1120 1122 1124 1110 1111 1110 1114 1113 1113 1111 1122 1111 1122 1121 1124 1121 1120 1121 1118 1121 1121 1118 1117 1118 1113 1108 1125
+			1120 1108 1108 1110 1107 1110 1114 1111 1120 1122 1118 1120 1125 1125 1127 1125 1114 1114 1108 1111 1113 1115 1122 1124 1114 1114 1110 1108 1104 1107 1113 1115
+			1120 1122 1124 1114 1104 1117 1124 1125 1125 1128 1128 1121 1128 1129 1128 1132 1122 1120 1120 1115 1108 1115 1117 1114 1124 1120 1117 1114 1114 1129 1128 1117
+			1115 1097 1100 1101 1101 1106 1107 1113 1111 1111 1111 1111 1113 1115 1117 1115 1121 1117 1114 1114 1114 1118 1120 1118 1131 1128 1125 1128 1125 1129 1132 1117
+			1131 1111 1114 1117 1118 1120 1121 1135 1131 1125 1127 1129 1125 1129 1132 1132 1117 1118 1120 1115 1114 1124 1118 1103 1113 1118 1113 1113 1110 1115 1115 1128
+			1118 1110 1110 1110 1115 1115 1120 1124 1107 1107 1108 1110 1111 1111 1111 1110 1132 1128 1128 1127 1128 1127 1128 1114 1120 1114 1113 1118 1117 1118 1118 1122
+			1122 1121 1115 1121 1118 1121 1122 1125 1120 1121 1122 1120 1117 1117 1118 1118 1110 1107 1107 1110 1108 1111 1113 1121 1125 1124 1120 1125 1125 1127 1128 1129
+			1094 1145 1121 1121 1118 1114 1118 1115 1106 1103 1097 1103 1103 1104 1108 1111 1128 1128 1125 1122 1114 1111 1113 1120 1124 1121 1118 1118 1129 1127 1135 1114
+			1111 1121 1122 1118 1120 1120 1115 1107 1121 1124 1122 1122 1118 1118 1121 1115 1131 1129 1121 1121 1120 1118 1118 1127 1127 1124 1124 1124 1131 1131 1129 1131
+			1128 1115 1122 1115 1113 1117 1121 1122 1122 1118 1115 1121 1124 1127 1121 1124 1121 1121 1132 1129 1127 1131 1128 1125 1129 1128 1129 1129 1127 1129 1134 1125
+			1117 1106 1106 1106 1107 1107 1110 1113 1129 1129 1132 1132 1131 1132 1132 1129 1120 1120 1121 1121 1121 1117 1113 1114 1120 1122 1124 1124 1122 1127 1134 1103
+			1113 1122 1125 1129 1121 1120 1114 1106 1124 1120 1127 1122 1124 1127 1129 1129 1129 1128 1134 1135 1136 1139 1129 1122 1115 1104 1113 1114 1120 1117 1118 1124
+			1114 1113 1115 1117 1115 1111 1111 1107 1128 1128 1122 1125 1134 1128 1124 1131 1124 1127 1127 1122 1120 1122 1118 1124 1117 1114 1118 1120 1115 1120 1122 1106
+			1110 1124 1121 1121 1127 1117 1114 1117 1128 1125 1131 1135 1135 1135 1135 1138 1127 1125 1124 1117 1115 1111 1108 1118 1117 1124 1128 1132 1131 1135 1148 1114
+			1114 1117 1117 1122 1124 1124 1124 1110 1115 1115 1115 1118 1117 1120 1120 1122 1117 1120 1120 1118 1117 1115 1115 1111 1128 1132 1132 1134 1129 1124 1122 1113
+			1122 1134 1135 1135 1134 1132 1122 1131 1117 1120 1124 1125 1124 1118 1121 1117 1132 1127 1122 1121 1120 1115 1114 1127 1108 1113 1115 1120 1122 1124 1125 1113
+			1128 1124 1121 1121 1121 1122 1118 1117 1108 1111 1111 1114 1115 1115 1122 1124 1135 1135 1127 1127 1125 1131 1127 1115 1111 1110 1113 1114 1114 1115 1121 1120
+			1115 1101 1107 1106 1120 1118 1115 1107 1113 1117 1120 1118 1117 1118 1111 1117 1122 1120 1129 1138 1139 1139 1136 1134 1120 1122 1121 1118 1115 1114 1107 1113
+			1113 1118 1124 1121 1117 1117 1125 1110 1135 1136 1128 1127 1122 1129 1129 1108 1124 1124 1127 1122 1120 1117 1118 1118 1117 1117 1118 1114 1117 1117 1115 1128
+			1118 1114 1107 1110 1110 1111 1108 1108 1111 1117 1114 1115 1118 1114 1117 1118 1122 1118 1113 1104 1100 1100 1101 1099 1120 1117 1115 1114 1121 1127 1120 1124
+			1120 1129 1127 1131 1129 1129 1129 1121 1121 1128 1127 1128 1128 1134 1125 1120 1134 1128 1121 1120 1117 1115 1113 1107 1103 1113 1115 1115 1120 1118 1121 1122
+			1136 1124 1118 1117 1118 1115 1114 1115 1108 1113 1118 1120 1122 1121 1124 1117 1107 1113 1124 1129 1125 1127 1128 1124 1127 1128 1129 1125 1127 1115 1114 1120
+			1118 1108 1115 1118 1117 1114 1115 1111 1121 1122 1122 1121 1124 1125 1117 1115 1108 1117 1121 1115 1111 1118 1118 1115 1132 1128 1128 1127 1124 1121 1120 1125
+			1125 1131 1128 1127 1127 1124 1122 1118 1120 1122 1127 1125 1115 1117 1118 1113 1125 1128 1128 1138 1132 1131 1128 1128 1120 1125 1125 1128 1127 1125 1122 1120
+			1120 1120 1127 1128 1128 1131 1129 1117 1125 1125 1127 1128 1125 1122 1124 1122 1141 1134 1134 1134 1129 1127 1127 1129 1108 1107 1110 1114 1110 1114 1111 1125
+			>;
+
+		PS_Config_Lmt_FW_Rawdata_N = <
+			477 482 483 481 483 484 484 483 480 480 480 480 477 477 480 480 473 486 481 483 481 482 481 480 479 481 480 481 481 481 481 475
+			483 475 475 476 475 479 476 476 476 476 477 475 476 475 474 475 478 475 477 478 477 477 476 475 486 486 484 484 483 483 483 480
+			473 469 470 471 472 472 472 472 479 478 478 478 477 480 478 484 475 476 474 475 475 476 476 477 479 485 487 489 487 487 483 473
+			481 478 478 480 480 480 479 479 481 481 480 480 480 479 478 479 475 472 472 474 475 475 474 472 477 475 473 473 471 471 471 478
+			480 469 472 474 474 476 476 475 481 488 487 487 485 484 483 484 473 475 477 478 480 480 479 481 478 476 476 476 478 478 476 474
+			473 478 481 483 481 481 480 478 485 480 478 477 476 477 475 475 480 480 480 480 481 482 483 483 478 472 474 473 472 472 472 476
+			479 480 480 480 480 479 481 478 478 480 481 480 482 481 481 480 482 480 482 480 481 484 484 484 481 483 484 484 485 483 481 476
+			475 474 475 478 478 476 475 477 471 480 485 484 484 488 487 486 479 475 478 477 477 478 477 476 480 477 476 476 475 474 474 482
+			477 481 480 480 477 479 477 476 479 481 480 480 479 479 478 478 481 481 482 481 483 486 486 484 478 479 477 477 477 477 477 474
+			475 481 478 480 482 477 475 477 480 483 481 481 480 481 480 479 472 474 477 478 478 480 482 481 480 481 482 481 480 481 481 480
+			483 479 484 487 489 486 487 486 481 481 480 481 478 478 479 472 479 480 480 480 479 480 480 480 478 485 484 483 483 483 481 474
+			474 481 475 471 472 473 473 472 484 483 483 483 482 479 476 477 473 476 474 473 474 473 474 474 480 480 479 479 479 478 475 478
+			481 481 480 481 483 481 483 483 486 478 478 477 475 475 473 472 472 471 470 471 471 473 472 472 482 481 481 484 484 484 483 483
+			474 478 475 475 475 478 477 478 480 477 478 478 478 475 474 475 476 475 475 473 476 476 475 477 481 480 480 481 481 481 480 482
+			474 474 478 474 475 475 473 475 475 481 480 481 480 480 481 481 480 480 480 480 478 478 480 480 481 480 478 479 480 477 474 475
+			477 474 475 477 480 480 480 483 478 480 479 479 477 475 477 475 472 471 471 471 472 472 472 472 484 479 480 478 478 478 475 479
+			482 481 483 483 482 483 482 483 478 472 472 474 472 472 470 477 479 477 478 478 478 479 480 479 478 480 480 480 482 481 482 485
+			480 484 480 478 480 477 477 479 476 473 473 474 474 474 474 478 481 481 481 480 483 481 483 484 481 479 479 479 477 480 478 480
+			483 482 485 487 487 484 484 483 478 475 476 477 477 477 478 477 475 475 475 475 477 478 477 478 483 477 476 477 477 476 477 482
+			486 483 481 484 484 481 481 480 476 480 480 480 479 478 478 478 480 477 476 478 477 478 477 478 481 476 476 477 476 475 475 481
+			476 477 478 474 477 475 477 478 477 480 477 477 478 477 477 477 480 478 478 477 477 478 478 478 476 476 477 476 475 475 474 483
+			481 480 477 480 478 480 481 481 476 477 478 475 475 473 477 478 481 480 480 480 481 481 481 481 481 474 478 475 473 474 474 477
+			484 483 483 486 483 481 480 481 479 478 478 478 478 478 479 480 477 474 474 473 477 478 476 478 481 483 481 481 480 478 477 480
+			480 478 479 475 479 480 480 478 481 481 478 477 476 478 476 478 480 478 477 476 476 475 479 479 472 472 471 473 471 471 474 476
+			481 484 485 484 486 487 484 483 484 484 484 484 485 484 485 478 477 477 477 479 478 477 477 477 482 484 484 485 484 487 485 486
+			484 484 483 480 480 480 481 481 475 476 475 477 477 477 476 481 476 481 480 481 480 480 480 479 480 480 479 478 479 477 475 482
+			480 475 475 475 474 475 477 476 480 481 479 480 482 482 483 482 477 477 475 476 477 478 481 481 477 477 475 475 473 474 477 478
+			480 481 481 477 473 478 481 482 482 483 483 480 483 484 483 485 481 480 480 478 475 478 478 477 481 480 478 477 477 484 483 478
+			478 470 471 472 472 474 474 477 476 476 476 476 477 478 478 478 480 478 477 477 477 479 480 479 484 483 482 483 482 484 485 478
+			484 476 477 478 479 480 480 486 484 482 483 484 482 484 485 485 478 479 480 478 477 481 479 472 477 479 477 477 475 478 478 483
+			479 475 475 475 478 478 480 481 474 474 475 475 476 476 476 475 485 483 483 483 483 483 483 477 480 477 477 479 478 479 479 481
+			481 480 478 480 479 480 481 482 480 480 481 480 478 478 479 479 475 474 474 475 475 476 477 480 482 481 480 482 482 483 483 484
+			469 490 480 480 479 477 479 478 474 472 470 472 472 473 475 476 483 483 482 481 477 476 477 480 481 480 479 479 484 483 486 477
+			476 480 481 479 480 480 478 474 480 481 481 481 479 479 480 478 484 484 480 480 480 479 479 483 483 481 481 481 484 484 484 484
+			483 478 481 478 477 478 480 481 481 479 478 480 481 483 480 481 480 480 485 484 483 484 483 482 484 483 484 484 483 484 486 482
+			478 474 474 474 474 474 475 477 484 484 485 485 484 485 485 484 480 480 480 480 480 478 477 477 480 481 481 481 481 483 486 472
+			477 481 482 484 480 480 477 474 481 480 483 481 481 483 484 484 484 483 486 486 487 488 484 481 478 473 477 477 480 478 479 481
+			477 477 478 478 478 476 476 474 483 483 481 482 486 483 481 484 481 483 483 481 480 481 479 481 478 477 479 480 478 480 481 474
+			475 481 480 480 483 478 477 478 483 482 484 486 486 486 486 487 483 482 481 478 478 476 475 479 478 481 483 485 484 486 492 477
+			477 478 478 481 481 481 481 475 478 478 478 479 478 480 480 481 478 480 480 479 478 478 478 476 483 485 485 486 484 481 481 477
+			481 486 486 486 486 485 481 484 478 480 481 482 481 479 480 478 485 483 481 480 480 478 477 483 475 477 478 480 481 481 482 477
+			483 481 480 480 480 481 479 478 475 476 476 477 478 478 481 481 486 486 483 483 482 484 483 478 476 475 477 477 477 478 480 480
+			478 472 474 474 480 479 478 474 477 478 480 479 478 479 476 478 481 480 484 487 488 488 487 486 480 481 480 479 478 477 474 477
+			477 479 481 480 478 478 482 475 486 487 483 483 481 484 484 475 481 481 483 481 480 478 479 479 478 478 479 477 478 478 478 483
+			479 477 474 475 475 476 475 475 476 478 477 478 479 477 478 479 481 479 477 473 471 471 472 471 480 478 478 477 480 483 480 481
+			480 484 483 484 484 484 484 480 480 483 483 483 483 486 482 480 486 483 480 480 478 478 477 474 472 477 478 478 480 479 480 481
+			487 481 479 478 479 478 477 478 475 477 479 480 481 480 481 478 474 477 481 484 482 483 483 481 483 483 484 482 483 478 477 480
+			479 475 478 479 478 477 478 476 480 481 481 480 481 482 478 478 475 478 480 478 476 479 479 478 485 483 483 483 481 480 480 482
+			482 484 483 483 483 481 481 479 480 481 483 482 478 478 479 477 482 483 483 487 485 484 483 483 480 482 482 483 483 482 481 480
+			480 480 483 483 483 484 484 478 482 482 483 483 482 481 481 481 489 486 486 486 484 483 483 484 475 474 475 477 475 477 476 482
+			>;
+
+		PS_Config_Lmt_FW_CC_P = <
+			63 62 62 62 62 62 62 62 63 63 63 63 63 63 63 63 64 62 62 62 62 62 62 62 63 62 62 62 62 62 62 63
+			64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 62 62 62 62 62 62 62 63
+			66 63 63 63 63 64 63 63 64 64 64 63 63 63 63 64 64 63 63 63 63 63 63 63 64 64 63 63 63 63 64 66
+			64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 64 63 64 64 64 64 64 64 63 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 64
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 64
+			64 63 63 63 63 64 64 64 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63
+			66 66 66 66 66 66 66 66 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 63 63 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63
+			64 63 63 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63
+			64 63 63 64 64 64 64 64 66 66 66 66 64 64 64 64 63 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 66 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			66 66 66 66 66 66 66 66 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			63 63 63 63 64 64 64 64 64 64 64 64 63 63 63 63 64 64 64 63 63 63 63 63 63 63 63 63 63 63 63 63
+			66 66 66 66 66 66 66 66 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 64 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 64
+			64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 64 63 63 64 63 63 63 63 63 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 64
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 64
+			63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63
+			64 64 64 63 64 64 64 64 63 63 63 63 63 63 63 63 64 64 64 64 64 63 63 64 63 63 63 63 63 63 63 63
+			64 63 63 63 63 63 63 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 64
+			64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 64 64 63 63 63 63 63 64 63 63 63 63 63 63 63 63
+			64 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 64 64 64 64 63 64 63 64
+			64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 64 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63
+			64 64 63 63 63 63 63 63 63 63 63 63 63 63 63 63 64 64 63 63 63 63 63 63 63 63 63 63 63 63 63 63
+			64 64 63 63 64 63 63 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 63 63 64 63 63 64 64 64 64 64 64 64 64 64 63 64 63 63 63 63 63 63 63 64
+			64 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 64 64 64 63 63 63 63 63 63 63 63 63 63 63 63 63
+			63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 62 63 63 63 63 63 63 63 63 63
+			66 64 64 64 64 64 64 64 63 63 63 63 63 63 64 64 66 64 64 64 64 64 64 64 63 63 63 63 63 63 63 64
+			59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 60 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59
+			60 60 60 59 59 59 59 60 57 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59
+			>;
+
+		PS_Config_Lmt_FW_CC_N = <
+			28 27 27 27 27 27 27 27 28 28 28 28 28 28 28 28 29 27 27 27 27 27 27 27 28 27 27 27 27 27 27 28
+			29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 27 27 27 27 27 27 27 28
+			29 28 28 28 28 29 28 28 29 29 29 28 28 28 28 29 29 28 28 28 28 28 28 28 29 29 28 28 28 28 29 29
+			29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 28 29 29 29 29 29 29 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 29
+			29 28 28 28 28 29 29 29 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 28 28 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28
+			29 28 28 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28
+			29 28 28 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			28 28 28 28 29 29 29 29 29 29 29 29 28 28 28 28 29 29 29 28 28 28 28 28 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 29 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 29
+			29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 28 28 29 28 28 28 28 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 29
+			28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
+			29 29 29 28 29 29 29 29 28 28 28 28 28 28 28 28 29 29 29 29 29 28 28 29 28 28 28 28 28 28 28 28
+			29 28 28 28 28 28 28 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 29
+			29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 29 28 28 28 28 28 29 28 28 28 28 28 28 28 28
+			29 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 29 29 29 28 29 28 29
+			29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
+			29 29 28 28 28 28 28 28 28 28 28 28 28 28 28 28 29 29 28 28 28 28 28 28 28 28 28 28 28 28 28 28
+			29 29 28 28 29 28 28 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 28 28 29 28 28 29 29 29 29 29 29 29 29 29 28 29 28 28 28 28 28 28 28 29
+			29 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 29 29 29 28 28 28 28 28 28 28 28 28 28 28 28 28
+			28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 27 28 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 28 28 28 28 28 28 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 29
+			26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 27 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
+			27 27 27 26 26 26 26 27 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
+			>;
+
+		PS_Config_Lmt_FW_Diff_P = <
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			>;
+
+		PS_Config_Lmt_FW_Diff_N = <
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			>;
+
+		PS_Config_Lmt_PenTipX_FW_Raw_P = <
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700>;
+
+		PS_Config_Lmt_PenTipX_FW_Raw_N = <
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>;
+
+		PS_Config_Lmt_PenTipY_FW_Raw_P = <
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700>;
+
+		PS_Config_Lmt_PenTipY_FW_Raw_N = <
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0>;
+
+		PS_Config_Lmt_PenRingX_FW_Raw_P = <
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700>;
+
+		PS_Config_Lmt_PenRingX_FW_Raw_N = <
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>;
+
+		PS_Config_Lmt_PenRingY_FW_Raw_P = <
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700>;
+
+		PS_Config_Lmt_PenRingY_FW_Raw_N = <
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0>;
+
+		PS_Config_Lmt_PenTipX_FW_Diff_P = <
+			380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380
+			380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380
+			380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380
+			380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380
+			380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380
+			380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380>;
+
+		PS_Config_Lmt_PenTipX_FW_Diff_N = <
+			(-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380)>;
+
+		PS_Config_Lmt_PenTipY_FW_Diff_P = <
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380>;
+
+		PS_Config_Lmt_PenTipY_FW_Diff_N = <
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)>;
+
+		PS_Config_Lmt_PenRingX_FW_Diff_P = <
+			380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380
+			380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380
+			380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380
+			380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380
+			380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380
+			380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380 380>;
+
+		PS_Config_Lmt_PenRingX_FW_Diff_N = <
+			(-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380) (-380)>;
+
+		PS_Config_Lmt_PenRingY_FW_Diff_P = <
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380
+			380 380 380 380>;
+
+		PS_Config_Lmt_PenRingY_FW_Diff_N = <
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)
+			(-380) (-380) (-380) (-380)>;
+		PS_Config_Lmt_Pen_Rx_Max_P = <65535>;
+		PS_Config_Lmt_Pen_Rx_Max_N = <0>;
+		PS_Config_Diff_Test_Frame = <50>;
+	};
+
+	novatek-mp-criteria-nvtpid@1 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "novatek-mp-criteria-7806";
+
+		/* MP Config */
+		IC_X_CFG_SIZE = <32>;
+		IC_Y_CFG_SIZE = <50>;
+		IC_KEY_CFG_SIZE = <4>;
+		X_Channel = <32>;
+		Y_Channel = <50>;
+		AIN_X = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31>;
+		AIN_Y = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49>;
+
+		AIN_KEY = <0 1 2 0xFF>;
+
+		/* MP Criteria */
+		PS_Config_Lmt_Short_Rawdata_P = <
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008 14008
+			>;
+
+		PS_Config_Lmt_Short_Rawdata_N = <
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100 10100
+			>;
+
+		PS_Config_Lmt_Open_Rawdata_P = <
+			4681 4849 4964 5086 5159 5205 5251 5303 5492 5475 5440 5395 5334 5217 5117 5010 4816 4988 5100 5219 5293 5342 5390 5443 5679 5668 5646 5609 5562 5460 5356 5203
+			4702 4828 4932 5027 5091 5115 5152 5174 5296 5243 5208 5185 5133 5051 4958 4879 4816 4950 5048 5135 5191 5219 5252 5272 5514 5468 5443 5432 5390 5321 5230 5111
+			4713 4832 4950 5062 5135 5175 5227 5272 5471 5450 5408 5373 5310 5203 5107 5010 4842 4981 5091 5202 5268 5313 5364 5406 5663 5646 5615 5590 5541 5450 5356 5220
+			4722 4816 4919 5016 5059 5098 5121 5164 5299 5237 5219 5185 5154 5062 4982 4898 4824 4930 5027 5121 5159 5198 5220 5258 5506 5450 5440 5415 5397 5313 5234 5111
+			4824 4933 5041 5164 5208 5257 5299 5343 5443 5418 5383 5331 5285 5189 5086 4984 4876 4998 5101 5217 5261 5313 5355 5398 5626 5605 5576 5538 5506 5420 5320 5171
+			4732 4831 4939 5024 5077 5105 5145 5184 5496 5441 5405 5380 5335 5262 5157 5077 4886 5005 5107 5188 5237 5264 5306 5339 5633 5584 5556 5545 5516 5453 5353 5231
+			4677 4774 4880 4965 5020 5056 5093 5145 5289 5269 5223 5188 5143 5069 4958 4886 4774 4900 5005 5089 5145 5182 5220 5272 5464 5453 5416 5394 5364 5299 5189 5083
+			4786 4884 4995 5082 5119 5166 5202 5240 5474 5416 5384 5348 5314 5236 5142 5048 4886 5002 5101 5185 5219 5262 5297 5338 5644 5590 5565 5542 5524 5455 5367 5236
+			4670 4755 4863 4942 4991 5023 5077 5129 5264 5233 5202 5164 5112 5041 4957 4855 4751 4862 4965 5045 5089 5124 5177 5230 5460 5437 5413 5387 5349 5287 5206 5062
+			4788 4876 4985 5058 5112 5143 5180 5219 5443 5381 5349 5322 5266 5208 5117 5020 4916 5020 5124 5188 5241 5276 5313 5349 5562 5506 5481 5465 5426 5374 5292 5157
+			4741 4844 4954 5033 5083 5138 5192 5244 5391 5367 5328 5276 5209 5159 5051 4957 4835 4956 5063 5142 5188 5247 5303 5359 5569 5552 5520 5481 5429 5385 5276 5139
+			4715 4804 4894 4958 5002 5035 5066 5107 5255 5206 5184 5139 5110 5054 4974 4888 4859 4964 5048 5107 5145 5182 5216 5258 5461 5416 5402 5373 5355 5307 5222 5100
+			4739 4842 4951 5009 5079 5133 5185 5236 5341 5315 5266 5208 5174 5111 5009 4904 4853 4979 5086 5140 5205 5262 5313 5364 5553 5534 5490 5444 5425 5370 5265 5125
+			4716 4781 4884 4930 4978 5009 5049 5068 5205 5160 5124 5101 5061 5023 4926 4852 4823 4909 5013 5054 5098 5133 5174 5194 5406 5366 5331 5320 5293 5262 5167 5052
+			4723 4820 4928 4991 5061 5111 5166 5203 5343 5304 5257 5224 5157 5126 5020 4907 4831 4949 5055 5117 5178 5233 5287 5328 5524 5493 5455 5436 5383 5355 5247 5091
+			4776 4876 4963 5026 5076 5122 5146 5192 5301 5233 5199 5174 5126 5083 5006 4895 4914 5028 5117 5177 5223 5272 5299 5345 5483 5420 5394 5378 5341 5303 5223 5069
+			4634 4722 4823 4876 4929 4981 5017 5065 5234 5196 5161 5108 5068 5023 4923 4823 4725 4837 4936 4986 5042 5097 5135 5181 5419 5384 5356 5311 5283 5245 5146 5016
+			4751 4821 4950 4979 5035 5061 5112 5152 5269 5205 5187 5149 5104 5076 4971 4881 4865 4957 5080 5111 5164 5192 5243 5280 5488 5426 5419 5391 5360 5342 5237 5111
+			4656 4748 4851 4884 4949 4984 5035 5080 5175 5149 5100 5066 5016 4988 4890 4797 4747 4859 4956 4989 5049 5089 5142 5188 5355 5332 5287 5264 5227 5203 5110 4981
+			4692 4792 4893 4930 4971 5021 5058 5098 5268 5230 5196 5159 5121 5093 5007 4909 4825 4949 5044 5076 5108 5159 5192 5227 5464 5436 5408 5383 5360 5338 5250 5108
+			4708 4792 4898 4942 4992 5045 5098 5135 5251 5219 5166 5124 5070 5035 4950 4835 4806 4915 5020 5059 5107 5163 5216 5252 5433 5406 5364 5331 5292 5264 5175 5024
+			4674 4746 4828 4853 4908 4940 4971 5016 5174 5117 5087 5065 5012 4998 4926 4838 4764 4858 4932 4951 5002 5033 5061 5101 5317 5269 5247 5234 5198 5185 5108 4979
+			4702 4796 4883 4923 4995 5049 5097 5145 5258 5226 5184 5136 5077 5042 4957 4848 4785 4909 4995 5034 5097 5150 5196 5243 5446 5416 5380 5348 5299 5272 5185 5033
+			4692 4778 4839 4874 4919 4951 4986 5037 5129 5083 5059 5021 4982 4953 4897 4797 4795 4901 4958 4988 5028 5058 5090 5138 5324 5282 5266 5236 5208 5188 5131 4988
+			4704 4795 4867 4909 4968 5005 5059 5101 5209 5174 5135 5077 5037 4984 4919 4818 4781 4907 4978 5017 5082 5122 5175 5219 5426 5395 5363 5324 5290 5244 5171 5034
+			4796 4852 4942 4964 5010 5048 5094 5133 5212 5167 5124 5093 5051 5033 4950 4865 4890 4974 5054 5075 5117 5157 5203 5244 5371 5331 5299 5276 5247 5236 5153 5030
+			4606 4671 4715 4762 4813 4860 4911 4943 5112 5077 5035 5003 4943 4915 4870 4760 4705 4797 4839 4884 4930 4977 5027 5062 5307 5279 5240 5215 5170 5147 5107 4958
+			4727 4814 4846 4883 4929 4977 5003 5058 5166 5107 5077 5042 4998 4964 4937 4818 4813 4925 4949 4984 5033 5080 5112 5166 5331 5282 5255 5236 5202 5173 5149 4998
+			4607 4680 4709 4750 4810 4862 4907 4940 5079 5033 4991 4956 4902 4867 4835 4729 4723 4825 4851 4890 4944 4998 5040 5075 5231 5192 5156 5132 5091 5061 5034 4888
+			4712 4785 4818 4844 4904 4939 4979 5041 5191 5139 5114 5073 5016 4995 4963 4866 4804 4893 4918 4942 5000 5034 5075 5136 5346 5303 5282 5254 5210 5195 5161 5034
+			4685 4753 4795 4835 4902 4956 5005 5052 5154 5101 5063 5016 4961 4915 4876 4781 4786 4880 4915 4954 5020 5069 5118 5171 5304 5262 5234 5198 5157 5115 5080 4958
+			4650 4706 4725 4760 4804 4842 4880 4932 5047 5007 4982 4936 4901 4877 4845 4769 4736 4813 4827 4856 4898 4935 4977 5028 5203 5174 5154 5125 5105 5080 5051 4940
+			4666 4725 4760 4811 4865 4912 4975 5009 5167 5131 5086 5042 4978 4936 4907 4802 4775 4856 4890 4935 4991 5041 5104 5142 5327 5296 5257 5224 5174 5136 5101 4963
+			4669 4702 4733 4762 4809 4851 4887 4933 4963 4919 4883 4862 4807 4789 4765 4692 4767 4814 4839 4862 4909 4950 4986 5033 5202 5163 5132 5118 5076 5059 5028 4925
+			4628 4670 4713 4755 4818 4881 4933 4965 5104 5052 5009 4958 4895 4860 4818 4725 4719 4789 4831 4873 4933 4998 5052 5089 5283 5238 5206 5166 5114 5080 5044 4916
+			4712 4767 4776 4816 4876 4919 4943 5013 5083 5034 5007 4958 4911 4872 4852 4765 4807 4884 4890 4925 4981 5021 5052 5125 5240 5195 5184 5147 5110 5079 5059 4944
+			4573 4625 4657 4687 4757 4803 4848 4893 4988 4937 4905 4851 4792 4755 4727 4643 4639 4711 4741 4769 4837 4881 4925 4965 5178 5136 5112 5072 5028 4998 4971 4858
+			4715 4747 4785 4816 4867 4898 4951 5010 5033 4998 4951 4909 4859 4824 4792 4726 4781 4834 4865 4888 4939 4970 5023 5073 5215 5187 5147 5119 5080 5048 5010 4909
+			4575 4590 4628 4664 4722 4764 4817 4846 4956 4919 4873 4828 4778 4746 4702 4641 4638 4680 4716 4755 4811 4853 4912 4943 5171 5139 5097 5058 5017 4989 4940 4851
+			4681 4698 4725 4768 4810 4869 4894 4964 5009 4960 4922 4881 4832 4796 4775 4709 4802 4841 4862 4902 4944 4999 5027 5094 5206 5163 5135 5107 5070 5038 5013 4908
+			4631 4646 4683 4737 4796 4865 4911 4947 5090 5028 4979 4930 4867 4828 4789 4712 4725 4768 4803 4851 4908 4975 5024 5055 5269 5216 5173 5138 5087 5049 5012 4905
+			4585 4580 4614 4643 4702 4732 4774 4827 4874 4838 4796 4768 4720 4692 4660 4615 4670 4688 4715 4740 4800 4831 4869 4922 5023 4995 4963 4950 4915 4891 4859 4779
+			4636 4656 4687 4730 4804 4855 4907 4943 5026 4971 4925 4872 4813 4775 4725 4671 4729 4774 4803 4845 4918 4967 5019 5059 5187 5138 5097 5056 5012 4977 4923 4842
+			4580 4578 4601 4638 4680 4720 4755 4823 4881 4831 4809 4762 4726 4694 4664 4628 4687 4705 4725 4755 4789 4827 4860 4925 5051 5016 4999 4965 4943 4915 4887 4816
+			4617 4620 4657 4708 4764 4818 4876 4898 4992 4937 4887 4839 4776 4730 4691 4624 4709 4743 4779 4828 4887 4937 4996 5026 5145 5097 5056 5017 4971 4929 4893 4796
+			4677 4669 4705 4744 4795 4828 4881 4940 4950 4912 4862 4832 4781 4747 4709 4664 4727 4739 4771 4802 4853 4886 4940 5002 5138 5104 5066 5049 5010 4977 4937 4856
+			4533 4531 4571 4610 4669 4723 4768 4797 4876 4825 4783 4734 4680 4634 4590 4524 4600 4627 4662 4699 4757 4811 4862 4895 5054 5013 4981 4946 4904 4869 4830 4736
+			4631 4628 4653 4701 4739 4796 4825 4908 4940 4894 4869 4828 4779 4741 4706 4657 4762 4781 4803 4844 4884 4939 4971 5052 5104 5061 5041 5007 4968 4936 4898 4803
+			4468 4468 4508 4558 4620 4673 4720 4751 4838 4783 4746 4697 4642 4601 4558 4474 4524 4554 4585 4631 4695 4743 4793 4824 5026 4978 4947 4911 4866 4831 4790 4678
+			4615 4622 4653 4692 4757 4793 4852 4922 4898 4865 4814 4776 4713 4687 4632 4571 4706 4736 4761 4793 4858 4890 4947 5014 5090 5063 5020 4996 4947 4922 4870 4769
+			>;
+
+		PS_Config_Lmt_Open_Rawdata_N = <
+			2006 2078 2127 2179 2211 2230 2250 2272 2353 2346 2331 2312 2286 2236 2193 2147 2064 2137 2185 2236 2268 2289 2310 2332 2434 2429 2419 2404 2383 2340 2295 2230
+			2015 2069 2113 2154 2182 2192 2208 2217 2269 2247 2232 2222 2200 2164 2125 2091 2064 2121 2163 2200 2224 2236 2251 2259 2363 2343 2332 2328 2310 2280 2241 2190
+			2020 2071 2121 2169 2200 2218 2240 2259 2344 2335 2317 2302 2275 2230 2188 2147 2075 2134 2182 2229 2257 2277 2299 2317 2427 2419 2406 2395 2374 2335 2295 2237
+			2023 2064 2108 2149 2168 2185 2194 2213 2271 2244 2236 2222 2209 2169 2135 2099 2067 2113 2154 2194 2211 2227 2237 2253 2359 2335 2331 2320 2313 2277 2243 2190
+			2067 2114 2160 2213 2232 2253 2271 2290 2332 2322 2307 2284 2265 2224 2179 2136 2089 2142 2186 2236 2254 2277 2295 2313 2411 2402 2389 2373 2359 2323 2280 2216
+			2028 2070 2116 2153 2176 2188 2205 2221 2355 2332 2316 2305 2286 2255 2210 2176 2094 2145 2188 2223 2244 2256 2274 2288 2414 2393 2381 2376 2364 2337 2294 2242
+			2004 2046 2091 2128 2151 2167 2182 2205 2266 2258 2238 2223 2204 2172 2125 2094 2046 2100 2145 2181 2205 2221 2237 2259 2341 2337 2321 2311 2299 2271 2224 2178
+			2051 2093 2140 2178 2194 2214 2229 2245 2346 2321 2307 2292 2277 2244 2203 2163 2094 2143 2186 2222 2236 2255 2270 2287 2419 2395 2385 2375 2367 2338 2300 2244
+			2001 2038 2084 2118 2139 2152 2176 2198 2256 2242 2229 2213 2191 2160 2124 2080 2036 2083 2128 2162 2181 2196 2218 2241 2340 2330 2320 2308 2292 2266 2231 2169
+			2052 2089 2136 2167 2191 2204 2220 2236 2332 2306 2292 2281 2257 2232 2193 2151 2107 2151 2196 2223 2246 2261 2277 2292 2383 2359 2349 2342 2325 2303 2268 2210
+			2032 2076 2123 2157 2178 2202 2225 2247 2310 2300 2283 2261 2232 2211 2164 2124 2072 2124 2170 2203 2223 2248 2272 2296 2386 2379 2365 2349 2326 2308 2261 2202
+			2020 2059 2097 2125 2143 2158 2171 2188 2252 2231 2221 2202 2190 2166 2131 2095 2082 2127 2163 2188 2205 2221 2235 2253 2340 2321 2315 2302 2295 2274 2238 2185
+			2031 2075 2122 2146 2176 2200 2222 2244 2289 2278 2257 2232 2217 2190 2146 2101 2080 2134 2179 2203 2230 2255 2277 2299 2380 2371 2353 2333 2325 2301 2256 2196
+			2021 2049 2093 2113 2133 2146 2164 2172 2230 2211 2196 2186 2169 2152 2111 2079 2067 2104 2148 2166 2185 2200 2217 2226 2317 2299 2284 2280 2268 2255 2214 2165
+			2024 2065 2112 2139 2169 2190 2214 2230 2290 2273 2253 2239 2210 2197 2151 2103 2070 2121 2166 2193 2219 2242 2266 2283 2367 2354 2338 2329 2307 2295 2248 2182
+			2047 2089 2127 2154 2175 2195 2205 2225 2272 2242 2228 2217 2197 2178 2145 2098 2106 2155 2193 2218 2238 2259 2271 2290 2350 2323 2311 2305 2289 2272 2238 2172
+			1986 2023 2067 2089 2112 2134 2150 2170 2243 2227 2212 2189 2172 2152 2110 2067 2025 2073 2115 2137 2161 2184 2200 2220 2322 2307 2295 2276 2264 2248 2205 2149
+			2036 2066 2121 2134 2158 2169 2191 2208 2258 2230 2223 2206 2187 2175 2130 2092 2085 2124 2177 2190 2213 2225 2247 2263 2352 2325 2322 2310 2297 2289 2244 2190
+			1995 2035 2079 2093 2121 2136 2158 2177 2218 2206 2185 2171 2149 2137 2095 2056 2034 2082 2124 2138 2164 2181 2203 2223 2295 2285 2266 2256 2240 2230 2190 2134
+			2011 2053 2097 2113 2130 2152 2167 2185 2257 2241 2227 2211 2194 2182 2146 2104 2068 2121 2161 2175 2189 2211 2225 2240 2341 2329 2317 2307 2297 2287 2250 2189
+			2017 2053 2099 2118 2139 2162 2185 2200 2250 2236 2214 2196 2173 2158 2121 2072 2059 2106 2151 2168 2188 2212 2235 2251 2328 2317 2299 2284 2268 2256 2218 2153
+			2003 2034 2069 2080 2103 2117 2130 2149 2217 2193 2180 2170 2148 2142 2111 2073 2041 2082 2113 2122 2143 2157 2169 2186 2278 2258 2248 2243 2227 2222 2189 2134
+			2015 2055 2092 2110 2140 2164 2184 2205 2253 2239 2221 2201 2176 2161 2124 2077 2050 2104 2140 2157 2184 2207 2227 2247 2334 2321 2305 2292 2271 2259 2222 2157
+			2011 2047 2074 2089 2108 2122 2137 2158 2198 2178 2168 2152 2135 2122 2098 2056 2055 2100 2125 2137 2155 2167 2181 2202 2281 2263 2257 2244 2232 2223 2199 2137
+			2016 2055 2086 2104 2129 2145 2168 2186 2232 2217 2200 2176 2158 2136 2108 2065 2049 2103 2133 2150 2178 2195 2218 2236 2325 2312 2298 2281 2267 2247 2216 2157
+			2055 2079 2118 2127 2147 2163 2183 2200 2233 2214 2196 2182 2164 2157 2121 2085 2095 2131 2166 2175 2193 2210 2230 2247 2302 2284 2271 2261 2248 2244 2208 2155
+			1974 2002 2020 2041 2062 2083 2104 2118 2191 2176 2158 2144 2118 2106 2087 2040 2016 2056 2074 2093 2113 2133 2154 2169 2274 2262 2245 2235 2215 2206 2188 2125
+			2026 2063 2077 2092 2112 2133 2144 2167 2214 2188 2176 2161 2142 2127 2116 2065 2062 2110 2121 2136 2157 2177 2191 2214 2284 2263 2252 2244 2229 2217 2206 2142
+			1974 2005 2018 2035 2061 2083 2103 2117 2176 2157 2139 2124 2101 2086 2072 2026 2024 2068 2079 2095 2119 2142 2160 2175 2242 2225 2209 2199 2182 2169 2157 2095
+			2019 2050 2065 2076 2101 2116 2134 2160 2224 2202 2191 2174 2149 2140 2127 2085 2059 2097 2107 2118 2143 2157 2175 2201 2291 2272 2263 2251 2233 2226 2212 2157
+			2008 2037 2055 2072 2101 2124 2145 2165 2209 2186 2170 2149 2126 2106 2089 2049 2051 2091 2106 2123 2151 2172 2193 2216 2273 2255 2243 2227 2210 2192 2177 2125
+			1993 2017 2025 2040 2059 2075 2091 2113 2163 2146 2135 2115 2100 2090 2076 2044 2029 2062 2068 2081 2099 2115 2133 2155 2230 2217 2209 2196 2188 2177 2164 2117
+			1999 2025 2040 2062 2085 2105 2132 2146 2214 2199 2179 2161 2133 2115 2103 2058 2046 2081 2095 2115 2139 2160 2187 2203 2283 2269 2253 2239 2217 2201 2186 2127
+			2001 2015 2028 2041 2061 2079 2094 2114 2127 2108 2092 2083 2060 2052 2042 2011 2043 2063 2074 2083 2104 2121 2137 2157 2229 2212 2199 2193 2175 2168 2155 2110
+			1983 2001 2020 2038 2065 2092 2114 2128 2187 2165 2146 2125 2098 2083 2065 2025 2022 2052 2070 2088 2114 2142 2165 2181 2264 2245 2231 2214 2191 2177 2161 2107
+			2019 2043 2047 2064 2089 2108 2118 2148 2178 2157 2146 2125 2104 2088 2079 2042 2060 2093 2095 2110 2134 2152 2165 2196 2245 2226 2221 2206 2190 2176 2168 2119
+			1960 1982 1996 2008 2038 2058 2077 2097 2137 2116 2102 2079 2053 2038 2026 1990 1988 2019 2032 2044 2073 2092 2110 2128 2219 2201 2191 2173 2155 2142 2130 2082
+			2020 2034 2050 2064 2086 2099 2122 2147 2157 2142 2122 2104 2082 2067 2053 2025 2049 2071 2085 2095 2116 2130 2152 2174 2235 2223 2206 2194 2177 2163 2147 2104
+			1960 1967 1983 1999 2023 2041 2064 2077 2124 2108 2088 2069 2047 2034 2015 1989 1987 2005 2021 2038 2062 2080 2105 2118 2216 2202 2184 2167 2150 2138 2117 2079
+			2006 2013 2025 2043 2061 2086 2097 2127 2146 2125 2109 2092 2071 2055 2046 2018 2058 2074 2083 2101 2119 2142 2154 2183 2231 2212 2200 2188 2173 2159 2148 2103
+			1984 1991 2007 2030 2055 2085 2104 2120 2181 2155 2134 2113 2086 2069 2052 2019 2025 2043 2058 2079 2103 2132 2153 2166 2258 2235 2217 2202 2180 2164 2148 2102
+			1965 1963 1977 1990 2015 2028 2046 2068 2089 2073 2055 2043 2023 2011 1997 1978 2001 2009 2020 2031 2057 2070 2086 2109 2152 2140 2127 2121 2106 2096 2082 2048
+			1987 1995 2008 2027 2059 2080 2103 2118 2154 2130 2110 2088 2062 2046 2025 2002 2026 2046 2058 2076 2107 2128 2151 2168 2223 2202 2184 2167 2148 2133 2110 2075
+			1963 1962 1972 1987 2005 2023 2038 2067 2092 2070 2061 2041 2025 2011 1999 1983 2008 2016 2025 2038 2052 2068 2083 2110 2164 2149 2142 2128 2118 2106 2094 2064
+			1978 1980 1996 2017 2041 2065 2089 2099 2139 2116 2094 2074 2047 2027 2010 1981 2018 2032 2048 2069 2094 2116 2141 2154 2205 2184 2167 2150 2130 2112 2097 2055
+			2004 2001 2016 2033 2055 2069 2092 2117 2121 2105 2083 2071 2049 2034 2018 1999 2026 2031 2044 2058 2080 2094 2117 2143 2202 2187 2171 2164 2147 2133 2116 2081
+			1942 1942 1959 1975 2001 2024 2043 2056 2089 2068 2050 2029 2005 1986 1967 1939 1971 1983 1998 2014 2038 2062 2083 2098 2166 2148 2134 2119 2101 2086 2070 2029
+			1984 1983 1994 2014 2031 2055 2068 2103 2117 2097 2086 2069 2048 2032 2017 1996 2041 2049 2058 2076 2093 2116 2130 2165 2187 2169 2160 2146 2129 2115 2099 2058
+			1915 1915 1932 1953 1980 2002 2023 2036 2073 2050 2034 2013 1989 1972 1953 1917 1939 1951 1965 1984 2012 2032 2054 2067 2154 2133 2120 2104 2085 2070 2053 2005
+			1978 1981 1994 2011 2038 2054 2079 2109 2099 2085 2063 2047 2020 2008 1985 1959 2017 2029 2040 2054 2082 2095 2120 2149 2181 2170 2151 2141 2120 2109 2087 2044
+			>;
+
+		PS_Config_Lmt_FW_Rawdata_P = <
+			1131 1114 1113 1113 1111 1114 1115 1114 1131 1124 1124 1127 1129 1125 1124 1128 1122 1124 1122 1125 1121 1121 1121 1120 1124 1121 1125 1125 1131 1128 1124 1128
+			1117 1115 1118 1114 1118 1117 1115 1115 1115 1114 1115 1114 1111 1114 1111 1104 1121 1129 1125 1120 1118 1117 1115 1114 1124 1127 1132 1134 1134 1131 1124 1134
+			1128 1136 1129 1115 1114 1115 1118 1114 1121 1118 1117 1120 1122 1115 1108 1114 1127 1125 1121 1120 1118 1115 1120 1117 1121 1117 1117 1115 1113 1118 1128 1121
+			1139 1128 1138 1132 1129 1129 1132 1131 1129 1128 1129 1129 1128 1122 1118 1118 1127 1122 1139 1142 1136 1139 1141 1136 1132 1120 1121 1122 1121 1114 1118 1121
+			1120 1117 1124 1128 1125 1124 1117 1114 1121 1122 1124 1124 1121 1129 1128 1134 1111 1115 1121 1132 1134 1136 1136 1138 1104 1104 1106 1107 1108 1107 1128 1127
+			1114 1110 1117 1121 1122 1124 1128 1124 1125 1120 1118 1117 1117 1108 1106 1108 1129 1128 1113 1113 1118 1115 1115 1114 1120 1111 1108 1110 1108 1117 1121 1115
+			1121 1117 1128 1135 1141 1141 1141 1143 1113 1107 1104 1106 1108 1115 1131 1135 1136 1139 1115 1111 1103 1107 1104 1108 1114 1115 1124 1125 1124 1122 1143 1132
+			1128 1124 1132 1134 1132 1132 1131 1124 1124 1127 1127 1122 1125 1117 1117 1117 1120 1127 1125 1117 1118 1117 1117 1115 1129 1141 1139 1138 1134 1132 1128 1128
+			1122 1125 1127 1124 1124 1117 1117 1115 1135 1125 1122 1122 1124 1114 1115 1110 1143 1142 1135 1110 1108 1115 1113 1114 1113 1129 1127 1127 1124 1131 1131 1128
+			1131 1134 1138 1131 1118 1114 1115 1113 1132 1132 1131 1135 1131 1128 1121 1122 1124 1125 1121 1127 1128 1127 1129 1127 1125 1117 1117 1122 1120 1115 1127 1128
+			1122 1121 1118 1117 1115 1117 1121 1120 1120 1124 1125 1121 1122 1117 1122 1129 1127 1128 1136 1131 1121 1115 1115 1111 1118 1120 1115 1113 1111 1127 1127 1127
+			1106 1125 1104 1103 1104 1108 1113 1113 1111 1120 1122 1121 1125 1125 1121 1120 1134 1135 1122 1113 1117 1113 1115 1113 1122 1110 1107 1106 1108 1111 1121 1104
+			1104 1107 1128 1136 1139 1136 1135 1134 1104 1120 1125 1132 1135 1141 1132 1127 1120 1127 1132 1138 1129 1122 1125 1122 1110 1120 1121 1117 1115 1121 1128 1120
+			1139 1139 1113 1104 1110 1111 1113 1108 1128 1125 1122 1120 1124 1121 1117 1120 1110 1114 1117 1118 1122 1127 1128 1127 1118 1122 1118 1117 1115 1118 1114 1120
+			1122 1127 1111 1117 1121 1124 1125 1125 1107 1121 1131 1128 1134 1136 1134 1131 1117 1115 1114 1124 1128 1121 1122 1121 1129 1135 1129 1128 1134 1124 1117 1121
+			1114 1117 1110 1120 1121 1122 1122 1127 1124 1115 1113 1120 1121 1127 1115 1118 1117 1125 1131 1121 1121 1120 1121 1125 1117 1110 1113 1115 1113 1117 1122 1125
+			1136 1136 1131 1118 1107 1107 1108 1108 1113 1122 1122 1122 1125 1129 1132 1122 1114 1125 1124 1128 1129 1128 1122 1125 1122 1120 1120 1115 1114 1118 1127 1129
+			1131 1125 1108 1110 1114 1115 1111 1114 1106 1136 1136 1136 1139 1134 1127 1114 1124 1120 1124 1125 1111 1111 1107 1108 1118 1122 1134 1141 1141 1136 1127 1131
+			1110 1114 1122 1131 1129 1129 1132 1128 1129 1118 1115 1114 1110 1110 1113 1121 1125 1122 1127 1125 1122 1124 1127 1128 1122 1135 1138 1139 1134 1135 1124 1122
+			1125 1117 1117 1110 1114 1118 1122 1122 1122 1108 1111 1113 1118 1120 1121 1121 1122 1122 1122 1121 1122 1121 1121 1117 1107 1104 1103 1106 1120 1121 1143 1138
+			1118 1120 1124 1125 1120 1125 1125 1129 1125 1128 1124 1128 1129 1131 1125 1117 1115 1129 1134 1131 1128 1121 1127 1122 1114 1114 1111 1131 1129 1132 1129 1127
+			1118 1121 1127 1125 1131 1131 1127 1129 1118 1111 1113 1117 1118 1117 1129 1134 1115 1129 1135 1132 1124 1127 1121 1117 1129 1115 1114 1117 1114 1115 1115 1113
+			1111 1103 1101 1106 1115 1121 1127 1129 1131 1122 1120 1117 1117 1114 1122 1117 1120 1128 1111 1114 1108 1108 1113 1118 1113 1139 1142 1139 1131 1124 1113 1111
+			1118 1124 1120 1115 1111 1115 1115 1113 1125 1120 1118 1113 1111 1110 1111 1117 1125 1129 1129 1135 1134 1129 1131 1125 1134 1138 1134 1142 1145 1138 1121 1129
+			1129 1120 1114 1122 1120 1122 1124 1120 1129 1142 1149 1149 1145 1141 1134 1110 1120 1128 1128 1127 1124 1125 1134 1134 1117 1114 1114 1120 1113 1120 1127 1122
+			1110 1131 1135 1114 1127 1120 1111 1107 1125 1131 1129 1122 1128 1117 1120 1111 1120 1127 1118 1118 1118 1120 1121 1118 1128 1129 1129 1128 1127 1118 1120 1120
+			1113 1113 1120 1128 1128 1131 1135 1135 1118 1124 1124 1121 1125 1125 1129 1124 1121 1106 1110 1107 1106 1110 1121 1120 1114 1108 1104 1113 1104 1117 1124 1134
+			1124 1128 1124 1118 1111 1107 1110 1103 1125 1115 1121 1122 1124 1117 1115 1127 1117 1117 1118 1122 1122 1125 1124 1129 1121 1113 1115 1117 1115 1121 1120 1122
+			1129 1134 1135 1128 1127 1111 1114 1110 1125 1127 1131 1131 1124 1125 1120 1113 1121 1132 1128 1132 1127 1121 1117 1118 1111 1114 1118 1120 1122 1122 1127 1122
+			1134 1131 1129 1125 1120 1113 1121 1115 1106 1107 1104 1114 1120 1117 1124 1135 1124 1127 1127 1128 1121 1124 1121 1121 1120 1115 1120 1128 1117 1118 1122 1115
+			1117 1118 1124 1131 1134 1135 1136 1104 1115 1115 1120 1120 1117 1110 1111 1118 1122 1124 1120 1125 1114 1113 1118 1120 1110 1113 1121 1129 1134 1131 1135 1131
+			1121 1120 1121 1124 1124 1124 1124 1118 1121 1124 1121 1118 1121 1114 1114 1106 1120 1118 1121 1120 1124 1129 1131 1122 1122 1122 1125 1142 1134 1131 1127 1129
+			1127 1121 1127 1135 1132 1132 1118 1110 1124 1120 1127 1117 1122 1122 1120 1117 1120 1103 1107 1108 1111 1120 1120 1136 1117 1114 1114 1113 1107 1127 1128 1135
+			1121 1118 1117 1122 1128 1134 1132 1121 1108 1110 1113 1106 1114 1107 1111 1121 1115 1106 1106 1107 1113 1117 1120 1127 1117 1115 1113 1104 1100 1104 1110 1107
+			1118 1117 1110 1110 1117 1120 1128 1125 1117 1117 1111 1113 1120 1118 1128 1128 1115 1110 1106 1110 1113 1118 1124 1129 1117 1114 1114 1110 1113 1111 1124 1120
+			1124 1132 1121 1113 1103 1108 1108 1120 1135 1135 1134 1125 1120 1113 1117 1111 1129 1135 1135 1135 1134 1124 1118 1110 1131 1121 1117 1113 1115 1115 1108 1114
+			1124 1115 1120 1127 1127 1129 1138 1114 1121 1122 1113 1118 1114 1110 1114 1120 1117 1117 1117 1122 1128 1135 1134 1132 1127 1131 1118 1114 1104 1104 1114 1113
+			1131 1114 1120 1125 1134 1135 1132 1113 1121 1124 1118 1121 1118 1118 1115 1120 1108 1108 1107 1107 1110 1111 1107 1122 1122 1122 1124 1128 1124 1125 1118 1124
+			1107 1108 1104 1104 1113 1122 1132 1142 1121 1122 1120 1111 1110 1107 1110 1104 1118 1120 1120 1117 1120 1118 1117 1120 1120 1114 1114 1115 1113 1115 1121 1115
+			1101 1129 1117 1101 1097 1107 1110 1134 1125 1131 1129 1131 1125 1118 1122 1121 1117 1118 1115 1117 1113 1117 1124 1121 1124 1120 1124 1114 1120 1117 1120 1124
+			1104 1108 1104 1107 1106 1113 1122 1134 1122 1129 1124 1113 1122 1121 1125 1117 1127 1121 1121 1113 1117 1117 1117 1122 1113 1107 1107 1118 1125 1134 1135 1138
+			1120 1114 1115 1113 1111 1114 1121 1129 1108 1104 1103 1111 1124 1124 1124 1135 1120 1121 1122 1121 1127 1122 1122 1120 1107 1114 1113 1127 1131 1134 1132 1129
+			1101 1127 1124 1106 1103 1103 1108 1121 1138 1139 1138 1136 1132 1128 1125 1125 1120 1120 1121 1121 1125 1132 1141 1128 1138 1134 1122 1114 1110 1104 1110 1106
+			1114 1115 1115 1115 1111 1107 1110 1118 1128 1128 1127 1120 1115 1113 1107 1115 1117 1121 1122 1122 1120 1117 1110 1114 1125 1125 1124 1120 1121 1114 1121 1117
+			1125 1129 1131 1127 1115 1115 1113 1114 1113 1114 1117 1117 1124 1131 1129 1136 1127 1122 1128 1117 1110 1111 1110 1115 1115 1124 1136 1131 1129 1124 1121 1127
+			1122 1113 1115 1117 1124 1122 1115 1121 1129 1128 1127 1121 1117 1120 1118 1118 1110 1106 1107 1107 1110 1108 1114 1132 1134 1132 1122 1117 1117 1107 1108 1124
+			1121 1122 1121 1115 1120 1120 1122 1122 1121 1120 1121 1125 1121 1118 1117 1121 1124 1122 1122 1127 1125 1124 1122 1124 1121 1122 1121 1124 1115 1121 1120 1121
+			1114 1110 1111 1107 1108 1117 1118 1121 1115 1122 1124 1120 1125 1131 1125 1125 1115 1122 1118 1120 1121 1115 1120 1115 1115 1113 1118 1122 1118 1121 1122 1128
+			1125 1120 1120 1125 1125 1131 1129 1120 1118 1117 1110 1108 1111 1118 1115 1110 1124 1122 1121 1120 1124 1125 1121 1125 1124 1122 1125 1122 1118 1121 1121 1124
+			1124 1120 1124 1120 1120 1121 1122 1124 1117 1114 1118 1115 1120 1117 1121 1111 1128 1128 1122 1124 1128 1128 1127 1122 1131 1128 1128 1122 1117 1114 1114 1127
+			>;
+
+		PS_Config_Lmt_FW_Rawdata_N = <
+			484 477 477 477 476 477 478 477 484 481 481 483 484 482 481 483 481 481 481 482 480 480 480 480 481 480 482 482 484 483 481 483
+			478 478 479 477 479 478 478 478 478 477 478 477 476 477 476 473 480 484 482 480 479 478 478 477 481 483 485 486 486 484 481 486
+			483 487 484 478 477 478 479 477 480 479 478 480 481 478 475 477 483 482 480 480 479 478 480 478 480 478 478 478 477 479 483 480
+			488 483 487 485 484 484 485 484 484 483 484 484 483 481 479 479 483 481 488 489 487 488 489 487 485 480 480 481 480 477 479 480
+			480 478 481 483 482 481 478 477 480 481 481 481 480 484 483 486 476 478 480 485 486 487 487 487 473 473 474 474 475 474 483 483
+			477 475 478 480 481 481 483 481 482 480 479 478 478 475 474 475 484 483 477 477 479 478 478 477 480 476 475 475 475 478 480 478
+			480 478 483 486 489 489 489 490 477 474 473 474 475 478 484 486 487 488 478 476 472 474 473 475 477 478 481 482 481 481 490 485
+			483 481 485 486 485 485 484 481 481 483 483 481 482 478 478 478 480 483 482 478 479 478 478 478 484 489 488 487 486 485 483 483
+			481 482 483 481 481 478 478 478 486 482 481 481 481 477 478 475 490 489 486 475 475 478 477 477 477 484 483 483 481 484 484 483
+			484 486 487 484 479 477 478 477 485 485 484 486 484 483 480 481 481 482 480 483 483 483 484 483 482 478 478 481 480 478 483 483
+			481 480 479 478 478 478 480 480 480 481 482 480 481 478 481 484 483 483 487 484 480 478 478 476 479 480 478 477 476 483 483 483
+			474 482 473 472 473 475 477 477 476 480 481 480 482 482 480 480 486 486 481 477 478 477 478 477 481 475 474 474 475 476 480 473
+			473 474 483 487 488 487 486 486 473 480 482 485 486 489 485 483 480 483 485 487 484 481 482 481 475 480 480 478 478 480 483 480
+			488 488 477 473 475 476 477 475 483 482 481 480 481 480 478 480 475 477 478 479 481 483 483 483 479 481 479 478 478 479 477 480
+			481 483 476 478 480 481 482 482 474 480 484 483 486 487 486 484 478 478 477 481 483 480 481 480 484 486 484 483 486 481 478 480
+			477 478 475 480 480 481 481 483 481 478 477 480 480 483 478 479 478 482 484 480 480 480 480 482 478 475 477 478 477 478 481 482
+			487 487 484 479 474 474 475 475 477 481 481 481 482 484 485 481 477 482 481 483 484 483 481 482 481 480 480 478 477 479 483 484
+			484 482 475 475 477 478 476 477 474 487 487 487 488 486 483 477 481 480 481 482 476 476 474 475 479 481 486 489 489 487 483 484
+			475 477 481 484 484 484 485 483 484 479 478 477 475 475 477 480 482 481 483 482 481 481 483 483 481 486 487 488 486 486 481 481
+			482 478 478 475 477 479 481 481 481 475 476 477 479 480 480 480 481 481 481 480 481 480 480 478 474 473 472 474 480 480 490 487
+			479 480 481 482 480 482 482 484 482 483 481 483 484 484 482 478 478 484 486 484 483 480 483 481 477 477 476 484 484 485 484 483
+			479 480 483 482 484 484 483 484 479 476 477 478 479 478 484 486 478 484 486 485 481 483 480 478 484 478 477 478 477 478 478 477
+			476 472 472 474 478 480 483 484 484 481 480 478 478 477 481 478 480 483 476 477 475 475 477 479 477 488 489 488 484 481 477 476
+			479 481 480 478 476 478 478 477 482 480 479 477 476 475 476 478 482 484 484 486 486 484 484 482 486 487 486 489 490 487 480 484
+			484 480 477 481 480 481 481 480 484 489 492 492 490 489 486 475 480 483 483 483 481 482 486 486 478 477 477 480 477 480 483 481
+			475 484 486 477 483 480 476 474 482 484 484 481 483 478 480 476 480 483 479 479 479 480 480 479 483 484 484 483 483 479 480 480
+			477 477 480 483 483 484 486 486 479 481 481 480 482 482 484 481 480 474 475 474 474 475 480 480 477 475 473 477 473 478 481 486
+			481 483 481 479 476 474 475 472 482 478 480 481 481 478 478 483 478 478 479 481 481 482 481 484 480 477 478 478 478 480 480 481
+			484 486 486 483 483 476 477 475 482 483 484 484 481 482 480 477 480 485 483 485 483 480 478 479 476 477 479 480 481 481 483 481
+			486 484 484 482 480 477 480 478 474 474 473 477 480 478 481 486 481 483 483 483 480 481 480 480 480 478 480 483 478 479 481 478
+			478 479 481 484 486 486 487 473 478 478 480 480 478 475 476 479 481 481 480 482 477 477 479 480 475 477 480 484 486 484 486 484
+			480 480 480 481 481 481 481 479 480 481 480 479 480 477 477 474 480 479 480 480 481 484 484 481 481 481 482 489 486 484 483 484
+			483 480 483 486 485 485 479 475 481 480 483 478 481 481 480 478 480 472 474 475 476 480 480 487 478 477 477 477 474 483 483 486
+			480 479 478 481 483 486 485 480 475 475 477 474 477 474 476 480 478 474 474 474 477 478 480 483 478 478 477 473 471 473 475 474
+			479 478 475 475 478 480 483 482 478 478 476 477 480 479 483 483 478 475 474 475 477 479 481 484 478 477 477 475 477 476 481 480
+			481 485 480 477 472 475 475 480 486 486 486 482 480 477 478 476 484 486 486 486 486 481 479 475 484 480 478 477 478 478 475 477
+			481 478 480 483 483 484 487 477 480 481 477 479 477 475 477 480 478 478 478 481 483 486 486 485 483 484 479 477 473 473 477 477
+			484 477 480 482 486 486 485 477 480 481 479 480 479 479 478 480 475 475 474 474 475 476 474 481 481 481 481 483 481 482 479 481
+			474 475 473 473 477 481 485 489 480 481 480 476 475 474 475 473 479 480 480 478 480 479 478 480 480 477 477 478 477 478 480 478
+			472 484 478 472 470 474 475 486 482 484 484 484 482 479 481 480 478 479 478 478 477 478 481 480 481 480 481 477 480 478 480 481
+			473 475 473 474 474 477 481 486 481 484 481 477 481 480 482 478 483 480 480 477 478 478 478 481 477 474 474 479 482 486 486 487
+			480 477 478 477 476 477 480 484 475 473 472 476 481 481 481 486 480 480 481 480 483 481 481 480 474 477 477 483 484 486 485 484
+			472 483 481 474 472 472 475 480 487 488 487 487 485 483 482 482 480 480 480 480 482 485 489 483 487 486 481 477 475 473 475 474
+			477 478 478 478 476 474 475 479 483 483 483 480 478 477 474 478 478 480 481 481 480 478 475 477 482 482 481 480 480 477 480 478
+			482 484 484 483 478 478 477 477 477 477 478 478 481 484 484 487 483 481 483 478 475 476 475 478 478 481 487 484 484 481 480 483
+			481 477 478 478 481 481 478 480 484 483 483 480 478 480 479 479 475 474 474 474 475 475 477 485 486 485 481 478 478 474 475 481
+			480 481 480 478 480 480 481 481 480 480 480 482 480 479 478 480 481 481 481 483 482 481 481 481 480 481 480 481 478 480 480 480
+			477 475 476 474 475 478 479 480 478 481 481 480 482 484 482 482 478 481 479 480 480 478 480 478 478 477 479 481 479 480 481 483
+			482 480 480 482 482 484 484 480 479 478 475 475 476 479 478 475 481 481 480 480 481 482 480 482 481 481 482 481 479 480 480 481
+			481 480 481 480 480 480 481 481 478 477 479 478 480 478 480 476 483 483 481 481 483 483 483 481 484 483 483 481 478 477 477 483
+			>;
+
+		PS_Config_Lmt_FW_CC_P = <
+			64 63 63 63 63 63 63 63 64 63 64 64 64 64 64 64 63 63 63 63 63 63 63 63 64 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			66 64 64 64 64 64 64 64 66 66 66 66 66 66 66 66 66 64 64 64 64 64 64 64 66 66 66 66 66 64 64 66
+			64 64 64 66 66 66 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			66 66 66 66 66 66 66 66 66 64 64 64 64 64 64 64 66 66 66 66 66 66 66 66 66 66 66 66 66 66 64 64
+			64 64 64 64 64 64 64 64 66 66 66 66 66 66 66 66 64 64 64 66 66 66 66 66 66 66 66 66 66 66 66 66
+			64 64 64 66 66 66 66 66 64 64 64 64 64 64 64 64 64 64 66 66 66 66 66 66 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 66 66 66 66 66 66 66 66 64 64 64 64 66 66 66 66 66 66 66 66 66 66 66 64 66
+			66 66 66 66 66 66 66 66 66 64 64 64 64 64 64 64 64 66 66 66 66 66 66 66 66 66 66 66 66 66 64 66
+			64 64 64 64 64 64 66 66 66 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 66 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 64 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 66 64 64 64 64 64 64 64
+			64 64 64 64 64 66 66 66 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 66 66 66 64 64 64 64 64 64 64 64 64 64 64 64 64 66 66 66 66 64 64 64 64
+			64 64 64 64 64 64 64 66 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 66 66 66 64 64 64 64 64 64 64 64 64 64 64 64 64 66 66 66 66 66 64 64 64
+			64 64 64 64 66 66 66 66 64 64 64 64 64 64 64 64 64 64 64 64 64 66 66 66 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 66 66 64 64 64 64 64 64 64 64 64 64 64 64 64 64 66 66 66 66 64 64 64 64
+			64 64 64 66 66 66 66 66 66 64 64 64 64 64 64 64 64 64 64 66 66 66 66 66 66 66 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 66 66 66 66 66 66 66 66 64 64 64 64 64 64 64 64 64 66 66 66 66 64 64 64 64 64 64 64 64
+			63 63 64 64 64 64 64 64 64 64 64 64 63 63 63 64 63 63 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 64 64 64 64 64 64 64 64 64 64 64 64 64 63 63 63
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 64 64 64 64 64 64 64 64 64 64 64 64 64 64 63 64
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63
+			64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 66 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			63 63 63 63 63 63 63 63 64 64 63 63 63 63 63 63 63 63 63 63 63 63 63 64 64 64 64 64 63 63 63 63
+			64 64 64 64 64 64 64 66 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 66 64 64 64 64 64 64 64 64
+			63 63 63 63 63 63 63 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63 63 64 64 64 64 64 64 64 63 64
+			63 63 63 63 64 64 64 64 63 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63 63
+			63 63 63 63 63 63 64 64 64 64 64 64 64 64 63 63 63 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			64 63 63 63 64 64 64 64 63 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63
+			63 63 63 63 63 64 64 64 64 64 64 64 64 64 64 64 63 63 63 63 64 64 64 64 64 64 64 64 64 64 64 64
+			63 63 63 63 63 64 64 64 64 64 63 63 63 63 63 63 64 64 64 64 64 64 64 64 64 63 63 63 63 63 63 63
+			63 63 63 63 63 64 64 64 63 63 63 63 63 63 63 63 63 63 63 63 63 64 64 64 63 63 63 63 63 63 63 63
+			64 63 63 63 64 64 64 64 64 63 63 63 63 63 63 63 63 63 63 63 63 63 64 64 64 64 64 64 64 64 63 64
+			64 63 63 63 64 64 64 64 64 64 64 64 64 63 63 63 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
+			63 63 63 63 63 63 64 64 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 64 63 63 63 63 63 63 63 63
+			63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63
+			66 64 64 64 64 64 64 64 64 64 64 64 63 63 63 64 66 64 64 64 64 64 64 64 64 64 63 63 63 63 63 64
+			59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59
+			60 59 59 59 59 60 60 60 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 60 59 59 59 59 59 59 59 59
+			>;
+
+		PS_Config_Lmt_FW_CC_N = <
+			29 28 28 28 28 28 28 28 29 28 29 29 29 29 29 29 28 28 28 28 28 28 28 28 29 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			28 28 29 29 29 29 29 29 29 29 29 29 28 28 28 29 28 28 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 29 29 29 29 29 29 29 29 29 29 29 29 29 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 29 29 29 29 29 29 29 29 29 29 29 29 29 29 28 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			28 28 28 28 28 28 28 28 29 29 28 28 28 28 28 28 28 28 28 28 28 28 28 29 29 29 29 29 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			28 28 28 28 28 28 28 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28 28 29 29 29 29 29 29 29 28 29
+			28 28 28 28 29 29 29 29 28 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28 28
+			28 28 28 28 28 28 29 29 29 29 29 29 29 29 28 28 28 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			29 28 28 28 29 29 29 29 28 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28
+			28 28 28 28 28 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 29 29 29 29 29 29 29 29 29 29 29 29
+			28 28 28 28 28 29 29 29 29 29 28 28 28 28 28 28 29 29 29 29 29 29 29 29 29 28 28 28 28 28 28 28
+			28 28 28 28 28 29 29 29 28 28 28 28 28 28 28 28 28 28 28 28 28 29 29 29 28 28 28 28 28 28 28 28
+			29 28 28 28 29 29 29 29 29 28 28 28 28 28 28 28 28 28 28 28 28 28 29 29 29 29 29 29 29 29 28 29
+			29 28 28 28 29 29 29 29 29 29 29 29 29 28 28 28 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29 29
+			28 28 28 28 28 28 29 29 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 29 28 28 28 28 28 28 28 28
+			28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
+			29 29 29 29 29 29 29 29 29 29 29 29 28 28 28 29 29 29 29 29 29 29 29 29 29 29 28 28 28 28 28 29
+			26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
+			27 26 26 26 26 27 27 27 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 27 26 26 26 26 26 26 26 26
+			>;
+
+		PS_Config_Lmt_FW_Diff_P = <
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
+			>;
+
+		PS_Config_Lmt_FW_Diff_N = <
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			(-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50) (-50)
+			>;
+
+		PS_Config_Lmt_PenTipX_FW_Raw_P = <
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700>;
+
+		PS_Config_Lmt_PenTipX_FW_Raw_N = <
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>;
+
+		PS_Config_Lmt_PenTipY_FW_Raw_P = <
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700>;
+
+		PS_Config_Lmt_PenTipY_FW_Raw_N = <
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0>;
+
+		PS_Config_Lmt_PenRingX_FW_Raw_P = <
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700
+			700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700 700>;
+
+		PS_Config_Lmt_PenRingX_FW_Raw_N = <
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+			0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>;
+
+		PS_Config_Lmt_PenRingY_FW_Raw_P = <
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700
+			700 700 700 700>;
+
+		PS_Config_Lmt_PenRingY_FW_Raw_N = <
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0
+			0 0 0 0>;
+
+		PS_Config_Lmt_PenTipX_FW_Diff_P = <
+			280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280
+			280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280
+			280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280
+			280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280
+			280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280
+			280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280>;
+
+		PS_Config_Lmt_PenTipX_FW_Diff_N = <
+			(-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280)>;
+
+		PS_Config_Lmt_PenTipY_FW_Diff_P = <
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280>;
+
+		PS_Config_Lmt_PenTipY_FW_Diff_N = <
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)>;
+
+		PS_Config_Lmt_PenRingX_FW_Diff_P = <
+			280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280
+			280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280
+			280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280
+			280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280
+			280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280
+			280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280 280>;
+
+		PS_Config_Lmt_PenRingX_FW_Diff_N = <
+			(-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280) (-280)>;
+
+		PS_Config_Lmt_PenRingY_FW_Diff_P = <
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280
+			280 280 280 280>;
+
+		PS_Config_Lmt_PenRingY_FW_Diff_N = <
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)
+			(-280) (-280) (-280) (-280)>;
+		PS_Config_Lmt_Pen_Rx_Max_P = <65535>;
+		PS_Config_Lmt_Pen_Rx_Max_N = <0>;
+		PS_Config_Diff_Test_Frame = <50>;
+	};
+
+	controller-data {
+		samsung,spi-feedback-delay = <0>;
+		samsung,spi-chip-select-mode = <1>;
+		cs-clock-delay = <1>;
+		cs-init-state = <0>;
+	};
+};
+
diff --git a/dts/gs201-tangorpro-typec.dtsi b/dts/gs201-tangorpro-typec.dtsi
new file mode 100644
index 0000000..4cec095
--- /dev/null
+++ b/dts/gs201-tangorpro-typec.dtsi
@@ -0,0 +1,19 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Google GS201 Tangorpro type-c device tree
+ *
+ * Copyright (c) 2022 Google, LLC
+ *
+ */
+
+&max77759tcpc {
+	connector {
+		sink-pdos = <PDO_FIXED(5000, 3000,
+				       PDO_FIXED_DATA_SWAP |
+				       PDO_FIXED_USB_COMM |
+				       PDO_FIXED_HIGHER_CAP |
+				       PDO_FIXED_DUAL_ROLE)
+			     PDO_FIXED(9000, 2200, 0)>;
+		/delete-property/ new-source-frs-typec-current;
+	};
+};
diff --git a/dts/gs201-tangorpro-usb.dtsi b/dts/gs201-tangorpro-usb.dtsi
new file mode 100644
index 0000000..f512a5d
--- /dev/null
+++ b/dts/gs201-tangorpro-usb.dtsi
@@ -0,0 +1,50 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Google Oriole USB device tree source
+ *
+ * Copyright 2022 Google,LLC
+ */
+
+&usb_hs_tune {
+	status = "disabled";
+	hs_tune_cnt = <6>;
+	/* value = <device host> */
+	hs_tune1 {
+		tune_name = "tx_pre_emp";
+		tune_value = <0x3 0x3>;
+	};
+
+	hs_tune2 {
+		tune_name = "tx_vref";
+		tune_value = <0x9 0x9>;
+	};
+
+	hs_tune3 {
+		tune_name = "rx_sqrx";
+		tune_value = <0x7 0x7>;
+	};
+
+	hs_tune4 {
+		tune_name = "utmi_clk";
+		tune_value = <0x1 0x1>;
+	};
+
+	hs_tune5 {
+		tune_name = "compdis";
+		tune_value = <0x7 0x7>;
+	};
+
+	hs_tune6 {
+		tune_name = "tx_res";
+		tune_value = <0x3 0x3>;
+	};
+};
+
+&udc {
+	extcon = <&max77759tcpc &google_pogo>;
+	force_gen1;
+};
+
+&usbdrd_dwc3 {
+	maximum-speed = "super-speed";
+};
diff --git a/dts/gs201-tangorpro-usecases.dtsi b/dts/gs201-tangorpro-usecases.dtsi
new file mode 100644
index 0000000..507df25
--- /dev/null
+++ b/dts/gs201-tangorpro-usecases.dtsi
@@ -0,0 +1,28 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Battery device tree entries specific to tangorpro
+ *
+ * Copyright (c) 2022 Google, LLC
+ *
+ */
+
+/* system use cases */
+&max77759_chg {
+	/* external boost */
+	max77759,bst-on = <&max777x9_gpio 4 GPIO_ACTIVE_HIGH>; /* MW: OTG_BOOST_EN */
+	max77759,extbst-ctl = <&max77759_tcpc_gpio 0 GPIO_ACTIVE_HIGH>;
+	max77759,extbst-mode = <&s2mpg12_gpio 4 GPIO_ACTIVE_HIGH>;
+
+	/* for OTG related usecase*/
+	max77759,rx-to-rx-otg-en; /* support RX -> RX+OTG */
+	max77759,ext-otg-only; /* use external OTG only */
+
+	/* S2MPG12X01 -> GPIO_2 -> POGO_OVP_EN_L */
+	max77759,pogo-ovp-en = <&s2mpg12_gpio 2 GPIO_ACTIVE_LOW>;
+	/* APC GPIOs -> XAPC_GPIO1 -> POGO_VOUT_SW_EN */
+	max77759,pogo-vout-sw-en = <&gpp0 2 GPIO_ACTIVE_LOW>;
+
+	/* The high/low bound of vbatt for FCCM mode */
+	max77759,otg-fccm-vbatt-upperbd = <4500>;
+	max77759,otg-fccm-vbatt-lowerbd = <4450>;
+};
diff --git a/dts/gs201-tangorpro-uwb.dtsi b/dts/gs201-tangorpro-uwb.dtsi
new file mode 100644
index 0000000..7c165d6
--- /dev/null
+++ b/dts/gs201-tangorpro-uwb.dtsi
@@ -0,0 +1,16 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Tangorpro device tree source
+ *
+ * Copyright (c) 2022 Google, LLC
+ *              https://www.google.com
+*/
+
+#include "gs201/gs201-ravenclaw-uwb.dtsi"
+
+&spi_16 {
+        dw3xxx_prod@0 {
+                min_clamp = <800>;
+        };
+};
+
diff --git a/dts/gs201-tangorpro-wlan.dtsi b/dts/gs201-tangorpro-wlan.dtsi
new file mode 100644
index 0000000..b298a7c
--- /dev/null
+++ b/dts/gs201-tangorpro-wlan.dtsi
@@ -0,0 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Google WLAN for tangorpro
+ *
+ * Copyright 2022 Google LLC
+ */
+
+&pcie_1 {   /* pcie ch1 used for the connection with WiFi */
+        max-link-speed = <LINK_SPEED_GEN1>;
+};
diff --git a/insmod_cfg/init.insmod.tangorpro.cfg b/insmod_cfg/init.insmod.tangorpro.cfg
new file mode 100644
index 0000000..062e2c8
--- /dev/null
+++ b/insmod_cfg/init.insmod.tangorpro.cfg
@@ -0,0 +1,16 @@
+##########################################################
+#           init.insmod.tangorpro.cfg                         #
+# This file contains tangorpro specific kernel modules        #
+# to load at init time by init.insmod.sh script          #
+##########################################################
+
+# Load device specific kernel modules
+# Modules here will be loaded *after* all common modules
+modprobe|synadhd.ko
+modprobe|snd-soc-cs35l41-spi.ko
+modprobe|nvt_touch.ko
+
+# All device specific modules loaded
+setprop|vendor.device.modules.ready
+setprop|vendor.all.modules.ready
+setprop|vendor.all.devices.ready
diff --git a/pogo/BUILD.bazel b/pogo/BUILD.bazel
new file mode 100644
index 0000000..ab705da
--- /dev/null
+++ b/pogo/BUILD.bazel
@@ -0,0 +1,28 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+load("//build/kernel/kleaf:kernel.bzl", "kernel_module")
+
+kernel_module(
+    name = "pogo_transport",
+    srcs = glob([
+        "*.c",
+        "*.h",
+    ]) + [
+        "Kbuild",
+        "//private/google-modules/bms:headers",
+        "//private/google-modules/bms/misc:headers",
+        "//private/google-modules/soc/gs:gs_soc_headers",
+    ],
+    outs = [
+        "pogo_transport.ko",
+    ],
+    kernel_build = "//private/devices/google/common:kernel",
+    visibility = [
+        "//private/devices/google:__subpackages__",
+    ],
+    deps = [
+        "//private/google-modules/bms",
+        "//private/google-modules/bms/misc:bms-misc",
+        "//private/google-modules/soc/gs:gs_soc_module",
+    ],
+)
diff --git a/pogo/Kbuild b/pogo/Kbuild
new file mode 100644
index 0000000..a0aadbf
--- /dev/null
+++ b/pogo/Kbuild
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0
+
+subdir-ccflags-y += -I$(srctree)/../private/google-modules/bms
+subdir-ccflags-y += -I$(srctree)/../private/google-modules/soc/gs/drivers/usb/typec/tcpm/google
+
+obj-$(CONFIG_POGO_TRANSPORT)            += pogo_transport.o
diff --git a/pogo/Kconfig b/pogo/Kconfig
new file mode 100644
index 0000000..67e7b46
--- /dev/null
+++ b/pogo/Kconfig
@@ -0,0 +1,11 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (C) 2022, Google LLC
+
+config POGO_TRANSPORT
+	tristate "Pogo transport management driver"
+	depends on TYPEC_MAX77759
+	select GOOGLE_LOGBUFFER
+	help
+	  Pogo transport management driver
+
diff --git a/pogo/Makefile b/pogo/Makefile
new file mode 100644
index 0000000..95e94d9
--- /dev/null
+++ b/pogo/Makefile
@@ -0,0 +1,20 @@
+M ?= $(shell pwd)
+
+KBASE_PATH_RELATIVE = $(M)
+
+KBUILD_OPTIONS += CONFIG_POGO_TRANSPORT=m
+
+EXTRA_CFLAGS += -DDYNAMIC_DEBUG_MODULE=1
+EXTRA_CFLAGS += -Werror
+
+EXTRA_SYMBOLS += $(OUT_DIR)/../private/google-modules/bms/Module.symvers
+EXTRA_SYMBOLS += $(OUT_DIR)/../private/google-modules/bms/misc/Module.symvers
+
+include $(KERNEL_SRC)/../private/google-modules/soc/gs/Makefile.include
+
+modules modules_install clean:
+	$(MAKE) -C $(KERNEL_SRC) M=$(M) W=1 \
+	$(KBUILD_OPTIONS) \
+	EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
+	KBUILD_EXTRA_SYMBOLS="$(EXTRA_SYMBOLS)" \
+	$(@)
diff --git a/pogo/pogo_transport.c b/pogo/pogo_transport.c
new file mode 100644
index 0000000..35000d2
--- /dev/null
+++ b/pogo/pogo_transport.c
@@ -0,0 +1,3565 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2021, Google LLC
+ *
+ * Pogo management driver
+ */
+
+#include <linux/alarmtimer.h>
+#include <linux/debugfs.h>
+#include <linux/delay.h>
+#include <linux/extcon.h>
+#include <linux/extcon-provider.h>
+#include <linux/interrupt.h>
+#include <linux/i2c.h>
+#include <linux/kthread.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/of_gpio.h>
+#include <linux/of_irq.h>
+#include <linux/platform_device.h>
+#include <linux/power_supply.h>
+#include <linux/reboot.h>
+#include <linux/regulator/consumer.h>
+#include <linux/spinlock.h>
+#include <linux/usb.h>
+#include <linux/usb/tcpm.h>
+#include <misc/gvotable.h>
+
+#include "google_bms.h"
+#include "google_psy.h"
+#include "tcpci_max77759.h"
+
+#define POGO_TIMEOUT_MS 10000
+#define LC_WAKEUP_TIMEOUT_MS 10000
+#define POGO_USB_CAPABLE_THRESHOLD_UV 10500000
+#define POGO_USB_RETRY_COUNT 10
+#define POGO_USB_RETRY_INTEREVAL_MS 50
+#define POGO_PSY_DEBOUNCE_MS 50
+#define POGO_PSY_NRDY_RETRY_MS 500
+#define POGO_ACC_GPIO_DEBOUNCE_MS 20
+#define LC_DELAY_CHECK_MS 5000
+#define LC_DISABLE_MS 1800000 /* 30 min */
+#define LC_ENABLE_MS 300000 /* 5 min */
+#define LC_BOOTUP_MS 3000
+#define ACC_CHARGING_TIMEOUT_SEC 1800 /* 30 min */
+
+#define KEEP_USB_PATH 2
+#define KEEP_HUB_PATH 2
+#define DEFAULT_STATE_MACHINE_ENABLE true
+
+#define POGO_VOTER "POGO"
+#define SSPHY_RESTART_EL "SSPHY_RESTART"
+
+/*
+ * State Description:
+ *	INVALID_STATE,
+ *  (A)	STANDBY,			// Nothing attached, hub disabled
+ *	DOCKING_DEBOUNCED,		// STANDBY -> DOCK_HUB, pogo gpio
+ *	STANDBY_ACC_DEBOUNCED,		// STANDBY -> ACC_DIRECT, acc gpio
+ *  (B)	DOCK_HUB,			// Dock online, hub enabled
+ *  (C)	DOCK_DEVICE_HUB,		// Dock online, usb device online, hub enabled
+ *  (H)	DOCK_AUDIO_HUB,			// Dock online, usb audio online, hub enabled
+ *  (I)	AUDIO_HUB,			// Usb audio online, hub enabled
+ *	AUDIO_HUB_DOCKING_DEBOUNCED,	// AUDIO_HUB -> DOCK_AUDIO_HUB, pogo gpio
+ *	AUDIO_HUB_ACC_DEBOUNCED,	// AUDIO_HUB -> ACC_AUDIO_HUB, acc gpio
+ *  (D)	DEVICE_HUB,			// Usb device online, hub enabled
+ *      DEVICE_HUB_DOCKING_DEBOUNCED,   // DEVICE_HUB -> DOCK_DEVICE_HUB, pogo gpio
+ *      DEVICE_HUB_ACC_DEBOUNCED,	// DEVICE_HUB -> ACC_DEVICE_HUB, acc gpio
+ *  (E)	DEVICE_DIRECT,			// Usb device online, hub disabled
+ *	DEVICE_DOCKING_DEBOUNCED,	// DEVICE_DIRECT -> DOCK_DEVICE_HUB, pogo gpio
+ *	DEVICE_DIRECT_ACC_DEBOUNCED,	// DEVICE_DIRECT -> ACC_DEVICE_HUB, acc gpio
+ *  (F)	AUDIO_DIRECT,			// Usb audio online, hub disabled
+ *	AUDIO_DIRECT_DOCKING_DEBOUNCED,	// AUDIO_DIRECT -> AUDIO_DIRECT_DOCK_OFFLINE, pogo gpio
+ *	AUDIO_DIRECT_ACC_DEBOUNCED,	// AUDIO_DIRECT -> ACC_DEVICE_HUB, acc gpio
+ *  (G)	AUDIO_DIRECT_DOCK_OFFLINE,	// Usb audio online, dock offline, hub disabled
+ *  (J)	HOST_DIRECT,			// Usb host online, hub disabled
+ *	HOST_DIRECT_DOCKING_DEBOUNCED,	// HOST_DIRECT -> HOST_DIRECT_DOCK_OFFLINE, pogo gpio
+ *  (K)	HOST_DIRECT_DOCK_OFFLINE,	// Usb host online, dock offline, hub disabled
+ *      HOST_DIRECT_ACC_DEBOUNCED,	// HOST_DIRECT -> HOST_DIRECT_ACC_OFFLINE, acc gpio
+ *  (L)	DOCK_HUB_HOST_OFFLINE,		// Dock online, usb host offline, hub enabled
+ *  (M)	ACC_DIRECT,			// Acc online, hub disabled
+ *  (N)	ACC_DEVICE_HUB,			// Acc online, usb device online, hub enabled
+ *  (O)	ACC_HUB,			// Acc online, hub enabled
+ *  (T)	ACC_HUB_HOST_OFFLINE,		// Acc online, hub enabled, usb host offline
+ *  (P)	ACC_AUDIO_HUB,			// Acc online, usb audio online, hub enabled
+ *  (Q)	LC,				// Pogo Vout off
+ *  (U)	LC_DEVICE_DIRECT,		// Pogo Vout off, Usb device online, hub disabled
+ *  (V)	LC_AUDIO_DIRECT,		// Pogo Vout off, Usb audio online, hub disabled
+ *  (W)	LC_ALL_OFFLINE,			// Pogo Vout off, Usb host offline, hub disabled
+ *  (X)	LC_HOST_DIRECT,			// Pogo Vout off, USb host online, hub disabled
+ *  (R)	HOST_DIRECT_ACC_OFFLINE,	// Usb host online, acc offline, hub disabled
+ *  (S)	ACC_DIRECT_HOST_OFFLINE,	// Acc online, usb host offline
+ */
+
+#define FOREACH_STATE(S)			\
+	S(INVALID_STATE),			\
+	S(STANDBY),				\
+	S(DOCKING_DEBOUNCED),			\
+	S(STANDBY_ACC_DEBOUNCED),		\
+	S(DOCK_HUB),				\
+	S(DOCK_DEVICE_HUB),			\
+	S(DOCK_AUDIO_HUB),			\
+	S(AUDIO_HUB),				\
+	S(AUDIO_HUB_DOCKING_DEBOUNCED),		\
+	S(AUDIO_HUB_ACC_DEBOUNCED),		\
+	S(DEVICE_HUB),				\
+	S(DEVICE_HUB_DOCKING_DEBOUNCED),	\
+	S(DEVICE_HUB_ACC_DEBOUNCED),		\
+	S(DEVICE_DIRECT),			\
+	S(DEVICE_DOCKING_DEBOUNCED),		\
+	S(DEVICE_DIRECT_ACC_DEBOUNCED),		\
+	S(AUDIO_DIRECT),			\
+	S(AUDIO_DIRECT_DOCKING_DEBOUNCED),	\
+	S(AUDIO_DIRECT_ACC_DEBOUNCED),		\
+	S(AUDIO_DIRECT_DOCK_OFFLINE),		\
+	S(HOST_DIRECT),				\
+	S(HOST_DIRECT_DOCKING_DEBOUNCED),	\
+	S(HOST_DIRECT_DOCK_OFFLINE),		\
+	S(HOST_DIRECT_ACC_DEBOUNCED),		\
+	S(DOCK_HUB_HOST_OFFLINE),		\
+	S(ACC_DIRECT),				\
+	S(ACC_DEVICE_HUB),			\
+	S(ACC_HUB),				\
+	S(ACC_HUB_HOST_OFFLINE),		\
+	S(ACC_AUDIO_HUB),			\
+	S(LC),					\
+	S(LC_DEVICE_DIRECT),			\
+	S(LC_AUDIO_DIRECT),			\
+	S(LC_ALL_OFFLINE),			\
+	S(LC_HOST_DIRECT),			\
+	S(HOST_DIRECT_ACC_OFFLINE),		\
+	S(ACC_DIRECT_HOST_OFFLINE)
+
+#define GENERATE_ENUM(e)	e
+#define GENERATE_STRING(s)	#s
+
+enum pogo_state {
+	FOREACH_STATE(GENERATE_ENUM)
+};
+
+static const char * const pogo_states[] = {
+	FOREACH_STATE(GENERATE_STRING)
+};
+
+enum pogo_event_type {
+	/* Reported when docking status changes */
+	EVENT_DOCKING,
+	/* Enable USB-C data, when pogo usb data is active */
+	EVENT_MOVE_DATA_TO_USB,
+	/* Enable pogo data, when pogo is available */
+	EVENT_MOVE_DATA_TO_POGO,
+	/* Retry reading power supply voltage to detect dock type */
+	EVENT_RETRY_READ_VOLTAGE,
+	/* Reported when data over USB-C is enabled/disabled */
+	EVENT_DATA_ACTIVE_CHANGED,
+
+	/* 5 */
+	/* Hub operation; workable only if hub_embedded is true */
+	EVENT_ENABLE_HUB,
+	EVENT_DISABLE_HUB,
+	EVENT_HALL_SENSOR_ACC_DETECTED,
+	EVENT_HALL_SENSOR_ACC_MALFUNCTION,
+	EVENT_HALL_SENSOR_ACC_UNDOCKED,
+
+	/* 10 */
+	EVENT_POGO_ACC_DEBOUNCED,
+	EVENT_POGO_ACC_CONNECTED,
+	/* Bypass the accessory detection and enable POGO Vout and POGO USB capability */
+	/* This event is for debug only and never used in normal operations. */
+	EVENT_FORCE_ACC_CONNECT,
+	/* Reported when CC orientation has changed */
+	EVENT_ORIENTATION_CHANGED,
+};
+
+#define EVENT_POGO_IRQ			BIT(0)
+#define EVENT_USBC_DATA_CHANGE		BIT(1)
+#define EVENT_ENABLE_USB_DATA		BIT(2)
+#define EVENT_HES_H1S_CHANGED		BIT(3)
+#define EVENT_ACC_GPIO_ACTIVE		BIT(4)
+#define EVENT_ACC_CONNECTED		BIT(5)
+#define EVENT_AUDIO_DEV_ATTACHED	BIT(6)
+#define EVENT_USBC_ORIENTATION		BIT(7)
+#define EVENT_LC_STATUS_CHANGED		BIT(8)
+#define EVENT_USB_SUSPEND		BIT(9)
+#define EVENT_FORCE_POGO		BIT(10)
+#define EVENT_LAST_EVENT_TYPE		BIT(63)
+
+enum lc_stages {
+	STAGE_UNKNOWN,
+	STAGE_WAIT_FOR_SUSPEND,
+	STAGE_VOUT_ENABLED,
+	STAGE_VOUT_DISABLED,
+};
+
+#define bus_suspend(p) ((p)->main_hcd_suspend && (p)->shared_hcd_suspend)
+
+static bool modparam_force_usb;
+module_param_named(force_usb, modparam_force_usb, bool, 0644);
+MODULE_PARM_DESC(force_usb, "Force enabling usb path over pogo");
+
+/* Overrides device tree config */
+static int modparam_pogo_accessory_enable;
+module_param_named(pogo_accessory_enable, modparam_pogo_accessory_enable, int, 0644);
+MODULE_PARM_DESC(pogo_accessory_enable, "Enabling accessory detection over pogo");
+
+/* Set to 1 (enable) or 2 (disable) to override the default value */
+static int modparam_state_machine_enable;
+module_param_named(state_machine_enable, modparam_state_machine_enable, int, 0644);
+MODULE_PARM_DESC(state_machine_enable, "Enabling pogo state machine transition");
+
+extern void register_bus_suspend_callback(void (*callback)(void *bus_suspend_payload, bool main_hcd,
+							   bool suspend),
+					  void *data);
+
+struct pogo_event {
+	struct kthread_delayed_work work;
+	struct pogo_transport *pogo_transport;
+	enum pogo_event_type event_type;
+};
+
+enum pogo_accessory_detection {
+	/* Pogo accessory detection is disabled. */
+	DISABLED,
+	/*
+	 * Pogo accessory detection is only based on HALL output mapped to pogo-acc-hall-capable.
+	 * Expected seq:
+	 * EVENT_HALL_SENSOR_ACC_DETECTED -> EVENT_HALL_SENSOR_ACC_UNDOCKED
+	 */
+	HALL_ONLY,
+	/*
+	 * Pogo accessory detection POR mapped to pogo-acc-capable.
+	 * Expected seq:
+	 * EVENT_HALL_SENSOR_ACC_DETECTED -> EVENT_POGO_ACC_DEBOUNCED ->
+	 * EVENT_POGO_ACC_CONNECTED -> EVENT_HALL_SENSOR_ACC_UNDOCKED
+	 */
+	ENABLED
+};
+
+struct pogo_transport_udev_ids {
+	__le16 vendor;
+	__le16 product;
+};
+
+struct pogo_transport {
+	struct device *dev;
+	struct max77759_plat *chip;
+	struct logbuffer *log;
+	int pogo_gpio;
+	int pogo_irq;
+	int pogo_data_mux_gpio;
+	int pogo_hub_sel_gpio;
+	int pogo_hub_reset_gpio;
+	int pogo_ovp_en_gpio;
+	int pogo_acc_gpio;
+	int pogo_acc_irq;
+	unsigned int pogo_acc_gpio_debounce_ms;
+	struct regulator *hub_ldo;
+	struct regulator *acc_detect_ldo;
+	/* Raw value of the active state. Set to 1 when pogo_ovp_en is ACTIVE_HIGH */
+	bool pogo_ovp_en_active_state;
+	struct pinctrl *pinctrl;
+	struct pinctrl_state *susp_usb_state;
+	struct pinctrl_state *susp_pogo_state;
+	struct pinctrl_state *hub_state;
+	/* When true, Usb data active over pogo pins. */
+	bool pogo_usb_active;
+	/* When true, Pogo connection is capable of usb transport. */
+	bool pogo_usb_capable;
+	/* When true, both pogo and usb-c have equal priority. */
+	bool equal_priority;
+	/* When true, USB data is routed to the hub. */
+	bool pogo_hub_active;
+	/* When true, the board has a hub embedded in the pogo system. */
+	bool hub_embedded;
+	/* When true, pogo takes higher priority */
+	bool force_pogo;
+	/* When true, pogo irq is enabled */
+	bool pogo_irq_enabled;
+	/* When true, acc irq is enabled */
+	bool acc_irq_enabled;
+	/* True if acc gpio was active before the acc irq was disabled */
+	bool acc_gpio_result_cache;
+	/* When true, hall1_s sensor reports attach event */
+	bool hall1_s_state;
+	/* When true, the path won't switch to pogo if accessory is attached */
+	bool mfg_acc_test;
+	/* When true, the hub will remain enabled after undocking */
+	bool force_hub_enabled;
+	/*
+	 * When true, skip acc detection and POGO Vout as well as POGO USB will be enabled.
+	 * Only applicable for debugfs capable builds.
+	 */
+	bool mock_hid_connected;
+	/* When true, lc is triggered */
+	bool lc;
+	/* When true, the bus not yet suspended after lc is triggered */
+	bool wait_for_suspend;
+
+	struct kthread_worker *wq;
+	struct kthread_delayed_work state_machine;
+	struct kthread_work event_work;
+	enum pogo_state prev_state;
+	enum pogo_state state;
+	enum pogo_state delayed_state;
+	unsigned long delayed_runtime;
+	unsigned long delay_ms;
+	unsigned long lc_delay_check_ms;
+	unsigned long lc_enable_ms;
+	unsigned long lc_disable_ms;
+	unsigned long lc_bootup_ms;
+	u64 acc_charging_timeout_sec;
+	u64 acc_charging_full_begin_ns;
+	u64 acc_discharging_begin_ns;
+	unsigned long event_map;
+	bool state_machine_running;
+	bool state_machine_enabled;
+	spinlock_t pogo_event_lock;
+
+	/* Register the notifier from USB core */
+	struct notifier_block udev_nb;
+	/* When true, a superspeed (or better) USB device is enumerated */
+	bool ss_udev_attached;
+	bool main_hcd_suspend;
+	bool shared_hcd_suspend;
+
+	/* Register the notifier for reboot events */
+	struct notifier_block reboot_nb;
+	struct mutex reboot_lock;
+	bool rebooting;
+
+	/* To read voltage at the pogo pins */
+	struct power_supply *pogo_psy;
+	/* To read the status exported from pogo accessory charger */
+	struct power_supply *acc_charger_psy;
+	char *acc_charger_psy_name;
+	enum lc_stages lc_stage;
+	/* Retry when voltage is less than POGO_USB_CAPABLE_THRESHOLD_UV */
+	unsigned int retry_count;
+	/* To signal userspace extcon observer */
+	struct extcon_dev *extcon;
+	/* When true, disable voltage based detection of pogo partners */
+	bool disable_voltage_detection;
+	struct gvotable_election *charger_mode_votable;
+	struct gvotable_election *ssphy_restart_votable;
+
+	/* Used for cancellable work such as pogo debouncing */
+	struct kthread_delayed_work pogo_accessory_debounce_work;
+
+	struct alarm lc_check_alarm;
+	struct kthread_work lc_work;
+
+	/* Pogo accessory detection status */
+	enum pogo_accessory_detection accessory_detection_enabled;
+
+	/* Orientation of USB-C, 0:TYPEC_POLARITY_CC1 1:TYPEC_POLARITY_CC2 */
+	enum typec_cc_polarity polarity;
+
+	/* Cache values from the Type-C driver */
+	enum typec_data_role usbc_data_role;
+	bool usbc_data_active;
+};
+
+static const unsigned int pogo_extcon_cable[] = {
+	EXTCON_USB,
+	EXTCON_DOCK,
+	EXTCON_NONE,
+};
+
+/*
+ * list of USB VID:PID pair of udevs which are audio docks with pogo interfaces
+ * Both VID and PID are required in each entry.
+ */
+static const struct pogo_transport_udev_ids audio_dock_ids[] = {
+	{
+		.vendor = cpu_to_le16(0x18d1),
+		.product = cpu_to_le16(0x9480),
+	},
+	{ },
+};
+
+/* Return true if @vid and @pid pair is found in @list. Otherwise, return false. */
+static bool pogo_transport_match_udev(const struct pogo_transport_udev_ids *list, const u16 vid,
+				      const u16 pid)
+{
+	if (list) {
+		while (list->vendor && list->product) {
+			if (list->vendor == cpu_to_le16(vid) && list->product == cpu_to_le16(pid))
+				return true;
+			list++;
+		}
+	}
+	return false;
+}
+
+static void pogo_transport_event(struct pogo_transport *pogo_transport,
+				 enum pogo_event_type event_type, int delay_ms);
+
+static void update_extcon_dev(struct pogo_transport *pogo_transport, bool docked, bool usb_capable)
+{
+	int ret;
+
+	/* While docking, Signal EXTCON_USB before signalling EXTCON_DOCK */
+	if (docked) {
+		ret = extcon_set_state_sync(pogo_transport->extcon, EXTCON_USB, usb_capable);
+		if (ret)
+			dev_err(pogo_transport->dev, "%s Failed to %s EXTCON_USB\n", __func__,
+				usb_capable ? "set" : "clear");
+		ret = extcon_set_state_sync(pogo_transport->extcon, EXTCON_DOCK, true);
+		if (ret)
+			dev_err(pogo_transport->dev, "%s Failed to set EXTCON_DOCK\n", __func__);
+		return;
+	}
+
+	/* b/241919179: While undocking, Signal EXTCON_DOCK before signalling EXTCON_USB */
+	ret = extcon_set_state_sync(pogo_transport->extcon, EXTCON_DOCK, false);
+	if (ret)
+		dev_err(pogo_transport->dev, "%s Failed to clear EXTCON_DOCK\n", __func__);
+	ret = extcon_set_state_sync(pogo_transport->extcon, EXTCON_USB, false);
+	if (ret)
+		dev_err(pogo_transport->dev, "%s Failed to clear EXTCON_USB\n", __func__);
+}
+
+static void ssphy_restart_control(struct pogo_transport *pogo_transport, bool enable)
+{
+	mutex_lock(&pogo_transport->reboot_lock);
+	if (pogo_transport->rebooting) {
+		dev_info(pogo_transport->dev, "ignore ssphy_restart during reboot\n");
+		mutex_unlock(&pogo_transport->reboot_lock);
+		return;
+	}
+
+	if (!pogo_transport->ssphy_restart_votable)
+		pogo_transport->ssphy_restart_votable =
+				gvotable_election_get_handle(SSPHY_RESTART_EL);
+
+	if (!pogo_transport->ssphy_restart_votable) {
+		logbuffer_log(pogo_transport->log, "SSPHY_RESTART get failed\n");
+		mutex_unlock(&pogo_transport->reboot_lock);
+		return;
+	}
+
+	logbuffer_log(pogo_transport->log, "ssphy_restart_control %u", enable);
+	gvotable_cast_long_vote(pogo_transport->ssphy_restart_votable, POGO_VOTER, enable, enable);
+	mutex_unlock(&pogo_transport->reboot_lock);
+}
+
+/*
+ * Update the polarity to EXTCON_USB_HOST. If @sync is true, use the sync version to set the
+ * property.
+ */
+static void pogo_transport_update_polarity(struct pogo_transport *pogo_transport, int polarity,
+					   bool sync)
+{
+	union extcon_property_value prop = {.intval = polarity};
+	struct max77759_plat *chip = pogo_transport->chip;
+	int ret;
+
+	if (sync)
+		ret = extcon_set_property_sync(chip->extcon, EXTCON_USB_HOST,
+					       EXTCON_PROP_USB_TYPEC_POLARITY,
+					       prop);
+	else
+		ret = extcon_set_property(chip->extcon, EXTCON_USB_HOST,
+					  EXTCON_PROP_USB_TYPEC_POLARITY,
+					  prop);
+	logbuffer_log(pogo_transport->log, "%sset polarity to %d sync %u", ret ? "failed to " : "",
+		      prop.intval, sync);
+}
+
+static void disable_and_bypass_hub(struct pogo_transport *pogo_transport)
+{
+	int ret;
+
+	if (!pogo_transport->hub_embedded)
+		return;
+
+	/* USB_MUX_HUB_SEL set to 0 to bypass the hub */
+	gpio_set_value(pogo_transport->pogo_hub_sel_gpio, 0);
+	logbuffer_log(pogo_transport->log, "POGO: hub-mux:%d",
+		      gpio_get_value(pogo_transport->pogo_hub_sel_gpio));
+	pogo_transport->pogo_hub_active = false;
+
+	/*
+	 * No further action in the callback of the votable if it is disabled. Disable it here for
+	 * the bookkeeping purpose in the dumpstate.
+	 */
+	ssphy_restart_control(pogo_transport, false);
+
+	if (pogo_transport->hub_ldo && regulator_is_enabled(pogo_transport->hub_ldo) > 0) {
+		ret = regulator_disable(pogo_transport->hub_ldo);
+		if (ret)
+			logbuffer_log(pogo_transport->log, "Failed to disable hub_ldo %d", ret);
+	}
+}
+
+static void switch_to_usbc_locked(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+	int ret;
+
+	if (pogo_transport->pogo_usb_active) {
+		ret = extcon_set_state_sync(chip->extcon, EXTCON_USB_HOST, 0);
+		logbuffer_log(pogo_transport->log, "%s: %s turning off host for Pogo", __func__,
+			      ret < 0 ? "Failed" : "Succeeded");
+		pogo_transport->pogo_usb_active = false;
+	}
+
+	disable_and_bypass_hub(pogo_transport);
+
+	ret = pinctrl_select_state(pogo_transport->pinctrl, pogo_transport->susp_usb_state);
+	if (ret)
+		dev_err(pogo_transport->dev, "failed to select suspend in usb state ret:%d\n", ret);
+
+	gpio_set_value(pogo_transport->pogo_data_mux_gpio, 0);
+	logbuffer_log(pogo_transport->log, "POGO: data-mux:%d",
+		      gpio_get_value(pogo_transport->pogo_data_mux_gpio));
+	data_alt_path_active(chip, false);
+
+	/*
+	 * Calling extcon_set_state_sync to turn off the host resets the orientation of USB-C and
+	 * the USB phy was also reset to the default value CC1.
+	 * Update the orientation for superspeed phy if USB-C is connected and CC2 is active.
+	 */
+	if (pogo_transport->polarity == TYPEC_POLARITY_CC2)
+		pogo_transport_update_polarity(pogo_transport, TYPEC_POLARITY_CC2, false);
+
+	enable_data_path_locked(chip);
+	/* pogo_transport->pogo_usb_active updated. Delaying till usb-c is activated. */
+	kobject_uevent(&pogo_transport->dev->kobj, KOBJ_CHANGE);
+}
+
+static void switch_to_pogo_locked(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+	int ret;
+
+	data_alt_path_active(chip, true);
+	if (chip->data_active) {
+		ret = extcon_set_state_sync(chip->extcon, chip->active_data_role == TYPEC_HOST ?
+					    EXTCON_USB_HOST : EXTCON_USB, 0);
+
+		logbuffer_log(pogo_transport->log, "%s turning off %s", ret < 0 ?
+			      "Failed" : "Succeeded", chip->active_data_role == TYPEC_HOST ?
+			      "Host" : "Device");
+		chip->data_active = false;
+	}
+
+	disable_and_bypass_hub(pogo_transport);
+
+	ret = pinctrl_select_state(pogo_transport->pinctrl, pogo_transport->susp_pogo_state);
+	if (ret)
+		dev_err(pogo_transport->dev, "failed to select suspend in pogo state ret:%d\n",
+			ret);
+
+	gpio_set_value(pogo_transport->pogo_data_mux_gpio, 1);
+	logbuffer_log(pogo_transport->log, "POGO: data-mux:%d",
+		      gpio_get_value(pogo_transport->pogo_data_mux_gpio));
+	ret = extcon_set_state_sync(chip->extcon, EXTCON_USB_HOST, 1);
+	logbuffer_log(pogo_transport->log, "%s: %s turning on host for Pogo", __func__, ret < 0 ?
+		      "Failed" : "Succeeded");
+	pogo_transport->pogo_usb_active = true;
+	/* pogo_transport->pogo_usb_active updated */
+	kobject_uevent(&pogo_transport->dev->kobj, KOBJ_CHANGE);
+}
+
+static void switch_to_hub_locked(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+	int ret;
+
+	/*
+	 * TODO: set alt_path_active; re-design this function for
+	 * 1. usb-c only (hub disabled)
+	 * 2. pogo only (hub disabled)
+	 * 3. hub enabled for both usb-c host and pogo host
+	 */
+	data_alt_path_active(chip, true);
+
+	/* if usb-c is active, disable it */
+	if (chip->data_active) {
+		ret = extcon_set_state_sync(chip->extcon, chip->active_data_role == TYPEC_HOST ?
+					    EXTCON_USB_HOST : EXTCON_USB, 0);
+
+		logbuffer_log(pogo_transport->log, "%s turning off %s", ret < 0 ?
+			      "Failed" : "Succeeded", chip->active_data_role == TYPEC_HOST ?
+			      "Host" : "Device");
+		chip->data_active = false;
+	}
+
+	/* if pogo-usb is active, disable it */
+	if (pogo_transport->pogo_usb_active) {
+		ret = extcon_set_state_sync(chip->extcon, EXTCON_USB_HOST, 0);
+		logbuffer_log(pogo_transport->log, "%s: %s turning off host for Pogo", __func__,
+			      ret < 0 ? "Failed" : "Succeeded");
+		/*
+		 * Skipping KOBJ_CHANGE here as it's a transient state. Should be changed if the
+		 * function logic changes to having branches to exit the function before
+		 * pogo_usb_active to true.
+		 */
+		pogo_transport->pogo_usb_active = false;
+	}
+
+	if (pogo_transport->hub_ldo) {
+		ret = regulator_enable(pogo_transport->hub_ldo);
+		if (ret)
+			logbuffer_log(pogo_transport->log, "%s: Failed to enable hub_ldo %d",
+				      __func__, ret);
+	}
+
+	ret = pinctrl_select_state(pogo_transport->pinctrl, pogo_transport->hub_state);
+	if (ret)
+		dev_err(pogo_transport->dev, "failed to select hub state ret:%d\n", ret);
+
+	/* USB_MUX_POGO_SEL set to 0 to direct usb-c to AP or hub */
+	gpio_set_value(pogo_transport->pogo_data_mux_gpio, 0);
+
+	/* USB_MUX_HUB_SEL set to 1 to switch the path to hub */
+	gpio_set_value(pogo_transport->pogo_hub_sel_gpio, 1);
+	logbuffer_log(pogo_transport->log, "POGO: data-mux:%d hub-mux:%d",
+		      gpio_get_value(pogo_transport->pogo_data_mux_gpio),
+		      gpio_get_value(pogo_transport->pogo_hub_sel_gpio));
+
+	/* wait for the host mode to be turned off completely */
+	mdelay(60);
+
+	/*
+	 * The polarity was reset to 0 when Host Mode was disabled for USB-C or POGO. If current
+	 * polarity is CC2, update it to ssphy before enabling the Host Mode for hub.
+	 */
+	if (pogo_transport->polarity == TYPEC_POLARITY_CC2)
+		pogo_transport_update_polarity(pogo_transport, pogo_transport->polarity, false);
+
+	ret = extcon_set_state_sync(chip->extcon, EXTCON_USB_HOST, 1);
+	logbuffer_log(pogo_transport->log, "%s: %s turning on host for hub", __func__, ret < 0 ?
+		      "Failed" : "Succeeded");
+
+	pogo_transport->pogo_usb_active = true;
+	pogo_transport->pogo_hub_active = true;
+	/* pogo_transport->pogo_usb_active updated.*/
+	kobject_uevent(&pogo_transport->dev->kobj, KOBJ_CHANGE);
+}
+
+static void update_pogo_transport(struct pogo_transport *pogo_transport,
+				  enum pogo_event_type event_type)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+	int ret;
+	union power_supply_propval voltage_now = {0};
+	bool docked = !gpio_get_value(pogo_transport->pogo_gpio);
+	bool acc_detected = gpio_get_value(pogo_transport->pogo_acc_gpio);
+
+	ret = power_supply_get_property(pogo_transport->pogo_psy, POWER_SUPPLY_PROP_VOLTAGE_NOW,
+					&voltage_now);
+	if (ret) {
+		dev_err(pogo_transport->dev, "%s voltage now read err: %d\n", __func__, ret);
+		if (ret == -EAGAIN)
+			pogo_transport_event(pogo_transport, EVENT_RETRY_READ_VOLTAGE,
+					     POGO_PSY_NRDY_RETRY_MS);
+		goto free;
+	}
+
+	if (event_type == EVENT_DOCKING || event_type == EVENT_RETRY_READ_VOLTAGE) {
+		if (docked) {
+			if (pogo_transport->disable_voltage_detection ||
+			    voltage_now.intval >= POGO_USB_CAPABLE_THRESHOLD_UV) {
+				pogo_transport->pogo_usb_capable = true;
+				update_extcon_dev(pogo_transport, true, true);
+			} else {
+				/* retry every 50ms * 10 times */
+				if (pogo_transport->retry_count < POGO_USB_RETRY_COUNT) {
+					pogo_transport->retry_count++;
+					pogo_transport_event(pogo_transport,
+							     EVENT_RETRY_READ_VOLTAGE,
+							     POGO_USB_RETRY_INTEREVAL_MS);
+				} else {
+					pogo_transport->pogo_usb_capable = false;
+					update_extcon_dev(pogo_transport, true, false);
+				}
+				goto free;
+			}
+		} else {
+			/* Clear retry count when un-docked */
+			pogo_transport->retry_count = 0;
+			pogo_transport->pogo_usb_capable = false;
+			update_extcon_dev(pogo_transport, false, false);
+		}
+	}
+
+	mutex_lock(&chip->data_path_lock);
+
+	/* Special case for force_usb: ignore everything */
+	if (modparam_force_usb)
+		goto exit;
+
+	/*
+	 * Special case for force_pogo: switch to pogo if available; switch to usbc when undocking.
+	 */
+	if (pogo_transport->force_pogo) {
+		if (pogo_transport->pogo_usb_capable && !pogo_transport->pogo_usb_active)
+			switch_to_pogo_locked(pogo_transport);
+		else if (!pogo_transport->pogo_usb_capable && pogo_transport->pogo_usb_active)
+			switch_to_usbc_locked(pogo_transport);
+		goto exit;
+	}
+
+	if (pogo_transport->mock_hid_connected) {
+		switch (event_type) {
+		case EVENT_ENABLE_HUB:
+		case EVENT_DISABLE_HUB:
+		case EVENT_FORCE_ACC_CONNECT:
+		case EVENT_HALL_SENSOR_ACC_UNDOCKED:
+			break;
+		default:
+			logbuffer_log(pogo_transport->log, "%s: skipping mock_hid_connected set",
+				      __func__);
+			goto exit;
+		}
+	}
+
+	switch (event_type) {
+	case EVENT_DOCKING:
+	case EVENT_RETRY_READ_VOLTAGE:
+		if (pogo_transport->pogo_usb_capable && !pogo_transport->pogo_usb_active) {
+			/*
+			 * Pogo treated with same priority as USB-C, hence skip enabling
+			 * pogo usb as USB-C is active.
+			 */
+			if (chip->data_active && pogo_transport->equal_priority) {
+				dev_info(pogo_transport->dev,
+					 "usb active, skipping enable pogo usb\n");
+				goto exit;
+			}
+			switch_to_pogo_locked(pogo_transport);
+		} else if (!pogo_transport->pogo_usb_capable && pogo_transport->pogo_usb_active) {
+			if (pogo_transport->pogo_hub_active && pogo_transport->force_hub_enabled) {
+				pogo_transport->pogo_usb_capable = true;
+				logbuffer_log(pogo_transport->log, "%s: keep enabling the hub",
+					      __func__);
+			} else {
+				switch_to_usbc_locked(pogo_transport);
+			}
+		}
+		break;
+	case EVENT_MOVE_DATA_TO_USB:
+		if (pogo_transport->pogo_usb_active)
+			switch_to_usbc_locked(pogo_transport);
+		break;
+	case EVENT_MOVE_DATA_TO_POGO:
+		/* Currently this event is bundled to force_pogo. This case is unreachable. */
+		break;
+	case EVENT_DATA_ACTIVE_CHANGED:
+		/* Do nothing if USB-C data becomes active or hub is enabled. */
+		if ((chip->data_active && pogo_transport->equal_priority) ||
+		    pogo_transport->pogo_hub_active)
+			break;
+
+		/* Switch to POGO if POGO path is available. */
+		if (pogo_transport->pogo_usb_capable && !pogo_transport->pogo_usb_active)
+			switch_to_pogo_locked(pogo_transport);
+		break;
+	case EVENT_ENABLE_HUB:
+		pogo_transport->pogo_usb_capable = true;
+		switch_to_hub_locked(pogo_transport);
+		break;
+	case EVENT_DISABLE_HUB:
+		if (pogo_transport->pogo_usb_capable)
+			switch_to_pogo_locked(pogo_transport);
+		else
+			switch_to_usbc_locked(pogo_transport);
+		break;
+	case EVENT_HALL_SENSOR_ACC_DETECTED:
+		/* Disable OVP to prevent the voltage going through POGO_VIN */
+		if (pogo_transport->pogo_ovp_en_gpio >= 0)
+			gpio_set_value_cansleep(pogo_transport->pogo_ovp_en_gpio,
+						!pogo_transport->pogo_ovp_en_active_state);
+
+		if (pogo_transport->acc_detect_ldo &&
+		    pogo_transport->accessory_detection_enabled == ENABLED) {
+			ret = regulator_enable(pogo_transport->acc_detect_ldo);
+			if (ret)
+				logbuffer_log(pogo_transport->log, "%s: Failed to enable acc_detect %d",
+					      __func__, ret);
+		} else if (pogo_transport->accessory_detection_enabled == HALL_ONLY) {
+			logbuffer_log(pogo_transport->log,
+				      "%s: Skip enabling comparator logic, enable vout", __func__);
+			if (pogo_transport->pogo_irq_enabled) {
+				disable_irq_nosync(pogo_transport->pogo_irq);
+				pogo_transport->pogo_irq_enabled = false;
+			}
+			ret = gvotable_cast_long_vote(pogo_transport->charger_mode_votable,
+						      POGO_VOTER, GBMS_POGO_VOUT, 1);
+			if (ret)
+				logbuffer_log(pogo_transport->log,
+					      "%s: Failed to vote VOUT, ret %d", __func__, ret);
+			switch_to_pogo_locked(pogo_transport);
+			pogo_transport->pogo_usb_capable = true;
+		}
+		break;
+	case EVENT_HALL_SENSOR_ACC_UNDOCKED:
+		pogo_transport->mock_hid_connected = 0;
+		ret = gvotable_cast_long_vote(pogo_transport->charger_mode_votable, POGO_VOTER,
+					      GBMS_POGO_VOUT, 0);
+		if (ret)
+			logbuffer_log(pogo_transport->log, "%s: Failed to unvote VOUT, ret %d",
+				      __func__, ret);
+
+		if (pogo_transport->acc_detect_ldo &&
+		    regulator_is_enabled(pogo_transport->acc_detect_ldo)) {
+			ret = regulator_disable(pogo_transport->acc_detect_ldo);
+			if (ret)
+				logbuffer_log(pogo_transport->log, "%s: Failed to disable acc_detect %d",
+					      __func__, ret);
+		}
+
+		if (!pogo_transport->pogo_irq_enabled) {
+			enable_irq(pogo_transport->pogo_irq);
+			pogo_transport->pogo_irq_enabled = true;
+		}
+
+		if (!pogo_transport->acc_irq_enabled) {
+			enable_irq(pogo_transport->pogo_acc_irq);
+			pogo_transport->acc_irq_enabled = true;
+		}
+
+		if (pogo_transport->pogo_hub_active && pogo_transport->force_hub_enabled) {
+			logbuffer_log(pogo_transport->log, "%s: keep enabling the hub", __func__);
+		} else {
+			switch_to_usbc_locked(pogo_transport);
+			pogo_transport->pogo_usb_capable = false;
+		}
+		break;
+	case EVENT_POGO_ACC_DEBOUNCED:
+		logbuffer_log(pogo_transport->log, "%s: acc detect debounce %s", __func__,
+			      acc_detected ? "success, enabling pogo_vout" : "fail");
+		/* Do nothing if debounce fails */
+		if (!acc_detected)
+			break;
+
+		if (pogo_transport->acc_irq_enabled) {
+			disable_irq(pogo_transport->pogo_acc_irq);
+			pogo_transport->acc_irq_enabled = false;
+		}
+
+		ret = gvotable_cast_long_vote(pogo_transport->charger_mode_votable, POGO_VOTER,
+					      GBMS_POGO_VOUT, 1);
+		if (ret)
+			logbuffer_log(pogo_transport->log, "%s: Failed to vote VOUT, ret %d",
+				      __func__, ret);
+		break;
+	case EVENT_POGO_ACC_CONNECTED:
+		/*
+		 * Enable pogo only if the acc regulator was enabled. If the regulator has been
+		 * disabled, it means EVENT_HALL_SENSOR_ACC_UNDOCKED was triggered before this
+		 * event.
+		 */
+		if (pogo_transport->acc_detect_ldo &&
+		    regulator_is_enabled(pogo_transport->acc_detect_ldo)) {
+			ret = regulator_disable(pogo_transport->acc_detect_ldo);
+			if (ret)
+				logbuffer_log(pogo_transport->log, "%s: Failed to disable acc_detect_ldo %d",
+					      __func__, ret);
+		}
+		if (pogo_transport->accessory_detection_enabled) {
+			if (!pogo_transport->mfg_acc_test) {
+				switch_to_pogo_locked(pogo_transport);
+				pogo_transport->pogo_usb_capable = true;
+			}
+		}
+		break;
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+	case EVENT_FORCE_ACC_CONNECT:
+		if (pogo_transport->pogo_irq_enabled) {
+			disable_irq(pogo_transport->pogo_irq);
+			pogo_transport->pogo_irq_enabled = false;
+		}
+
+		if (pogo_transport->acc_irq_enabled) {
+			disable_irq(pogo_transport->pogo_acc_irq);
+			pogo_transport->acc_irq_enabled = false;
+		}
+
+		if (pogo_transport->pogo_ovp_en_gpio >= 0)
+			gpio_set_value_cansleep(pogo_transport->pogo_ovp_en_gpio,
+						!pogo_transport->pogo_ovp_en_active_state);
+
+		/* Disable, just in case when docked, if acc_detect_ldo was on */
+		if (pogo_transport->acc_detect_ldo &&
+		    regulator_is_enabled(pogo_transport->acc_detect_ldo)) {
+			ret = regulator_disable(pogo_transport->acc_detect_ldo);
+			if (ret)
+				logbuffer_log(pogo_transport->log,
+					      "%s: Failed to disable acc_detect %d", __func__, ret);
+		}
+
+		ret = gvotable_cast_long_vote(pogo_transport->charger_mode_votable, POGO_VOTER,
+					      GBMS_POGO_VOUT, 1);
+		if (ret)
+			logbuffer_log(pogo_transport->log, "%s: Failed to vote VOUT, ret %d",
+				      __func__, ret);
+
+		switch_to_pogo_locked(pogo_transport);
+		pogo_transport->pogo_usb_capable = true;
+		break;
+#endif
+	case EVENT_ORIENTATION_CHANGED:
+		/* Update the orientation and restart the ssphy if hub is enabled */
+		if (pogo_transport->pogo_hub_active) {
+			pogo_transport_update_polarity(pogo_transport, pogo_transport->polarity,
+						       true);
+			ssphy_restart_control(pogo_transport, true);
+		}
+		break;
+	default:
+		break;
+	}
+
+exit:
+	mutex_unlock(&chip->data_path_lock);
+	kobject_uevent(&pogo_transport->dev->kobj, KOBJ_CHANGE);
+free:
+	logbuffer_logk(pogo_transport->log, LOGLEVEL_INFO,
+		       "ev:%u dock:%u f_u:%u f_p:%u f_h:%u p_u:%u p_act:%u hub:%u d_act:%u mock:%u v:%d",
+		       event_type,
+		       docked ? 1 : 0,
+		       modparam_force_usb ? 1 : 0,
+		       pogo_transport->force_pogo ? 1 : 0,
+		       pogo_transport->force_hub_enabled ? 1 : 0,
+		       pogo_transport->pogo_usb_capable ? 1 : 0,
+		       pogo_transport->pogo_usb_active ? 1 : 0,
+		       pogo_transport->pogo_hub_active ? 1 : 0,
+		       chip->data_active ? 1 : 0,
+		       pogo_transport->mock_hid_connected ? 1 : 0,
+		       voltage_now.intval);
+}
+
+static void process_generic_event(struct kthread_work *work)
+{
+	struct pogo_event *event =
+		container_of(container_of(work, struct kthread_delayed_work, work),
+			     struct pogo_event, work);
+	struct pogo_transport *pogo_transport = event->pogo_transport;
+
+	update_pogo_transport(pogo_transport, event->event_type);
+
+	devm_kfree(pogo_transport->dev, event);
+}
+
+static void process_debounce_event(struct kthread_work *work)
+{
+	struct pogo_transport *pogo_transport =
+		container_of(container_of(work, struct kthread_delayed_work, work),
+			     struct pogo_transport, pogo_accessory_debounce_work);
+
+	update_pogo_transport(pogo_transport, EVENT_POGO_ACC_DEBOUNCED);
+}
+
+static void pogo_transport_event(struct pogo_transport *pogo_transport,
+				 enum pogo_event_type event_type, int delay_ms)
+{
+	struct pogo_event *evt;
+
+	if (event_type == EVENT_POGO_ACC_DEBOUNCED) {
+		kthread_mod_delayed_work(pogo_transport->wq,
+					 &pogo_transport->pogo_accessory_debounce_work,
+					 msecs_to_jiffies(delay_ms));
+		return;
+	}
+
+	evt = devm_kzalloc(pogo_transport->dev, sizeof(*evt), GFP_KERNEL);
+	if (!evt) {
+		logbuffer_log(pogo_transport->log, "POGO: Dropping event");
+		return;
+	}
+	kthread_init_delayed_work(&evt->work, process_generic_event);
+	evt->pogo_transport = pogo_transport;
+	evt->event_type = event_type;
+	kthread_mod_delayed_work(pogo_transport->wq, &evt->work, msecs_to_jiffies(delay_ms));
+}
+
+/*-------------------------------------------------------------------------*/
+/* State Machine Functions                                                 */
+/*-------------------------------------------------------------------------*/
+
+/*
+ * State transition
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_set_state(struct pogo_transport *pogo_transport, enum pogo_state state,
+				     unsigned int delay_ms)
+{
+	if (delay_ms) {
+		logbuffer_log(pogo_transport->log, "pending state change %s -> %s @ %u ms",
+			      pogo_states[pogo_transport->state], pogo_states[state], delay_ms);
+		pogo_transport->delayed_state = state;
+		kthread_mod_delayed_work(pogo_transport->wq, &pogo_transport->state_machine,
+					 msecs_to_jiffies(delay_ms));
+		pogo_transport->delayed_runtime = jiffies + msecs_to_jiffies(delay_ms);
+		pogo_transport->delay_ms = delay_ms;
+	} else {
+		logbuffer_logk(pogo_transport->log, LOGLEVEL_INFO, "state change %s -> %s [%s]",
+			       pogo_states[pogo_transport->state], pogo_states[state],
+			       pogo_transport->lc ? "lc" : "");
+		pogo_transport->delayed_state = INVALID_STATE;
+		pogo_transport->prev_state = pogo_transport->state;
+		pogo_transport->state = state;
+
+		if (!pogo_transport->state_machine_running)
+			kthread_mod_delayed_work(pogo_transport->wq, &pogo_transport->state_machine,
+						 0);
+	}
+}
+
+/*
+ * Accessory Detection regulator control
+ *  - Return -ENXIO if Accessory Detection regulator does not exist
+ *  - Return 0 if @enable is the same as the status of the regulator
+ *  - Otherwise, return the return value from regulator_enable or regulator_disable
+ */
+static int pogo_transport_acc_regulator(struct pogo_transport *pogo_transport, bool enable)
+{
+	int ret;
+
+	if (!pogo_transport->acc_detect_ldo)
+		return -ENXIO;
+
+	if (regulator_is_enabled(pogo_transport->acc_detect_ldo) == enable)
+		return 0;
+
+	if (enable)
+		ret = regulator_enable(pogo_transport->acc_detect_ldo);
+	else
+		ret = regulator_disable(pogo_transport->acc_detect_ldo);
+
+	return ret;
+}
+
+/*
+ * Call this function to:
+ *  - Disable POGO Vout by voting 0 to charger_mode_votable
+ *  - Disable the regulator for Accessory Detection Logic
+ *  - Disable Accessory Detection IRQ
+ *  - Enable POGO Voltage Detection IRQ
+ *
+ *  This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_reset_acc_detection(struct pogo_transport *pogo_transport)
+{
+	int ret;
+
+	ret = gvotable_cast_long_vote(pogo_transport->charger_mode_votable, POGO_VOTER,
+				      GBMS_POGO_VOUT, 0);
+	if (ret)
+		logbuffer_log(pogo_transport->log, "%s: Failed to unvote VOUT, ret %d", __func__,
+			      ret);
+
+	ret = pogo_transport_acc_regulator(pogo_transport, false);
+	if (ret)
+		logbuffer_log(pogo_transport->log, "%s: Failed to disable acc_detect %d", __func__,
+			      ret);
+
+	if (pogo_transport->acc_irq_enabled) {
+		disable_irq(pogo_transport->pogo_acc_irq);
+		pogo_transport->acc_irq_enabled = false;
+	}
+
+	if (!pogo_transport->pogo_irq_enabled) {
+		enable_irq(pogo_transport->pogo_irq);
+		pogo_transport->pogo_irq_enabled = true;
+	}
+}
+
+/*
+ * This function implements the actions unon entering each state.
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_run_state_machine(struct pogo_transport *pogo_transport)
+{
+	bool acc_detected = gpio_get_value(pogo_transport->pogo_acc_gpio);
+	bool docked = !gpio_get_value(pogo_transport->pogo_gpio);
+	struct max77759_plat *chip = pogo_transport->chip;
+	int ret;
+
+	switch (pogo_transport->state) {
+	case STANDBY:
+		/* DATA_STATUS_ENABLED */
+		break;
+	case DOCKING_DEBOUNCED:
+		if (docked) {
+			switch_to_hub_locked(pogo_transport);
+			pogo_transport_set_state(pogo_transport, DOCK_HUB, 0);
+		} else {
+			pogo_transport_set_state(pogo_transport, STANDBY, 0);
+		}
+		break;
+	case DOCK_HUB:
+		/* clear Dock dock detected notification */
+		/* Clear accessory detected notification */
+		/* DATA_STATUS_DISABLED_DEVICE_DOCK */
+		update_extcon_dev(pogo_transport, true, true);
+		break;
+	case DOCK_AUDIO_HUB:
+		update_extcon_dev(pogo_transport, true, true);
+		break;
+	case DEVICE_DOCKING_DEBOUNCED:
+		if (docked) {
+			switch_to_hub_locked(pogo_transport);
+			/* switch_to_hub_locked cleared data_active, set it here */
+			chip->data_active = true;
+			pogo_transport_set_state(pogo_transport, DOCK_DEVICE_HUB, 0);
+		} else {
+			pogo_transport_set_state(pogo_transport, DEVICE_DIRECT, 0);
+		}
+		break;
+	case DOCK_DEVICE_HUB:
+		update_extcon_dev(pogo_transport, true, true);
+		/* DATA_STATUS_DISABLED_DEVICE_DOCK */
+		break;
+	case DEVICE_HUB_DOCKING_DEBOUNCED:
+		if (docked) {
+			pogo_transport_set_state(pogo_transport, DOCK_DEVICE_HUB, 0);
+		} else {
+			pogo_transport_set_state(pogo_transport, DEVICE_HUB, 0);
+		}
+		break;
+	case AUDIO_DIRECT_DOCKING_DEBOUNCED:
+		if (docked) {
+			pogo_transport_set_state(pogo_transport, AUDIO_DIRECT_DOCK_OFFLINE, 0);
+		} else {
+			pogo_transport_set_state(pogo_transport, AUDIO_DIRECT, 0);
+		}
+		break;
+	case AUDIO_DIRECT_DOCK_OFFLINE:
+		/* Push dock detected notification */
+		update_extcon_dev(pogo_transport, true, true);
+		break;
+	case AUDIO_HUB_DOCKING_DEBOUNCED:
+		if (docked) {
+			pogo_transport_set_state(pogo_transport, DOCK_AUDIO_HUB, 0);
+		} else {
+			pogo_transport_set_state(pogo_transport, AUDIO_HUB, 0);
+		}
+		break;
+	case HOST_DIRECT:
+		/* DATA_STATUS_ENABLED */
+		/* Clear Pogo accessory Detected */
+		/* Clear USB accessory detected notification */
+		break;
+	case HOST_DIRECT_DOCKING_DEBOUNCED:
+		if (docked) {
+			if (pogo_transport->force_pogo) {
+				switch_to_hub_locked(pogo_transport);
+				/* switch_to_hub_locked cleared data_active, set it here */
+				chip->data_active = true;
+				pogo_transport_set_state(pogo_transport, DOCK_HUB_HOST_OFFLINE, 0);
+			} else {
+				pogo_transport_set_state(pogo_transport, HOST_DIRECT_DOCK_OFFLINE,
+							 0);
+			}
+		} else {
+			pogo_transport_set_state(pogo_transport, HOST_DIRECT, 0);
+		}
+		break;
+	case HOST_DIRECT_DOCK_OFFLINE:
+		/* Push Dock dock detected notification */
+		update_extcon_dev(pogo_transport, true, true);
+		break;
+	case DOCK_HUB_HOST_OFFLINE:
+		/* Push accessory detected notification */
+		update_extcon_dev(pogo_transport, true, true);
+		break;
+	case STANDBY_ACC_DEBOUNCED:
+	case DEVICE_DIRECT_ACC_DEBOUNCED:
+	case DEVICE_HUB_ACC_DEBOUNCED:
+	case AUDIO_DIRECT_ACC_DEBOUNCED:
+	case AUDIO_HUB_ACC_DEBOUNCED:
+	case HOST_DIRECT_ACC_DEBOUNCED:
+		/* debounce fail; leave the IRQ and regulator enabled and do nothing */
+		if (!acc_detected)
+			break;
+
+		/*
+		 * Disable the IRQ to ignore the noise after POGO Vout is enabled. It will be
+		 * re-enabled when HES reports the attach event.
+		 */
+		if (pogo_transport->acc_irq_enabled) {
+			disable_irq(pogo_transport->pogo_acc_irq);
+			pogo_transport->acc_irq_enabled = false;
+		}
+
+		/* TODO: queue work for gvotable cast vote if it takes too much time */
+		ret = gvotable_cast_long_vote(pogo_transport->charger_mode_votable, POGO_VOTER,
+					      GBMS_POGO_VOUT, 1);
+		if (ret)
+			logbuffer_log(pogo_transport->log, "%s: Failed to vote VOUT, ret %d",
+				      __func__, ret);
+		break;
+	case ACC_DIRECT:
+		/* Clear Pogo accessory Detected */
+		/* Clear USB accessory detected notification */
+		break;
+	case ACC_DEVICE_HUB:
+		/* DATA_STATUS_DISABLED_DEVICE_DOCK */
+		break;
+	case HOST_DIRECT_ACC_OFFLINE:
+		/* Push Pogo accessory Detected */
+		break;
+	default:
+		break;
+	}
+}
+
+/* Main loop of the State Machine */
+static void pogo_transport_state_machine_work(struct kthread_work *work)
+{
+	struct pogo_transport *pogo_transport =
+			container_of(container_of(work, struct kthread_delayed_work, work),
+			     struct pogo_transport, state_machine);
+	struct max77759_plat *chip = pogo_transport->chip;
+	enum pogo_state prev_state;
+
+	mutex_lock(&chip->data_path_lock);
+	pogo_transport->state_machine_running = true;
+
+	if (pogo_transport->delayed_state) {
+		logbuffer_logk(pogo_transport->log, LOGLEVEL_INFO,
+			       "state change %s -> %s [delayed %ld ms] [%s]",
+			       pogo_states[pogo_transport->state],
+			       pogo_states[pogo_transport->delayed_state],
+			       pogo_transport->delay_ms,
+			       pogo_transport->lc ? "lc" : "");
+		pogo_transport->prev_state = pogo_transport->state;
+		pogo_transport->state = pogo_transport->delayed_state;
+		pogo_transport->delayed_state = INVALID_STATE;
+	}
+
+	do {
+		prev_state = pogo_transport->state;
+		pogo_transport_run_state_machine(pogo_transport);
+	} while (pogo_transport->state != prev_state && !pogo_transport->delayed_state);
+
+	pogo_transport->state_machine_running = false;
+	mutex_unlock(&chip->data_path_lock);
+}
+
+/*
+ * Called when POGO Voltage Detection IRQ is active
+ *  - Triggered from event: EVENT_POGO_IRQ
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_pogo_irq_active(struct pogo_transport *pogo_transport)
+{
+	switch (pogo_transport->state) {
+	case STANDBY:
+	case STANDBY_ACC_DEBOUNCED:
+		pogo_transport_set_state(pogo_transport, DOCKING_DEBOUNCED, POGO_PSY_DEBOUNCE_MS);
+		break;
+	case DEVICE_HUB:
+	case DEVICE_HUB_ACC_DEBOUNCED:
+		pogo_transport_set_state(pogo_transport, DEVICE_HUB_DOCKING_DEBOUNCED,
+					 POGO_PSY_DEBOUNCE_MS);
+		break;
+	case DEVICE_DIRECT:
+	case DEVICE_DIRECT_ACC_DEBOUNCED:
+		pogo_transport_set_state(pogo_transport, DEVICE_DOCKING_DEBOUNCED,
+					 POGO_PSY_DEBOUNCE_MS);
+		break;
+	case AUDIO_DIRECT:
+	case AUDIO_DIRECT_ACC_DEBOUNCED:
+		pogo_transport_set_state(pogo_transport, AUDIO_DIRECT_DOCKING_DEBOUNCED,
+					 POGO_PSY_DEBOUNCE_MS);
+		break;
+	case AUDIO_HUB:
+	case AUDIO_HUB_ACC_DEBOUNCED:
+		pogo_transport_set_state(pogo_transport, AUDIO_HUB_DOCKING_DEBOUNCED,
+					 POGO_PSY_DEBOUNCE_MS);
+		break;
+	case HOST_DIRECT:
+	case HOST_DIRECT_ACC_DEBOUNCED:
+		pogo_transport_set_state(pogo_transport, HOST_DIRECT_DOCKING_DEBOUNCED,
+					 POGO_PSY_DEBOUNCE_MS);
+		break;
+	default:
+		break;
+	}
+}
+
+/*
+ * Called when POGO Voltage Detection IRQ is standby
+ *  - Triggered from event: EVENT_POGO_IRQ
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_pogo_irq_standby(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+
+	/* Pogo irq in standy implies undocked. Signal userspace before altering data path. */
+	update_extcon_dev(pogo_transport, false, false);
+	switch (pogo_transport->state) {
+	case STANDBY:
+		pogo_transport_set_state(pogo_transport, STANDBY, 0);
+		break;
+	case DOCK_HUB:
+		switch_to_usbc_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, STANDBY, 0);
+		break;
+	case DOCK_DEVICE_HUB:
+		pogo_transport_set_state(pogo_transport, DEVICE_HUB, 0);
+		break;
+	case DOCK_AUDIO_HUB:
+		pogo_transport_set_state(pogo_transport, AUDIO_HUB, 0);
+		break;
+	case AUDIO_DIRECT_DOCK_OFFLINE:
+		pogo_transport_set_state(pogo_transport, AUDIO_DIRECT, 0);
+		break;
+	case HOST_DIRECT_DOCK_OFFLINE:
+		pogo_transport_set_state(pogo_transport, HOST_DIRECT, 0);
+		break;
+	case DOCK_HUB_HOST_OFFLINE:
+		/* Clear data_active so that Type-C stack is able to enable the USB data later */
+		chip->data_active = false;
+		switch_to_usbc_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, HOST_DIRECT, 0);
+		break;
+	default:
+		break;
+	}
+}
+
+/*
+ * Called when USB-C port enters Host Mode
+ *  - Triggered from event: EVENT_USBC_DATA_CHANGE
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_usbc_host_on(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+
+	switch (pogo_transport->state) {
+	case STANDBY:
+		pogo_transport_set_state(pogo_transport, DEVICE_DIRECT, 0);
+		break;
+	case DOCK_HUB:
+		/* Set data_active since USB-C device is attached */
+		chip->data_active = true;
+		pogo_transport_set_state(pogo_transport, DOCK_DEVICE_HUB, 0);
+		break;
+	case ACC_DIRECT:
+		switch_to_hub_locked(pogo_transport);
+		/* Set data_active since USB-C device is attached */
+		chip->data_active = true;
+		pogo_transport_set_state(pogo_transport, ACC_DEVICE_HUB, 0);
+		break;
+	case ACC_HUB:
+		/* Set data_active since USB-C device is attached */
+		chip->data_active = true;
+		pogo_transport_set_state(pogo_transport, ACC_DEVICE_HUB, 0);
+		break;
+	case LC:
+		/* Set data_active since USB-C device is attached */
+		chip->data_active = true;
+		pogo_transport_set_state(pogo_transport, LC_DEVICE_DIRECT, 0);
+		break;
+	default:
+		break;
+	}
+}
+
+/*
+ * Called when USB-C port leaves Host Mode
+ *  - Triggered from event: EVENT_USBC_DATA_CHANGE
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_usbc_host_off(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+	bool ss_attached = pogo_transport->ss_udev_attached;
+
+	pogo_transport->ss_udev_attached = false;
+
+	switch (pogo_transport->state) {
+	case DOCK_DEVICE_HUB:
+		/* Clear data_active since USB-C device is detached */
+		chip->data_active = false;
+		pogo_transport_set_state(pogo_transport, DOCK_HUB, 0);
+		break;
+	case DEVICE_HUB:
+		switch_to_usbc_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, STANDBY, 0);
+		break;
+	case DEVICE_DIRECT:
+	case AUDIO_DIRECT:
+		pogo_transport_set_state(pogo_transport, STANDBY, 0);
+		break;
+	case AUDIO_DIRECT_DOCK_OFFLINE:
+		switch_to_hub_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, DOCK_HUB, 0);
+		break;
+	case DOCK_AUDIO_HUB:
+		/* Clear data_active since USB-C device is detached */
+		chip->data_active = false;
+		pogo_transport_set_state(pogo_transport, DOCK_HUB, 0);
+		break;
+	case AUDIO_HUB:
+		switch_to_usbc_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, STANDBY, 0);
+		break;
+	case ACC_DEVICE_HUB:
+	case ACC_AUDIO_HUB:
+		/* b/271669059 */
+		if (ss_attached) {
+			/* USB_MUX_HUB_SEL set to 0 to bypass the hub */
+			gpio_set_value(pogo_transport->pogo_hub_sel_gpio, 0);
+			logbuffer_log(pogo_transport->log, "POGO: toggling hub-mux, hub-mux:%d",
+				      gpio_get_value(pogo_transport->pogo_hub_sel_gpio));
+			mdelay(10);
+			/* USB_MUX_HUB_SEL set to 1 to switch the path to hub */
+			gpio_set_value(pogo_transport->pogo_hub_sel_gpio, 1);
+			logbuffer_log(pogo_transport->log, "POGO: hub-mux:%d",
+				      gpio_get_value(pogo_transport->pogo_hub_sel_gpio));
+		}
+
+		/* Clear data_active since USB-C device is detached */
+		chip->data_active = false;
+		pogo_transport_set_state(pogo_transport, ACC_HUB, 0);
+		break;
+	case LC_DEVICE_DIRECT:
+	case LC_AUDIO_DIRECT:
+		/* Clear data_active since USB-C device is detached */
+		chip->data_active = false;
+		pogo_transport_set_state(pogo_transport, LC, 0);
+		break;
+	default:
+		break;
+	}
+}
+
+/*
+ * Called when USB-C port enters Device Mode
+ *  - Triggered from event: EVENT_USBC_DATA_CHANGE
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_usbc_device_on(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+
+	switch (pogo_transport->state) {
+	case STANDBY:
+		pogo_transport_set_state(pogo_transport, HOST_DIRECT, 0);
+		break;
+	case DOCK_HUB:
+		/*
+		 * Set data_active so that once USB-C cable is detached later, Type-C stack is able
+		 * to call back for the data changed event
+		 */
+		chip->data_active = true;
+		pogo_transport_set_state(pogo_transport, DOCK_HUB_HOST_OFFLINE, 0);
+		break;
+	case ACC_DIRECT:
+		/*
+		 * Set data_active so that once USB-C cable is detached later, Type-C stack is able
+		 * to call back for the data changed event
+		 */
+		chip->data_active = true;
+		pogo_transport_set_state(pogo_transport, ACC_DIRECT_HOST_OFFLINE, 0);
+		break;
+	case ACC_HUB:
+		/*
+		 * Set data_active so that once USB-C cable is detached later, Type-C stack is able
+		 * to call back for the data changed event
+		 */
+		chip->data_active = true;
+		pogo_transport_set_state(pogo_transport, ACC_HUB_HOST_OFFLINE, 0);
+		break;
+	case LC:
+		/*
+		 * Set data_active so that once USB-C cable is detached later, Type-C stack is able
+		 * to call back for the data changed event
+		 */
+		chip->data_active = true;
+		pogo_transport_set_state(pogo_transport, LC_HOST_DIRECT, 0);
+		break;
+	default:
+		break;
+	}
+}
+
+/*
+ * Called when USB-C port leaves Device Mode
+ *  - Triggered from event: EVENT_USBC_DATA_CHANGE
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_usbc_device_off(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+
+	switch (pogo_transport->state) {
+	case HOST_DIRECT:
+		pogo_transport_set_state(pogo_transport, STANDBY, 0);
+		break;
+	case HOST_DIRECT_DOCK_OFFLINE:
+		switch_to_hub_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, DOCK_HUB, 0);
+		break;
+	case DOCK_HUB_HOST_OFFLINE:
+		/*
+		 * Clear data_active so that Type-C stack is able to call back for the data changed
+		 * event
+		 */
+		chip->data_active = false;
+		pogo_transport_set_state(pogo_transport, DOCK_HUB, 0);
+		break;
+	case HOST_DIRECT_ACC_OFFLINE:
+		switch_to_pogo_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, ACC_DIRECT, 0);
+		break;
+	case ACC_DIRECT_HOST_OFFLINE:
+		/*
+		 * Clear data_active so that Type-C stack is able to call back for the data changed
+		 * event
+		 */
+		chip->data_active = false;
+		pogo_transport_set_state(pogo_transport, ACC_DIRECT, 0);
+		break;
+	case ACC_HUB_HOST_OFFLINE:
+		/*
+		 * Clear data_active so that Type-C stack is able to call back for the data changed
+		 * event
+		 */
+		chip->data_active = false;
+		pogo_transport_set_state(pogo_transport, ACC_HUB, 0);
+		break;
+	case LC_ALL_OFFLINE:
+	case LC_HOST_DIRECT:
+		/*
+		 * Clear data_active so that Type-C stack is able to call back for the data changed
+		 * event
+		 */
+		chip->data_active = false;
+		pogo_transport_set_state(pogo_transport, LC, 0);
+		break;
+	default:
+		break;
+	}
+}
+
+/*
+ * Called when device attribute "move_data_to_usb" is written to 1
+ *  - Triggered from event: EVENT_ENABLE_USB_DATA
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_enable_usb_data(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+
+	switch (pogo_transport->state) {
+	case DOCK_HUB_HOST_OFFLINE:
+		/*
+		 * Clear data_active so that Type-C stack is able to call back for the data changed
+		 * event later
+		 */
+		chip->data_active = false;
+		switch_to_usbc_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, HOST_DIRECT_DOCK_OFFLINE, 0);
+		break;
+	case ACC_DIRECT_HOST_OFFLINE:
+	case ACC_HUB_HOST_OFFLINE:
+		/*
+		 * Clear data_active so that Type-C stack is able to call back for the data changed
+		 * event later
+		 */
+		chip->data_active = false;
+		switch_to_usbc_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, HOST_DIRECT_ACC_OFFLINE, 0);
+		break;
+	default:
+		return;
+	}
+}
+
+/*
+ * Called when device attribute "force_pogo" is written to 1
+ *  - Triggered from event: EVENT_FORCE_POGO
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_force_pogo(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+
+	switch (pogo_transport->state) {
+	case HOST_DIRECT_DOCK_OFFLINE:
+		switch_to_hub_locked(pogo_transport);
+		/*
+		 * Set data_active so that once USB-C cable is detached later, Type-C stack is able
+		 * to call back for the data changed event
+		 */
+		chip->data_active = true;
+		pogo_transport_set_state(pogo_transport, DOCK_HUB_HOST_OFFLINE, 0);
+		break;
+	default:
+		return;
+	}
+}
+
+/*
+ * Call this function to:
+ *  - Disable POGO OVP
+ *  - Disable Accessory Detection IRQ
+ *  - Disable POGO Voltage Detection IRQ
+ *  - Enable POGO Vout by voting 1 to charger_mode_votable
+ *
+ *  This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_skip_acc_detection(struct pogo_transport *pogo_transport)
+{
+	int ret;
+
+	logbuffer_log(pogo_transport->log, "%s: Skip enabling comparator logic, enable vout",
+		      __func__);
+
+	/*
+	 * Disable OVP to prevent the voltage going through POGO_VIN. OVP will be re-enabled once
+	 * we vote GBMS_POGO_VIN and GBMS gets the votable result.
+	 */
+	if (pogo_transport->pogo_ovp_en_gpio >= 0)
+		gpio_set_value_cansleep(pogo_transport->pogo_ovp_en_gpio,
+					!pogo_transport->pogo_ovp_en_active_state);
+
+	if (pogo_transport->acc_irq_enabled) {
+		disable_irq(pogo_transport->pogo_acc_irq);
+		pogo_transport->acc_irq_enabled = false;
+	}
+
+	if (pogo_transport->pogo_irq_enabled) {
+		disable_irq(pogo_transport->pogo_irq);
+		pogo_transport->pogo_irq_enabled = false;
+	}
+
+	ret = gvotable_cast_long_vote(pogo_transport->charger_mode_votable,
+				      POGO_VOTER, GBMS_POGO_VOUT, 1);
+	if (ret)
+		logbuffer_log(pogo_transport->log, "%s: Failed to vote VOUT, ret %d", __func__,
+			      ret);
+}
+
+/*
+ * Called when device attribute "hall1_s" is written to non-zero
+ *  - If accessory_detection_enabled == ENABLED, it won't involve the State transition.
+ *    Enable the Accessory Detection IRQ and the regulator for the later detection process.
+ *  - If accessory_detection_enabled == HALL_ONLY, transition to related ACC states
+ *  - Triggered from event: EVENT_HES_H1S_CHANGED
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_hes_acc_detected(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+	int ret;
+
+	if (pogo_transport->accessory_detection_enabled == ENABLED) {
+		switch (pogo_transport->state) {
+		case STANDBY:
+		case DEVICE_HUB:
+		case DEVICE_DIRECT:
+		case AUDIO_DIRECT:
+		case AUDIO_HUB:
+		case HOST_DIRECT:
+			/*
+			 * Disable OVP to prevent the voltage going through POGO_VIN. OVP will be
+			 * re-enabled once we vote GBMS_POGO_VIN and GBMS gets the votable result.
+			 */
+			if (pogo_transport->pogo_ovp_en_gpio >= 0)
+				gpio_set_value_cansleep(pogo_transport->pogo_ovp_en_gpio,
+							!pogo_transport->pogo_ovp_en_active_state);
+
+			if (!pogo_transport->acc_irq_enabled) {
+				enable_irq(pogo_transport->pogo_acc_irq);
+				pogo_transport->acc_irq_enabled = true;
+			}
+
+			ret = pogo_transport_acc_regulator(pogo_transport, true);
+			if (ret)
+				logbuffer_log(pogo_transport->log, "%s: Failed to enable acc_detect %d",
+					      __func__, ret);
+			break;
+		default:
+			break;
+		}
+	} else if (pogo_transport->accessory_detection_enabled == HALL_ONLY) {
+		switch (pogo_transport->state) {
+		case STANDBY:
+			pogo_transport_skip_acc_detection(pogo_transport);
+			if (!pogo_transport->mfg_acc_test)
+				switch_to_pogo_locked(pogo_transport);
+			pogo_transport_set_state(pogo_transport, ACC_DIRECT, 0);
+			break;
+		case DEVICE_DIRECT:
+		case AUDIO_DIRECT:
+			pogo_transport_skip_acc_detection(pogo_transport);
+			switch_to_hub_locked(pogo_transport);
+			/*
+			 * switch_to_hub_locked cleared data_active. Since there is still a USB-C
+			 * accessory attached, set data_active.
+			 */
+			chip->data_active = true;
+			pogo_transport_set_state(pogo_transport, ACC_DEVICE_HUB, 0);
+			break;
+		case DEVICE_HUB:
+			pogo_transport_skip_acc_detection(pogo_transport);
+			pogo_transport_set_state(pogo_transport, ACC_DEVICE_HUB, 0);
+			break;
+		case AUDIO_HUB:
+			pogo_transport_skip_acc_detection(pogo_transport);
+			pogo_transport_set_state(pogo_transport, ACC_AUDIO_HUB, 0);
+			break;
+		case HOST_DIRECT:
+			pogo_transport_skip_acc_detection(pogo_transport);
+			if (pogo_transport->force_pogo) {
+				switch_to_pogo_locked(pogo_transport);
+				/*
+				 * Set data_active so that once USB-C cable is detached later,
+				 * Type-C stack is able to call back for the data changed event
+				 */
+				chip->data_active = true;
+				pogo_transport_set_state(pogo_transport, ACC_DIRECT_HOST_OFFLINE,
+							 0);
+			} else {
+				pogo_transport_set_state(pogo_transport, HOST_DIRECT_ACC_OFFLINE,
+							 0);
+			}
+			break;
+		default:
+			break;
+		}
+	}
+}
+
+/*
+ * Called when device attribute "hall1_s" is written to 0
+ * - Triggered from event: EVENT_HES_H1S_CHANGED
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_hes_acc_detached(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+
+	switch (pogo_transport->state) {
+	case STANDBY_ACC_DEBOUNCED:
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, STANDBY, 0);
+		break;
+	case DEVICE_DIRECT_ACC_DEBOUNCED:
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, DEVICE_DIRECT, 0);
+		break;
+	case DEVICE_HUB_ACC_DEBOUNCED:
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, DEVICE_HUB, 0);
+		break;
+	case AUDIO_DIRECT_ACC_DEBOUNCED:
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, AUDIO_DIRECT, 0);
+		break;
+	case AUDIO_HUB_ACC_DEBOUNCED:
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, AUDIO_HUB, 0);
+		break;
+	case HOST_DIRECT_ACC_DEBOUNCED:
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, HOST_DIRECT, 0);
+		break;
+	case ACC_DIRECT:
+	case ACC_HUB:
+		pogo_transport_reset_acc_detection(pogo_transport);
+		switch_to_usbc_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, STANDBY, 0);
+		break;
+	case ACC_DEVICE_HUB:
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, DEVICE_HUB, 0);
+		break;
+	case ACC_AUDIO_HUB:
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, AUDIO_HUB, 0);
+		break;
+	case HOST_DIRECT_ACC_OFFLINE:
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, HOST_DIRECT, 0);
+		break;
+	case ACC_DIRECT_HOST_OFFLINE:
+	case ACC_HUB_HOST_OFFLINE:
+		pogo_transport_reset_acc_detection(pogo_transport);
+		/* Clear data_active so that Type-C stack is able to enable the USB data later */
+		chip->data_active = false;
+		switch_to_usbc_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, HOST_DIRECT, 0);
+		break;
+	default:
+		break;
+	}
+}
+
+/*
+ * Called when Accessory Detection IRQ is active
+ *  - Triggered from event: EVENT_ACC_GPIO_ACTIVE
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_acc_debouncing(struct pogo_transport *pogo_transport)
+{
+	switch (pogo_transport->state) {
+	case STANDBY:
+	case STANDBY_ACC_DEBOUNCED:
+		pogo_transport_set_state(pogo_transport, STANDBY_ACC_DEBOUNCED,
+					 pogo_transport->pogo_acc_gpio_debounce_ms);
+		break;
+	case DEVICE_DIRECT:
+	case DEVICE_DIRECT_ACC_DEBOUNCED:
+		pogo_transport_set_state(pogo_transport, DEVICE_DIRECT_ACC_DEBOUNCED,
+					 pogo_transport->pogo_acc_gpio_debounce_ms);
+		break;
+	case DEVICE_HUB:
+	case DEVICE_HUB_ACC_DEBOUNCED:
+		pogo_transport_set_state(pogo_transport, DEVICE_HUB_ACC_DEBOUNCED,
+					 pogo_transport->pogo_acc_gpio_debounce_ms);
+		break;
+	case AUDIO_DIRECT:
+	case AUDIO_DIRECT_ACC_DEBOUNCED:
+		pogo_transport_set_state(pogo_transport, AUDIO_DIRECT_ACC_DEBOUNCED,
+					 pogo_transport->pogo_acc_gpio_debounce_ms);
+		break;
+	case AUDIO_HUB:
+	case AUDIO_HUB_ACC_DEBOUNCED:
+		pogo_transport_set_state(pogo_transport, AUDIO_HUB_ACC_DEBOUNCED,
+					 pogo_transport->pogo_acc_gpio_debounce_ms);
+		break;
+	case HOST_DIRECT:
+	case HOST_DIRECT_ACC_DEBOUNCED:
+		pogo_transport_set_state(pogo_transport, HOST_DIRECT_ACC_DEBOUNCED,
+					 pogo_transport->pogo_acc_gpio_debounce_ms);
+		break;
+	default:
+		break;
+	}
+}
+
+/*
+ * Called when POGO Voltage Detection IRQ is active while Accessory Detection regulator is enabled.
+ *  - Triggered from event: EVENT_ACC_CONNECTED
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_acc_connected(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+	int ret;
+
+	/*
+	 * FIXME: is it possible that when acc regulator is enabled and pogo irq become active
+	 * because 12V input through pogo pin? e.g. keep magnet closed to the device and then
+	 * docking on korlan?
+	 */
+
+	switch (pogo_transport->state) {
+	case STANDBY_ACC_DEBOUNCED:
+		ret = pogo_transport_acc_regulator(pogo_transport, false);
+		if (ret)
+			logbuffer_log(pogo_transport->log, "%s: Failed to disable acc_detect %d",
+				      __func__, ret);
+
+		if (!pogo_transport->mfg_acc_test)
+			switch_to_pogo_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, ACC_DIRECT, 0);
+		break;
+	case DEVICE_DIRECT_ACC_DEBOUNCED:
+	case AUDIO_DIRECT_ACC_DEBOUNCED:
+		ret = pogo_transport_acc_regulator(pogo_transport, false);
+		if (ret)
+			logbuffer_log(pogo_transport->log, "%s: Failed to disable acc_detect %d",
+				      __func__, ret);
+
+		switch_to_hub_locked(pogo_transport);
+		/*
+		 * switch_to_hub_locked cleared data_active. Since there is still a USB-C accessory
+		 * attached, set data_active.
+		 */
+		chip->data_active = true;
+		pogo_transport_set_state(pogo_transport, ACC_DEVICE_HUB, 0);
+		break;
+	case DEVICE_HUB_ACC_DEBOUNCED:
+		ret = pogo_transport_acc_regulator(pogo_transport, false);
+		if (ret)
+			logbuffer_log(pogo_transport->log, "%s: Failed to disable acc_detect %d",
+				      __func__, ret);
+
+		pogo_transport_set_state(pogo_transport, ACC_DEVICE_HUB, 0);
+		break;
+	case AUDIO_HUB_ACC_DEBOUNCED:
+		ret = pogo_transport_acc_regulator(pogo_transport, false);
+		if (ret)
+			logbuffer_log(pogo_transport->log, "%s: Failed to disable acc_detect %d",
+				      __func__, ret);
+
+		pogo_transport_set_state(pogo_transport, ACC_AUDIO_HUB, 0);
+		break;
+	case HOST_DIRECT_ACC_DEBOUNCED:
+		ret = pogo_transport_acc_regulator(pogo_transport, false);
+		if (ret)
+			logbuffer_log(pogo_transport->log, "%s: Failed to disable acc_detect %d",
+				      __func__, ret);
+
+		if (pogo_transport->force_pogo) {
+			switch_to_pogo_locked(pogo_transport);
+			/*
+			 * Set data_active so that once USB-C cable is detached later, Type-C stack
+			 * is able to call back for the data changed event
+			 */
+			chip->data_active = true;
+			pogo_transport_set_state(pogo_transport, ACC_DIRECT_HOST_OFFLINE, 0);
+		} else {
+			pogo_transport_set_state(pogo_transport, HOST_DIRECT_ACC_OFFLINE, 0);
+		}
+		break;
+	default:
+		break;
+	}
+}
+
+/*
+ * Called when a USB device with AUDIO Class is enumerated.
+ *  - Triggered from event: EVENT_AUDIO_DEV_ATTACHED
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_audio_dev_attached(struct pogo_transport *pogo_transport)
+{
+	switch (pogo_transport->state) {
+	case DOCK_DEVICE_HUB:
+		pogo_transport_set_state(pogo_transport, DOCK_AUDIO_HUB, 0);
+		break;
+	case DEVICE_DIRECT:
+		pogo_transport_set_state(pogo_transport, AUDIO_DIRECT, 0);
+		break;
+	case ACC_DEVICE_HUB:
+		pogo_transport_set_state(pogo_transport, ACC_AUDIO_HUB, 0);
+		break;
+	case LC_DEVICE_DIRECT:
+		pogo_transport_set_state(pogo_transport, LC_AUDIO_DIRECT, 0);
+		break;
+	default:
+		break;
+	}
+}
+
+/*
+ * Called when the detected orientation on USB-C port is changed.
+ *  - Triggered from event: EVENT_USBC_ORIENTATION
+ *
+ * This function is guarded by (max77759_plat)->data_path_lock
+ */
+static void pogo_transport_usbc_orientation_changed(struct pogo_transport *pogo_transport)
+{
+	/*
+	 * TODO: It is possible that USB-C is toggling between CC2 and Open. We may need to wait for
+	 * the orientation being settled and then update the ssphy.
+	 */
+	switch (pogo_transport->state) {
+	/* usbc being connected while hub is enabled */
+	case DOCK_HUB:
+	case ACC_HUB:
+	/* usbc being disconnected while hub is enabled */
+	case DOCK_DEVICE_HUB:
+	case DOCK_AUDIO_HUB:
+	case DOCK_HUB_HOST_OFFLINE:
+	case ACC_DEVICE_HUB:
+	case ACC_AUDIO_HUB:
+		pogo_transport_update_polarity(pogo_transport, (int)pogo_transport->polarity, true);
+		ssphy_restart_control(pogo_transport, true);
+		break;
+	default:
+		break;
+	}
+}
+
+static void pogo_transport_lc_clear(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+
+	switch (pogo_transport->state) {
+	case LC:
+		pogo_transport_skip_acc_detection(pogo_transport);
+		if (!pogo_transport->mfg_acc_test)
+			switch_to_pogo_locked(pogo_transport);
+		pogo_transport_set_state(pogo_transport, ACC_DIRECT, 0);
+		break;
+	case LC_DEVICE_DIRECT:
+		pogo_transport_skip_acc_detection(pogo_transport);
+		if (!pogo_transport->mfg_acc_test) {
+			switch_to_hub_locked(pogo_transport);
+			chip->data_active = true;
+		}
+		pogo_transport_set_state(pogo_transport, ACC_DEVICE_HUB, 0);
+		break;
+	case LC_AUDIO_DIRECT:
+		pogo_transport_skip_acc_detection(pogo_transport);
+		if (!pogo_transport->mfg_acc_test) {
+			switch_to_hub_locked(pogo_transport);
+			chip->data_active = true;
+		}
+		pogo_transport_set_state(pogo_transport, ACC_AUDIO_HUB, 0);
+		break;
+	case LC_ALL_OFFLINE:
+		pogo_transport_skip_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, ACC_DIRECT_HOST_OFFLINE, 0);
+		break;
+	case LC_HOST_DIRECT:
+		pogo_transport_skip_acc_detection(pogo_transport);
+		if (!pogo_transport->mfg_acc_test) {
+			switch_to_pogo_locked(pogo_transport);
+			chip->data_active = true;
+		}
+		pogo_transport_set_state(pogo_transport, HOST_DIRECT_ACC_OFFLINE, 0);
+		break;
+	default:
+		break;
+	}
+}
+
+static void pogo_transport_lc(struct pogo_transport *pogo_transport)
+{
+	switch (pogo_transport->state) {
+	case ACC_DIRECT:
+	case ACC_HUB:
+		switch_to_usbc_locked(pogo_transport);
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, LC, 0);
+		break;
+	case ACC_DEVICE_HUB:
+		switch_to_usbc_locked(pogo_transport);
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, LC_DEVICE_DIRECT, 0);
+		break;
+	case ACC_AUDIO_HUB:
+		switch_to_usbc_locked(pogo_transport);
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, LC_AUDIO_DIRECT, 0);
+		break;
+	case ACC_DIRECT_HOST_OFFLINE:
+	case ACC_HUB_HOST_OFFLINE:
+		switch_to_pogo_locked(pogo_transport);
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, LC_ALL_OFFLINE, 0);
+		break;
+	case HOST_DIRECT_ACC_OFFLINE:
+		pogo_transport_reset_acc_detection(pogo_transport);
+		pogo_transport_set_state(pogo_transport, LC_HOST_DIRECT, 0);
+		break;
+	default:
+		break;
+	}
+}
+
+#define ACC_CHARGER_PSY_RETRY_COUNT 5
+#define ACC_CHARGER_PSY_RETRY_TIMEOUT_MS 100
+static int pogo_transport_acc_charger_status(struct pogo_transport *pogo_transport,
+					     union power_supply_propval *acc_charger_status,
+					     union power_supply_propval *acc_charger_capacity)
+{
+	int ret, count;
+	bool retry;
+
+	if (pogo_transport->pogo_acc_gpio <= 0 || !pogo_transport->acc_charger_psy_name)
+		return -EINVAL;
+
+	for (count = 0; count < ACC_CHARGER_PSY_RETRY_COUNT; count++) {
+		retry = false;
+
+		pogo_transport->acc_charger_psy = power_supply_get_by_name(
+				pogo_transport->acc_charger_psy_name);
+		if (IS_ERR_OR_NULL(pogo_transport->acc_charger_psy)) {
+			logbuffer_logk(pogo_transport->log, LOGLEVEL_ERR,
+				       "acc_charger psy delayed get failed");
+			return -ENODEV;
+		}
+
+		ret = power_supply_get_property(pogo_transport->acc_charger_psy,
+						POWER_SUPPLY_PROP_STATUS, acc_charger_status);
+		if (ret) {
+			logbuffer_log(pogo_transport->log,
+				      "Failed to read acc_charger status (%d), count %d", ret,
+				      count);
+			acc_charger_status->intval = POWER_SUPPLY_STATUS_UNKNOWN;
+			retry = true;
+		}
+
+		ret = power_supply_get_property(pogo_transport->acc_charger_psy,
+						POWER_SUPPLY_PROP_CAPACITY, acc_charger_capacity);
+		if (ret) {
+			logbuffer_log(pogo_transport->log,
+				      "Failed to read acc_charger capacity (%d), count %d", ret,
+				      count);
+			acc_charger_capacity->intval = 0;
+			retry = true;
+		}
+
+		if (!retry)
+			break;
+
+		mdelay(ACC_CHARGER_PSY_RETRY_TIMEOUT_MS);
+	}
+
+	return 0;
+}
+
+#define ACC_CHARGER_SOC_FULL 100
+#define ACC_CHARGER_NOT_PRESENT 0
+static bool lc_acc_charging_ended(struct pogo_transport *pogo_transport)
+{
+	union power_supply_propval acc_charger_status = {.intval = POWER_SUPPLY_STATUS_UNKNOWN};
+	union power_supply_propval acc_charger_capacity = {0};
+	u64 now, elapsed_sec;
+	bool charging_ended;
+	int ret;
+
+	ret = pogo_transport_acc_charger_status(pogo_transport, &acc_charger_status,
+						&acc_charger_capacity);
+	logbuffer_log(pogo_transport->log, "ret:%d charger_status:%d cap:%d", ret,
+		      acc_charger_status.intval, acc_charger_capacity.intval);
+
+	if (ret < 0) {
+		/*
+		 * It is expected that pogo Vout will be turned off. So it is safe to reset the
+		 * begin time here.
+		 */
+		pogo_transport->acc_charging_full_begin_ns = 0;
+		return true;
+	}
+
+	if (acc_charger_status.intval == POWER_SUPPLY_STATUS_CHARGING &&
+	    acc_charger_capacity.intval == ACC_CHARGER_SOC_FULL) {
+		now = ktime_get_boottime_ns();
+		/* other status -> "charging + soc full" */
+		if (!pogo_transport->acc_charging_full_begin_ns) {
+			pogo_transport->acc_charging_full_begin_ns = now;
+			return false;
+		/* continuous "charging + soc full" */
+		} else {
+			elapsed_sec = div_u64(now - pogo_transport->acc_charging_full_begin_ns,
+					      (u32)NSEC_PER_SEC);
+			/* elapsed time >= timeout */
+			if (elapsed_sec >= pogo_transport->acc_charging_timeout_sec) {
+				/*
+				 * It is expected that pogo Vout will be turned off. So it is safe
+				 * to reset the begin time here.
+				 */
+				pogo_transport->acc_charging_full_begin_ns = 0;
+				return true;
+			} else {
+				return false;
+			}
+		}
+	}
+
+	if (acc_charger_status.intval == POWER_SUPPLY_STATUS_DISCHARGING &&
+	    acc_charger_capacity.intval == ACC_CHARGER_NOT_PRESENT) {
+		now = ktime_get_boottime_ns();
+		/* other status -> "discharging + 0" */
+		if (!pogo_transport->acc_discharging_begin_ns) {
+			pogo_transport->acc_discharging_begin_ns = now;
+			return false;
+		/* continuous "discharging + 0" */
+		} else {
+			elapsed_sec = div_u64(now - pogo_transport->acc_discharging_begin_ns,
+					      (u32)NSEC_PER_SEC);
+			/* elapsed time >= timeout */
+			if (elapsed_sec >= pogo_transport->acc_charging_timeout_sec) {
+				/*
+				 * It is expected that pogo Vout will be turned off. So it is safe
+				 * to reset the begin time here.
+				 */
+				pogo_transport->acc_discharging_begin_ns = 0;
+				return true;
+			} else {
+				return false;
+			}
+		}
+	}
+
+
+	pogo_transport->acc_discharging_begin_ns = 0;
+	pogo_transport->acc_charging_full_begin_ns = 0;
+
+	charging_ended = acc_charger_status.intval == POWER_SUPPLY_STATUS_DISCHARGING &&
+			 acc_charger_capacity.intval == ACC_CHARGER_SOC_FULL;
+	charging_ended |= acc_charger_status.intval == POWER_SUPPLY_STATUS_FULL;
+
+	return charging_ended;
+}
+
+static void pogo_transport_lc_stage_transition(struct pogo_transport *pogo_transport)
+{
+	struct max77759_plat *chip = pogo_transport->chip;
+	bool acc_charging_ended;
+
+	logbuffer_log(pogo_transport->log, "stage:%u lc:%u wait_for_suspend:%u",
+		      pogo_transport->lc_stage, pogo_transport->lc,
+		      pogo_transport->wait_for_suspend);
+
+	if (!pogo_transport->lc)
+		return;
+
+	mutex_lock(&chip->data_path_lock);
+
+	switch (pogo_transport->lc_stage) {
+	case STAGE_WAIT_FOR_SUSPEND:
+		if (pogo_transport->wait_for_suspend)
+			break;
+
+		if (!pogo_transport->acc_charger_psy_name) {
+			pogo_transport_lc(pogo_transport);
+			pogo_transport->lc_stage = STAGE_VOUT_DISABLED;
+			break;
+		}
+
+		acc_charging_ended = lc_acc_charging_ended(pogo_transport);
+		if (acc_charging_ended) {
+			pogo_transport_lc(pogo_transport);
+			pogo_transport->lc_stage = STAGE_VOUT_DISABLED;
+			alarm_start_relative(&pogo_transport->lc_check_alarm,
+					     ms_to_ktime(pogo_transport->lc_disable_ms));
+		} else {
+			pogo_transport->lc_stage = STAGE_VOUT_ENABLED;
+			alarm_start_relative(&pogo_transport->lc_check_alarm,
+					     ms_to_ktime(pogo_transport->lc_enable_ms));
+		}
+		break;
+	case STAGE_VOUT_DISABLED:
+		pogo_transport_lc_clear(pogo_transport);
+		pogo_transport->lc_stage = STAGE_VOUT_ENABLED;
+		alarm_start_relative(&pogo_transport->lc_check_alarm,
+				     ms_to_ktime(pogo_transport->lc_bootup_ms));
+		break;
+	case STAGE_VOUT_ENABLED:
+		acc_charging_ended = lc_acc_charging_ended(pogo_transport);
+		if (acc_charging_ended) {
+			pogo_transport_lc(pogo_transport);
+			pogo_transport->lc_stage = STAGE_VOUT_DISABLED;
+			alarm_start_relative(&pogo_transport->lc_check_alarm,
+					     ms_to_ktime(pogo_transport->lc_disable_ms));
+		} else {
+			alarm_start_relative(&pogo_transport->lc_check_alarm,
+					     ms_to_ktime(pogo_transport->lc_enable_ms));
+		}
+		break;
+	default:
+		break;
+	}
+
+	mutex_unlock(&chip->data_path_lock);
+}
+
+static void pogo_transport_event_handler(struct kthread_work *work)
+{
+	struct pogo_transport *pogo_transport = container_of(work, struct pogo_transport,
+							     event_work);
+	struct max77759_plat *chip = pogo_transport->chip;
+	unsigned long events;
+
+	mutex_lock(&chip->data_path_lock);
+	spin_lock(&pogo_transport->pogo_event_lock);
+	while (pogo_transport->event_map) {
+		events = pogo_transport->event_map;
+		pogo_transport->event_map = 0;
+
+		spin_unlock(&pogo_transport->pogo_event_lock);
+
+		if (events & EVENT_POGO_IRQ) {
+			int pogo_gpio = gpio_get_value(pogo_transport->pogo_gpio);
+
+			logbuffer_log(pogo_transport->log, "EV:POGO_IRQ %s", pogo_gpio ?
+				      "STANDBY" : "ACTIVE");
+			if (pogo_gpio)
+				pogo_transport_pogo_irq_standby(pogo_transport);
+			else
+				pogo_transport_pogo_irq_active(pogo_transport);
+		}
+		if (events & EVENT_USBC_ORIENTATION) {
+			logbuffer_log(pogo_transport->log, "EV:ORIENTATION %u",
+				      pogo_transport->polarity);
+			pogo_transport_usbc_orientation_changed(pogo_transport);
+		}
+		if (events & EVENT_USBC_DATA_CHANGE) {
+			logbuffer_log(pogo_transport->log, "EV:DATA_CHANGE usbc-role %u usbc-active %u",
+				      pogo_transport->usbc_data_role,
+				      pogo_transport->usbc_data_active);
+			if (pogo_transport->usbc_data_role == TYPEC_HOST) {
+				if (pogo_transport->usbc_data_active)
+					pogo_transport_usbc_host_on(pogo_transport);
+				else
+					pogo_transport_usbc_host_off(pogo_transport);
+			} else {
+				if (pogo_transport->usbc_data_active)
+					pogo_transport_usbc_device_on(pogo_transport);
+				else
+					pogo_transport_usbc_device_off(pogo_transport);
+			}
+		}
+		if (events & EVENT_ENABLE_USB_DATA) {
+			logbuffer_log(pogo_transport->log, "EV:ENABLE_USB");
+			pogo_transport_enable_usb_data(pogo_transport);
+		}
+		if (events & EVENT_FORCE_POGO) {
+			logbuffer_log(pogo_transport->log, "EV:FORCE_POGO");
+			pogo_transport_force_pogo(pogo_transport);
+		}
+		if (events & EVENT_HES_H1S_CHANGED) {
+			logbuffer_log(pogo_transport->log, "EV:H1S state %d",
+				      pogo_transport->hall1_s_state);
+			if (pogo_transport->hall1_s_state)
+				pogo_transport_hes_acc_detected(pogo_transport);
+			else
+				pogo_transport_hes_acc_detached(pogo_transport);
+		}
+		if (events & EVENT_ACC_GPIO_ACTIVE) {
+			logbuffer_log(pogo_transport->log, "EV:ACC_GPIO_ACTIVE, H1S %d",
+				      pogo_transport->hall1_s_state);
+			/* b/288341638 step to debouncing only if H1S stays active */
+			if (pogo_transport->hall1_s_state)
+				pogo_transport_acc_debouncing(pogo_transport);
+			else
+				pogo_transport_hes_acc_detached(pogo_transport);
+		}
+		if (events & EVENT_ACC_CONNECTED) {
+			logbuffer_log(pogo_transport->log, "EV:ACC_CONNECTED");
+			pogo_transport_acc_connected(pogo_transport);
+		}
+		if (events & EVENT_AUDIO_DEV_ATTACHED) {
+			logbuffer_log(pogo_transport->log, "EV:AUDIO_ATTACHED");
+			pogo_transport_audio_dev_attached(pogo_transport);
+		}
+		if (events & EVENT_USB_SUSPEND) {
+			logbuffer_log(pogo_transport->log, "EV:USB_SUSPEND stage %u",
+				      pogo_transport->lc_stage);
+			if (pogo_transport->lc &&
+			    pogo_transport->lc_stage == STAGE_WAIT_FOR_SUSPEND)
+				alarm_start_relative(&pogo_transport->lc_check_alarm, 0);
+		}
+		if (events & EVENT_LC_STATUS_CHANGED) {
+			logbuffer_log(pogo_transport->log, "EV:LC %u", pogo_transport->lc);
+			if (pogo_transport->lc) {
+				if (bus_suspend(pogo_transport))
+					pogo_transport->wait_for_suspend = false;
+				pogo_transport->lc_stage = STAGE_WAIT_FOR_SUSPEND;
+				alarm_start_relative(&pogo_transport->lc_check_alarm,
+						ms_to_ktime(pogo_transport->lc_delay_check_ms));
+			} else {
+				if (pogo_transport->lc_stage == STAGE_VOUT_DISABLED)
+					pogo_transport_lc_clear(pogo_transport);
+				pogo_transport->lc_stage = STAGE_UNKNOWN;
+				pogo_transport->wait_for_suspend = true;
+			}
+		}
+		spin_lock(&pogo_transport->pogo_event_lock);
+	}
+	spin_unlock(&pogo_transport->pogo_event_lock);
+	mutex_unlock(&chip->data_path_lock);
+}
+
+static void pogo_transport_queue_event(struct pogo_transport *pogo_transport, unsigned long event)
+{
+	unsigned long flags;
+
+	pm_wakeup_event(pogo_transport->dev, POGO_TIMEOUT_MS);
+	/*
+	 * Print the event number derived from the bit position; e.g. BIT(0) -> 0
+	 * Note that ffs() only return the least significant set bit.
+	 */
+	logbuffer_log(pogo_transport->log, "QUEUE EVENT %d", ffs((int)event) - 1);
+
+	spin_lock_irqsave(&pogo_transport->pogo_event_lock, flags);
+	pogo_transport->event_map |= event;
+	spin_unlock_irqrestore(&pogo_transport->pogo_event_lock, flags);
+
+	kthread_queue_work(pogo_transport->wq, &pogo_transport->event_work);
+}
+
+static void lc_check_alarm_work_item(struct kthread_work *work)
+{
+	struct pogo_transport *pogo_transport = container_of(work, struct pogo_transport, lc_work);
+
+	pogo_transport_lc_stage_transition(pogo_transport);
+}
+
+static enum alarmtimer_restart lc_check_alarm_handler(struct alarm *alarm, ktime_t time)
+{
+	struct pogo_transport *pogo_transport = container_of(alarm, struct pogo_transport,
+							     lc_check_alarm);
+
+	pm_wakeup_event(pogo_transport->dev, LC_WAKEUP_TIMEOUT_MS);
+	kthread_queue_work(pogo_transport->wq, &pogo_transport->lc_work);
+
+	return ALARMTIMER_NORESTART;
+}
+
+/*-------------------------------------------------------------------------*/
+/* Events triggering                                                       */
+/*-------------------------------------------------------------------------*/
+
+static irqreturn_t pogo_acc_irq(int irq, void *dev_id)
+{
+	struct pogo_transport *pogo_transport = dev_id;
+
+	/*
+	 * Cache the acc gpio result as it might change after the IRQ is disabled and we need the
+	 * latest acc gpio status before the disabling of the IRQ.
+	 */
+	pogo_transport->acc_gpio_result_cache = gpio_get_value(pogo_transport->pogo_acc_gpio);
+
+	logbuffer_log(pogo_transport->log, "Pogo acc threaded irq running, acc_detect %u",
+		      pogo_transport->acc_gpio_result_cache);
+
+	if (pogo_transport->state_machine_enabled) {
+		if (pogo_transport->acc_gpio_result_cache)
+			pogo_transport_queue_event(pogo_transport, EVENT_ACC_GPIO_ACTIVE);
+		return IRQ_HANDLED;
+	}
+
+	if (pogo_transport->acc_gpio_result_cache)
+		pogo_transport_event(pogo_transport, EVENT_POGO_ACC_DEBOUNCED,
+				     pogo_transport->pogo_acc_gpio_debounce_ms);
+	else
+		kthread_cancel_delayed_work_sync(&pogo_transport->pogo_accessory_debounce_work);
+
+	return IRQ_HANDLED;
+}
+
+static irqreturn_t pogo_acc_isr(int irq, void *dev_id)
+{
+	struct pogo_transport *pogo_transport = dev_id;
+
+	logbuffer_log(pogo_transport->log, "POGO ACC IRQ triggered");
+	pm_wakeup_event(pogo_transport->dev, POGO_TIMEOUT_MS);
+
+	return IRQ_WAKE_THREAD;
+}
+
+static irqreturn_t pogo_irq(int irq, void *dev_id)
+{
+	struct pogo_transport *pogo_transport = dev_id;
+	int pogo_gpio = gpio_get_value(pogo_transport->pogo_gpio);
+
+	logbuffer_log(pogo_transport->log, "Pogo threaded irq running, pogo_gpio %u", pogo_gpio);
+
+	if (pogo_transport->acc_detect_ldo &&
+	    regulator_is_enabled(pogo_transport->acc_detect_ldo) > 0) {
+		/*
+		 * b/288341638 If the cached acc gpio is not active, it means that the IV detection
+		 * has failed when the acc detection regulator is enabled. If the state machine
+		 * stays at *_ACC_DEBOUNCED states, i.e., the H1S state is still active, docking
+		 * will fail because it "looks like" a normal acc connection. Disable the acc
+		 * regulator in this situation and continue to the docking detection procedure.
+		 */
+		if (!pogo_transport->acc_gpio_result_cache) {
+			if (pogo_transport->acc_irq_enabled) {
+				disable_irq_nosync(pogo_transport->pogo_acc_irq);
+				pogo_transport->acc_irq_enabled = false;
+				logbuffer_log(pogo_transport->log, "acc_irq disabled");
+			}
+			pogo_transport_acc_regulator(pogo_transport, false);
+			logbuffer_log(pogo_transport->log,
+				      "HES mistriggered, begin docking detection");
+			goto dock_detection;
+		}
+
+		if (pogo_transport->pogo_irq_enabled) {
+			/* disable the irq to prevent the interrupt storm after pogo 5v out */
+			disable_irq_nosync(pogo_transport->pogo_irq);
+			pogo_transport->pogo_irq_enabled = false;
+			if (pogo_transport->state_machine_enabled)
+				pogo_transport_queue_event(pogo_transport, EVENT_ACC_CONNECTED);
+			else
+				pogo_transport_event(pogo_transport, EVENT_POGO_ACC_CONNECTED, 0);
+		}
+		return IRQ_HANDLED;
+	}
+
+dock_detection:
+	if (pogo_transport->pogo_ovp_en_gpio >= 0) {
+		int ret;
+
+		/*
+		 * Vote GBMS_POGO_VIN to notify BMS that there is input voltage on pogo power and
+		 * it is over the threshold if pogo_gpio (ACTIVE_LOW) is in active state (0)
+		 */
+		ret = gvotable_cast_long_vote(pogo_transport->charger_mode_votable, POGO_VOTER,
+					      GBMS_POGO_VIN, !pogo_gpio);
+		if (ret)
+			logbuffer_log(pogo_transport->log, "%s: Failed to vote VIN, ret %d",
+				      __func__, ret);
+	}
+
+	if (pogo_transport->state_machine_enabled)
+		pogo_transport_queue_event(pogo_transport, EVENT_POGO_IRQ);
+	else
+		pogo_transport_event(pogo_transport, EVENT_DOCKING, !pogo_gpio ?
+				     POGO_PSY_DEBOUNCE_MS : 0);
+	return IRQ_HANDLED;
+}
+
+static irqreturn_t pogo_isr(int irq, void *dev_id)
+{
+	struct pogo_transport *pogo_transport = dev_id;
+
+	logbuffer_log(pogo_transport->log, "POGO IRQ triggered");
+	pm_wakeup_event(pogo_transport->dev, POGO_TIMEOUT_MS);
+
+	return IRQ_WAKE_THREAD;
+}
+
+static void data_active_changed(void *data, enum typec_data_role role, bool active)
+{
+	struct pogo_transport *pogo_transport = data;
+
+	logbuffer_log(pogo_transport->log, "%s: role %u active %d", __func__, role, active);
+
+	pogo_transport->usbc_data_role = role;
+	pogo_transport->usbc_data_active = active;
+
+	if (pogo_transport->state_machine_enabled)
+		pogo_transport_queue_event(pogo_transport, EVENT_USBC_DATA_CHANGE);
+	else
+		pogo_transport_event(pogo_transport, EVENT_DATA_ACTIVE_CHANGED, 0);
+}
+
+static void orientation_changed(void *data)
+{
+	struct pogo_transport *pogo_transport = data;
+	struct max77759_plat *chip = pogo_transport->chip;
+
+	if (pogo_transport->polarity != chip->polarity) {
+		pogo_transport->polarity = chip->polarity;
+		if (pogo_transport->state_machine_enabled)
+			pogo_transport_queue_event(pogo_transport, EVENT_USBC_ORIENTATION);
+		else
+			pogo_transport_event(pogo_transport, EVENT_ORIENTATION_CHANGED, 0);
+	}
+}
+
+static void usb_bus_suspend_resume(void *data, bool main_hcd, bool suspend)
+{
+	struct pogo_transport *pogo_transport = data;
+
+	if (main_hcd)
+		pogo_transport->main_hcd_suspend = suspend;
+	else
+		pogo_transport->shared_hcd_suspend = suspend;
+
+	/* TODO: mutex lock to protect the read/set of lc and wait_for_suspend */
+	if (!pogo_transport->lc)
+		return;
+
+	/* lc and still wait for suspend */
+	if (bus_suspend(pogo_transport) && pogo_transport->wait_for_suspend) {
+		pogo_transport->wait_for_suspend = false;
+		pogo_transport_queue_event(pogo_transport, EVENT_USB_SUSPEND);
+		logbuffer_log(pogo_transport->log, "first bus suspend after lc");
+	}
+}
+
+/* Called when a USB hub/device (exclude root hub) is enumerated */
+static void pogo_transport_udev_add(struct pogo_transport *pogo_transport, struct usb_device *udev)
+{
+	struct usb_interface_descriptor *desc;
+	struct usb_host_config *config;
+	bool audio_dock = false;
+	bool audio_dev = false;
+	int i;
+
+	/* Don't proceed to the event handling if the udev is an Audio Dock. Skip the check. */
+	if (pogo_transport_match_udev(audio_dock_ids, le16_to_cpu(udev->descriptor.idVendor),
+				      le16_to_cpu(udev->descriptor.idProduct))) {
+		audio_dock = true;
+		goto skip_audio_check;
+	}
+
+	if (udev->speed >= USB_SPEED_SUPER)
+		pogo_transport->ss_udev_attached = true;
+
+	config = udev->config;
+	for (i = 0; i < config->desc.bNumInterfaces; i++) {
+		desc = &config->intf_cache[i]->altsetting->desc;
+		if (desc->bInterfaceClass == USB_CLASS_AUDIO) {
+			audio_dev = true;
+			break;
+		}
+	}
+
+skip_audio_check:
+	logbuffer_log(pogo_transport->log, "udev added %04X:%04X [%s%s%s%s]",
+		      le16_to_cpu(udev->descriptor.idVendor),
+		      le16_to_cpu(udev->descriptor.idProduct),
+		      udev->speed >= USB_SPEED_SUPER ? "Ss" : "",
+		      udev->descriptor.bDeviceClass == USB_CLASS_HUB ? "Hu" : "",
+		      audio_dock ? "Do" : "",
+		      audio_dev ? "Au" : "");
+
+	if (audio_dev && pogo_transport->state_machine_enabled)
+		pogo_transport_queue_event(pogo_transport, EVENT_AUDIO_DEV_ATTACHED);
+}
+
+/* notifier callback from usb core */
+static int pogo_transport_udev_notify(struct notifier_block *nb, unsigned long action, void *dev)
+{
+	struct pogo_transport *pogo_transport = container_of(nb, struct pogo_transport, udev_nb);
+	struct usb_device *udev = dev;
+
+	switch (action) {
+	case USB_DEVICE_ADD:
+		/* Don't care about the root hubs. */
+		if (udev->bus->root_hub == udev)
+			break;
+
+		pogo_transport_udev_add(pogo_transport, udev);
+		break;
+	case USB_DEVICE_REMOVE:
+		/* Don't care about the root hubs. */
+		if (udev->bus->root_hub == udev)
+			break;
+
+		logbuffer_log(pogo_transport->log, "udev removed %04X:%04X",
+			      le16_to_cpu(udev->descriptor.idVendor),
+			      le16_to_cpu(udev->descriptor.idProduct));
+		break;
+	}
+
+	return NOTIFY_OK;
+}
+
+static int pogo_transport_reboot_notify(struct notifier_block *nb, unsigned long action,
+					void *data)
+{
+	struct pogo_transport *pogo_transport = container_of(nb, struct pogo_transport, reboot_nb);
+
+	mutex_lock(&pogo_transport->reboot_lock);
+	pogo_transport->rebooting = true;
+	mutex_unlock(&pogo_transport->reboot_lock);
+
+	return NOTIFY_OK;
+}
+
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+static int mock_hid_connected_set(void *data, u64 val)
+{
+	struct pogo_transport *pogo_transport = data;
+
+	if (pogo_transport->state_machine_enabled) {
+		logbuffer_log(pogo_transport->log, "state machine enabled; ignore mock hid");
+		return 0;
+	}
+
+	pogo_transport->mock_hid_connected = !!val;
+
+	logbuffer_log(pogo_transport->log, "%s: %u", __func__, pogo_transport->mock_hid_connected);
+
+	if (pogo_transport->mock_hid_connected)
+		pogo_transport_event(pogo_transport, EVENT_FORCE_ACC_CONNECT, 0);
+	else
+		pogo_transport_event(pogo_transport, EVENT_HALL_SENSOR_ACC_UNDOCKED, 0);
+
+	return 0;
+}
+
+static int mock_hid_connected_get(void *data, u64 *val)
+{
+	struct pogo_transport *pogo_transport = data;
+
+	*val = (u64)pogo_transport->mock_hid_connected;
+
+	return 0;
+}
+
+DEFINE_SIMPLE_ATTRIBUTE(mock_hid_connected_fops, mock_hid_connected_get, mock_hid_connected_set,
+			"%llu\n");
+
+#define POGO_TRANSPORT_DEBUGFS_RW(_name)                                                        \
+static int _name##_set(void *data, u64 val)                                                     \
+{                                                                                               \
+	struct pogo_transport *pogo_transport  = data;                                          \
+	pogo_transport->_name = val;                                                          \
+	logbuffer_log(pogo_transport->log, "%s: %llu", __func__,                                \
+		      (u64)pogo_transport->_name);                                              \
+	return 0;                                                                               \
+}                                                                                               \
+static int _name##_get(void *data, u64 *val)                                                    \
+{                                                                                               \
+	struct pogo_transport *pogo_transport  = data;                                          \
+	*val = (u64)pogo_transport->_name;                                                      \
+	return 0;                                                                               \
+}                                                                                               \
+DEFINE_SIMPLE_ATTRIBUTE(_name##_fops, _name##_get, _name##_set, "%llu\n")
+POGO_TRANSPORT_DEBUGFS_RW(lc_delay_check_ms);
+POGO_TRANSPORT_DEBUGFS_RW(lc_enable_ms);
+POGO_TRANSPORT_DEBUGFS_RW(lc_disable_ms);
+POGO_TRANSPORT_DEBUGFS_RW(lc_bootup_ms);
+POGO_TRANSPORT_DEBUGFS_RW(acc_charging_timeout_sec);
+
+/*-------------------------------------------------------------------------*/
+/* Initialization                                                          */
+/*-------------------------------------------------------------------------*/
+
+static void pogo_transport_init_debugfs(struct pogo_transport *pogo_transport)
+{
+	struct dentry *dentry;
+
+	dentry = debugfs_create_dir("pogo_transport", NULL);
+
+	if (IS_ERR(dentry)) {
+		dev_err(pogo_transport->dev, "debugfs dentry failed: %ld", PTR_ERR(dentry));
+		return;
+	}
+
+	debugfs_create_file("mock_hid_connected", 0644, dentry, pogo_transport,
+			    &mock_hid_connected_fops);
+	debugfs_create_file("lc_delay_check_ms", 0644, dentry, pogo_transport,
+			    &lc_delay_check_ms_fops);
+	debugfs_create_file("lc_enable_ms", 0644, dentry, pogo_transport, &lc_enable_ms_fops);
+	debugfs_create_file("lc_disable_ms", 0644, dentry, pogo_transport, &lc_disable_ms_fops);
+	debugfs_create_file("lc_bootup_ms", 0644, dentry, pogo_transport, &lc_bootup_ms_fops);
+	debugfs_create_file("acc_charging_timeout_sec", 0644, dentry, pogo_transport,
+			    &acc_charging_timeout_sec_fops);
+}
+#endif /* IS_ENABLED(CONFIG_DEBUG_FS) */
+
+static int init_regulator(struct pogo_transport *pogo_transport)
+{
+	if (of_property_read_bool(pogo_transport->dev->of_node, "usb-hub-supply")) {
+		pogo_transport->hub_ldo = devm_regulator_get(pogo_transport->dev, "usb-hub");
+		if (IS_ERR(pogo_transport->hub_ldo)) {
+			dev_err(pogo_transport->dev, "Failed to get usb-hub, ret:%ld\n",
+				PTR_ERR(pogo_transport->hub_ldo));
+			return PTR_ERR(pogo_transport->hub_ldo);
+		}
+	}
+
+	if (of_property_read_bool(pogo_transport->dev->of_node, "acc-detect-supply")) {
+		pogo_transport->acc_detect_ldo = devm_regulator_get(pogo_transport->dev,
+								    "acc-detect");
+		if (IS_ERR(pogo_transport->acc_detect_ldo)) {
+			dev_err(pogo_transport->dev, "Failed to get acc-detect, ret:%ld\n",
+				PTR_ERR(pogo_transport->acc_detect_ldo));
+			return PTR_ERR(pogo_transport->acc_detect_ldo);
+		}
+	}
+
+	return 0;
+}
+
+static int init_pogo_irqs(struct pogo_transport *pogo_transport)
+{
+	int ret;
+
+	/* initialize pogo status irq */
+	pogo_transport->pogo_irq = gpio_to_irq(pogo_transport->pogo_gpio);
+	if (pogo_transport->pogo_irq <= 0) {
+		dev_err(pogo_transport->dev, "Pogo irq not found\n");
+		return -ENODEV;
+	}
+
+	ret = devm_request_threaded_irq(pogo_transport->dev, pogo_transport->pogo_irq, pogo_isr,
+					pogo_irq, (IRQF_SHARED | IRQF_ONESHOT |
+						   IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING),
+					dev_name(pogo_transport->dev), pogo_transport);
+	if (ret < 0) {
+		dev_err(pogo_transport->dev, "pogo-transport-status request irq failed ret:%d\n",
+			ret);
+		return ret;
+	}
+
+	pogo_transport->pogo_irq_enabled = true;
+
+	ret = enable_irq_wake(pogo_transport->pogo_irq);
+	if (ret) {
+		dev_err(pogo_transport->dev, "Enable irq wake failed ret:%d\n", ret);
+		goto free_status_irq;
+	}
+
+	if (!pogo_transport->pogo_acc_gpio)
+		return 0;
+
+	/* initialize pogo accessory irq */
+	pogo_transport->pogo_acc_irq = gpio_to_irq(pogo_transport->pogo_acc_gpio);
+	if (pogo_transport->pogo_acc_irq <= 0) {
+		dev_err(pogo_transport->dev, "Pogo acc irq not found\n");
+		ret = -ENODEV;
+		goto disable_status_irq_wake;
+	}
+
+	ret = devm_request_threaded_irq(pogo_transport->dev, pogo_transport->pogo_acc_irq,
+					pogo_acc_isr, pogo_acc_irq,
+					(IRQF_SHARED | IRQF_ONESHOT |
+					 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING),
+					dev_name(pogo_transport->dev), pogo_transport);
+	if (ret < 0) {
+		dev_err(pogo_transport->dev, "pogo-acc-detect request irq failed ret:%d\n", ret);
+		goto disable_status_irq_wake;
+	}
+
+	pogo_transport->acc_irq_enabled = true;
+
+	ret = enable_irq_wake(pogo_transport->pogo_acc_irq);
+	if (ret) {
+		dev_err(pogo_transport->dev, "Enable acc irq wake failed ret:%d\n", ret);
+		goto free_acc_irq;
+	}
+
+	return 0;
+
+free_acc_irq:
+	devm_free_irq(pogo_transport->dev, pogo_transport->pogo_acc_irq, pogo_transport);
+disable_status_irq_wake:
+	disable_irq_wake(pogo_transport->pogo_irq);
+free_status_irq:
+	devm_free_irq(pogo_transport->dev, pogo_transport->pogo_irq, pogo_transport);
+
+	return ret;
+}
+
+static int init_acc_gpio(struct pogo_transport *pogo_transport)
+{
+	int ret;
+
+	pogo_transport->pogo_acc_gpio = of_get_named_gpio(pogo_transport->dev->of_node,
+							  "pogo-acc-detect", 0);
+	if (pogo_transport->pogo_acc_gpio < 0) {
+		dev_err(pogo_transport->dev, "pogo acc detect gpio not found ret:%d\n",
+			pogo_transport->pogo_acc_gpio);
+		return pogo_transport->pogo_acc_gpio;
+	}
+
+	ret = devm_gpio_request(pogo_transport->dev, pogo_transport->pogo_acc_gpio,
+				"pogo-acc-detect");
+	if (ret) {
+		dev_err(pogo_transport->dev, "failed to request pogo-acc-detect gpio, ret:%d\n",
+			ret);
+		return ret;
+	}
+
+	ret = gpio_direction_input(pogo_transport->pogo_acc_gpio);
+	if (ret) {
+		dev_err(pogo_transport->dev, "failed to set pogo-acc-detect as input, ret:%d\n",
+			ret);
+		return ret;
+	}
+
+	ret = gpio_set_debounce(pogo_transport->pogo_acc_gpio, POGO_ACC_GPIO_DEBOUNCE_MS * 1000);
+	if (ret < 0) {
+		dev_info(pogo_transport->dev, "failed to set debounce, ret:%d\n", ret);
+		pogo_transport->pogo_acc_gpio_debounce_ms = POGO_ACC_GPIO_DEBOUNCE_MS;
+	}
+
+	return 0;
+}
+
+static int init_hub_gpio(struct pogo_transport *pogo_transport)
+{
+	pogo_transport->pogo_hub_sel_gpio = of_get_named_gpio(pogo_transport->dev->of_node,
+							      "pogo-hub-sel", 0);
+	if (pogo_transport->pogo_hub_sel_gpio < 0) {
+		dev_err(pogo_transport->dev, "Pogo hub sel gpio not found ret:%d\n",
+			pogo_transport->pogo_hub_sel_gpio);
+		return pogo_transport->pogo_hub_sel_gpio;
+	}
+
+	pogo_transport->pogo_hub_reset_gpio = of_get_named_gpio(pogo_transport->dev->of_node,
+								"pogo-hub-reset", 0);
+	if (pogo_transport->pogo_hub_reset_gpio < 0) {
+		dev_err(pogo_transport->dev, "Pogo hub reset gpio not found ret:%d\n",
+			pogo_transport->pogo_hub_reset_gpio);
+		return pogo_transport->pogo_hub_reset_gpio;
+	}
+
+	pogo_transport->hub_state = pinctrl_lookup_state(pogo_transport->pinctrl, "hub");
+	if (IS_ERR(pogo_transport->hub_state)) {
+		dev_err(pogo_transport->dev, "failed to find pinctrl hub ret:%ld\n",
+			PTR_ERR(pogo_transport->hub_state));
+		return PTR_ERR(pogo_transport->hub_state);
+	}
+
+	return 0;
+}
+
+static int init_pogo_gpio(struct pogo_transport *pogo_transport)
+{
+	int ret;
+
+	/* initialize pogo status gpio */
+	pogo_transport->pogo_gpio = of_get_named_gpio(pogo_transport->dev->of_node,
+						      "pogo-transport-status", 0);
+	if (pogo_transport->pogo_gpio < 0) {
+		dev_err(pogo_transport->dev, "Pogo status gpio not found ret:%d\n",
+			pogo_transport->pogo_gpio);
+		return pogo_transport->pogo_gpio;
+	}
+
+	ret = devm_gpio_request(pogo_transport->dev, pogo_transport->pogo_gpio,
+				"pogo-transport-status");
+	if (ret) {
+		dev_err(pogo_transport->dev,
+			"failed to request pogo-transport-status gpio, ret:%d\n",
+			ret);
+		return ret;
+	}
+
+	ret = gpio_direction_input(pogo_transport->pogo_gpio);
+	if (ret) {
+		dev_err(pogo_transport->dev,
+			"failed set pogo-transport-status as input, ret:%d\n",
+			ret);
+		return ret;
+	}
+
+	/* initialize data mux gpio */
+	pogo_transport->pogo_data_mux_gpio = of_get_named_gpio(pogo_transport->dev->of_node,
+							       "pogo-transport-sel", 0);
+	if (pogo_transport->pogo_data_mux_gpio < 0) {
+		dev_err(pogo_transport->dev, "Pogo sel gpio not found ret:%d\n",
+			pogo_transport->pogo_data_mux_gpio);
+		return pogo_transport->pogo_data_mux_gpio;
+	}
+
+	ret = devm_gpio_request(pogo_transport->dev, pogo_transport->pogo_data_mux_gpio,
+				"pogo-transport-sel");
+	if (ret) {
+		dev_err(pogo_transport->dev, "failed to request pogo-transport-sel gpio, ret:%d\n",
+			ret);
+		return ret;
+	}
+
+	ret = gpio_direction_output(pogo_transport->pogo_data_mux_gpio, 0);
+	if (ret) {
+		dev_err(pogo_transport->dev, "failed set pogo-transport-sel as output, ret:%d\n",
+			ret);
+		return ret;
+	}
+
+	/* pinctrl for usb-c path*/
+	pogo_transport->pinctrl = devm_pinctrl_get_select(pogo_transport->dev, "suspend-to-usb");
+	if (IS_ERR(pogo_transport->pinctrl)) {
+		dev_err(pogo_transport->dev, "failed to allocate pinctrl ret:%ld\n",
+			PTR_ERR(pogo_transport->pinctrl));
+		return PTR_ERR(pogo_transport->pinctrl);
+	}
+
+	pogo_transport->susp_usb_state = pinctrl_lookup_state(pogo_transport->pinctrl,
+							      "suspend-to-usb");
+	if (IS_ERR(pogo_transport->susp_usb_state)) {
+		dev_err(pogo_transport->dev, "failed to find pinctrl suspend-to-usb ret:%ld\n",
+			PTR_ERR(pogo_transport->susp_usb_state));
+		return PTR_ERR(pogo_transport->susp_usb_state);
+	}
+
+	/* pinctrl for pogo path */
+	pogo_transport->susp_pogo_state = pinctrl_lookup_state(pogo_transport->pinctrl,
+							       "suspend-to-pogo");
+	if (IS_ERR(pogo_transport->susp_pogo_state)) {
+		dev_err(pogo_transport->dev, "failed to find pinctrl suspend-to-pogo ret:%ld\n",
+			PTR_ERR(pogo_transport->susp_pogo_state));
+		return PTR_ERR(pogo_transport->susp_pogo_state);
+	}
+
+	return 0;
+}
+
+static int init_pogo_ovp_gpio(struct pogo_transport *pogo_transport)
+{
+	enum of_gpio_flags flags;
+	int ret;
+
+	if (!of_property_read_bool(pogo_transport->dev->of_node, "pogo-ovp-en")) {
+		pogo_transport->pogo_ovp_en_gpio = -EINVAL;
+		return 0;
+	}
+
+	pogo_transport->pogo_ovp_en_gpio = of_get_named_gpio_flags(pogo_transport->dev->of_node,
+								   "pogo-ovp-en", 0, &flags);
+	if (pogo_transport->pogo_ovp_en_gpio < 0) {
+		dev_err(pogo_transport->dev, "Pogo ovp en gpio not found. ret:%d\n",
+			pogo_transport->pogo_ovp_en_gpio);
+		return pogo_transport->pogo_ovp_en_gpio;
+	}
+
+	pogo_transport->pogo_ovp_en_active_state = (flags & OF_GPIO_ACTIVE_LOW) ? 0 : 1;
+
+	ret = devm_gpio_request(pogo_transport->dev, pogo_transport->pogo_ovp_en_gpio,
+				"pogo-ovp-en");
+	if (ret) {
+		dev_err(pogo_transport->dev, "failed to request pogo-ovp-en gpio, ret:%d\n", ret);
+		return ret;
+	}
+
+	/* Default disable pogo ovp. Set to disable state for pogo_ovp_en */
+	ret = gpio_direction_output(pogo_transport->pogo_ovp_en_gpio,
+				    !pogo_transport->pogo_ovp_en_active_state);
+	if (ret) {
+		dev_err(pogo_transport->dev, "failed set pogo-ovp-en as output, ret:%d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+static int pogo_transport_probe(struct platform_device *pdev)
+{
+	struct pogo_transport *pogo_transport;
+	struct device_node *data_np, *dn;
+	struct i2c_client *data_client;
+	struct max77759_plat *chip;
+	char *pogo_psy_name;
+	int ret;
+
+	data_np = of_parse_phandle(pdev->dev.of_node, "data-phandle", 0);
+	if (!data_np) {
+		dev_err(&pdev->dev, "Failed to find tcpci node\n");
+		return -ENODEV;
+	}
+
+	data_client = of_find_i2c_device_by_node(data_np);
+	if (!data_client) {
+		dev_err(&pdev->dev, "Failed to find tcpci client\n");
+		ret = -EPROBE_DEFER;
+		goto free_np;
+	}
+
+	chip = i2c_get_clientdata(data_client);
+	if (!chip) {
+		dev_err(&pdev->dev, "Failed to find max77759_plat\n");
+		ret = -EPROBE_DEFER;
+		goto put_client;
+	}
+
+	pogo_transport = devm_kzalloc(&pdev->dev, sizeof(*pogo_transport), GFP_KERNEL);
+	if (!pogo_transport) {
+		ret = -ENOMEM;
+		goto put_client;
+	}
+
+	pogo_transport->dev = &pdev->dev;
+	pogo_transport->chip = chip;
+
+	pogo_transport->log = logbuffer_register("pogo_transport");
+	if (IS_ERR_OR_NULL(pogo_transport->log)) {
+		dev_err(pogo_transport->dev, "logbuffer get failed\n");
+		ret = -EPROBE_DEFER;
+		goto put_client;
+	}
+	platform_set_drvdata(pdev, pogo_transport);
+
+	spin_lock_init(&pogo_transport->pogo_event_lock);
+	mutex_init(&pogo_transport->reboot_lock);
+
+	pogo_transport->wq = kthread_create_worker(0, "wq-pogo-transport");
+	if (IS_ERR_OR_NULL(pogo_transport->wq)) {
+		ret = PTR_ERR(pogo_transport->wq);
+		goto unreg_logbuffer;
+	}
+
+	kthread_init_delayed_work(&pogo_transport->pogo_accessory_debounce_work,
+				  process_debounce_event);
+	kthread_init_delayed_work(&pogo_transport->state_machine,
+				  pogo_transport_state_machine_work);
+
+	alarm_init(&pogo_transport->lc_check_alarm, ALARM_BOOTTIME, lc_check_alarm_handler);
+	kthread_init_work(&pogo_transport->lc_work, lc_check_alarm_work_item);
+	kthread_init_work(&pogo_transport->event_work, pogo_transport_event_handler);
+
+	dn = dev_of_node(pogo_transport->dev);
+	if (!dn) {
+		dev_err(pogo_transport->dev, "of node not found\n");
+		ret = -EINVAL;
+		goto destroy_worker;
+	}
+
+	ret = init_regulator(pogo_transport);
+	if (ret)
+		goto destroy_worker;
+
+	pogo_psy_name = (char *)of_get_property(dn, "pogo-psy-name", NULL);
+	if (!pogo_psy_name) {
+		dev_err(pogo_transport->dev, "pogo-psy-name not set\n");
+		ret = -EINVAL;
+		goto destroy_worker;
+	}
+
+	pogo_transport->pogo_psy = power_supply_get_by_name(pogo_psy_name);
+	if (IS_ERR_OR_NULL(pogo_transport->pogo_psy)) {
+		dev_err(pogo_transport->dev, "pogo psy not up\n");
+		ret = -EPROBE_DEFER;
+		goto destroy_worker;
+	}
+
+	pogo_transport->extcon = devm_extcon_dev_allocate(pogo_transport->dev, pogo_extcon_cable);
+	if (IS_ERR(pogo_transport->extcon)) {
+		dev_err(pogo_transport->dev, "error allocating extcon: %ld\n",
+			PTR_ERR(pogo_transport->extcon));
+		ret = PTR_ERR(pogo_transport->extcon);
+		goto psy_put;
+	}
+
+	ret = devm_extcon_dev_register(pogo_transport->dev, pogo_transport->extcon);
+	if (ret < 0) {
+		dev_err(chip->dev, "failed to register extcon device:%d\n", ret);
+		goto psy_put;
+	}
+
+	pogo_transport->charger_mode_votable = gvotable_election_get_handle(GBMS_MODE_VOTABLE);
+	if (IS_ERR_OR_NULL(pogo_transport->charger_mode_votable)) {
+		dev_err(pogo_transport->dev, "GBMS_MODE_VOTABLE get failed %ld\n",
+			PTR_ERR(pogo_transport->charger_mode_votable));
+		ret = -EPROBE_DEFER;
+		goto psy_put;
+	}
+
+	pogo_transport->equal_priority = of_property_read_bool(pogo_transport->dev->of_node,
+							       "equal-priority");
+
+	ret = init_pogo_ovp_gpio(pogo_transport);
+	if (ret) {
+		dev_err(pogo_transport->dev, "init_pogo_ovp_gpio error:%d\n", ret);
+		goto psy_put;
+	}
+
+	ret = init_pogo_gpio(pogo_transport);
+	if (ret) {
+		dev_err(pogo_transport->dev, "init_pogo_gpio error:%d\n", ret);
+		goto psy_put;
+	}
+
+	pogo_transport->hub_embedded = of_property_read_bool(dn, "hub-embedded");
+	if (pogo_transport->hub_embedded) {
+		ret = init_hub_gpio(pogo_transport);
+		if (ret)
+			goto psy_put;
+	}
+
+	/*
+	 * modparam_state_machine_enable
+	 * 0 or unset: If property "legacy-event-driven" is found in device tree, disable the state
+	 *	       machine. Otherwise, enable/disable the state machine based on
+	 *	       DEFAULT_STATE_MACHINE_ENABLE.
+	 * 1: Enable the state machine
+	 * 2: Disable the state machine
+	 */
+	if (modparam_state_machine_enable == 1) {
+		pogo_transport->state_machine_enabled = true;
+	} else if (modparam_state_machine_enable == 2) {
+		pogo_transport->state_machine_enabled = false;
+	} else {
+		if (of_property_read_bool(pogo_transport->dev->of_node, "legacy-event-driven"))
+			pogo_transport->state_machine_enabled = false;
+		else
+			pogo_transport->state_machine_enabled = DEFAULT_STATE_MACHINE_ENABLE;
+	}
+
+	if (pogo_transport->state_machine_enabled) {
+		pogo_transport_set_state(pogo_transport, STANDBY, 0);
+		pogo_transport->wait_for_suspend = true;
+		pogo_transport->lc_stage = STAGE_UNKNOWN;
+	}
+
+	if (modparam_pogo_accessory_enable) {
+		ret = init_acc_gpio(pogo_transport);
+		if (ret)
+			goto psy_put;
+		pogo_transport->accessory_detection_enabled = modparam_pogo_accessory_enable;
+	} else if (of_property_read_bool(dn, "pogo-acc-capable") ||
+		   of_property_read_bool(dn, "pogo-acc-hall-only")) {
+		ret = init_acc_gpio(pogo_transport);
+		if (ret)
+			goto psy_put;
+		if (of_property_read_bool(dn, "pogo-acc-capable"))
+			pogo_transport->accessory_detection_enabled = ENABLED;
+		else
+			pogo_transport->accessory_detection_enabled = HALL_ONLY;
+	}
+
+	if (pogo_transport->pogo_acc_gpio > 0) {
+		pogo_transport->acc_charger_psy_name =
+				(char *)of_get_property(dn, "acc-charger-psy-name", NULL);
+		if (!pogo_transport->acc_charger_psy_name)
+			dev_info(pogo_transport->dev, "acc-charger-psy-name not set\n");
+
+		pogo_transport->lc_delay_check_ms = LC_DELAY_CHECK_MS;
+		pogo_transport->lc_disable_ms = LC_DISABLE_MS;
+		pogo_transport->lc_enable_ms = LC_ENABLE_MS;
+		pogo_transport->lc_bootup_ms = LC_BOOTUP_MS;
+		pogo_transport->acc_charging_timeout_sec = ACC_CHARGING_TIMEOUT_SEC;
+		pogo_transport->acc_charging_full_begin_ns = 0;
+		pogo_transport->acc_discharging_begin_ns = 0;
+	}
+
+	pogo_transport->disable_voltage_detection =
+		of_property_read_bool(dn, "disable-voltage-detection");
+
+	ret = init_pogo_irqs(pogo_transport);
+	if (ret) {
+		dev_err(pogo_transport->dev, "init_pogo_irqs error:%d\n", ret);
+		goto psy_put;
+	}
+
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+	pogo_transport_init_debugfs(pogo_transport);
+#endif
+
+	register_data_active_callback(data_active_changed, pogo_transport);
+	register_orientation_callback(orientation_changed, pogo_transport);
+	register_bus_suspend_callback(usb_bus_suspend_resume, pogo_transport);
+	pogo_transport->udev_nb.notifier_call = pogo_transport_udev_notify;
+	usb_register_notify(&pogo_transport->udev_nb);
+	pogo_transport->reboot_nb.notifier_call = pogo_transport_reboot_notify;
+	register_reboot_notifier(&pogo_transport->reboot_nb);
+	/* run once in case orientation has changed before registering the callback */
+	orientation_changed((void *)pogo_transport);
+	dev_info(&pdev->dev, "force usb:%d\n", modparam_force_usb ? 1 : 0);
+	dev_info(&pdev->dev, "state machine:%u\n", pogo_transport->state_machine_enabled);
+	put_device(&data_client->dev);
+	of_node_put(data_np);
+	return 0;
+
+psy_put:
+	if (pogo_transport->acc_charger_psy)
+		power_supply_put(pogo_transport->acc_charger_psy);
+	power_supply_put(pogo_transport->pogo_psy);
+destroy_worker:
+	kthread_destroy_worker(pogo_transport->wq);
+unreg_logbuffer:
+	logbuffer_unregister(pogo_transport->log);
+put_client:
+	put_device(&data_client->dev);
+free_np:
+	of_node_put(data_np);
+	return ret;
+}
+
+static int pogo_transport_remove(struct platform_device *pdev)
+{
+	struct pogo_transport *pogo_transport = platform_get_drvdata(pdev);
+	struct dentry *dentry;
+	int ret;
+
+	unregister_reboot_notifier(&pogo_transport->reboot_nb);
+	usb_unregister_notify(&pogo_transport->udev_nb);
+
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+	dentry = debugfs_lookup("pogo_transport", NULL);
+	if (IS_ERR(dentry)) {
+		dev_err(pogo_transport->dev, "%s: Failed to lookup debugfs dir\n", __func__);
+	} else {
+		debugfs_remove(dentry);
+		dput(dentry);
+	}
+#endif
+
+	if (pogo_transport->hub_ldo && regulator_is_enabled(pogo_transport->hub_ldo) > 0)
+		regulator_disable(pogo_transport->hub_ldo);
+
+	ret = pogo_transport_acc_regulator(pogo_transport, false);
+	if (ret)
+		dev_err(pogo_transport->dev, "%s: Failed to disable acc ldo %d\n", __func__, ret);
+
+	if (pogo_transport->acc_detect_ldo &&
+	    regulator_is_enabled(pogo_transport->acc_detect_ldo) > 0)
+		regulator_disable(pogo_transport->acc_detect_ldo);
+
+	if (pogo_transport->pogo_acc_irq > 0) {
+		disable_irq_wake(pogo_transport->pogo_acc_irq);
+		devm_free_irq(pogo_transport->dev, pogo_transport->pogo_acc_irq, pogo_transport);
+	}
+	disable_irq_wake(pogo_transport->pogo_irq);
+	devm_free_irq(pogo_transport->dev, pogo_transport->pogo_irq, pogo_transport);
+	if (pogo_transport->acc_charger_psy)
+		power_supply_put(pogo_transport->acc_charger_psy);
+	power_supply_put(pogo_transport->pogo_psy);
+	kthread_destroy_worker(pogo_transport->wq);
+	logbuffer_unregister(pogo_transport->log);
+
+	return 0;
+}
+
+/*-------------------------------------------------------------------------*/
+/* Event triggering part.2                                                 */
+/*-------------------------------------------------------------------------*/
+
+#define POGO_TRANSPORT_RO_ATTR(_name)                                                           \
+static ssize_t _name##_show(struct device *dev, struct device_attribute *attr, char *buf)       \
+{                                                                                               \
+	struct pogo_transport *pogo_transport  = dev_get_drvdata(dev);                          \
+	return sysfs_emit(buf, "%d\n", pogo_transport->_name);                                  \
+}                                                                                               \
+static DEVICE_ATTR_RO(_name)
+POGO_TRANSPORT_RO_ATTR(equal_priority);
+POGO_TRANSPORT_RO_ATTR(pogo_usb_active);
+
+static ssize_t move_data_to_usb_store(struct device *dev, struct device_attribute *attr,
+				      const char *buf, size_t size)
+{
+	struct pogo_transport *pogo_transport = dev_get_drvdata(dev);
+	u8 enable;
+
+	if (kstrtou8(buf, 0, &enable))
+		return -EINVAL;
+
+	if (enable != 1)
+		return -EINVAL;
+
+	if (pogo_transport->state_machine_enabled)
+		pogo_transport_queue_event(pogo_transport, EVENT_ENABLE_USB_DATA);
+	else
+		pogo_transport_event(pogo_transport, EVENT_MOVE_DATA_TO_USB, 0);
+
+	return size;
+}
+static DEVICE_ATTR_WO(move_data_to_usb);
+
+static ssize_t force_pogo_store(struct device *dev, struct device_attribute *attr, const char *buf,
+				size_t size)
+{
+	struct pogo_transport *pogo_transport = dev_get_drvdata(dev);
+	bool force_pogo;
+
+	if (kstrtobool(buf, &force_pogo))
+		return -EINVAL;
+
+	if (pogo_transport->force_pogo == force_pogo)
+		return size;
+
+	pogo_transport->force_pogo = force_pogo;
+	if (force_pogo && !pogo_transport->state_machine_enabled)
+		pogo_transport_event(pogo_transport, EVENT_MOVE_DATA_TO_POGO, 0);
+
+	if (force_pogo && pogo_transport->state_machine_enabled)
+		pogo_transport_queue_event(pogo_transport, EVENT_FORCE_POGO);
+
+	return size;
+}
+
+static ssize_t force_pogo_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+	struct pogo_transport *pogo_transport  = dev_get_drvdata(dev);
+	return sysfs_emit(buf, "%u\n", pogo_transport->force_pogo);
+}
+static DEVICE_ATTR_RW(force_pogo);
+
+static ssize_t enable_hub_store(struct device *dev, struct device_attribute *attr, const char *buf,
+				size_t size)
+{
+	struct pogo_transport *pogo_transport = dev_get_drvdata(dev);
+	u8 enable_hub;
+
+	if (pogo_transport->state_machine_enabled) {
+		logbuffer_log(pogo_transport->log, "state machine enabled; ignore enable_hub");
+		return size;
+	}
+
+	if (!pogo_transport->hub_embedded)
+		return size;
+
+	if (kstrtou8(buf, 0, &enable_hub))
+		return -EINVAL;
+
+	if (pogo_transport->pogo_hub_active == !!enable_hub)
+		return size;
+
+	/*
+	 * KEEP_HUB_PATH is only for engineering tests where the embedded hub remains enabled after
+	 * undocking.
+	 */
+	if (enable_hub == KEEP_HUB_PATH)
+		pogo_transport->force_hub_enabled = true;
+	else
+		pogo_transport->force_hub_enabled = false;
+
+	dev_info(pogo_transport->dev, "hub %u, force_hub_enabled %u\n", enable_hub,
+		 pogo_transport->force_hub_enabled);
+	if (enable_hub)
+		pogo_transport_event(pogo_transport, EVENT_ENABLE_HUB, 0);
+	else
+		pogo_transport_event(pogo_transport, EVENT_DISABLE_HUB, 0);
+
+	return size;
+}
+
+static ssize_t enable_hub_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+	struct pogo_transport *pogo_transport  = dev_get_drvdata(dev);
+	return sysfs_emit(buf, "%u\n", pogo_transport->pogo_hub_active);
+}
+static DEVICE_ATTR_RW(enable_hub);
+
+static ssize_t hall1_s_store(struct device *dev, struct device_attribute *attr, const char *buf,
+			     size_t size)
+{
+	struct pogo_transport *pogo_transport = dev_get_drvdata(dev);
+	u8 enable_acc_detect;
+
+	if (!pogo_transport->acc_detect_ldo)
+		return size;
+
+	if (!pogo_transport->accessory_detection_enabled) {
+		logbuffer_logk(pogo_transport->log, LOGLEVEL_INFO, "%s:Accessory detection disabled",
+			       __func__);
+		return size;
+	}
+
+	if (kstrtou8(buf, 0, &enable_acc_detect))
+		return -EINVAL;
+
+	if (pogo_transport->hall1_s_state == !!enable_acc_detect)
+		return size;
+
+	pogo_transport->hall1_s_state = !!enable_acc_detect;
+
+	/*
+	 * KEEP_USB_PATH is only for factory tests where the USB connection needs to stay at USB-C
+	 * after the accessory is attached.
+	 */
+	if (enable_acc_detect == KEEP_USB_PATH)
+		pogo_transport->mfg_acc_test = true;
+	else
+		pogo_transport->mfg_acc_test = false;
+
+	logbuffer_log(pogo_transport->log, "H1S: accessory detection %u, mfg %u", enable_acc_detect,
+		      pogo_transport->mfg_acc_test);
+
+	if (pogo_transport->state_machine_enabled) {
+		pogo_transport_queue_event(pogo_transport, EVENT_HES_H1S_CHANGED);
+		return size;
+	}
+
+	if (enable_acc_detect)
+		pogo_transport_event(pogo_transport, EVENT_HALL_SENSOR_ACC_DETECTED, 0);
+	else
+		pogo_transport_event(pogo_transport, EVENT_HALL_SENSOR_ACC_UNDOCKED, 0);
+
+	return size;
+}
+static DEVICE_ATTR_WO(hall1_s);
+
+static ssize_t hall1_n_store(struct device *dev, struct device_attribute *attr, const char *buf,
+			     size_t size)
+{
+	struct pogo_transport *pogo_transport = dev_get_drvdata(dev);
+	u8 data;
+
+	/* Reserved for HES1 Malfunction detection */
+
+	if (kstrtou8(buf, 0, &data))
+		return -EINVAL;
+
+	logbuffer_log(pogo_transport->log, "H1N: %u", data);
+	return size;
+}
+static DEVICE_ATTR_WO(hall1_n);
+
+static ssize_t hall2_s_store(struct device *dev, struct device_attribute *attr, const char *buf,
+			     size_t size)
+{
+	struct pogo_transport *pogo_transport = dev_get_drvdata(dev);
+	u8 data;
+
+	if (kstrtou8(buf, 0, &data))
+		return -EINVAL;
+
+	if (pogo_transport->lc == !!data)
+		return size;
+
+	pogo_transport->lc = !!data;
+
+	if (!pogo_transport->lc) {
+		alarm_cancel(&pogo_transport->lc_check_alarm);
+		kthread_cancel_work_sync(&pogo_transport->lc_work);
+	}
+
+	logbuffer_log(pogo_transport->log, "H2S: %u", pogo_transport->lc);
+
+	if (pogo_transport->state_machine_enabled)
+		pogo_transport_queue_event(pogo_transport, EVENT_LC_STATUS_CHANGED);
+
+	return size;
+}
+static DEVICE_ATTR_WO(hall2_s);
+
+static ssize_t acc_detect_debounce_ms_store(struct device *dev, struct device_attribute *attr,
+					    const char *buf, size_t size)
+{
+	struct pogo_transport *pogo_transport = dev_get_drvdata(dev);
+	unsigned int debounce_ms;
+	int ret;
+
+	if (kstrtouint(buf, 0, &debounce_ms))
+		return -EINVAL;
+
+	ret = gpio_set_debounce(pogo_transport->pogo_acc_gpio, debounce_ms * 1000);
+	if (ret < 0) {
+		dev_info(pogo_transport->dev, "failed to set debounce, ret:%d\n", ret);
+		pogo_transport->pogo_acc_gpio_debounce_ms = debounce_ms;
+	}
+
+	return size;
+}
+
+static ssize_t acc_detect_debounce_ms_show(struct device *dev, struct device_attribute *attr,
+					   char *buf)
+{
+	struct pogo_transport *pogo_transport  = dev_get_drvdata(dev);
+	return sysfs_emit(buf, "%u\n", pogo_transport->pogo_acc_gpio_debounce_ms);
+}
+static DEVICE_ATTR_RW(acc_detect_debounce_ms);
+
+static struct attribute *pogo_transport_attrs[] = {
+	&dev_attr_move_data_to_usb.attr,
+	&dev_attr_equal_priority.attr,
+	&dev_attr_pogo_usb_active.attr,
+	&dev_attr_force_pogo.attr,
+	&dev_attr_enable_hub.attr,
+	&dev_attr_hall1_s.attr,
+	&dev_attr_hall1_n.attr,
+	&dev_attr_hall2_s.attr,
+	&dev_attr_acc_detect_debounce_ms.attr,
+	NULL,
+};
+ATTRIBUTE_GROUPS(pogo_transport);
+
+static const struct of_device_id pogo_transport_of_match[] = {
+	{.compatible = "pogo-transport"},
+	{},
+};
+MODULE_DEVICE_TABLE(of, pogo_transport_of_match);
+
+static struct platform_driver pogo_transport_driver = {
+	.driver = {
+		   .name = "pogo-transport",
+		   .owner = THIS_MODULE,
+		   .of_match_table = pogo_transport_of_match,
+		   .dev_groups = pogo_transport_groups,
+		   },
+	.probe = pogo_transport_probe,
+	.remove = pogo_transport_remove,
+};
+
+module_platform_driver(pogo_transport_driver);
+
+MODULE_DESCRIPTION("Pogo data management");
+MODULE_AUTHOR("Badhri Jagan Sridharan <badhri@google.com>");
+MODULE_LICENSE("GPL");
diff --git a/tangorpro_defconfig b/tangorpro_defconfig
new file mode 100644
index 0000000..71bfd40
--- /dev/null
+++ b/tangorpro_defconfig
@@ -0,0 +1,13 @@
+# In-tree kernel configs. Note that these configs are only applied to
+# non-GKI modules. Make sure they're compatible with GKI.
+CONFIG_REGULATOR_RT4801=m
+CONFIG_REGULATOR_TPS65132=m
+CONFIG_BACKLIGHT_LP855X=m
+CONFIG_LEDS_PWM=m
+
+# private/google-modules/touch/common/Kconfig
+CONFIG_TOUCHSCREEN_HEATMAP=m
+CONFIG_TOUCHSCREEN_TBN=m
+CONFIG_TOUCHSCREEN_OFFLOAD=m
+CONFIG_GOOG_TOUCH_INTERFACE=m
+CONFIG_GOOG_USI_STYLUS=m
diff --git a/vendor_dlkm.blocklist.tangorpro b/vendor_dlkm.blocklist.tangorpro
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/vendor_dlkm.blocklist.tangorpro
diff --git a/vendor_ramdisk.modules.tangorpro b/vendor_ramdisk.modules.tangorpro
new file mode 100644
index 0000000..21518e9
--- /dev/null
+++ b/vendor_ramdisk.modules.tangorpro
@@ -0,0 +1,16 @@
+kernel/drivers/video/backlight/lp855x_bl.ko
+kernel/drivers/regulator/rt4801-regulator.ko
+kernel/drivers/regulator/tps65132-regulator.ko
+kernel/drivers/leds/leds-pwm.ko
+extra/private/google-modules/soc/gs/drivers/video/backlight/rt4539_bl.ko
+extra/private/google-modules/bms/google_dock.ko
+extra/private/devices/google/tangorpro/display/panel-boe-ts110f5mlg0.ko
+extra/private/devices/google/tangorpro/display/panel-csot-ppa957db2d.ko
+extra/private/devices/google/tangorpro/pogo/pogo_transport.ko
+extra/private/google-modules/amplifiers/cs35l41/snd-soc-cs35l41.ko
+extra/private/google-modules/amplifiers/cs35l41/snd-soc-cs35l41-spi.ko
+extra/private/google-modules/amplifiers/snd_soc_wm_adsp/snd-soc-wm-adsp.ko
+extra/private/google-modules/gps/broadcom/bcm47765/bcm47765.ko
+extra/private/google-modules/touch/common/touch_bus_negotiator.ko
+extra/private/google-modules/touch/common/heatmap.ko
+extra/private/google-modules/touch/common/touch_offload.ko