From 363da7af86d2a46836c08a17dd362eff6d1e95cc Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Tue, 13 Apr 2021 20:22:47 +0300 Subject: [PATCH 1/7] WIP: ARM: tegra: Add device-tree for ASUS Transformer Pad LTE TF300TL Add device-tree for ASUS Transformer Pad LTE TF300TL, which is NVIDIA Tegra30-based tablet device. Co-developed-by: Ion Agorria Signed-off-by: Ion Agorria Signed-off-by: Svyatoslav Ryhel --- arch/arm/boot/dts/Makefile | 1 + arch/arm/boot/dts/tegra30-asus-tf300tl.dts | 879 +++++++++++++++++++++ 2 files changed, 880 insertions(+) create mode 100644 arch/arm/boot/dts/tegra30-asus-tf300tl.dts diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 3445388e452b5..5d69d7ca9193c 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -1355,6 +1355,7 @@ dtb-$(CONFIG_ARCH_TEGRA_3x_SOC) += \ tegra30-asus-tf201.dtb \ tegra30-asus-tf300t.dtb \ tegra30-asus-tf300tg.dtb \ + tegra30-asus-tf300tl.dtb \ tegra30-asus-tf700t.dtb \ tegra30-beaver.dtb \ tegra30-cardhu-a02.dtb \ diff --git a/arch/arm/boot/dts/tegra30-asus-tf300tl.dts b/arch/arm/boot/dts/tegra30-asus-tf300tl.dts new file mode 100644 index 0000000000000..e490f06920045 --- /dev/null +++ b/arch/arm/boot/dts/tegra30-asus-tf300tl.dts @@ -0,0 +1,879 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; + +/* This dts file describes the Asus Transformer Pad LTE TF300TL tablet */ +/* CPU Speedo ID 7, Soc Speedo ID 1, CPU Process: 3, Core Process: 0 */ + +#include "tegra30-asus-transformer-common.dtsi" +#include "tegra30-asus-lvds-display.dtsi" + +/ { + model = "Asus Transformer Pad LTE TF300TL"; + compatible = "asus,tf300tl", "nvidia,tegra30"; + + gpio@6000d000 { + tf300tl-init-hog { + gpio-hog; + gpios = ; + output-low; + }; + }; + + pinmux@70000868 { + state_default: pinmux { + lcd_pwr2_pc6 { + nvidia,pins = "lcd_pwr2_pc6", + "lcd_dc1_pd2"; + nvidia,function = "displaya"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + pbb3 { + nvidia,pins = "pbb3"; + nvidia,function = "vgp3"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + pbb7 { + nvidia,pins = "pbb7"; + nvidia,function = "i2s4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + kb_row7_pr7 { + nvidia,pins = "kb_row7_pr7"; + nvidia,function = "kbc"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + gmi_cs4_n_pk2 { + nvidia,pins = "gmi_cs4_n_pk2"; + nvidia,function = "gmi"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* TF300TL specific pinmux reconfiguration */ + + ulpi_data5_po6 { + nvidia,pins = "ulpi_data5_po6"; + nvidia,function = "uarta"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + dap3_din_pp1 { + nvidia,pins = "dap3_din_pp1"; + nvidia,function = "i2s2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + crt_hsync_pv6 { + nvidia,pins = "crt_hsync_pv6"; + nvidia,function = "crt"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + crt_vsync_pv7 { + nvidia,pins = "crt_vsync_pv7"; + nvidia,function = "crt"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + pu5 { + nvidia,pins = "pu5"; + nvidia,function = "pwm2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + clk3_out_pee0 { + nvidia,pins = "clk3_out_pee0"; + nvidia,function = "extperiph3"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + clk3_req_pee1 { + nvidia,pins = "clk3_req_pee1"; + nvidia,function = "dev3"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + dap1_fs_pn0 { + nvidia,pins = "dap1_fs_pn0", + "dap1_sclk_pn3"; + nvidia,function = "i2s0"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + dap1_din_pn1 { + nvidia,pins = "dap1_din_pn1"; + nvidia,function = "i2s0"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + dap1_dout_pn2 { + nvidia,pins = "dap1_dout_pn2"; + nvidia,function = "i2s0"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + clk1_req_pee2 { + nvidia,pins = "clk1_req_pee2"; + nvidia,function = "dap"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + spi2_mosi_px0 { + nvidia,pins = "spi2_mosi_px0"; + nvidia,function = "spi2"; + }; + + spi1_sck_px5 { + nvidia,pins = "spi1_sck_px5"; + nvidia,function = "spi1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + spi1_miso_px7 { + nvidia,pins = "spi1_miso_px7"; + nvidia,function = "spi1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + spi2_cs2_n_pw3 { + nvidia,pins = "spi2_cs2_n_pw3"; + nvidia,function = "spi2"; + nvidia,tristate = ; + }; + }; + }; + + serial@70006200 { + /* Azurewave AW-NH615 BCM4329B1 */ + bluetooth { + compatible = "brcm,bcm4329-bt"; + }; + }; + + i2c@7000c000 { + /* Fortemedia FM34NE voice processor */ + dsp@60 { + compatible = "asus,tf300t-dsp", "fortemedia,fm34"; + reg = <0x60>; + + bypass-gpios = <&gpio TEGRA_GPIO(BB, 6) GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio TEGRA_GPIO(O, 3) GPIO_ACTIVE_LOW>; + + vdd-supply = <&vdd_1v8_vio>; + + clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + clock-names = "mclk"; + + assigned-clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + assigned-clock-parents = <&tegra_car TEGRA30_CLK_EXTERN1>; + }; + }; + + i2c@7000c400 { + /* Elantech EKTH1036 touchscreen */ + touchscreen@10 { + compatible = "elan,ektf3624"; + reg = <0x10>; + + interrupt-parent = <&gpio>; + interrupts = ; + reset-gpios = <&gpio TEGRA_GPIO(H, 6) GPIO_ACTIVE_LOW>; + + vcc33-supply = <&vdd_3v3_sys>; + vccio-supply = <&vdd_3v3_sys>; + + touchscreen-size-x = <2240>; + touchscreen-size-y = <1408>; + touchscreen-inverted-y; + }; + }; + + i2c@7000c500 { + clock-frequency = <400000>; + + magnetometer@e { + mount-matrix = "-1", "0", "0", + "0", "-1", "0", + "0", "0", "1"; + }; + + gyroscope@68 { + mount-matrix = "-1", "0", "0", + "0", "1", "0", + "0", "0", "-1"; + + /* External I2C interface */ + i2c-gate { + accelerometer@f { + mount-matrix = "0", "-1", "0", + "-1", "0", "0", + "0", "0", "1"; + }; + }; + }; + }; + + i2c@7000d000 { + /* Realtek ALC5631 audio codec */ + rt5631: audio-codec@1a { + compatible = "realtek,rt5631"; + reg = <0x1a>; + }; + }; + + memory-controller@7000f000 { + emc-timings-0 { + /* Elpida 1GB 667MHZ */ + nvidia,ram-code = <0>; + + timing-25500000 { + clock-frequency = <25500000>; + + nvidia,emem-configuration = < 0x00020001 0xc0000020 + 0x00000001 0x00000001 0x00000002 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0502 0x74830303 0x001f0000 >; + }; + + timing-51000000 { + clock-frequency = <51000000>; + + nvidia,emem-configuration = < 0x00010001 0xc0000020 + 0x00000001 0x00000001 0x00000002 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0502 0x73430303 0x001f0000 >; + }; + + timing-102000000 { + clock-frequency = <102000000>; + + nvidia,emem-configuration = < 0x00000001 0xc0000030 + 0x00000001 0x00000001 0x00000003 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0503 0x72830504 0x001f0000 >; + }; + + timing-204000000 { + clock-frequency = <204000000>; + + nvidia,emem-configuration = < 0x00000003 0xc0000025 + 0x00000001 0x00000001 0x00000005 0x00000002 + 0x00000003 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0505 0x72440a06 0x001f0000 >; + }; + + timing-333500000 { + clock-frequency = <333500000>; + + nvidia,emem-configuration = < 0x00000005 0xc000003d + 0x00000001 0x00000002 0x00000008 0x00000004 + 0x00000004 0x00000001 0x00000002 0x00000007 + 0x00000002 0x00000002 0x00000003 0x00000006 + 0x06030202 0x000b0608 0x70850f09 0x001f0000 >; + }; + + timing-667000000 { + clock-frequency = <667000000>; + + nvidia,emem-configuration = < 0x0000000a 0xc0000079 + 0x00000003 0x00000004 0x00000010 0x0000000b + 0x0000000a 0x00000001 0x00000003 0x0000000b + 0x00000002 0x00000002 0x00000004 0x00000008 + 0x08040202 0x00130b10 0x70ea1f11 0x001f0000 >; + }; + }; + + emc-timings-1 { + /* Hynix 1GB 667MHZ */ + nvidia,ram-code = <1>; + + timing-25500000 { + clock-frequency = <25500000>; + + nvidia,emem-configuration = < 0x00020001 0xc0000020 + 0x00000001 0x00000001 0x00000002 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0502 0x74830303 0x001f0000 >; + }; + + timing-51000000 { + clock-frequency = <51000000>; + + nvidia,emem-configuration = < 0x00010001 0xc0000020 + 0x00000001 0x00000001 0x00000002 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0502 0x73430303 0x001f0000 >; + }; + + timing-102000000 { + clock-frequency = <102000000>; + + nvidia,emem-configuration = < 0x00000001 0xc0000030 + 0x00000001 0x00000001 0x00000003 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0503 0x72830504 0x001f0000 >; + }; + + timing-204000000 { + clock-frequency = <204000000>; + + nvidia,emem-configuration = < 0x00000003 0xc0000025 + 0x00000001 0x00000001 0x00000005 0x00000002 + 0x00000003 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0505 0x72440a06 0x001f0000 >; + }; + + timing-333500000 { + clock-frequency = <333500000>; + + nvidia,emem-configuration = < 0x00000005 0xc000003d + 0x00000001 0x00000002 0x00000008 0x00000004 + 0x00000004 0x00000001 0x00000002 0x00000007 + 0x00000002 0x00000002 0x00000003 0x00000006 + 0x06030202 0x000b0608 0x70850f09 0x001f0000 >; + }; + + timing-667000000 { + clock-frequency = <667000000>; + + nvidia,emem-configuration = < 0x0000000a 0xc0000079 + 0x00000003 0x00000004 0x00000010 0x0000000b + 0x0000000a 0x00000001 0x00000003 0x0000000b + 0x00000002 0x00000002 0x00000004 0x00000008 + 0x08040202 0x00130b10 0x70ea1f11 0x001f0000 >; + }; + }; + }; + + memory-controller@7000f400 { + emc-timings-0 { + /* Elpida 1GB 667MHZ */ + nvidia,ram-code = <0>; + + timing-25500000 { + clock-frequency = <25500000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-dyn-self-ref; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x00000001 + 0x00000004 0x00000000 0x00000000 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000000 + 0x00000000 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x000000c0 0x00000000 0x00000030 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000005 0x00000005 + 0x00000004 0x00000001 0x00000000 0x00000004 + 0x00000005 0x000000c7 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000287 0xe8000000 0xff00ff00 >; + }; + + timing-51000000 { + clock-frequency = <51000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-dyn-self-ref; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x00000002 + 0x00000008 0x00000001 0x00000000 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000000 + 0x00000000 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x00000181 0x00000000 0x00000060 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000009 0x00000009 + 0x00000004 0x00000002 0x00000000 0x00000004 + 0x00000005 0x0000018e 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x8000040b 0xe8000000 0xff00ff00 >; + }; + + timing-102000000 { + clock-frequency = <102000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-dyn-self-ref; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x00000005 + 0x00000010 0x00000003 0x00000001 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000001 + 0x00000001 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x00000303 0x00000000 0x000000c0 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000012 0x00000012 + 0x00000004 0x00000004 0x00000000 0x00000004 + 0x00000005 0x0000031c 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000713 0xe8000000 0xff00ff00 >; + }; + + timing-204000000 { + clock-frequency = <204000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-dyn-self-ref; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x0000000a + 0x00000020 0x00000007 0x00000002 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000002 + 0x00000002 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000006 0x00000004 0x0000000a + 0x0000000b 0x00000607 0x00000000 0x00000181 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000023 0x00000023 + 0x00000004 0x00000007 0x00000000 0x00000004 + 0x00000005 0x00000638 0x00000007 0x00000004 + 0x00000000 0x00000000 0x00004288 0x004400a4 + 0x00008000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00020000 + 0x00000100 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000d22 0xe8000000 0xff00ff00 >; + }; + + timing-333500000 { + clock-frequency = <333500000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100002>; + nvidia,emc-mode-2 = <0x80200040>; + nvidia,emc-mode-reset = <0x80000321>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + + nvidia,emc-configuration = < 0x0000000f + 0x00000034 0x0000000a 0x00000003 0x00000003 + 0x00000008 0x00000002 0x00000009 0x00000003 + 0x00000003 0x00000002 0x00000001 0x00000000 + 0x00000004 0x00000006 0x00000004 0x0000000a + 0x0000000c 0x000009e9 0x00000000 0x0000027a + 0x00000001 0x00000008 0x00000001 0x00000000 + 0x00000007 0x0000000e 0x00000039 0x00000200 + 0x00000004 0x0000000a 0x00000000 0x00000004 + 0x00000005 0x00000a2a 0x00000000 0x00000004 + 0x00000000 0x00000000 0x00007088 0x002600a4 + 0x00008000 0x0003c000 0x0003c000 0x0003c000 + 0x0003c000 0x00014000 0x00014000 0x00014000 + 0x00014000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00050000 0x00050000 0x00050000 + 0x00050000 0x000002a0 0x0800013d 0x00000000 + 0x77fff884 0x01f1f508 0x05057404 0x54000007 + 0x080001e8 0x08000021 0x00000802 0x00020000 + 0x00000100 0x018b000c 0xa0f10000 0x00000000 + 0x00000000 0x800014d4 0xe8000000 0xff00ff89 >; + }; + + timing-667000000 { + clock-frequency = <667000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100002>; + nvidia,emc-mode-2 = <0x80200058>; + nvidia,emc-mode-reset = <0x80000b71>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x0000001f + 0x00000069 0x00000017 0x00000007 0x00000005 + 0x0000000c 0x00000003 0x00000011 0x00000007 + 0x00000007 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000b 0x00000009 0x0000000b + 0x00000011 0x00001412 0x00000000 0x00000504 + 0x00000002 0x0000000e 0x00000001 0x00000000 + 0x0000000c 0x00000016 0x00000072 0x00000200 + 0x00000005 0x00000015 0x00000000 0x00000006 + 0x00000007 0x00001453 0x0000000c 0x00000004 + 0x00000000 0x00000000 0x00005088 0xf00b0191 + 0x00008000 0x0000000a 0x0000000a 0x0000000a + 0x0000000a 0x0000000a 0x0000000a 0x0000000a + 0x0000000a 0x00018000 0x00018000 0x00018000 + 0x00018000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x0000000c 0x0000000c 0x0000000c + 0x0000000c 0x000002a0 0x0800013d 0x22220000 + 0x77fff884 0x01f1f501 0x07077404 0x54000000 + 0x080001e8 0x0a000021 0x00000802 0x00020000 + 0x00000100 0x0156000c 0xa0f10000 0x00000000 + 0x00000000 0x800028a5 0xe8000000 0xff00ff49 >; + }; + }; + + emc-timings-1 { + /* Hynix 1GB 667MHZ */ + nvidia,ram-code = <1>; + + timing-25500000 { + clock-frequency = <25500000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-dyn-self-ref; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x00000001 + 0x00000004 0x00000000 0x00000000 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000000 + 0x00000000 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x000000c0 0x00000000 0x00000030 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000005 0x00000005 + 0x00000004 0x00000001 0x00000000 0x00000004 + 0x00000005 0x000000c7 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000287 0xe8000000 0xff00ff00 >; + }; + + timing-51000000 { + clock-frequency = <51000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-dyn-self-ref; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x00000002 + 0x00000008 0x00000001 0x00000000 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000000 + 0x00000000 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x00000181 0x00000000 0x00000060 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000009 0x00000009 + 0x00000004 0x00000002 0x00000000 0x00000004 + 0x00000005 0x0000018e 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x8000040b 0xe8000000 0xff00ff00 >; + }; + + timing-102000000 { + clock-frequency = <102000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-dyn-self-ref; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x00000005 + 0x00000010 0x00000003 0x00000001 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000001 + 0x00000001 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x00000303 0x00000000 0x000000c0 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000012 0x00000012 + 0x00000004 0x00000004 0x00000000 0x00000004 + 0x00000005 0x0000031c 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000713 0xe8000000 0xff00ff00 >; + }; + + timing-204000000 { + clock-frequency = <204000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-dyn-self-ref; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x0000000a + 0x00000020 0x00000007 0x00000002 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000002 + 0x00000002 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000006 0x00000004 0x0000000a + 0x0000000b 0x00000607 0x00000000 0x00000181 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000023 0x00000023 + 0x00000004 0x00000007 0x00000000 0x00000004 + 0x00000005 0x00000638 0x00000007 0x00000004 + 0x00000000 0x00000000 0x00004288 0x004400a4 + 0x00008000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00020000 + 0x00000100 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000d22 0xe8000000 0xff00ff00 >; + }; + + timing-333500000 { + clock-frequency = <333500000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100002>; + nvidia,emc-mode-2 = <0x80200040>; + nvidia,emc-mode-reset = <0x80000321>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + + nvidia,emc-configuration = < 0x0000000f + 0x00000034 0x0000000a 0x00000003 0x00000003 + 0x00000008 0x00000002 0x00000009 0x00000003 + 0x00000003 0x00000002 0x00000001 0x00000000 + 0x00000004 0x00000006 0x00000004 0x0000000a + 0x0000000c 0x000009e9 0x00000000 0x0000027a + 0x00000001 0x00000008 0x00000001 0x00000000 + 0x00000007 0x0000000e 0x00000039 0x00000200 + 0x00000004 0x0000000a 0x00000000 0x00000004 + 0x00000005 0x00000a2a 0x00000000 0x00000004 + 0x00000000 0x00000000 0x00007088 0x002600a4 + 0x00008000 0x0003c000 0x0003c000 0x0003c000 + 0x0003c000 0x00014000 0x00014000 0x00014000 + 0x00014000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00048000 0x00048000 0x00048000 + 0x00048000 0x000002a0 0x0800013d 0x00000000 + 0x77fff884 0x01f1f508 0x05057404 0x54000007 + 0x080001e8 0x08000021 0x00000802 0x00020000 + 0x00000100 0x018b000c 0xa0f10000 0x00000000 + 0x00000000 0x800014d4 0xe8000000 0xff00ff89 >; + }; + + timing-667000000 { + clock-frequency = <667000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100002>; + nvidia,emc-mode-2 = <0x80200058>; + nvidia,emc-mode-reset = <0x80000b71>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x00000020 + 0x00000069 0x00000017 0x00000007 0x00000005 + 0x0000000c 0x00000003 0x00000011 0x00000007 + 0x00000007 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000b 0x00000009 0x0000000b + 0x00000011 0x00001412 0x00000000 0x00000504 + 0x00000002 0x0000000e 0x00000001 0x00000000 + 0x0000000c 0x00000016 0x00000072 0x00000200 + 0x00000005 0x00000015 0x00000000 0x00000006 + 0x00000007 0x00001453 0x0000000c 0x00000004 + 0x00000000 0x00000000 0x00005088 0xf00b0191 + 0x00008000 0x0000000a 0x0000000a 0x0000000a + 0x0000000a 0x0000000a 0x0000000a 0x0000000a + 0x0000000a 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x0000000c 0x0000000c 0x0000000c + 0x0000000c 0x000002a0 0x0600013d 0x22220000 + 0x77fff884 0x01f1f501 0x07077404 0x54000000 + 0x080001e8 0x08000021 0x00000802 0x00020000 + 0x00000100 0x0156000c 0xa0f10000 0x00000000 + 0x00000000 0x800028a5 0xf8000000 0xff00ff49 >; + }; + }; + }; + + pad_battery: battery-pad { + compatible = "simple-battery"; + charge-full-design-microamp-hours = <2940000>; + energy-full-design-microwatt-hours = <22000000>; + operating-range-celsius = <0 45>; + }; + + dock_battery: battery-dock { + compatible = "simple-battery"; + charge-full-design-microamp-hours = <2260000>; + energy-full-design-microwatt-hours = <16000000>; + operating-range-celsius = <0 45>; + }; + + display-panel { + compatible = "innolux,g101ice-l01"; + }; + + sound { + compatible = "asus,tegra-audio-rt5631-tf300tl", + "nvidia,tegra-audio-rt5631"; + nvidia,model = "Asus Transformer Pad TF300TL RT5631"; + + nvidia,audio-routing = + "Headphone Jack", "HPOL", + "Headphone Jack", "HPOR", + "Int Spk", "SPOL", + "Int Spk", "SPOR", + "MIC1", "MIC Bias1", + "MIC Bias1", "Mic Jack", + "DMIC", "Int Mic"; + + nvidia,audio-codec = <&rt5631>; + }; +}; + +&emc_icc_dvfs_opp_table { + /delete-node/ opp-750000000-1300; + /delete-node/ opp-800000000-1300; + /delete-node/ opp-900000000-1350; +}; + +&emc_bw_dfs_opp_table { + /delete-node/ opp-750000000; + /delete-node/ opp-800000000; + /delete-node/ opp-900000000; +}; From cd402661d76449140bad0d81acba73e55013bb91 Mon Sep 17 00:00:00 2001 From: Svyatoslav Date: Sat, 9 Jan 2021 12:31:14 +0200 Subject: [PATCH 2/7] WIP: ARM: tegra: Add device-tree for ASUS VivoTab RT TF600T Add device-tree for ASUS VivoTab RT TF600T, which is NVIDIA Tegra30-based tablet device with Windows RT OS. Signed-off-by: Svyatoslav Ryhel --- arch/arm/boot/dts/Makefile | 1 + arch/arm/boot/dts/tegra30-asus-tf600t.dts | 2584 +++++++++++++++++++++ 2 files changed, 2585 insertions(+) create mode 100644 arch/arm/boot/dts/tegra30-asus-tf600t.dts diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 5d69d7ca9193c..9cf13c7752979 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -1356,6 +1356,7 @@ dtb-$(CONFIG_ARCH_TEGRA_3x_SOC) += \ tegra30-asus-tf300t.dtb \ tegra30-asus-tf300tg.dtb \ tegra30-asus-tf300tl.dtb \ + tegra30-asus-tf600t.dtb \ tegra30-asus-tf700t.dtb \ tegra30-beaver.dtb \ tegra30-cardhu-a02.dtb \ diff --git a/arch/arm/boot/dts/tegra30-asus-tf600t.dts b/arch/arm/boot/dts/tegra30-asus-tf600t.dts new file mode 100644 index 0000000000000..77e684f12b873 --- /dev/null +++ b/arch/arm/boot/dts/tegra30-asus-tf600t.dts @@ -0,0 +1,2584 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; + +/* This dts file describes the Asus VivoTab RT TF600T tablet */ +/* CPU Speedo ID 2, Soc Speedo ID 2, CPU Process: 2, Core Process: 0 */ + +#include +#include +#include +#include + +#include "tegra30.dtsi" +#include "tegra30-cpu-opp.dtsi" +#include "tegra30-cpu-opp-microvolt.dtsi" + +/ { + model = "Asus VivoTab RT TF600T"; + compatible = "asus,tf600t", "nvidia,tegra30"; + + aliases { + mmc0 = &sdmmc4; /* eMMC */ + mmc1 = &sdmmc1; /* uSD slot */ + mmc2 = &sdmmc3; /* WiFi */ + + rtc0 = &pmic; + rtc1 = "/rtc@7000e000"; + + display0 = &lcd; + display1 = &hdmi; + + serial1 = &uartc; /* Bluetooth */ + serial2 = &uartb; /* GPS */ + }; + + /* + * The decompressor and also some bootloaders rely on a + * pre-existing /chosen node to be available to insert the + * command line and merge other ATAGS info. + */ + chosen {}; + + memory@80000000 { + reg = <0x80000000 0x80000000>; + }; + + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + linux,cma@80000000 { + compatible = "shared-dma-pool"; + alloc-ranges = <0x80000000 0x30000000>; + size = <0x10000000>; /* 256MiB */ + linux,cma-default; + reusable; + }; + + ramoops@beb00000 { + compatible = "ramoops"; + reg = <0xbeb00000 0x10000>; /* 64kB */ + console-size = <0x8000>; /* 32kB */ + record-size = <0x400>; /* 1kB */ + ecc-size = <16>; + }; + }; + + host1x@50000000 { + hdmi: hdmi@54280000 { + status = "okay"; + + hdmi-supply = <&hdmi_5v0_sys>; + pll-supply = <&vdd_1v8_vio>; + vdd-supply = <&vdd_3v3_sys>; + + nvidia,hpd-gpio = <&gpio TEGRA_GPIO(N, 7) GPIO_ACTIVE_HIGH>; + nvidia,ddc-i2c-bus = <&hdmi_ddc>; + }; + + lcd: dsi@54300000 { + status = "okay"; + + avdd-dsi-csi-supply = <&avdd_dsi_csi>; + + panel@0 { + compatible = "hydis,hv101hd1"; + reg = <0>; + + enable-gpio = <&gpio TEGRA_GPIO(L, 4) GPIO_ACTIVE_HIGH>; + + power-supply = <&vdd_lcd>; + backlight = <&backlight>; + }; + }; + }; + + gpio@6000d000 {}; + + vde@6001a000 { + assigned-clocks = <&tegra_car TEGRA30_CLK_VDE>; + assigned-clock-parents = <&tegra_car TEGRA30_CLK_PLL_P>; + assigned-clock-rates = <408000000>; + }; + + pinmux@70000868 { + pinctrl-names = "default"; + pinctrl-0 = <&state_default>; + + state_default: pinmux { + /* SDMMC1 pinmux */ + sdmmc1_clk { + nvidia,pins = "sdmmc1_clk_pz0"; + nvidia,function = "sdmmc1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + sdmmc1_cmd { + nvidia,pins = "sdmmc1_dat3_py4", + "sdmmc1_dat2_py5", + "sdmmc1_dat1_py6", + "sdmmc1_dat0_py7", + "sdmmc1_cmd_pz1"; + nvidia,function = "sdmmc1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + sdmmc1_cd { + nvidia,pins = "gmi_iordy_pi5"; + nvidia,function = "rsvd1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + sdmmc1_wp { + nvidia,pins = "vi_d11_pt3"; + nvidia,function = "rsvd2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* SDMMC2 pinmux */ + vi_d1_pd5 { + nvidia,pins = "vi_d1_pd5", + "vi_d2_pl0", + "vi_d3_pl1", + "vi_d5_pl3", + "vi_d7_pl5"; + nvidia,function = "sdmmc2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + vi_d8_pl6 { + nvidia,pins = "vi_d8_pl6", + "vi_d9_pl7"; + nvidia,function = "sdmmc2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + nvidia,lock = <0>; + nvidia,ioreset = <0>; + }; + + /* SDMMC3 pinmux */ + sdmmc3_clk { + nvidia,pins = "sdmmc3_clk_pa6"; + nvidia,function = "sdmmc3"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + sdmmc3_cmd { + nvidia,pins = "sdmmc3_cmd_pa7", + "sdmmc3_dat0_pb7", + "sdmmc3_dat1_pb6", + "sdmmc3_dat2_pb5", + "sdmmc3_dat3_pb4", + "sdmmc3_dat4_pd1", + "sdmmc3_dat5_pd0", + "sdmmc3_dat6_pd3", + "sdmmc3_dat7_pd4"; + nvidia,function = "sdmmc3"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* SDMMC4 pinmux */ + sdmmc4_clk { + nvidia,pins = "sdmmc4_clk_pcc4"; + nvidia,function = "sdmmc4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + sdmmc4_cmd { + nvidia,pins = "sdmmc4_cmd_pt7", + "sdmmc4_dat0_paa0", + "sdmmc4_dat1_paa1", + "sdmmc4_dat2_paa2", + "sdmmc4_dat3_paa3", + "sdmmc4_dat4_paa4", + "sdmmc4_dat5_paa5", + "sdmmc4_dat6_paa6", + "sdmmc4_dat7_paa7"; + nvidia,function = "sdmmc4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + sdmmc4_rst_n { + nvidia,pins = "sdmmc4_rst_n_pcc3"; + nvidia,function = "rsvd2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + cam_mclk { + nvidia,pins = "cam_mclk_pcc0"; + nvidia,function = "vi_alt3"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* I2C pinmux */ + gen1_i2c { + nvidia,pins = "gen1_i2c_scl_pc4", + "gen1_i2c_sda_pc5"; + nvidia,function = "i2c1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + nvidia,open-drain = ; + nvidia,lock = <0>; + }; + gen2_i2c { + nvidia,pins = "gen2_i2c_scl_pt5", + "gen2_i2c_sda_pt6"; + nvidia,function = "i2c2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + nvidia,open-drain = ; + nvidia,lock = <0>; + }; + cam_i2c { + nvidia,pins = "cam_i2c_scl_pbb1", + "cam_i2c_sda_pbb2"; + nvidia,function = "i2c3"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + nvidia,open-drain = ; + nvidia,lock = <0>; + }; + ddc_i2c { + nvidia,pins = "ddc_scl_pv4", + "ddc_sda_pv5"; + nvidia,function = "i2c4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + nvidia,lock = <0>; + }; + pwr_i2c { + nvidia,pins = "pwr_i2c_scl_pz6", + "pwr_i2c_sda_pz7"; + nvidia,function = "i2cpwr"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + nvidia,open-drain = ; + nvidia,lock = <0>; + }; + hotplug_i2c { + nvidia,pins = "pu4"; + nvidia,function = "rsvd4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* HDMI pinmux */ + hdmi_cec { + nvidia,pins = "hdmi_cec_pee3"; + nvidia,function = "cec"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + nvidia,open-drain = ; + nvidia,lock = <0>; + }; + hdmi_hpd { + nvidia,pins = "hdmi_int_pn7"; + nvidia,function = "hdmi"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* UART-A */ + ulpi_data0_po1 { + nvidia,pins = "ulpi_data0_po1"; + nvidia,function = "uarta"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + ulpi_data1_po2 { + nvidia,pins = "ulpi_data1_po2"; + nvidia,function = "uarta"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + ulpi_data5_po6 { + nvidia,pins = "ulpi_data5_po6"; + nvidia,function = "uarta"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + ulpi_data7_po0 { + nvidia,pins = "ulpi_data7_po0", + "ulpi_data2_po3", + "ulpi_data3_po4", + "ulpi_data4_po5", + "ulpi_data6_po7"; + nvidia,function = "uarta"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* UART-B */ + uartb_txd_rts { + nvidia,pins = "uart2_txd_pc2", + "uart2_rts_n_pj6"; + nvidia,function = "uartb"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + uartb_rxd_cts { + nvidia,pins = "uart2_rxd_pc3", + "uart2_cts_n_pj5"; + nvidia,function = "uartb"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* UART-C */ + uartc_rxd_cts { + nvidia,pins = "uart3_cts_n_pa1", + "uart3_rxd_pw7"; + nvidia,function = "uartc"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + uartc_txd_rts { + nvidia,pins = "uart3_rts_n_pc0", + "uart3_txd_pw6"; + nvidia,function = "uartc"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* UART-D */ + ulpi_nxt_py2 { + nvidia,pins = "ulpi_nxt_py2"; + nvidia,function = "uartd"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + ulpi_clk_py0 { + nvidia,pins = "ulpi_clk_py0", + "ulpi_dir_py1", + "ulpi_stp_py3"; + nvidia,function = "uartd"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* I2S pinmux */ + dap_i2s0 { + nvidia,pins = "dap1_fs_pn0", + "dap1_din_pn1", + "dap1_dout_pn2", + "dap1_sclk_pn3"; + nvidia,function = "i2s0"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + dap_i2s1 { + nvidia,pins = "dap2_fs_pa2", + "dap2_sclk_pa3", + "dap2_din_pa4", + "dap2_dout_pa5"; + nvidia,function = "i2s1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + dap3_fs { + nvidia,pins = "dap3_fs_pp0"; + nvidia,function = "i2s2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + dap3_din { + nvidia,pins = "dap3_din_pp1"; + nvidia,function = "i2s2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + dap3_dout { + nvidia,pins = "dap3_dout_pp2", + "dap3_sclk_pp3"; + nvidia,function = "i2s2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + dap_i2s3 { + nvidia,pins = "dap4_fs_pp4", + "dap4_din_pp5", + "dap4_dout_pp6", + "dap4_sclk_pp7"; + nvidia,function = "i2s3"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + i2s4 { + nvidia,pins = "pbb7"; + nvidia,function = "i2s4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* Sensors pinmux */ + nct_irq { + nvidia,pins = "pcc2"; + nvidia,function = "i2s4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + hall { + nvidia,pins = "pbb6"; + nvidia,function = "vgp6"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* Asus EC pinmux */ + ec_irqs { + nvidia,pins = "kb_row10_ps2", + "kb_row15_ps7"; + nvidia,function = "kbc"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + ec_reqs { + nvidia,pins = "kb_col1_pq1"; + nvidia,function = "kbc"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* Memory type bootstrap */ + mem_boostraps { + nvidia,pins = "gmi_ad4_pg4", + "gmi_ad5_pg5"; + nvidia,function = "nand"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* PCI-e pinmux */ + pex_l2_rst_n { + nvidia,pins = "pex_l2_rst_n_pcc6", + "pex_l0_rst_n_pdd1", + "pex_l1_rst_n_pdd5"; + nvidia,function = "pcie"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + pex_l2_clkreq_n { + nvidia,pins = "pex_l2_clkreq_n_pcc7", + "pex_l0_prsnt_n_pdd0", + "pex_l0_clkreq_n_pdd2", + "pex_wake_n_pdd3", + "pex_l1_prsnt_n_pdd4", + "pex_l1_clkreq_n_pdd6", + "pex_l2_prsnt_n_pdd7"; + nvidia,function = "pcie"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* Display A pinmux */ + lcd_pwr0_pb2 { + nvidia,pins = "lcd_pwr0_pb2", + "lcd_pclk_pb3", + "lcd_pwr1_pc1", + "lcd_d0_pe0", + "lcd_d1_pe1", + "lcd_d2_pe2", + "lcd_d3_pe3", + "lcd_d4_pe4", + "lcd_d5_pe5", + "lcd_d6_pe6", + "lcd_d7_pe7", + "lcd_d8_pf0", + "lcd_d9_pf1", + "lcd_d10_pf2", + "lcd_d11_pf3", + "lcd_d12_pf4", + "lcd_d13_pf5", + "lcd_d14_pf6", + "lcd_d15_pf7", + "lcd_de_pj1", + "lcd_hsync_pj3", + "lcd_vsync_pj4", + "lcd_d16_pm0", + "lcd_d17_pm1", + "lcd_d18_pm2", + "lcd_d19_pm3", + "lcd_d20_pm4", + "lcd_d21_pm5", + "lcd_d22_pm6", + "lcd_d23_pm7", + "lcd_dc0_pn6", + "lcd_sdin_pz2"; + nvidia,function = "displaya"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + lcd_cs0_n_pn4 { + nvidia,pins = "lcd_sdout_pn5", + "lcd_wr_n_pz3", + "lcd_pwr2_pc6", + "lcd_dc1_pd2"; + nvidia,function = "displaya"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + blink { + nvidia,pins = "clk_32k_out_pa0"; + nvidia,function = "blink"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* KBC keys */ + kb_col0 { + nvidia,pins = "kb_col0_pq0", + "kb_row1_pr1", + "kb_row3_pr3", + "kb_row7_pr7", + "kb_row8_ps0"; + nvidia,function = "kbc"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + kb_col5 { + nvidia,pins = "kb_col5_pq5", + "kb_col7_pq7", + "kb_row2_pr2", + "kb_row4_pr4", + "kb_row5_pr5", + "kb_row13_ps5"; + nvidia,function = "kbc"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + gmi_cs0_n_pj0 { + nvidia,pins = "gmi_wp_n_pc7", + "gmi_wait_pi7", + "gmi_cs0_n_pj0", + "gmi_cs1_n_pj2", + "gmi_cs2_n_pk3", + "gmi_cs3_n_pk4"; + nvidia,function = "rsvd1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + vi_pclk_pt0 { + nvidia,pins = "vi_pclk_pt0"; + nvidia,function = "rsvd1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + nvidia,lock = <0>; + nvidia,ioreset = <0>; + }; + + /* GPIO keys pinmux */ + power_key { + nvidia,pins = "pv0"; + nvidia,function = "rsvd1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + vol_keys { + nvidia,pins = "kb_col3_pq3", + "kb_col4_pq4"; + nvidia,function = "rsvd4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* Bluetooth */ + bt_shutdown { + nvidia,pins = "pu0"; + nvidia,function = "rsvd4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + bt_dev_wake { + nvidia,pins = "pu1"; + nvidia,function = "rsvd1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + bt_host_wake { + nvidia,pins = "pu6"; + nvidia,function = "rsvd4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + pu2 { + nvidia,pins = "pu2"; + nvidia,function = "rsvd1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + pu3 { + nvidia,pins = "pu3"; + nvidia,function = "rsvd4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + pcc1 { + nvidia,pins = "pcc1"; + nvidia,function = "rsvd2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + pv2 { + nvidia,pins = "pv2"; + nvidia,function = "rsvd2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + pv3 { + nvidia,pins = "pv3"; + nvidia,function = "rsvd2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + vi_vsync_pd6 { + nvidia,pins = "vi_vsync_pd6", + "vi_hsync_pd7"; + nvidia,function = "rsvd2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + nvidia,lock = <0>; + nvidia,ioreset = <0>; + }; + vi_d10_pt2 { + nvidia,pins = "vi_d10_pt2", + "vi_d0_pt4", "pbb0"; + nvidia,function = "rsvd2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + kb_row0_pr0 { + nvidia,pins = "kb_row0_pr0"; + nvidia,function = "rsvd4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + gmi_ad0_pg0 { + nvidia,pins = "gmi_ad0_pg0", + "gmi_ad1_pg1", + "gmi_ad2_pg2", + "gmi_ad3_pg3", + "gmi_ad6_pg6", + "gmi_ad7_pg7", + "gmi_wr_n_pi0", + "gmi_oe_n_pi1", + "gmi_dqs_pi2", + "gmi_adv_n_pk0", + "gmi_clk_pk1"; + nvidia,function = "nand"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + gmi_ad13_ph5 { + nvidia,pins = "gmi_ad13_ph5"; + nvidia,function = "nand"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + gmi_ad10_ph2 { + nvidia,pins = "gmi_ad10_ph2", + "gmi_ad11_ph3", + "gmi_ad14_ph6"; + nvidia,function = "nand"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + gmi_ad12_ph4 { + nvidia,pins = "gmi_ad12_ph4", + "gmi_rst_n_pi4", + "gmi_cs7_n_pi6"; + nvidia,function = "nand"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* Vibrator control */ + vibrator { + nvidia,pins = "gmi_ad11_ph3"; + nvidia,function = "nand"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* PWM pinmux */ + pwm_0 { + nvidia,pins = "gmi_ad8_ph0"; + nvidia,function = "pwm0"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + pwm_2 { + nvidia,pins = "pu5"; + nvidia,function = "pwm2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + gmi_cs_n { + nvidia,pins = "gmi_cs4_n_pk2", + "gmi_cs6_n_pi3"; + nvidia,function = "gmi"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* Spdif pinmux */ + spdif_out { + nvidia,pins = "spdif_out_pk5"; + nvidia,function = "spdif"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + spdif_in { + nvidia,pins = "spdif_in_pk6"; + nvidia,function = "spdif"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + vi_d4_pl2 { + nvidia,pins = "vi_d4_pl2"; + nvidia,function = "vi"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + vi_d6_pl4 { + nvidia,pins = "vi_d6_pl4"; + nvidia,function = "vi"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + nvidia,lock = <0>; + nvidia,ioreset = <0>; + }; + vi_mclk_pt1 { + nvidia,pins = "vi_mclk_pt1"; + nvidia,function = "vi"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + jtag { + nvidia,pins = "jtag_rtck_pu7"; + nvidia,function = "rtck"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + crt_sync { + nvidia,pins = "crt_hsync_pv6", + "crt_vsync_pv7"; + nvidia,function = "crt"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + clk1_out { + nvidia,pins = "clk1_out_pw4"; + nvidia,function = "extperiph1"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + clk2_out { + nvidia,pins = "clk2_out_pw5"; + nvidia,function = "extperiph2"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + clk3_out { + nvidia,pins = "clk3_out_pee0"; + nvidia,function = "extperiph3"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + sys_clk_req { + nvidia,pins = "sys_clk_req_pz5"; + nvidia,function = "sysclk"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + pbb3 { + nvidia,pins = "pbb3"; + nvidia,function = "vgp3"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + pbb4 { + nvidia,pins = "pbb4"; + nvidia,function = "vgp4"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + pbb5 { + nvidia,pins = "pbb5"; + nvidia,function = "vgp5"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + clk2_req_pcc5 { + nvidia,pins = "clk2_req_pcc5", + "clk1_req_pee2"; + nvidia,function = "dap"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + clk3_req_pee1 { + nvidia,pins = "clk3_req_pee1"; + nvidia,function = "dev3"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + owr { + nvidia,pins = "owr"; + nvidia,function = "owr"; + nvidia,pull = ; + nvidia,tristate = ; + nvidia,enable-input = ; + }; + + /* GPIO power/drive control */ + drive_dap1 { + nvidia,pins = "drive_dap1", + "drive_dap2", + "drive_dbg", + "drive_at5", + "drive_gme", + "drive_ddc", + "drive_ao1", + "drive_uart3"; + nvidia,high-speed-mode = ; + nvidia,schmitt = ; + nvidia,low-power-mode = ; + nvidia,pull-down-strength = <31>; + nvidia,pull-up-strength = <31>; + nvidia,slew-rate-rising = ; + nvidia,slew-rate-falling = ; + }; + drive_sdio1 { + nvidia,pins = "drive_sdio1", + "drive_sdio3"; + nvidia,high-speed-mode = ; + nvidia,schmitt = ; + nvidia,pull-down-strength = <46>; + nvidia,pull-up-strength = <42>; + nvidia,slew-rate-rising = ; + nvidia,slew-rate-falling = ; + }; + drive_sdmmc4 { + nvidia,pins = "drive_gma", + "drive_gmb", + "drive_gmc", + "drive_gmd"; + nvidia,pull-down-strength = <9>; + nvidia,pull-up-strength = <9>; + nvidia,slew-rate-rising = ; + nvidia,slew-rate-falling = ; + }; + }; + }; + + uartb: serial@70006040 { + compatible = "nvidia,tegra30-hsuart"; + /delete-property/ reg-shift; + status = "okay"; + + /* Broadcom GPS BCM47511 + * + * interrupt gpio: U5 + * power gpio: U2 + * reset gpio: U3 + */ + }; + + uartc: serial@70006200 { + compatible = "nvidia,tegra30-hsuart"; + /delete-property/ reg-shift; + status = "okay"; + + nvidia,adjust-baud-rates = <0 9600 100>, + <9600 115200 200>, + <1000000 4000000 136>; + + /* Azurewave AW-NH665 BCM4330B1 */ + bluetooth { + compatible = "brcm,bcm4330-bt"; + max-speed = <4000000>; + + clocks = <&tegra_pmc TEGRA_PMC_CLK_BLINK>; + clock-names = "txco"; + + interrupt-parent = <&gpio>; + interrupts = ; + interrupt-names = "host-wakeup"; + + device-wakeup-gpios = <&gpio TEGRA_GPIO(U, 1) GPIO_ACTIVE_HIGH>; + shutdown-gpios = <&gpio TEGRA_GPIO(U, 0) GPIO_ACTIVE_HIGH>; + + vbat-supply = <&vdd_3v3_com>; + vddio-supply = <&vdd_1v8_vio>; + }; + }; + + pwm@7000a000 { + status = "okay"; + }; + + i2c1: i2c@7000c000 { + status = "okay"; + clock-frequency = <100000>; + + /* Nuvoton NPCE698LA0BX embedded controller */ + embedded-controller@15 { + compatible = "asus,pad-ec", "asus,ec"; + reg = <0x15>; + + interrupt-parent = <&gpio>; + interrupts = ; + + request-gpio = <&gpio TEGRA_GPIO(Q, 1) GPIO_ACTIVE_LOW>; + asus,dockram = <&dockram_pec>; + + /* Texas Instruments bq24725 SMBus Charge Controller */ + monitored-battery = <&pad_battery>; + }; + + dockram_pec: dockram@17 { + compatible = "asus,dockram"; + reg = <0x17>; + }; + }; + + i2c-dock { + compatible = "i2c-hotplug-gpio"; + + #address-cells = <1>; + #size-cells = <0>; + + interrupts-extended = <&gpio TEGRA_GPIO(U, 4) IRQ_TYPE_EDGE_BOTH>; + detect-gpios = <&gpio TEGRA_GPIO(U, 4) GPIO_ACTIVE_LOW>; + + i2c-parent = <&i2c1>; + + keyboard@16 { + compatible = "hid-over-i2c"; + reg = <0x16>; + + hid-descr-addr = <0x0071>; + + interrupt-parent = <&gpio>; + interrupts = ; + }; + + touchpad@2c { + compatible = "hid-over-i2c"; + reg = <0x2c>; + + hid-descr-addr = <0x0020>; + + interrupt-parent = <&gpio>; + interrupts = ; + }; + }; + + i2c@7000c400 { + status = "okay"; + clock-frequency = <400000>; + + /* Atmel Maxtouch MXT1664 HID over I2C */ + touchscreen@4b { + compatible = "hid-over-i2c"; + reg = <0x4b>; + + hid-descr-addr = <0x0000>; + + interrupt-parent = <&gpio>; + interrupts = ; + + vdd-supply = <&vdd_3v3_sys>; + vddl-supply = <&vdd_1v8_vio>; + }; + }; + + i2c@7000c500 { + status = "okay"; + clock-frequency = <100000>; + + nfc@28 { + compatible = "nxp,pn544-i2c"; + reg = <0x28>; + + interrupt-parent = <&gpio>; + interrupts = ; + + enable-gpios = <&gpio TEGRA_GPIO(P, 3) GPIO_ACTIVE_HIGH>; + firmware-gpios = <&gpio TEGRA_GPIO(O, 6) GPIO_ACTIVE_HIGH>; + }; + + /* TI TPS61050/61052 Boost Converter */ + torch@33 { + compatible = "ti,tps61052"; + reg = <0x33>; + + led { + color = ; + }; + }; + + imu@69 { + compatible = "invensense,mpu6050"; + reg = <0x69>; + + interrupt-parent = <&gpio>; + interrupts = ; + + vdd-supply = <&vdd_3v3_sys>; + vddio-supply = <&vdd_1v8_vio>; + + mount-matrix = "0", "-1", "0", + "-1", "0", "0", + "0", "0", "-1"; + + /* External I2C interface */ + i2c-gate { + #address-cells = <1>; + #size-cells = <0>; + + magnetometer@d { + compatible = "asahi-kasei,ak8975"; + reg = <0x0d>; + + interrupt-parent = <&gpio>; + interrupts = ; + + vdd-supply = <&vdd_3v3_sys>; + vid-supply = <&vdd_1v8_vio>; + + mount-matrix = "0", "-1", "0", + "-1", "0", "0", + "0", "0", "-1"; + }; + }; + }; + }; + + hdmi_ddc: i2c@7000c700 { + status = "okay"; + clock-frequency = <93750>; + + /* Nvidia Tegra HDCP device */ + }; + + i2c@7000d000 { + status = "okay"; + clock-frequency = <400000>; + + rt5640: audio-codec@1c { + compatible = "realtek,rt5640"; + reg = <0x1c>; + + interrupt-parent = <&gpio>; + interrupts = ; + + realtek,ldo1-en-gpios = + <&gpio TEGRA_GPIO(P, 2) GPIO_ACTIVE_HIGH>; + }; + + /* Capella CM3218 ambient light sensor */ + light-sensor@48 { + compatible = "capella,cm32181"; + reg = <0x48>; + + interrupt-parent = <&gpio>; + interrupts = ; + + vdd-supply = <&vdd_3v3_als>; + }; + + nct72: temperature-sensor@4c { + compatible = "onnn,nct1008"; + reg = <0x4c>; + + interrupt-parent = <&gpio>; + interrupts = ; + + vcc-supply = <&vdd_3v3_sys>; + #thermal-sensor-cells = <1>; + }; + + /* Texas Instruments TPS659110 PMIC */ + pmic: pmic@2d { + compatible = "ti,tps65911"; + reg = <0x2d>; + + interrupts = ; + #interrupt-cells = <2>; + interrupt-controller; + + ti,en-gpio-sleep = <0 0 1 0 0 0 0 0 0>; + ti,system-power-controller; + ti,sleep-keep-ck32k; + ti,sleep-enable; + + #gpio-cells = <2>; + gpio-controller; + + vcc1-supply = <&vdd_5v0_bat>; + vcc2-supply = <&vdd_5v0_bat>; + vcc3-supply = <&vdd_1v8_vio>; + vcc4-supply = <&vdd_5v0_sys>; + vcc5-supply = <&vdd_5v0_bat>; + vcc6-supply = <&vdd_3v3_sys>; + vcc7-supply = <&vdd_5v0_bat>; + vccio-supply = <&vdd_5v0_bat>; + + pmic-sleep-hog { + gpio-hog; + gpios = <2 GPIO_ACTIVE_HIGH>; + output-high; + }; + + regulators { + vdd_lcd: vdd1 { + regulator-name = "vddio_ddr_1v2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-always-on; + regulator-boot-on; + ti,regulator-ext-sleep-control = <8>; + }; + + vddio_ddr: vdd2 { + regulator-name = "vddio_ddr"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-always-on; + regulator-boot-on; + }; + + vdd_cpu: vddctrl { + regulator-name = "vdd_cpu,vdd_sys"; + regulator-min-microvolt = <600000>; + regulator-max-microvolt = <1400000>; + regulator-coupled-with = <&vdd_core>; + regulator-coupled-max-spread = <300000>; + regulator-max-step-microvolt = <100000>; + regulator-always-on; + regulator-boot-on; + ti,regulator-ext-sleep-control = <1>; + + nvidia,tegra-cpu-regulator; + }; + + vdd_1v8_vio: vio { + regulator-name = "vdd_1v8_gen"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + regulator-boot-on; + }; + + /* eMMC VDD */ + vcore_emmc: ldo1 { + regulator-name = "vdd_emmc_core"; + regulator-min-microvolt = <1000000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + /* ldo2 and ldo3 are not used by TF600T */ + + ldo4 { + regulator-name = "vdd_rtc"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-always-on; + }; + + /* uSD slot VDDIO */ + vddio_usd: ldo5 { + regulator-name = "vddio_sdmmc"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + avdd_dsi_csi: ldo6 { + regulator-name = "avdd_dsi_csi"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + }; + + ldo7 { + regulator-name = "vdd_pllm,x,u,a_p_c_s"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-always-on; + regulator-boot-on; + ti,regulator-ext-sleep-control = <8>; + }; + + ldo8 { + regulator-name = "vdd_ddr_hs"; + regulator-min-microvolt = <1000000>; + regulator-max-microvolt = <1000000>; + regulator-always-on; + ti,regulator-ext-sleep-control = <8>; + }; + }; + }; + + vdd_core: core-regulator@60 { + compatible = "ti,tps62361"; + reg = <0x60>; + + regulator-name = "tps62361-vout"; + regulator-min-microvolt = <500000>; + regulator-max-microvolt = <1770000>; + regulator-coupled-with = <&vdd_cpu>; + regulator-coupled-max-spread = <300000>; + regulator-max-step-microvolt = <100000>; + regulator-boot-on; + regulator-always-on; + ti,enable-vout-discharge; + ti,vsel0-state-high; + ti,vsel1-state-high; + + nvidia,tegra-core-regulator; + }; + }; + + pmc@7000e400 { + status = "okay"; + nvidia,invert-interrupt; + nvidia,suspend-mode = <2>; + nvidia,cpu-pwr-good-time = <2000>; + nvidia,cpu-pwr-off-time = <200>; + nvidia,core-pwr-good-time = <3845 3845>; + nvidia,core-pwr-off-time = <0>; + nvidia,core-power-req-active-high; + nvidia,sys-clock-req-active-high; + core-supply = <&vdd_core>; + + /* Set DEV_OFF + PWR_OFF_SET bit in DCDC control register of TPS65911 PMIC */ + i2c-thermtrip { + nvidia,i2c-controller-id = <4>; + nvidia,bus-addr = <0x2d>; + nvidia,reg-addr = <0x3f>; + nvidia,reg-data = <0x81>; + }; + }; + + hda@70030000 { + status = "okay"; + }; + + spi@7000da00 { + status = "okay"; + spi-max-frequency = <25000000>; + + spi-flash@1 { + compatible = "winbond,w25q32", "jedec,spi-nor"; + reg = <1>; + spi-max-frequency = <20000000>; + }; + }; + + ahub@70080000 { + i2s@70080400 { /* i2s1 */ + status = "okay"; + }; + + /* BT SCO */ + i2s@70080600 { /* i2s3 */ + status = "okay"; + }; + }; + + mmc@78000000 { + status = "okay"; + bus-width = <4>; + + cd-gpios = <&gpio TEGRA_GPIO(I, 5) GPIO_ACTIVE_LOW>; + power-gpios = <&gpio TEGRA_GPIO(D, 7) GPIO_ACTIVE_HIGH>; + + vmmc-supply = <&vdd_3v3_sys>; + vqmmc-supply = <&vddio_usd>; + }; + + brcm_wifi_pwrseq: wifi-pwrseq { + compatible = "mmc-pwrseq-simple"; + + clocks = <&tegra_pmc TEGRA_PMC_CLK_BLINK>; + clock-names = "ext_clock"; + + reset-gpios = <&gpio TEGRA_GPIO(P, 1) GPIO_ACTIVE_LOW>; + post-power-on-delay-ms = <300>; + power-off-delay-us = <300>; + }; + + mmc@78000400 { + status = "okay"; + + #address-cells = <1>; + #size-cells = <0>; + + assigned-clocks = <&tegra_car TEGRA30_CLK_SDMMC3>; + assigned-clock-parents = <&tegra_car TEGRA30_CLK_PLL_C>; + assigned-clock-rates = <50000000>; + + max-frequency = <50000000>; + keep-power-in-suspend; + bus-width = <4>; + non-removable; + + mmc-pwrseq = <&brcm_wifi_pwrseq>; + vmmc-supply = <&vdd_3v3_com>; + vqmmc-supply = <&vdd_1v8_vio>; + + /* Azurewave AW-NH665 BCM4330B1 */ + wifi@1 { + compatible = "brcm,bcm4329-fmac"; + reg = <1>; + + interrupt-parent = <&gpio>; + interrupts = ; + interrupt-names = "host-wake"; + }; + }; + + mmc@78000600 { + status = "okay"; + bus-width = <8>; + non-removable; + + vmmc-supply = <&vcore_emmc>; + vqmmc-supply = <&vdd_1v8_vio>; + }; + + /* USB via ASUS connector */ + usb@7d000000 { + compatible = "nvidia,tegra30-udc"; + status = "okay"; + dr_mode = "peripheral"; + }; + + usb-phy@7d000000 { + status = "okay"; + dr_mode = "peripheral"; + nvidia,hssync-start-delay = <0>; + nvidia,xcvr-lsfslew = <2>; + nvidia,xcvr-lsrslew = <2>; + vbus-supply = <&vdd_5v0_sys>; + }; + + /* Dock's USB port */ + usb@7d008000 { + status = "okay"; + }; + + usb-phy@7d008000 { + status = "okay"; + vbus-supply = <&vdd_5v0_bat>; + }; + + backlight: backlight { + compatible = "pwm-backlight"; + + enable-gpios = <&gpio TEGRA_GPIO(H, 2) GPIO_ACTIVE_HIGH>; + power-supply = <&vdd_5v0_bl>; + pwms = <&pwm 0 71428>; + + brightness-levels = <1 255>; + num-interpolated-steps = <254>; + default-brightness-level = <15>; + }; + + /* PMIC has a built-in 32KHz oscillator which is used by PMC */ + clk32k_in: clock-32k { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <32768>; + clock-output-names = "pmic-oscillator"; + }; + + cpus { + cpu0: cpu@0 { + cpu-supply = <&vdd_cpu>; + operating-points-v2 = <&cpu0_opp_table>; + #cooling-cells = <2>; + }; + cpu1: cpu@1 { + cpu-supply = <&vdd_cpu>; + operating-points-v2 = <&cpu0_opp_table>; + #cooling-cells = <2>; + }; + cpu2: cpu@2 { + cpu-supply = <&vdd_cpu>; + operating-points-v2 = <&cpu0_opp_table>; + #cooling-cells = <2>; + }; + cpu3: cpu@3 { + cpu-supply = <&vdd_cpu>; + operating-points-v2 = <&cpu0_opp_table>; + #cooling-cells = <2>; + }; + }; + + pad_battery: battery-pad { + compatible = "simple-battery"; + charge-full-design-microamp-hours = <6760000>; + energy-full-design-microwatt-hours = <25000000>; + operating-range-celsius = <0 45>; + }; + + extcon-keys { + compatible = "gpio-keys"; + interrupt-parent = <&gpio>; + + dock-hall-sensor { + label = "Lid sensor"; + gpios = <&gpio TEGRA_GPIO(BB, 6) GPIO_ACTIVE_LOW>; + linux,input-type = ; + linux,code = ; + debounce-interval = <500>; + wakeup-event-action = ; + wakeup-source; + }; + + lineout-detect { + label = "Audio dock line-out detect"; + gpios = <&gpio TEGRA_GPIO(X, 3) GPIO_ACTIVE_LOW>; + linux,input-type = ; + linux,code = ; + debounce-interval = <10>; + wakeup-event-action = ; + wakeup-source; + }; + }; + + gpio-keys { + compatible = "gpio-keys"; + interrupt-parent = <&gpio>; + + power { + label = "Power"; + gpios = <&gpio TEGRA_GPIO(V, 0) GPIO_ACTIVE_LOW>; + linux,code = ; + debounce-interval = <10>; + wakeup-event-action = ; + wakeup-source; + }; + + volume-up { + label = "Volume Up"; + gpios = <&gpio TEGRA_GPIO(Q, 3) GPIO_ACTIVE_LOW>; + linux,code = ; + debounce-interval = <10>; + wakeup-event-action = ; + wakeup-source; + }; + + volume-down { + label = "Volume Down"; + gpios = <&gpio TEGRA_GPIO(Q, 4) GPIO_ACTIVE_LOW>; + linux,code = ; + debounce-interval = <10>; + wakeup-event-action = ; + wakeup-source; + }; + }; + + haptic-feedback { + compatible = "gpio-vibrator"; + enable-gpios = <&gpio TEGRA_GPIO(H, 3) GPIO_ACTIVE_HIGH>; + vcc-supply = <&vdd_3v3_sys>; + }; + + vdd_5v0_bat: regulator-bat { + compatible = "regulator-fixed"; + regulator-name = "vdd_ac_bat"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + regulator-boot-on; + }; + + vdd_5v0_cp: regulator-sby { + compatible = "regulator-fixed"; + regulator-name = "vdd_5v0_sby"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + regulator-boot-on; + gpio = <&pmic 0 GPIO_ACTIVE_HIGH>; + enable-active-high; + vin-supply = <&vdd_5v0_bat>; + }; + + vdd_5v0_sys: regulator-5v { + compatible = "regulator-fixed"; + regulator-name = "vdd_5v0_sys"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + regulator-boot-on; + gpio = <&pmic 8 GPIO_ACTIVE_HIGH>; + enable-active-high; + vin-supply = <&vdd_5v0_bat>; + }; + + vdd_1v5_ddr: regulator-ddr { + compatible = "regulator-fixed"; + regulator-name = "vdd_ddr"; + regulator-min-microvolt = <1500000>; + regulator-max-microvolt = <1500000>; + regulator-always-on; + regulator-boot-on; + gpio = <&pmic 7 GPIO_ACTIVE_HIGH>; + enable-active-high; + vin-supply = <&vdd_5v0_bat>; + }; + + vdd_3v3_sys: regulator-3v { + compatible = "regulator-fixed"; + regulator-name = "vdd_3v3_sys"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + regulator-boot-on; + gpio = <&pmic 6 GPIO_ACTIVE_HIGH>; + enable-active-high; + vin-supply = <&vdd_5v0_bat>; + }; + + vdd_3v3_com: regulator-com { + compatible = "regulator-fixed"; + regulator-name = "vdd_3v3_com"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + gpio = <&gpio TEGRA_GPIO(D, 0) GPIO_ACTIVE_HIGH>; + enable-active-high; + vin-supply = <&vdd_3v3_sys>; + }; + + vdd_3v3_als: regulator-als { + compatible = "regulator-fixed"; + regulator-name = "vdd_3v3_als"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + gpio = <&gpio TEGRA_GPIO(L, 5) GPIO_ACTIVE_HIGH>; + enable-active-high; + vin-supply = <&vdd_3v3_sys>; + }; + + vdd_5v0_bl: regulator-bl { + compatible = "regulator-fixed"; + regulator-name = "vdd_5v0_bl"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-boot-on; + gpio = <&gpio TEGRA_GPIO(H, 0) GPIO_ACTIVE_HIGH>; + enable-active-high; + vin-supply = <&vdd_5v0_bat>; + }; + + hdmi_5v0_sys: regulator-hdmi { + compatible = "regulator-fixed"; + regulator-name = "hdmi_5v0_sys"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + gpio = <&gpio TEGRA_GPIO(P, 2) GPIO_ACTIVE_HIGH>; + enable-active-high; + vin-supply = <&vdd_5v0_sys>; + }; + + sound { + compatible = "asus,tegra-audio-rt5640-tf600t", + "nvidia,tegra-audio-rt5640"; + nvidia,model = "Asus VivoTab RT TF600T RT5640"; + + nvidia,audio-routing = + "Headphones", "HPOR", + "Headphones", "HPOL", + "Speakers", "SPORP", + "Speakers", "SPORN", + "Speakers", "SPOLP", + "Speakers", "SPOLN", + "DMIC1", "Mic Jack"; + + nvidia,i2s-controller = <&tegra_i2s1>; + nvidia,audio-codec = <&rt5640>; + + nvidia,hp-det-gpios = <&gpio TEGRA_GPIO(W, 2) GPIO_ACTIVE_LOW>; + nvidia,hp-mute-gpios = <&gpio TEGRA_GPIO(X, 2) GPIO_ACTIVE_LOW>; + + clocks = <&tegra_car TEGRA30_CLK_PLL_A>, + <&tegra_car TEGRA30_CLK_PLL_A_OUT0>, + <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + clock-names = "pll_a", "pll_a_out0", "mclk"; + + assigned-clocks = <&tegra_car TEGRA30_CLK_EXTERN1>, + <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + + assigned-clock-parents = <&tegra_car TEGRA30_CLK_PLL_A_OUT0>, + <&tegra_car TEGRA30_CLK_EXTERN1>; + }; + + thermal-zones { + /* + * NCT72 has two sensors: + * + * 0: internal that monitors ambient/skin temperature + * 1: external that is connected to the CPU's diode + * + * Ideally we should use userspace thermal governor, + * but it's a much more complex solution. The "skin" + * zone exists as a simpler solution which prevents + * Transformers from getting too hot from a user's + * tactile perspective. The CPU zone is intended to + * protect silicon from damage. + */ + + skin-thermal { + polling-delay-passive = <1000>; /* milliseconds */ + polling-delay = <5000>; /* milliseconds */ + + thermal-sensors = <&nct72 0>; + + trips { + trip0: skin-alert { + /* throttle at 57C until temperature drops to 56.8C */ + temperature = <57000>; + hysteresis = <200>; + type = "passive"; + }; + + trip1: skin-crit { + /* shut down at 65C */ + temperature = <65000>; + hysteresis = <2000>; + type = "critical"; + }; + }; + + cooling-maps { + map0 { + trip = <&trip0>; + cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, + <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, + <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, + <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, + <&actmon THERMAL_NO_LIMIT + THERMAL_NO_LIMIT>; + }; + }; + }; + + cpu-thermal { + polling-delay-passive = <1000>; /* milliseconds */ + polling-delay = <5000>; /* milliseconds */ + + thermal-sensors = <&nct72 1>; + + trips { + trip2: cpu-alert { + /* throttle at 75C until temperature drops to 74.8C */ + temperature = <75000>; + hysteresis = <200>; + type = "passive"; + }; + + trip3: cpu-crit { + /* shut down at 90C */ + temperature = <90000>; + hysteresis = <2000>; + type = "critical"; + }; + }; + + cooling-maps { + map1 { + trip = <&trip2>; + cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, + <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, + <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, + <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, + <&actmon THERMAL_NO_LIMIT + THERMAL_NO_LIMIT>; + }; + }; + }; + }; + + memory-controller@7000f000 { + emc-timings-0 { + /* Elpida 2GB 750 MHZ */ + nvidia,ram-code = <0>; + + timing-25500000 { + clock-frequency = <25500000>; + + nvidia,emem-configuration = < 0x00020001 0xc0000010 + 0x00000001 0x00000001 0x00000002 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0502 0x75e30303 0x001f0000 >; + }; + + timing-51000000 { + clock-frequency = <51000000>; + + nvidia,emem-configuration = < 0x00010001 0xc0000010 + 0x00000001 0x00000001 0x00000002 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0502 0x74e30303 0x001f0000 >; + }; + + timing-102000000 { + clock-frequency = <102000000>; + + nvidia,emem-configuration = < 0x00000001 0xc0000018 + 0x00000001 0x00000001 0x00000003 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0503 0x74430504 0x001f0000 >; + }; + + timing-204000000 { + clock-frequency = <204000000>; + + nvidia,emem-configuration = < 0x00000003 0xc0000025 + 0x00000001 0x00000001 0x00000005 0x00000002 + 0x00000003 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0505 0x74040a06 0x001f0000 >; + }; + + timing-375000000 { + clock-frequency = <375000000>; + + nvidia,emem-configuration = < 0x00000005 0xc0000044 + 0x00000001 0x00000002 0x00000009 0x00000005 + 0x00000005 0x00000001 0x00000002 0x00000008 + 0x00000002 0x00000002 0x00000003 0x00000006 + 0x06030202 0x000d0709 0x7086110a 0x001f0000 >; + }; + + timing-750000000 { + clock-frequency = <750000000>; + + nvidia,emem-configuration = < 0x0000000b 0xc0000087 + 0x00000004 0x00000005 0x00000012 0x0000000c + 0x0000000b 0x00000002 0x00000003 0x0000000c + 0x00000002 0x00000002 0x00000004 0x00000008 + 0x08040202 0x00160d12 0x710c2213 0x001f0000 >; + }; + }; + + emc-timings-1 { + /* Hynix 2GB 750 MHZ */ + nvidia,ram-code = <1>; + + timing-51000000 { + clock-frequency = <51000000>; + + nvidia,emem-configuration = < 0x00010003 0xc0000010 + 0x00000001 0x00000001 0x00000002 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0502 0x74630303 0x001f0000 >; + }; + + timing-102000000 { + clock-frequency = <102000000>; + + nvidia,emem-configuration = < 0x00000003 0xc0000018 + 0x00000001 0x00000001 0x00000003 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0503 0x73c30504 0x001f0000 >; + }; + + timing-204000000 { + clock-frequency = <204000000>; + + nvidia,emem-configuration = < 0x00000006 0xc0000025 + 0x00000001 0x00000001 0x00000005 0x00000002 + 0x00000003 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0505 0x73840a06 0x001f0000 >; + }; + + timing-375000000 { + clock-frequency = <375000000>; + + nvidia,emem-configuration = < 0x0000000b 0xc0000044 + 0x00000001 0x00000002 0x00000009 0x00000005 + 0x00000005 0x00000001 0x00000002 0x00000008 + 0x00000002 0x00000002 0x00000003 0x00000006 + 0x06030202 0x000c0609 0x7086110a 0x001f0000 >; + }; + + timing-750000000 { + clock-frequency = <750000000>; + + nvidia,emem-configuration = < 0x00000016 0xc0000087 + 0x00000003 0x00000004 0x00000012 0x0000000c + 0x0000000b 0x00000002 0x00000003 0x0000000c + 0x00000002 0x00000002 0x00000004 0x00000008 + 0x08040202 0x00150c12 0x710c2213 0x001f0000 >; + }; + }; + + emc-timings-2 { + /* Micron 2GB 750 MHZ */ + nvidia,ram-code = <2>; + + timing-51000000 { + clock-frequency = <51000000>; + + nvidia,emem-configuration = < 0x00010003 0xc0000010 + 0x00000001 0x00000001 0x00000002 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0502 0x73430303 0x001f0000 >; + }; + + timing-102000000 { + clock-frequency = <102000000>; + + nvidia,emem-configuration = < 0x00000003 0xc0000018 + 0x00000001 0x00000001 0x00000003 0x00000000 + 0x00000001 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0503 0x74430504 0x001f0000 >; + }; + + timing-204000000 { + clock-frequency = <204000000>; + + nvidia,emem-configuration = < 0x00000006 0xc0000025 + 0x00000001 0x00000001 0x00000005 0x00000002 + 0x00000003 0x00000001 0x00000003 0x00000008 + 0x00000002 0x00000001 0x00000002 0x00000006 + 0x06020102 0x000a0505 0x74040a06 0x001f0000 >; + }; + + timing-375000000 { + clock-frequency = <375000000>; + + nvidia,emem-configuration = < 0x0000000b 0xc0000044 + 0x00000001 0x00000002 0x00000009 0x00000005 + 0x00000005 0x00000001 0x00000002 0x00000008 + 0x00000002 0x00000002 0x00000003 0x00000006 + 0x06030202 0x000d0709 0x7086110a 0x001f0000 >; + }; + + timing-750000000 { + clock-frequency = <750000000>; + + nvidia,emem-configuration = < 0x00000016 0xc0000087 + 0x00000004 0x00000005 0x00000012 0x0000000c + 0x0000000b 0x00000003 0x00000003 0x0000000c + 0x00000002 0x00000002 0x00000004 0x00000008 + 0x08040202 0x00160d12 0x710c2213 0x001f0000 >; + }; + }; + }; + + memory-controller@7000f400 { + emc-timings-0 { + /* Elpida 2GB 750 MHZ */ + nvidia,ram-code = <0>; + + timing-25500000 { + clock-frequency = <25500000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + nvidia,emc-cfg-dyn-self-ref; + + nvidia,emc-configuration = < 0x00000001 + 0x00000007 0x00000000 0x00000000 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000000 + 0x00000000 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x000000c0 0x00000000 0x00000030 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000008 0x00000008 + 0x00000004 0x00000001 0x00000000 0x00000004 + 0x00000005 0x000000c7 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000287 0xe8000000 0xff00ff00 >; + }; + + timing-51000000 { + clock-frequency = <51000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + nvidia,emc-cfg-dyn-self-ref; + + nvidia,emc-configuration = < 0x00000002 + 0x0000000f 0x00000001 0x00000000 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000000 + 0x00000000 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x00000181 0x00000000 0x00000060 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000010 0x00000010 + 0x00000004 0x00000002 0x00000000 0x00000004 + 0x00000005 0x0000018e 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x8000040b 0xe8000000 0xff00ff00 >; + }; + + timing-102000000 { + clock-frequency = <102000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + nvidia,emc-cfg-dyn-self-ref; + + nvidia,emc-configuration = < 0x00000004 + 0x0000001e 0x00000003 0x00000001 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000001 + 0x00000001 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x00000303 0x00000000 0x000000c0 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000020 0x00000020 + 0x00000004 0x00000004 0x00000000 0x00000004 + 0x00000005 0x0000031c 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000713 0xe8000000 0xff00ff00 >; + }; + + timing-204000000 { + clock-frequency = <204000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + nvidia,emc-cfg-dyn-self-ref; + + nvidia,emc-configuration = < 0x00000009 + 0x0000003d 0x00000007 0x00000002 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000002 + 0x00000002 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000006 0x00000004 0x0000000a + 0x0000000b 0x00000607 0x00000000 0x00000181 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000040 0x00000040 + 0x00000004 0x00000007 0x00000000 0x00000004 + 0x00000005 0x00000638 0x00000007 0x00000004 + 0x00000000 0x00000000 0x00004288 0x004400a4 + 0x00008000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00020000 + 0x00000100 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000d22 0xe8000000 0xff00ff00 >; + }; + + timing-375000000 { + clock-frequency = <375000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100002>; + nvidia,emc-mode-2 = <0x80200040>; + nvidia,emc-mode-reset = <0x80000521>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + + nvidia,emc-configuration = < 0x00000011 + 0x0000006f 0x0000000c 0x00000004 0x00000003 + 0x00000008 0x00000002 0x0000000a 0x00000004 + 0x00000004 0x00000002 0x00000001 0x00000000 + 0x00000004 0x00000006 0x00000004 0x0000000a + 0x0000000c 0x00000b2d 0x00000000 0x000002cb + 0x00000001 0x00000008 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000075 0x00000200 + 0x00000004 0x0000000c 0x00000000 0x00000004 + 0x00000005 0x00000b6d 0x00000000 0x00000004 + 0x00000000 0x00000000 0x00007088 0x00200084 + 0x00008000 0x00034000 0x00034000 0x00034000 + 0x00034000 0x00014000 0x00014000 0x00014000 + 0x00014000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00048000 0x00048000 0x00048000 + 0x00048000 0x000002a0 0x0600013d 0x00000000 + 0x77fff884 0x01f1f508 0x05057404 0x54000007 + 0x080001e8 0x06000021 0x00000802 0x00020000 + 0x00000100 0x0150000c 0xa0f10000 0x00000000 + 0x00000000 0x8000174b 0xe8000000 0xff00ff89 >; + }; + + timing-750000000 { + clock-frequency = <750000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100002>; + nvidia,emc-mode-2 = <0x80200058>; + nvidia,emc-mode-reset = <0x80000d71>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x00000023 + 0x000000df 0x00000019 0x00000009 0x00000005 + 0x0000000d 0x00000004 0x00000013 0x00000009 + 0x00000009 0x00000003 0x00000001 0x00000000 + 0x00000007 0x0000000b 0x00000009 0x0000000b + 0x00000011 0x0000169a 0x00000000 0x000005a6 + 0x00000003 0x00000010 0x00000001 0x00000000 + 0x0000000e 0x00000018 0x000000e9 0x00000200 + 0x00000005 0x00000017 0x00000000 0x00000007 + 0x00000008 0x000016da 0x0000000c 0x00000004 + 0x00000000 0x00000000 0x00005088 0xf0080191 + 0x00008000 0x0000000a 0x0000000a 0x0000000a + 0x0000000a 0x00000008 0x00000008 0x00000008 + 0x00000008 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x0000000a 0x0000000a 0x0000000a + 0x0000000a 0x000002a0 0x0600013d 0x22220000 + 0x77fff884 0x01f1f501 0x07077404 0x54000000 + 0x080001e8 0x06000021 0x00000802 0x00020000 + 0x00000100 0x00df000c 0xa0f10000 0x00000000 + 0x00000000 0x80002d93 0xf8000000 0xff00ff49 >; + }; + }; + + emc-timings-1 { + /* Hynix 2GB 750 MHZ */ + nvidia,ram-code = <1>; + + timing-51000000 { + clock-frequency = <51000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + nvidia,emc-cfg-dyn-self-ref; + + nvidia,emc-configuration = < 0x00000002 + 0x0000000d 0x00000001 0x00000000 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000000 + 0x00000000 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x00000181 0x00000000 0x00000060 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x0000000e 0x0000000e + 0x00000004 0x00000002 0x00000000 0x00000004 + 0x00000005 0x0000018e 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x8000040b 0xe8000000 0xff00ff00 >; + }; + + timing-102000000 { + clock-frequency = <102000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + nvidia,emc-cfg-dyn-self-ref; + + nvidia,emc-configuration = < 0x00000004 + 0x0000001a 0x00000003 0x00000001 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000001 + 0x00000001 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x00000303 0x00000000 0x000000c0 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x0000001c 0x0000001c + 0x00000004 0x00000004 0x00000000 0x00000004 + 0x00000005 0x0000031c 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000713 0xe8000000 0xff00ff00 >; + }; + + timing-204000000 { + clock-frequency = <204000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + nvidia,emc-cfg-dyn-self-ref; + + nvidia,emc-configuration = < 0x00000009 + 0x00000035 0x00000007 0x00000002 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000002 + 0x00000002 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000006 0x00000004 0x0000000a + 0x0000000b 0x00000607 0x00000000 0x00000181 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000038 0x00000038 + 0x00000004 0x00000007 0x00000000 0x00000004 + 0x00000005 0x00000638 0x00000007 0x00000004 + 0x00000000 0x00000000 0x00004288 0x004400a4 + 0x00008000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00020000 + 0x00000100 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000d22 0xe8000000 0xff00ff00 >; + }; + + timing-375000000 { + clock-frequency = <375000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200040>; + nvidia,emc-mode-reset = <0x80000521>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + + nvidia,emc-configuration = < 0x00000011 + 0x00000060 0x0000000c 0x00000003 0x00000004 + 0x00000008 0x00000002 0x0000000a 0x00000003 + 0x00000003 0x00000002 0x00000001 0x00000000 + 0x00000004 0x00000006 0x00000004 0x0000000a + 0x0000000c 0x00000b2d 0x00000000 0x000002cb + 0x00000001 0x00000008 0x00000001 0x00000000 + 0x00000007 0x00000010 0x00000066 0x00000200 + 0x00000004 0x0000000c 0x00000000 0x00000004 + 0x00000005 0x00000b6d 0x00000000 0x00000004 + 0x00000000 0x00000000 0x00007288 0x00200084 + 0x00008000 0x00044000 0x00044000 0x00044000 + 0x00044000 0x00014000 0x00014000 0x00014000 + 0x00014000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00048000 0x00048000 0x00048000 + 0x00048000 0x000002a0 0x0600013d 0x00000000 + 0x77fff884 0x01f1f508 0x05057404 0x54000007 + 0x08000168 0x06000021 0x00000802 0x00020000 + 0x00000100 0x015f000c 0xa0f10000 0x00000000 + 0x00000000 0x8000174b 0xe8000000 0xff00ff89 >; + }; + + timing-750000000 { + clock-frequency = <750000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100002>; + nvidia,emc-mode-2 = <0x80200058>; + nvidia,emc-mode-reset = <0x80000d71>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x00000023 + 0x000000c1 0x00000019 0x00000008 0x00000005 + 0x0000000d 0x00000004 0x00000013 0x00000008 + 0x00000008 0x00000003 0x00000001 0x00000000 + 0x00000007 0x0000000b 0x00000009 0x0000000b + 0x00000011 0x0000169a 0x00000000 0x000005a6 + 0x00000003 0x00000010 0x00000001 0x00000000 + 0x0000000e 0x00000018 0x000000cb 0x00000200 + 0x00000005 0x00000017 0x00000000 0x00000007 + 0x00000008 0x000016da 0x0000000c 0x00000004 + 0x00000000 0x00000000 0x00005088 0xf0080191 + 0x00008000 0x00008008 0x00000008 0x00000008 + 0x00000008 0x00000008 0x00000008 0x00000008 + 0x00000008 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x0000000a 0x0000000a 0x0000000a + 0x0000000a 0x000002a0 0x0800013d 0x22220000 + 0x77fff884 0x01f1f501 0x07077404 0x54000000 + 0x080001e8 0x08000021 0x00000802 0x00020000 + 0x00000100 0x00fd000c 0xa0f10000 0x00000000 + 0x00000000 0x80002d93 0xe8000000 0xff00ff49 >; + }; + }; + + emc-timings-2 { + /* Micron 2GB 750 MHZ */ + nvidia,ram-code = <2>; + + timing-51000000 { + clock-frequency = <51000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200008>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + nvidia,emc-cfg-dyn-self-ref; + + nvidia,emc-configuration = < 0x00000002 + 0x00000008 0x00000001 0x00000000 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000000 + 0x00000000 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x00000181 0x00000000 0x00000060 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000009 0x00000009 + 0x00000004 0x00000002 0x00000000 0x00000004 + 0x00000005 0x0000018e 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x8000040b 0xe8000000 0xff00ff00 >; + }; + + timing-102000000 { + clock-frequency = <102000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + nvidia,emc-cfg-dyn-self-ref; + + nvidia,emc-configuration = < 0x00000004 + 0x0000001e 0x00000003 0x00000001 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000001 + 0x00000001 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000005 0x00000004 0x0000000a + 0x0000000b 0x00000303 0x00000000 0x000000c0 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000020 0x00000020 + 0x00000004 0x00000004 0x00000000 0x00000004 + 0x00000005 0x0000031c 0x00000006 0x00000004 + 0x00000000 0x00000000 0x00004288 0x007800a4 + 0x00008000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x000fc000 0x000fc000 0x000fc000 + 0x000fc000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00000000 + 0x00000040 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000713 0xe8000000 0xff00ff00 >; + }; + + timing-204000000 { + clock-frequency = <204000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100003>; + nvidia,emc-mode-2 = <0x80200048>; + nvidia,emc-mode-reset = <0x80001221>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + nvidia,emc-cfg-dyn-self-ref; + + nvidia,emc-configuration = < 0x00000009 + 0x0000003d 0x00000007 0x00000002 0x00000002 + 0x0000000a 0x00000005 0x0000000b 0x00000002 + 0x00000002 0x00000003 0x00000001 0x00000000 + 0x00000005 0x00000006 0x00000004 0x0000000a + 0x0000000b 0x00000607 0x00000000 0x00000181 + 0x00000002 0x00000002 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000040 0x00000040 + 0x00000004 0x00000007 0x00000000 0x00000004 + 0x00000005 0x00000638 0x00000007 0x00000004 + 0x00000000 0x00000000 0x00004288 0x004400a4 + 0x00008000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00080000 0x00080000 0x00080000 + 0x00080000 0x000002a0 0x0800211c 0x00000000 + 0x77fff884 0x01f1f108 0x05057404 0x54000007 + 0x08000168 0x08000000 0x00000802 0x00020000 + 0x00000100 0x000c000c 0xa0f10000 0x00000000 + 0x00000000 0x80000d22 0xe8000000 0xff00ff00 >; + }; + + timing-375000000 { + clock-frequency = <375000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100002>; + nvidia,emc-mode-2 = <0x80200040>; + nvidia,emc-mode-reset = <0x80000521>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + + nvidia,emc-configuration = < 0x00000011 + 0x0000006f 0x0000000c 0x00000004 0x00000003 + 0x00000008 0x00000002 0x0000000a 0x00000004 + 0x00000004 0x00000002 0x00000001 0x00000000 + 0x00000004 0x00000006 0x00000004 0x0000000a + 0x0000000c 0x00000b2d 0x00000000 0x000002cb + 0x00000001 0x00000008 0x00000001 0x00000000 + 0x00000007 0x0000000f 0x00000075 0x00000200 + 0x00000004 0x0000000c 0x00000000 0x00000004 + 0x00000005 0x00000b6d 0x00000000 0x00000004 + 0x00000000 0x00000000 0x00007088 0x00200084 + 0x00008000 0x00044000 0x00044000 0x00044000 + 0x00044000 0x00014000 0x00014000 0x00014000 + 0x00014000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00048000 0x00048000 0x00048000 + 0x00048000 0x000002a0 0x0800013d 0x00000000 + 0x77fff884 0x01f1f508 0x05057404 0x54000007 + 0x080001e8 0x08000021 0x00000802 0x00020000 + 0x00000100 0x0150000c 0xa0f10000 0x00000000 + 0x00000000 0x8000174b 0xe8000000 0xff00ff89 >; + }; + + timing-750000000 { + clock-frequency = <750000000>; + + nvidia,emc-auto-cal-interval = <0x001fffff>; + nvidia,emc-mode-1 = <0x80100002>; + nvidia,emc-mode-2 = <0x80200058>; + nvidia,emc-mode-reset = <0x80000d71>; + nvidia,emc-zcal-cnt-long = <0x00000040>; + nvidia,emc-cfg-periodic-qrst; + + nvidia,emc-configuration = < 0x00000023 + 0x000000df 0x00000019 0x00000009 0x00000005 + 0x0000000d 0x00000004 0x00000013 0x00000009 + 0x00000009 0x00000006 0x00000001 0x00000000 + 0x00000007 0x0000000b 0x00000009 0x0000000b + 0x00000011 0x0000169a 0x00000000 0x000005a6 + 0x00000003 0x00000010 0x00000001 0x00000000 + 0x0000000e 0x00000018 0x000000e9 0x00000200 + 0x00000005 0x00000017 0x00000000 0x00000007 + 0x00000008 0x000016da 0x0000000c 0x00000004 + 0x00000000 0x00000000 0x00005088 0xf0080191 + 0x00008000 0x0000800a 0x0000000a 0x0000000a + 0x0000000a 0x00000008 0x00000008 0x00000008 + 0x00000008 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x00000000 0x00000000 0x00000000 + 0x00000000 0x007fc00a 0x0000000a 0x0000000a + 0x0000000a 0x000002a0 0x0800013d 0x22220000 + 0x77fff884 0x01f1f501 0x07077404 0x54000000 + 0x080001e8 0x08000021 0x00000802 0x00020000 + 0x00000100 0x00df000c 0xa0f10000 0x00000000 + 0x00000000 0x80002d93 0xf8000000 0xff00ff49 >; + }; + }; + }; +}; + +&emc_icc_dvfs_opp_table { + /delete-node/ opp-800000000-1300; + /delete-node/ opp-900000000-1350; +}; + +&emc_bw_dfs_opp_table { + /delete-node/ opp-800000000; + /delete-node/ opp-900000000; +}; From 7d6b8ca3d5c42ba87469ce0e74479ce3ca9c0494 Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Tue, 8 Feb 2022 19:06:13 +0200 Subject: [PATCH 3/7] asus-ec-keys: add touchpad toggle attribute Signed-off-by: Svyatoslav Ryhel --- drivers/input/keyboard/asus-ec-keys.c | 56 +++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/drivers/input/keyboard/asus-ec-keys.c b/drivers/input/keyboard/asus-ec-keys.c index 22cdaa3d655d2..2bf10a1794da9 100644 --- a/drivers/input/keyboard/asus-ec-keys.c +++ b/drivers/input/keyboard/asus-ec-keys.c @@ -12,12 +12,16 @@ #define ASUSEC_EXT_KEY_CODES 0x20 +#define ASUSEC_TOUCHPAD_ON 0xF4D4 +#define ASUSEC_TOUCHPAD_OFF 0xF5D4 + struct asusec_keys_data { struct notifier_block nb; struct asusec_info *ec; struct input_dev *xidev; bool special_key_pressed; bool special_key_mode; + bool touchpad_enabled; unsigned short keymap[ASUSEC_EXT_KEY_CODES * 2]; }; @@ -208,6 +212,49 @@ static void asusec_keys_setup_keymap(struct asusec_keys_data *priv) } } +static ssize_t touchpad_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct asusec_keys_data *priv = dev_get_drvdata(dev); + + return sprintf(buf, "%d\n", priv->touchpad_enabled); +} + +static ssize_t touchpad_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct asusec_keys_data *priv = dev_get_drvdata(dev); + int state; + + sscanf(buf, "%d", &state); + + /* Set the Touchpad switch: 0 - Disable, 1 - Enable */ + if (state) { + state = asusec_i2c_command(priv->ec, ASUSEC_TOUCHPAD_ON); + if (!state) + priv->touchpad_enabled = true; + } else { + state = asusec_i2c_command(priv->ec, ASUSEC_TOUCHPAD_OFF); + if (!state) + priv->touchpad_enabled = false; + } + + return count; +} + +static DEVICE_ATTR_RW(touchpad); + +static struct attribute *asusec_keys_attributes[] = { + &dev_attr_touchpad.attr, + NULL +}; + +static const struct attribute_group asusec_keys_attr_group = { + .attrs = asusec_keys_attributes, +}; + static int asusec_keys_probe(struct platform_device *pdev) { struct asusec_info *ec = asusec_cell_to_ec(pdev); @@ -243,6 +290,15 @@ static int asusec_keys_probe(struct platform_device *pdev) return ret; } + ret = asusec_i2c_command(priv->ec, ASUSEC_TOUCHPAD_ON); + if (!ret) + priv->touchpad_enabled = true; + + ret = devm_device_add_group(&pdev->dev, &asusec_keys_attr_group); + if (ret) + return dev_err_probe(&pdev->dev, ret, + "failed to create sysfs attributes\n"); + asusec_input_handler.private = priv; ret = input_register_handler(&asusec_input_handler); From ba8436b17a094fb5fd9bc372971290376b4fe69f Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Mon, 4 Jul 2022 09:03:56 +0300 Subject: [PATCH 4/7] ASoC: tegra: dsp: add support for Fortemedia FM34NE DSP Signed-off-by: Svyatoslav Ryhel --- drivers/staging/Kconfig | 2 + drivers/staging/Makefile | 1 + drivers/staging/dsp/Kconfig | 7 + drivers/staging/dsp/Makefile | 2 + drivers/staging/dsp/dsp-fm34ne.c | 364 +++++++++++++ drivers/staging/dsp/dsp-fm34ne.h | 845 +++++++++++++++++++++++++++++++ 6 files changed, 1221 insertions(+) create mode 100644 drivers/staging/dsp/Kconfig create mode 100644 drivers/staging/dsp/Makefile create mode 100644 drivers/staging/dsp/dsp-fm34ne.c create mode 100644 drivers/staging/dsp/dsp-fm34ne.h diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index c02cd0ab5ca53..d4d304a6a8fc8 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -92,4 +92,6 @@ source "drivers/staging/wfx/Kconfig" source "drivers/staging/p4wifi/Kconfig" +source "drivers/staging/dsp/Kconfig" + endif # STAGING diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index b09de66084689..9891e80eab570 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -3,6 +3,7 @@ obj-y += android/ obj-y += media/ +obj-y += dsp/ obj-$(CONFIG_PRISM2_USB) += wlan-ng/ obj-$(CONFIG_FB_OLPC_DCON) += olpc_dcon/ obj-$(CONFIG_RTL8192U) += rtl8192u/ diff --git a/drivers/staging/dsp/Kconfig b/drivers/staging/dsp/Kconfig new file mode 100644 index 0000000000000..82a7fd4faa69f --- /dev/null +++ b/drivers/staging/dsp/Kconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: GPL-2.0 +config DSP_FM34NE + bool "DSP FM34NE driver" + depends on I2C && GPIOLIB + help + Say Y or M here if you want to add support for Fortemedia FM34NE + DSP mainly used on ASUS T20/T30 Transformers. diff --git a/drivers/staging/dsp/Makefile b/drivers/staging/dsp/Makefile new file mode 100644 index 0000000000000..e60ba3c88e085 --- /dev/null +++ b/drivers/staging/dsp/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0 +obj-$(CONFIG_DSP_FM34NE) += dsp-fm34ne.o diff --git a/drivers/staging/dsp/dsp-fm34ne.c b/drivers/staging/dsp/dsp-fm34ne.c new file mode 100644 index 0000000000000..cb00b451a6b6b --- /dev/null +++ b/drivers/staging/dsp/dsp-fm34ne.c @@ -0,0 +1,364 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Fortemedia FM34NE DSP driver + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dsp-fm34ne.h" + +#define FM34NE_I2C_CHECK 0xC0 +#define FM34NE_MAX_RETRY 5 + +enum state { + FM34NE_BYPASS, + FM34NE_NS_ENABLE, + FM34NE_NS_DISABLE, + FM34NE_MAX, +}; + +struct fm34ne_dsp_data { + struct i2c_client *client; + + struct gpio_desc *bypass_gpio; + struct gpio_desc *reset_gpio; + + struct clk *dap_mclk; + struct regulator *vdd_supply; + + const struct fm34ne_dsp_devdata *data; +}; + +static int fm34ne_dsp_write_config(struct i2c_client *client, + const u8* config, size_t size) +{ + int ret, i; + + for (i = 0; i < FM34NE_MAX_RETRY; i++) { + ret = i2c_master_send(client, config, size); + if (ret > 0) + return 0; + + msleep(5); + } + + return ret; +} + +static int fm34ne_dsp_set_config(struct fm34ne_dsp_data *fm34, int state) +{ + struct device *dev = &fm34->client->dev; + + const u8 *enable_ns_parameter = fm34->data->enable_noise_suppression; + int enable_ns_length = fm34->data->enable_ns_length; + + const u8 *disable_ns_parameter = fm34->data->disable_noise_suppression; + int disable_ns_length = fm34->data->disable_ns_length; + + int ret; + + gpiod_set_value_cansleep(fm34->bypass_gpio, 1); + msleep(20); + + switch (state) { + case FM34NE_NS_ENABLE: + ret = fm34ne_dsp_write_config(fm34->client, + enable_parameter, sizeof(enable_parameter)); + if (ret < 0) { + dev_err(dev, "failed to set DSP enable with %d\n", ret); + goto exit; + } + + ret = fm34ne_dsp_write_config(fm34->client, + enable_ns_parameter, enable_ns_length); + if (ret < 0) { + dev_err(dev, "failed to enable DSP noise suppression with %d\n", ret); + goto exit; + } + + dev_info(dev, "noise suppression enable DSP parameter written\n"); + break; + + case FM34NE_NS_DISABLE: + ret = fm34ne_dsp_write_config(fm34->client, + enable_parameter, sizeof(enable_parameter)); + if (ret < 0) { + dev_err(dev, "failed to set DSP enable with %d\n", ret); + goto exit; + } + + ret = fm34ne_dsp_write_config(fm34->client, + disable_ns_parameter, disable_ns_length); + if (ret < 0) { + dev_err(dev, "failed to disable DSP noise suppression with %d\n", ret); + goto exit; + } + + dev_info(dev, "noise suppression disable DSP parameter written\n"); + break; + + case FM34NE_BYPASS: + default: + ret = fm34ne_dsp_write_config(fm34->client, + bypass_parameter, sizeof(bypass_parameter)); + if (ret < 0) { + dev_err(dev, "failed to set DSP bypass with %d\n", ret); + goto exit; + } + + dev_info(dev, "bypass DSP parameter written\n"); + break; + } + +exit: + gpiod_set_value_cansleep(fm34->bypass_gpio, 0); + + return ret; +} + +static int fm34ne_dsp_set_hw(struct fm34ne_dsp_data *fm34) +{ + struct device *dev = &fm34->client->dev; + int ret; + + ret = clk_prepare_enable(fm34->dap_mclk); + if (ret) { + dev_err(dev, "failed to enable the DSP MCLK: %d\n", ret); + return ret; + } + + ret = regulator_enable(fm34->vdd_supply); + if (ret < 0) { + dev_err(dev, "failed to enable vdd power supply\n"); + return ret; + } + + return 0; +} + +static void fm34ne_dsp_reset(struct fm34ne_dsp_data *fm34) +{ + gpiod_set_value_cansleep(fm34->reset_gpio, 1); + msleep(10); + + gpiod_set_value_cansleep(fm34->reset_gpio, 0); + msleep(100); +} + +static int fm34ne_dsp_init_chip(struct fm34ne_dsp_data *fm34) +{ + const u8 *input_parameter = fm34->data->input_parameter; + int input_parameter_length = fm34->data->input_parameter_length; + int ret; + + ret = fm34ne_dsp_set_hw(fm34); + if (ret) + return ret; + + fm34ne_dsp_reset(fm34); + + gpiod_set_value_cansleep(fm34->bypass_gpio, 1); + msleep(20); + + ret = i2c_smbus_write_byte(fm34->client, FM34NE_I2C_CHECK); + if (ret < 0) { + dev_info(&fm34->client->dev, "initial write failed\n"); + msleep(50); + + fm34ne_dsp_reset(fm34); + gpiod_set_value_cansleep(fm34->bypass_gpio, 0); + + return ret; + } + + ret = fm34ne_dsp_write_config(fm34->client, + input_parameter, input_parameter_length); + if (ret < 0) + return -EINVAL; + + msleep(100); + gpiod_set_value_cansleep(fm34->bypass_gpio, 0); + + dev_info(&fm34->client->dev, "%s detected\n", fm34->data->model); + + /* Constantly set DSP to bypass mode for now */ + ret = fm34ne_dsp_set_config(fm34, FM34NE_BYPASS); + if (ret) + return ret; + + return 0; +} + +static int fm34ne_dsp_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct device *dev = &client->dev; + struct fm34ne_dsp_data *fm34; + int ret; + + fm34 = devm_kzalloc(dev, sizeof(*fm34), GFP_KERNEL); + if (!fm34) + return -ENOMEM; + + i2c_set_clientdata(client, fm34); + fm34->client = client; + + fm34->dap_mclk = devm_clk_get_optional(dev, "mclk"); + if (IS_ERR(fm34->dap_mclk)) + return dev_err_probe(dev, PTR_ERR(fm34->dap_mclk), + "can't retrieve DSP MCLK\n"); + + fm34->vdd_supply = devm_regulator_get(dev, "vdd"); + if (IS_ERR(fm34->vdd_supply)) + return dev_err_probe(dev, PTR_ERR(fm34->vdd_supply), + "failed to get vdd regulator\n"); + + fm34->reset_gpio = devm_gpiod_get_optional(dev, "reset", + GPIOD_OUT_LOW); + if (IS_ERR(fm34->reset_gpio)) + return dev_err_probe(dev, PTR_ERR(fm34->reset_gpio), + "failed to get reset GPIO\n"); + + /* + * Bypass gpio is used to set audio into bypass mode + * in relation to dsp to be able to program it. Once + * programming is done, bypass gpio has to be set to + * low to return dsp into audio processing. + */ + fm34->bypass_gpio = devm_gpiod_get_optional(dev, "bypass", + GPIOD_OUT_LOW); + if (IS_ERR(fm34->bypass_gpio)) + return dev_err_probe(dev, PTR_ERR(fm34->bypass_gpio), + "failed to get bypass GPIO\n"); + + fm34->data = of_device_get_match_data(dev); + if (!fm34->data) + return -ENODEV; + + ret = fm34ne_dsp_init_chip(fm34); + if (ret) + return dev_err_probe(dev, ret, + "failed to init DSP chip\n"); + + return 0; +} + +static int fm34ne_dsp_suspend(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct fm34ne_dsp_data *fm34 = i2c_get_clientdata(client); + + gpiod_set_value_cansleep(fm34->bypass_gpio, 0); + + regulator_disable(fm34->vdd_supply); + + clk_disable_unprepare(fm34->dap_mclk); + + return 0; +} + +static int fm34ne_dsp_resume(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct fm34ne_dsp_data *fm34 = i2c_get_clientdata(client); + int ret; + + ret = fm34ne_dsp_init_chip(fm34); + if (ret) + dev_err(&client->dev, "failed to re-init DSP chip with %d\n", ret); + + return 0; +} + +static DEFINE_SIMPLE_DEV_PM_OPS(fm34ne_dsp_pm_ops, + fm34ne_dsp_suspend, fm34ne_dsp_resume); + +static const struct fm34ne_dsp_devdata tf101_dsp_data = { + .model = "ASUS Eee Pad Trnasformer TF101", + .input_parameter = TF101_input_parameter, + .input_parameter_length = sizeof(TF101_input_parameter), + .enable_noise_suppression = TF101_enable_NS, + .enable_ns_length = sizeof(TF101_enable_NS), + .disable_noise_suppression = TF101_disable_NS, + .disable_ns_length = sizeof(TF101_disable_NS), +}; + +static const struct fm34ne_dsp_devdata tf201_dsp_data = { + .model = "ASUS Transformer Prime TF201", + .input_parameter = TF201_input_parameter, + .input_parameter_length = sizeof(TF201_input_parameter), + .enable_noise_suppression = TF201_enable_NS, + .enable_ns_length = sizeof(TF201_enable_NS), + .disable_noise_suppression = TF201_disable_NS, + .disable_ns_length = sizeof(TF201_disable_NS), +}; + +static const struct fm34ne_dsp_devdata tf300t_dsp_data = { + .model = "ASUS Transformer PAD TF300T", + .input_parameter = TF300T_input_parameter, + .input_parameter_length = sizeof(TF300T_input_parameter), + .enable_noise_suppression = TF201_enable_NS, + .enable_ns_length = sizeof(TF201_enable_NS), + .disable_noise_suppression = TF201_disable_NS, + .disable_ns_length = sizeof(TF201_disable_NS), +}; + +static const struct fm34ne_dsp_devdata tf700t_dsp_data = { + .model = "ASUS Transformer Infinity TF700T", + .input_parameter = TF700T_input_parameter, + .input_parameter_length = sizeof(TF700T_input_parameter), + .enable_noise_suppression = TF700T_enable_NS, + .enable_ns_length = sizeof(TF700T_enable_NS), + .disable_noise_suppression = TF700T_disable_NS, + .disable_ns_length = sizeof(TF700T_disable_NS), +}; + +static const struct fm34ne_dsp_devdata chagall_dsp_data = { + .model = "Pegatron Chagall", + .input_parameter = TF300T_input_parameter, + .input_parameter_length = sizeof(TF300T_input_parameter), + .enable_noise_suppression = TF201_enable_NS, + .enable_ns_length = sizeof(TF201_enable_NS), + .disable_noise_suppression = TF201_disable_NS, + .disable_ns_length = sizeof(TF201_disable_NS), +}; + +static const struct of_device_id fm34ne_dsp_match[] = { + { .compatible = "asus,tf101-dsp", .data = &tf101_dsp_data }, + { .compatible = "asus,tf201-dsp", .data = &tf201_dsp_data }, + { .compatible = "asus,tf300t-dsp", .data = &tf300t_dsp_data }, + { .compatible = "asus,tf700t-dsp", .data = &tf700t_dsp_data }, + { .compatible = "pegatron,chagall-dsp", .data = &chagall_dsp_data }, + { } +}; +MODULE_DEVICE_TABLE(of, fm34ne_dsp_match); + +static const struct i2c_device_id fm34ne_dsp_id[] = { + { "dsp_fm34ne", 0 }, + { } +}; +MODULE_DEVICE_TABLE(i2c, fm34ne_dsp_id); + +static struct i2c_driver fm34ne_dsp_driver = { + .driver = { + .name = "fm34ne-dsp", + .pm = pm_sleep_ptr(&fm34ne_dsp_pm_ops), + .of_match_table = fm34ne_dsp_match, + }, + .probe = fm34ne_dsp_probe, + .id_table = fm34ne_dsp_id, +}; +module_i2c_driver(fm34ne_dsp_driver); + +MODULE_AUTHOR("Svyatoslav Ryhel "); +MODULE_DESCRIPTION("Fortemedia FM34NE DSP driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/staging/dsp/dsp-fm34ne.h b/drivers/staging/dsp/dsp-fm34ne.h new file mode 100644 index 0000000000000..428ac33dd310e --- /dev/null +++ b/drivers/staging/dsp/dsp-fm34ne.h @@ -0,0 +1,845 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifndef __DSP_FM34NE_H__ +#define __DSP_FM34NE_H__ + +struct fm34ne_dsp_devdata { + const char *model; + + const u8 *input_parameter; + int input_parameter_length; + + const u8 *enable_noise_suppression; + int enable_ns_length; + + const u8 *disable_noise_suppression; + int disable_ns_length; +}; + +/* Common section */ +static const u8 bypass_parameter[] = { + 0xC0, + 0xFC, 0xF3, 0x3B, 0x23, 0x00, 0x00, 0x04 +}; + +static const u8 enable_parameter[] = { + 0xC0, + 0xFC, 0xF3, 0x3B, 0x23, 0x00, 0x00, 0x00 +}; + +/* TF201 section */ +static const u8 TF201_input_parameter[] = { + 0xC0, + 0xFC, 0xF3, 0x68, 0x64, 0x04, + 0xFC, 0xF3, 0x0D, 0x10, 0x00, 0x90, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x01, 0x82, 0x30, 0x50, + 0xFC, 0xF3, 0x0D, 0x10, 0x02, 0x27, 0x90, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x03, 0x19, 0x00, 0xA0, + 0xFC, 0xF3, 0x0D, 0x10, 0x04, 0x1C, 0x5A, 0xAF, + 0xFC, 0xF3, 0x0D, 0x10, 0x05, 0x90, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x06, 0x80, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x07, 0x1C, 0x5A, 0xAF, + 0xFC, 0xF3, 0x0D, 0x10, 0x08, 0x90, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x09, 0x19, 0x01, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x0A, 0x27, 0x90, 0x5F, + 0xFC, 0xF3, 0x0D, 0x10, 0x0B, 0x19, 0x01, 0x10, + 0xFC, 0xF3, 0x0D, 0x10, 0x0C, 0x1C, 0x58, 0xEF, + 0xFC, 0xF3, 0x0D, 0x10, 0x0D, 0x90, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x0E, 0x80, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x0F, 0x1C, 0x58, 0xEF, + 0xFC, 0xF3, 0x0D, 0x10, 0x10, 0x90, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x11, 0x82, 0x2D, 0x20, + 0xFC, 0xF3, 0x0D, 0x10, 0x12, 0x27, 0x98, 0x5F, + 0xFC, 0xF3, 0x0D, 0x10, 0x13, 0x19, 0x01, 0x80, + 0xFC, 0xF3, 0x0D, 0x10, 0x14, 0x80, 0x50, 0x5A, + 0xFC, 0xF3, 0x0D, 0x10, 0x15, 0x90, 0x50, 0x3A, + 0xFC, 0xF3, 0x0D, 0x10, 0x16, 0x80, 0x50, 0x6F, + 0xFC, 0xF3, 0x0D, 0x10, 0x17, 0x90, 0x50, 0x4F, + 0xFC, 0xF3, 0x0D, 0x10, 0x18, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x19, 0x19, 0x00, 0x6F, + 0xFC, 0xF3, 0x0D, 0x10, 0x1A, 0x80, 0x00, 0xAC, + 0xFC, 0xF3, 0x0D, 0x10, 0x1B, 0x26, 0x7C, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x1C, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x1D, 0x19, 0x1D, 0x82, + 0xFC, 0xF3, 0x0D, 0x10, 0x1E, 0x19, 0x1C, 0xEF, + 0xFC, 0xF3, 0x0D, 0x10, 0x1F, 0x80, 0x53, 0x9A, + 0xFC, 0xF3, 0x0D, 0x10, 0x20, 0x93, 0xE2, 0xAA, + 0xFC, 0xF3, 0x0D, 0x10, 0x21, 0x80, 0x4F, 0xBA, + 0xFC, 0xF3, 0x0D, 0x10, 0x22, 0x22, 0x7A, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x23, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x24, 0x18, 0x2F, 0xD0, + 0xFC, 0xF3, 0x0D, 0x10, 0x25, 0x94, 0x4F, 0xB6, + 0xFC, 0xF3, 0x0D, 0x10, 0x26, 0x80, 0x4F, 0x6A, + 0xFC, 0xF3, 0x0D, 0x10, 0x27, 0x26, 0x7A, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x28, 0x18, 0x2F, 0x80, + 0xFC, 0xF3, 0x0D, 0x10, 0x29, 0x18, 0x2B, 0xCF, + 0xFC, 0xF3, 0x0D, 0x10, 0x2A, 0x95, 0x62, 0x06, + 0xFC, 0xF3, 0x0D, 0x10, 0x2B, 0x95, 0x61, 0x46, + 0xFC, 0xF3, 0x0D, 0x10, 0x2C, 0x40, 0xFA, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x2D, 0x40, 0xE5, 0xB0, + 0xFC, 0xF3, 0x0D, 0x10, 0x2E, 0x82, 0x30, 0x14, + 0xFC, 0xF3, 0x0D, 0x10, 0x2F, 0x27, 0x00, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x30, 0x22, 0x78, 0x00, + 0xFC, 0xF3, 0x0D, 0x10, 0x31, 0x83, 0xFD, 0x44, + 0xFC, 0xF3, 0x0D, 0x10, 0x32, 0x26, 0xE2, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x33, 0x19, 0x03, 0x90, + 0xFC, 0xF3, 0x0D, 0x10, 0x34, 0x93, 0xFD, 0x4A, + 0xFC, 0xF3, 0x0D, 0x10, 0x35, 0x83, 0xFD, 0x5A, + 0xFC, 0xF3, 0x0D, 0x10, 0x36, 0x23, 0xA2, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x37, 0x93, 0xFD, 0x5A, + 0xFC, 0xF3, 0x0D, 0x10, 0x38, 0x00, 0x00, 0x00, + 0xFC, 0xF3, 0x0D, 0x10, 0x39, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x3A, 0x18, 0x3F, 0x7F, + 0xFC, 0xF3, 0x0D, 0x10, 0x3B, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x3C, 0x19, 0x6C, 0xA4, + 0xFC, 0xF3, 0x0D, 0x10, 0x3D, 0x19, 0x66, 0x7F, + 0xFC, 0xF3, 0x0D, 0x10, 0x3E, 0x80, 0x79, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x3F, 0x82, 0x2D, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x40, 0x27, 0x97, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x41, 0x19, 0x04, 0x40, + 0xFC, 0xF3, 0x0D, 0x10, 0x42, 0x94, 0x7B, 0xD6, + 0xFC, 0xF3, 0x0D, 0x10, 0x43, 0x80, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x44, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x45, 0x18, 0x48, 0xDF, + 0xFC, 0xF3, 0x0D, 0x10, 0x46, 0x38, 0x00, 0x87, + 0xFC, 0xF3, 0x0D, 0x10, 0x47, 0x09, 0x00, 0x1B, + 0xFC, 0xF3, 0x0D, 0x10, 0x48, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x49, 0x18, 0x2D, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4A, 0x18, 0x21, 0x5F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4B, 0x88, 0x4F, 0x47, + 0xFC, 0xF3, 0x0D, 0x10, 0x4C, 0x82, 0x2A, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x4D, 0x22, 0x62, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4E, 0x26, 0x62, 0x7F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4F, 0x19, 0x05, 0x25, + 0xFC, 0xF3, 0x0D, 0x10, 0x50, 0x3B, 0xFF, 0xC7, + 0xFC, 0xF3, 0x0D, 0x10, 0x51, 0x19, 0x05, 0x3F, + 0xFC, 0xF3, 0x0D, 0x10, 0x52, 0x0D, 0x01, 0xA6, + 0xFC, 0xF3, 0x0D, 0x10, 0x53, 0x92, 0x2A, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x54, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x55, 0x18, 0x23, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x56, 0x96, 0x2A, 0xA1, + 0xFC, 0xF3, 0x0D, 0x10, 0x57, 0x96, 0x2A, 0xB0, + 0xFC, 0xF3, 0x0D, 0x10, 0x58, 0x9A, 0x2A, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x59, 0x9A, 0x2A, 0xD7, + 0xFC, 0xF3, 0x0D, 0x10, 0x5A, 0x96, 0x2A, 0xE8, + 0xFC, 0xF3, 0x0D, 0x10, 0x5B, 0x38, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x5C, 0x83, 0xFF, 0xAA, + 0xFC, 0xF3, 0x0D, 0x10, 0x5D, 0x3B, 0x20, 0x02, + 0xFC, 0xF3, 0x0D, 0x10, 0x5E, 0x36, 0x2B, 0x01, + 0xFC, 0xF3, 0x0D, 0x10, 0x5F, 0x36, 0x2B, 0x60, + 0xFC, 0xF3, 0x0D, 0x10, 0x60, 0x1C, 0x72, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x61, 0x93, 0xFF, 0x9A, + 0xFC, 0xF3, 0x0D, 0x10, 0x62, 0x93, 0xFF, 0xAA, + 0xFC, 0xF3, 0x0D, 0x10, 0x63, 0x86, 0x2A, 0xA1, + 0xFC, 0xF3, 0x0D, 0x10, 0x64, 0x86, 0x2A, 0xB0, + 0xFC, 0xF3, 0x0D, 0x10, 0x65, 0x8A, 0x2A, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x66, 0x8A, 0x2A, 0xD7, + 0xFC, 0xF3, 0x0D, 0x10, 0x67, 0x86, 0x2A, 0xE8, + 0xFC, 0xF3, 0x0D, 0x10, 0x68, 0x0D, 0x08, 0x28, + 0xFC, 0xF3, 0x0D, 0x10, 0x69, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x6A, 0x18, 0x24, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x6B, 0x83, 0xFC, 0xFA, + 0xFC, 0xF3, 0x0D, 0x10, 0x6C, 0x23, 0x8A, 0xBF, + 0xFC, 0xF3, 0x0D, 0x10, 0x6D, 0x82, 0x2D, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x6E, 0x27, 0x97, 0xDF, + 0xFC, 0xF3, 0x0D, 0x10, 0x6F, 0x23, 0xAA, 0x91, + 0xFC, 0xF3, 0x0D, 0x10, 0x70, 0x93, 0xFC, 0xFA, + 0xFC, 0xF3, 0x0D, 0x10, 0x71, 0x83, 0x80, 0x30, + 0xFC, 0xF3, 0x0D, 0x10, 0x72, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x73, 0x18, 0x3E, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x74, 0x80, 0x7A, 0x4A, + 0xFC, 0xF3, 0x0D, 0x10, 0x75, 0x19, 0x07, 0xE2, + 0xFC, 0xF3, 0x0D, 0x10, 0x76, 0x23, 0x3E, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x77, 0x0D, 0x00, 0xEA, + 0xFC, 0xF3, 0x0D, 0x10, 0x78, 0x80, 0x7B, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x79, 0x38, 0x7E, 0x02, + 0xFC, 0xF3, 0x0D, 0x10, 0x7A, 0x1C, 0x76, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x7B, 0x90, 0x7B, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x7C, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x7D, 0x19, 0x75, 0xCF, + 0xFC, 0xF3, 0x0D, 0x10, 0x7E, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x7F, 0x19, 0x75, 0x9F, + 0xFC, 0xF3, 0x68, 0x64, 0x00, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA0, 0x91, 0xCB, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB0, 0x50, 0x1A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA1, 0x82, 0xF3, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB1, 0x02, 0xF5, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA2, 0x82, 0xB5, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB2, 0x50, 0x1F, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA3, 0x83, 0xF4, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB3, 0x50, 0x2A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA4, 0x96, 0x66, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB4, 0x50, 0x3B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA5, 0x82, 0xCC, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB5, 0x50, 0x46, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA6, 0xC2, 0xCC, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB6, 0x50, 0x46, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA7, 0xC2, 0x10, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB7, 0x50, 0x4A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA8, 0x82, 0x10, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB8, 0x50, 0x4A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA9, 0x82, 0x31, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB9, 0x50, 0x4B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAA, 0xC2, 0x31, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBA, 0x50, 0x4B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAB, 0x82, 0x3F, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBB, 0x50, 0x56, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAC, 0xC2, 0x3F, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBC, 0x50, 0x56, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAD, 0x83, 0xE8, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBD, 0x50, 0x6B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAE, 0x97, 0x58, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBE, 0x50, 0x74, + 0xFC, 0xF3, 0x3B, 0x22, 0xF8, 0x80, 0x05, + 0xFC, 0xF3, 0x3B, 0x22, 0xC8, 0x00, 0x29, + 0xFC, 0xF3, 0x3B, 0x22, 0xEE, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x22, 0xF9, 0x08, 0x5F, + 0xFC, 0xF3, 0x3B, 0x22, 0xFA, 0x24, 0x81, + 0xFC, 0xF3, 0x3B, 0x23, 0x05, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x01, 0x00, 0x02, + 0xFC, 0xF3, 0x3B, 0x23, 0x07, 0xF0, 0xF0, + 0xFC, 0xF3, 0x3B, 0x23, 0x09, 0x08, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x0D, 0x01, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x0C, 0x08, 0x00, + 0xFC, 0xF3, 0x3B, 0x22, 0xF2, 0x00, 0x44, + 0xFC, 0xF3, 0x3B, 0x22, 0xF6, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x22, 0xC6, 0x00, 0x06, + 0xFC, 0xF3, 0x3B, 0x22, 0xC7, 0x00, 0x08, + 0xFC, 0xF3, 0x3B, 0x22, 0xD2, 0x8A, 0x94, + 0xFC, 0xF3, 0x3B, 0x23, 0x03, 0x00, 0x01, + 0xFC, 0xF3, 0x3B, 0x23, 0x00, 0x00, 0x04, + 0xFC, 0xF3, 0x3B, 0x23, 0x04, 0x23, 0x10, + 0xFC, 0xF3, 0x3B, 0x23, 0x2F, 0x01, 0x10, + 0xFC, 0xF3, 0x3B, 0x23, 0x39, 0x00, 0x06, + 0xFC, 0xF3, 0x3B, 0x23, 0xCF, 0x01, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0xD0, 0x06, 0x20, + 0xFC, 0xF3, 0x3B, 0x23, 0xD5, 0x3C, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x6E, 0x20, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x33, 0x02, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0xB3, 0x00, 0x0A, + 0xFC, 0xF3, 0x3B, 0x23, 0xB4, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x70, 0x40, 0x00, + 0xFC, 0xF3, 0x3B, 0x3F, 0xD2, 0x00, 0x32, + 0xFC, 0xF3, 0x3B, 0x22, 0xFB, 0x00, 0x00 +}; + +static const u8 TF201_enable_NS[] = { + 0xC0, + 0xFC, 0xF3, 0x3B, 0x23, 0x03, 0x00, 0x01, + 0xFC, 0xF3, 0x3B, 0x23, 0x04, 0x23, 0x01 +}; + +static const u8 TF201_disable_NS[] = { + 0xC0, + 0xFC, 0xF3, 0x3B, 0x23, 0x03, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x04, 0x00, 0x10 +}; + +/* TF700T section */ +static const u8 TF700T_input_parameter[] = { + 0xC0, + 0xFC, 0xF3, 0x68, 0x64, 0x04, + 0xFC, 0xF3, 0x0D, 0x10, 0x00, 0x90, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x01, 0x82, 0x30, 0x50, + 0xFC, 0xF3, 0x0D, 0x10, 0x02, 0x27, 0x90, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x03, 0x19, 0x00, 0xA0, + 0xFC, 0xF3, 0x0D, 0x10, 0x04, 0x1C, 0x5A, 0xAF, + 0xFC, 0xF3, 0x0D, 0x10, 0x05, 0x90, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x06, 0x80, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x07, 0x1C, 0x5A, 0xAF, + 0xFC, 0xF3, 0x0D, 0x10, 0x08, 0x90, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x09, 0x19, 0x01, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x0A, 0x27, 0x90, 0x5F, + 0xFC, 0xF3, 0x0D, 0x10, 0x0B, 0x19, 0x01, 0x10, + 0xFC, 0xF3, 0x0D, 0x10, 0x0C, 0x1C, 0x58, 0xEF, + 0xFC, 0xF3, 0x0D, 0x10, 0x0D, 0x90, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x0E, 0x80, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x0F, 0x1C, 0x58, 0xEF, + 0xFC, 0xF3, 0x0D, 0x10, 0x10, 0x90, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x11, 0x82, 0x2D, 0x20, + 0xFC, 0xF3, 0x0D, 0x10, 0x12, 0x27, 0x98, 0x5F, + 0xFC, 0xF3, 0x0D, 0x10, 0x13, 0x19, 0x01, 0x80, + 0xFC, 0xF3, 0x0D, 0x10, 0x14, 0x80, 0x50, 0x5A, + 0xFC, 0xF3, 0x0D, 0x10, 0x15, 0x90, 0x50, 0x3A, + 0xFC, 0xF3, 0x0D, 0x10, 0x16, 0x80, 0x50, 0x6F, + 0xFC, 0xF3, 0x0D, 0x10, 0x17, 0x90, 0x50, 0x4F, + 0xFC, 0xF3, 0x0D, 0x10, 0x18, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x19, 0x19, 0x00, 0x6F, + 0xFC, 0xF3, 0x0D, 0x10, 0x1A, 0x80, 0x00, 0xAC, + 0xFC, 0xF3, 0x0D, 0x10, 0x1B, 0x26, 0x7C, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x1C, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x1D, 0x19, 0x1D, 0x82, + 0xFC, 0xF3, 0x0D, 0x10, 0x1E, 0x19, 0x1C, 0xEF, + 0xFC, 0xF3, 0x0D, 0x10, 0x1F, 0x80, 0x53, 0x9A, + 0xFC, 0xF3, 0x0D, 0x10, 0x20, 0x93, 0xE2, 0xAA, + 0xFC, 0xF3, 0x0D, 0x10, 0x21, 0x80, 0x4F, 0xBA, + 0xFC, 0xF3, 0x0D, 0x10, 0x22, 0x22, 0x7A, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x23, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x24, 0x18, 0x2F, 0xD0, + 0xFC, 0xF3, 0x0D, 0x10, 0x25, 0x94, 0x4F, 0xB6, + 0xFC, 0xF3, 0x0D, 0x10, 0x26, 0x80, 0x4F, 0x6A, + 0xFC, 0xF3, 0x0D, 0x10, 0x27, 0x26, 0x7A, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x28, 0x18, 0x2F, 0x80, + 0xFC, 0xF3, 0x0D, 0x10, 0x29, 0x18, 0x2B, 0xCF, + 0xFC, 0xF3, 0x0D, 0x10, 0x2A, 0x95, 0x62, 0x06, + 0xFC, 0xF3, 0x0D, 0x10, 0x2B, 0x95, 0x61, 0x46, + 0xFC, 0xF3, 0x0D, 0x10, 0x2C, 0x40, 0xFA, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x2D, 0x40, 0xE5, 0xB0, + 0xFC, 0xF3, 0x0D, 0x10, 0x2E, 0x82, 0x30, 0x14, + 0xFC, 0xF3, 0x0D, 0x10, 0x2F, 0x27, 0x00, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x30, 0x22, 0x78, 0x00, + 0xFC, 0xF3, 0x0D, 0x10, 0x31, 0x83, 0xFD, 0x44, + 0xFC, 0xF3, 0x0D, 0x10, 0x32, 0x26, 0xE2, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x33, 0x19, 0x03, 0x90, + 0xFC, 0xF3, 0x0D, 0x10, 0x34, 0x93, 0xFD, 0x4A, + 0xFC, 0xF3, 0x0D, 0x10, 0x35, 0x83, 0xFD, 0x5A, + 0xFC, 0xF3, 0x0D, 0x10, 0x36, 0x23, 0xA2, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x37, 0x93, 0xFD, 0x5A, + 0xFC, 0xF3, 0x0D, 0x10, 0x38, 0x00, 0x00, 0x00, + 0xFC, 0xF3, 0x0D, 0x10, 0x39, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x3A, 0x18, 0x3F, 0x7F, + 0xFC, 0xF3, 0x0D, 0x10, 0x3B, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x3C, 0x19, 0x6C, 0xA4, + 0xFC, 0xF3, 0x0D, 0x10, 0x3D, 0x19, 0x66, 0x7F, + 0xFC, 0xF3, 0x0D, 0x10, 0x3E, 0x80, 0x79, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x3F, 0x82, 0x2D, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x40, 0x27, 0x97, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x41, 0x19, 0x04, 0x40, + 0xFC, 0xF3, 0x0D, 0x10, 0x42, 0x94, 0x7B, 0xD6, + 0xFC, 0xF3, 0x0D, 0x10, 0x43, 0x80, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x44, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x45, 0x18, 0x48, 0xDF, + 0xFC, 0xF3, 0x0D, 0x10, 0x46, 0x38, 0x00, 0x87, + 0xFC, 0xF3, 0x0D, 0x10, 0x47, 0x09, 0x00, 0x1B, + 0xFC, 0xF3, 0x0D, 0x10, 0x48, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x49, 0x18, 0x2D, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4A, 0x18, 0x21, 0x5F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4B, 0x88, 0x4F, 0x47, + 0xFC, 0xF3, 0x0D, 0x10, 0x4C, 0x82, 0x2A, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x4D, 0x22, 0x62, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4E, 0x26, 0x62, 0x7F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4F, 0x19, 0x05, 0x25, + 0xFC, 0xF3, 0x0D, 0x10, 0x50, 0x3B, 0xFF, 0xC7, + 0xFC, 0xF3, 0x0D, 0x10, 0x51, 0x19, 0x05, 0x3F, + 0xFC, 0xF3, 0x0D, 0x10, 0x52, 0x0D, 0x01, 0xA6, + 0xFC, 0xF3, 0x0D, 0x10, 0x53, 0x92, 0x2A, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x54, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x55, 0x18, 0x23, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x56, 0x96, 0x2A, 0xA1, + 0xFC, 0xF3, 0x0D, 0x10, 0x57, 0x96, 0x2A, 0xB0, + 0xFC, 0xF3, 0x0D, 0x10, 0x58, 0x9A, 0x2A, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x59, 0x9A, 0x2A, 0xD7, + 0xFC, 0xF3, 0x0D, 0x10, 0x5A, 0x96, 0x2A, 0xE8, + 0xFC, 0xF3, 0x0D, 0x10, 0x5B, 0x38, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x5C, 0x83, 0xFF, 0xAA, + 0xFC, 0xF3, 0x0D, 0x10, 0x5D, 0x3B, 0x20, 0x02, + 0xFC, 0xF3, 0x0D, 0x10, 0x5E, 0x36, 0x2B, 0x01, + 0xFC, 0xF3, 0x0D, 0x10, 0x5F, 0x36, 0x2B, 0x60, + 0xFC, 0xF3, 0x0D, 0x10, 0x60, 0x1C, 0x72, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x61, 0x93, 0xFF, 0x9A, + 0xFC, 0xF3, 0x0D, 0x10, 0x62, 0x93, 0xFF, 0xAA, + 0xFC, 0xF3, 0x0D, 0x10, 0x63, 0x86, 0x2A, 0xA1, + 0xFC, 0xF3, 0x0D, 0x10, 0x64, 0x86, 0x2A, 0xB0, + 0xFC, 0xF3, 0x0D, 0x10, 0x65, 0x8A, 0x2A, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x66, 0x8A, 0x2A, 0xD7, + 0xFC, 0xF3, 0x0D, 0x10, 0x67, 0x86, 0x2A, 0xE8, + 0xFC, 0xF3, 0x0D, 0x10, 0x68, 0x0D, 0x08, 0x28, + 0xFC, 0xF3, 0x0D, 0x10, 0x69, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x6A, 0x18, 0x24, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x6B, 0x83, 0xFC, 0xFA, + 0xFC, 0xF3, 0x0D, 0x10, 0x6C, 0x23, 0x8A, 0xBF, + 0xFC, 0xF3, 0x0D, 0x10, 0x6D, 0x82, 0x2D, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x6E, 0x27, 0x97, 0xDF, + 0xFC, 0xF3, 0x0D, 0x10, 0x6F, 0x23, 0xAA, 0x91, + 0xFC, 0xF3, 0x0D, 0x10, 0x70, 0x93, 0xFC, 0xFA, + 0xFC, 0xF3, 0x0D, 0x10, 0x71, 0x83, 0x80, 0x30, + 0xFC, 0xF3, 0x0D, 0x10, 0x72, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x73, 0x18, 0x3E, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x74, 0x80, 0x7A, 0x4A, + 0xFC, 0xF3, 0x0D, 0x10, 0x75, 0x19, 0x07, 0xE2, + 0xFC, 0xF3, 0x0D, 0x10, 0x76, 0x23, 0x3E, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x77, 0x0D, 0x00, 0xEA, + 0xFC, 0xF3, 0x0D, 0x10, 0x78, 0x80, 0x7B, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x79, 0x38, 0x7E, 0x02, + 0xFC, 0xF3, 0x0D, 0x10, 0x7A, 0x1C, 0x76, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x7B, 0x90, 0x7B, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x7C, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x7D, 0x19, 0x75, 0xCF, + 0xFC, 0xF3, 0x0D, 0x10, 0x7E, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x7F, 0x19, 0x75, 0x9F, + 0xFC, 0xF3, 0x68, 0x64, 0x00, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA0, 0x91, 0xCB, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB0, 0x50, 0x1A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA1, 0x82, 0xF3, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB1, 0x02, 0xF5, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA2, 0x82, 0xB5, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB2, 0x50, 0x1F, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA3, 0x83, 0xF4, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB3, 0x50, 0x2A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA4, 0x96, 0x66, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB4, 0x50, 0x3B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA5, 0x82, 0xCC, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB5, 0x50, 0x46, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA6, 0xC2, 0xCC, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB6, 0x50, 0x46, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA7, 0xC2, 0x10, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB7, 0x50, 0x4A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA8, 0x82, 0x10, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB8, 0x50, 0x4A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA9, 0x82, 0x31, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB9, 0x50, 0x4B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAA, 0xC2, 0x31, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBA, 0x50, 0x4B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAB, 0x82, 0x3F, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBB, 0x50, 0x56, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAC, 0xC2, 0x3F, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBC, 0x50, 0x56, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAD, 0x83, 0xE8, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBD, 0x50, 0x6B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAE, 0x97, 0x58, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBE, 0x50, 0x74, + 0xFC, 0xF3, 0x3B, 0x22, 0xF8, 0x80, 0x05, + 0xFC, 0xF3, 0x3B, 0x22, 0xC8, 0x00, 0x29, + 0xFC, 0xF3, 0x3B, 0x22, 0xEE, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x22, 0xF9, 0x08, 0x5F, + 0xFC, 0xF3, 0x3B, 0x22, 0xFA, 0x24, 0x81, + 0xFC, 0xF3, 0x3B, 0x23, 0x05, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x01, 0x00, 0x02, + 0xFC, 0xF3, 0x3B, 0x23, 0x07, 0xF0, 0xF0, + 0xFC, 0xF3, 0x3B, 0x23, 0x09, 0x08, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x0D, 0x01, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x0C, 0x0E, 0x20, + 0xFC, 0xF3, 0x3B, 0x22, 0xF2, 0x00, 0x44, + 0xFC, 0xF3, 0x3B, 0x22, 0xF6, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x22, 0xC6, 0x00, 0x06, + 0xFC, 0xF3, 0x3B, 0x22, 0xC7, 0x00, 0x08, + 0xFC, 0xF3, 0x3B, 0x22, 0xD2, 0x8A, 0x94, + 0xFC, 0xF3, 0x3B, 0x23, 0x03, 0x00, 0x01, + 0xFC, 0xF3, 0x3B, 0x23, 0x00, 0x00, 0x04, + 0xFC, 0xF3, 0x3B, 0x23, 0x04, 0x23, 0x10, + 0xFC, 0xF3, 0x3B, 0x23, 0x2F, 0x01, 0x10, + 0xFC, 0xF3, 0x3B, 0x23, 0x39, 0x00, 0x06, + 0xFC, 0xF3, 0x3B, 0x23, 0xCF, 0x01, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0xD0, 0x06, 0x20, + 0xFC, 0xF3, 0x3B, 0x23, 0xD5, 0x3C, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x6E, 0x20, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x33, 0x02, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0xB3, 0x00, 0x0A, + 0xFC, 0xF3, 0x3B, 0x23, 0xB4, 0x00, 0x02, + 0xFC, 0xF3, 0x3B, 0x23, 0x70, 0x40, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x91, 0x40, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x92, 0x40, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x93, 0x40, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x94, 0x40, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x95, 0x40, 0x00, + 0xFC, 0xF3, 0x3B, 0x3F, 0xD2, 0x00, 0x32, + 0xFC, 0xF3, 0x3B, 0x22, 0xFB, 0x00, 0x00 +}; + +static const u8 TF700T_enable_NS[] = { + 0xC0, + 0xFC, 0xF3, 0x3B, 0x23, 0x03, 0x00, 0x01, + 0xFC, 0xF3, 0x3B, 0x23, 0x04, 0x23, 0x01, + 0xFC, 0xF3, 0x3B, 0x23, 0x0C, 0x08, 0x00 +}; + +static const u8 TF700T_disable_NS[] = { + 0xC0, + 0xFC, 0xF3, 0x3B, 0x23, 0x03, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x04, 0x00, 0x10, + 0xFC, 0xF3, 0x3B, 0x23, 0x0C, 0x15, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x6E, 0x7F, 0xFF, + 0xFC, 0xF3, 0x3B, 0x23, 0xCF, 0x02, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0xD0, 0x02, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0xD5, 0x10, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x00, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x22, 0xFB, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x84, 0x00, 0x03 +}; + +/* TF300T section */ +static const u8 TF300T_input_parameter[] = { + 0xC0, + 0xFC, 0xF3, 0x68, 0x64, 0x04, + 0xFC, 0xF3, 0x0D, 0x10, 0x00, 0x90, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x01, 0x82, 0x30, 0x50, + 0xFC, 0xF3, 0x0D, 0x10, 0x02, 0x27, 0x90, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x03, 0x19, 0x00, 0xA0, + 0xFC, 0xF3, 0x0D, 0x10, 0x04, 0x1C, 0x5A, 0xAF, + 0xFC, 0xF3, 0x0D, 0x10, 0x05, 0x90, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x06, 0x80, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x07, 0x1C, 0x5A, 0xAF, + 0xFC, 0xF3, 0x0D, 0x10, 0x08, 0x90, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x09, 0x19, 0x01, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x0A, 0x27, 0x90, 0x5F, + 0xFC, 0xF3, 0x0D, 0x10, 0x0B, 0x19, 0x01, 0x10, + 0xFC, 0xF3, 0x0D, 0x10, 0x0C, 0x1C, 0x58, 0xEF, + 0xFC, 0xF3, 0x0D, 0x10, 0x0D, 0x90, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x0E, 0x80, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x0F, 0x1C, 0x58, 0xEF, + 0xFC, 0xF3, 0x0D, 0x10, 0x10, 0x90, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x11, 0x82, 0x2D, 0x20, + 0xFC, 0xF3, 0x0D, 0x10, 0x12, 0x27, 0x98, 0x5F, + 0xFC, 0xF3, 0x0D, 0x10, 0x13, 0x19, 0x01, 0x80, + 0xFC, 0xF3, 0x0D, 0x10, 0x14, 0x80, 0x50, 0x5A, + 0xFC, 0xF3, 0x0D, 0x10, 0x15, 0x90, 0x50, 0x3A, + 0xFC, 0xF3, 0x0D, 0x10, 0x16, 0x80, 0x50, 0x6F, + 0xFC, 0xF3, 0x0D, 0x10, 0x17, 0x90, 0x50, 0x4F, + 0xFC, 0xF3, 0x0D, 0x10, 0x18, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x19, 0x19, 0x00, 0x6F, + 0xFC, 0xF3, 0x0D, 0x10, 0x1A, 0x80, 0x00, 0xAC, + 0xFC, 0xF3, 0x0D, 0x10, 0x1B, 0x26, 0x7C, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x1C, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x1D, 0x19, 0x1D, 0x82, + 0xFC, 0xF3, 0x0D, 0x10, 0x1E, 0x19, 0x1C, 0xEF, + 0xFC, 0xF3, 0x0D, 0x10, 0x1F, 0x80, 0x53, 0x9A, + 0xFC, 0xF3, 0x0D, 0x10, 0x20, 0x93, 0xE2, 0xAA, + 0xFC, 0xF3, 0x0D, 0x10, 0x21, 0x80, 0x4F, 0xBA, + 0xFC, 0xF3, 0x0D, 0x10, 0x22, 0x22, 0x7A, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x23, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x24, 0x18, 0x2F, 0xD0, + 0xFC, 0xF3, 0x0D, 0x10, 0x25, 0x94, 0x4F, 0xB6, + 0xFC, 0xF3, 0x0D, 0x10, 0x26, 0x80, 0x4F, 0x6A, + 0xFC, 0xF3, 0x0D, 0x10, 0x27, 0x26, 0x7A, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x28, 0x18, 0x2F, 0x80, + 0xFC, 0xF3, 0x0D, 0x10, 0x29, 0x18, 0x2B, 0xCF, + 0xFC, 0xF3, 0x0D, 0x10, 0x2A, 0x95, 0x62, 0x06, + 0xFC, 0xF3, 0x0D, 0x10, 0x2B, 0x95, 0x61, 0x46, + 0xFC, 0xF3, 0x0D, 0x10, 0x2C, 0x40, 0xFA, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x2D, 0x40, 0xE5, 0xB0, + 0xFC, 0xF3, 0x0D, 0x10, 0x2E, 0x82, 0x30, 0x14, + 0xFC, 0xF3, 0x0D, 0x10, 0x2F, 0x27, 0x00, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x30, 0x22, 0x78, 0x00, + 0xFC, 0xF3, 0x0D, 0x10, 0x31, 0x83, 0xFD, 0x44, + 0xFC, 0xF3, 0x0D, 0x10, 0x32, 0x26, 0xE2, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x33, 0x19, 0x03, 0x90, + 0xFC, 0xF3, 0x0D, 0x10, 0x34, 0x93, 0xFD, 0x4A, + 0xFC, 0xF3, 0x0D, 0x10, 0x35, 0x83, 0xFD, 0x5A, + 0xFC, 0xF3, 0x0D, 0x10, 0x36, 0x23, 0xA2, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x37, 0x93, 0xFD, 0x5A, + 0xFC, 0xF3, 0x0D, 0x10, 0x38, 0x00, 0x00, 0x00, + 0xFC, 0xF3, 0x0D, 0x10, 0x39, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x3A, 0x18, 0x3F, 0x7F, + 0xFC, 0xF3, 0x0D, 0x10, 0x3B, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x3C, 0x19, 0x6C, 0xA4, + 0xFC, 0xF3, 0x0D, 0x10, 0x3D, 0x19, 0x66, 0x7F, + 0xFC, 0xF3, 0x0D, 0x10, 0x3E, 0x80, 0x79, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x3F, 0x82, 0x2D, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x40, 0x27, 0x97, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x41, 0x19, 0x04, 0x40, + 0xFC, 0xF3, 0x0D, 0x10, 0x42, 0x94, 0x7B, 0xD6, + 0xFC, 0xF3, 0x0D, 0x10, 0x43, 0x80, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x44, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x45, 0x18, 0x48, 0xDF, + 0xFC, 0xF3, 0x0D, 0x10, 0x46, 0x38, 0x00, 0x87, + 0xFC, 0xF3, 0x0D, 0x10, 0x47, 0x09, 0x00, 0x1B, + 0xFC, 0xF3, 0x0D, 0x10, 0x48, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x49, 0x18, 0x2D, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4A, 0x18, 0x21, 0x5F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4B, 0x88, 0x4F, 0x47, + 0xFC, 0xF3, 0x0D, 0x10, 0x4C, 0x82, 0x2A, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x4D, 0x22, 0x62, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4E, 0x26, 0x62, 0x7F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4F, 0x19, 0x05, 0x25, + 0xFC, 0xF3, 0x0D, 0x10, 0x50, 0x3B, 0xFF, 0xC7, + 0xFC, 0xF3, 0x0D, 0x10, 0x51, 0x19, 0x05, 0x3F, + 0xFC, 0xF3, 0x0D, 0x10, 0x52, 0x0D, 0x01, 0xA6, + 0xFC, 0xF3, 0x0D, 0x10, 0x53, 0x92, 0x2A, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x54, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x55, 0x18, 0x23, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x56, 0x96, 0x2A, 0xA1, + 0xFC, 0xF3, 0x0D, 0x10, 0x57, 0x96, 0x2A, 0xB0, + 0xFC, 0xF3, 0x0D, 0x10, 0x58, 0x9A, 0x2A, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x59, 0x9A, 0x2A, 0xD7, + 0xFC, 0xF3, 0x0D, 0x10, 0x5A, 0x96, 0x2A, 0xE8, + 0xFC, 0xF3, 0x0D, 0x10, 0x5B, 0x38, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x5C, 0x83, 0xFF, 0xAA, + 0xFC, 0xF3, 0x0D, 0x10, 0x5D, 0x3B, 0x20, 0x02, + 0xFC, 0xF3, 0x0D, 0x10, 0x5E, 0x36, 0x2B, 0x01, + 0xFC, 0xF3, 0x0D, 0x10, 0x5F, 0x36, 0x2B, 0x60, + 0xFC, 0xF3, 0x0D, 0x10, 0x60, 0x1C, 0x72, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x61, 0x93, 0xFF, 0x9A, + 0xFC, 0xF3, 0x0D, 0x10, 0x62, 0x93, 0xFF, 0xAA, + 0xFC, 0xF3, 0x0D, 0x10, 0x63, 0x86, 0x2A, 0xA1, + 0xFC, 0xF3, 0x0D, 0x10, 0x64, 0x86, 0x2A, 0xB0, + 0xFC, 0xF3, 0x0D, 0x10, 0x65, 0x8A, 0x2A, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x66, 0x8A, 0x2A, 0xD7, + 0xFC, 0xF3, 0x0D, 0x10, 0x67, 0x86, 0x2A, 0xE8, + 0xFC, 0xF3, 0x0D, 0x10, 0x68, 0x0D, 0x08, 0x28, + 0xFC, 0xF3, 0x0D, 0x10, 0x69, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x6A, 0x18, 0x24, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x6B, 0x83, 0xFC, 0xFA, + 0xFC, 0xF3, 0x0D, 0x10, 0x6C, 0x23, 0x8A, 0xBF, + 0xFC, 0xF3, 0x0D, 0x10, 0x6D, 0x82, 0x2D, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x6E, 0x27, 0x97, 0xDF, + 0xFC, 0xF3, 0x0D, 0x10, 0x6F, 0x23, 0xAA, 0x91, + 0xFC, 0xF3, 0x0D, 0x10, 0x70, 0x93, 0xFC, 0xFA, + 0xFC, 0xF3, 0x0D, 0x10, 0x71, 0x83, 0x80, 0x30, + 0xFC, 0xF3, 0x0D, 0x10, 0x72, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x73, 0x18, 0x3E, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x74, 0x80, 0x7A, 0x4A, + 0xFC, 0xF3, 0x0D, 0x10, 0x75, 0x19, 0x07, 0xE2, + 0xFC, 0xF3, 0x0D, 0x10, 0x76, 0x23, 0x3E, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x77, 0x0D, 0x00, 0xEA, + 0xFC, 0xF3, 0x0D, 0x10, 0x78, 0x80, 0x7B, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x79, 0x38, 0x7E, 0x02, + 0xFC, 0xF3, 0x0D, 0x10, 0x7A, 0x1C, 0x76, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x7B, 0x90, 0x7B, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x7C, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x7D, 0x19, 0x75, 0xCF, + 0xFC, 0xF3, 0x0D, 0x10, 0x7E, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x7F, 0x19, 0x75, 0x9F, + 0xFC, 0xF3, 0x68, 0x64, 0x00, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA0, 0x91, 0xCB, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB0, 0x50, 0x1A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA1, 0x82, 0xF3, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB1, 0x02, 0xF5, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA2, 0x82, 0xB5, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB2, 0x50, 0x1F, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA3, 0x83, 0xF4, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB3, 0x50, 0x2A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA4, 0x96, 0x66, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB4, 0x50, 0x3B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA5, 0x82, 0xCC, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB5, 0x50, 0x46, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA6, 0xC2, 0xCC, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB6, 0x50, 0x46, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA7, 0xC2, 0x10, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB7, 0x50, 0x4A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA8, 0x82, 0x10, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB8, 0x50, 0x4A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA9, 0x82, 0x31, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB9, 0x50, 0x4B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAA, 0xC2, 0x31, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBA, 0x50, 0x4B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAB, 0x82, 0x3F, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBB, 0x50, 0x56, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAC, 0xC2, 0x3F, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBC, 0x50, 0x56, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAD, 0x83, 0xE8, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBD, 0x50, 0x6B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAE, 0x97, 0x58, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBE, 0x50, 0x74, + 0xFC, 0xF3, 0x3B, 0x22, 0xF8, 0x80, 0x05, + 0xFC, 0xF3, 0x3B, 0x22, 0xC8, 0x00, 0x29, + 0xFC, 0xF3, 0x3B, 0x22, 0xEE, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x22, 0xF9, 0x08, 0x5F, + 0xFC, 0xF3, 0x3B, 0x22, 0xFA, 0x24, 0x81, + 0xFC, 0xF3, 0x3B, 0x23, 0x05, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x01, 0x00, 0x02, + 0xFC, 0xF3, 0x3B, 0x23, 0x07, 0xF0, 0xF0, + 0xFC, 0xF3, 0x3B, 0x23, 0x09, 0x08, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x0D, 0x01, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x0C, 0x0E, 0x20, + 0xFC, 0xF3, 0x3B, 0x22, 0xF2, 0x00, 0x44, + 0xFC, 0xF3, 0x3B, 0x22, 0xF6, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x22, 0xC6, 0x00, 0x06, + 0xFC, 0xF3, 0x3B, 0x22, 0xC7, 0x00, 0x08, + 0xFC, 0xF3, 0x3B, 0x22, 0xD2, 0x8A, 0x94, + 0xFC, 0xF3, 0x3B, 0x23, 0x03, 0x00, 0x01, + 0xFC, 0xF3, 0x3B, 0x23, 0x00, 0x00, 0x04, + 0xFC, 0xF3, 0x3B, 0x23, 0x04, 0x23, 0x10, + 0xFC, 0xF3, 0x3B, 0x23, 0x2F, 0x01, 0x10, + 0xFC, 0xF3, 0x3B, 0x23, 0x39, 0x00, 0x06, + 0xFC, 0xF3, 0x3B, 0x23, 0xCF, 0x01, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0xD0, 0x06, 0x20, + 0xFC, 0xF3, 0x3B, 0x23, 0xD5, 0x3C, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x6E, 0x20, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x33, 0x02, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0xB3, 0x00, 0x0A, + 0xFC, 0xF3, 0x3B, 0x23, 0xB4, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x70, 0x40, 0x00, + 0xFC, 0xF3, 0x3B, 0x3F, 0xD2, 0x00, 0x32, + 0xFC, 0xF3, 0x3B, 0x22, 0xFB, 0x00, 0x00 +}; + +/* TF101 section */ +static const u8 TF101_input_parameter[] = { + 0xC0, + 0xFC, 0xF3, 0x68, 0x64, 0x04, + 0xFC, 0xF3, 0x0D, 0x10, 0x00, 0x90, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x01, 0x82, 0x30, 0x50, + 0xFC, 0xF3, 0x0D, 0x10, 0x02, 0x27, 0x90, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x03, 0x19, 0x00, 0xA0, + 0xFC, 0xF3, 0x0D, 0x10, 0x04, 0x1C, 0x5A, 0xAF, + 0xFC, 0xF3, 0x0D, 0x10, 0x05, 0x90, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x06, 0x80, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x07, 0x1C, 0x5A, 0xAF, + 0xFC, 0xF3, 0x0D, 0x10, 0x08, 0x90, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x09, 0x19, 0x01, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x0A, 0x27, 0x90, 0x5F, + 0xFC, 0xF3, 0x0D, 0x10, 0x0B, 0x19, 0x01, 0x10, + 0xFC, 0xF3, 0x0D, 0x10, 0x0C, 0x1C, 0x58, 0xEF, + 0xFC, 0xF3, 0x0D, 0x10, 0x0D, 0x90, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x0E, 0x80, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x0F, 0x1C, 0x58, 0xEF, + 0xFC, 0xF3, 0x0D, 0x10, 0x10, 0x90, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x11, 0x82, 0x2D, 0x20, + 0xFC, 0xF3, 0x0D, 0x10, 0x12, 0x27, 0x98, 0x5F, + 0xFC, 0xF3, 0x0D, 0x10, 0x13, 0x19, 0x01, 0x80, + 0xFC, 0xF3, 0x0D, 0x10, 0x14, 0x80, 0x50, 0x5A, + 0xFC, 0xF3, 0x0D, 0x10, 0x15, 0x90, 0x50, 0x3A, + 0xFC, 0xF3, 0x0D, 0x10, 0x16, 0x80, 0x50, 0x6F, + 0xFC, 0xF3, 0x0D, 0x10, 0x17, 0x90, 0x50, 0x4F, + 0xFC, 0xF3, 0x0D, 0x10, 0x18, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x19, 0x19, 0x00, 0x6F, + 0xFC, 0xF3, 0x0D, 0x10, 0x1A, 0x80, 0x00, 0xAC, + 0xFC, 0xF3, 0x0D, 0x10, 0x1B, 0x26, 0x7C, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x1C, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x1D, 0x19, 0x1D, 0x82, + 0xFC, 0xF3, 0x0D, 0x10, 0x1E, 0x19, 0x1C, 0xEF, + 0xFC, 0xF3, 0x0D, 0x10, 0x1F, 0x80, 0x53, 0x9A, + 0xFC, 0xF3, 0x0D, 0x10, 0x20, 0x93, 0xE2, 0xAA, + 0xFC, 0xF3, 0x0D, 0x10, 0x21, 0x80, 0x4F, 0xBA, + 0xFC, 0xF3, 0x0D, 0x10, 0x22, 0x22, 0x7A, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x23, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x24, 0x18, 0x2F, 0xD0, + 0xFC, 0xF3, 0x0D, 0x10, 0x25, 0x94, 0x4F, 0xB6, + 0xFC, 0xF3, 0x0D, 0x10, 0x26, 0x80, 0x4F, 0x6A, + 0xFC, 0xF3, 0x0D, 0x10, 0x27, 0x26, 0x7A, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x28, 0x18, 0x2F, 0x80, + 0xFC, 0xF3, 0x0D, 0x10, 0x29, 0x18, 0x2B, 0xCF, + 0xFC, 0xF3, 0x0D, 0x10, 0x2A, 0x95, 0x62, 0x06, + 0xFC, 0xF3, 0x0D, 0x10, 0x2B, 0x95, 0x61, 0x46, + 0xFC, 0xF3, 0x0D, 0x10, 0x2C, 0x40, 0xFA, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x2D, 0x40, 0xE5, 0xB0, + 0xFC, 0xF3, 0x0D, 0x10, 0x2E, 0x82, 0x30, 0x14, + 0xFC, 0xF3, 0x0D, 0x10, 0x2F, 0x27, 0x00, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x30, 0x22, 0x78, 0x00, + 0xFC, 0xF3, 0x0D, 0x10, 0x31, 0x83, 0xFD, 0x44, + 0xFC, 0xF3, 0x0D, 0x10, 0x32, 0x26, 0xE2, 0x0F, + 0xFC, 0xF3, 0x0D, 0x10, 0x33, 0x19, 0x03, 0x90, + 0xFC, 0xF3, 0x0D, 0x10, 0x34, 0x93, 0xFD, 0x4A, + 0xFC, 0xF3, 0x0D, 0x10, 0x35, 0x83, 0xFD, 0x5A, + 0xFC, 0xF3, 0x0D, 0x10, 0x36, 0x23, 0xA2, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x37, 0x93, 0xFD, 0x5A, + 0xFC, 0xF3, 0x0D, 0x10, 0x38, 0x00, 0x00, 0x00, + 0xFC, 0xF3, 0x0D, 0x10, 0x39, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x3A, 0x18, 0x3F, 0x7F, + 0xFC, 0xF3, 0x0D, 0x10, 0x3B, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x3C, 0x19, 0x6C, 0xA4, + 0xFC, 0xF3, 0x0D, 0x10, 0x3D, 0x19, 0x66, 0x7F, + 0xFC, 0xF3, 0x0D, 0x10, 0x3E, 0x80, 0x79, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x3F, 0x82, 0x2D, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x40, 0x27, 0x97, 0x9F, + 0xFC, 0xF3, 0x0D, 0x10, 0x41, 0x19, 0x04, 0x40, + 0xFC, 0xF3, 0x0D, 0x10, 0x42, 0x94, 0x7B, 0xD6, + 0xFC, 0xF3, 0x0D, 0x10, 0x43, 0x80, 0x00, 0x1A, + 0xFC, 0xF3, 0x0D, 0x10, 0x44, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x45, 0x18, 0x48, 0xDF, + 0xFC, 0xF3, 0x0D, 0x10, 0x46, 0x38, 0x00, 0x87, + 0xFC, 0xF3, 0x0D, 0x10, 0x47, 0x09, 0x00, 0x1B, + 0xFC, 0xF3, 0x0D, 0x10, 0x48, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x49, 0x18, 0x2D, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4A, 0x18, 0x21, 0x5F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4B, 0x88, 0x4F, 0x47, + 0xFC, 0xF3, 0x0D, 0x10, 0x4C, 0x82, 0x2A, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x4D, 0x22, 0x62, 0x1F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4E, 0x26, 0x62, 0x7F, + 0xFC, 0xF3, 0x0D, 0x10, 0x4F, 0x19, 0x05, 0x25, + 0xFC, 0xF3, 0x0D, 0x10, 0x50, 0x3B, 0xFF, 0xC7, + 0xFC, 0xF3, 0x0D, 0x10, 0x51, 0x19, 0x05, 0x3F, + 0xFC, 0xF3, 0x0D, 0x10, 0x52, 0x0D, 0x01, 0xA6, + 0xFC, 0xF3, 0x0D, 0x10, 0x53, 0x92, 0x2A, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x54, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x55, 0x18, 0x23, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x56, 0x96, 0x2A, 0xA1, + 0xFC, 0xF3, 0x0D, 0x10, 0x57, 0x96, 0x2A, 0xB0, + 0xFC, 0xF3, 0x0D, 0x10, 0x58, 0x9A, 0x2A, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x59, 0x9A, 0x2A, 0xD7, + 0xFC, 0xF3, 0x0D, 0x10, 0x5A, 0x96, 0x2A, 0xE8, + 0xFC, 0xF3, 0x0D, 0x10, 0x5B, 0x38, 0x00, 0x0A, + 0xFC, 0xF3, 0x0D, 0x10, 0x5C, 0x83, 0xFF, 0xAA, + 0xFC, 0xF3, 0x0D, 0x10, 0x5D, 0x3B, 0x20, 0x02, + 0xFC, 0xF3, 0x0D, 0x10, 0x5E, 0x36, 0x2B, 0x01, + 0xFC, 0xF3, 0x0D, 0x10, 0x5F, 0x36, 0x2B, 0x60, + 0xFC, 0xF3, 0x0D, 0x10, 0x60, 0x1C, 0x72, 0x2F, + 0xFC, 0xF3, 0x0D, 0x10, 0x61, 0x93, 0xFF, 0x9A, + 0xFC, 0xF3, 0x0D, 0x10, 0x62, 0x93, 0xFF, 0xAA, + 0xFC, 0xF3, 0x0D, 0x10, 0x63, 0x86, 0x2A, 0xA1, + 0xFC, 0xF3, 0x0D, 0x10, 0x64, 0x86, 0x2A, 0xB0, + 0xFC, 0xF3, 0x0D, 0x10, 0x65, 0x8A, 0x2A, 0xCA, + 0xFC, 0xF3, 0x0D, 0x10, 0x66, 0x8A, 0x2A, 0xD7, + 0xFC, 0xF3, 0x0D, 0x10, 0x67, 0x86, 0x2A, 0xE8, + 0xFC, 0xF3, 0x0D, 0x10, 0x68, 0x0D, 0x08, 0x28, + 0xFC, 0xF3, 0x0D, 0x10, 0x69, 0x34, 0x00, 0x0E, + 0xFC, 0xF3, 0x0D, 0x10, 0x6A, 0x18, 0x24, 0x0F, + 0xFC, 0xF3, 0x68, 0x64, 0x00, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA0, 0x90, 0x05, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB0, 0x50, 0x00, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA1, 0x91, 0xCB, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB1, 0x50, 0x1A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA2, 0x82, 0xF3, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB2, 0x02, 0xF5, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA3, 0x82, 0xB5, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB3, 0x50, 0x1F, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA4, 0x83, 0xF4, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB4, 0x50, 0x2A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA5, 0x96, 0x66, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB5, 0x50, 0x3B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA6, 0x84, 0x8C, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB6, 0x50, 0x3E, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA7, 0xC4, 0x8C, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB7, 0x50, 0x3E, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA8, 0x82, 0xCC, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB8, 0x50, 0x46, + 0xFC, 0xF3, 0x3B, 0x3F, 0xA9, 0xC2, 0xCC, + 0xFC, 0xF3, 0x3B, 0x3F, 0xB9, 0x50, 0x46, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAA, 0xC2, 0x10, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBA, 0x50, 0x4A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAB, 0x82, 0x10, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBB, 0x50, 0x4A, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAC, 0x82, 0x31, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBC, 0x50, 0x4B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAD, 0xC2, 0x31, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBD, 0x50, 0x4B, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAE, 0x82, 0x3F, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBE, 0x50, 0x56, + 0xFC, 0xF3, 0x3B, 0x3F, 0xAF, 0xC2, 0x3F, + 0xFC, 0xF3, 0x3B, 0x3F, 0xBF, 0x50, 0x56, + 0xFC, 0xF3, 0x3B, 0x22, 0xF8, 0x80, 0x05, + 0xFC, 0xF3, 0x3B, 0x22, 0xC8, 0x00, 0x09, + 0xFC, 0xF3, 0x3B, 0x22, 0xEE, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x22, 0xF9, 0x08, 0x5F, + 0xFC, 0xF3, 0x3B, 0x22, 0xFA, 0x24, 0x81, + 0xFC, 0xF3, 0x3B, 0x23, 0x05, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x01, 0x00, 0x01, + 0xFC, 0xF3, 0x3B, 0x23, 0x07, 0xF0, 0xF0, + 0xFC, 0xF3, 0x3B, 0x23, 0x09, 0x08, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x0D, 0x01, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x0C, 0x0E, 0x20, + 0xFC, 0xF3, 0x3B, 0x22, 0xF2, 0x00, 0x44, + 0xFC, 0xF3, 0x3B, 0x22, 0xF6, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x22, 0xC6, 0x00, 0x31, + 0xFC, 0xF3, 0x3B, 0x22, 0xC7, 0x00, 0x50, + 0xFC, 0xF3, 0x3B, 0x22, 0xD2, 0x82, 0x94, + 0xFC, 0xF3, 0x3B, 0x23, 0x03, 0x00, 0x01, + 0xFC, 0xF3, 0x3B, 0x23, 0x00, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x04, 0x23, 0x10, + 0xFC, 0xF3, 0x3B, 0x23, 0x2F, 0x01, 0x10, + 0xFC, 0xF3, 0x3B, 0x23, 0x39, 0x00, 0x06, + 0xFC, 0xF3, 0x3B, 0x23, 0xCF, 0x01, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0xD0, 0x06, 0x20, + 0xFC, 0xF3, 0x3B, 0x23, 0xD5, 0x3C, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x6E, 0x20, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x33, 0x02, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0xB3, 0x00, 0x0A, + 0xFC, 0xF3, 0x3B, 0x23, 0xB4, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x70, 0x40, 0x00, + 0xFC, 0xF3, 0x3B, 0x3F, 0xD2, 0x00, 0x32, + 0xFC, 0xF3, 0x3B, 0x22, 0xFB, 0x00, 0x00 +}; + +static const u8 TF101_enable_NS[] = { + 0xC0, + 0xFC, 0xF3, 0x3B, 0x23, 0x03, 0x00, 0x01, + 0xFC, 0xF3, 0x3B, 0x23, 0x04, 0x23, 0x10 +}; + +static const u8 TF101_disable_NS[] = { + 0xC0, + 0xFC, 0xF3, 0x3B, 0x23, 0x03, 0x00, 0x00, + 0xFC, 0xF3, 0x3B, 0x23, 0x04, 0x00, 0x10 +}; + +#endif From 012aab4fa9b5880449fbadbddbc6a2a0aca2f501 Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Thu, 14 Jul 2022 18:24:07 +0300 Subject: [PATCH 5/7] ARM: tegra: transformers: bind FM34NE DSP on supported devices Signed-off-by: Svyatoslav Ryhel --- arch/arm/boot/dts/tegra20-asus-tf101.dts | 14 +++++++++ arch/arm/boot/dts/tegra30-asus-tf201.dts | 30 ++++++++++++++++++- arch/arm/boot/dts/tegra30-asus-tf300t.dts | 30 ++++++++++++++++++- arch/arm/boot/dts/tegra30-asus-tf300tg.dts | 21 ++++++++++++- arch/arm/boot/dts/tegra30-asus-tf700t.dts | 20 ++++++++++++- .../arm/boot/dts/tegra30-pegatron-chagall.dts | 28 ++++++++++++++++- 6 files changed, 138 insertions(+), 5 deletions(-) diff --git a/arch/arm/boot/dts/tegra20-asus-tf101.dts b/arch/arm/boot/dts/tegra20-asus-tf101.dts index 62d4fffcc27f7..dfbc334111598 100644 --- a/arch/arm/boot/dts/tegra20-asus-tf101.dts +++ b/arch/arm/boot/dts/tegra20-asus-tf101.dts @@ -493,6 +493,20 @@ status = "okay"; clock-frequency = <400000>; + /* Fortemedia FM34NE voice processor */ + dsp@60 { + compatible = "asus,tf101-dsp", "fortemedia,fm34"; + reg = <0x60>; + + bypass-gpios = <&gpio TEGRA_GPIO(H, 3) GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio TEGRA_GPIO(H, 2) GPIO_ACTIVE_LOW>; + + vdd-supply = <&vdd_1v8_sys>; + + clocks = <&tegra_car TEGRA20_CLK_CDEV1>; + clock-names = "mclk"; + }; + /* Aichi AMI306 digital compass */ magnetometer@e { compatible = "asahi-kasei,ak8974"; diff --git a/arch/arm/boot/dts/tegra30-asus-tf201.dts b/arch/arm/boot/dts/tegra30-asus-tf201.dts index a19adc2ab6cf3..a7763f5219c1b 100644 --- a/arch/arm/boot/dts/tegra30-asus-tf201.dts +++ b/arch/arm/boot/dts/tegra30-asus-tf201.dts @@ -60,6 +60,25 @@ }; }; + i2c@7000c000 { + /* Fortemedia FM34NE voice processor */ + dsp@60 { + compatible = "asus,tf201-dsp", "fortemedia,fm34"; + reg = <0x60>; + + bypass-gpios = <&gpio TEGRA_GPIO(BB, 6) GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio TEGRA_GPIO(O, 3) GPIO_ACTIVE_LOW>; + + vdd-supply = <&vdd_1v8_dsp>; + + clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + clock-names = "mclk"; + + assigned-clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + assigned-clock-parents = <&tegra_car TEGRA30_CLK_EXTERN1>; + }; + }; + i2c@7000c400 { /* Atmel MXT768E touchscreen */ touchscreen@4d { @@ -620,7 +639,16 @@ vcc-supply = <&vdd_3v3_sys>; }; - /* FIXME: Sound only works, if booted from downstream kernel */ + vdd_1v8_dsp: regulator-dsp { + compatible = "regulator-fixed"; + regulator-name = "vdd_1v8_dsp"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + gpio = <&gpio TEGRA_GPIO(U, 5) GPIO_ACTIVE_HIGH>; + enable-active-high; + vin-supply = <&vdd_1v8_vio>; + }; + sound { compatible = "asus,tegra-audio-rt5631-tf201", "nvidia,tegra-audio-rt5631"; diff --git a/arch/arm/boot/dts/tegra30-asus-tf300t.dts b/arch/arm/boot/dts/tegra30-asus-tf300t.dts index 3920fcec989ba..a9add23ed3035 100644 --- a/arch/arm/boot/dts/tegra30-asus-tf300t.dts +++ b/arch/arm/boot/dts/tegra30-asus-tf300t.dts @@ -68,6 +68,25 @@ }; }; + i2c@7000c000 { + /* Fortemedia FM34NE voice processor */ + dsp@60 { + compatible = "asus,tf300t-dsp", "fortemedia,fm34"; + reg = <0x60>; + + bypass-gpios = <&gpio TEGRA_GPIO(BB, 6) GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio TEGRA_GPIO(O, 3) GPIO_ACTIVE_LOW>; + + vdd-supply = <&vdd_1v8_dsp>; + + clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + clock-names = "mclk"; + + assigned-clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + assigned-clock-parents = <&tegra_car TEGRA30_CLK_EXTERN1>; + }; + }; + i2c@7000c400 { /* Elantech EKTH1036 touchscreen */ touchscreen@10 { @@ -1013,7 +1032,16 @@ compatible = "innolux,g101ice-l01"; }; - /* FIXME: Sound doesn't work yet */ + vdd_1v8_dsp: regulator-dsp { + compatible = "regulator-fixed"; + regulator-name = "vdd_1v8_dsp"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + gpio = <&gpio TEGRA_GPIO(P, 3) GPIO_ACTIVE_HIGH>; + enable-active-high; + vin-supply = <&vdd_1v8_vio>; + }; + sound { compatible = "asus,tegra-audio-wm8903-tf300t", "nvidia,tegra-audio-wm8903"; diff --git a/arch/arm/boot/dts/tegra30-asus-tf300tg.dts b/arch/arm/boot/dts/tegra30-asus-tf300tg.dts index 1545e871798fa..084a40d7b2071 100644 --- a/arch/arm/boot/dts/tegra30-asus-tf300tg.dts +++ b/arch/arm/boot/dts/tegra30-asus-tf300tg.dts @@ -164,6 +164,25 @@ }; }; + i2c@7000c000 { + /* Fortemedia FM34NE voice processor */ + dsp@60 { + compatible = "asus,tf300t-dsp", "fortemedia,fm34"; + reg = <0x60>; + + bypass-gpios = <&gpio TEGRA_GPIO(BB, 6) GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio TEGRA_GPIO(O, 3) GPIO_ACTIVE_LOW>; + + vdd-supply = <&vdd_1v8_vio>; + + clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + clock-names = "mclk"; + + assigned-clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + assigned-clock-parents = <&tegra_car TEGRA30_CLK_EXTERN1>; + }; + }; + i2c@7000c400 { /* Elantech EKTH1036 touchscreen */ touchscreen@10 { @@ -1088,7 +1107,7 @@ }; sound { - compatible = "nvidia,tegra-audio-rt5631-tf300tg", + compatible = "asus,tegra-audio-rt5631-tf300tg", "nvidia,tegra-audio-rt5631"; nvidia,model = "Asus Transformer Pad TF300TG RT5631"; diff --git a/arch/arm/boot/dts/tegra30-asus-tf700t.dts b/arch/arm/boot/dts/tegra30-asus-tf700t.dts index 82a9fe7144e4e..cc9d202ae197b 100644 --- a/arch/arm/boot/dts/tegra30-asus-tf700t.dts +++ b/arch/arm/boot/dts/tegra30-asus-tf700t.dts @@ -85,6 +85,25 @@ }; }; + i2c@7000c000 { + /* Fortemedia FM34NE voice processor */ + dsp@60 { + compatible = "asus,tf700t-dsp", "fortemedia,fm34"; + reg = <0x60>; + + bypass-gpios = <&gpio TEGRA_GPIO(BB, 6) GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio TEGRA_GPIO(O, 3) GPIO_ACTIVE_LOW>; + + vdd-supply = <&vdd_1v8_vio>; + + clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + clock-names = "mclk"; + + assigned-clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + assigned-clock-parents = <&tegra_car TEGRA30_CLK_EXTERN1>; + }; + }; + i2c@7000c400 { /* Elantech ELAN-3024-7053 or 5184N FPC-1 REV: 2/3 touchscreen */ touchscreen@10 { @@ -827,7 +846,6 @@ vin-supply = <&vdd_3v3_sys>; }; - /* FIXME: Sound only works, if booted from downstream kernel */ sound { compatible = "asus,tegra-audio-rt5631-tf700t", "nvidia,tegra-audio-rt5631"; diff --git a/arch/arm/boot/dts/tegra30-pegatron-chagall.dts b/arch/arm/boot/dts/tegra30-pegatron-chagall.dts index 7f4340ff799d1..37d3e30f6b7b5 100644 --- a/arch/arm/boot/dts/tegra30-pegatron-chagall.dts +++ b/arch/arm/boot/dts/tegra30-pegatron-chagall.dts @@ -1154,6 +1154,23 @@ power-supplies = <&mains>; }; + /* Fortemedia FM34NE voice processor */ + dsp@60 { + compatible = "pegatron,chagall-dsp", "fortemedia,fm34"; + reg = <0x60>; + + bypass-gpios = <&gpio TEGRA_GPIO(N, 3) GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio TEGRA_GPIO(N, 0) GPIO_ACTIVE_LOW>; + + vdd-supply = <&vdd_1v8_dsp>; + + clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + clock-names = "mclk"; + + assigned-clocks = <&tegra_pmc TEGRA_PMC_CLK_OUT_1>; + assigned-clock-parents = <&tegra_car TEGRA30_CLK_EXTERN1>; + }; + /* Wolfson Microelectronics WM8903 audio codec */ wm8903: audio-codec@1a { compatible = "wlf,wm8903"; @@ -1509,6 +1526,16 @@ vin-supply = <&vdd_5v0_sys>; }; + vdd_1v8_dsp: regulator-dsp { + compatible = "regulator-fixed"; + regulator-name = "vdd_1v8_dsp"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + gpio = <&gpio TEGRA_GPIO(N, 1) GPIO_ACTIVE_HIGH>; + enable-active-high; + vin-supply = <&vdd_1v8_vio>; + }; + pmc@7000e400 { status = "okay"; nvidia,invert-interrupt; @@ -2737,7 +2764,6 @@ vcc-supply = <&vdd_3v3_sys>; }; - /* FIXME: Sound doesn't work yet */ sound { compatible = "pegatron,tegra-audio-wm8903-chagall", "nvidia,tegra-audio-wm8903"; From cccbc47cc643a31cbcbc910f1d9a5700ac94c815 Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Thu, 14 Jul 2022 18:27:54 +0300 Subject: [PATCH 6/7] ARM: config: re-generate tegra and grate defconfigs Signed-off-by: Svyatoslav Ryhel --- arch/arm/configs/grate_defconfig | 1 + arch/arm/configs/tegra_defconfig | 18 +++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/arch/arm/configs/grate_defconfig b/arch/arm/configs/grate_defconfig index cca3496999834..9c1e305bdd69b 100644 --- a/arch/arm/configs/grate_defconfig +++ b/arch/arm/configs/grate_defconfig @@ -541,6 +541,7 @@ CONFIG_NVEC_POWER=y CONFIG_STAGING_MEDIA=y CONFIG_P4WIFI=y CONFIG_SAMSUNG_JACK=y +CONFIG_DSP_FM34NE=y CONFIG_TEGRA_IOMMU_SMMU=y CONFIG_ARCH_TEGRA_2x_SOC=y CONFIG_ARCH_TEGRA_3x_SOC=y diff --git a/arch/arm/configs/tegra_defconfig b/arch/arm/configs/tegra_defconfig index 0a39033a5c6fd..a2bd2284a3604 100644 --- a/arch/arm/configs/tegra_defconfig +++ b/arch/arm/configs/tegra_defconfig @@ -31,11 +31,9 @@ CONFIG_CPU_IDLE=y CONFIG_ARM_TEGRA_CPUIDLE=y CONFIG_VFP=y CONFIG_NEON=y -CONFIG_TRUSTED_FOUNDATIONS=y CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_BLK_DEV_BSG is not set CONFIG_PARTITION_ADVANCED=y CONFIG_CMA=y CONFIG_NET=y @@ -82,6 +80,7 @@ CONFIG_PCI_TEGRA=y CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y CONFIG_TEGRA_GMI=y +CONFIG_TRUSTED_FOUNDATIONS=y CONFIG_MTD=y CONFIG_MTD_SPI_NOR=y CONFIG_BLK_DEV_LOOP=y @@ -93,6 +92,7 @@ CONFIG_ISL29003=y CONFIG_EEPROM_AT24=y CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SR=y +# CONFIG_BLK_DEV_BSG is not set # CONFIG_SCSI_LOWLEVEL is not set CONFIG_ATA=y CONFIG_SATA_AHCI=y @@ -117,9 +117,9 @@ CONFIG_KEYBOARD_GPIO=y CONFIG_KEYBOARD_TEGRA=y CONFIG_KEYBOARD_CROS_EC=y CONFIG_KEYBOARD_CAP11XX=y +CONFIG_MOUSE_PS2_ELANTECH=y CONFIG_MOUSE_ELAN_I2C=m CONFIG_MOUSE_ELAN_I2C_SMBUS=y -CONFIG_MOUSE_PS2_ELANTECH=y CONFIG_INPUT_TOUCHSCREEN=y CONFIG_TOUCHSCREEN_ATMEL_MXT=y CONFIG_TOUCHSCREEN_ELAN=y @@ -143,6 +143,7 @@ CONFIG_I2C_MUX_GPIO=y CONFIG_I2C_MUX_PCA954x=y CONFIG_I2C_MUX_PINCTRL=y CONFIG_I2C_TEGRA=y +CONFIG_I2C_CROS_EC_TUNNEL=m CONFIG_I2C_HOTPLUG_GPIO=y CONFIG_SPI=y CONFIG_SPI_TEGRA114=y @@ -166,10 +167,10 @@ CONFIG_BATTERY_ASUSEC=y CONFIG_CHARGER_ASUSEC=y CONFIG_BATTERY_CHAGALL=y CONFIG_BATTERY_SBS=y -CONFIG_CHARGER_BQ24735=y CONFIG_BATTERY_BQ27XXX=y CONFIG_CHARGER_MAX8903=y CONFIG_CHARGER_GPIO=y +CONFIG_CHARGER_BQ24735=y CONFIG_CHARGER_SMB347=y CONFIG_CHARGER_TPS65090=y CONFIG_BATTERY_ACER_A500=y @@ -208,8 +209,10 @@ CONFIG_REGULATOR_TPS6586X=y CONFIG_REGULATOR_TPS65910=y CONFIG_MEDIA_SUPPORT=y CONFIG_MEDIA_USB_SUPPORT=y -CONFIG_USB_VIDEO_CLASS=y CONFIG_USB_GSPCA=y +CONFIG_USB_VIDEO_CLASS=y +CONFIG_V4L_MEM2MEM_DRIVERS=y +CONFIG_VIDEO_TEGRA_VDE=y CONFIG_DRM=y CONFIG_DRM_NOUVEAU=m CONFIG_DRM_TEGRA=y @@ -298,13 +301,11 @@ CONFIG_SERIO_NVEC_PS2=y CONFIG_NVEC_POWER=y CONFIG_NVEC_PAZ00=y CONFIG_STAGING_MEDIA=y -CONFIG_V4L_MEM2MEM_DRIVERS=y -CONFIG_VIDEO_TEGRA_VDE=y +CONFIG_DSP_FM34NE=y CONFIG_CHROME_PLATFORMS=y CONFIG_CROS_EC=y CONFIG_CROS_EC_I2C=m CONFIG_CROS_EC_SPI=m -CONFIG_I2C_CROS_EC_TUNNEL=m CONFIG_TEGRA_IOMMU_GART=y CONFIG_TEGRA_IOMMU_SMMU=y CONFIG_ARCH_TEGRA_2x_SOC=y @@ -355,7 +356,6 @@ CONFIG_CRYPTO_TWOFISH=y CONFIG_DMA_CMA=y CONFIG_CMA_SIZE_MBYTES=64 CONFIG_PRINTK_TIME=y -CONFIG_DEBUG_INFO=y CONFIG_MAGIC_SYSRQ=y CONFIG_DEBUG_SLAB=y CONFIG_DEBUG_VM=y From 50cee2321d2a11816cd9c9f327d33cf50d6b0fd6 Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Mon, 16 Aug 2021 08:53:59 +0300 Subject: [PATCH 7/7] gpu: drm: grate: enable t30 dsi support Signed-off-by: Svyatoslav Ryhel --- arch/arm/boot/dts/tegra30.dtsi | 6 ++++++ drivers/gpu/drm/grate/drm.c | 1 + drivers/gpu/drm/grate/dsi.c | 1 + 3 files changed, 8 insertions(+) diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi index 4bf0b83e8bda4..d2966e9c94ac1 100644 --- a/arch/arm/boot/dts/tegra30.dtsi +++ b/arch/arm/boot/dts/tegra30.dtsi @@ -319,6 +319,9 @@ power-domains = <&pd_core>; operating-points-v2 = <&dsia_dvfs_opp_table>; status = "disabled"; + + #address-cells = <1>; + #size-cells = <0>; }; dsi@54400000 { @@ -332,6 +335,9 @@ power-domains = <&pd_core>; operating-points-v2 = <&dsib_dvfs_opp_table>; status = "disabled"; + + #address-cells = <1>; + #size-cells = <0>; }; }; diff --git a/drivers/gpu/drm/grate/drm.c b/drivers/gpu/drm/grate/drm.c index a015882e09064..c82f56a542758 100644 --- a/drivers/gpu/drm/grate/drm.c +++ b/drivers/gpu/drm/grate/drm.c @@ -668,6 +668,7 @@ static const struct of_device_id host1x_drm_subdevs[] = { { .compatible = "nvidia,tegra20-gr2d", }, { .compatible = "nvidia,tegra20-gr3d", }, { .compatible = "nvidia,tegra30-dc", }, + { .compatible = "nvidia,tegra30-dsi", }, { .compatible = "nvidia,tegra30-hdmi", }, { .compatible = "nvidia,tegra30-gr2d", }, { .compatible = "nvidia,tegra30-gr3d", }, diff --git a/drivers/gpu/drm/grate/dsi.c b/drivers/gpu/drm/grate/dsi.c index f6d13602e1b78..76e7109960304 100644 --- a/drivers/gpu/drm/grate/dsi.c +++ b/drivers/gpu/drm/grate/dsi.c @@ -1686,6 +1686,7 @@ static const struct of_device_id tegra_dsi_of_match[] = { { .compatible = "nvidia,tegra132-dsi", }, { .compatible = "nvidia,tegra124-dsi", }, { .compatible = "nvidia,tegra114-dsi", }, + { .compatible = "nvidia,tegra30-dsi", }, { }, }; MODULE_DEVICE_TABLE(of, tegra_dsi_of_match);