arm64: dts: mediatek: Introduce MT8186 Steelix
authorChen-Yu Tsai <wenst@chromium.org>
Fri, 26 Jan 2024 08:37:56 +0000 (16:37 +0800)
committerAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Mon, 12 Feb 2024 12:37:01 +0000 (13:37 +0100)
The MT8186 Steelix, also known as the Lenovo 300e Yoga Chromebook Gen 4,
is a convertible device based on a common design of the same name. The
device comes in different variants. Of them, whether a world facing
camera is integrated is the only differentiating factor between the
two device trees added. The different SKU IDs describe this alone.

The other device difference is the trackpad component used. This is
simply handled by having both possible components described in the
device tree, and letting the implementation figure out which one is
actually available. The system bootloader / firmware does not
differentiate this in that they share the same SKU IDs.

Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20240126083802.2728610-8-wenst@chromium.org
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
arch/arm64/boot/dts/mediatek/Makefile
arch/arm64/boot/dts/mediatek/mt8186-corsola-steelix-sku131072.dts [new file with mode: 0644]
arch/arm64/boot/dts/mediatek/mt8186-corsola-steelix-sku131073.dts [new file with mode: 0644]
arch/arm64/boot/dts/mediatek/mt8186-corsola-steelix.dtsi [new file with mode: 0644]

index 22812b175736c7b4c89d75755c6f647f32a831cc..0daa1ad27c221b48bf4f6bebc5195cdbf00db6d5 100644 (file)
@@ -51,6 +51,8 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += mt8183-kukui-kodama-sku32.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8183-kukui-krane-sku0.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8183-kukui-krane-sku176.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8183-pumpkin.dtb
+dtb-$(CONFIG_ARCH_MEDIATEK) += mt8186-corsola-steelix-sku131072.dtb
+dtb-$(CONFIG_ARCH_MEDIATEK) += mt8186-corsola-steelix-sku131073.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8186-corsola-tentacool-sku327681.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8186-corsola-tentacool-sku327683.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8186-corsola-tentacruel-sku262144.dtb
diff --git a/arch/arm64/boot/dts/mediatek/mt8186-corsola-steelix-sku131072.dts b/arch/arm64/boot/dts/mediatek/mt8186-corsola-steelix-sku131072.dts
new file mode 100644 (file)
index 0000000..eae17bc
--- /dev/null
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright 2022 Google LLC
+ */
+
+/dts-v1/;
+#include "mt8186-corsola-steelix.dtsi"
+
+/ {
+       model = "Google Steelix board";
+       compatible = "google,steelix-sku131072", "google,steelix",
+                    "mediatek,mt8186";
+       chassis-type = "convertible";
+};
+
+&mt6366codec {
+       mediatek,dmic-mode = <0>; /* two-wire */
+};
diff --git a/arch/arm64/boot/dts/mediatek/mt8186-corsola-steelix-sku131073.dts b/arch/arm64/boot/dts/mediatek/mt8186-corsola-steelix-sku131073.dts
new file mode 100644 (file)
index 0000000..a55375b
--- /dev/null
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright 2022 Google LLC
+ */
+
+/dts-v1/;
+#include "mt8186-corsola-steelix.dtsi"
+
+/ {
+       model = "Google Steelix board";
+       compatible = "google,steelix-sku131073", "google,steelix",
+                    "mediatek,mt8186";
+       chassis-type = "convertible";
+};
+
+&mt6366codec {
+       mediatek,dmic-mode = <1>; /* one-wire */
+};
diff --git a/arch/arm64/boot/dts/mediatek/mt8186-corsola-steelix.dtsi b/arch/arm64/boot/dts/mediatek/mt8186-corsola-steelix.dtsi
new file mode 100644 (file)
index 0000000..e74e886
--- /dev/null
@@ -0,0 +1,199 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright 2022 Google LLC
+ */
+
+/dts-v1/;
+#include "mt8186-corsola.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/{
+       pp1000_edpbrdg: regulator-pp1000-edpbrdg {
+               compatible = "regulator-fixed";
+               regulator-name = "pp1000_edpbrdg";
+               pinctrl-names = "default";
+               pinctrl-0 = <&en_pp1000_edpbrdg>;
+               enable-active-high;
+               regulator-boot-on;
+               gpio = <&pio 29 GPIO_ACTIVE_HIGH>;
+               vin-supply = <&pp3300_z2>;
+       };
+
+       pp1800_edpbrdg_dx: regulator-pp1800-edpbrdg-dx {
+               compatible = "regulator-fixed";
+               regulator-name = "pp1800_edpbrdg_dx";
+               pinctrl-names = "default";
+               pinctrl-0 = <&en_pp1800_edpbrdg>;
+               enable-active-high;
+               regulator-boot-on;
+               gpio = <&pio 30 GPIO_ACTIVE_HIGH>;
+               vin-supply = <&mt6366_vio18_reg>;
+       };
+
+       pp3300_edp_dx: regulator-pp3300-edp-dx {
+               compatible = "regulator-fixed";
+               regulator-name = "pp3300_edp_dx";
+               pinctrl-names = "default";
+               pinctrl-0 = <&en_pp3300_edpbrdg>;
+               enable-active-high;
+               regulator-boot-on;
+               gpio = <&pio 31 GPIO_ACTIVE_HIGH>;
+               vin-supply = <&pp3300_z2>;
+       };
+};
+
+&dsi_out {
+       remote-endpoint = <&anx7625_in>;
+};
+
+&i2c0 {
+       clock-frequency = <400000>;
+
+       anx_bridge: anx7625@58 {
+               compatible = "analogix,anx7625";
+               reg = <0x58>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&anx7625_pins>;
+               enable-gpios = <&pio 96 GPIO_ACTIVE_HIGH>;
+               reset-gpios = <&pio 98 GPIO_ACTIVE_HIGH>;
+               vdd10-supply = <&pp1000_edpbrdg>;
+               vdd18-supply = <&pp1800_edpbrdg_dx>;
+               vdd33-supply = <&pp3300_edp_dx>;
+               analogix,lane0-swing = /bits/ 8 <0x70 0x30>;
+               analogix,lane1-swing = /bits/ 8 <0x70 0x30>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+
+                               anx7625_in: endpoint {
+                                       remote-endpoint = <&dsi_out>;
+                                       data-lanes = <0 1 2 3>;
+                               };
+                       };
+
+                       port@1 {
+                               reg = <1>;
+
+                               anx7625_out: endpoint {
+                                       remote-endpoint = <&panel_in>;
+                               };
+                       };
+               };
+
+               aux-bus {
+                       panel: panel {
+                               compatible = "edp-panel";
+                               power-supply = <&pp3300_disp_x>;
+                               backlight = <&backlight_lcd0>;
+
+                               port {
+                                       panel_in: endpoint {
+                                               remote-endpoint = <&anx7625_out>;
+                                       };
+                               };
+                       };
+               };
+       };
+};
+
+&i2c1 {
+       touchscreen: touchscreen@5d {
+               compatible = "goodix,gt7375p";
+               reg = <0x5d>;
+               interrupts-extended = <&pio 12 IRQ_TYPE_EDGE_FALLING>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&touchscreen_pins>;
+               reset-gpios = <&pio 60 GPIO_ACTIVE_LOW>;
+               vdd-supply = <&pp3300_s3>;
+               goodix,no-reset-during-suspend;
+       };
+};
+
+&i2c2 {
+       i2c-scl-internal-delay-ns = <22000>;
+
+       /* second source component */
+       trackpad@2c {
+               compatible = "hid-over-i2c";
+               reg = <0x2c>;
+               hid-descr-addr = <0x20>;
+               interrupts-extended = <&pio 11 IRQ_TYPE_LEVEL_LOW>;
+               vdd-supply = <&pp3300_s3>;
+               wakeup-source;
+       };
+};
+
+&keyboard_controller {
+       function-row-physmap = <
+               MATRIX_KEY(0x00, 0x02, 0)       /* T1 */
+               MATRIX_KEY(0x03, 0x02, 0)       /* T2 */
+               MATRIX_KEY(0x02, 0x02, 0)       /* T3 */
+               MATRIX_KEY(0x01, 0x02, 0)       /* T4 */
+               MATRIX_KEY(0x03, 0x04, 0)       /* T5 */
+               MATRIX_KEY(0x02, 0x04, 0)       /* T6 */
+               MATRIX_KEY(0x01, 0x04, 0)       /* T7 */
+               MATRIX_KEY(0x02, 0x09, 0)       /* T8 */
+               MATRIX_KEY(0x01, 0x09, 0)       /* T9 */
+               MATRIX_KEY(0x00, 0x04, 0)       /* T10 */
+       >;
+
+       linux,keymap = <
+               MATRIX_KEY(0x00, 0x02, KEY_BACK)
+               MATRIX_KEY(0x03, 0x02, KEY_REFRESH)
+               MATRIX_KEY(0x02, 0x02, KEY_ZOOM)
+               MATRIX_KEY(0x01, 0x02, KEY_SCALE)
+               MATRIX_KEY(0x03, 0x04, KEY_BRIGHTNESSDOWN)
+               MATRIX_KEY(0x02, 0x04, KEY_BRIGHTNESSUP)
+               MATRIX_KEY(0x01, 0x04, KEY_MICMUTE)
+               MATRIX_KEY(0x02, 0x09, KEY_MUTE)
+               MATRIX_KEY(0x01, 0x09, KEY_VOLUMEDOWN)
+               MATRIX_KEY(0x00, 0x04, KEY_VOLUMEUP)
+               CROS_STD_MAIN_KEYMAP
+       >;
+};
+
+&pio {
+       anx7625_pins: anx7625-pins {
+               pins-int {
+                       pinmux = <PINMUX_GPIO9__FUNC_GPIO9>;
+                       input-enable;
+                       bias-disable;
+               };
+
+               pins-reset {
+                       pinmux = <PINMUX_GPIO98__FUNC_GPIO98>;
+                       output-low;
+               };
+
+               pins-power-en {
+                       pinmux = <PINMUX_GPIO96__FUNC_GPIO96>;
+                       output-low;
+               };
+       };
+
+       en_pp1000_edpbrdg: pp1000-edpbrdg-en-pins {
+               pins-vreg-en {
+                       pinmux = <PINMUX_GPIO29__FUNC_GPIO29>;
+                       output-low;
+               };
+       };
+
+       en_pp1800_edpbrdg: pp1800-edpbrdg-en-pins {
+               pins-vreg-en {
+                       pinmux = <PINMUX_GPIO30__FUNC_GPIO30>;
+                       output-low;
+               };
+       };
+
+       en_pp3300_edpbrdg: pp3300-edpbrdg-en-pins {
+               pins-vreg-en {
+                       pinmux = <PINMUX_GPIO31__FUNC_GPIO31>;
+                       output-low;
+               };
+       };
+};