ARM64: DTS: Fix Firefly board audio driver release-20171130_firefly
authorT-Firefly <account@t-firefly.com>
Thu, 30 Nov 2017 04:59:41 +0000 (12:59 +0800)
committerT-Firefly <account@t-firefly.com>
Thu, 30 Nov 2017 04:59:41 +0000 (12:59 +0800)
37 files changed:
.gitignore
arch/arm/boot/dts/rk3288-firefly.dts
arch/arm/boot/dts/rk3288-firefly.dtsi
arch/arm64/boot/dts/rockchip/rk3399-firefly-aio-linux.dts [new file with mode: 0644]
arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-edp.dts
arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-mipi.dts [new file with mode: 0644]
arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts
arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux-edp.dts [new file with mode: 0644]
arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux-mipi.dts [new file with mode: 0644]
arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux.dts
arch/arm64/boot/dts/rockchip/rk3399.dtsi
arch/arm64/configs/firefly_linux_defconfig
drivers/char/virtd
drivers/clk/rockchip/clk-rk3399.c
drivers/gpu/drm/panel/panel-simple.c
drivers/gpu/drm/rockchip/dw-mipi-dsi.c
drivers/input/remotectl/Kconfig
drivers/input/remotectl/rockchip_pwm_remotectl.c
drivers/input/touchscreen/Makefile
drivers/input/touchscreen/gslx680.c [new file with mode: 0644]
drivers/input/touchscreen/gslx680.h [new file with mode: 0644]
drivers/media/platform/rockchip-rga/rga-hw.h
drivers/media/platform/rockchip-rga/rga.c
drivers/mfd/rk808.c
drivers/mmc/core/host.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/nvme/host/pci.c
drivers/spi/Kconfig
drivers/spi/Makefile
drivers/spi/spi-wk2xxx [new file with mode: 0644]
include/dt-bindings/clock/rk3399-cru.h
include/linux/mfd/rk808.h
logo.bmp
logo_kernel.bmp [deleted file]
sound/soc/codecs/es8323.c
sound/soc/codecs/rt5640.c
sound/soc/codecs/rt5640.h

index fd3a355925432f58c1bcf84b16ec3ec8bc8c5457..274a8b3a893bf3870f05e40fcf699b7aba682028 100644 (file)
@@ -112,3 +112,5 @@ all.config
 
 # Kdevelop4
 *.kdev4
+
+*.img
index c07fe92dc69fda7f713a23fadecd41d4074cca89..9dcee7031f088aa5d7e85fa8a92498c3ab8822cf 100644 (file)
@@ -67,5 +67,6 @@
 };
 
 &pwm1 {
-       status = "okay";
+       status = "disabled";
+       //status = "okay";
 };
index 30d262a8d78a54e859a7655740d0d65e5d9603bd..b3bb02ea23fee090d5b9752f530b6d948edb803e 100644 (file)
@@ -49,6 +49,7 @@
        };
 
        backlight: backlight {
+               status = "disabled";
                compatible = "pwm-backlight";
                brightness-levels = <
                          3   4   5   6   7
@@ -90,6 +91,7 @@
        };
 
        panel: panel {
+               status = "disabled";
                compatible ="lg,lp079qx1-sp0v";
                power-supply = <&vcc_sys>;
                backlight = <&backlight>;
                reset-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
        };
 
+       es8323-sound {
+               status = "okay";
+        compatible = "simple-audio-card";
+        simple-audio-card,format = "i2s";
+        simple-audio-card,name = "rockchip,es8323-codec";
+        simple-audio-card,mclk-fs = <256>;
+        //simple-audio-card,hp-det-gpio = <&gpio7 15 GPIO_ACTIVE_HIGH>;
+               simple-audio-card,widgets =
+                               "Microphone","Mic Jack",
+                               "Headphone","Headphone Jack";
+               simple-audio-card,routing =
+                               "Mic Jack","MICBIAS1",
+                               "IN1P","Mic Jack",
+                               "Headphone Jack","HPOL",
+                               "Headphone Jack","HPOR";
+               simple-audio-card,cpu {
+                               sound-dai = <&i2s>;
+               };
+               simple-audio-card,codec {
+                               sound-dai = <&es8323>;
+               };
+       };
+
        sound {
                compatible = "simple-audio-card";
                simple-audio-card,name = "SPDIF";
        vcc-supply = <&vdd_10>;
        vccio-supply = <&vcc_18>;
        force-hpd;
-       status = "okay";
+       status = "disabled";
 
        ports {
                edp_out: port@1 {
 };
 
 &edp_phy {
-       status = "okay";
+       status = "disabled";
+       //status = "okay";
 };
 
 &emmc {
 
 &i2c2 {
        status = "okay";
+
+       es8323: es8323@10 {
+        status = "okay";
+               compatible = "everest,es8323";
+               reg = <0x10>;
+               spk-con-gpio = <&gpio7 3 GPIO_ACTIVE_HIGH>;
+               hp-det-gpio = <&gpio7 15 GPIO_ACTIVE_LOW>;
+               clock-names = "mclk";
+               clocks = <&cru SCLK_I2S0_OUT>;
+               #sound-dai-cells = <0>;
+       };
 };
 
 &i2c4 {
        };
 };
 
+&i2s {
+       status = "okay";
+       #sound-dai-cells = <0>;
+};
+
 &saradc {
        vref-supply = <&vcc_18>;
        status = "okay";
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-aio-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-aio-linux.dts
new file mode 100644 (file)
index 0000000..4252921
--- /dev/null
@@ -0,0 +1,1264 @@
+/*
+ * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This file is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This file is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/dts-v1/;
+
+#include "dt-bindings/pwm/pwm.h"
+#include "rk3399.dtsi"
+#include "rk3399-opp.dtsi"
+#include "rk3399-linux.dtsi"
+#include <dt-bindings/input/input.h>
+
+/ {
+       model = "Rockchip RK3399 Firefly Board (Linux Opensource)";
+       compatible = "rockchip,rk3399-firefly-linux", "rockchip,rk3399";
+
+       backlight: backlight {
+               status = "disabled";
+               compatible = "pwm-backlight";
+               pwms = <&pwm1 0 25000 0>;
+               brightness-levels = <
+                         0   1   2   3   4   5   6   7
+                         8   9  10  11  12  13  14  15
+                        16  17  18  19  20  21  22  23
+                        24  25  26  27  28  29  30  31
+                        32  33  34  35  36  37  38  39
+                        40  41  42  43  44  45  46  47
+                        48  49  50  51  52  53  54  55
+                        56  57  58  59  60  61  62  63
+                        64  65  66  67  68  69  70  71
+                        72  73  74  75  76  77  78  79
+                        80  81  82  83  84  85  86  87
+                        88  89  90  91  92  93  94  95
+                        96  97  98  99 100 101 102 103
+                       104 105 106 107 108 109 110 111
+                       112 113 114 115 116 117 118 119
+                       120 121 122 123 124 125 126 127
+                       128 129 130 131 132 133 134 135
+                       136 137 138 139 140 141 142 143
+                       144 145 146 147 148 149 150 151
+                       152 153 154 155 156 157 158 159
+                       160 161 162 163 164 165 166 167
+                       168 169 170 171 172 173 174 175
+                       176 177 178 179 180 181 182 183
+                       184 185 186 187 188 189 190 191
+                       192 193 194 195 196 197 198 199
+                       200 201 202 203 204 205 206 207
+                       208 209 210 211 212 213 214 215
+                       216 217 218 219 220 221 222 223
+                       224 225 226 227 228 229 230 231
+                       232 233 234 235 236 237 238 239
+                       240 241 242 243 244 245 246 247
+                       248 249 250 251 252 253 254 255>;
+               default-brightness-level = <200>;
+       };
+
+       clkin_gmac: external-gmac-clock {
+               compatible = "fixed-clock";
+               clock-frequency = <125000000>;
+               clock-output-names = "clkin_gmac";
+               #clock-cells = <0>;
+       };
+
+       dw_hdmi_audio: dw-hdmi-audio {
+               status = "disabled";
+               compatible = "rockchip,dw-hdmi-audio";
+               #sound-dai-cells = <0>;
+       };
+
+       edp_panel: edp-panel {
+               status = "disabled";
+               compatible = "sharp,lcd-f402", "panel-simple";
+               backlight = <&backlight>;
+               power-supply = <&vcc_lcd>;
+               enable-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&lcd_panel_reset>;
+
+               ports {
+                       panel_in_edp: endpoint {
+                               remote-endpoint = <&edp_out_panel>;
+                       };
+               };
+       };
+
+       fiq_debugger: fiq-debugger {
+               compatible = "rockchip,fiq-debugger";
+               rockchip,serial-id = <2>;
+               rockchip,signal-irq = <182>;
+               rockchip,wake-irq = <0>;
+               rockchip,irq-mode-enable = <1>;  /* If enable uart uses irq instead of fiq */
+               rockchip,baudrate = <1500000>;  /* Only 115200 and 1500000 */
+               pinctrl-names = "default";
+               pinctrl-0 = <&uart2c_xfer>;
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               autorepeat;
+
+               pinctrl-names = "default";
+               pinctrl-0 = <&pwrbtn>;
+
+               button@0 {
+                       gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_POWER>;
+                       label = "GPIO Key Power";
+                       linux,input-type = <1>;
+                       gpio-key,wakeup = <1>;
+                       debounce-interval = <100>;
+               };
+       };
+
+       rt5640-sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,name = "rockchip,rt5640-codec";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,widgets =
+                       "Microphone", "Mic Jack",
+                       "Headphone", "Headphone Jack";
+               simple-audio-card,routing =
+                       "Mic Jack", "MICBIAS1",
+                       "IN1P", "Mic Jack",
+                       "Headphone Jack", "HPOL",
+                       "Headphone Jack", "HPOR";
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s1>;
+               };
+               simple-audio-card,codec {
+                       sound-dai = <&rt5640>;
+               };
+       };
+
+       hdmi_sound: hdmi-sound {
+               status = "disabled";
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,name = "rockchip,hdmi";
+
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s2>;
+               };
+               simple-audio-card,codec {
+                       sound-dai = <&dw_hdmi_audio>;
+               };
+       };
+
+       hdmi_codec: hdmi-codec {
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,name = "HDMI-CODEC";
+
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s2>;
+               };
+
+               simple-audio-card,codec {
+                       sound-dai = <&hdmi>;
+               };
+       };
+
+       spdif-sound {
+               status = "okay";
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "ROCKCHIP,SPDIF";
+               simple-audio-card,cpu {
+                       sound-dai = <&spdif>;
+               };
+               simple-audio-card,codec {
+                       sound-dai = <&spdif_out>;
+               };
+       };
+
+       spdif_out: spdif-out {
+               status = "okay";
+               compatible = "linux,spdif-dit";
+               #sound-dai-cells = <0>;
+       };
+
+       sdio_pwrseq: sdio-pwrseq {
+               compatible = "mmc-pwrseq-simple";
+               clocks = <&rk808 1>;
+               clock-names = "ext_clock";
+               pinctrl-names = "default";
+               pinctrl-0 = <&wifi_enable_h>;
+
+               /*
+                * On the module itself this is one of these (depending
+                * on the actual card populated):
+                * - SDIO_RESET_L_WL_REG_ON
+                * - PDN (power down when low)
+                */
+               reset-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; /* GPIO0_B2 */
+       };
+
+       vcc3v3_pcie: vcc3v3-pcie-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               regulator-always-on;
+               regulator-boot-on;
+               //gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio2 2 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pcie_drv>;
+               regulator-name = "vcc3v3_pcie";
+       };
+
+       vcc3v3_3g: vcc3v3-3g-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&gpio2 6 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pcie_3g_drv>;
+               regulator-name = "vcc3v3_3g";
+    };
+
+       vcc3v3_sys: vcc3v3-sys {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc3v3_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+       };
+
+       vcc5v0_host: vcc5v0-host-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&host_vbus_drv>;
+               regulator-name = "vcc5v0_host";
+               regulator-always-on;
+       };
+
+    vbus_5v: vbus-5v-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&vbus_5v_drv>;
+               regulator-name = "vbus_5v";
+    };
+
+       vcc5v0_sys: vcc5v0-sys {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc5v0_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+       };
+
+       vcc_phy: vcc-phy-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc_phy";
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vdd_log: vdd-log {
+               compatible = "pwm-regulator";
+               pwms = <&pwm2 0 25000 1>;
+               regulator-name = "vdd_log";
+               regulator-min-microvolt = <800000>;
+               regulator-max-microvolt = <1100000>;
+               regulator-always-on;
+               regulator-boot-on;
+
+               /* for rockchip boot on */
+               rockchip,pwm_id= <2>;
+               rockchip,pwm_voltage = <1000000>;
+       };
+
+       vccadc_ref: vccadc-ref {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc1v8_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+       };
+
+       vcc_lcd: vcc-lcd-regulator {
+               compatible = "regulator-fixed";
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&lcd_en>;
+               regulator-name = "vcc_lcd";
+       };
+
+       wireless-wlan {
+               compatible = "wlan-platdata";
+               rockchip,grf = <&grf>;
+               wifi_chip_type = "ap6354";
+               sdio_vref = <1800>;
+               WIFI,host_wake_irq = <&gpio0 3 GPIO_ACTIVE_HIGH>; /* GPIO0_a3 */
+               status = "okay";
+       };
+
+       wireless-bluetooth {
+               compatible = "bluetooth-platdata";
+               //wifi-bt-power-toggle;
+               clocks = <&rk808 1>;
+                clock-names = "ext_clock";
+               uart_rts_gpios = <&gpio2 19 GPIO_ACTIVE_LOW>; /* GPIO2_C3 */
+               pinctrl-names = "default", "rts_gpio";
+               pinctrl-0 = <&uart0_rts>;
+               pinctrl-1 = <&uart0_gpios>;
+               //BT,power_gpio  = <&gpio3 19 GPIO_ACTIVE_HIGH>; /* GPIOx_xx */
+               BT,reset_gpio    = <&gpio0 9 GPIO_ACTIVE_HIGH>; /* GPIO0_B1 */
+               BT,wake_gpio     = <&gpio2 26 GPIO_ACTIVE_HIGH>; /* GPIO2_D2 */
+               BT,wake_host_irq = <&gpio0 4 GPIO_ACTIVE_HIGH>; /* GPIO0_A4 */
+               status = "okay";
+       };
+
+    leds {
+       compatible = "gpio-leds";
+       power {
+           label = "firefly:blue:power";
+           linux,default-trigger = "ir-power-click";
+           default-state = "on";
+           gpios = <&gpio2 27 GPIO_ACTIVE_HIGH>;
+           pinctrl-names = "default";
+           pinctrl-0 = <&led_power>;
+       };
+       user {
+           label = "firefly:yellow:user";
+           linux,default-trigger = "ir-user-click";
+           default-state = "off";
+           gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
+           pinctrl-names = "default";
+           pinctrl-0 = <&led_user>;
+       };
+   };
+};
+
+&dsi {
+       status = "disabled";
+       dsi_panel: panel {
+               compatible ="simple-panel-dsi";
+               reg = <0>;
+               backlight = <&backlight>;
+               dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST)>;
+               dsi,format = <MIPI_DSI_FMT_RGB888>;
+               //bus-format = <MEDIA_BUS_FMT_RGB666_1X18>;
+               dsi,lanes = <4>;
+               /*
+               dsi,channel = <0>;
+               delay,enable = <35>;
+               delay,prepare = <6>;
+               delay,unprepare = <0>;
+               delay,disable = <20>;
+               size,width = <120>;
+               size,height = <170>;
+               */
+               status = "disabled";
+
+               panel-init-sequence = [
+                       05 20 01 29
+                       05 96 01 11
+               ];
+
+               panel-exit-sequence = [
+                               05 05 01 28
+                               05 78 01 10
+               ];
+
+               disp_timings: display-timings {
+                       native-mode = <&timing0>;
+                       timing0: timing0 {
+                          clock-frequency = <64000000>;
+                          hactive = <768>;
+                          vactive = <1024>;
+                          hsync-len = <5>;   //20, 50
+                          hback-porch = <25>; //50, 56
+                          hfront-porch = <150>;//50, 30
+                          vsync-len = <1>;
+                          vback-porch = <15>;
+                          vfront-porch = <100>;
+                          hsync-active = <0>;
+                          vsync-active = <0>;
+                          de-active = <0>;
+                          pixelclk-active = <0>;
+                       };
+               };
+       };
+};
+
+&cpu_l0 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l1 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l2 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l3 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_b0 {
+       cpu-supply = <&vdd_cpu_b>;
+};
+
+&cpu_b1 {
+       cpu-supply = <&vdd_cpu_b>;
+};
+
+&display_subsystem {
+       status = "okay";
+};
+
+&edp {
+       status = "disabled";
+
+       ports {
+               edp_out: port@1 {
+                       reg = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       edp_out_panel: endpoint@0 {
+                               reg = <0>;
+                               remote-endpoint = <&panel_in_edp>;
+                       };
+               };
+       };
+};
+
+&emmc_phy {
+       status = "okay";
+};
+
+&gmac {
+       phy-supply = <&vcc_phy>;
+       phy-mode = "rgmii";
+       clock_in_out = "input";
+       snps,reset-gpio = <&gpio3 15 GPIO_ACTIVE_LOW>;
+       snps,reset-active-low;
+       snps,reset-delays-us = <0 10000 50000>;
+       assigned-clocks = <&cru SCLK_RMII_SRC>;
+       assigned-clock-parents = <&clkin_gmac>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&rgmii_pins>;
+       tx_delay = <0x28>;
+       rx_delay = <0x1B>;
+       status = "okay";
+};
+
+&gpu {
+       status = "okay";
+       mali-supply = <&vdd_gpu>;
+};
+
+&hdmi {
+       #address-cells = <1>;
+       #size-cells = <0>;
+       #sound-dai-cells = <0>;
+       status = "okay";
+};
+
+&i2c0 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <168>;
+       i2c-scl-falling-time-ns = <4>;
+       clock-frequency = <400000>;
+
+       vdd_cpu_b: syr827@40 {
+               compatible = "silergy,syr827";
+               reg = <0x40>;
+               vin-supply = <&vcc5v0_sys>;
+               regulator-compatible = "fan53555-reg";
+               regulator-name = "vdd_cpu_b";
+               regulator-min-microvolt = <712500>;
+               regulator-max-microvolt = <1500000>;
+               regulator-ramp-delay = <1000>;
+               vsel-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+               fcs,suspend-voltage-selector = <1>;
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-initial-state = <3>;
+                       regulator-state-mem {
+                       regulator-off-in-suspend;
+               };
+       };
+
+       vdd_gpu: syr828@41 {
+               compatible = "silergy,syr828";
+               reg = <0x41>;
+               vin-supply = <&vcc5v0_sys>;
+               regulator-compatible = "fan53555-reg";
+               regulator-name = "vdd_gpu";
+               pinctrl-0 = <&vsel2_gpio>;
+               vsel-gpios = <&gpio1 14 0>;
+               regulator-min-microvolt = <712500>;
+               regulator-max-microvolt = <1500000>;
+               regulator-ramp-delay = <1000>;
+               fcs,suspend-voltage-selector = <1>;
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-initial-state = <3>;
+                       regulator-state-mem {
+                       regulator-off-in-suspend;
+               };
+       };
+
+       rk808: pmic@1b {
+               compatible = "rockchip,rk808";
+               reg = <0x1b>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
+               pmic,stby-gpio = <&gpio1 24 GPIO_ACTIVE_LOW>;
+               pmic,hold-gpio = <&gpio1 13 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pmic_int_l &pmic_dvs2 &pmic_stby &pmic_hold>;
+               rockchip,system-power-controller;
+               wakeup-source;
+               #clock-cells = <1>;
+               clock-output-names = "xin32k", "rk808-clkout2";
+
+               vcc1-supply = <&vcc3v3_sys>;
+               vcc2-supply = <&vcc3v3_sys>;
+               vcc3-supply = <&vcc3v3_sys>;
+               vcc4-supply = <&vcc3v3_sys>;
+               vcc6-supply = <&vcc3v3_sys>;
+               vcc7-supply = <&vcc3v3_sys>;
+               vcc8-supply = <&vcc3v3_sys>;
+               vcc9-supply = <&vcc3v3_sys>;
+               vcc10-supply = <&vcc3v3_sys>;
+               vcc11-supply = <&vcc3v3_sys>;
+               vcc12-supply = <&vcc3v3_sys>;
+               vddio-supply = <&vcc1v8_pmu>;
+
+               regulators {
+                       vdd_center: DCDC_REG1 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <750000>;
+                               regulator-max-microvolt = <1350000>;
+                               regulator-ramp-delay = <6001>;
+                               regulator-name = "vdd_center";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vdd_cpu_l: DCDC_REG2 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <750000>;
+                               regulator-max-microvolt = <1350000>;
+                               regulator-ramp-delay = <6001>;
+                               regulator-name = "vdd_cpu_l";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_ddr: DCDC_REG3 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-name = "vcc_ddr";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                               };
+                       };
+
+                       vcc_1v8: DCDC_REG4 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc_1v8";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcc1v8_dvp: LDO_REG1 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc1v8_dvp";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc3v0_tp: LDO_REG2 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "vcc3v0_tp";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc1v8_pmu: LDO_REG3 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc1v8_pmu";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcc_sd: LDO_REG4 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-name = "vcc_sd";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3300000>;
+                               };
+                       };
+
+                       vcca3v0_codec: LDO_REG5 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "vcca3v0_codec";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_1v5: LDO_REG6 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1500000>;
+                               regulator-max-microvolt = <1500000>;
+                               regulator-name = "vcc_1v5";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1500000>;
+                               };
+                       };
+
+                       vcca1v8_codec: LDO_REG7 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcca1v8_codec";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_3v0: LDO_REG8 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "vcc_3v0";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3000000>;
+                               };
+                       };
+
+                       vcc3v3_s3: SWITCH_REG1 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-name = "vcc3v3_s3";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc3v3_s0: SWITCH_REG2 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-name = "vcc3v3_s0";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+               };
+       };
+};
+
+&vdd_cpu_b {
+    /delete-property/ vsel-gpios;  //wk2xxx reset pin
+};
+
+&i2c1 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <300>;
+       i2c-scl-falling-time-ns = <15>;
+
+       rt5640: rt5640@1c {
+               #sound-dai-cells = <0>;
+               compatible = "realtek,rt5640";
+               reg = <0x1c>;
+               clocks = <&cru SCLK_I2S_8CH_OUT>;
+               clock-names = "mclk";
+               realtek,in1-differential;
+               pinctrl-names = "default";
+               pinctrl-0 = <&rt5640_hpcon>;
+               hp-con-gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+               //hp-det-gpio = <&gpio4 28 GPIO_ACTIVE_LOW>;
+               aux-det-gpio = <&gpio2 0 GPIO_ACTIVE_LOW>;
+               io-channels = <&saradc 4>;
+               hp-det-adc-value = <500>;
+       };
+};
+
+&i2c3 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <450>;
+       i2c-scl-falling-time-ns = <15>;
+};
+
+&i2c4 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <475>;
+       i2c-scl-falling-time-ns = <26>;
+
+       fusb0: fusb30x@22 {
+               status = "disabled";
+               compatible = "fairchild,fusb302";
+               reg = <0x22>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&fusb0_int>;
+               int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
+               vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+       };
+
+       gsl3680: gsl3680@40 {
+               status = "disabled";
+               compatible = "gslX680";
+               reg = <0x40>;
+               screen_max_x = <2048>;
+               screen_max_y = <1536>;
+               revert_xy = <1>;
+               revert_x = <1>;
+               revert_y = <0>;
+               touch-gpio = <&gpio4 28 IRQ_TYPE_LEVEL_LOW>;
+               reset-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+    };
+
+       mpu6050:mpu@68{
+               status = "disabled";
+               compatible = "invensense,mpu6050";
+               reg = <0x68>;
+               mpu-int_config = <0x10>;
+               mpu-level_shifter = <0>;
+               mpu-orientation = <0 1 0 1 0 0 0 0 1>;
+               orientation-x= <1>;
+               orientation-y= <1>;
+               orientation-z= <1>;
+               irq-gpio = <&gpio1 4 IRQ_TYPE_LEVEL_LOW>;
+               mpu-debug = <1>;
+       };
+};
+
+&i2s0 {
+       status = "okay";
+       rockchip,i2s-broken-burst-len;
+       rockchip,playback-channels = <8>;
+       rockchip,capture-channels = <8>;
+       assigned-clocks = <&cru SCLK_I2S0_DIV>, <&cru SCLK_I2S_8CH>;
+       assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S0_8CH>;
+       #sound-dai-cells = <0>;
+};
+
+&i2s1 {
+       status = "okay";
+       rockchip,i2s-broken-burst-len;
+       rockchip,playback-channels = <2>;
+       rockchip,capture-channels = <2>;
+       assigned-clocks = <&cru SCLK_I2S1_DIV>, <&cru SCLK_I2S_8CH>;
+       assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S1_8CH>;
+       #sound-dai-cells = <0>;
+};
+
+&i2s2 {
+       status = "okay";
+       #sound-dai-cells = <0>;
+};
+
+&io_domains {
+       status = "okay";
+
+       bt656-supply = <&vcc1v8_dvp>;           /* bt656_gpio2ab_ms */
+       audio-supply = <&vcca1v8_codec>;        /* audio_gpio3d4a_ms */
+       sdmmc-supply = <&vcc_sd>;               /* sdmmc_gpio4b_ms */
+       gpio1830-supply = <&vcc_3v0>;           /* gpio1833_gpio4cd_ms */
+};
+
+&pcie_phy {
+       status = "okay";
+};
+
+&pcie0 {
+       ep-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>;
+       num-lanes = <4>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pcie_clkreqn_cpm>;
+       status = "okay";
+};
+
+&pmu_io_domains {
+       status = "okay";
+       pmu1830-supply = <&vcc_3v0>;
+};
+
+&pinctrl {
+       buttons {
+               pwrbtn: pwrbtn {
+                       rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       lcd-panel {
+               lcd_panel_reset: lcd-panel-reset {
+                       rockchip,pins = <4 29 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+               lcd_en: lcd-en {
+                       rockchip,pins = <1 1 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       pcie {
+               pcie_drv: pcie-drv {
+                       rockchip,pins =
+                               <2 2 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+               pcie_3g_drv: pcie-3g-drv {
+               rockchip,pins =
+                               <2 6 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+       };
+
+       pmic {
+               vsel1_gpio: vsel1-gpio {
+                       rockchip,pins =
+                               <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+
+               vsel2_gpio: vsel2-gpio {
+                       rockchip,pins =
+                       <1 14 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+       };
+
+       sdio-pwrseq {
+               wifi_enable_h: wifi-enable-h {
+                       rockchip,pins =
+                               <0 10 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       wireless-bluetooth {
+               uart0_gpios: uart0-gpios {
+                       rockchip,pins =
+                               <2 19 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       leds {
+               led_power: led-power {
+                       rockchip,pins =
+                               <2 27 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+               led_user: led-user {
+                       rockchip,pins =
+                               <0 13 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       rt5640 {
+               rt5640_hpcon: rt5640-hpcon {
+                       rockchip,pins = <4 21 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       pmic {
+               pmic_int_l: pmic-int-l {
+                       rockchip,pins =
+                               <1 21 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+               pmic_dvs2: pmic-dvs2 {
+                       rockchip,pins =
+                               <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+               pmic_stby: pmic-stby {
+                       rockchip,pins =
+                               <1 24 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+               pmic_hold: pmic-hold{
+                       rockchip,pins =
+                               <1 13 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+               vsel1_gpio: vsel1-gpio {
+                       rockchip,pins =
+                               <1 18 0 &pcfg_pull_down>;
+               };
+               vsel2_gpio: vsel2-gpio {
+                       rockchip,pins =
+                               <1 14 0 &pcfg_pull_down>;
+               };
+       };
+
+       usb2 {
+               host_vbus_drv: host-vbus-drv {
+                       rockchip,pins =
+                               <4 25 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       fusb30x {
+               fusb0_int: fusb0-int {
+                       rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+       vbus {
+               vbus_5v_drv: vbus-5v-drv {
+                       rockchip,pins =
+                               <1 3 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+    };
+};
+
+&pwm0 {
+       status = "okay";
+};
+
+&pwm1 {
+        status = "okay";
+};
+
+&pwm2 {
+       status = "okay";
+};
+
+&rkvdec {
+       status = "okay";
+};
+
+&rockchip_suspend {
+       rockchip,power-ctrl =
+               <&gpio1 17 GPIO_ACTIVE_HIGH>,
+               <&gpio1 14 GPIO_ACTIVE_HIGH>;
+};
+
+&route_edp {
+       status = "disabled";
+};
+
+&route_hdmi {
+       status = "okay";
+       logo,mode = "center";
+};
+
+&cdn_dp {
+        status = "disabled";
+        extcon = <&fusb0>;
+        phys = <&tcphy0_dp>;
+};
+
+&hdmi_in_vopl {
+       status = "disabled";
+};
+
+&dsi_in_vopb {
+       status = "okay";
+};
+
+&dsi_in_vopl {
+       status = "okay";
+};
+
+&dp_in_vopb {
+        status = "disabled";
+};
+
+&saradc {
+       status = "okay";
+       vref-supply = <&vccadc_ref>;
+};
+
+&sdhci {
+       bus-width = <8>;
+       keep-power-in-suspend;
+       mmc-hs400-1_8v;
+       mmc-hs400-enhanced-strobe;
+       non-removable;
+       status = "okay";
+       supports-emmc;
+};
+
+&sdmmc {
+       max-frequency = <150000000>;
+       supports-sd;
+       bus-width = <4>;
+       cap-mmc-highspeed;
+       cap-sd-highspeed;
+       disable-wp;
+       num-slots = <1>;
+       vqmmc-supply = <&vcc_sd>;
+       pwrseq-gpio = <&gpio4 27 GPIO_ACTIVE_HIGH>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
+       status = "okay";
+};
+
+&sdio0 {
+       max-frequency = <50000000>;
+       supports-sdio;
+       bus-width = <4>;
+       disable-wp;
+       cap-sd-highspeed;
+       keep-power-in-suspend;
+       mmc-pwrseq = <&sdio_pwrseq>;
+       non-removable;
+       num-slots = <1>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
+       sd-uhs-sdr104;
+       status = "okay";
+};
+
+&spi1 {
+       status = "okay";
+    spi_wk2xxx: spi_wk2xxx@00{
+        status = "okay";
+        compatible = "firefly,spi-wk2xxx";
+        reg = <0x00>;
+        spi-max-frequency = <10000000>;
+        power-gpio = <&gpio2 4 GPIO_ACTIVE_HIGH>;
+        reset-gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+        irq-gpio = <&gpio1 2 IRQ_TYPE_EDGE_FALLING>;
+        cs-gpio = <&gpio1 10 GPIO_ACTIVE_HIGH>;
+        /* rk3399 driver support SPI_CPOL | SPI_CPHA | SPI_CS_HIGH */
+        //spi-cpha;     /* SPI mode: CPHA=1 */
+        //spi-cpol;     /* SPI mode: CPOL=1 */
+        //spi-cs-high;
+    };
+};
+
+&spdif {
+       status = "okay";
+       pinctrl-0 = <&spdif_bus_1>;
+       i2c-scl-rising-time-ns = <450>;
+       i2c-scl-falling-time-ns = <15>;
+       #sound-dai-cells = <0>;
+};
+
+&tcphy0 {
+       extcon = <&fusb0>;
+       /delete-property/ extcon;
+       status = "okay";
+};
+
+&tcphy1 {
+       status = "okay";
+};
+
+&tsadc {
+       /* tshut mode 0:CRU 1:GPIO */
+       rockchip,hw-tshut-mode = <1>;
+       /* tshut polarity 0:LOW 1:HIGH */
+       rockchip,hw-tshut-polarity = <1>;
+       status = "okay";
+};
+
+&u2phy0 {
+       status = "okay";
+       extcon = <&fusb0>;
+       /delete-property/ extcon;
+
+       u2phy0_otg: otg-port {
+               rockchip,vbus-always-on;
+               vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+               status = "okay";
+       };
+
+       u2phy0_host: host-port {
+               phy-supply = <&vcc5v0_host>;
+               status = "okay";
+       };
+};
+
+&u2phy1 {
+       status = "okay";
+
+       u2phy1_otg: otg-port {
+               status = "okay";
+       };
+
+       u2phy1_host: host-port {
+               phy-supply = <&vcc5v0_host>;
+               status = "okay";
+       };
+};
+
+&pwm3 {
+       status = "okay";
+       interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH 0>;
+       compatible = "rockchip,remotectl-pwm";
+       remote_pwm_id = <3>;
+       handle_cpu_id = <0>;
+
+    ir_key1{
+        rockchip,usercode = <0xff00>;
+        rockchip,key_table =
+            <0xeb   KEY_POWER>,
+            <0xec   KEY_COMPOSE>,
+            <0xfe   KEY_BACK>,
+            <0xb7   KEY_HOME>,
+            <0xa3   KEY_WWW>,
+            <0xf4   KEY_VOLUMEUP>,
+            <0xa7   KEY_VOLUMEDOWN>,
+            <0xf8   KEY_ENTER>,
+            <0xfc   KEY_UP>,
+            <0xfd   KEY_DOWN>,
+            <0xf1   KEY_LEFT>,
+            <0xe5   KEY_RIGHT>;
+    };
+};
+
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart0_xfer &uart0_cts>;
+       status = "okay";
+};
+
+&uart2 {
+       status = "okay";
+};
+
+&uart4 {
+       status = "disabled";
+       current-speed = <9600>;
+       no-loopback-test;
+};
+
+&usbdrd3_0 {
+       status = "okay";
+       extcon = <&fusb0>;
+       /delete-property/ extcon;
+};
+
+&usbdrd3_1 {
+       status = "okay";
+};
+
+&usbdrd_dwc3_0 {
+       status = "okay";
+       dr_mode = "host";
+};
+
+&usbdrd_dwc3_1 {
+       status = "okay";
+       dr_mode = "host";
+};
+
+&usb_host0_ehci {
+       status = "okay";
+};
+
+&usb_host0_ohci {
+       status = "okay";
+};
+
+&usb_host1_ehci {
+       status = "okay";
+};
+
+&usb_host1_ohci {
+       status = "okay";
+};
+
+&vopb {
+       status = "okay";
+};
+
+&vopb_mmu {
+       status = "okay";
+};
+
+&vopl {
+       status = "okay";
+};
+
+&vopl_mmu {
+       status = "okay";
+};
+
+&vpu {
+       status = "okay";
+       /* 0 means ion, 1 means drm */
+       //allocator = <0>;
+};
index a627db1edcdef8ee9b2f65e643d456e4cb8a0eb0..afb686f930e389d38184220f3116abad75822203 100755 (executable)
        rockchip,i2s-broken-burst-len;
        rockchip,playback-channels = <8>;
        rockchip,capture-channels = <8>;
+       assigned-clocks = <&cru SCLK_I2S0_DIV>, <&cru SCLK_I2S_8CH>;
+       assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S0_8CH>;
        #sound-dai-cells = <0>;
 };
 
        rockchip,i2s-broken-burst-len;
        rockchip,playback-channels = <2>;
        rockchip,capture-channels = <2>;
+       assigned-clocks = <&cru SCLK_I2S1_DIV>, <&cru SCLK_I2S_8CH>;
+       assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S1_8CH>;
        #sound-dai-cells = <0>;
 };
 
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-mipi.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-mipi.dts
new file mode 100644 (file)
index 0000000..09f544a
--- /dev/null
@@ -0,0 +1,1190 @@
+/*
+ * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This file is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This file is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/dts-v1/;
+
+#include "dt-bindings/pwm/pwm.h"
+#include "rk3399.dtsi"
+#include "rk3399-opp.dtsi"
+#include "rk3399-linux.dtsi"
+#include <dt-bindings/input/input.h>
+
+/ {
+       model = "Rockchip RK3399 Firefly Board (Linux Opensource)";
+       compatible = "rockchip,rk3399-firefly-linux", "rockchip,rk3399";
+
+       backlight: backlight {
+               status = "okay";
+               compatible = "pwm-backlight";
+               pwms = <&pwm1 0 25000 0>;
+               brightness-levels = <
+                         0   1   2   3   4   5   6   7
+                         8   9  10  11  12  13  14  15
+                        16  17  18  19  20  21  22  23
+                        24  25  26  27  28  29  30  31
+                        32  33  34  35  36  37  38  39
+                        40  41  42  43  44  45  46  47
+                        48  49  50  51  52  53  54  55
+                        56  57  58  59  60  61  62  63
+                        64  65  66  67  68  69  70  71
+                        72  73  74  75  76  77  78  79
+                        80  81  82  83  84  85  86  87
+                        88  89  90  91  92  93  94  95
+                        96  97  98  99 100 101 102 103
+                       104 105 106 107 108 109 110 111
+                       112 113 114 115 116 117 118 119
+                       120 121 122 123 124 125 126 127
+                       128 129 130 131 132 133 134 135
+                       136 137 138 139 140 141 142 143
+                       144 145 146 147 148 149 150 151
+                       152 153 154 155 156 157 158 159
+                       160 161 162 163 164 165 166 167
+                       168 169 170 171 172 173 174 175
+                       176 177 178 179 180 181 182 183
+                       184 185 186 187 188 189 190 191
+                       192 193 194 195 196 197 198 199
+                       200 201 202 203 204 205 206 207
+                       208 209 210 211 212 213 214 215
+                       216 217 218 219 220 221 222 223
+                       224 225 226 227 228 229 230 231
+                       232 233 234 235 236 237 238 239
+                       240 241 242 243 244 245 246 247
+                       248 249 250 251 252 253 254 255>;
+               default-brightness-level = <200>;
+       };
+
+       clkin_gmac: external-gmac-clock {
+               compatible = "fixed-clock";
+               clock-frequency = <125000000>;
+               clock-output-names = "clkin_gmac";
+               #clock-cells = <0>;
+       };
+
+       dw_hdmi_audio: dw-hdmi-audio {
+               status = "disabled";
+               compatible = "rockchip,dw-hdmi-audio";
+               #sound-dai-cells = <0>;
+       };
+
+       edp_panel: edp-panel {
+               status = "disabled";
+               compatible = "sharp,lcd-f402", "panel-simple";
+               backlight = <&backlight>;
+               power-supply = <&vcc_lcd>;
+               enable-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&lcd_panel_reset>;
+
+               ports {
+                       panel_in_edp: endpoint {
+                               remote-endpoint = <&edp_out_panel>;
+                       };
+               };
+       };
+
+       fiq_debugger: fiq-debugger {
+               compatible = "rockchip,fiq-debugger";
+               rockchip,serial-id = <2>;
+               rockchip,signal-irq = <182>;
+               rockchip,wake-irq = <0>;
+               rockchip,irq-mode-enable = <1>;  /* If enable uart uses irq instead of fiq */
+               rockchip,baudrate = <1500000>;  /* Only 115200 and 1500000 */
+               pinctrl-names = "default";
+               pinctrl-0 = <&uart2c_xfer>;
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               autorepeat;
+
+               pinctrl-names = "default";
+               pinctrl-0 = <&pwrbtn>;
+
+               button@0 {
+                       gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_POWER>;
+                       label = "GPIO Key Power";
+                       linux,input-type = <1>;
+                       gpio-key,wakeup = <1>;
+                       debounce-interval = <100>;
+               };
+       };
+
+       rt5640-sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,name = "rockchip,rt5640-codec";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,widgets =
+                       "Microphone", "Mic Jack",
+                       "Headphone", "Headphone Jack";
+               simple-audio-card,routing =
+                       "Mic Jack", "MICBIAS1",
+                       "IN1P", "Mic Jack",
+                       "Headphone Jack", "HPOL",
+                       "Headphone Jack", "HPOR";
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s1>;
+               };
+               simple-audio-card,codec {
+                       sound-dai = <&rt5640>;
+               };
+       };
+
+       hdmi_sound: hdmi-sound {
+               status = "disabled";
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,name = "rockchip,hdmi";
+
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s2>;
+               };
+               simple-audio-card,codec {
+                       sound-dai = <&dw_hdmi_audio>;
+               };
+       };
+
+       hdmi_codec: hdmi-codec {
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,name = "HDMI-CODEC";
+
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s2>;
+               };
+
+               simple-audio-card,codec {
+                       sound-dai = <&hdmi>;
+               };
+       };
+
+       spdif-sound {
+               status = "okay";
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "ROCKCHIP,SPDIF";
+               simple-audio-card,cpu {
+                       sound-dai = <&spdif>;
+               };
+               simple-audio-card,codec {
+                       sound-dai = <&spdif_out>;
+               };
+       };
+
+       spdif_out: spdif-out {
+               status = "okay";
+               compatible = "linux,spdif-dit";
+               #sound-dai-cells = <0>;
+       };
+
+       sdio_pwrseq: sdio-pwrseq {
+               compatible = "mmc-pwrseq-simple";
+               clocks = <&rk808 1>;
+               clock-names = "ext_clock";
+               pinctrl-names = "default";
+               pinctrl-0 = <&wifi_enable_h>;
+
+               /*
+                * On the module itself this is one of these (depending
+                * on the actual card populated):
+                * - SDIO_RESET_L_WL_REG_ON
+                * - PDN (power down when low)
+                */
+               reset-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; /* GPIO0_B2 */
+       };
+
+       vcc3v3_pcie: vcc3v3-pcie-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pcie_drv>;
+               regulator-name = "vcc3v3_pcie";
+       };
+
+       vcc3v3_3g: vcc3v3-3g-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&gpio0 2 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pcie_3g_drv>;
+               regulator-name = "vcc3v3_3g";
+    };
+
+       vcc3v3_sys: vcc3v3-sys {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc3v3_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+       };
+
+       vcc5v0_host: vcc5v0-host-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&host_vbus_drv>;
+               regulator-name = "vcc5v0_host";
+               regulator-always-on;
+       };
+
+       vcc5v0_sys: vcc5v0-sys {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc5v0_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+       };
+
+       vcc_phy: vcc-phy-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc_phy";
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vdd_log: vdd-log {
+               compatible = "pwm-regulator";
+               pwms = <&pwm2 0 25000 1>;
+               regulator-name = "vdd_log";
+               regulator-min-microvolt = <800000>;
+               regulator-max-microvolt = <1100000>;
+               regulator-always-on;
+               regulator-boot-on;
+
+               /* for rockchip boot on */
+               rockchip,pwm_id= <2>;
+               rockchip,pwm_voltage = <1000000>;
+       };
+
+       vccadc_ref: vccadc-ref {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc1v8_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+       };
+
+       vcc_lcd: vcc-lcd-regulator {
+               compatible = "regulator-fixed";
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&lcd_en>;
+               regulator-name = "vcc_lcd";
+       };
+
+       wireless-wlan {
+               compatible = "wlan-platdata";
+               rockchip,grf = <&grf>;
+               wifi_chip_type = "ap6354";
+               sdio_vref = <1800>;
+               WIFI,host_wake_irq = <&gpio0 3 GPIO_ACTIVE_HIGH>; /* GPIO0_a3 */
+               status = "okay";
+       };
+
+       wireless-bluetooth {
+               compatible = "bluetooth-platdata";
+               //wifi-bt-power-toggle;
+               clocks = <&rk808 1>;
+                clock-names = "ext_clock";
+               uart_rts_gpios = <&gpio2 19 GPIO_ACTIVE_LOW>; /* GPIO2_C3 */
+               pinctrl-names = "default", "rts_gpio";
+               pinctrl-0 = <&uart0_rts>;
+               pinctrl-1 = <&uart0_gpios>;
+               //BT,power_gpio  = <&gpio3 19 GPIO_ACTIVE_HIGH>; /* GPIOx_xx */
+               BT,reset_gpio    = <&gpio0 9 GPIO_ACTIVE_HIGH>; /* GPIO0_B1 */
+               BT,wake_gpio     = <&gpio2 26 GPIO_ACTIVE_HIGH>; /* GPIO2_D2 */
+               BT,wake_host_irq = <&gpio0 4 GPIO_ACTIVE_HIGH>; /* GPIO0_A4 */
+               status = "okay";
+       };
+
+    leds {
+       compatible = "gpio-leds";
+       power {
+           label = "firefly:blue:power";
+           linux,default-trigger = "ir-power-click";
+           default-state = "on";
+           gpios = <&gpio2 27 GPIO_ACTIVE_HIGH>;
+           pinctrl-names = "default";
+           pinctrl-0 = <&led_power>;
+       };
+       user {
+           label = "firefly:yellow:user";
+           linux,default-trigger = "ir-user-click";
+           default-state = "off";
+           gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
+           pinctrl-names = "default";
+           pinctrl-0 = <&led_user>;
+       };
+   };
+};
+
+&dsi {
+       status = "okay";
+       dsi_panel: panel {
+               compatible ="simple-panel-dsi";
+               reg = <0>;
+               backlight = <&backlight>;
+               dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST)>;
+               dsi,format = <MIPI_DSI_FMT_RGB888>;
+               //bus-format = <MEDIA_BUS_FMT_RGB666_1X18>;
+               dsi,lanes = <4>;
+               /*
+               dsi,channel = <0>;
+               delay,enable = <35>;
+               delay,prepare = <6>;
+               delay,unprepare = <0>;
+               delay,disable = <20>;
+               size,width = <120>;
+               size,height = <170>;
+               */
+               status = "okay";
+
+               panel-init-sequence = [
+                       05 20 01 29
+                       05 96 01 11
+               ];
+
+               panel-exit-sequence = [
+                               05 05 01 28
+                               05 78 01 10
+               ];
+
+               disp_timings: display-timings {
+                       native-mode = <&timing0>;
+                       timing0: timing0 {
+                          clock-frequency = <64000000>;
+                          hactive = <768>;
+                          vactive = <1024>;
+                          hsync-len = <5>;   //20, 50
+                          hback-porch = <25>; //50, 56
+                          hfront-porch = <150>;//50, 30
+                          vsync-len = <1>;
+                          vback-porch = <15>;
+                          vfront-porch = <100>;
+                          hsync-active = <0>;
+                          vsync-active = <0>;
+                          de-active = <0>;
+                          pixelclk-active = <0>;
+                       };
+               };
+       };
+};
+
+&cpu_l0 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l1 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l2 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l3 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_b0 {
+       cpu-supply = <&vdd_cpu_b>;
+};
+
+&cpu_b1 {
+       cpu-supply = <&vdd_cpu_b>;
+};
+
+&display_subsystem {
+       status = "okay";
+};
+
+&edp {
+       status = "disabled";
+
+       ports {
+               edp_out: port@1 {
+                       reg = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       edp_out_panel: endpoint@0 {
+                               reg = <0>;
+                               remote-endpoint = <&panel_in_edp>;
+                       };
+               };
+       };
+};
+
+&emmc_phy {
+       status = "okay";
+};
+
+&gmac {
+       phy-supply = <&vcc_phy>;
+       phy-mode = "rgmii";
+       clock_in_out = "input";
+       snps,reset-gpio = <&gpio3 15 GPIO_ACTIVE_LOW>;
+       snps,reset-active-low;
+       snps,reset-delays-us = <0 10000 50000>;
+       assigned-clocks = <&cru SCLK_RMII_SRC>;
+       assigned-clock-parents = <&clkin_gmac>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&rgmii_pins>;
+       tx_delay = <0x28>;
+       rx_delay = <0x1B>;
+       status = "okay";
+};
+
+&gpu {
+       status = "okay";
+       mali-supply = <&vdd_gpu>;
+};
+
+&hdmi {
+       #address-cells = <1>;
+       #size-cells = <0>;
+       #sound-dai-cells = <0>;
+       status = "okay";
+};
+
+&i2c0 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <168>;
+       i2c-scl-falling-time-ns = <4>;
+       clock-frequency = <400000>;
+
+       vdd_cpu_b: syr827@40 {
+               compatible = "silergy,syr827";
+               reg = <0x40>;
+               vin-supply = <&vcc5v0_sys>;
+               regulator-compatible = "fan53555-reg";
+               regulator-name = "vdd_cpu_b";
+               regulator-min-microvolt = <712500>;
+               regulator-max-microvolt = <1500000>;
+               regulator-ramp-delay = <1000>;
+               vsel-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+               fcs,suspend-voltage-selector = <1>;
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-initial-state = <3>;
+                       regulator-state-mem {
+                       regulator-off-in-suspend;
+               };
+       };
+
+       vdd_gpu: syr828@41 {
+               compatible = "silergy,syr828";
+               reg = <0x41>;
+               vin-supply = <&vcc5v0_sys>;
+               regulator-compatible = "fan53555-reg";
+               regulator-name = "vdd_gpu";
+               regulator-min-microvolt = <712500>;
+               regulator-max-microvolt = <1500000>;
+               regulator-ramp-delay = <1000>;
+               fcs,suspend-voltage-selector = <1>;
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-initial-state = <3>;
+                       regulator-state-mem {
+                       regulator-off-in-suspend;
+               };
+       };
+
+       rk808: pmic@1b {
+               compatible = "rockchip,rk808";
+               reg = <0x1b>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pmic_int_l &pmic_dvs2>;
+               rockchip,system-power-controller;
+               wakeup-source;
+               #clock-cells = <1>;
+               clock-output-names = "xin32k", "rk808-clkout2";
+
+               vcc1-supply = <&vcc3v3_sys>;
+               vcc2-supply = <&vcc3v3_sys>;
+               vcc3-supply = <&vcc3v3_sys>;
+               vcc4-supply = <&vcc3v3_sys>;
+               vcc6-supply = <&vcc3v3_sys>;
+               vcc7-supply = <&vcc3v3_sys>;
+               vcc8-supply = <&vcc3v3_sys>;
+               vcc9-supply = <&vcc3v3_sys>;
+               vcc10-supply = <&vcc3v3_sys>;
+               vcc11-supply = <&vcc3v3_sys>;
+               vcc12-supply = <&vcc3v3_sys>;
+               vddio-supply = <&vcc1v8_pmu>;
+
+               regulators {
+                       vdd_center: DCDC_REG1 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <750000>;
+                               regulator-max-microvolt = <1350000>;
+                               regulator-ramp-delay = <6001>;
+                               regulator-name = "vdd_center";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vdd_cpu_l: DCDC_REG2 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <750000>;
+                               regulator-max-microvolt = <1350000>;
+                               regulator-ramp-delay = <6001>;
+                               regulator-name = "vdd_cpu_l";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_ddr: DCDC_REG3 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-name = "vcc_ddr";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                               };
+                       };
+
+                       vcc_1v8: DCDC_REG4 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc_1v8";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcc1v8_dvp: LDO_REG1 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc1v8_dvp";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc3v0_tp: LDO_REG2 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "vcc3v0_tp";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc1v8_pmu: LDO_REG3 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc1v8_pmu";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcc_sd: LDO_REG4 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-name = "vcc_sd";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3300000>;
+                               };
+                       };
+
+                       vcca3v0_codec: LDO_REG5 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "vcca3v0_codec";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_1v5: LDO_REG6 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1500000>;
+                               regulator-max-microvolt = <1500000>;
+                               regulator-name = "vcc_1v5";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1500000>;
+                               };
+                       };
+
+                       vcca1v8_codec: LDO_REG7 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcca1v8_codec";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_3v0: LDO_REG8 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "vcc_3v0";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3000000>;
+                               };
+                       };
+
+                       vcc3v3_s3: SWITCH_REG1 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-name = "vcc3v3_s3";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc3v3_s0: SWITCH_REG2 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-name = "vcc3v3_s0";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+               };
+       };
+};
+
+&i2c1 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <300>;
+       i2c-scl-falling-time-ns = <15>;
+
+       rt5640: rt5640@1c {
+               #sound-dai-cells = <0>;
+               compatible = "realtek,rt5640";
+               reg = <0x1c>;
+               clocks = <&cru SCLK_I2S_8CH_OUT>;
+               clock-names = "mclk";
+               realtek,in1-differential;
+               pinctrl-names = "default";
+               pinctrl-0 = <&rt5640_hpcon>;
+               hp-con-gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+               //hp-det-gpio = <&gpio4 28 GPIO_ACTIVE_LOW>;
+               io-channels = <&saradc 4>;
+               hp-det-adc-value = <500>;
+       };
+};
+
+&i2c3 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <450>;
+       i2c-scl-falling-time-ns = <15>;
+};
+
+&i2c4 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <475>;
+       i2c-scl-falling-time-ns = <26>;
+
+       fusb0: fusb30x@22 {
+               compatible = "fairchild,fusb302";
+               reg = <0x22>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&fusb0_int>;
+               int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
+               vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+               status = "okay";
+       };
+
+       gsl3680: gsl3680@40 {
+               status = "okay";
+               compatible = "gslX680";
+               reg = <0x40>;
+               screen_max_x = <1536>;
+               screen_max_y = <2048>;
+               touch-gpio = <&gpio4 28 IRQ_TYPE_LEVEL_LOW>;
+               reset-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+    };
+
+       mpu6050:mpu@68{
+                       status = "disabled";
+            compatible = "invensense,mpu6050";
+            reg = <0x68>;
+            mpu-int_config = <0x10>;
+            mpu-level_shifter = <0>;
+            mpu-orientation = <0 1 0 1 0 0 0 0 1>;
+            orientation-x= <1>;
+            orientation-y= <1>;
+            orientation-z= <1>;
+            irq-gpio = <&gpio1 4 IRQ_TYPE_LEVEL_LOW>;
+            mpu-debug = <1>;
+       };
+};
+
+&i2s0 {
+       status = "okay";
+       rockchip,i2s-broken-burst-len;
+       rockchip,playback-channels = <8>;
+       rockchip,capture-channels = <8>;
+       assigned-clocks = <&cru SCLK_I2S0_DIV>, <&cru SCLK_I2S_8CH>;
+       assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S0_8CH>;
+       #sound-dai-cells = <0>;
+};
+
+&i2s1 {
+       status = "okay";
+       rockchip,i2s-broken-burst-len;
+       rockchip,playback-channels = <2>;
+       rockchip,capture-channels = <2>;
+       assigned-clocks = <&cru SCLK_I2S1_DIV>, <&cru SCLK_I2S_8CH>;
+       assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S1_8CH>;
+       #sound-dai-cells = <0>;
+};
+
+&i2s2 {
+       #sound-dai-cells = <0>;
+       status = "okay";
+};
+
+&io_domains {
+       status = "okay";
+
+       bt656-supply = <&vcc1v8_dvp>;           /* bt656_gpio2ab_ms */
+       audio-supply = <&vcca1v8_codec>;        /* audio_gpio3d4a_ms */
+       sdmmc-supply = <&vcc_sd>;               /* sdmmc_gpio4b_ms */
+       gpio1830-supply = <&vcc_3v0>;           /* gpio1833_gpio4cd_ms */
+};
+
+&pcie_phy {
+       status = "okay";
+};
+
+&pcie0 {
+       ep-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>;
+       num-lanes = <4>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pcie_clkreqn_cpm>;
+       status = "okay";
+};
+
+&pmu_io_domains {
+       status = "okay";
+       pmu1830-supply = <&vcc_3v0>;
+};
+
+&pinctrl {
+       buttons {
+               pwrbtn: pwrbtn {
+                       rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+       lcd-panel {
+               lcd_panel_reset: lcd-panel-reset {
+                       rockchip,pins = <4 29 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       
+               lcd_en: lcd-en {
+                       rockchip,pins = <1 1 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+       pcie {
+               pcie_drv: pcie-drv {
+                       rockchip,pins =
+                               <1 17 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+               pcie_3g_drv: pcie-3g-drv {
+               rockchip,pins =
+                               <0 2 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+       };
+
+       pmic {
+               vsel1_gpio: vsel1-gpio {
+                       rockchip,pins =
+                               <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+
+               vsel2_gpio: vsel2-gpio {
+                       rockchip,pins =
+                       <1 14 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+       };
+
+       sdio-pwrseq {
+               wifi_enable_h: wifi-enable-h {
+                       rockchip,pins =
+                               <0 10 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       wireless-bluetooth {
+               uart0_gpios: uart0-gpios {
+                       rockchip,pins =
+                               <2 19 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       leds {
+               led_power: led-power {
+                       rockchip,pins = <2 27 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+
+               led_user: led-user {
+                       rockchip,pins = <0 13 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       rt5640 {
+               rt5640_hpcon: rt5640-hpcon {
+                       rockchip,pins = <4 21 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       pmic {
+               pmic_int_l: pmic-int-l {
+                       rockchip,pins =
+                               <1 21 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+               pmic_dvs2: pmic-dvs2 {
+                       rockchip,pins =
+                               <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+       };
+
+       usb2 {
+               host_vbus_drv: host-vbus-drv {
+                       rockchip,pins =
+                               <4 25 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       fusb30x {
+               fusb0_int: fusb0-int {
+                       rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+};
+
+&pwm0 {
+       status = "okay";
+};
+
+&pwm1 {
+        status = "okay";
+};
+
+&pwm2 {
+       status = "okay";
+};
+
+&rkvdec {
+       status = "okay";
+};
+
+&rockchip_suspend {
+       rockchip,power-ctrl =
+               <&gpio1 18 GPIO_ACTIVE_LOW>,
+               <&gpio1 14 GPIO_ACTIVE_HIGH>;
+};
+
+&route_edp {
+       status = "disabled";
+};
+
+&route_hdmi {
+       status = "okay";
+       logo,mode = "center";
+};
+
+&cdn_dp {
+        status = "disabled";
+        extcon = <&fusb0>;
+        phys = <&tcphy0_dp>;
+};
+
+&hdmi_in_vopl {
+       status = "disabled";
+};
+
+&dsi_in_vopb {
+       status = "okay";
+};
+
+&dsi_in_vopl {
+       status = "okay";
+};
+
+&dp_in_vopb {
+        status = "disabled";
+};
+
+&saradc {
+       status = "okay";
+       vref-supply = <&vccadc_ref>;
+};
+
+&sdhci {
+       bus-width = <8>;
+       keep-power-in-suspend;
+       mmc-hs400-1_8v;
+       mmc-hs400-enhanced-strobe;
+       non-removable;
+       status = "okay";
+       supports-emmc;
+};
+
+&sdmmc {
+       max-frequency = <150000000>;
+       supports-sd;
+       bus-width = <4>;
+       cap-mmc-highspeed;
+       cap-sd-highspeed;
+       disable-wp;
+       num-slots = <1>;
+       vqmmc-supply = <&vcc_sd>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
+       status = "okay";
+};
+
+&sdio0 {
+       max-frequency = <50000000>;
+       supports-sdio;
+       bus-width = <4>;
+       disable-wp;
+       cap-sd-highspeed;
+       keep-power-in-suspend;
+       mmc-pwrseq = <&sdio_pwrseq>;
+       non-removable;
+       num-slots = <1>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
+       sd-uhs-sdr104;
+       status = "okay";
+};
+
+&spdif {
+       status = "okay";
+       pinctrl-0 = <&spdif_bus_1>;
+       i2c-scl-rising-time-ns = <450>;
+       i2c-scl-falling-time-ns = <15>;
+       #sound-dai-cells = <0>;
+};
+
+&tcphy0 {
+       extcon = <&fusb0>;
+       status = "okay";
+};
+
+&tcphy1 {
+       status = "okay";
+};
+
+&tsadc {
+       /* tshut mode 0:CRU 1:GPIO */
+       rockchip,hw-tshut-mode = <1>;
+       /* tshut polarity 0:LOW 1:HIGH */
+       rockchip,hw-tshut-polarity = <1>;
+       status = "okay";
+};
+
+&u2phy0 {
+       status = "okay";
+       extcon = <&fusb0>;
+
+       u2phy0_otg: otg-port {
+               status = "okay";
+       };
+
+       u2phy0_host: host-port {
+               phy-supply = <&vcc5v0_host>;
+               status = "okay";
+       };
+};
+
+&u2phy1 {
+       status = "okay";
+
+       u2phy1_otg: otg-port {
+               status = "okay";
+       };
+
+       u2phy1_host: host-port {
+               phy-supply = <&vcc5v0_host>;
+               status = "okay";
+       };
+};
+
+&pwm3 {
+       status = "okay";
+       interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH 0>;
+       compatible = "rockchip,remotectl-pwm";
+       remote_pwm_id = <3>;
+       handle_cpu_id = <0>;
+
+    ir_key1{
+        rockchip,usercode = <0xff00>;
+        rockchip,key_table =
+            <0xeb   KEY_POWER>,
+            <0xec   KEY_COMPOSE>,
+            <0xfe   KEY_BACK>,
+            <0xb7   KEY_HOME>,
+            <0xa3   KEY_WWW>,
+            <0xf4   KEY_VOLUMEUP>,
+            <0xa7   KEY_VOLUMEDOWN>,
+            <0xf8   KEY_ENTER>,
+            <0xfc   KEY_UP>,
+            <0xfd   KEY_DOWN>,
+            <0xf1   KEY_LEFT>,
+            <0xe5   KEY_RIGHT>;
+    };
+};
+
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart0_xfer &uart0_cts>;
+       status = "okay";
+};
+
+&uart2 {
+       status = "okay";
+};
+
+&uart4 {
+       current-speed = <9600>;
+       no-loopback-test;
+       status = "okay";
+};
+
+&usbdrd3_0 {
+       status = "okay";
+       extcon = <&fusb0>;
+};
+
+&usbdrd3_1 {
+       status = "okay";
+};
+
+&usbdrd_dwc3_0 {
+       status = "okay";
+};
+
+&usbdrd_dwc3_1 {
+       status = "okay";
+       dr_mode = "host";
+};
+
+&usb_host0_ehci {
+       status = "okay";
+};
+
+&usb_host0_ohci {
+       status = "okay";
+};
+
+&usb_host1_ehci {
+       status = "okay";
+};
+
+&usb_host1_ohci {
+       status = "okay";
+};
+
+&vopb {
+       status = "okay";
+};
+
+&vopb_mmu {
+       status = "okay";
+};
+
+&vopl {
+       status = "okay";
+};
+
+&vopl_mmu {
+       status = "okay";
+};
+
+&vpu {
+       status = "okay";
+       /* 0 means ion, 1 means drm */
+       //allocator = <0>;
+};
index e0474f92f492d5dbf0a6101c2ca3413803a4b043..44a8d24ed9ab8e89f50f20e14ee034ffaeece6d5 100644 (file)
                reg = <0x1b>;
                interrupt-parent = <&gpio1>;
                interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
+               pmic,stby-gpio = <&gpio1 24 GPIO_ACTIVE_LOW>;
+               pmic,hold-gpio = <&gpio1 13 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
-               pinctrl-0 = <&pmic_int_l &pmic_dvs2>;
+               pinctrl-0 = <&pmic_int_l &pmic_dvs2 &pmic_stby &pmic_hold>;
                rockchip,system-power-controller;
                wakeup-source;
                #clock-cells = <1>;
        rockchip,i2s-broken-burst-len;
        rockchip,playback-channels = <8>;
        rockchip,capture-channels = <8>;
+       assigned-clocks = <&cru SCLK_I2S0_DIV>, <&cru SCLK_I2S_8CH>;
+       assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S0_8CH>;
        #sound-dai-cells = <0>;
 };
 
        rockchip,i2s-broken-burst-len;
        rockchip,playback-channels = <2>;
        rockchip,capture-channels = <2>;
+       assigned-clocks = <&cru SCLK_I2S1_DIV>, <&cru SCLK_I2S_8CH>;
+       assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S1_8CH>;
        #sound-dai-cells = <0>;
 };
 
                        rockchip,pins =
                        <1 14 RK_FUNC_GPIO &pcfg_pull_down>;
                };
+               pmic_stby: pmic-stby {
+                       rockchip,pins =
+                               <1 24 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+               pmic_hold: pmic-hold{
+                       rockchip,pins =
+                               <1 13 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
        };
 
        sdio-pwrseq {
 };
 
 &cdn_dp {
-        status = "okay";
+        status = "disabled";
         extcon = <&fusb0>;
         phys = <&tcphy0_dp>;
 };
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux-edp.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux-edp.dts
new file mode 100644 (file)
index 0000000..999e145
--- /dev/null
@@ -0,0 +1,1129 @@
+/*
+ * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This file is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This file is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/dts-v1/;
+
+#include "dt-bindings/pwm/pwm.h"
+#include "rk3399.dtsi"
+#include "rk3399-opp.dtsi"
+#include "rk3399-linux.dtsi"
+#include <dt-bindings/input/input.h>
+
+/ {
+       model = "Rockchip RK3399 Firefly Board (Linux Opensource)";
+       compatible = "rockchip,rk3399-firefly-mini-linux", "rockchip,rk3399";
+
+       backlight: backlight {
+               status = "okay";
+               compatible = "pwm-backlight";
+               pwms = <&pwm0 0 25000 0>;
+               brightness-levels = <
+                         0   1   2   3   4   5   6   7
+                         8   9  10  11  12  13  14  15
+                        16  17  18  19  20  21  22  23
+                        24  25  26  27  28  29  30  31
+                        32  33  34  35  36  37  38  39
+                        40  41  42  43  44  45  46  47
+                        48  49  50  51  52  53  54  55
+                        56  57  58  59  60  61  62  63
+                        64  65  66  67  68  69  70  71
+                        72  73  74  75  76  77  78  79
+                        80  81  82  83  84  85  86  87
+                        88  89  90  91  92  93  94  95
+                        96  97  98  99 100 101 102 103
+                       104 105 106 107 108 109 110 111
+                       112 113 114 115 116 117 118 119
+                       120 121 122 123 124 125 126 127
+                       128 129 130 131 132 133 134 135
+                       136 137 138 139 140 141 142 143
+                       144 145 146 147 148 149 150 151
+                       152 153 154 155 156 157 158 159
+                       160 161 162 163 164 165 166 167
+                       168 169 170 171 172 173 174 175
+                       176 177 178 179 180 181 182 183
+                       184 185 186 187 188 189 190 191
+                       192 193 194 195 196 197 198 199
+                       200 201 202 203 204 205 206 207
+                       208 209 210 211 212 213 214 215
+                       216 217 218 219 220 221 222 223
+                       224 225 226 227 228 229 230 231
+                       232 233 234 235 236 237 238 239
+                       240 241 242 243 244 245 246 247
+                       248 249 250 251 252 253 254 255>;
+               default-brightness-level = <200>;
+       };
+
+       clkin_gmac: external-gmac-clock {
+               compatible = "fixed-clock";
+               clock-frequency = <125000000>;
+               clock-output-names = "clkin_gmac";
+               #clock-cells = <0>;
+       };
+
+       dw_hdmi_audio: dw-hdmi-audio {
+               status = "disabled";
+               compatible = "rockchip,dw-hdmi-audio";
+               #sound-dai-cells = <0>;
+       };
+
+       edp_panel: edp-panel {  
+               status = "okay";
+               compatible = "sharp,lcd-f402", "panel-simple";
+               backlight = <&backlight>;
+               power-supply = <&vcc_lcd>;
+               enable-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&lcd_panel_reset>;
+
+               ports {
+                       panel_in_edp: endpoint {
+                               remote-endpoint = <&edp_out_panel>;
+                       };
+               };
+       };
+
+       fiq_debugger: fiq-debugger {     
+               compatible = "rockchip,fiq-debugger";
+               rockchip,serial-id = <2>;
+               rockchip,signal-irq = <182>;
+               rockchip,wake-irq = <0>;
+               rockchip,irq-mode-enable = <1>;  /* If enable uart uses irq instead of fiq */
+               rockchip,baudrate = <1500000>;  /* Only 115200 and 1500000 */
+               pinctrl-names = "default";
+               pinctrl-0 = <&uart2c_xfer>;
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               autorepeat;
+
+               pinctrl-names = "default";
+               pinctrl-0 = <&pwrbtn>;
+
+               button@0 {
+                       gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_POWER>;
+                       label = "GPIO Key Power";
+                       linux,input-type = <1>;
+                       gpio-key,wakeup = <1>;
+                       debounce-interval = <100>;
+               };
+       };
+
+       rt5640-sound {
+               status = "disabled";
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,name = "rockchip,rt5640-codec";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,widgets =
+                       "Microphone", "Mic Jack",
+                       "Headphone", "Headphone Jack";
+               simple-audio-card,routing =
+                       "Mic Jack", "MICBIAS1",
+                       "IN1P", "Mic Jack",
+                       "Headphone Jack", "HPOL",
+                       "Headphone Jack", "HPOR";
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s1>;
+               };
+               simple-audio-card,codec {
+                       sound-dai = <&rt5640>;
+               };
+       };
+
+       es8323-sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,name = "rockchip,es8323-codec";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,widgets = 
+                               "Microphone","Mic Jack",
+                               "Headphone","Headphone Jack";
+               simple-audio-card,routing = 
+                               "Mic Jack","MICBIAS1",
+                               "IN1P","Mic Jack",
+                               "Headphone Jack","HPOL",
+                               "Headphone Jack","HPOR";
+               simple-audio-card,cpu {
+                               sound-dai = <&i2c1>;
+               };
+               simple-audio-card,codec {
+                               sound-dai = <&es8323>;
+               };
+
+       };
+
+       hdmi_sound: hdmi-sound {
+               status = "disabled";
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,name = "rockchip,hdmi";
+
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s2>;
+               };
+               simple-audio-card,codec {
+                       sound-dai = <&dw_hdmi_audio>;
+               };
+       };
+
+       hdmi_codec: hdmi-codec {
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,name = "HDMI-CODEC";
+
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s2>;
+               };
+
+               simple-audio-card,codec {
+                       sound-dai = <&hdmi>;
+               };
+       };
+
+       sdio_pwrseq: sdio-pwrseq {
+               compatible = "mmc-pwrseq-simple";
+               clocks = <&rk808 1>;
+               clock-names = "ext_clock";
+               pinctrl-names = "default";
+               pinctrl-0 = <&wifi_enable_h>;
+
+               /*
+                * On the module itself this is one of these (depending
+                * on the actual card populated):
+                * - SDIO_RESET_L_WL_REG_ON
+                * - PDN (power down when low)
+                */
+               reset-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; /* GPIO0_B2 */
+       };
+
+       vcc3v3_pcie: vcc3v3-pcie-regulator {
+               status = "disabled";
+               compatible = "regulator-fixed";
+               enable-active-high;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pcie_drv>;
+               regulator-name = "vcc3v3_pcie";
+       };
+
+       vcc3v3_sys: vcc3v3-sys {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc3v3_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+       };
+
+       vcc5v0_host: vcc5v0-host-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&host_vbus_drv>;
+               regulator-name = "vcc5v0_host";
+               regulator-always-on;
+       };
+
+       vcc5v0_sys: vcc5v0-sys {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc5v0_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+       };
+
+       vcc_phy: vcc-phy-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc_phy";
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vdd_log: vdd-log {
+               compatible = "pwm-regulator";
+               pwms = <&pwm2 0 25000 1>;
+               regulator-name = "vdd_log";
+               regulator-min-microvolt = <800000>;
+               regulator-max-microvolt = <1400000>;
+               regulator-always-on;
+               regulator-boot-on;
+
+               /* for rockchip boot on */
+               rockchip,pwm_id= <2>;
+               rockchip,pwm_voltage = <1000000>;
+       };
+
+       vccadc_ref: vccadc-ref {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc1v8_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+       };
+
+       vcc_lcd: vcc-lcd-regulator {
+               compatible = "regulator-fixed";
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&lcd_en>;
+               regulator-name = "vcc_lcd";
+       };
+
+       wireless-wlan {
+               compatible = "wlan-platdata";
+               rockchip,grf = <&grf>;
+               wifi_chip_type = "ap6212";
+               sdio_vref = <1800>;
+               WIFI,host_wake_irq = <&gpio0 3 GPIO_ACTIVE_HIGH>; /* GPIO0_a3 */
+               status = "okay";
+       };
+
+       wireless-bluetooth {
+               compatible = "bluetooth-platdata";
+               //wifi-bt-power-toggle;
+               clocks = <&rk808 1>;
+        clock-names = "ext_clock";
+               uart_rts_gpios = <&gpio2 19 GPIO_ACTIVE_LOW>; /* GPIO2_C3 */
+               pinctrl-names = "default", "rts_gpio";
+               pinctrl-0 = <&uart0_rts>;
+               pinctrl-1 = <&uart0_gpios>;
+               //BT,power_gpio  = <&gpio3 19 GPIO_ACTIVE_HIGH>; /* GPIOx_xx */
+               BT,reset_gpio    = <&gpio0 9 GPIO_ACTIVE_HIGH>; /* GPIO0_B1 */
+               BT,wake_gpio     = <&gpio2 26 GPIO_ACTIVE_HIGH>; /* GPIO2_D2 */
+               BT,wake_host_irq = <&gpio0 4 GPIO_ACTIVE_HIGH>; /* GPIO0_A4 */
+               status = "okay";
+       };
+
+    leds {
+          status = "disabled"; 
+       compatible = "gpio-leds";
+       power {
+           label = "firefly:blue:power";
+           linux,default-trigger = "ir-power-click";
+           default-state = "on";
+           gpios = <&gpio2 27 GPIO_ACTIVE_HIGH>;
+           pinctrl-names = "default";
+           pinctrl-0 = <&led_power>;
+       };
+       user {
+           label = "firefly:yellow:user";
+           linux,default-trigger = "ir-user-click";
+           default-state = "off";
+           gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
+           pinctrl-names = "default";
+           pinctrl-0 = <&led_user>;
+       };
+   };
+};
+
+&cpu_l0 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l1 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l2 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l3 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_b0 {
+       cpu-supply = <&vdd_cpu_b>;
+};
+
+&cpu_b1 {
+       cpu-supply = <&vdd_cpu_b>;
+};
+
+&display_subsystem {
+       status = "okay";
+};
+
+&edp {  
+       status = "okay";
+
+       ports {
+               edp_out: port@1 {
+                       reg = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       edp_out_panel: endpoint@0 {
+                               reg = <0>;
+                               remote-endpoint = <&panel_in_edp>;
+                       };
+               };
+       };
+};
+
+&emmc_phy {
+       status = "okay";
+};
+
+&gmac {
+       phy-supply = <&vcc_phy>;
+       phy-mode = "rgmii";
+       clock_in_out = "input";
+       snps,reset-gpio = <&gpio3 15 GPIO_ACTIVE_LOW>;
+       snps,reset-active-low;
+       snps,reset-delays-us = <0 10000 50000>;
+       assigned-clocks = <&cru SCLK_RMII_SRC>;
+       assigned-clock-parents = <&clkin_gmac>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&rgmii_pins>;
+       tx_delay = <0x28>;
+       rx_delay = <0x1B>;
+       status = "okay";
+};
+
+&gpu {
+       status = "okay";
+       mali-supply = <&vdd_gpu>;
+};
+
+&hdmi {
+       #address-cells = <1>;
+       #size-cells = <0>;
+       #sound-dai-cells = <0>;
+       status = "okay";
+};
+
+&i2c0 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <168>;
+       i2c-scl-falling-time-ns = <4>;
+       clock-frequency = <400000>;
+
+       vdd_cpu_b: syr827@40 {
+               compatible = "silergy,syr827";
+               reg = <0x40>;
+               vin-supply = <&vcc5v0_sys>;
+               regulator-compatible = "fan53555-reg";
+               regulator-name = "vdd_cpu_b";
+               regulator-min-microvolt = <712500>;
+               regulator-max-microvolt = <1500000>;
+               regulator-ramp-delay = <1000>;
+               vsel-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+               fcs,suspend-voltage-selector = <1>;
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-initial-state = <3>;
+                       regulator-state-mem {
+                       regulator-off-in-suspend;
+               };
+       };
+
+       vdd_gpu: syr828@41 {
+               compatible = "silergy,syr828";
+               reg = <0x41>;
+               vin-supply = <&vcc5v0_sys>;
+               regulator-compatible = "fan53555-reg";
+               regulator-name = "vdd_gpu";
+               regulator-min-microvolt = <712500>;
+               regulator-max-microvolt = <1500000>;
+               regulator-ramp-delay = <1000>;
+               fcs,suspend-voltage-selector = <1>;
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-initial-state = <3>;
+                       regulator-state-mem {
+                       regulator-off-in-suspend;
+               };
+       };
+
+       rk808: pmic@1b {
+               compatible = "rockchip,rk808";
+               reg = <0x1b>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pmic_int_l &pmic_dvs2>;
+               rockchip,system-power-controller;
+               wakeup-source;
+               #clock-cells = <1>;
+               clock-output-names = "xin32k", "rk808-clkout2";
+
+               vcc1-supply = <&vcc3v3_sys>;
+               vcc2-supply = <&vcc3v3_sys>;
+               vcc3-supply = <&vcc3v3_sys>;
+               vcc4-supply = <&vcc3v3_sys>;
+               vcc6-supply = <&vcc3v3_sys>;
+               vcc7-supply = <&vcc3v3_sys>;
+               vcc8-supply = <&vcc3v3_sys>;
+               vcc9-supply = <&vcc3v3_sys>;
+               vcc10-supply = <&vcc3v3_sys>;
+               vcc11-supply = <&vcc3v3_sys>;
+               vcc12-supply = <&vcc3v3_sys>;
+               vddio-supply = <&vcc1v8_pmu>;
+
+               regulators {
+                       vdd_center: DCDC_REG1 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <750000>;
+                               regulator-max-microvolt = <1350000>;
+                               regulator-ramp-delay = <6001>;
+                               regulator-name = "vdd_center";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vdd_cpu_l: DCDC_REG2 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <750000>;
+                               regulator-max-microvolt = <1350000>;
+                               regulator-ramp-delay = <6001>;
+                               regulator-name = "vdd_cpu_l";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_ddr: DCDC_REG3 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-name = "vcc_ddr";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                               };
+                       };
+
+                       vcc_1v8: DCDC_REG4 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc_1v8";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcc1v8_dvp: LDO_REG1 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc1v8_dvp";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc2v8_dvp: LDO_REG2 {
+                               //regulator-always-on;
+                               //regulator-boot-on;
+                               regulator-min-microvolt = <2800000>;
+                               regulator-max-microvolt = <2800000>;
+                               regulator-name = "vcc2v8_dvp";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc1v8_pmu: LDO_REG3 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc1v8_pmu";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcc_sd: LDO_REG4 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-name = "vcc_sd";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3300000>;
+                               };
+                       };
+
+                       vcca3v0_codec: LDO_REG5 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "vcca3v0_codec";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_1v5: LDO_REG6 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1500000>;
+                               regulator-max-microvolt = <1500000>;
+                               regulator-name = "vcc_1v5";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1500000>;
+                               };
+                       };
+
+                       vcca1v8_codec: LDO_REG7 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcca1v8_codec";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_3v0: LDO_REG8 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "vcc_3v0";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3000000>;
+                               };
+                       };
+
+                       vcc3v3_s3: SWITCH_REG1 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-name = "vcc3v3_s3";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc3v3_s0: SWITCH_REG2 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-name = "vcc3v3_s0";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+               };
+       };
+};
+
+&i2c1 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <300>;
+       i2c-scl-falling-time-ns = <15>;
+
+    es8323: es8323@10{
+               compatible = "everest,es8323";
+               reg = <0x10>;
+               ear-con-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+               hp-det-gpio = <&gpio0 11 GPIO_ACTIVE_HIGH>;
+               hp-mic-only = <1>;
+               #sound-dai-cells = <0>;
+               system-clock-frequency = <11289600>;
+               clocks = <&cru SCLK_I2S_8CH_OUT>;
+               clock-names = "mclk";
+               pinctrl-names = "default";
+               pinctrl-0 = <&es8323_earcon &es8323_hpdet>;
+       };
+       rt5640: rt5640@1c {
+               status = "disabled";
+               #sound-dai-cells = <0>;
+               compatible = "realtek,rt5640";
+               reg = <0x1c>;
+               clocks = <&cru SCLK_I2S_8CH_OUT>;
+               clock-names = "mclk";
+               realtek,in1-differential;
+               pinctrl-names = "default";
+               pinctrl-0 = <&rt5640_hpcon>;
+               hp-con-gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+               //hp-det-gpio = <&gpio4 28 GPIO_ACTIVE_LOW>;
+               io-channels = <&saradc 4>;
+               hp-det-adc-value = <500>;
+       };
+};
+
+&i2c3 { 
+       status = "okay";
+       i2c-scl-rising-time-ns = <450>;
+       i2c-scl-falling-time-ns = <15>;
+};
+
+&i2c4 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <475>;
+       i2c-scl-falling-time-ns = <26>;
+
+       fusb0: fusb30x@22 {
+               compatible = "fairchild,fusb302";
+               reg = <0x22>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&fusb0_int>;
+               int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
+               vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+               status = "okay";
+       };
+
+    gsl3680: gsl3680@41 {
+                       status = "okay";
+                       compatible = "gslX680-pad";
+                       reg = <0x41>;
+                       screen_max_x = <1536>;
+                       screen_max_y = <2048>;
+                       touch-gpio = <&gpio1 20 IRQ_TYPE_LEVEL_LOW>;
+                       reset-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+      };
+
+       mpu6050:mpu@68{
+                       status = "disabled";
+            compatible = "invensense,mpu6050";
+            reg = <0x68>;
+            mpu-int_config = <0x10>;
+            mpu-level_shifter = <0>;
+            mpu-orientation = <0 1 0 1 0 0 0 0 1>;
+            orientation-x= <1>;
+            orientation-y= <1>;
+            orientation-z= <1>;
+            irq-gpio = <&gpio1 4 IRQ_TYPE_LEVEL_LOW>;
+            mpu-debug = <1>;
+        };
+};
+
+&i2s0 {
+       status = "okay";
+       rockchip,i2s-broken-burst-len;
+       rockchip,playback-channels = <8>;
+       rockchip,capture-channels = <8>;
+       #sound-dai-cells = <0>;
+};
+
+&i2s1 {
+       status = "okay";
+       rockchip,i2s-broken-burst-len;
+       rockchip,playback-channels = <2>;
+       rockchip,capture-channels = <2>;
+       #sound-dai-cells = <0>;
+};
+
+&i2s2 {
+
+       #sound-dai-cells = <0>;
+       status = "okay";
+};
+
+&io_domains {
+       status = "okay";
+
+       bt656-supply = <&vcc_3v0>;              /* bt656_gpio2ab_ms */
+       audio-supply = <&vcca1v8_codec>;        /* audio_gpio3d4a_ms */
+       sdmmc-supply = <&vcc_sd>;               /* sdmmc_gpio4b_ms */
+       gpio1830-supply = <&vcc_3v0>;           /* gpio1833_gpio4cd_ms */
+};
+
+&pcie_phy {
+       status = "okay";
+};
+
+&pcie0 {
+       ep-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>;
+       num-lanes = <4>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pcie_clkreqn_cpm>;
+       status = "okay";
+};
+
+&pmu_io_domains {
+       status = "okay";
+       pmu1830-supply = <&vcc_3v0>;
+};
+
+&pinctrl {
+       buttons {   
+               pwrbtn: pwrbtn {
+                       rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       lcd-panel {
+               lcd_panel_reset: lcd-panel-reset {
+                       rockchip,pins = <4 29 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+               lcd_en: lcd-en {
+                       rockchip,pins = <1 1 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       pcie {  
+               pcie_drv: pcie-drv {
+                       rockchip,pins =
+                               <1 17 RK_FUNC_GPIO &pcfg_pull_none>;
+                       };
+                       pcie_3g_drv: pcie-3g-drv {
+                       rockchip,pins =
+                               <0 2 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+       };
+
+       pmic {
+               vsel1_gpio: vsel1-gpio {
+                       rockchip,pins =
+                               <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+
+               vsel2_gpio: vsel2-gpio {
+                       rockchip,pins =
+                       <1 14 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+       };
+
+       sdio-pwrseq {
+               wifi_enable_h: wifi-enable-h {
+                       rockchip,pins =
+                               <0 10 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       wireless-bluetooth {
+               uart0_gpios: uart0-gpios {
+                       rockchip,pins =
+                               <2 19 RK_FUNC_GPIO &pcfg_pull_none>,
+                               <0 9 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       leds {
+               led_power: led-power {
+                       rockchip,pins = <2 27 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+
+               led_user: led-user {
+                       rockchip,pins = <0 13 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       rt5640 {
+               rt5640_hpcon: rt5640-hpcon {
+                       rockchip,pins = <4 21 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       es8223 {
+               es8323_hpdet: es8323-hpdet {
+                       rockchip,pins = <0 11 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+               es8323_earcon: es8323-earcon {
+                       rockchip,pins = <0 12 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       pmic {
+               pmic_int_l: pmic-int-l {
+                       rockchip,pins =
+                               <1 21 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+               pmic_dvs2: pmic-dvs2 {
+                       rockchip,pins =
+                               <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+
+       };
+
+       usb2 {
+               host_vbus_drv: host-vbus-drv {
+                       rockchip,pins =
+                               <1 0 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+
+       fusb30x {
+               fusb0_int: fusb0-int {
+                       rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+};
+
+&pwm0 {
+       status = "okay";
+};
+
+&pwm2 {
+       status = "okay";
+};
+
+&rkvdec {
+       status = "okay";
+};
+
+&rockchip_suspend { 
+       rockchip,power-ctrl =
+               <&gpio1 18 GPIO_ACTIVE_LOW>,
+               <&gpio1 14 GPIO_ACTIVE_HIGH>;
+};
+
+&route_edp {
+       status = "disabled";
+};
+
+&route_hdmi {
+       status = "okay";
+       logo,mode = "center";
+};
+
+&cdn_dp {
+        status = "disabled";
+        extcon = <&fusb0>;
+        phys = <&tcphy0_dp>;
+};
+
+&dp_in_vopb {
+        status = "disabled";
+};
+
+&saradc {
+       status = "okay";
+       vref-supply = <&vccadc_ref>;
+};
+
+&sdhci {
+       bus-width = <8>;
+       keep-power-in-suspend;
+       mmc-hs400-1_8v;
+       mmc-hs400-enhanced-strobe;
+       non-removable;
+       status = "okay";
+       supports-emmc;
+};
+
+&sdmmc {
+       max-frequency = <150000000>;
+       supports-sd;
+       bus-width = <4>;
+       cap-mmc-highspeed;
+       cap-sd-highspeed;
+       disable-wp;
+       num-slots = <1>;
+       vqmmc-supply = <&vcc_sd>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
+       status = "okay";
+};
+
+&sdio0 {
+       max-frequency = <50000000>;
+       supports-sdio;
+       bus-width = <4>;
+       disable-wp;
+       cap-sd-highspeed;
+       keep-power-in-suspend;
+       mmc-pwrseq = <&sdio_pwrseq>;
+       non-removable;
+       num-slots = <1>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
+       sd-uhs-sdr104;
+       status = "okay";
+};
+
+&tcphy0 {  
+       extcon = <&fusb0>;
+       status = "okay";
+};
+
+&tcphy1 {   
+       status = "okay";
+};
+
+&tsadc {
+       /* tshut mode 0:CRU 1:GPIO */
+       rockchip,hw-tshut-mode = <1>;
+       /* tshut polarity 0:LOW 1:HIGH */
+       rockchip,hw-tshut-polarity = <1>;
+       status = "okay";
+};
+
+&u2phy0 {   
+       status = "okay";
+       extcon = <&fusb0>;
+
+       u2phy0_otg: otg-port {
+               status = "okay";
+       };
+
+       u2phy0_host: host-port {
+               phy-supply = <&vcc5v0_host>;
+               status = "okay";
+       };
+};
+
+&u2phy1 {
+       status = "okay";
+
+       u2phy1_otg: otg-port {
+               status = "okay";
+       };
+
+       u2phy1_host: host-port {
+               phy-supply = <&vcc5v0_host>;
+               status = "okay";
+       };
+};
+
+&pwm3 { 
+       status = "okay";
+       interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH 0>;
+       compatible = "rockchip,remotectl-pwm";
+       remote_pwm_id = <3>;
+       handle_cpu_id = <0>;
+
+    ir_key1{
+        rockchip,usercode = <0xff00>;
+        rockchip,key_table =
+            <0xeb   KEY_POWER>,
+            <0xec   KEY_COMPOSE>,
+            <0xfe   KEY_BACK>,
+            <0xb7   KEY_HOME>,
+            <0xa3   KEY_WWW>,
+            <0xf4   KEY_VOLUMEUP>,
+            <0xa7   KEY_VOLUMEDOWN>,
+            <0xf8   KEY_ENTER>,
+            <0xfc   KEY_UP>,
+            <0xfd   KEY_DOWN>,
+            <0xf1   KEY_LEFT>,
+            <0xe5   KEY_RIGHT>;
+    };
+};
+
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart0_xfer &uart0_cts>;
+       status = "okay";
+};
+
+&uart2 {  
+       status = "okay";
+};
+
+&usbdrd3_0 {   
+       status = "okay";
+       extcon = <&fusb0>;
+};
+
+&usbdrd3_1 {   
+       status = "okay";
+};
+
+&usbdrd_dwc3_0 {
+       status = "okay";
+};
+
+&usbdrd_dwc3_1 {   
+       status = "okay";
+       dr_mode = "host";
+};
+&usb_host0_ehci { 
+       status = "okay";
+};
+
+&usb_host0_ohci { 
+       status = "okay";
+};
+
+&usb_host1_ehci {  
+       status = "okay";
+};
+
+&usb_host1_ohci {  
+       status = "okay";
+};
+
+&vopb { 
+       status = "okay";
+};
+
+&vopb_mmu { 
+       status = "okay";
+};
+
+&vopl {
+       status = "okay";
+};
+
+&vopl_mmu {
+       status = "okay";
+};
+
+&vpu {
+       status = "okay";
+       /* 0 means ion, 1 means drm */
+       //allocator = <0>;
+};
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux-mipi.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux-mipi.dts
new file mode 100644 (file)
index 0000000..84decf7
--- /dev/null
@@ -0,0 +1,1200 @@
+/*
+ * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This file is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This file is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/dts-v1/;
+
+#include "dt-bindings/pwm/pwm.h"
+#include "rk3399.dtsi"
+#include "rk3399-opp.dtsi"
+#include "rk3399-linux.dtsi"
+#include <dt-bindings/input/input.h>
+
+/ {
+       model = "Rockchip RK3399 Firefly Board (Linux Opensource)";
+       compatible = "rockchip,rk3399-firefly-mini-linux", "rockchip,rk3399";
+
+       backlight: backlight {
+               status = "okay";
+               compatible = "pwm-backlight";
+               pwms = <&pwm1 0 25000 0>;
+               brightness-levels = <
+                         0   1   2   3   4   5   6   7
+                         8   9  10  11  12  13  14  15
+                        16  17  18  19  20  21  22  23
+                        24  25  26  27  28  29  30  31
+                        32  33  34  35  36  37  38  39
+                        40  41  42  43  44  45  46  47
+                        48  49  50  51  52  53  54  55
+                        56  57  58  59  60  61  62  63
+                        64  65  66  67  68  69  70  71
+                        72  73  74  75  76  77  78  79
+                        80  81  82  83  84  85  86  87
+                        88  89  90  91  92  93  94  95
+                        96  97  98  99 100 101 102 103
+                       104 105 106 107 108 109 110 111
+                       112 113 114 115 116 117 118 119
+                       120 121 122 123 124 125 126 127
+                       128 129 130 131 132 133 134 135
+                       136 137 138 139 140 141 142 143
+                       144 145 146 147 148 149 150 151
+                       152 153 154 155 156 157 158 159
+                       160 161 162 163 164 165 166 167
+                       168 169 170 171 172 173 174 175
+                       176 177 178 179 180 181 182 183
+                       184 185 186 187 188 189 190 191
+                       192 193 194 195 196 197 198 199
+                       200 201 202 203 204 205 206 207
+                       208 209 210 211 212 213 214 215
+                       216 217 218 219 220 221 222 223
+                       224 225 226 227 228 229 230 231
+                       232 233 234 235 236 237 238 239
+                       240 241 242 243 244 245 246 247
+                       248 249 250 251 252 253 254 255>;
+               default-brightness-level = <200>;
+       };
+
+       clkin_gmac: external-gmac-clock {
+               compatible = "fixed-clock";
+               clock-frequency = <125000000>;
+               clock-output-names = "clkin_gmac";
+               #clock-cells = <0>;
+       };
+
+       dw_hdmi_audio: dw-hdmi-audio {
+               status = "disabled";
+               compatible = "rockchip,dw-hdmi-audio";
+               #sound-dai-cells = <0>;
+       };
+
+       edp_panel: edp-panel {
+               status = "disabled";
+               compatible = "sharp,lcd-f402", "panel-simple";
+               backlight = <&backlight>;
+               power-supply = <&vcc_lcd>;
+               enable-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&lcd_panel_reset>;
+
+               ports {
+                       panel_in_edp: endpoint {
+                               remote-endpoint = <&edp_out_panel>;
+                       };
+               };
+       };
+
+       fiq_debugger: fiq-debugger {
+               compatible = "rockchip,fiq-debugger";
+               rockchip,serial-id = <2>;
+               rockchip,signal-irq = <182>;
+               rockchip,wake-irq = <0>;
+               rockchip,irq-mode-enable = <1>;  /* If enable uart uses irq instead of fiq */
+               rockchip,baudrate = <1500000>;  /* Only 115200 and 1500000 */
+               pinctrl-names = "default";
+               pinctrl-0 = <&uart2c_xfer>;
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               autorepeat;
+
+               pinctrl-names = "default";
+               pinctrl-0 = <&pwrbtn>;
+
+               button@0 {
+                       gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_POWER>;
+                       label = "GPIO Key Power";
+                       linux,input-type = <1>;
+                       gpio-key,wakeup = <1>;
+                       debounce-interval = <100>;
+               };
+       };
+
+       rt5640-sound {
+               status = "disabled";
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,name = "rockchip,rt5640-codec";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,widgets =
+                       "Microphone", "Mic Jack",
+                       "Headphone", "Headphone Jack";
+               simple-audio-card,routing =
+                       "Mic Jack", "MICBIAS1",
+                       "IN1P", "Mic Jack",
+                       "Headphone Jack", "HPOL",
+                       "Headphone Jack", "HPOR";
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s1>;
+               };
+               simple-audio-card,codec {
+                       sound-dai = <&rt5640>;
+               };
+       };
+
+       es8323-sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,name = "rockchip,es8323-codec";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,widgets =
+                               "Microphone","Mic Jack",
+                               "Headphone","Headphone Jack";
+               simple-audio-card,routing =
+                               "Mic Jack","MICBIAS1",
+                               "IN1P","Mic Jack",
+                               "Headphone Jack","HPOL",
+                               "Headphone Jack","HPOR";
+               simple-audio-card,cpu {
+                               sound-dai = <&i2s1>;
+               };
+               simple-audio-card,codec {
+                               sound-dai = <&es8323>;
+               };
+       };
+
+       hdmi_sound: hdmi-sound {
+               status = "disabled";
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,name = "rockchip,hdmi";
+
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s2>;
+               };
+               simple-audio-card,codec {
+                       sound-dai = <&dw_hdmi_audio>;
+               };
+       };
+
+       hdmi_codec: hdmi-codec {
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,mclk-fs = <256>;
+               simple-audio-card,name = "HDMI-CODEC";
+
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s2>;
+               };
+               simple-audio-card,codec {
+                       sound-dai = <&hdmi>;
+               };
+       };
+
+       sdio_pwrseq: sdio-pwrseq {
+               compatible = "mmc-pwrseq-simple";
+               clocks = <&rk808 1>;
+               clock-names = "ext_clock";
+               pinctrl-names = "default";
+               pinctrl-0 = <&wifi_enable_h>;
+
+               /*
+                * On the module itself this is one of these (depending
+                * on the actual card populated):
+                * - SDIO_RESET_L_WL_REG_ON
+                * - PDN (power down when low)
+                */
+               reset-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; /* GPIO0_B2 */
+       };
+
+       vcc3v3_pcie: vcc3v3-pcie-regulator {
+               status = "disabled";
+               compatible = "regulator-fixed";
+               enable-active-high;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pcie_drv>;
+               regulator-name = "vcc3v3_pcie";
+       };
+
+       vcc3v3_sys: vcc3v3-sys {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc3v3_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+       };
+
+       vcc5v0_host: vcc5v0-host-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&host_vbus_drv>;
+               regulator-name = "vcc5v0_host";
+               regulator-always-on;
+       };
+
+       vbus_5v: vbus-5v-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&vbus_5v_drv>;
+               regulator-name = "vbus_5v";
+       };
+
+       vcc5v0_sys: vcc5v0-sys {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc5v0_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+       };
+
+       vcc_phy: vcc-phy-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc_phy";
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vdd_log: vdd-log {
+               compatible = "pwm-regulator";
+               pwms = <&pwm2 0 25000 1>;
+               regulator-name = "vdd_log";
+               regulator-min-microvolt = <800000>;
+               regulator-max-microvolt = <1400000>;
+               regulator-always-on;
+               regulator-boot-on;
+
+               /* for rockchip boot on */
+               rockchip,pwm_id= <2>;
+               rockchip,pwm_voltage = <1000000>;
+       };
+
+       vccadc_ref: vccadc-ref {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc1v8_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+       };
+
+       vcc_lcd: vcc-lcd-regulator {
+               compatible = "regulator-fixed";
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&lcd_en>;
+               regulator-name = "vcc_lcd";
+       };
+
+       wireless-wlan {
+               compatible = "wlan-platdata";
+               rockchip,grf = <&grf>;
+               wifi_chip_type = "ap6212";
+               sdio_vref = <1800>;
+               WIFI,host_wake_irq = <&gpio0 3 GPIO_ACTIVE_HIGH>; /* GPIO0_a3 */
+               status = "okay";
+       };
+
+       wireless-bluetooth {
+               compatible = "bluetooth-platdata";
+               //wifi-bt-power-toggle;
+               clocks = <&rk808 1>;
+        clock-names = "ext_clock";
+               uart_rts_gpios = <&gpio2 19 GPIO_ACTIVE_LOW>; /* GPIO2_C3 */
+               pinctrl-names = "default", "rts_gpio";
+               pinctrl-0 = <&uart0_rts>;
+               pinctrl-1 = <&uart0_gpios>;
+               //BT,power_gpio  = <&gpio3 19 GPIO_ACTIVE_HIGH>; /* GPIOx_xx */
+               BT,reset_gpio    = <&gpio0 9 GPIO_ACTIVE_HIGH>; /* GPIO0_B1 */
+               BT,wake_gpio     = <&gpio2 26 GPIO_ACTIVE_HIGH>; /* GPIO2_D2 */
+               BT,wake_host_irq = <&gpio0 4 GPIO_ACTIVE_HIGH>; /* GPIO0_A4 */
+               status = "okay";
+       };
+
+       leds {
+               compatible = "gpio-leds";
+               power {
+                       label = "firefly:blue:power";
+                       linux,default-trigger = "ir-power-click";
+                       default-state = "on";
+                       gpios = <&gpio2 27 GPIO_ACTIVE_HIGH>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&led_power>;
+               };
+               user {
+                       label = "firefly:yellow:user";
+                       linux,default-trigger = "ir-user-click";
+                       default-state = "off";
+                       gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&led_user>;
+       };
+   };
+};
+
+&dsi {
+       status = "okay";
+       dsi_panel: dsi_panel {
+               compatible ="simple-panel-dsi";
+               reg = <0>;
+               //enable-gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;
+               //reset-gpios = <&gpio4 29 GPIO_ACTIVE_LOW>;
+               dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST)>;
+               dsi,format = <MIPI_DSI_FMT_RGB888>;
+               dsi,lanes = <4>;
+               delay,prepare = <10>;
+               status = "okay";
+
+               /*
+               dsi,channel = <0>;
+
+        delay,enable = <10>;
+        delay,power = <10>;
+        delay,reset = <20>;
+        delay,prepare = <10>;
+
+        delay,unpreapre = <0>;
+        delay,unreset = <0>;
+        delay,unpower = <0>;
+        delay,disable = <0>;
+               
+        size,width = <120>;
+        size,height = <170>;
+               */
+
+               panel-init-sequence = [
+                       05 20 01 29
+                       05 96 01 11
+               ];
+               panel-exit-sequence = [
+                               05 05 01 28
+                               05 78 01 10
+               ];
+
+               disp_timings: display-timings {
+                       native-mode = <&timing0>;
+                       timing0: timing0 {
+                          clock-frequency = <64000000>;
+                          hactive = <768>;
+                          vactive = <1024>;
+                          hsync-len = <5>;   //20, 50
+                          hback-porch = <25>; //50, 56
+                          hfront-porch = <150>;//50, 30
+                          vsync-len = <1>;
+                          vback-porch = <15>;
+                          vfront-porch = <100>;
+                          hsync-active = <0>;
+                          vsync-active = <0>;
+                          de-active = <0>;
+                          pixelclk-active = <0>;
+                       };
+               };
+       };
+};     
+
+&cpu_l0 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l1 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l2 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l3 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_b0 {
+       cpu-supply = <&vdd_cpu_b>;
+};
+
+&cpu_b1 {
+       cpu-supply = <&vdd_cpu_b>;
+};
+
+&display_subsystem {
+       status = "okay";
+};
+
+&edp {
+       status = "disabled";
+
+       ports {
+               edp_out: port@1 {
+                       reg = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       edp_out_panel: endpoint@0 {
+                               reg = <0>;
+                               remote-endpoint = <&panel_in_edp>;
+                       };
+               };
+       };
+};
+
+&emmc_phy {
+       status = "okay";
+};
+
+&gmac {
+       phy-supply = <&vcc_phy>;
+       phy-mode = "rgmii";
+       clock_in_out = "input";
+       snps,reset-gpio = <&gpio3 15 GPIO_ACTIVE_LOW>;
+       snps,reset-active-low;
+       snps,reset-delays-us = <0 10000 50000>;
+       assigned-clocks = <&cru SCLK_RMII_SRC>;
+       assigned-clock-parents = <&clkin_gmac>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&rgmii_pins>;
+       tx_delay = <0x28>;
+       rx_delay = <0x11>;
+       status = "okay";
+};
+
+&gpu {
+       status = "okay";
+       mali-supply = <&vdd_gpu>;
+};
+
+&hdmi {
+       #address-cells = <1>;
+       #size-cells = <0>;
+       #sound-dai-cells = <0>;
+       status = "okay";
+};
+
+&i2c0 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <168>;
+       i2c-scl-falling-time-ns = <4>;
+       clock-frequency = <400000>;
+
+       vdd_cpu_b: syr827@40 {
+               compatible = "silergy,syr827";
+               reg = <0x40>;
+               vin-supply = <&vcc5v0_sys>;
+               regulator-compatible = "fan53555-reg";
+               regulator-name = "vdd_cpu_b";
+               regulator-min-microvolt = <712500>;
+               regulator-max-microvolt = <1500000>;
+               regulator-ramp-delay = <1000>;
+               vsel-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+               fcs,suspend-voltage-selector = <1>;
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-initial-state = <3>;
+                       regulator-state-mem {
+                       regulator-off-in-suspend;
+               };
+       };
+
+       vdd_gpu: syr828@41 {
+               compatible = "silergy,syr828";
+               reg = <0x41>;
+               vin-supply = <&vcc5v0_sys>;
+               regulator-compatible = "fan53555-reg";
+               regulator-name = "vdd_gpu";
+               regulator-min-microvolt = <712500>;
+               regulator-max-microvolt = <1500000>;
+               regulator-ramp-delay = <1000>;
+               fcs,suspend-voltage-selector = <1>;
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-initial-state = <3>;
+                       regulator-state-mem {
+                       regulator-off-in-suspend;
+               };
+       };
+
+       rk808: pmic@1b {
+               compatible = "rockchip,rk808";
+               reg = <0x1b>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pmic_int_l &pmic_dvs2>;
+               rockchip,system-power-controller;
+               wakeup-source;
+               #clock-cells = <1>;
+               clock-output-names = "xin32k", "rk808-clkout2";
+
+               vcc1-supply = <&vcc3v3_sys>;
+               vcc2-supply = <&vcc3v3_sys>;
+               vcc3-supply = <&vcc3v3_sys>;
+               vcc4-supply = <&vcc3v3_sys>;
+               vcc6-supply = <&vcc3v3_sys>;
+               vcc7-supply = <&vcc3v3_sys>;
+               vcc8-supply = <&vcc3v3_sys>;
+               vcc9-supply = <&vcc3v3_sys>;
+               vcc10-supply = <&vcc3v3_sys>;
+               vcc11-supply = <&vcc3v3_sys>;
+               vcc12-supply = <&vcc3v3_sys>;
+               vddio-supply = <&vcc1v8_pmu>;
+
+               regulators {
+                       vdd_center: DCDC_REG1 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <750000>;
+                               regulator-max-microvolt = <1350000>;
+                               regulator-ramp-delay = <6001>;
+                               regulator-name = "vdd_center";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vdd_cpu_l: DCDC_REG2 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <750000>;
+                               regulator-max-microvolt = <1350000>;
+                               regulator-ramp-delay = <6001>;
+                               regulator-name = "vdd_cpu_l";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_ddr: DCDC_REG3 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-name = "vcc_ddr";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                               };
+                       };
+
+                       vcc_1v8: DCDC_REG4 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc_1v8";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcc1v8_dvp: LDO_REG1 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc1v8_dvp";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc2v8_dvp: LDO_REG2 {
+                               //regulator-always-on;
+                               //regulator-boot-on;
+                               regulator-min-microvolt = <2800000>;
+                               regulator-max-microvolt = <2800000>;
+                               regulator-name = "vcc2v8_dvp";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc1v8_pmu: LDO_REG3 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc1v8_pmu";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcc_sd: LDO_REG4 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-name = "vcc_sd";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3300000>;
+                               };
+                       };
+
+                       vcca3v0_codec: LDO_REG5 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "vcca3v0_codec";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_1v5: LDO_REG6 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1500000>;
+                               regulator-max-microvolt = <1500000>;
+                               regulator-name = "vcc_1v5";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1500000>;
+                               };
+                       };
+
+                       vcca1v8_codec: LDO_REG7 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcca1v8_codec";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_3v0: LDO_REG8 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-name = "vcc_3v0";
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3000000>;
+                               };
+                       };
+
+                       vcc3v3_s3: SWITCH_REG1 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-name = "vcc3v3_s3";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc3v3_s0: SWITCH_REG2 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-name = "vcc3v3_s0";
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+               };
+       };
+};
+
+&i2c1 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <300>;
+       i2c-scl-falling-time-ns = <15>;
+
+    es8323: es8323@10{
+               compatible = "everest,es8323";
+               reg = <0x10>;
+               ear-con-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+               hp-det-gpio = <&gpio0 11 GPIO_ACTIVE_HIGH>;
+               hp-mic-only = <1>;
+               #sound-dai-cells = <0>;
+               system-clock-frequency = <11289600>;
+               clocks = <&cru SCLK_I2S_8CH_OUT>;
+               clock-names = "mclk";
+               pinctrl-names = "default";
+               pinctrl-0 = <&es8323_earcon &es8323_hpdet>;
+       };
+       rt5640: rt5640@1c {
+               status = "disabled";
+               #sound-dai-cells = <0>;
+               compatible = "realtek,rt5640";
+               reg = <0x1c>;
+               clocks = <&cru SCLK_I2S_8CH_OUT>;
+               clock-names = "mclk";
+               realtek,in1-differential;
+               pinctrl-names = "default";
+               pinctrl-0 = <&rt5640_hpcon>;
+               hp-con-gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+               //hp-det-gpio = <&gpio4 28 GPIO_ACTIVE_LOW>;
+               io-channels = <&saradc 4>;
+               hp-det-adc-value = <500>;
+       };
+};
+
+&i2c3 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <450>;
+       i2c-scl-falling-time-ns = <15>;
+};
+
+&i2c4 {
+       status = "okay";
+       i2c-scl-rising-time-ns = <475>;
+       i2c-scl-falling-time-ns = <26>;
+
+       fusb0: fusb30x@22 {
+               compatible = "fairchild,fusb302";
+               reg = <0x22>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&fusb0_int>;
+               int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
+               vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+               status = "disabled";
+       };
+
+       gsl3680: gsl3680@40 {
+               status = "okay";
+               compatible = "gslX680";
+               reg = <0x40>;
+               screen_max_x = <1536>;
+               screen_max_y = <2048>;
+               touch-gpio = <&gpio4 28 IRQ_TYPE_LEVEL_LOW>;
+               reset-gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+       };
+
+       mpu6050: mpu@68 {
+               status = "disabled";
+               compatible = "invensense,mpu6050";
+               reg = <0x68>;
+               mpu-int_config = <0x10>;
+               mpu-level_shifter = <0>;
+               mpu-orientation = <0 1 0 1 0 0 0 0 1>;
+               orientation-x= <1>;
+               orientation-y= <1>;
+               orientation-z= <1>;
+               irq-gpio = <&gpio1 4 IRQ_TYPE_LEVEL_LOW>;
+               mpu-debug = <1>;
+       };
+};
+
+&i2s0 {
+       status = "okay";
+       rockchip,i2s-broken-burst-len;
+       rockchip,playback-channels = <8>;
+       rockchip,capture-channels = <8>;
+       #sound-dai-cells = <0>;
+};
+
+&i2s1 {
+       status = "okay";
+       rockchip,i2s-broken-burst-len;
+       rockchip,playback-channels = <2>;
+       rockchip,capture-channels = <2>;
+       #sound-dai-cells = <0>;
+       assigned-clocks = <&cru SCLK_I2S1_DIV>, <&cru SCLK_I2S_8CH>;
+       assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S1_8CH>;
+};
+
+&i2s2 {
+       #sound-dai-cells = <0>;
+       status = "okay";
+};
+
+&io_domains {
+       status = "okay";
+
+       bt656-supply = <&vcc_3v0>;              /* bt656_gpio2ab_ms */
+       audio-supply = <&vcca1v8_codec>;        /* audio_gpio3d4a_ms */
+       sdmmc-supply = <&vcc_sd>;               /* sdmmc_gpio4b_ms */
+       gpio1830-supply = <&vcc_3v0>;           /* gpio1833_gpio4cd_ms */
+};
+
+&pcie_phy {
+       status = "okay";
+};
+
+&pcie0 {
+       ep-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>;
+       num-lanes = <4>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pcie_clkreqn_cpm>;
+       status = "okay";
+};
+
+&pmu_io_domains {
+       status = "okay";
+       pmu1830-supply = <&vcc_3v0>;
+};
+
+&pinctrl {
+       buttons {
+               pwrbtn: pwrbtn {
+                       rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       lcd-panel {
+               lcd_panel_reset: lcd-panel-reset {
+                       rockchip,pins = <4 29 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+               lcd_en: lcd-en {
+                       rockchip,pins = <1 1 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       pcie {
+               pcie_drv: pcie-drv {
+                       rockchip,pins =
+                               <1 17 RK_FUNC_GPIO &pcfg_pull_none>;
+                       };
+                       pcie_3g_drv: pcie-3g-drv {
+                       rockchip,pins =
+                               <0 2 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       pmic {
+               vsel1_gpio: vsel1-gpio {
+                       rockchip,pins =
+                               <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+
+               vsel2_gpio: vsel2-gpio {
+                       rockchip,pins =
+                       <1 14 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+       };
+
+       sdio-pwrseq {
+               wifi_enable_h: wifi-enable-h {
+                       rockchip,pins =
+                               <0 10 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       wireless-bluetooth {
+               uart0_gpios: uart0-gpios {
+                       rockchip,pins =
+                               <2 19 RK_FUNC_GPIO &pcfg_pull_none>,
+                               <0 9 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       leds {
+               led_power: led-power {
+                       rockchip,pins = <2 27 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+
+               led_user: led-user {
+                       rockchip,pins = <0 13 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+       rt5640 {
+               rt5640_hpcon: rt5640-hpcon {
+                       rockchip,pins = <4 21 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       es8223 {
+               es8323_hpdet: es8323-hpdet {
+                       rockchip,pins = <0 11 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+               es8323_earcon: es8323-earcon {
+                       rockchip,pins = <0 12 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       pmic {
+               pmic_int_l: pmic-int-l {
+                       rockchip,pins =
+                               <1 21 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+               pmic_dvs2: pmic-dvs2 {
+                       rockchip,pins =
+                               <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+       };
+
+       usb2 {
+               host_vbus_drv: host-vbus-drv {
+                       rockchip,pins =
+                               <1 0 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       fusb30x {
+               fusb0_int: fusb0-int {
+                       rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       vbus {
+               vbus_5v_drv: vbus-5v-drv {
+                       rockchip,pins = <1 3 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+};
+
+&pwm0 {
+       status = "okay";
+};
+
+&pwm2 {
+       status = "okay";
+};
+
+&rkvdec {
+       status = "okay";
+};
+
+&rockchip_suspend {
+       rockchip,power-ctrl =
+               <&gpio1 18 GPIO_ACTIVE_LOW>,
+               <&gpio1 14 GPIO_ACTIVE_HIGH>;
+};
+
+&route_edp {
+       status = "disabled";
+};
+
+&route_hdmi {
+       status = "okay";
+       logo,mode = "center";
+};
+
+&cdn_dp {
+       status = "disabled";
+       extcon = <&fusb0>;
+       phys = <&tcphy0_dp>;
+};
+
+&dp_in_vopb {
+       status = "disabled";
+};
+
+&saradc {
+       status = "okay";
+       vref-supply = <&vccadc_ref>;
+};
+
+&sdhci {
+       bus-width = <8>;
+       keep-power-in-suspend;
+       mmc-hs400-1_8v;
+       mmc-hs400-enhanced-strobe;
+       non-removable;
+       status = "okay";
+       supports-emmc;
+};
+
+&sdmmc {
+       max-frequency = <150000000>;
+       supports-sd;
+       bus-width = <4>;
+       cap-mmc-highspeed;
+       cap-sd-highspeed;
+       disable-wp;
+       num-slots = <1>;
+       vqmmc-supply = <&vcc_sd>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
+       status = "okay";
+};
+
+&sdio0 {
+       max-frequency = <50000000>;
+       supports-sdio;
+       bus-width = <4>;
+       disable-wp;
+       cap-sd-highspeed;
+       keep-power-in-suspend;
+       mmc-pwrseq = <&sdio_pwrseq>;
+       non-removable;
+       num-slots = <1>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
+       sd-uhs-sdr104;
+       status = "okay";
+};
+
+&tcphy0 {
+       //extcon = <&fusb0>;
+       status = "okay";
+};
+
+&tcphy1 {
+       status = "okay";
+};
+
+&tsadc {
+       /* tshut mode 0:CRU 1:GPIO */
+       rockchip,hw-tshut-mode = <1>;
+       /* tshut polarity 0:LOW 1:HIGH */
+       rockchip,hw-tshut-polarity = <1>;
+       status = "okay";
+};
+
+&u2phy0 {
+       status = "okay";
+       //extcon = <&fusb0>;
+
+       u2phy0_otg: otg-port {
+               status = "okay";
+       };
+
+       u2phy0_host: host-port {
+               phy-supply = <&vcc5v0_host>;
+               status = "okay";
+       };
+};
+
+&u2phy1 {
+       status = "okay";
+
+       u2phy1_otg: otg-port {
+               status = "okay";
+       };
+
+       u2phy1_host: host-port {
+               phy-supply = <&vcc5v0_host>;
+               status = "okay";
+       };
+};
+
+&pwm3 {
+       status = "okay";
+       interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH 0>;
+       compatible = "rockchip,remotectl-pwm";
+       remote_pwm_id = <3>;
+       handle_cpu_id = <0>;
+
+    ir_key1{
+        rockchip,usercode = <0xff00>;
+        rockchip,key_table =
+            <0xeb   KEY_POWER>,
+            <0xec   KEY_COMPOSE>,
+            <0xfe   KEY_BACK>,
+            <0xb7   KEY_HOME>,
+            <0xa3   KEY_WWW>,
+            <0xf4   KEY_VOLUMEUP>,
+            <0xa7   KEY_VOLUMEDOWN>,
+            <0xf8   KEY_ENTER>,
+            <0xfc   KEY_UP>,
+            <0xfd   KEY_DOWN>,
+            <0xf1   KEY_LEFT>,
+            <0xe5   KEY_RIGHT>;
+    };
+};
+
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart0_xfer &uart0_cts>;
+       status = "okay";
+};
+
+&uart2 {
+       status = "okay";
+};
+
+&usbdrd3_0 {
+       status = "okay";
+       //extcon = <&fusb0>;
+};
+
+&usbdrd3_1 {
+       status = "okay";
+};
+
+&usbdrd_dwc3_0 {
+       status = "okay";
+       //dr_mode = "peripheral";
+       dr_mode = "host";
+};
+
+&usbdrd_dwc3_1 {
+       status = "okay";
+       dr_mode = "host";
+};
+
+&usb_host0_ehci {
+       status = "okay";
+};
+
+&usb_host0_ohci {
+       status = "okay";
+};
+
+&usb_host1_ehci {
+       status = "okay";
+};
+
+&usb_host1_ohci {
+       status = "okay";
+};
+
+&vopb {
+       status = "okay";
+};
+
+&vopb_mmu {
+       status = "okay";
+};
+
+&vopl {
+       status = "okay";
+};
+
+&vopl_mmu {
+       status = "okay";
+};
+
+&vpu {
+       status = "okay";
+};
index 44d517d4ddc3a5ddca67c666a9c656b90c33176b..025e43fce19ad7099229795843d7bd40d128d5df 100644 (file)
                                "Headphone Jack","HPOL",
                                "Headphone Jack","HPOR";
                simple-audio-card,cpu {
-                               sound-dai = <&i2c1>;
+                               sound-dai = <&i2s1>;
                };
                simple-audio-card,codec {
                                sound-dai = <&es8323>;
                regulator-always-on;
        };
 
+       vbus_5v: vbus-5v-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&vbus_5v_drv>;
+               regulator-name = "vbus_5v";
+       };
+
        vcc5v0_sys: vcc5v0-sys {
                compatible = "regulator-fixed";
                regulator-name = "vcc5v0_sys";
        };
 
     leds {
-          status = "disabled"; 
        compatible = "gpio-leds";
        power {
            label = "firefly:blue:power";
                pinctrl-0 = <&fusb0_int>;
                int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
                vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
-               status = "okay";
+               status = "disabled";
        };
 
     gsl3680: gsl3680@41 {
        rockchip,playback-channels = <2>;
        rockchip,capture-channels = <2>;
        #sound-dai-cells = <0>;
+       assigned-clocks = <&cru SCLK_I2S1_DIV>, <&cru SCLK_I2S_8CH>;
+       assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S1_8CH>;
 };
 
 &i2s2 {
                        rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>;
                };
        };
+
+       vbus {
+               vbus_5v_drv: vbus-5v-drv {
+                       rockchip,pins = <1 3 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
 };
 
 &pwm0 {
 };
 
 &tcphy0 {  
-       extcon = <&fusb0>;
+       //extcon = <&fusb0>;
        status = "okay";
 };
 
 
 &u2phy0 {   
        status = "okay";
-       extcon = <&fusb0>;
+       //extcon = <&fusb0>;
 
        u2phy0_otg: otg-port {
                status = "okay";
        status = "okay";
 };
 
+&uart4 {
+       current-speed = <9600>;
+       no-loopback-test;
+       status = "okay";
+};
+
 &usbdrd3_0 {   
        status = "okay";
-       extcon = <&fusb0>;
+       //extcon = <&fusb0>;
 };
 
 &usbdrd3_1 {   
 
 &usbdrd_dwc3_0 {
        status = "okay";
+       //dr_mode = "peripheral";
+       dr_mode = "host";
 };
 
 &usbdrd_dwc3_1 {   
index 8543e31eccf0b574bad2625b39af81c6bd78b99c..37441ad28d5338ee762b478b32ece5749e4990d0 100644 (file)
                reset-names = "apb";
                power-domains = <&power RK3399_PD_VIO>;
                rockchip,grf = <&grf>;
+
                #address-cells = <1>;
                #size-cells = <0>;
                status = "disabled";
 
                ports {
+
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <1>;
+
                        port {
                                #address-cells = <1>;
                                #size-cells = <0>;
index 2662a70c4be449b721c459a5fd4683a85f73c545..f67a6835a82d7757f367c046ad530196d97b3ad7 100644 (file)
@@ -1,5 +1,6 @@
 CONFIG_DEFAULT_HOSTNAME="localhost"
 CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
 CONFIG_FHANDLE=y
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
@@ -64,7 +65,7 @@ CONFIG_COMPAT=y
 CONFIG_PM_DEBUG=y
 CONFIG_PM_ADVANCED_DEBUG=y
 CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
-CONFIG_ARM_CPUIDLE=y
+CONFIG_CPU_IDLE=y
 CONFIG_CPU_FREQ=y
 CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
 CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
@@ -176,7 +177,8 @@ CONFIG_BLK_DEV_RAM_COUNT=1
 CONFIG_BLK_DEV_NVME=y
 CONFIG_ROCKCHIP_SCR=y
 CONFIG_SRAM=y
-CONFIG_SCSI=y
+CONFIG_ATA=y
+CONFIG_SATA_AHCI=y
 CONFIG_BLK_DEV_SD=y
 CONFIG_BLK_DEV_SR=y
 CONFIG_SCSI_SPI_ATTRS=y
@@ -237,6 +239,9 @@ CONFIG_TOUCHSCREEN_ATMEL_MXT=y
 CONFIG_TOUCHSCREEN_GSLX680_VR=y
 CONFIG_TOUCHSCREEN_GSL3673=y
 CONFIG_TOUCHSCREEN_GT9XX=y
+CONFIG_ROCKCHIP_REMOTECTL=y
+CONFIG_ROCKCHIP_REMOTECTL_PWM=y
+CONFIG_RK_IR_NO_DEEP_SLEEP=y
 CONFIG_TOUCHSCREEN_ELAN=y
 CONFIG_TOUCHSCREEN_USB_COMPOSITE=y
 CONFIG_INPUT_MISC=y
@@ -254,13 +259,14 @@ CONFIG_HW_RANDOM=y
 CONFIG_TCG_TPM=y
 CONFIG_TCG_TIS_I2C_INFINEON=y
 CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_MUX=y
 CONFIG_I2C_RK3X=y
 CONFIG_I2C_CROS_EC_TUNNEL=y
-CONFIG_I2C_STUB=m
 CONFIG_SPI=y
 CONFIG_SPI_BITBANG=y
 CONFIG_SPI_ROCKCHIP=y
 CONFIG_SPI_SPIDEV=y
+CONFIG_SPI_WK2XXX=y
 CONFIG_DEBUG_GPIO=y
 CONFIG_GPIO_SYSFS=y
 CONFIG_GPIO_GENERIC_PLATFORM=y
@@ -272,7 +278,7 @@ CONFIG_POWER_RESET_GPIO_RESTART=y
 CONFIG_SYSCON_REBOOT_MODE=y
 CONFIG_POWER_AVS=y
 CONFIG_ROCKCHIP_IODOMAIN=y
-CONFIG_ROCKCHIP_CPU_AVS=y
+CONFIG_THERMAL=y
 CONFIG_THERMAL_WRITABLE_TRIPS=y
 CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR=y
 CONFIG_THERMAL_GOV_FAIR_SHARE=y
@@ -280,6 +286,8 @@ CONFIG_THERMAL_GOV_STEP_WISE=y
 CONFIG_CPU_THERMAL=y
 CONFIG_DEVFREQ_THERMAL=y
 CONFIG_ROCKCHIP_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_DW_WATCHDOG=y
 CONFIG_MFD_CROS_EC=y
 CONFIG_MFD_CROS_EC_SPI=y
 CONFIG_MFD_RK808=y
@@ -309,19 +317,23 @@ CONFIG_USB_VIDEO_CLASS=y
 # CONFIG_USB_GSPCA is not set
 CONFIG_V4L_PLATFORM_DRIVERS=y
 CONFIG_V4L_MEM2MEM_DRIVERS=y
-CONFIG_V4L_TEST_DRIVERS=y
+CONFIG_VIDEO_ROCKCHIP_RGA=y
+# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
+# CONFIG_VIDEO_IR_I2C is not set
+# CONFIG_DVB_AU8522_V4L is not set
+# CONFIG_DVB_TUNER_DIB0070 is not set
+# CONFIG_DVB_TUNER_DIB0090 is not set
+# CONFIG_VGA_ARB is not set
 CONFIG_DRM=y
 CONFIG_DRM_LOAD_EDID_FIRMWARE=y
 CONFIG_DRM_DMA_SYNC=y
 CONFIG_DRM_ROCKCHIP=y
-CONFIG_ROCKCHIP_DRM_RGA=y
-CONFIG_ROCKCHIP_CDN_DP=y
 CONFIG_ROCKCHIP_DW_HDMI=y
 CONFIG_ROCKCHIP_DW_MIPI_DSI=y
 CONFIG_ROCKCHIP_ANALOGIX_DP=y
 CONFIG_ROCKCHIP_INNO_HDMI=y
 CONFIG_ROCKCHIP_LVDS=y
-CONFIG_DRM_UDL=y
+CONFIG_ROCKCHIP_DRM_TVE=y
 CONFIG_DRM_PANEL_SIMPLE=y
 CONFIG_DRM_DW_HDMI_I2S_AUDIO=y
 CONFIG_MALI_DEVFREQ=y
@@ -335,6 +347,8 @@ CONFIG_BACKLIGHT_LCD_SUPPORT=y
 CONFIG_BACKLIGHT_CLASS_DEVICE=y
 CONFIG_BACKLIGHT_PWM=y
 CONFIG_RK_VCODEC=y
+CONFIG_ROCKCHIP_MPP_SERVICE=y
+CONFIG_ROCKCHIP_MPP_DEVICE=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
 CONFIG_SOUND=y
 CONFIG_SND=y
@@ -350,6 +364,7 @@ CONFIG_SND_SOC_ROCKCHIP_SPDIF=y
 CONFIG_SND_SOC_ROCKCHIP_MAX98090=y
 CONFIG_SND_SOC_ROCKCHIP_RT5645=y
 CONFIG_SND_SOC_ES8316=y
+CONFIG_SND_SOC_ES8323=y
 CONFIG_SND_SOC_RT5616=y
 CONFIG_SND_SOC_RT5640=y
 CONFIG_SND_SOC_RT5651=y
@@ -383,6 +398,7 @@ CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
 CONFIG_USB_EHCI_HCD_PLATFORM=y
 CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_HCD_PCI is not set
 CONFIG_USB_OHCI_HCD_PLATFORM=y
 CONFIG_USB_ACM=y
 CONFIG_USB_STORAGE=y
@@ -427,7 +443,6 @@ CONFIG_PL330_DMA=y
 CONFIG_STAGING=y
 CONFIG_SENSORS_ISL29018=y
 CONFIG_TSL2583=y
-CONFIG_ASHMEM=y
 # CONFIG_ANDROID_TIMED_OUTPUT is not set
 CONFIG_FIQ_DEBUGGER=y
 CONFIG_FIQ_DEBUGGER_NO_SLEEP=y
@@ -458,27 +473,32 @@ CONFIG_PHY_ROCKCHIP_INNO_USB2=y
 CONFIG_PHY_ROCKCHIP_INNO_USB3=y
 CONFIG_PHY_ROCKCHIP_EMMC=y
 CONFIG_PHY_ROCKCHIP_DP=y
+CONFIG_PHY_ROCKCHIP_INNO_HDMI_PHY=y
 CONFIG_PHY_ROCKCHIP_TYPEC=y
 CONFIG_PHY_ROCKCHIP_PCIE=y
 CONFIG_ANDROID=y
 CONFIG_NVMEM=y
 CONFIG_ROCKCHIP_EFUSE=y
+# CONFIG_ACPI is not set
 CONFIG_EXT4_FS=y
 CONFIG_EXT4_FS_POSIX_ACL=y
 CONFIG_EXT4_FS_SECURITY=y
+CONFIG_XFS_FS=y
 # CONFIG_DNOTIFY is not set
 CONFIG_FUSE_FS=y
+CONFIG_OVERLAY_FS=y
 CONFIG_ISO9660_FS=y
 CONFIG_JOLIET=y
 CONFIG_ZISOFS=y
 CONFIG_UDF_FS=y
 CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=936
+CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
 CONFIG_TMPFS=y
 CONFIG_TMPFS_POSIX_ACL=y
 CONFIG_ECRYPT_FS=y
 CONFIG_HFSPLUS_FS=y
 CONFIG_SQUASHFS=y
-CONFIG_SQUASHFS_FILE_DIRECT=y
 CONFIG_SQUASHFS_LZO=y
 CONFIG_PSTORE=y
 CONFIG_PSTORE_CONSOLE=y
@@ -492,9 +512,11 @@ CONFIG_NFSD_V3_ACL=y
 CONFIG_NFSD_V4=y
 CONFIG_NLS_DEFAULT="utf8"
 CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_936=y
 CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_PRINTK_TIME=y
+CONFIG_DYNAMIC_DEBUG=y
 CONFIG_DEBUG_INFO=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0
index 2372fbdc9ebe5c1573e93b8a571c204b356236bb..ad79c6c9d5df93097739fe8c80ee0ca35cea61e2 100644 (file)
Binary files a/drivers/char/virtd and b/drivers/char/virtd differ
index f4344548d7383c79968770c83d0ef9dbf5e02a09..f5822f0d02e471af096c66b87d43da391d964199 100644 (file)
@@ -712,7 +712,7 @@ static struct rockchip_clk_branch rk3399_clk_branches[] __initdata = {
        GATE(SCLK_I2S2_8CH, "clk_i2s2", "clk_i2s2_mux", CLK_SET_RATE_PARENT,
                        RK3399_CLKGATE_CON(8), 11, GFLAGS),
 
-       MUX(0, "clk_i2sout_src", mux_i2sch_p, CLK_SET_RATE_PARENT,
+       MUX(SCLK_I2S_8CH, "clk_i2sout_src", mux_i2sch_p, CLK_SET_RATE_PARENT,
                        RK3399_CLKSEL_CON(31), 0, 2, MFLAGS),
        COMPOSITE_NODIV(SCLK_I2S_8CH_OUT, "clk_i2sout", mux_i2sout_p, CLK_SET_RATE_PARENT,
                        RK3399_CLKSEL_CON(30), 8, 2, MFLAGS,
index 211f331b7a7d0a6e2f8aa97105eaf8d62c0a379e..6b113f66dcaf63c4243a3959ba2e11fa3b4d90ce 100644 (file)
@@ -436,11 +436,7 @@ static int panel_simple_prepare(struct drm_panel *panel)
        if (p->desc && p->desc->delay.init)
                msleep(p->desc->delay.init);
 
-       if (p->on_cmds) {
-               err = panel_simple_dsi_send_cmds(p, p->on_cmds);
-               if (err)
-                       dev_err(p->dev, "failed to send on cmds\n");
-       }
+
 
        p->prepared = true;
 
@@ -450,6 +446,7 @@ static int panel_simple_prepare(struct drm_panel *panel)
 static int panel_simple_enable(struct drm_panel *panel)
 {
        struct panel_simple *p = to_panel_simple(panel);
+       int err;
 
        if (p->enabled)
                return 0;
@@ -457,6 +454,12 @@ static int panel_simple_enable(struct drm_panel *panel)
        if (p->desc && p->desc->delay.enable)
                msleep(p->desc->delay.enable);
 
+       if (p->on_cmds) {
+               err = panel_simple_dsi_send_cmds(p, p->on_cmds);
+               if (err)
+                       dev_err(p->dev, "failed to send on cmds\n");
+       }
+
        if (p->backlight) {
                p->backlight->props.power = FB_BLANK_UNBLANK;
                backlight_update_status(p->backlight);
index 0951a88c932515d89960367142d503169d9aa27e..0e948d6110419990b78146c40f112ce90954514d 100644 (file)
@@ -1095,10 +1095,6 @@ static void rockchip_dsi_grf_config(struct dw_mipi_dsi *dsi, int vop_id)
 
                regmap_write(dsi->grf_regmap, pdata->grf_switch_reg, val);
 
-               if (pdata->grf_dsi0_mode_reg)
-                       regmap_write(dsi->grf_regmap, pdata->grf_dsi0_mode_reg,
-                                    pdata->grf_dsi0_mode);
-
        }
 
        dev_info(dsi->dev, "vop %s output to dsi0\n", (vop_id) ? "LIT" : "BIG");
@@ -1139,6 +1135,8 @@ static void rockchip_dsi_pre_init(struct dw_mipi_dsi *dsi)
 
 static void rockchip_dsi_host_init(struct dw_mipi_dsi *dsi)
 {
+       const struct dw_mipi_dsi_plat_data *pdata = dsi->pdata;
+
        dw_mipi_dsi_init(dsi);
        dw_mipi_dsi_dpi_config(dsi, &dsi->mode);
        dw_mipi_dsi_packet_handler_config(dsi);
@@ -1151,6 +1149,12 @@ static void rockchip_dsi_host_init(struct dw_mipi_dsi *dsi)
        dw_mipi_dsi_dphy_timing_config(dsi);
        dw_mipi_dsi_dphy_interface_config(dsi);
        dw_mipi_dsi_clear_err(dsi);
+
+               if (pdata->grf_dsi0_mode_reg)
+                       regmap_write(dsi->grf_regmap, pdata->grf_dsi0_mode_reg,
+                                    pdata->grf_dsi0_mode);
+
+
 }
 
 static void rockchip_dsi_init(struct dw_mipi_dsi *dsi)
@@ -1180,7 +1184,6 @@ static void dw_mipi_dsi_encoder_enable(struct drm_encoder *encoder)
 
        vop_id = drm_of_encoder_active_endpoint_id(dsi->dev->of_node, encoder);
 
-       rockchip_dsi_grf_config(dsi, vop_id);
        rockchip_dsi_init(dsi);
 
        if (dsi->panel)
@@ -1190,6 +1193,8 @@ static void dw_mipi_dsi_encoder_enable(struct drm_encoder *encoder)
 
        if (dsi->panel)
                drm_panel_enable(dsi->panel);
+
+       rockchip_dsi_grf_config(dsi, vop_id);
 }
 
 static int
index 7879c6e538fcc4d9da792a593ed4b827348a48fd..1d79db6f99a0ecc1233f5a473331130810dcc1b4 100644 (file)
@@ -15,4 +15,9 @@ config ROCKCHIP_REMOTECTL_PWM
        bool "rockchip remoctrl pwm capture"
        default n
 
+config RK_IR_NO_DEEP_SLEEP
+    bool "rk_pwm-remoctrl no Deep Sleep"
+    depends on ROCKCHIP_REMOTECTL
+    default n
+
 endif
index bcd1d4bc5a921d6b24f0602b02c5fd22da3b96fc..2b58628880860a3b8f8600d87cc4a9167a1c14b0 100644 (file)
 #include <linux/slab.h>
 #include "rockchip_pwm_remotectl.h"
 #include <linux/leds.h>
+#include <linux/fb.h>
 
 /*sys/module/rk_pwm_remotectl/parameters,
 modify code_print to change the value*/
 
 static int rk_remote_print_code;
+static bool remote_suspend = false;
 module_param_named(code_print, rk_remote_print_code, int, 0644);
 #define DBG_CODE(args...) \
        do { \
@@ -39,6 +41,11 @@ module_param_named(dbg_level, rk_remote_pwm_dbg_level, int, 0644);
 DEFINE_LED_TRIGGER(ledtrig_ir_click);
 static unsigned long ir_blink_delay = BLINK_DELAY;
 
+bool get_state_remotectl(void)
+{
+        return remote_suspend;
+}
+
 void ledtrig_ir_activity(void)
 {
     led_trigger_blink_oneshot(ledtrig_ir_click, &ir_blink_delay, &ir_blink_delay,1);
@@ -226,11 +233,12 @@ static void rk_pwm_remotectl_do_something(unsigned long  data)
        }
        break;
        case RMC_GETDATA: {
+                if(!get_state_remotectl() && (ddata->keycode != KEY_POWER))
+                {
+                        ledtrig_ir_activity();
+                }
                if(ddata->keycode != KEY_POWER)
-               {
-                       ledtrig_ir_activity();
-                       led_trigger_blink_oneshot(ledtrig_ir_click, &ir_blink_delay, &ir_blink_delay,1);
-               }
+               led_trigger_blink_oneshot(ledtrig_ir_click, &ir_blink_delay, &ir_blink_delay,1);
 
                if ((RK_PWM_TIME_BIT1_MIN < ddata->period) &&
                    (ddata->period < RK_PWM_TIME_BIT1_MAX))
@@ -243,8 +251,8 @@ static void rk_pwm_remotectl_do_something(unsigned long  data)
                    ((~ddata->scandata >> 8) & 0x0ff)) {
                        if (remotectl_keycode_lookup(ddata)) {
                                ddata->press = 1;
-                               if(ddata->keycode == KEY_POWER){
-                    led_trigger_event(ledtrig_ir_click,LED_OFF);
+                               if(ddata->keycode== KEY_POWER && !get_state_remotectl()){
+                                       led_trigger_event(ledtrig_ir_click,LED_OFF);
                 }
                                input_event(ddata->input, EV_KEY,
                                            ddata->keycode, 1);
@@ -337,8 +345,10 @@ static irqreturn_t rockchip_pwm_irq(int irq, void *dev_id)
                }
        }
        writel_relaxed(PWM_CH_INT(id), ddata->base + PWM_REG_INTSTS(id));
+#if ! defined(CONFIG_RK_IR_NO_DEEP_SLEEP)
        if (ddata->state == RMC_PRELOAD)
                wake_lock_timeout(&ddata->remotectl_wake_lock, HZ);
+#endif
        return IRQ_HANDLED;
 }
 
@@ -391,6 +401,35 @@ static int rk_pwm_remotectl_hw_init(struct rkxx_remotectl_drvdata *ddata)
        return 0;
 }
 
+static int remotectl_fb_event_notify(struct notifier_block *self, unsigned long action, void *data)
+{
+       struct fb_event *event = data;
+
+       if (action == FB_EARLY_EVENT_BLANK) {
+               switch (*((int *)event->data)) {
+                       case FB_BLANK_UNBLANK:
+                               break;
+                       default:
+                               led_trigger_event(ledtrig_ir_click,LED_OFF);
+                               remote_suspend = true;
+                               break;
+               }
+       }
+       else if (action == FB_EVENT_BLANK) {
+               switch (*((int *)event->data)) {
+                       case FB_BLANK_UNBLANK:
+                               remote_suspend = false;
+                               led_trigger_event(ledtrig_ir_click,LED_FULL);
+                               break;
+                       default:
+                               break;
+               }
+       }
+       return NOTIFY_OK;
+}
+static struct notifier_block remotectl_fb_notifier = {
+         .notifier_call = remotectl_fb_event_notify,
+};
 
 static int rk_pwm_probe(struct platform_device *pdev)
 {
@@ -452,8 +491,12 @@ static int rk_pwm_probe(struct platform_device *pdev)
        input->id.version = 0x0100;
        ddata->input = input;
        ddata->input = input;
+    fb_register_client(&remotectl_fb_notifier);
        wake_lock_init(&ddata->remotectl_wake_lock,
                       WAKE_LOCK_SUSPEND, "rk29_pwm_remote");
+#if defined(CONFIG_RK_IR_NO_DEEP_SLEEP)
+    wake_lock(&ddata->remotectl_wake_lock);
+#endif
        ret = clk_prepare_enable(clk);
        if (ret)
                return ret;
@@ -510,7 +553,13 @@ static int rk_pwm_probe(struct platform_device *pdev)
 
 static int rk_pwm_remove(struct platform_device *pdev)
 {
+#if defined(CONFIG_RK_IR_NO_DEEP_SLEEP)
+    struct rkxx_remotectl_drvdata *ddata = platform_get_drvdata(pdev);
+#endif
        led_trigger_unregister_simple(ledtrig_ir_click);
+#if defined(CONFIG_RK_IR_NO_DEEP_SLEEP)
+    wake_unlock(&ddata->remotectl_wake_lock);
+#endif
        return 0;
 }
 
@@ -535,6 +584,7 @@ static int remotectl_resume(struct device *dev)
        struct platform_device *pdev = to_platform_device(dev);
        struct rkxx_remotectl_drvdata *ddata = platform_get_drvdata(pdev);
 
+       led_trigger_event(ledtrig_ir_click,LED_FULL);
        cpumask_clear(&cpumask);
        cpumask_set_cpu(ddata->handle_cpu_id, &cpumask);
        irq_set_affinity(ddata->irq, &cpumask);
index 9be5eb8d4f6ce4b76c50380cc6f5170c04758396..b719429922396f483e569ef911dbfcd192024f51 100644 (file)
@@ -40,7 +40,7 @@ obj-$(CONFIG_TOUCHSCREEN_FT6236)      += ft6236.o
 obj-$(CONFIG_TOUCHSCREEN_FUJITSU)      += fujitsu_ts.o
 obj-$(CONFIG_TOUCHSCREEN_GOODIX)       += goodix.o
 obj-$(CONFIG_TOUCHSCREEN_GSLX680_PAD)  += gslx680_pad.o gsl_point_id.o
-obj-$(CONFIG_TOUCHSCREEN_GSLX680_VR)   += gslx680_vr.o gsl_point_id.o
+obj-$(CONFIG_TOUCHSCREEN_GSLX680_VR)   += gslx680.o gsl_point_id.o
 obj-$(CONFIG_TOUCHSCREEN_GSL3673)      += gsl3673.o gsl_point_id.o
 obj-$(CONFIG_TOUCHSCREEN_GT9XX)                += gt9xx/
 obj-$(CONFIG_TOUCHSCREEN_ILI210X)      += ili210x.o
diff --git a/drivers/input/touchscreen/gslx680.c b/drivers/input/touchscreen/gslx680.c
new file mode 100644 (file)
index 0000000..00f4c21
--- /dev/null
@@ -0,0 +1,1475 @@
+/*
+ * drivers/input/touchscreen/gslX680.c
+ *
+ * Copyright (c) 2012 Shanghai Basewin
+ *     Guan Yuwei<guanyuwei@basewin.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ */
+
+
+#include <linux/module.h>
+#include <linux/delay.h>
+//#include <linux/earlysuspend.h>
+#include <linux/device.h>
+#include <linux/hrtimer.h>
+#include <linux/i2c.h>
+#include <linux/input.h>
+#include <linux/interrupt.h>
+#include <linux/io.h>
+#include <linux/platform_device.h>
+#include <linux/async.h>
+//#include <mach/gpio.h>
+#include <linux/irq.h>
+//#include <mach/board.h>
+#include <linux/workqueue.h>
+#include <linux/proc_fs.h>
+#include <linux/input/mt.h>
+
+//#include <linux/gpio.h>
+#include <linux/version.h>
+#include <linux/slab.h>
+#include <linux/of_gpio.h>
+#include "tp_suspend.h"
+
+#include "gslx680.h"
+#include <linux/wakelock.h>
+//#define GSL_DEBUG
+//#define GSL_MONITOR
+#define REPORT_DATA_ANDROID_4_0
+//#define HAVE_TOUCH_KEY
+#define SLEEP_CLEAR_POINT
+//#define FILTER_POINT
+#ifdef FILTER_POINT
+#define FILTER_MAX     9
+#endif
+
+#define GSLX680_I2C_NAME       "gslX680"
+#define GSLX680_I2C_ADDR       0x40
+
+int g_wake_pin=0;
+int g_irq_pin=0;
+
+#define GSL_DATA_REG           0x80
+#define GSL_STATUS_REG         0xe0
+#define GSL_PAGE_REG           0xf0
+
+
+
+#define TPD_PROC_DEBUG
+#ifdef TPD_PROC_DEBUG
+#include <linux/proc_fs.h>
+#include <asm/uaccess.h>
+#include <linux/seq_file.h>  //lzk
+//static struct proc_dir_entry *gsl_config_proc = NULL;
+#define GSL_CONFIG_PROC_FILE "gsl_config"
+#define CONFIG_LEN 31
+static char gsl_read[CONFIG_LEN];
+static u8 gsl_data_proc[8] = {0};
+static u8 gsl_proc_flag = 0;
+
+#endif
+
+#define PRESS_MAX                      255
+#define MAX_FINGERS            10
+#define MAX_CONTACTS           10
+#define DMA_TRANS_LEN          0x20
+#ifdef GSL_MONITOR
+static struct delayed_work gsl_monitor_work;
+static struct workqueue_struct *gsl_monitor_workqueue = NULL;
+static char int_1st[4] = {0};
+static char int_2nd[4] = {0};
+static char dac_counter = 0;
+static char b0_counter = 0;
+static char i2c_lock_flag = 0;
+#endif 
+
+static struct i2c_client *gsl_client = NULL;
+
+#ifdef HAVE_TOUCH_KEY
+static u16 key = 0;
+static int key_state_flag = 0;
+struct key_data {
+       u16 key;
+       u16 x_min;
+       u16 x_max;
+       u16 y_min;
+       u16 y_max;      
+};
+
+const u16 key_array[]={
+                                      KEY_BACK,
+                                      KEY_HOME,
+                                      KEY_MENU,
+                                      KEY_SEARCH,
+                                     }; 
+#define MAX_KEY_NUM     (sizeof(key_array)/sizeof(key_array[0]))
+
+struct key_data gsl_key_data[MAX_KEY_NUM] = {
+       {KEY_BACK, 2048, 2048, 2048, 2048},
+       {KEY_HOME, 2048, 2048, 2048, 2048},     
+       {KEY_MENU, 2048, 2048, 2048, 2048},
+       {KEY_SEARCH, 2048, 2048, 2048, 2048},
+};
+#endif
+
+struct gsl_ts_data {
+       u8 x_index;
+       u8 y_index;
+       u8 z_index;
+       u8 id_index;
+       u8 touch_index;
+       u8 data_reg;
+       u8 status_reg;
+       u8 data_size;
+       u8 touch_bytes;
+       u8 update_data;
+       u8 touch_meta_data;
+       u8 finger_size;
+};
+
+static struct gsl_ts_data devices[] = {
+       {
+               .x_index = 6,
+               .y_index = 4,
+               .z_index = 5,
+               .id_index = 7,
+               .data_reg = GSL_DATA_REG,
+               .status_reg = GSL_STATUS_REG,
+               .update_data = 0x4,
+               .touch_bytes = 4,
+               .touch_meta_data = 4,
+               .finger_size = 70,
+       },
+};
+
+struct gsl_ts {
+       struct i2c_client *client;
+       struct input_dev *input;
+       struct work_struct work;
+       struct workqueue_struct *wq;
+       struct gsl_ts_data *dd;
+       u8 *touch_data;
+       u8 device_id;
+       int irq;
+       int irq_pin;
+       int wake_pin;
+       struct  tp_device  tp;
+#if defined(CONFIG_HAS_EARLYSUSPEND)
+       struct early_suspend early_suspend;
+#endif
+  int screen_max_x;
+  int screen_max_y;
+  int revert_xy;
+  int revert_x;
+  int revert_y;
+};
+
+#ifdef GSL_DEBUG 
+#define print_info(fmt, args...)   \
+        do{                              \
+                printk(fmt, ##args);     \
+        }while(0)
+#else
+#define print_info(fmt, args...)
+#endif
+
+
+static u32 id_sign[MAX_CONTACTS+1] = {0};
+static u8 id_state_flag[MAX_CONTACTS+1] = {0};
+static u8 id_state_old_flag[MAX_CONTACTS+1] = {0};
+static u16 x_old[MAX_CONTACTS+1] = {0};
+static u16 y_old[MAX_CONTACTS+1] = {0};
+static u16 x_new = 0;
+static u16 y_new = 0;
+
+
+
+static int gslX680_init(void)
+{
+
+       gpio_direction_output(g_wake_pin, 0);
+       gpio_set_value(g_wake_pin,1);
+
+
+       /*gpio_direction_output(WAKE_PORT, 0);
+       gpio_set_value(WAKE_PORT,GPIO_HIGH);*/
+       msleep(20);
+
+       gpio_set_value(g_irq_pin,1);
+//     gpio_pull_updown(IRQ_PORT, 1);
+
+       msleep(20);
+       return 0;
+}
+
+static int gslX680_shutdown_low(void)
+{
+if(g_wake_pin !=0)
+       {
+       gpio_direction_output(g_wake_pin, 0);
+       gpio_set_value(g_wake_pin,0);
+}
+       return 0;
+}
+
+static int gslX680_shutdown_high(void)
+{
+if(g_wake_pin !=0)
+       {
+       gpio_direction_output(g_wake_pin, 0);
+       gpio_set_value(g_wake_pin,1);
+}      
+       return 0;
+}
+
+static inline u16 join_bytes(u8 a, u8 b)
+{
+       u16 ab = 0;
+       ab = ab | a;
+       ab = ab << 8 | b;
+       return ab;
+}
+/*
+static u32 gsl_read_interface(struct i2c_client *client, u8 reg, u8 *buf, u32 num)
+{
+       struct i2c_msg xfer_msg[2];
+
+       xfer_msg[0].addr = client->addr;
+       xfer_msg[0].len = 1;
+       xfer_msg[0].flags = client->flags & I2C_M_TEN;
+       xfer_msg[0].buf = &reg;
+       xfer_msg[0].scl_rate = 400*1000; //RK3066 RK2926 I2C±¨´íʱ´ò¿ªÕâ¸ö
+
+       xfer_msg[1].addr = client->addr;
+       xfer_msg[1].len = num;
+       xfer_msg[1].flags |= I2C_M_RD;
+       xfer_msg[1].buf = buf;
+       xfer_msg[1].scl_rate = 400*1000; //RK3066 RK2926 I2C±¨´íʱ´ò¿ªÕâ¸ö
+
+       if (reg < 0x80) {
+               i2c_transfer(client->adapter, xfer_msg, ARRAY_SIZE(xfer_msg));
+               msleep(5);
+       }
+
+       return i2c_transfer(client->adapter, xfer_msg, ARRAY_SIZE(xfer_msg)) == ARRAY_SIZE(xfer_msg) ? 0 : -EFAULT;
+}
+*/
+#if 1
+static u32 gsl_write_interface(struct i2c_client *client, const u8 reg, u8 *buf, u32 num)
+{
+       struct i2c_msg xfer_msg[1];
+
+       buf[0] = reg;
+
+       xfer_msg[0].addr = client->addr;
+       xfer_msg[0].len = num + 1;
+       xfer_msg[0].flags = client->flags & I2C_M_TEN;
+       xfer_msg[0].buf = buf;
+       //xfer_msg[0].scl_rate = 400*1000; //RK3066 RK2926 I2C±¨´íʱ´ò¿ªÕâ¸ö
+
+       return i2c_transfer(client->adapter, xfer_msg, 1) == 1 ? 0 : -EFAULT;
+}
+#endif
+static int gsl_ts_write(struct i2c_client *client, u8 addr, u8 *pdata, int datalen)
+{
+       int ret = 0;
+       u8 tmp_buf[128];
+       unsigned int bytelen = 0;
+       if (datalen > 125)
+       {
+               printk("%s too big datalen = %d!\n", __func__, datalen);
+               return -1;
+       }
+       
+       tmp_buf[0] = addr;
+       bytelen++;
+       
+       if (datalen != 0 && pdata != NULL)
+       {
+               memcpy(&tmp_buf[bytelen], pdata, datalen);
+               bytelen += datalen;
+       }
+       
+       ret = i2c_master_send(client, tmp_buf, bytelen);
+       return ret;
+}
+
+static int gsl_ts_read(struct i2c_client *client, u8 addr, u8 *pdata, unsigned int datalen)
+{
+       int ret = 0;
+
+       if (datalen > 126)
+       {
+               printk("%s too big datalen = %d!\n", __func__, datalen);
+               return -1;
+       }
+
+       ret = gsl_ts_write(client, addr, NULL, 0);
+       if (ret < 0)
+       {
+               printk("%s set data address fail!\n", __func__);
+               return ret;
+       }
+       
+       return i2c_master_recv(client, pdata, datalen);
+}
+
+static __inline__ void fw2buf(u8 *buf, const u32 *fw)
+{
+       u32 *u32_buf = (int *)buf;
+       *u32_buf = *fw;
+}
+
+static void gsl_load_fw(struct i2c_client *client)
+{
+       u8 buf[DMA_TRANS_LEN*4 + 1] = {0};
+       u8 send_flag = 1;
+       u8 *cur = buf + 1;
+       u32 source_line = 0;
+       u32 source_len;
+       struct fw_data *ptr_fw;
+       
+       printk("=============gsl_load_fw start==============\n");
+
+       ptr_fw = GSLX680_FW;
+       source_len = ARRAY_SIZE(GSLX680_FW);
+
+       for (source_line = 0; source_line < source_len; source_line++) 
+       {
+               /* init page trans, set the page val */
+               if (GSL_PAGE_REG == ptr_fw[source_line].offset)
+               {
+                       fw2buf(cur, &ptr_fw[source_line].val);
+                       gsl_write_interface(client, GSL_PAGE_REG, buf, 4);
+                       //i2c_smbus_write_i2c_block_data(client, GSL_PAGE_REG,4, buf);
+                       send_flag = 1;
+               }
+               else 
+               {
+                       if (1 == send_flag % (DMA_TRANS_LEN < 0x20 ? DMA_TRANS_LEN : 0x20))
+                               buf[0] = (u8)ptr_fw[source_line].offset;
+
+                       fw2buf(cur, &ptr_fw[source_line].val);
+                       cur += 4;
+
+                       if (0 == send_flag % (DMA_TRANS_LEN < 0x20 ? DMA_TRANS_LEN : 0x20)) 
+                       {
+                               gsl_write_interface(client, buf[0], buf, cur - buf - 1);
+                                       //i2c_smbus_write_i2c_block_data(client, buf[0], cur - buf - 1, buf);
+                               cur = buf + 1;
+                       }
+
+                       send_flag++;
+               }
+       }
+
+       printk("=============gsl_load_fw end==============\n");
+
+}
+
+
+static int test_i2c(struct i2c_client *client)
+{
+       u8 read_buf = 0;
+       u8 write_buf = 0x12;
+       int ret, rc = 1;
+       
+       ret = gsl_ts_read( client, 0xf0, &read_buf, sizeof(read_buf) );
+       if  (ret  < 0)  
+               rc --;
+       else
+               printk("I read reg 0xf0 is %x\n", read_buf);
+       
+       msleep(2);
+       ret = gsl_ts_write(client, 0xf0, &write_buf, sizeof(write_buf));
+       if(ret  >=  0 )
+               printk("I write reg 0xf0 0x12\n");
+       
+       msleep(2);
+       ret = gsl_ts_read( client, 0xf0, &read_buf, sizeof(read_buf) );
+       if(ret <  0 )
+               rc --;
+       else
+               printk("I read reg 0xf0 is 0x%x\n", read_buf);
+
+       return rc;
+}
+
+
+static void startup_chip(struct i2c_client *client)
+{
+       u8 tmp = 0x00;
+       
+#ifdef GSL_NOID_VERSION
+       gsl_DataInit(gsl_config_data_id);
+#endif
+       gsl_ts_write(client, 0xe0, &tmp, 1);
+       msleep(10);     
+}
+
+static void reset_chip(struct i2c_client *client)
+{
+       u8 tmp = 0x88;
+       u8 buf[4] = {0x00};
+       
+       gsl_ts_write(client, 0xe0, &tmp, sizeof(tmp));
+       msleep(20);
+       tmp = 0x04;
+       gsl_ts_write(client, 0xe4, &tmp, sizeof(tmp));
+       msleep(10);
+       gsl_ts_write(client, 0xbc, buf, sizeof(buf));
+       msleep(10);
+}
+
+static void clr_reg(struct i2c_client *client)
+{
+       u8 write_buf[4] = {0};
+
+       write_buf[0] = 0x88;
+       gsl_ts_write(client, 0xe0, &write_buf[0], 1);   
+       msleep(20);
+       write_buf[0] = 0x03;
+       gsl_ts_write(client, 0x80, &write_buf[0], 1);   
+       msleep(5);
+       write_buf[0] = 0x04;
+       gsl_ts_write(client, 0xe4, &write_buf[0], 1);   
+       msleep(5);
+       write_buf[0] = 0x00;
+       gsl_ts_write(client, 0xe0, &write_buf[0], 1);   
+       msleep(20);
+}
+
+static void init_chip(struct i2c_client *client)
+{
+       int rc;
+       int i;
+       gslX680_shutdown_low(); 
+       msleep(1000);   
+       gslX680_shutdown_high();        
+       msleep(20);             
+       for(i=0;i<10;i++){              
+       rc = test_i2c(client);
+               if(rc >=0 )
+                       break;
+       }
+       if(rc < 0)
+       {
+               printk("------gslX680 test_i2c error------\n"); 
+               return;
+       }       
+       clr_reg(client);
+       reset_chip(client);
+       gsl_load_fw(client);                    
+       startup_chip(client);   
+       reset_chip(client);     
+       startup_chip(client);   
+}
+
+static void check_mem_data(struct i2c_client *client)
+{
+       u8 read_buf[4]  = {0};
+       
+       msleep(30);
+       gsl_ts_read(client,0xb0, read_buf, sizeof(read_buf));
+       
+       if (read_buf[3] != 0x5a || read_buf[2] != 0x5a || read_buf[1] != 0x5a || read_buf[0] != 0x5a)
+       {
+               printk("#########check mem read 0xb0 = %x %x %x %x #########\n", read_buf[3], read_buf[2], read_buf[1], read_buf[0]);
+               init_chip(client);
+       }
+}
+
+
+#ifdef TPD_PROC_DEBUG
+static int char_to_int(char ch)
+{
+    if(ch>='0' && ch<='9')
+        return (ch-'0');
+    else
+        return (ch-'a'+10);
+}
+
+
+static int gsl_read_interface(struct i2c_client *client, u8 reg, u8 *buf, u32 num)
+{
+
+       int err = 0;
+       u8 temp = reg;
+       //mutex_lock(&gsl_i2c_lock);
+       if(temp < 0x80)
+       {
+               temp = (temp+8)&0x5c;
+               i2c_master_send(client,&temp,1);
+               err = i2c_master_recv(client,&buf[0],4);
+
+               temp = reg;
+               i2c_master_send(client,&temp,1);
+               err = i2c_master_recv(client,&buf[0],4);
+       }
+       i2c_master_send(client,&reg,1);
+       err = i2c_master_recv(client,&buf[0],num);
+       //mutex_unlock(&gsl_i2c_lock);
+       return err;
+}
+
+
+//static int gsl_config_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data)
+static int gsl_config_read_proc(struct seq_file *m,void *v)
+{
+       //char *ptr = page;
+       char temp_data[5] = {0};
+       unsigned int tmp=0;
+       
+       if('v'==gsl_read[0]&&'s'==gsl_read[1])
+       {
+#ifdef GSL_NOID_VERSION
+               tmp=gsl_version_id();
+#else 
+               tmp=0x20121215;
+#endif
+               seq_printf(m,"version:%x\n",tmp);
+       }
+       else if('r'==gsl_read[0]&&'e'==gsl_read[1])
+       {
+               if('i'==gsl_read[3])
+               {
+#ifdef GSL_NOID_VERSION 
+                       tmp=(gsl_data_proc[5]<<8) | gsl_data_proc[4];
+                       //ptr +=sprintf(ptr,"gsl_config_data_id[%d] = ",tmp);
+                       //if(tmp>=0&&tmp<512)
+                       //      ptr +=sprintf(ptr,"%d\n",gsl_config_data_id[tmp]); 
+#endif
+               }
+               else 
+               {
+                       gsl_ts_write(gsl_client,0xf0,&gsl_data_proc[4],4);
+                       gsl_read_interface(gsl_client,gsl_data_proc[0],temp_data,4);
+                       seq_printf(m,"offset : {0x%02x,0x",gsl_data_proc[0]);
+                       seq_printf(m,"%02x",temp_data[3]);
+                       seq_printf(m,"%02x",temp_data[2]);
+                       seq_printf(m,"%02x",temp_data[1]);
+                       seq_printf(m,"%02x};\n",temp_data[0]);
+               }
+       }
+       return 0;
+}
+
+ssize_t gsl_config_write_proc(struct file *file, const char *buffer, size_t count, loff_t *data)
+{
+       u8 buf[8] = {0};
+       char temp_buf[CONFIG_LEN];
+       char *path_buf;
+       int tmp = 0;
+       int tmp1 = 0;
+       print_info("[tp-gsl][%s] \n",__func__);
+       if(count > 512)
+       {
+               print_info("size not match [%d:%ld]\n", CONFIG_LEN, count);
+        return -EFAULT;
+       }
+       path_buf=kzalloc(count,GFP_KERNEL);
+       if(!path_buf)
+       {
+               printk("alloc path_buf memory error \n");
+       }
+       if(copy_from_user(path_buf, buffer, count))
+       {
+               print_info("copy from user fail\n");
+               goto exit_write_proc_out;
+       }
+       memcpy(temp_buf,path_buf,(count<CONFIG_LEN?count:CONFIG_LEN));
+       print_info("[tp-gsl][%s][%s]\n",__func__,temp_buf);
+       
+       buf[3]=char_to_int(temp_buf[14])<<4 | char_to_int(temp_buf[15]);        
+       buf[2]=char_to_int(temp_buf[16])<<4 | char_to_int(temp_buf[17]);
+       buf[1]=char_to_int(temp_buf[18])<<4 | char_to_int(temp_buf[19]);
+       buf[0]=char_to_int(temp_buf[20])<<4 | char_to_int(temp_buf[21]);
+       
+       buf[7]=char_to_int(temp_buf[5])<<4 | char_to_int(temp_buf[6]);
+       buf[6]=char_to_int(temp_buf[7])<<4 | char_to_int(temp_buf[8]);
+       buf[5]=char_to_int(temp_buf[9])<<4 | char_to_int(temp_buf[10]);
+       buf[4]=char_to_int(temp_buf[11])<<4 | char_to_int(temp_buf[12]);
+       if('v'==temp_buf[0]&& 's'==temp_buf[1])//version //vs
+       {
+               memcpy(gsl_read,temp_buf,4);
+               printk("gsl version\n");
+       }
+       else if('s'==temp_buf[0]&& 't'==temp_buf[1])//start //st
+       {
+               gsl_proc_flag = 1;
+               reset_chip(gsl_client);
+       }
+       else if('e'==temp_buf[0]&&'n'==temp_buf[1])//end //en
+       {
+               msleep(20);
+               reset_chip(gsl_client);
+               startup_chip(gsl_client);
+               gsl_proc_flag = 0;
+       }
+       else if('r'==temp_buf[0]&&'e'==temp_buf[1])//read buf //
+       {
+               memcpy(gsl_read,temp_buf,4);
+               memcpy(gsl_data_proc,buf,8);
+       }
+       else if('w'==temp_buf[0]&&'r'==temp_buf[1])//write buf
+       {
+               gsl_ts_write(gsl_client,buf[4],buf,4);
+       }
+#ifdef GSL_NOID_VERSION
+       else if('i'==temp_buf[0]&&'d'==temp_buf[1])//write id config //
+       {
+               tmp1=(buf[7]<<24)|(buf[6]<<16)|(buf[5]<<8)|buf[4];
+               tmp=(buf[3]<<24)|(buf[2]<<16)|(buf[1]<<8)|buf[0];
+               if(tmp1>=0 && tmp1<ARRAY_SIZE(gsl_config_data_id))
+               {
+                       gsl_config_data_id[tmp1] = tmp;
+               }
+       }
+#endif
+exit_write_proc_out:
+       kfree(path_buf);
+       return count;
+}
+
+static int gsl_server_list_open(struct inode *inode,struct file *file)
+{
+       return single_open(file,gsl_config_read_proc,NULL);
+}
+static const struct file_operations gsl_seq_fops = {
+       .open = gsl_server_list_open,
+       .read = seq_read,
+       .release = single_release,
+       .write = gsl_config_write_proc,
+       .owner = THIS_MODULE,
+};
+#endif
+
+#ifdef FILTER_POINT
+static void filter_point(u16 x, u16 y , u8 id)
+{
+       u16 x_err =0;
+       u16 y_err =0;
+       u16 filter_step_x = 0, filter_step_y = 0;
+       
+       id_sign[id] = id_sign[id] + 1;
+       if(id_sign[id] == 1)
+       {
+               x_old[id] = x;
+               y_old[id] = y;
+       }
+       
+       x_err = x > x_old[id] ? (x -x_old[id]) : (x_old[id] - x);
+       y_err = y > y_old[id] ? (y -y_old[id]) : (y_old[id] - y);
+
+       if( (x_err > FILTER_MAX && y_err > FILTER_MAX/3) || (x_err > FILTER_MAX/3 && y_err > FILTER_MAX) )
+       {
+               filter_step_x = x_err;
+               filter_step_y = y_err;
+       }
+       else
+       {
+               if(x_err > FILTER_MAX)
+                       filter_step_x = x_err; 
+               if(y_err> FILTER_MAX)
+                       filter_step_y = y_err;
+       }
+
+       if(x_err <= 2*FILTER_MAX && y_err <= 2*FILTER_MAX)
+       {
+               filter_step_x >>= 2; 
+               filter_step_y >>= 2;
+       }
+       else if(x_err <= 3*FILTER_MAX && y_err <= 3*FILTER_MAX)
+       {
+               filter_step_x >>= 1; 
+               filter_step_y >>= 1;
+       }       
+       else if(x_err <= 4*FILTER_MAX && y_err <= 4*FILTER_MAX)
+       {
+               filter_step_x = filter_step_x*3/4; 
+               filter_step_y = filter_step_y*3/4;
+       }       
+       
+       x_new = x > x_old[id] ? (x_old[id] + filter_step_x) : (x_old[id] - filter_step_x);
+       y_new = y > y_old[id] ? (y_old[id] + filter_step_y) : (y_old[id] - filter_step_y);
+
+       x_old[id] = x_new;
+       y_old[id] = y_new;
+}
+#else
+static void record_point(u16 x, u16 y , u8 id)
+{
+       u16 x_err =0;
+       u16 y_err =0;
+
+       id_sign[id]=id_sign[id]+1;
+       
+       if(id_sign[id]==1){
+               x_old[id]=x;
+               y_old[id]=y;
+       }
+
+       x = (x_old[id] + x)/2;
+       y = (y_old[id] + y)/2;
+               
+       if(x>x_old[id]){
+               x_err=x -x_old[id];
+       }
+       else{
+               x_err=x_old[id]-x;
+       }
+
+       if(y>y_old[id]){
+               y_err=y -y_old[id];
+       }
+       else{
+               y_err=y_old[id]-y;
+       }
+
+       if( (x_err > 3 && y_err > 1) || (x_err > 1 && y_err > 3) ){
+               x_new = x;     x_old[id] = x;
+               y_new = y;     y_old[id] = y;
+       }
+       else{
+               if(x_err > 3){
+                       x_new = x;     x_old[id] = x;
+               }
+               else
+                       x_new = x_old[id];
+               if(y_err> 3){
+                       y_new = y;     y_old[id] = y;
+               }
+               else
+                       y_new = y_old[id];
+       }
+
+       if(id_sign[id]==1){
+               x_new= x_old[id];
+               y_new= y_old[id];
+       }
+       
+}
+#endif
+
+#ifdef HAVE_TOUCH_KEY
+static void report_key(struct gsl_ts *ts, u16 x, u16 y)
+{
+       u16 i = 0;
+
+       for(i = 0; i < MAX_KEY_NUM; i++) 
+       {
+               if((gsl_key_data[i].x_min < x) && (x < gsl_key_data[i].x_max)&&(gsl_key_data[i].y_min < y) && (y < gsl_key_data[i].y_max))
+               {
+                       key = gsl_key_data[i].key;      
+                       input_report_key(ts->input, key, 1);
+                       input_sync(ts->input);          
+                       key_state_flag = 1;
+                       break;
+               }
+       }
+}
+#endif
+
+static void report_data(struct gsl_ts *ts, u16 x, u16 y, u8 pressure, u8 id)
+{
+       if(ts->revert_xy)
+               swap(x, y);
+
+       print_info("#####id=%d,x=%d,y=%d######\n",id,x,y);
+
+       if(x > ts->screen_max_x || y > ts->screen_max_y)
+       {
+       #ifdef HAVE_TOUCH_KEY
+               report_key(ts,x,y);
+       #endif
+               return;
+       }
+       
+       if(ts->revert_x)
+               x = ts->screen_max_x-x-1;
+       if(ts->revert_y)
+               y = ts->screen_max_y-y-1;
+#ifdef REPORT_DATA_ANDROID_4_0
+       input_mt_slot(ts->input, id);           
+       input_report_abs(ts->input, ABS_MT_TRACKING_ID, id);
+       input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, pressure);
+       input_report_abs(ts->input, ABS_MT_POSITION_X, x);
+       input_report_abs(ts->input, ABS_MT_POSITION_Y, y);      
+       input_report_abs(ts->input, ABS_MT_WIDTH_MAJOR, 1);
+#else
+       input_report_abs(ts->input, ABS_MT_TRACKING_ID, id);
+       input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, pressure);
+       input_report_abs(ts->input, ABS_MT_POSITION_X,x);
+       input_report_abs(ts->input, ABS_MT_POSITION_Y, y);
+       input_report_abs(ts->input, ABS_MT_WIDTH_MAJOR, 1);
+       input_mt_sync(ts->input);
+#endif
+}
+
+static void gslX680_ts_worker(struct work_struct *work)
+{
+       int rc, i;
+       u8 id, touches/*, read_buf[4] = {0}*/;
+       u16 x, y;
+#ifdef GSL_NOID_VERSION
+       unsigned int tmp1;
+       u8 buf[4] = {0};
+       struct gsl_touch_info cinfo = {{0}};
+#endif
+       struct gsl_ts *ts = container_of(work, struct gsl_ts,work);
+
+       print_info("=====gslX680_ts_worker=====\n");                             
+
+#ifdef TPD_PROC_DEBUG
+       if(gsl_proc_flag == 1)
+               goto schedule;
+#endif
+
+#ifdef GSL_MONITOR
+       if(i2c_lock_flag != 0)
+               goto i2c_lock_schedule;
+       else
+               i2c_lock_flag = 1;
+#endif
+
+
+
+       rc = gsl_ts_read(ts->client, 0x80, ts->touch_data, ts->dd->data_size);
+       if (rc < 0) 
+       {
+               dev_err(&ts->client->dev, "read failed\n");
+               reset_chip(ts->client);
+               startup_chip(ts->client);
+               goto schedule;
+       }
+               
+       touches = ts->touch_data[ts->dd->touch_index];
+       print_info("-----touches: %d -----\n", touches);                
+#ifdef GSL_NOID_VERSION
+       cinfo.finger_num = touches;
+       print_info("tp-gsl  finger_num = %d\n",cinfo.finger_num);
+       for(i = 0; i < (touches < MAX_CONTACTS ? touches : MAX_CONTACTS); i ++)
+       {
+               cinfo.x[i] = join_bytes( ( ts->touch_data[ts->dd->x_index  + 4 * i + 1] & 0xf),
+                               ts->touch_data[ts->dd->x_index + 4 * i]);
+               cinfo.y[i] = join_bytes(ts->touch_data[ts->dd->y_index + 4 * i + 1],
+                               ts->touch_data[ts->dd->y_index + 4 * i ]);
+               cinfo.id[i] = ((ts->touch_data[ts->dd->x_index  + 4 * i + 1] & 0xf0)>>4);
+               print_info("tp-gsl  before: x[%d] = %d, y[%d] = %d, id[%d] = %d \n",i,cinfo.x[i],i,cinfo.y[i],i,cinfo.id[i]);
+       }
+       cinfo.finger_num=(ts->touch_data[3]<<24)|(ts->touch_data[2]<<16)
+               |(ts->touch_data[1]<<8)|(ts->touch_data[0]);
+       gsl_alg_id_main(&cinfo);
+       tmp1=gsl_mask_tiaoping();
+       print_info("[tp-gsl] tmp1=%x\n",tmp1);
+       if(tmp1>0&&tmp1<0xffffffff)
+       {
+               buf[0]=0xa;buf[1]=0;buf[2]=0;buf[3]=0;
+               gsl_ts_write(ts->client,0xf0,buf,4);
+               buf[0]=(u8)(tmp1 & 0xff);
+               buf[1]=(u8)((tmp1>>8) & 0xff);
+               buf[2]=(u8)((tmp1>>16) & 0xff);
+               buf[3]=(u8)((tmp1>>24) & 0xff);
+               print_info("tmp1=%08x,buf[0]=%02x,buf[1]=%02x,buf[2]=%02x,buf[3]=%02x\n",
+                       tmp1,buf[0],buf[1],buf[2],buf[3]);
+               gsl_ts_write(ts->client,0x8,buf,4);
+       }
+       touches = cinfo.finger_num;
+#endif
+       
+       for(i = 1; i <= MAX_CONTACTS; i ++)
+       {
+               if(touches == 0)
+                       id_sign[i] = 0; 
+               id_state_flag[i] = 0;
+       }
+       for(i= 0;i < (touches > MAX_FINGERS ? MAX_FINGERS : touches);i ++)
+       {
+       #ifdef GSL_NOID_VERSION
+               {
+               id = cinfo.id[i];
+               x =  cinfo.x[i];
+               y =  cinfo.y[i];        
+               }
+       #else
+               {
+               x = join_bytes( ( ts->touch_data[ts->dd->x_index  + 4 * i + 1] & 0xf),
+                               ts->touch_data[ts->dd->x_index + 4 * i]);
+               y = join_bytes(ts->touch_data[ts->dd->y_index + 4 * i + 1],
+                               ts->touch_data[ts->dd->y_index + 4 * i ]);
+               id = ts->touch_data[ts->dd->id_index + 4 * i] >> 4;
+               }
+       #endif
+
+               if(1 <=id && id <= MAX_CONTACTS)
+               {
+               #ifdef FILTER_POINT
+                       filter_point(x, y ,id);
+               #else
+                       record_point(x, y , id);
+               #endif
+                       report_data(ts, x_new, y_new, 10, id);          
+                       id_state_flag[id] = 1;
+               }
+       }
+       for(i = 1; i <= MAX_CONTACTS; i ++)
+       {       
+               if( (0 == touches) || ((0 != id_state_old_flag[i]) && (0 == id_state_flag[i])) )
+               {
+               #ifdef REPORT_DATA_ANDROID_4_0
+                       input_mt_slot(ts->input, i);
+                       input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1);
+                       input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, false);
+               #endif
+                       id_sign[i]=0;
+               }
+               id_state_old_flag[i] = id_state_flag[i];
+       }
+       if(0 == touches)
+       {
+#ifndef REPORT_DATA_ANDROID_4_0
+               input_mt_sync(ts->input);
+#endif
+       #ifdef HAVE_TOUCH_KEY
+               if(key_state_flag)
+               {
+                       input_report_key(ts->input, key, 0);
+                       input_sync(ts->input);
+                       key_state_flag = 0;
+               }
+       #endif                  
+       }       
+       input_sync(ts->input);
+       
+schedule:
+#ifdef GSL_MONITOR
+       i2c_lock_flag = 0;
+i2c_lock_schedule:
+#endif
+       //reset_chip(ts->client);
+       //startup_chip(ts->client);
+       enable_irq(ts->irq);
+               
+}
+
+#ifdef GSL_MONITOR
+static void gsl_monitor_worker(void)
+{
+       char write_buf[4] = {0};
+       char read_buf[4]  = {0};
+       
+       print_info("----------------gsl_monitor_worker-----------------\n");    
+
+       if(i2c_lock_flag != 0)
+               goto queue_monitor_work;
+       else
+               i2c_lock_flag = 1;
+       
+       gsl_ts_read(gsl_client, 0xb0, read_buf, 4);
+       if(read_buf[3] != 0x5a || read_buf[2] != 0x5a || read_buf[1] != 0x5a || read_buf[0] != 0x5a)
+               b0_counter ++;
+       else
+               b0_counter = 0;
+
+       if(b0_counter > 1)
+       {
+               printk("======read 0xb0: %x %x %x %x ======\n",read_buf[3], read_buf[2], read_buf[1], read_buf[0]);
+               init_chip(gsl_client);
+               b0_counter = 0;
+       }
+       
+       gsl_ts_read(gsl_client, 0xb4, read_buf, 4);     
+       int_2nd[3] = int_1st[3];
+       int_2nd[2] = int_1st[2];
+       int_2nd[1] = int_1st[1];
+       int_2nd[0] = int_1st[0];
+       int_1st[3] = read_buf[3];
+       int_1st[2] = read_buf[2];
+       int_1st[1] = read_buf[1];
+       int_1st[0] = read_buf[0];
+
+       if(int_1st[3] == int_2nd[3] && int_1st[2] == int_2nd[2] &&int_1st[1] == int_2nd[1] && int_1st[0] == int_2nd[0]) 
+       {
+               printk("======int_1st: %x %x %x %x , int_2nd: %x %x %x %x ======\n",int_1st[3], int_1st[2], int_1st[1], int_1st[0], int_2nd[3], int_2nd[2],int_2nd[1],int_2nd[0]);
+               init_chip(gsl_client);
+       }
+
+       write_buf[3] = 0x01;
+       write_buf[2] = 0xfe;
+       write_buf[1] = 0x10;
+       write_buf[0] = 0x00;
+       gsl_ts_write(gsl_client, 0xf0, write_buf, 4);
+       gsl_ts_read(gsl_client, 0x10, read_buf, 4);
+       gsl_ts_read(gsl_client, 0x10, read_buf, 4);
+       
+       if(read_buf[3] < 10 && read_buf[2] < 10 && read_buf[1] < 10 && read_buf[0] < 10)
+               dac_counter ++;
+       else
+               dac_counter = 0;
+
+       if(dac_counter > 1) 
+       {
+               printk("======read DAC1_0: %x %x %x %x ======\n",read_buf[3], read_buf[2], read_buf[1], read_buf[0]);
+               init_chip(gsl_client);
+               dac_counter = 0;
+       }
+
+       i2c_lock_flag = 0;
+       
+queue_monitor_work:    
+       queue_delayed_work(gsl_monitor_workqueue, &gsl_monitor_work, 100);
+}
+#endif
+
+static irqreturn_t gsl_ts_irq(int irq, void *dev_id)
+{      
+       struct gsl_ts *ts = dev_id;
+
+       print_info("========gslX680 Interrupt=========\n");                              
+
+       disable_irq_nosync(ts->irq);
+
+       if (!work_pending(&ts->work)) 
+       {
+               queue_work(ts->wq, &ts->work);
+       }
+       
+       return IRQ_HANDLED;
+
+}
+
+static int gslX680_ts_init(struct i2c_client *client, struct gsl_ts *ts)
+{
+       struct input_dev *input_device;
+       int rc = 0;
+       
+       printk("[GSLX680] Enter %s\n", __func__);
+
+       ts->dd = &devices[ts->device_id];
+
+       if (ts->device_id == 0) {
+               ts->dd->data_size = MAX_FINGERS * ts->dd->touch_bytes + ts->dd->touch_meta_data;
+               ts->dd->touch_index = 0;
+       }
+
+       ts->touch_data = kzalloc(ts->dd->data_size, GFP_KERNEL);
+       if (!ts->touch_data) {
+               pr_err("%s: Unable to allocate memory\n", __func__);
+               return -ENOMEM;
+       }
+       input_device = input_allocate_device();
+       if (!input_device) {
+               rc = -ENOMEM;
+               goto error_alloc_dev;
+       }
+
+       ts->input = input_device;
+       input_device->name = GSLX680_I2C_NAME;
+       input_device->id.bustype = BUS_I2C;
+       input_device->dev.parent = &client->dev;
+       input_set_drvdata(input_device, ts);
+
+#ifdef REPORT_DATA_ANDROID_4_0
+       __set_bit(EV_ABS, input_device->evbit);
+       __set_bit(EV_KEY, input_device->evbit);
+       __set_bit(EV_REP, input_device->evbit);
+       __set_bit(INPUT_PROP_DIRECT, input_device->propbit);
+       input_mt_init_slots(input_device, (MAX_CONTACTS+1),0);
+#else
+       input_set_abs_params(input_device,ABS_MT_TRACKING_ID, 0, (MAX_CONTACTS+1), 0, 0);
+       set_bit(EV_ABS, input_device->evbit);
+       set_bit(EV_KEY, input_device->evbit);
+       __set_bit(INPUT_PROP_DIRECT, input_device->propbit);
+       input_device->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
+#endif
+
+#ifdef HAVE_TOUCH_KEY
+       input_device->evbit[0] = BIT_MASK(EV_KEY);
+       //input_device->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
+       for (i = 0; i < MAX_KEY_NUM; i++)
+               set_bit(key_array[i], input_device->keybit);
+#endif
+
+       set_bit(ABS_MT_POSITION_X, input_device->absbit);
+       set_bit(ABS_MT_POSITION_Y, input_device->absbit);
+       set_bit(ABS_MT_TOUCH_MAJOR, input_device->absbit);
+       set_bit(ABS_MT_WIDTH_MAJOR, input_device->absbit);
+
+       input_set_abs_params(input_device,ABS_MT_POSITION_X, 0, ts->screen_max_x, 0, 0);
+       input_set_abs_params(input_device,ABS_MT_POSITION_Y, 0, ts->screen_max_y, 0, 0);
+       input_set_abs_params(input_device,ABS_MT_TOUCH_MAJOR, 0, PRESS_MAX, 0, 0);
+       input_set_abs_params(input_device,ABS_MT_WIDTH_MAJOR, 0, 200, 0, 0);
+
+//     ts->irq_pin = 
+
+       //client->irq = ts->irq_pin;
+//     ts->irq = client->irq;
+
+       ts->wq = create_singlethread_workqueue("kworkqueue_ts");
+       if (!ts->wq) {
+               dev_err(&client->dev, "Could not create workqueue\n");
+               goto error_wq_create;
+       }
+       flush_workqueue(ts->wq);        
+
+       INIT_WORK(&ts->work, gslX680_ts_worker);
+
+       rc = input_register_device(input_device);
+       if (rc)
+               goto error_unreg_device;
+
+       return 0;
+
+error_unreg_device:
+       destroy_workqueue(ts->wq);
+error_wq_create:
+       input_free_device(input_device);
+error_alloc_dev:
+       kfree(ts->touch_data);
+       return rc;
+}
+
+static int gsl_ts_suspend(struct device *dev)
+{
+       struct gsl_ts *ts = dev_get_drvdata(dev);
+#ifdef REPORT_DATA_ANDROID_4_0
+       int i;
+#endif
+       printk("I'am in gsl_ts_suspend() start\n");
+
+#ifdef GSL_MONITOR
+       printk( "gsl_ts_suspend () : cancel gsl_monitor_work\n");
+       cancel_delayed_work_sync(&gsl_monitor_work);
+#endif
+       
+       disable_irq_nosync(ts->irq);    
+                  
+       gslX680_shutdown_low();
+
+#ifdef SLEEP_CLEAR_POINT
+       msleep(10);             
+       #ifdef REPORT_DATA_ANDROID_4_0
+       for(i = 1; i <= MAX_CONTACTS ;i ++)
+       {       
+               input_mt_slot(ts->input, i);
+               input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1);
+               input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, false);
+       }
+       #else   
+       input_mt_sync(ts->input);
+       #endif
+       input_sync(ts->input);
+       msleep(10);     
+       report_data(ts, 1, 1, 10, 1);           
+       input_sync(ts->input);  
+#endif 
+
+       return 0;
+}
+
+static int gsl_ts_resume(struct device *dev)
+{
+       struct gsl_ts *ts = dev_get_drvdata(dev);
+#ifdef REPORT_DATA_ANDROID_4_0
+       int i;
+#endif 
+       printk("I'am in gsl_ts_resume() start\n");
+
+       gslX680_shutdown_high();
+       msleep(20);     
+       reset_chip(ts->client);
+       startup_chip(ts->client);
+       check_mem_data(ts->client);
+       check_mem_data(ts->client);
+
+#ifdef SLEEP_CLEAR_POINT
+       #ifdef REPORT_DATA_ANDROID_4_0
+       for(i =1;i<=MAX_CONTACTS;i++)
+       {       
+               input_mt_slot(ts->input, i);
+               input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1);
+               input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, false);
+       }
+       #else   
+       input_mt_sync(ts->input);
+       #endif
+       input_sync(ts->input);  
+#endif
+#ifdef GSL_MONITOR
+       printk( "gsl_ts_resume () : queue gsl_monitor_work\n");
+       queue_delayed_work(gsl_monitor_workqueue, &gsl_monitor_work, 300);
+#endif 
+       printk("gsl_ts_resume () end\n");
+       enable_irq(ts->irq);
+       return 0;
+}
+
+//#ifdef CONFIG_HAS_EARLYSUSPEND
+#if 1
+static int gsl_ts_early_suspend(struct tp_device *tp_d)
+{
+       struct gsl_ts *ts = container_of(tp_d, struct gsl_ts, tp);
+       printk("[GSLX680] Enter %s\n", __func__);
+       return gsl_ts_suspend(&ts->client->dev);
+}
+
+static int gsl_ts_late_resume(struct tp_device *tp_d)
+{
+       struct gsl_ts *ts = container_of(tp_d, struct gsl_ts, tp);
+       printk("[GSLX680] Enter %s\n", __func__);
+       return gsl_ts_resume(&ts->client->dev);
+}
+#endif
+
+static int  gsl_ts_probe(struct i2c_client *client,
+                       const struct i2c_device_id *id)
+{
+       struct gsl_ts *ts;
+       int rc;
+       int timer = 3;
+       int ret = 0;
+       char buffer = 0;
+       struct device_node *np = client->dev.of_node;
+       enum of_gpio_flags wake_flags;
+       unsigned long irq_flags;
+       
+       printk("GSLX680 Enter %s\n", __func__);
+
+    while(timer > 0)
+    {
+        ret = i2c_master_recv(client,&buffer,1);
+        if(ret >= 0)
+        {
+            printk("%s--%d, i2c_master_recv sucess\n", __func__, __LINE__);
+                   break;
+        }
+        timer--;
+        msleep(100);
+    }
+
+    if(ret < 0)
+    {
+        printk("%s--%d, i2c_master_recv fail\n", __func__, __LINE__);
+        return ret;
+    }
+
+       if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
+               dev_err(&client->dev, "I2C functionality not supported\n");
+               return -ENODEV;
+       }
+       ts = kzalloc(sizeof(*ts), GFP_KERNEL);
+       if (!ts)
+               return -ENOMEM;
+       printk("==kzalloc success=\n");
+
+       ts->client = client;
+       i2c_set_clientdata(client, ts);
+       ts->device_id = id->driver_data;
+       
+       of_property_read_u32(np,"screen_max_x",&(ts->screen_max_x));
+       of_property_read_u32(np,"screen_max_y",&(ts->screen_max_y));
+       print_info("[tp-gsl] screen_max_x =[%d] \n",ts->screen_max_x);
+       print_info("[tp-gsl] screen_max_y =[%d] \n",ts->screen_max_y);
+
+       ret = of_property_read_u32(np,"revert_xy",&(ts->revert_xy));
+       if (ret < 0)
+               ts->revert_xy = 0;
+       ret = of_property_read_u32(np,"revert_x",&(ts->revert_x));
+       if (ret < 0)
+               ts->revert_x = 0;
+       ret = of_property_read_u32(np,"revert_y",&(ts->revert_y));
+       if (ret < 0)
+               ts->revert_y = 0;
+
+       //ts->irq_pin=of_get_named_gpio_flags(np, "irp-gpio", 0, (enum of_gpio_flags *)&irq_flags);
+       //ts->wake_pin=of_get_named_gpio_flags(np, "wake-gpio", 0, &wake_flags);
+       ts->irq_pin=of_get_named_gpio_flags(np, "touch-gpio", 0, (enum of_gpio_flags *)&irq_flags);
+       ts->wake_pin=of_get_named_gpio_flags(np, "reset-gpio", 0, &wake_flags);
+       
+       if (gpio_is_valid(ts->wake_pin)) {
+               rc = devm_gpio_request_one(&client->dev, ts->wake_pin, (wake_flags & OF_GPIO_ACTIVE_LOW) ? GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH, "gslX680 wake pin");
+               if (rc != 0) {
+                       dev_err(&client->dev, "gslX680 wake pin error\n");
+                       return -EIO;
+               }
+               g_wake_pin = ts->wake_pin;
+       } else {
+               dev_info(&client->dev, "wake pin invalid\n");
+       }
+       if (gpio_is_valid(ts->irq_pin)) {
+               rc = devm_gpio_request_one(&client->dev, ts->irq_pin, (irq_flags & OF_GPIO_ACTIVE_LOW) ? GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH, "gslX680 irq pin");
+               if (rc != 0) {
+                       dev_err(&client->dev, "gslX680 irq pin error\n");
+                       return -EIO;
+               }
+               g_irq_pin = ts->irq_pin;
+       } else {
+               dev_info(&client->dev, "irq pin invalid\n");
+       }
+       
+       rc = gslX680_ts_init(client, ts);
+       if (rc < 0) {
+               dev_err(&client->dev, "GSLX680 init failed\n");
+               goto error_mutex_destroy;
+       }       
+
+       gsl_client = client;
+       
+       gslX680_init();
+//     gpio_set_value(ts->irq_pin,1);
+//     msleep(20);     
+       
+       init_chip(ts->client);
+       check_mem_data(ts->client);
+
+       ts->irq=gpio_to_irq(ts->irq_pin);               //If not defined in client
+       if (ts->irq)
+       {
+               rc = devm_request_threaded_irq(&client->dev, ts->irq, NULL, gsl_ts_irq, irq_flags | IRQF_ONESHOT, client->name, ts);
+               if (rc != 0) {
+                       printk(KERN_ALERT "Cannot allocate ts INT!ERRNO:%d\n", rc);
+                       goto error_req_irq_fail;
+               }
+               disable_irq(ts->irq);
+       }
+       else
+       {
+               printk("gsl x680 irq req fail\n");
+               goto error_req_irq_fail;
+       }
+       /* create debug attribute */
+       //rc = device_create_file(&ts->input->dev, &dev_attr_debug_enable);
+  ts->tp.tp_resume = gsl_ts_late_resume;
+  ts->tp.tp_suspend = gsl_ts_early_suspend;
+  tp_register_fb(&ts->tp);
+  
+#ifdef CONFIG_HAS_EARLYSUSPEND
+       ts->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
+       //ts->early_suspend.level = EARLY_SUSPEND_LEVEL_DISABLE_FB + 1;
+       ts->early_suspend.suspend = gsl_ts_early_suspend;
+       ts->early_suspend.resume = gsl_ts_late_resume;
+       register_early_suspend(&ts->early_suspend);
+#endif
+
+
+#ifdef GSL_MONITOR
+       printk( "gsl_ts_probe () : queue gsl_monitor_workqueue\n");
+
+       INIT_DELAYED_WORK(&gsl_monitor_work, gsl_monitor_worker);
+       gsl_monitor_workqueue = create_singlethread_workqueue("gsl_monitor_workqueue");
+       queue_delayed_work(gsl_monitor_workqueue, &gsl_monitor_work, 1000);
+#endif
+
+#ifdef TPD_PROC_DEBUG
+/*
+               gsl_config_proc = create_proc_entry(GSL_CONFIG_PROC_FILE, 0666, NULL);
+               //printk("[tp-gsl] [%s] gsl_config_proc = %x \n",__func__,gsl_config_proc);
+               if (gsl_config_proc == NULL)
+               {
+                       print_info("create_proc_entry %s failed\n", GSL_CONFIG_PROC_FILE);
+               }
+               else
+               {
+                       gsl_config_proc->read_proc = gsl_config_read_proc;
+                       gsl_config_proc->write_proc = gsl_config_write_proc;
+               }
+*/
+               proc_create(GSL_CONFIG_PROC_FILE,0666,NULL,&gsl_seq_fops);
+               gsl_proc_flag = 0;
+#endif
+
+       gpio_set_value(ts->irq_pin, 0); 
+       enable_irq(ts->irq);
+       printk("[GSLX680] End %s\n", __func__);
+
+       return 0;
+
+//exit_set_irq_mode:   
+error_req_irq_fail:
+    free_irq(ts->irq, ts);     
+
+error_mutex_destroy:
+       input_free_device(ts->input);
+       kfree(ts);
+       return rc;
+}
+
+static int gsl_ts_remove(struct i2c_client *client)
+{
+       struct gsl_ts *ts = i2c_get_clientdata(client);
+       printk("==gsl_ts_remove=\n");
+
+#ifdef CONFIG_HAS_EARLYSUSPEND
+       unregister_early_suspend(&ts->early_suspend);
+#endif
+
+#ifdef GSL_MONITOR
+       cancel_delayed_work_sync(&gsl_monitor_work);
+       destroy_workqueue(gsl_monitor_workqueue);
+#endif
+
+       device_init_wakeup(&client->dev, 0);
+       cancel_work_sync(&ts->work);
+       free_irq(ts->irq, ts);
+       destroy_workqueue(ts->wq);
+       input_unregister_device(ts->input);
+       //device_remove_file(&ts->input->dev, &dev_attr_debug_enable);
+       
+       kfree(ts->touch_data);
+       kfree(ts);
+
+       return 0;
+}
+
+static struct of_device_id gsl_ts_ids[] = {
+       {.compatible = "gslX680"},
+       {}
+};
+
+static const struct i2c_device_id gsl_ts_id[] = {
+       {GSLX680_I2C_NAME, 0},
+       {}
+};
+MODULE_DEVICE_TABLE(i2c, gsl_ts_id);
+
+static struct i2c_driver gsl_ts_driver = {
+       .driver = {
+               .name = GSLX680_I2C_NAME,
+               .owner = THIS_MODULE,
+        .of_match_table = of_match_ptr(gsl_ts_ids),
+       },
+#ifndef CONFIG_HAS_EARLYSUSPEND
+       //.suspend      = gsl_ts_suspend,
+       //.resume       = gsl_ts_resume,
+#endif
+       .probe          = gsl_ts_probe,
+       .remove         = gsl_ts_remove,
+       .id_table       = gsl_ts_id,
+};
+
+static int __init gsl_ts_init(void)
+{
+    int ret;
+       printk("==gsl_ts_init==\n");
+       ret = i2c_add_driver(&gsl_ts_driver);
+       printk("ret=%d\n",ret);
+       return ret;
+}
+static void __exit gsl_ts_exit(void)
+{
+       printk("==gsl_ts_exit==\n");
+       i2c_del_driver(&gsl_ts_driver);
+       return;
+}
+
+module_init(gsl_ts_init);
+module_exit(gsl_ts_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("GSLX680 touchscreen controller driver");
+MODULE_AUTHOR("Guan Yuwei, guanyuwei@basewin.com");
+MODULE_ALIAS("platform:gsl_ts");
diff --git a/drivers/input/touchscreen/gslx680.h b/drivers/input/touchscreen/gslx680.h
new file mode 100644 (file)
index 0000000..4ec44fe
--- /dev/null
@@ -0,0 +1,5148 @@
+#ifndef _GSLX680_H_
+#define _GSLX680_H_
+
+struct fw_data
+{
+    u32 offset : 8;
+    u32 : 0;
+    u32 val;
+};
+
+#define        GSL_NOID_VERSION
+#ifdef GSL_NOID_VERSION
+struct gsl_touch_info
+{
+       int x[10];
+       int y[10];
+       int id[10];
+       int finger_num; 
+};
+extern unsigned int gsl_mask_tiaoping(void);
+extern unsigned int gsl_version_id(void);
+extern void gsl_alg_id_main(struct gsl_touch_info *cinfo);
+extern void gsl_DataInit(int *ret);
+unsigned int gsl_config_data_id[] =
+{
+       0x8a44e0,  
+       0x200,
+       0,0,
+       0,
+       0,0,0,
+       0,0,0,0,0,0,0,0xd4bc5deb,
+
+
+       0x109,0x5,0x14000f,0x14000f,0x8000600,0,0x5100,0x8e00,
+       0,0x320014,0,0,0,0,0,0,
+       0x8,0x4000,0x1000,0x102a0002,0x10220003,0,0,0,
+       0x1b6db688,0x240,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0x804000,0x90040,0x90001,0,0,0,
+       0,0,0,0x14012c,0xa003c,0xa0078,0x400,0x1081,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+
+       0,//key_map
+       0x3200384,0x64,0x503e8,//0
+       0,0,0,//1
+       0,0,0,//2
+       0,0,0,//3
+       0,0,0,//4
+       0,0,0,//5
+       0,0,0,//6
+       0,0,0,//7
+
+       0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+
+
+       0x220,
+       0,0,0,0,0,0,0,0,
+       0x10203,0x4050607,0x8090a0b,0xc0d0e0f,0x10111213,0x14151617,0x18191a1b,0x1c1d1e1f,
+       0x20212223,0x24252627,0x28292a2b,0x2c2d2e2f,0x30313233,0x34353637,0x38393a3b,0x3c3d3e3f,
+       0x10203,0x4050607,0x8090a0b,0xc0d0e0f,0x10111213,0x14151617,0x18191a1b,0x1c1d1e1f,
+       0x20212223,0x24252627,0x28292a2b,0x2c2d2e2f,0x30313233,0x34353637,0x38393a3b,0x3c3d3e3f,
+
+       0x10203,0x4050607,0x8090a0b,0xc0d0e0f,0x10111213,0x14151617,0x18191a1b,0x1c1d1e1f,
+       0x20212223,0x24252627,0x28292a2b,0x2c2d2e2f,0x30313233,0x34353637,0x38393a3b,0x3c3d3e3f,
+
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+
+       0x10203,0x4050607,0x8090a0b,0xc0d0e0f,0x10111213,0x14151617,0x18191a1b,0x1c1d1e1f,
+       0x20212223,0x24252627,0x28292a2b,0x2c2d2e2f,0x30313233,0x34353637,0x38393a3b,0x3c3d3e3f,
+
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,
+
+
+       0x3,
+       0x101,0,0x100,0,
+       0x20,0x10,0x8,0x4,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+
+       0x4,0,0,0,0,0,0,0,
+       0x50003c0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,0,
+       0,0,0,0,0,0,0,
+};
+#endif
+
+static struct fw_data GSLX680_FW[] = {
+
+{0xf0,0x2},
+{0x00,0x00000000},
+{0x04,0x00000000},
+{0x08,0x00000000},
+{0x0c,0x00000000},
+{0x10,0x00000000},
+{0x14,0x00000000},
+{0x18,0x00000000},
+{0x1c,0x00000000},
+{0x20,0x00000000},
+{0x24,0x00000000},
+{0x28,0x00000000},
+{0x2c,0x00000000},
+{0x30,0x00000000},
+{0x34,0x00000000},
+{0x38,0x00000000},
+{0x3c,0x00000000},
+{0x40,0x00000000},
+{0x44,0x00000000},
+{0x48,0x00000000},
+{0x4c,0x00000000},
+{0x50,0x00000000},
+{0x54,0x00000000},
+{0x58,0x00000000},
+{0x5c,0x00000000},
+{0x60,0x00000000},
+{0x64,0xf8010013},
+{0x68,0x00066414},
+{0x6c,0x1001020a},
+{0x70,0x00000fff},
+{0x74,0x00000000},
+{0x78,0x00000000},
+{0x7c,0x140f140f},
+{0xf0,0x3},
+{0x00,0x7b78d754},
+{0x04,0x00000000},
+{0x08,0x00000000},
+{0x0c,0x00000000},
+{0x10,0x00000000},
+{0x14,0x00000000},
+{0x18,0x00000000},
+{0x1c,0x00000000},
+{0x20,0x00000000},
+{0x24,0x00005100},
+{0x28,0x00008e00},
+{0x2c,0x00000000},
+{0x30,0x00000000},
+{0x34,0x00000000},
+{0x38,0x00000000},
+{0x3c,0x00000000},
+{0x40,0x00000000},
+{0x44,0x00000000},
+{0x48,0x00000000},
+{0x4c,0x00000000},
+{0x50,0x00000000},
+{0x54,0x00000000},
+{0x58,0x00000000},
+{0x5c,0x00000000},
+{0x60,0x00000000},
+{0x64,0x1a0ac00a},
+{0x68,0x00000002},
+{0x6c,0x0000000f},
+{0x70,0x00000000},
+{0x74,0xffffffff},
+{0x78,0xffffffec},
+{0x7c,0x00000000},
+{0xf0,0x4},
+{0x00,0x00000000},
+{0x04,0x0001660b},
+{0x08,0x00000064},
+{0x0c,0x00000000},
+{0x10,0xfe0cff06},
+{0x14,0x00000000},
+{0x18,0x00000000},
+{0x1c,0x00000000},
+{0x20,0x00000000},
+{0x24,0x00000000},
+{0x28,0x00000000},
+{0x2c,0x00000000},
+{0x30,0x00010000},
+{0x34,0x00000fff},
+{0x38,0x0000000a},
+{0x3c,0x00000258},
+{0x40,0x00000000},
+{0x44,0x04020a00},
+{0x48,0x0014012c},
+{0x4c,0x9a000000},
+{0x50,0x00000000},
+{0x54,0x00010203},
+{0x58,0x04050607},
+{0x5c,0x08090a0b},
+{0x60,0x0c0d0e0f},
+{0x64,0x10111213},
+{0x68,0x14151617},
+{0x6c,0x18191a1b},
+{0x70,0x1c1d1e1f},
+{0x74,0x0014000a},
+{0x78,0x80808080},
+{0x7c,0xcba981f4},
+{0xf0,0x5},
+{0x00,0x00000000},
+{0x04,0x00000005},
+{0x08,0x000000b4},
+{0x0c,0x66806666},
+{0x10,0x0000000a},
+{0x14,0x00000000},
+{0x18,0x00000fff},
+{0x1c,0x102a0002},
+{0x20,0x10220003},
+{0x24,0x00000000},
+{0x28,0x00000000},
+{0x2c,0x00000400},
+{0x30,0x80808080},
+{0x34,0x80808080},
+{0x38,0x80808080},
+{0x3c,0x80808080},
+{0x40,0x80808080},
+{0x44,0x80808080},
+{0x48,0x80808080},
+{0x4c,0x80808000},
+{0x50,0xffffffff},
+{0x54,0x00000000},
+{0x58,0x00000000},
+{0x5c,0x00000000},
+{0x60,0x00000000},
+{0x64,0x00000000},
+{0x68,0x00000000},
+{0x6c,0x00000000},
+{0x70,0x00000000},
+{0x74,0x00000220},
+{0x78,0x0000000f},
+{0x7c,0x00000014},
+{0xf0,0x6},
+{0x00,0x0000000f},
+{0x04,0x00000000},
+{0x08,0x00000014},
+{0x0c,0x04030402},
+{0x10,0x00000032},
+{0x14,0x1414010a},
+{0x18,0x00000001},
+{0x1c,0x00000001},
+{0x20,0x00002904},
+{0x24,0x00000800},
+{0x28,0x00000600},
+{0x2c,0xf8010013},
+{0x30,0xf8010005},
+{0x34,0x00000003},
+{0x38,0x00000003},
+{0x3c,0x00000fff},
+{0x40,0x80000000},
+{0x44,0x00160016},
+{0x48,0x00000fff},
+{0x4c,0x04040402},
+{0x50,0x00030002},
+{0x54,0x00000000},
+{0x58,0x000a012c},
+{0x5c,0x1b6db688},
+{0x60,0x20100804},
+{0x64,0x00000000},
+{0x68,0x00000000},
+{0x6c,0x00000000},
+{0x70,0x00000000},
+{0x74,0x0000015e},
+{0x78,0x000a003c},
+{0x7c,0x00000000},
+{0xf0,0x7},
+{0x00,0x0b010a00},
+{0x04,0x0d030c02},
+{0x08,0x0f050e04},
+{0x0c,0x11071006},
+{0x10,0x13091208},
+{0x14,0x0b170a16},
+{0x18,0x00000000},
+{0x1c,0x000a0078},
+{0x20,0x00001081},
+{0x24,0xff080010},
+{0x28,0xff080120},
+{0x2c,0xff080140},
+{0x30,0xff080160},
+{0x34,0x000f00f7},
+{0x38,0x000a00d6},
+{0x3c,0x000a00b5},
+{0x40,0x00000000},
+{0x44,0x00000000},
+{0x48,0x00000109},
+{0x4c,0x320f0f03},
+{0x50,0x00000000},
+{0x54,0x00000004},
+{0x58,0x00000000},
+{0x5c,0x000c0001},
+{0x60,0x000d000d},
+{0x64,0x000e000e},
+{0x68,0x00000000},
+{0x6c,0x000b0000},
+{0x70,0x00000000},
+{0x74,0x00000000},
+{0x78,0x00a98765},
+{0x7c,0x0043201b},
+{0xf0,0x8},
+{0x00,0x020f222f},
+{0x04,0x224f226f},
+{0x08,0x228f22af},
+{0x0c,0x22cf22ef},
+{0x10,0x230f232f},
+{0x14,0x234f236f},
+{0x18,0x238f43af},
+{0x1c,0x73cf03ef},
+{0x20,0x01f001f1},
+{0x24,0x01f201f3},
+{0x28,0x01f401f5},
+{0x2c,0x01f601f7},
+{0x30,0x01f801f9},
+{0x34,0x01fa01fb},
+{0x38,0x01fc01fd},
+{0x3c,0x01fe01ff},
+{0x40,0x02040608},
+{0x44,0x0a0c0e10},
+{0x48,0x12140000},
+{0x4c,0x01030507},
+{0x50,0x090b0d0f},
+{0x54,0x11130000},
+{0x58,0x00050004},
+{0x5c,0x00000008},
+{0x60,0x0000012c},
+{0x64,0x00000201},
+{0x68,0x00000804},
+{0x6c,0x006600cd},
+{0x70,0x000000cd},
+{0x74,0x00000080},
+{0x78,0x00000000},
+{0x7c,0x00000014},
+{0xf0,0x9},
+{0x00,0xff080094},
+{0x04,0x00070011},
+{0x08,0xff080090},
+{0x0c,0x00040000},
+{0x10,0xff080068},
+{0x14,0x00030000},
+{0x18,0xff080064},
+{0x1c,0x01002582},
+{0x20,0xff080060},
+{0x24,0x00000000},
+{0x28,0xff08004c},
+{0x2c,0x00197fff},
+{0x30,0xfffffff0},
+{0x34,0x00000000},
+{0x38,0xfffffff0},
+{0x3c,0x00000000},
+{0x40,0xfffffff0},
+{0x44,0x00000000},
+{0x48,0xfffffff0},
+{0x4c,0x00000000},
+{0x50,0xfffffff0},
+{0x54,0x00000000},
+{0x58,0xfffffff0},
+{0x5c,0x00000000},
+{0x60,0xfffffff0},
+{0x64,0x00000000},
+{0x68,0xfffffff0},
+{0x6c,0x00000000},
+{0x70,0xfffffff0},
+{0x74,0x00000000},
+{0x78,0xfffffff0},
+{0x7c,0x00000000},
+/*
+{0xf0,0xe0},
+{0x00,0x00000000},
+{0x04,0x00000000},
+{0x08,0x00000000},
+{0x0c,0x00000000},
+{0x10,0x00000000},
+{0x14,0x00000000},
+{0x18,0x00000000},
+{0x1c,0x00000000},
+{0x20,0x00000000},
+{0x24,0x00000000},
+{0x28,0x00000000},
+{0x2c,0x00000000},
+{0x30,0x00000000},
+{0x34,0x00000000},
+{0x38,0x00000000},
+{0x3c,0x00000000},
+{0x40,0x006401f4},
+{0x44,0x00640064},
+{0x48,0x01900064},
+{0x4c,0x00500190},
+{0x50,0x00500050},
+{0x54,0x012c0050},
+{0x58,0x012c012c},
+{0x5c,0x0037012c},
+{0x60,0x0064000a},
+{0x64,0x00640064},
+{0x68,0x00000032},
+{0x6c,0x00500000},
+{0x70,0x00000000},
+{0x74,0x00000000},
+{0x78,0x00000000},
+{0x7c,0x00000000},
+{0xf0,0xe1},
+{0x00,0x00000000},
+{0x04,0x00000000},
+{0x08,0x00000000},
+{0x0c,0x00000000},
+{0x10,0x00000000},
+{0x14,0x00000000},
+{0x18,0x00000000},
+{0x1c,0x00000000},
+{0x20,0x00000000},
+{0x24,0x00000000},
+{0x28,0x00000000},
+{0x2c,0x00000000},
+{0x30,0x00000000},
+{0x34,0x00000000},
+{0x38,0x00000000},
+{0x3c,0x00000000},
+{0x40,0x00000000},
+{0x44,0x00000000},
+{0x48,0x00000000},
+{0x4c,0x00000000},
+{0x50,0x00000002},
+{0x54,0x00000000},
+{0x58,0x00000000},
+{0x5c,0x00000000},
+{0x60,0x00000000},
+{0x64,0x00000000},
+{0x68,0x00000000},
+{0x6c,0x00000000},
+{0x70,0x00000000},
+{0x74,0x00000000},
+{0x78,0x00000000},
+{0x7c,0x00000000},
+{0xf0,0xe2},
+{0x00,0x00000000},
+{0x04,0x00000000},
+{0x08,0x00000000},
+{0x0c,0x00000000},
+{0x10,0x00000000},
+{0x14,0x00000000},
+{0x18,0x00000000},
+{0x1c,0x00000000},
+{0x20,0x00000000},
+{0x24,0x00000000},
+{0x28,0x00000000},
+{0x2c,0x00000000},
+{0x30,0x00000000},
+{0x34,0x00000000},
+{0x38,0x00000000},
+{0x3c,0x00000000},
+{0x40,0x00000000},
+{0x44,0x00000000},
+{0x48,0x00000000},
+{0x4c,0x00000000},
+{0x50,0x00000000},
+{0x54,0x00000000},
+{0x58,0x00000000},
+{0x5c,0x00000000},
+{0x60,0x00000000},
+{0x64,0x00000000},
+{0x68,0x00000000},
+{0x6c,0x00000000},
+{0x70,0x00000000},
+{0x74,0x00000000},
+{0x78,0x00000000},
+{0x7c,0x00000000},
+{0xf0,0xe3},
+{0x00,0x00000000},
+{0x04,0x00000000},
+{0x08,0x00000000},
+{0x0c,0x00000000},
+{0x10,0x00000000},
+{0x14,0x00000000},
+{0x18,0x00000000},
+{0x1c,0x00000000},
+{0x20,0x00000000},
+{0x24,0x00000000},
+{0x28,0x00000000},
+{0x2c,0x00000000},
+{0x30,0x00000000},
+{0x34,0x00000000},
+{0x38,0x00000000},
+{0x3c,0x00000000},
+{0x40,0x00000000},
+{0x44,0x00000000},
+{0x48,0x00000000},
+{0x4c,0x00000000},
+{0x50,0x00000000},
+{0x54,0x00000000},
+{0x58,0x00000000},
+{0x5c,0x00000000},
+{0x60,0x00000000},
+{0x64,0x00000000},
+{0x68,0x00000000},
+{0x6c,0x00000000},
+{0x70,0x00000000},
+{0x74,0x00000000},
+{0x78,0x00000000},
+{0x7c,0x00000000},
+{0xf0,0xe4},
+{0x00,0x00000000},
+{0x04,0x00000000},
+{0x08,0x00000000},
+{0x0c,0x00000000},
+{0x10,0x00000000},
+{0x14,0x00000000},
+{0x18,0x00000000},
+{0x1c,0x00000000},
+{0x20,0x00000000},
+{0x24,0x00000000},
+{0x28,0x00000000},
+{0x2c,0x00000000},
+{0x30,0x00000000},
+{0x34,0x00000000},
+{0x38,0x00000000},
+{0x3c,0x00000000},
+{0x40,0x00000000},
+{0x44,0x00000000},
+{0x48,0x00000000},
+{0x4c,0x00000000},
+{0x50,0x00000000},
+{0x54,0x00000000},
+{0x58,0x00000000},
+{0x5c,0x00000000},
+{0x60,0x00000000},
+{0x64,0x00000000},
+{0x68,0x00000000},
+{0x6c,0x00000000},
+{0x70,0x00000000},
+{0x74,0x00000000},
+{0x78,0x00000000},
+{0x7c,0x00000000},
+{0xf0,0xe5},
+{0x00,0x00000000},
+{0x04,0x00000000},
+{0x08,0x00000000},
+{0x0c,0x00000000},
+{0x10,0x00000000},
+{0x14,0x00000000},
+{0x18,0x00000000},
+{0x1c,0x00000000},
+{0x20,0x00000000},
+{0x24,0x00000000},
+{0x28,0x00000000},
+{0x2c,0x00000000},
+{0x30,0x00000000},
+{0x34,0x00000000},
+{0x38,0x00000000},
+{0x3c,0x00000000},
+{0x40,0x00000000},
+{0x44,0x00000000},
+{0x48,0x00000000},
+{0x4c,0x00000000},
+{0x50,0x00000000},
+{0x54,0x00000000},
+{0x58,0x00000000},
+{0x5c,0x00000000},
+{0x60,0x00000000},
+{0x64,0x00000000},
+{0x68,0x00000000},
+{0x6c,0x00000000},
+{0x70,0x00000000},
+{0x74,0x00000000},
+{0x78,0x00000000},
+{0x7c,0x00000000},
+{0xf0,0xe6},
+{0x00,0x00000000},
+{0x04,0x00000000},
+{0x08,0x00000000},
+{0x0c,0x00000000},
+{0x10,0x00000000},
+{0x14,0x00000000},
+{0x18,0x00000000},
+{0x1c,0x00000000},
+{0x20,0x00000000},
+{0x24,0x00000000},
+{0x28,0x00000000},
+{0x2c,0x00000000},
+{0x30,0x00000000},
+{0x34,0x00000000},
+{0x38,0x00000000},
+{0x3c,0x00000000},
+{0x40,0x00000000},
+{0x44,0x00000000},
+{0x48,0x00000000},
+{0x4c,0x00000000},
+{0x50,0x00000000},
+{0x54,0x00000000},
+{0x58,0x00000000},
+{0x5c,0x00000000},
+{0x60,0x00000000},
+{0x64,0x00000000},
+{0x68,0x00000000},
+{0x6c,0x00000000},
+{0x70,0x00000000},
+{0x74,0x00000000},
+{0x78,0x00000000},
+{0x7c,0x00000000},
+*/
+
+
+
+{0xf0,0x1e},
+{0x00,0x5a5a0f00},
+{0x04,0x00002b18},
+{0x08,0x00002b78},
+{0x0c,0x00002bf0},
+{0x10,0x00002d1c},
+{0x14,0x00002e08},
+{0x18,0x00002fd8},
+{0x1c,0x00003170},
+{0x20,0x000032dc},
+{0x24,0x000034ac},
+{0x28,0x00003614},
+{0x2c,0x00003880},
+{0x30,0x000039f4},
+{0x34,0x00003aa4},
+{0x38,0x00003bc8},
+{0x3c,0x00003f0c},
+{0x40,0x00003fb0},
+{0x44,0x000040ac},
+{0x48,0x00004290},
+{0x4c,0x000043b0},
+{0x50,0x0000446c},
+{0x54,0x0000465c},
+{0x58,0x0000493c},
+{0x5c,0x00004cd4},
+{0x60,0x00004db8},
+{0x64,0x00004df8},
+{0x68,0x00004f14},
+{0x6c,0x00000000},
+{0x70,0x00000000},
+{0x74,0x00000000},
+{0x78,0x00000000},
+{0x7c,0x00000000},
+{0xf0,0x1f},
+{0x00,0x00000000},
+{0x04,0x00000000},
+{0x08,0x00000000},
+{0x0c,0x00000000},
+{0x10,0x00000000},
+{0x14,0x00000000},
+{0x18,0x00000000},
+{0x1c,0x00000000},
+{0x20,0x00000000},
+{0x24,0x00000000},
+{0x28,0x00000000},
+{0x2c,0x00000000},
+{0x30,0x00000000},
+{0x34,0x00000000},
+{0x38,0x00000000},
+{0x3c,0x00000000},
+{0x40,0x00000000},
+{0x44,0x00000000},
+{0x48,0x00000000},
+{0x4c,0x000025f4},
+{0x50,0x000026a4},
+{0x54,0x00000000},
+{0x58,0x00002754},
+{0x5c,0x00000000},
+{0x60,0x00000000},
+{0x64,0x00002864},
+{0x68,0x00000000},
+{0x6c,0x00002928},
+{0x70,0x00002a80},
+{0x74,0x00000000},
+{0x78,0x00004fa0},
+{0x7c,0x5a5a0ffc},
+{0xf0,0x0},
+{0x00,0x01000000},
+{0x04,0x01000000},
+{0x08,0x01000000},
+{0x0c,0x233fc0c0},
+{0x10,0xa2146004},
+{0x14,0xa4102000},
+{0x18,0xe4244000},
+{0x1c,0x233fc0c0},
+{0x20,0xa2146010},
+{0x24,0x2500003f},
+{0x28,0xa414a3ff},
+{0x2c,0xe4244000},
+{0x30,0x01000000},
+{0x34,0x821020e0},
+{0x38,0x81880001},
+{0x3c,0x01000000},
+{0x40,0x01000000},
+{0x44,0xa410200f},
+{0x48,0xe4a00040},
+{0x4c,0x01000000},
+{0x50,0xa0100000},
+{0x54,0xa2100000},
+{0x58,0xa4100000},
+{0x5c,0xa6100000},
+{0x60,0xa8100000},
+{0x64,0xaa100000},
+{0x68,0xac100000},
+{0x6c,0xae100000},
+{0x70,0x90100000},
+{0x74,0x92100000},
+{0x78,0x94100000},
+{0x7c,0x96100000},
+{0xf0,0x1},
+{0x00,0x98100000},
+{0x04,0x9a100000},
+{0x08,0x9c100000},
+{0x0c,0x9e100000},
+{0x10,0x84100000},
+{0x14,0x01000000},
+{0x18,0x01000000},
+{0x1c,0x82100000},
+{0x20,0x81900001},
+{0x24,0x82100000},
+{0x28,0x81980001},
+{0x2c,0x81800000},
+{0x30,0x01000000},
+{0x34,0x01000000},
+{0x38,0x01000000},
+{0x3c,0xbc102cf8},
+{0x40,0x9c102c78},
+{0x44,0x01000000},
+{0x48,0x01000000},
+{0x4c,0x27001040},
+{0x50,0xa614e00f},
+{0x54,0xe6a00040},
+{0x58,0x01000000},
+{0x5c,0x40000309},
+{0x60,0x01000000},
+{0x64,0x01000000},
+{0x68,0x10bfffff},
+{0x6c,0x01000000},
+{0x70,0x03169684},
+{0x74,0x82106050},
+{0x78,0x0329694d},
+{0x7c,0x82106292},
+{0xf0,0x1a},
+{0x00,0x9de3bf98},
+{0x04,0x40000010},
+{0x08,0x01000000},
+{0x0c,0x40000007},
+{0x10,0x01000000},
+{0x14,0x40000308},
+{0x18,0x01000000},
+{0x1c,0x40000015},
+{0x20,0x01000000},
+{0x24,0x30bffffe},
+{0x28,0x82102001},
+{0x2c,0x81904000},
+{0x30,0x01000000},
+{0x34,0x01000000},
+{0x38,0x01000000},
+{0x3c,0x81c3e008},
+{0x40,0x01000000},
+{0x44,0x03000008},
+{0x48,0x82106342},
+{0x4c,0xa3804000},
+{0x50,0x03000004},
+{0x54,0x82106000},
+{0x58,0x81984000},
+{0x5c,0x01000000},
+{0x60,0x01000000},
+{0x64,0x01000000},
+{0x68,0x81c3e008},
+{0x6c,0x01000000},
+{0x70,0x01000000},
+{0x74,0x01000000},
+{0x78,0x01000000},
+{0x7c,0xa7800000},
+{0xf0,0x1b},
+{0x00,0x01000000},
+{0x04,0x01000000},
+{0x08,0x01000000},
+{0x0c,0x81c3e008},
+{0x10,0x01000000},
+{0x14,0x80a22000},
+{0x18,0x02800006},
+{0x1c,0x01000000},
+{0x20,0x01000000},
+{0x24,0x90823fff},
+{0x28,0x12bffffe},
+{0x2c,0x01000000},
+{0x30,0x81c3e008},
+{0x34,0x01000000},
+{0x38,0x01000000},
+{0x3c,0x05001040},
+{0x40,0x8410a00f},
+{0x44,0xc4a00040},
+{0x48,0x01000000},
+{0x4c,0x81c3e008},
+{0x50,0x01000000},
+{0x54,0x9de3be98},
+{0x58,0xb2067fff},
+{0x5c,0x96100018},
+{0x60,0xf227befc},
+{0x64,0xc027bef8},
+{0x68,0x98102000},
+{0x6c,0xb007bff8},
+{0x70,0xd4063f00},
+{0x74,0xda063f04},
+{0x78,0xb810000a},
+{0x7c,0x98033fff},
+{0xf0,0x1c},
+{0x00,0xb0063ff8},
+{0x04,0x80a2800d},
+{0x08,0x16800031},
+{0x0c,0xb610000d},
+{0x10,0xbb2aa002},
+{0x14,0x832b6002},
+{0x18,0xb207400b},
+{0x1c,0xb400400b},
+{0x20,0xde02c01d},
+{0x24,0x80a7001b},
+{0x28,0x1680001c},
+{0x2c,0x01000000},
+{0x30,0xc2068000},
+{0x34,0x80a0400f},
+{0x38,0x04800005},
+{0x3c,0x80a7001b},
+{0x40,0xb606ffff},
+{0x44,0x10bffff8},
+{0x48,0xb406bffc},
+{0x4c,0x16800013},
+{0x50,0x80a7001b},
+{0x54,0xc2068000},
+{0x58,0xc2264000},
+{0x5c,0xb8072001},
+{0x60,0x80a7001b},
+{0x64,0x1680000d},
+{0x68,0xb2066004},
+{0x6c,0xc2064000},
+{0x70,0x80a0400f},
+{0x74,0x26bffffb},
+{0x78,0xb8072001},
+{0x7c,0x80a7001b},
+{0xf0,0x1d},
+{0x00,0x16800006},
+{0x04,0x01000000},
+{0x08,0xc2268000},
+{0x0c,0xb606ffff},
+{0x10,0xb406bffc},
+{0x14,0x80a7001b},
+{0x18,0x12bfffe4},
+{0x1c,0x80a7001b},
+{0x20,0xb0062008},
+{0x24,0x82073fff},
+{0x28,0xc2263f04},
+{0x2c,0xd4263f00},
+{0x30,0x832f2002},
+{0x34,0xb0062008},
+{0x38,0xde22c001},
+{0x3c,0xba072001},
+{0x40,0xfa263f00},
+{0x44,0xda263f04},
+{0x48,0x98032002},
+{0x4c,0x80a33fff},
+{0x50,0x34bfffc9},
+{0x54,0xd4063f00},
+{0x58,0x81c7e008},
+{0x5c,0x81e80000},
+{0x60,0x00000000},
+{0x64,0x00000000},
+{0x68,0x00000000},
+{0x6c,0x00000000},
+{0x70,0x00000000},
+{0x74,0x00000000},
+{0x78,0x00000000},
+{0x7c,0x00000000},
+{0xf0,0x20},
+{0x00,0x83580000},
+{0x04,0x82086ff0},
+{0x08,0x83306004},
+{0x0c,0x80a06005},
+{0x10,0x02800024},
+{0x14,0x01000000},
+{0x18,0x80a06006},
+{0x1c,0x02800039},
+{0x20,0x01000000},
+{0x24,0x80a06015},
+{0x28,0x02800051},
+{0x2c,0x01000000},
+{0x30,0x80a0602a},
+{0x34,0x02800085},
+{0x38,0x01000000},
+{0x3c,0x073fc180},
+{0x40,0x8610e03c},
+{0x44,0x05169680},
+{0x48,0x84004002},
+{0x4c,0xc420c000},
+{0x50,0x073fc000},
+{0x54,0x8610e020},
+{0x58,0x84102001},
+{0x5c,0xc420c000},
+{0x60,0x0500000c},
+{0x64,0x01000000},
+{0x68,0x01000000},
+{0x6c,0x8480bfff},
+{0x70,0x12bffffe},
+{0x74,0x01000000},
+{0x78,0x01000000},
+{0x7c,0x073fc000},
+{0xf0,0x21},
+{0x00,0x8610e020},
+{0x04,0x84102000},
+{0x08,0xc420c000},
+{0x0c,0x01000000},
+{0x10,0x01000000},
+{0x14,0x81c44000},
+{0x18,0x81cc8000},
+{0x1c,0x01000000},
+{0x20,0xa7500000},
+{0x24,0xa92ce002},
+{0x28,0xa734e001},
+{0x2c,0xa614c014},
+{0x30,0xa60ce007},
+{0x34,0x81900000},
+{0x38,0x01000000},
+{0x3c,0x01000000},
+{0x40,0x81e00000},
+{0x44,0xe03ba000},
+{0x48,0xe43ba008},
+{0x4c,0xe83ba010},
+{0x50,0xec3ba018},
+{0x54,0xf03ba020},
+{0x58,0xf43ba028},
+{0x5c,0xf83ba030},
+{0x60,0xfc3ba038},
+{0x64,0x81e80000},
+{0x68,0x8194c000},
+{0x6c,0x01000000},
+{0x70,0x01000000},
+{0x74,0x81c44000},
+{0x78,0x81cc8000},
+{0x7c,0x01000000},
+{0xf0,0x22},
+{0x00,0xa7500000},
+{0x04,0xa934e002},
+{0x08,0xa72ce001},
+{0x0c,0xa614c014},
+{0x10,0xa60ce007},
+{0x14,0x81900000},
+{0x18,0x01000000},
+{0x1c,0x01000000},
+{0x20,0x81e80000},
+{0x24,0x81e80000},
+{0x28,0xe01ba000},
+{0x2c,0xe41ba008},
+{0x30,0xe81ba010},
+{0x34,0xec1ba018},
+{0x38,0xf01ba020},
+{0x3c,0xf41ba028},
+{0x40,0xf81ba030},
+{0x44,0xfc1ba038},
+{0x48,0x81e00000},
+{0x4c,0x81e00000},
+{0x50,0x8194c000},
+{0x54,0x01000000},
+{0x58,0x01000000},
+{0x5c,0x81c44000},
+{0x60,0x81cc8000},
+{0x64,0x01000000},
+{0x68,0x01000000},
+{0x6c,0x82102010},
+{0x70,0x273fc0c0},
+{0x74,0xa614e010},
+{0x78,0xc224c000},
+{0x7c,0x01000000},
+{0xf0,0x23},
+{0x00,0x033fc0c0},
+{0x04,0x82106004},
+{0x08,0xa6102000},
+{0x0c,0xe6204000},
+{0x10,0x01000000},
+{0x14,0x01000000},
+{0x18,0x01000000},
+{0x1c,0xa6102020},
+{0x20,0x83480000},
+{0x24,0x82104013},
+{0x28,0x81884000},
+{0x2c,0x01000000},
+{0x30,0x40000499},
+{0x34,0x01000000},
+{0x38,0x01000000},
+{0x3c,0x01000000},
+{0x40,0xa7500000},
+{0x44,0xa934e002},
+{0x48,0xa72ce001},
+{0x4c,0xa614c014},
+{0x50,0xa60ce007},
+{0x54,0x81900000},
+{0x58,0x01000000},
+{0x5c,0x81e80000},
+{0x60,0xe01ba000},
+{0x64,0xe41ba008},
+{0x68,0xe81ba010},
+{0x6c,0xec1ba018},
+{0x70,0xf01ba020},
+{0x74,0xf41ba028},
+{0x78,0xf81ba030},
+{0x7c,0xfc1ba038},
+{0xf0,0x24},
+{0x00,0x81e00000},
+{0x04,0x8194c000},
+{0x08,0x01000000},
+{0x0c,0xa6102020},
+{0x10,0x83480000},
+{0x14,0x82284013},
+{0x18,0x81884000},
+{0x1c,0x01000000},
+{0x20,0x033fc0c0},
+{0x24,0x82106004},
+{0x28,0xa6103fff},
+{0x2c,0xe6204000},
+{0x30,0x01000000},
+{0x34,0x01000000},
+{0x38,0x01000000},
+{0x3c,0x81c44000},
+{0x40,0x81cc8000},
+{0x44,0x01000000},
+{0x48,0x81c48000},
+{0x4c,0x81cca004},
+{0x50,0x01000000},
+{0x54,0x033fc140},
+{0x58,0x82106048},
+{0x5c,0xda004000},
+{0x60,0x03000040},
+{0x64,0x808b4001},
+{0x68,0x03000016},
+{0x6c,0x12800003},
+{0x70,0x90106200},
+{0x74,0x11000018},
+{0x78,0x81c3e008},
+{0x7c,0x01000000},
+{0xf0,0x25},
+{0x00,0x94102000},
+{0x04,0x96102000},
+{0x08,0x832ae002},
+{0x0c,0xd20063a4},
+{0x10,0x98102000},
+{0x14,0x832b2002},
+{0x18,0x9b2aa002},
+{0x1c,0xda02000d},
+{0x20,0x98032001},
+{0x24,0xda224001},
+{0x28,0x80a32005},
+{0x2c,0x04bffffa},
+{0x30,0x9402a001},
+{0x34,0x9602e001},
+{0x38,0x80a2e003},
+{0x3c,0x04bffff4},
+{0x40,0x832ae002},
+{0x44,0x81c3e008},
+{0x48,0x01000000},
+{0x4c,0x033fc200},
+{0x50,0x961060a0},
+{0x54,0x98102000},
+{0x58,0x832b2002},
+{0x5c,0x9a03000c},
+{0x60,0xda136400},
+{0x64,0x98032001},
+{0x68,0x80a3201f},
+{0x6c,0x04bffffb},
+{0x70,0xda20400b},
+{0x74,0x81c3e008},
+{0x78,0x01000000},
+{0x7c,0x82020008},
+{0xf0,0x26},
+{0x00,0x82004008},
+{0x04,0x9b326002},
+{0x08,0x82004001},
+{0x0c,0x8200400d},
+{0x10,0x83286002},
+{0x14,0x920a6003},
+{0x18,0x932a6003},
+{0x1c,0xd00065b0},
+{0x20,0x91320009},
+{0x24,0x81c3e008},
+{0x28,0x900a20ff},
+{0x2c,0x9a020008},
+{0x30,0x9a034008},
+{0x34,0x97326002},
+{0x38,0x9a03400d},
+{0x3c,0x9a03400b},
+{0x40,0x920a6003},
+{0x44,0x9b2b6002},
+{0x48,0x932a6003},
+{0x4c,0x821020ff},
+{0x50,0xd80365b0},
+{0x54,0x83284009},
+{0x58,0x822b0001},
+{0x5c,0x952a8009},
+{0x60,0x8210400a},
+{0x64,0xc22365b0},
+{0x68,0x912a2002},
+{0x6c,0xda0223a4},
+{0x70,0x972ae002},
+{0x74,0x81c3e008},
+{0x78,0xc223400b},
+{0x7c,0x9a102005},
+{0xf0,0x27},
+{0x00,0x8210200b},
+{0x04,0x9a234008},
+{0x08,0x82204008},
+{0x0c,0x9b2b6002},
+{0x10,0x80a22005},
+{0x14,0x14800007},
+{0x18,0x99286002},
+{0x1c,0x033fc200},
+{0x20,0x8210600c},
+{0x24,0xc2004000},
+{0x28,0x10800006},
+{0x2c,0x8330400d},
+{0x30,0x033fc200},
+{0x34,0x82106008},
+{0x38,0xc2004000},
+{0x3c,0x8330400c},
+{0x40,0x81c3e008},
+{0x44,0x9008600f},
+{0x48,0x9de3bf18},
+{0x4c,0xa12e2002},
+{0x50,0xda1423da},
+{0x54,0xd61423d8},
+{0x58,0xc200247c},
+{0x5c,0xb022c00d},
+{0x60,0x825b4001},
+{0x64,0xb21e6001},
+{0x68,0x92862001},
+{0x6c,0x0280000c},
+{0x70,0x9a004019},
+{0x74,0xb0100009},
+{0x78,0x9807bf78},
+{0x7c,0x8203400d},
+{0xf0,0x28},
+{0x00,0xc2168001},
+{0x04,0xc2230000},
+{0x08,0xc200247c},
+{0x0c,0x9a034001},
+{0x10,0xb0863fff},
+{0x14,0x12bffffa},
+{0x18,0x98032004},
+{0x1c,0x7ffffe6e},
+{0x20,0x9007bf78},
+{0x24,0xda1423ea},
+{0x28,0xd61423e8},
+{0x2c,0x80a3400b},
+{0x30,0x92102000},
+{0x34,0x1880000b},
+{0x38,0xb010000d},
+{0x3c,0x832b6002},
+{0x40,0x8200401e},
+{0x44,0x98007f78},
+{0x48,0xc2030000},
+{0x4c,0xb0062001},
+{0x50,0x92024001},
+{0x54,0x80a6000b},
+{0x58,0x08bffffc},
+{0x5c,0x98032004},
+{0x60,0xb022c00d},
+{0x64,0xb0062001},
+{0x68,0x81800000},
+{0x6c,0x01000000},
+{0x70,0x01000000},
+{0x74,0x01000000},
+{0x78,0xb0724018},
+{0x7c,0x81c7e008},
+{0xf0,0x29},
+{0x00,0x81e80000},
+{0x04,0x9de3bf98},
+{0x08,0xc200247c},
+{0x0c,0x83306001},
+{0x10,0x80a60001},
+{0x14,0x1a800006},
+{0x18,0x90100018},
+{0x1c,0x7fffffb8},
+{0x20,0x01000000},
+{0x24,0x10800006},
+{0x28,0xb0020008},
+{0x2c,0x7fffffb4},
+{0x30,0x90260001},
+{0x34,0x90020008},
+{0x38,0xb0022001},
+{0x3c,0x81c7e008},
+{0x40,0x81e80000},
+{0x44,0x9de3bf98},
+{0x48,0xa8102000},
+{0x4c,0xc20023d4},
+{0x50,0x80a50001},
+{0x54,0x1a800057},
+{0x58,0xe2002348},
+{0x5c,0xa4102000},
+{0x60,0xc200247c},
+{0x64,0x80a48001},
+{0x68,0x3a80004e},
+{0x6c,0xa8052001},
+{0x70,0x7fffffe5},
+{0x74,0x90100012},
+{0x78,0xaa100008},
+{0x7c,0x90100014},
+{0xf0,0x2a},
+{0x00,0x7fffff7f},
+{0x04,0x92100015},
+{0x08,0x80a62000},
+{0x0c,0x12800004},
+{0x10,0xa0100008},
+{0x14,0x10800016},
+{0x18,0xa0102000},
+{0x1c,0x80a62009},
+{0x20,0x18800011},
+{0x24,0x80a62007},
+{0x28,0x7fffff4b},
+{0x2c,0x01000000},
+{0x30,0x94100008},
+{0x34,0x90100014},
+{0x38,0x7fffffa4},
+{0x3c,0x92100012},
+{0x40,0x80a20011},
+{0x44,0x04800007},
+{0x48,0xa6100008},
+{0x4c,0x9a102008},
+{0x50,0x9a234018},
+{0x54,0x82102001},
+{0x58,0x8328400d},
+{0x5c,0xa02c0001},
+{0x60,0x80a62007},
+{0x64,0x18800008},
+{0x68,0x80a62008},
+{0x6c,0x9a102007},
+{0x70,0x9a234018},
+{0x74,0x82102001},
+{0x78,0x8328400d},
+{0x7c,0x10800023},
+{0xf0,0x2b},
+{0x00,0xa0140001},
+{0x04,0x1280000a},
+{0x08,0x821e2009},
+{0x0c,0x80a420fe},
+{0x10,0x24800002},
+{0x14,0xa0042001},
+{0x18,0x0300001c},
+{0x1c,0x9b2ca002},
+{0x20,0x82106200},
+{0x24,0x10800019},
+{0x28,0xe6234001},
+{0x2c,0x80a00001},
+{0x30,0x9a603fff},
+{0x34,0x80a420fe},
+{0x38,0x04800003},
+{0x3c,0x82102001},
+{0x40,0x82102000},
+{0x44,0x808b4001},
+{0x48,0x02800011},
+{0x4c,0x92100015},
+{0x50,0x0300001c},
+{0x54,0x9b2ca002},
+{0x58,0x82106200},
+{0x5c,0xc2034001},
+{0x60,0x80a04011},
+{0x64,0x18800003},
+{0x68,0x9a204011},
+{0x6c,0x9a244001},
+{0x70,0x80a4c011},
+{0x74,0x14800003},
+{0x78,0x8224c011},
+{0x7c,0x82244013},
+{0xf0,0x2c},
+{0x00,0x80a34001},
+{0x04,0xa0642000},
+{0x08,0x92100015},
+{0x0c,0x94100010},
+{0x10,0x7fffff47},
+{0x14,0x90100014},
+{0x18,0x10bfffb2},
+{0x1c,0xa404a001},
+{0x20,0xc20023d4},
+{0x24,0x80a50001},
+{0x28,0x0abfffae},
+{0x2c,0xa4102000},
+{0x30,0x81c7e008},
+{0x34,0x81e80000},
+{0x38,0x98102000},
+{0x3c,0x9610201e},
+{0x40,0x80a22000},
+{0x44,0x12800003},
+{0x48,0x8210000c},
+{0x4c,0x8222c00c},
+{0x50,0x83286002},
+{0x54,0xda006480},
+{0x58,0x80a37ff0},
+{0x5c,0x02800006},
+{0x60,0x98032002},
+{0x64,0xc2006484},
+{0x68,0x80a3201f},
+{0x6c,0x04bffff5},
+{0x70,0xc2234000},
+{0x74,0x81c3e008},
+{0x78,0x01000000},
+{0x7c,0x9de3bf98},
+{0xf0,0x2d},
+{0x00,0xd8002660},
+{0x04,0xc200254c},
+{0x08,0x98130001},
+{0x0c,0xda002508},
+{0x10,0x033fc000},
+{0x14,0x9a0b4001},
+{0x18,0x153fc180},
+{0x1c,0x03202020},
+{0x20,0x82106080},
+{0x24,0x9612a038},
+{0x28,0xc222c000},
+{0x2c,0x03168000},
+{0x30,0xd8202660},
+{0x34,0x80a34001},
+{0x38,0xc0228000},
+{0x3c,0xa4102000},
+{0x40,0x1280000b},
+{0x44,0xa8102000},
+{0x48,0x0300003f},
+{0x4c,0xda002548},
+{0x50,0x821063ff},
+{0x54,0x9a0b4001},
+{0x58,0xd8002508},
+{0x5c,0x033fffc0},
+{0x60,0x980b0001},
+{0x64,0x9a13400c},
+{0x68,0xda202548},
+{0x6c,0x80a62000},
+{0x70,0x16800027},
+{0x74,0x1b296956},
+{0x78,0x1b3fc040},
+{0x7c,0xc2002548},
+{0xf0,0x2e},
+{0x00,0x8208400d},
+{0x04,0x1b168040},
+{0x08,0x80a0400d},
+{0x0c,0x22800002},
+{0x10,0xa4102001},
+{0x14,0xda002664},
+{0x18,0xc20021dc},
+{0x1c,0x80a34001},
+{0x20,0x1a80001b},
+{0x24,0x1b296956},
+{0x28,0x031696a9},
+{0x2c,0xda00250c},
+{0x30,0x821061a5},
+{0x34,0x80a34001},
+{0x38,0x02800006},
+{0x3c,0x03296956},
+{0x40,0x8210625a},
+{0x44,0x80a34001},
+{0x48,0x12800011},
+{0x4c,0x1b296956},
+{0x50,0x11000019},
+{0x54,0x90122200},
+{0x58,0x4000016a},
+{0x5c,0x1300001b},
+{0x60,0x0300001c},
+{0x64,0x961063c0},
+{0x68,0xa8102001},
+{0x6c,0x98102000},
+{0x70,0x9b2b2002},
+{0x74,0x98032001},
+{0x78,0xc20365b0},
+{0x7c,0x80a3201b},
+{0xf0,0x2f},
+{0x00,0x08bffffc},
+{0x04,0xc223400b},
+{0x08,0x1b296956},
+{0x0c,0x80a00012},
+{0x10,0x82380018},
+{0x14,0xa613625a},
+{0x18,0x90402000},
+{0x1c,0x8330601f},
+{0x20,0x1b1696a9},
+{0x24,0xa21361a5},
+{0x28,0x9e104008},
+{0x2c,0xd200254c},
+{0x30,0xe0002548},
+{0x34,0x98102500},
+{0x38,0x80a32670},
+{0x3c,0x0280001a},
+{0x40,0x96033a50},
+{0x44,0xc200250c},
+{0x48,0x941b250c},
+{0x4c,0x80a04013},
+{0x50,0x02800007},
+{0x54,0x9a184011},
+{0x58,0x80a0000d},
+{0x5c,0x82603fff},
+{0x60,0x80904008},
+{0x64,0x0280000a},
+{0x68,0x80a3e000},
+{0x6c,0x80a2e0f0},
+{0x70,0x9a402000},
+{0x74,0x80a0000a},
+{0x78,0x82603fff},
+{0x7c,0x80934001},
+{0xf0,0x30},
+{0x00,0x3280000a},
+{0x04,0x98032004},
+{0x08,0x80a3e000},
+{0x0c,0x02800005},
+{0x10,0x82033960},
+{0x14,0x80a0603f},
+{0x18,0x28800004},
+{0x1c,0x98032004},
+{0x20,0xc0230000},
+{0x24,0x98032004},
+{0x28,0x80a32837},
+{0x2c,0x08bfffe4},
+{0x30,0x80a32670},
+{0x34,0x80a62000},
+{0x38,0x06800006},
+{0x3c,0x0300003f},
+{0x40,0x821063ff},
+{0x44,0x820a4001},
+{0x48,0x10800005},
+{0x4c,0xc220254c},
+{0x50,0xc21022d4},
+{0x54,0x83286010},
+{0x58,0xc22026a0},
+{0x5c,0xc2002548},
+{0x60,0xda0023c8},
+{0x64,0x90087dff},
+{0x68,0xd4002334},
+{0x6c,0x9b336012},
+{0x70,0x9402a001},
+{0x74,0xd800254c},
+{0x78,0x9a0b6200},
+{0x7c,0x033fc200},
+{0xf0,0x31},
+{0x00,0x9012000d},
+{0x04,0x92050014},
+{0x08,0x980b3ffd},
+{0x0c,0x9732a001},
+{0x10,0x82106030},
+{0x14,0xc2004000},
+{0x18,0x98130009},
+{0x1c,0x9602800b},
+{0x20,0x9b342018},
+{0x24,0xd820254c},
+{0x28,0xd620258c},
+{0x2c,0xc220257c},
+{0x30,0x80a3605a},
+{0x34,0xd4202554},
+{0x38,0xd4202588},
+{0x3c,0x12800009},
+{0x40,0xd0202548},
+{0x44,0x0300003f},
+{0x48,0x821063ff},
+{0x4c,0x1b3fffc0},
+{0x50,0x820a0001},
+{0x54,0x9a0c000d},
+{0x58,0x8210400d},
+{0x5c,0xc2202548},
+{0x60,0x80a4a001},
+{0x64,0x0280000c},
+{0x68,0x82102027},
+{0x6c,0x03296956},
+{0x70,0xda00250c},
+{0x74,0x8210625a},
+{0x78,0x80a34001},
+{0x7c,0x1280000b},
+{0xf0,0x32},
+{0x00,0x01000000},
+{0x04,0xc200254c},
+{0x08,0x80886002},
+{0x0c,0x12800007},
+{0x10,0x82102015},
+{0x14,0xc2202500},
+{0x18,0x7ffffe5a},
+{0x1c,0x901025b0},
+{0x20,0x7ffffe6b},
+{0x24,0x81e80000},
+{0x28,0x01000000},
+{0x2c,0x81c7e008},
+{0x30,0x81e80000},
+{0x34,0x9de3bf98},
+{0x38,0x033fc0c0},
+{0x3c,0xba106004},
+{0x40,0x39200040},
+{0x44,0x2f3fc200},
+{0x48,0x82172101},
+{0x4c,0xc225c000},
+{0x50,0xc0274000},
+{0x54,0x40000293},
+{0x58,0x90102000},
+{0x5c,0x213fc140},
+{0x60,0xda00247c},
+{0x64,0x98142040},
+{0x68,0xec030000},
+{0x6c,0xc20022f8},
+{0x70,0x9b336001},
+{0x74,0x825b4001},
+{0x78,0xac0db800},
+{0x7c,0xac158001},
+{0xf0,0x33},
+{0x00,0xec230000},
+{0x04,0x82142004},
+{0x08,0xec004000},
+{0x0c,0xac0dbfe0},
+{0x10,0xac15800d},
+{0x14,0xec204000},
+{0x18,0x8215e080},
+{0x1c,0xec004000},
+{0x20,0xac0dbfe0},
+{0x24,0xac15800d},
+{0x28,0xec204000},
+{0x2c,0xc2002298},
+{0x30,0x9a15e070},
+{0x34,0xc2234000},
+{0x38,0x033fc000},
+{0x3c,0xda002338},
+{0x40,0x82106030},
+{0x44,0xda204000},
+{0x48,0xc2002330},
+{0x4c,0x9215e074},
+{0x50,0xc2224000},
+{0x54,0x0300003f},
+{0x58,0xa2142058},
+{0x5c,0x821063ff},
+{0x60,0x19000016},
+{0x64,0xc2244000},
+{0x68,0x98132200},
+{0x6c,0x96142088},
+{0x70,0xd822c000},
+{0x74,0x9414208c},
+{0x78,0x25000018},
+{0x7c,0xe4228000},
+{0xf0,0x34},
+{0x00,0xc20023f8},
+{0x04,0x9015e00c},
+{0x08,0xc2220000},
+{0x0c,0xc20023fc},
+{0x10,0x9e15e008},
+{0x14,0xc223c000},
+{0x18,0xa614205c},
+{0x1c,0xc024c000},
+{0x20,0xa8142080},
+{0x24,0xd8250000},
+{0x28,0xaa142084},
+{0x2c,0xe4254000},
+{0x30,0xc2002344},
+{0x34,0xc2202670},
+{0x38,0x7ffffe25},
+{0x3c,0xe2002374},
+{0x40,0x9a15e07c},
+{0x44,0xec034000},
+{0x48,0x033ff000},
+{0x4c,0xac2d8001},
+{0x50,0xec234000},
+{0x54,0x033fc1c0},
+{0x58,0xda002340},
+{0x5c,0x82106064},
+{0x60,0xda204000},
+{0x64,0x0300007f},
+{0x68,0x96142010},
+{0x6c,0x821063ff},
+{0x70,0x94142030},
+{0x74,0x1907ffc0},
+{0x78,0xc222c000},
+{0x7c,0xa0142014},
+{0xf0,0x35},
+{0x00,0xd8228000},
+{0x04,0x80a46000},
+{0x08,0x0280000f},
+{0x0c,0xd8240000},
+{0x10,0x932c6010},
+{0x14,0x82046001},
+{0x18,0x9b2c6004},
+{0x1c,0x83286010},
+{0x20,0x9a02400d},
+{0x24,0x9815e084},
+{0x28,0xda230000},
+{0x2c,0x82004011},
+{0x30,0x9615e088},
+{0x34,0x82006002},
+{0x38,0x9415e08c},
+{0x3c,0xd222c000},
+{0x40,0xc2228000},
+{0x44,0x8215e030},
+{0x48,0xda002670},
+{0x4c,0xda204000},
+{0x50,0x7ffffeeb},
+{0x54,0x90103fff},
+{0x58,0x7ffffed8},
+{0x5c,0x90102001},
+{0x60,0x82103fff},
+{0x64,0xc2274000},
+{0x68,0xf825c000},
+{0x6c,0x81c7e008},
+{0x70,0x81e80000},
+{0x74,0x9de3bf98},
+{0x78,0xc2002508},
+{0x7c,0x808860ff},
+{0xf0,0x36},
+{0x00,0x02800015},
+{0x04,0x1b3fc180},
+{0x08,0x82102001},
+{0x0c,0x9a13603c},
+{0x10,0xc2234000},
+{0x14,0xc2002508},
+{0x18,0x820860ff},
+{0x1c,0x80a04018},
+{0x20,0x1280000b},
+{0x24,0x033fc180},
+{0x28,0x7ffffca4},
+{0x2c,0x01000000},
+{0x30,0xda002508},
+{0x34,0x033fc040},
+{0x38,0x9a0b60ff},
+{0x3c,0x8210600c},
+{0x40,0xc0204000},
+{0x44,0x10bffff7},
+{0x48,0x80a34018},
+{0x4c,0x8210603c},
+{0x50,0xc0204000},
+{0x54,0x81c7e008},
+{0x58,0x81e80000},
+{0x5c,0x9de3bf98},
+{0x60,0x9e100018},
+{0x64,0x031fffdf},
+{0x68,0xb010001a},
+{0x6c,0xb41063ff},
+{0x70,0x82102000},
+{0x74,0xbb286002},
+{0x78,0x80a62009},
+{0x7c,0xb6006001},
+{0xf0,0x37},
+{0x00,0x12800006},
+{0x04,0xb810001d},
+{0x08,0xc206401d},
+{0x0c,0x83306001},
+{0x10,0x8208401a},
+{0x14,0xc226401d},
+{0x18,0x80a62008},
+{0x1c,0x08800006},
+{0x20,0xc206401c},
+{0x24,0xfa03c01c},
+{0x28,0xbb376001},
+{0x2c,0x10800003},
+{0x30,0xba0f401a},
+{0x34,0xfa03c01c},
+{0x38,0x8200401d},
+{0x3c,0xc226401c},
+{0x40,0x80a6e17f},
+{0x44,0x08bfffec},
+{0x48,0x8210001b},
+{0x4c,0x81c7e008},
+{0x50,0x81e80000},
+{0x54,0x9a102000},
+{0x58,0x832b6002},
+{0x5c,0x9a036001},
+{0x60,0x80a3617f},
+{0x64,0x08bffffd},
+{0x68,0xc0220001},
+{0x6c,0x81c3e008},
+{0x70,0x01000000},
+{0x74,0xc20022f8},
+{0x78,0xda00247c},
+{0x7c,0x8258400d},
+{0xf0,0x38},
+{0x00,0x83306001},
+{0x04,0x96102000},
+{0x08,0x80a2c001},
+{0x0c,0x1a80003b},
+{0x10,0x0300003f},
+{0x14,0x941063ff},
+{0x18,0x98102000},
+{0x1c,0x80a26001},
+{0x20,0x0280002e},
+{0x24,0x80a26004},
+{0x28,0x12800008},
+{0x2c,0x80a26008},
+{0x30,0xc2030008},
+{0x34,0x9a08400a},
+{0x38,0x83306012},
+{0x3c,0x83286010},
+{0x40,0x10800014},
+{0x44,0x9b336002},
+{0x48,0x28800015},
+{0x4c,0xda02000c},
+{0x50,0xda030008},
+{0x54,0x83336010},
+{0x58,0x82004001},
+{0x5c,0x9a0b400a},
+{0x60,0x81800000},
+{0x64,0x01000000},
+{0x68,0x01000000},
+{0x6c,0x01000000},
+{0x70,0x82704009},
+{0x74,0x9a03400d},
+{0x78,0x83286010},
+{0x7c,0x81800000},
+{0xf0,0x39},
+{0x00,0x01000000},
+{0x04,0x01000000},
+{0x08,0x01000000},
+{0x0c,0x9a734009},
+{0x10,0x8200400d},
+{0x14,0x10800011},
+{0x18,0xc2230008},
+{0x1c,0x83336010},
+{0x20,0x81800000},
+{0x24,0x01000000},
+{0x28,0x01000000},
+{0x2c,0x01000000},
+{0x30,0x82704009},
+{0x34,0x9a0b400a},
+{0x38,0x83286010},
+{0x3c,0x81800000},
+{0x40,0x01000000},
+{0x44,0x01000000},
+{0x48,0x01000000},
+{0x4c,0x9a734009},
+{0x50,0x8200400d},
+{0x54,0xc222000c},
+{0x58,0xc20022f8},
+{0x5c,0xda00247c},
+{0x60,0x8258400d},
+{0x64,0x9602e001},
+{0x68,0x83306001},
+{0x6c,0x80a2c001},
+{0x70,0x0abfffcb},
+{0x74,0x98032004},
+{0x78,0x81c3e008},
+{0x7c,0x01000000},
+{0xf0,0x3a},
+{0x00,0x98102000},
+{0x04,0x9b2b2002},
+{0x08,0x98032001},
+{0x0c,0xc202000d},
+{0x10,0x80a3217f},
+{0x14,0x04bffffc},
+{0x18,0xc222400d},
+{0x1c,0x81c3e008},
+{0x20,0x01000000},
+{0x24,0xd6020000},
+{0x28,0xd8024000},
+{0x2c,0x9132e010},
+{0x30,0x95332010},
+{0x34,0x900a2fff},
+{0x38,0x940aafff},
+{0x3c,0x03000007},
+{0x40,0x9a22000a},
+{0x44,0x821063ff},
+{0x48,0x940b0001},
+{0x4c,0x900ac001},
+{0x50,0x9022000a},
+{0x54,0x9a5b400d},
+{0x58,0x905a0008},
+{0x5c,0x81c3e008},
+{0x60,0x90034008},
+{0x64,0x9de3bf98},
+{0x68,0x825e601a},
+{0x6c,0x82004018},
+{0x70,0x3b00001c},
+{0x74,0x83286002},
+{0x78,0xba176200},
+{0x7c,0x9a066001},
+{0xf0,0x3b},
+{0x00,0xde00401d},
+{0x04,0xb2067fff},
+{0x08,0xc2002478},
+{0x0c,0x9823c001},
+{0x10,0x80a6400d},
+{0x14,0xb4062001},
+{0x18,0x14800028},
+{0x1c,0x96102000},
+{0x20,0x9410001d},
+{0x24,0xb85e601a},
+{0x28,0xb006bffe},
+{0x2c,0x833e601f},
+{0x30,0xba070018},
+{0x34,0x82204019},
+{0x38,0xbb2f6002},
+{0x3c,0xb730601f},
+{0x40,0xba07400a},
+{0x44,0x80a62000},
+{0x48,0x24800015},
+{0x4c,0xb0062001},
+{0x50,0xc2002308},
+{0x54,0x80a04018},
+{0x58,0x82603fff},
+{0x5c,0x8088401b},
+{0x60,0x2280000f},
+{0x64,0xb0062001},
+{0x68,0xc2002300},
+{0x6c,0x80a64001},
+{0x70,0x3880000b},
+{0x74,0xb0062001},
+{0x78,0xc2074000},
+{0x7c,0x80a0400f},
+{0xf0,0x3c},
+{0x00,0x04800004},
+{0x04,0x80a0400c},
+{0x08,0x1080000d},
+{0x0c,0xb0102000},
+{0x10,0x24800002},
+{0x14,0x96102001},
+{0x18,0xb0062001},
+{0x1c,0x80a6001a},
+{0x20,0x04bfffe9},
+{0x24,0xba076004},
+{0x28,0xb2066001},
+{0x2c,0x80a6400d},
+{0x30,0x04bfffde},
+{0x34,0xb807201a},
+{0x38,0xb010000b},
+{0x3c,0x81c7e008},
+{0x40,0x81e80000},
+{0x44,0xc2002548},
+{0x48,0x82087fbf},
+{0x4c,0xc2202548},
+{0x50,0xc0202540},
+{0x54,0xc0202514},
+{0x58,0x9a102000},
+{0x5c,0x832b6002},
+{0x60,0x9a036001},
+{0x64,0xc0206708},
+{0x68,0x80a36009},
+{0x6c,0x04bffffc},
+{0x70,0xc02066e0},
+{0x74,0x81c3e008},
+{0x78,0x01000000},
+{0x7c,0x9de3bf88},
+{0xf0,0x3d},
+{0x00,0x82063fff},
+{0x04,0xb8067fff},
+{0x08,0x82160001},
+{0x0c,0xba16401c},
+{0x10,0x80974001},
+{0x14,0xa610001a},
+{0x18,0x0680006c},
+{0x1c,0xa410001b},
+{0x20,0xc2002308},
+{0x24,0x80a60001},
+{0x28,0x38800069},
+{0x2c,0xb0102000},
+{0x30,0xc2002300},
+{0x34,0x80a64001},
+{0x38,0x38800065},
+{0x3c,0xb0102000},
+{0x40,0x94062001},
+{0x44,0x96066001},
+{0x48,0xa207bff8},
+{0x4c,0x8207bfe8},
+{0x50,0xb0102003},
+{0x54,0xc0204000},
+{0x58,0xb0863fff},
+{0x5c,0x1cbffffe},
+{0x60,0x82006004},
+{0x64,0x80a7000b},
+{0x68,0x14800031},
+{0x6c,0xb210001c},
+{0x70,0x8207001c},
+{0x74,0xba02c00b},
+{0x78,0xba07400b},
+{0x7c,0x8200401c},
+{0xf0,0x3e},
+{0x00,0x8220401d},
+{0x04,0x3b00001c},
+{0x08,0xa0176200},
+{0x0c,0x9820400a},
+{0x10,0x9a5f201a},
+{0x14,0xb002bffe},
+{0x18,0x82034018},
+{0x1c,0x83286002},
+{0x20,0xba06000c},
+{0x24,0xb4004010},
+{0x28,0xb6076008},
+{0x2c,0x90102001},
+{0x30,0x932a001b},
+{0x34,0x9e102000},
+{0x38,0xb92be002},
+{0x3c,0xfa072520},
+{0x40,0xba5f4012},
+{0x44,0x833f601f},
+{0x48,0x83306018},
+{0x4c,0xba074001},
+{0x50,0xc2068000},
+{0x54,0x82204013},
+{0x58,0xbb3f6008},
+{0x5c,0x9e03e001},
+{0x60,0x80a0401d},
+{0x64,0x04800005},
+{0x68,0xb8070011},
+{0x6c,0xc2073ff0},
+{0x70,0x82104009},
+{0x74,0xc2273ff0},
+{0x78,0x80a3e003},
+{0x7c,0x08bffff0},
+{0xf0,0x3f},
+{0x00,0xb92be002},
+{0x04,0xb0062001},
+{0x08,0xb606e001},
+{0x0c,0x80a6000a},
+{0x10,0x04bfffe8},
+{0x14,0xb406a004},
+{0x18,0xb2066001},
+{0x1c,0x9a03601a},
+{0x20,0x80a6400b},
+{0x24,0x04bfffdc},
+{0x28,0x98032003},
+{0x2c,0xc207bfe8},
+{0x30,0x80886010},
+{0x34,0x0280000a},
+{0x38,0xfa07bfec},
+{0x3c,0xc207bff4},
+{0x40,0x80886082},
+{0x44,0x02800007},
+{0x48,0x808f6010},
+{0x4c,0x80886028},
+{0x50,0x1280001f},
+{0x54,0xb0102003},
+{0x58,0xfa07bfec},
+{0x5c,0x808f6010},
+{0x60,0x02800012},
+{0x64,0xc207bff0},
+{0x68,0x808f6082},
+{0x6c,0x02800007},
+{0x70,0x808f6028},
+{0x74,0xc207bff4},
+{0x78,0x80886028},
+{0x7c,0x32800014},
+{0xf0,0x40},
+{0x00,0xb0102002},
+{0x04,0x808f6028},
+{0x08,0x02800008},
+{0x0c,0xc207bff0},
+{0x10,0xc207bff4},
+{0x14,0x80886082},
+{0x18,0x02800004},
+{0x1c,0xc207bff0},
+{0x20,0x1080000b},
+{0x24,0xb0102002},
+{0x28,0x80886010},
+{0x2c,0x02800008},
+{0x30,0xb0102000},
+{0x34,0x80886082},
+{0x38,0x02800005},
+{0x3c,0x80886028},
+{0x40,0x12800003},
+{0x44,0xb0102001},
+{0x48,0xb0102000},
+{0x4c,0x81c7e008},
+{0x50,0x81e80000},
+{0x54,0x9de3bf98},
+{0x58,0xb12e2002},
+{0x5c,0xf80626e0},
+{0x60,0x9a0f2fff},
+{0x64,0xb1372010},
+{0x68,0xb00e2fff},
+{0x6c,0xba5b601a},
+{0x70,0xba074018},
+{0x74,0x0300001c},
+{0x78,0x82106200},
+{0x7c,0xbb2f6002},
+{0xf0,0x41},
+{0x00,0xfa074001},
+{0x04,0xc20821e4},
+{0x08,0xba5f4001},
+{0x0c,0x833f601f},
+{0x10,0x83306019},
+{0x14,0xba074001},
+{0x18,0xbb3f6007},
+{0x1c,0xb937200c},
+{0x20,0xc20821e5},
+{0x24,0x90100019},
+{0x28,0x9610001a},
+{0x2c,0xa6074001},
+{0x30,0x808f2001},
+{0x34,0xb006001a},
+{0x38,0x0280000c},
+{0x3c,0x9a034019},
+{0x40,0xc20023c8},
+{0x44,0x80886200},
+{0x48,0x32800002},
+{0x4c,0xb006001a},
+{0x50,0xc200237c},
+{0x54,0x80a06000},
+{0x58,0x22800056},
+{0x5c,0x9a036001},
+{0x60,0x10800054},
+{0x64,0xb0062001},
+{0x68,0xc20023c8},
+{0x6c,0x83306014},
+{0x70,0x82086001},
+{0x74,0x80a00001},
+{0x78,0xa0603fff},
+{0x7c,0x9a034008},
+{0xf0,0x42},
+{0x00,0x8333601f},
+{0x04,0x80940001},
+{0x08,0x1280004a},
+{0x0c,0xb006000b},
+{0x10,0x80a62000},
+{0x14,0x06800048},
+{0x18,0x80a2e000},
+{0x1c,0xc2002300},
+{0x20,0x82006001},
+{0x24,0x80a34001},
+{0x28,0x18800043},
+{0x2c,0x80a2e000},
+{0x30,0xc2002308},
+{0x34,0x82006001},
+{0x38,0x80a60001},
+{0x3c,0x1880003d},
+{0x40,0xa2102000},
+{0x44,0x2500001c},
+{0x48,0x98103fff},
+{0x4c,0xa814a200},
+{0x50,0x9414a200},
+{0x54,0x80a2e000},
+{0x58,0x9e100018},
+{0x5c,0x12800004},
+{0x60,0xb203400c},
+{0x64,0x9e06000c},
+{0x68,0xb210000d},
+{0x6c,0x82264008},
+{0x70,0xba23c00b},
+{0x74,0x8258601a},
+{0x78,0x8200401d},
+{0x7c,0x83286002},
+{0xf0,0x43},
+{0x00,0xfa00400a},
+{0x04,0xc20821e6},
+{0x08,0xba5f4001},
+{0x0c,0x833f601f},
+{0x10,0x83306019},
+{0x14,0x925e601a},
+{0x18,0xba074001},
+{0x1c,0xbb3f6007},
+{0x20,0xb45e6068},
+{0x24,0xb602400f},
+{0x28,0xf80821e7},
+{0x2c,0x8203c00c},
+{0x30,0xb807401c},
+{0x34,0x83286002},
+{0x38,0xb72ee002},
+{0x3c,0xb406800a},
+{0x40,0xb206400c},
+{0x44,0xfa06c00a},
+{0x48,0xb4068001},
+{0x4c,0xb25e6068},
+{0x50,0x80a7401c},
+{0x54,0x14800017},
+{0x58,0x832be002},
+{0x5c,0x80a2e000},
+{0x60,0x22800005},
+{0x64,0x8202400f},
+{0x68,0xb406400a},
+{0x6c,0xb4068001},
+{0x70,0x8202400f},
+{0x74,0xb7286002},
+{0x78,0xc2068000},
+{0x7c,0x80a0401c},
+{0xf0,0x44},
+{0x00,0x1480000c},
+{0x04,0x98032001},
+{0x08,0xc206c014},
+{0x0c,0x80a04013},
+{0x10,0x36800002},
+{0x14,0xa2102001},
+{0x18,0x80a32001},
+{0x1c,0x04bfffce},
+{0x20,0x9414a200},
+{0x24,0x80a46000},
+{0x28,0x32bfffb6},
+{0x2c,0x9a034008},
+{0x30,0x80a2e000},
+{0x34,0x12800003},
+{0x38,0xb026000b},
+{0x3c,0xb0234008},
+{0x40,0x81c7e008},
+{0x44,0x81e80000},
+{0x48,0x94102000},
+{0x4c,0xc2002514},
+{0x50,0x80a28001},
+{0x54,0x96102000},
+{0x58,0x1a80000e},
+{0x5c,0x9b2ae002},
+{0x60,0xc20366e0},
+{0x64,0x9602e001},
+{0x68,0x80a06000},
+{0x6c,0x02800006},
+{0x70,0x992aa002},
+{0x74,0xc22326e0},
+{0x78,0xc2036708},
+{0x7c,0x9402a001},
+{0xf0,0x45},
+{0x00,0xc2232708},
+{0x04,0xc2002514},
+{0x08,0x10bffff4},
+{0x0c,0x80a2c001},
+{0x10,0x81c3e008},
+{0x14,0xd4202514},
+{0x18,0xd4020000},
+{0x1c,0x03000019},
+{0x20,0x9802800a},
+{0x24,0x82106200},
+{0x28,0xda130001},
+{0x2c,0xc2002590},
+{0x30,0xc250400c},
+{0x34,0x96a0400d},
+{0x38,0x02800016},
+{0x3c,0x03000019},
+{0x40,0x80a2e000},
+{0x44,0x04800009},
+{0x48,0x82102001},
+{0x4c,0xda022004},
+{0x50,0x8328400d},
+{0x54,0x80a2c001},
+{0x58,0x3480000d},
+{0x5c,0x973ac00d},
+{0x60,0x1080000b},
+{0x64,0x96102001},
+{0x68,0x1680000a},
+{0x6c,0x03000019},
+{0x70,0xda022008},
+{0x74,0x82103fff},
+{0x78,0x8328400d},
+{0x7c,0x80a2c001},
+{0xf0,0x46},
+{0x00,0x36800003},
+{0x04,0x96103fff},
+{0x08,0x973ac00d},
+{0x0c,0x03000019},
+{0x10,0x92106200},
+{0x14,0x8202800a},
+{0x18,0xc2104009},
+{0x1c,0x9602c001},
+{0x20,0x808aa001},
+{0x24,0x0280000f},
+{0x28,0x9b3aa01f},
+{0x2c,0x9b33601f},
+{0x30,0x9a02800d},
+{0x34,0x9b3b6001},
+{0x38,0x9b2b6002},
+{0x3c,0xd8034009},
+{0x40,0x033fffc0},
+{0x44,0x980b0001},
+{0x48,0x0300003f},
+{0x4c,0x821063ff},
+{0x50,0x820ac001},
+{0x54,0x98030001},
+{0x58,0x1080000d},
+{0x5c,0xd8234009},
+{0x60,0x9b33601f},
+{0x64,0x9a02800d},
+{0x68,0x9b3b6001},
+{0x6c,0x9b2b6002},
+{0x70,0x0300003f},
+{0x74,0xd8034009},
+{0x78,0x821063ff},
+{0x7c,0x980b0001},
+{0xf0,0x47},
+{0x00,0x832ae010},
+{0x04,0x8200400c},
+{0x08,0xc2234009},
+{0x0c,0xc2020000},
+{0x10,0xda00247c},
+{0x14,0x8200400d},
+{0x18,0x81c3e008},
+{0x1c,0xc2220000},
+{0x20,0x9de3bf98},
+{0x24,0x833e201f},
+{0x28,0xd0002320},
+{0x2c,0x82204018},
+{0x30,0x80a22000},
+{0x34,0x02800016},
+{0x38,0x9b30601f},
+{0x3c,0x033fc000},
+{0x40,0xa0106020},
+{0x44,0xc200231c},
+{0x48,0x80a00001},
+{0x4c,0x82402000},
+{0x50,0x8088400d},
+{0x54,0xda002318},
+{0x58,0x821e000d},
+{0x5c,0x02800009},
+{0x60,0xb0086001},
+{0x64,0x80a0000d},
+{0x68,0x82603fff},
+{0x6c,0x7ffffa6a},
+{0x70,0xc2240000},
+{0x74,0xc2002318},
+{0x78,0x10800005},
+{0x7c,0xc2240000},
+{0xf0,0x48},
+{0x00,0x033fc000},
+{0x04,0x82106020},
+{0x08,0xf0204000},
+{0x0c,0x81c7e008},
+{0x10,0x81e80000},
+{0x14,0x9de3bf98},
+{0x18,0x7ffffa68},
+{0x1c,0x01000000},
+{0x20,0x033fc040},
+{0x24,0xe0002500},
+{0x28,0x8210600c},
+{0x2c,0x80a42026},
+{0x30,0x0880001e},
+{0x34,0xc0204000},
+{0x38,0x19169683},
+{0x3c,0x9a132300},
+{0x40,0xc2002f00},
+{0x44,0x80a0400d},
+{0x48,0x3280005b},
+{0x4c,0xc2002500},
+{0x50,0x9a1323fc},
+{0x54,0xc2002ffc},
+{0x58,0x80a0400d},
+{0x5c,0x32800056},
+{0x60,0xc2002500},
+{0x64,0xc0202584},
+{0x68,0xa2102000},
+{0x6c,0x832c6002},
+{0x70,0xc2006f04},
+{0x74,0x80a06000},
+{0x78,0x0280004e},
+{0x7c,0xa2046001},
+{0xf0,0x49},
+{0x00,0x9fc04000},
+{0x04,0x01000000},
+{0x08,0xc2002584},
+{0x0c,0x80a06000},
+{0x10,0x12800048},
+{0x14,0x80a4603b},
+{0x18,0x24bffff6},
+{0x1c,0x832c6002},
+{0x20,0x10800045},
+{0x24,0xc2002500},
+{0x28,0x80a42000},
+{0x2c,0x1280000c},
+{0x30,0x80a42014},
+{0x34,0x7ffffc72},
+{0x38,0x90102000},
+{0x3c,0x1b3fc200},
+{0x40,0xc2002330},
+{0x44,0x9a136074},
+{0x48,0xc2234000},
+{0x4c,0x7ffffc5b},
+{0x50,0x90102001},
+{0x54,0x10800035},
+{0x58,0xc2002fcc},
+{0x5c,0x1880000c},
+{0x60,0x80a42015},
+{0x64,0x808c2001},
+{0x68,0x32800033},
+{0x6c,0xc2002500},
+{0x70,0x90043ffe},
+{0x74,0x7ffffbf4},
+{0x78,0x91322001},
+{0x7c,0x7ffffb74},
+{0xf0,0x4a},
+{0x00,0x01000000},
+{0x04,0x1080002c},
+{0x08,0xc2002500},
+{0x0c,0x18800013},
+{0x10,0x80a42016},
+{0x14,0x11000019},
+{0x18,0x7ffffdaf},
+{0x1c,0x90122200},
+{0x20,0x033fc180},
+{0x24,0xda0025b0},
+{0x28,0x82106038},
+{0x2c,0xda204000},
+{0x30,0x033fc200},
+{0x34,0x82106074},
+{0x38,0xda00232c},
+{0x3c,0xda204000},
+{0x40,0x7ffffc3e},
+{0x44,0x90102000},
+{0x48,0xc200266c},
+{0x4c,0xc2202510},
+{0x50,0x10800016},
+{0x54,0xc2002fcc},
+{0x58,0x28800017},
+{0x5c,0xc2002500},
+{0x60,0x80a42026},
+{0x64,0x38800014},
+{0x68,0xc2002500},
+{0x6c,0x7ffffb3a},
+{0x70,0x23000019},
+{0x74,0x92146200},
+{0x78,0x7ffffd79},
+{0x7c,0x94043fea},
+{0xf0,0x4b},
+{0x00,0x80a42026},
+{0x04,0x3280000c},
+{0x08,0xc2002500},
+{0x0c,0x90146200},
+{0x10,0x7ffffd99},
+{0x14,0x92102008},
+{0x18,0xc2002fd8},
+{0x1c,0x80a06000},
+{0x20,0x22800005},
+{0x24,0xc2002500},
+{0x28,0x9fc04000},
+{0x2c,0x01000000},
+{0x30,0xc2002500},
+{0x34,0x80a40001},
+{0x38,0x1280000b},
+{0x3c,0x031fffff},
+{0x40,0x821063f0},
+{0x44,0x80a40001},
+{0x48,0x38800003},
+{0x4c,0x21040000},
+{0x50,0xa0042001},
+{0x54,0x033fc180},
+{0x58,0x82106034},
+{0x5c,0xe0204000},
+{0x60,0xe0202500},
+{0x64,0x81c7e008},
+{0x68,0x81e80000},
+{0x6c,0x81c3e008},
+{0x70,0x01000000},
+{0x74,0x03169696},
+{0x78,0xda002180},
+{0x7c,0x8210625a},
+{0xf0,0x4c},
+{0x00,0x80a34001},
+{0x04,0x94102000},
+{0x08,0x12800006},
+{0x0c,0x96102000},
+{0x10,0x033fc180},
+{0x14,0x82106030},
+{0x18,0x10800020},
+{0x1c,0xda204000},
+{0x20,0xc202c000},
+{0x24,0x9602e004},
+{0x28,0x80a2e4ff},
+{0x2c,0x08bffffd},
+{0x30,0x94028001},
+{0x34,0x96102d00},
+{0x38,0xd2002ff8},
+{0x3c,0x03000019},
+{0x40,0x80a2c009},
+{0x44,0x1a80000b},
+{0x48,0x901063ff},
+{0x4c,0xd802c000},
+{0x50,0x9602e004},
+{0x54,0x80a2c009},
+{0x58,0x9a402000},
+{0x5c,0x80a2000b},
+{0x60,0x82603fff},
+{0x64,0x808b4001},
+{0x68,0x12bffff9},
+{0x6c,0x9402800c},
+{0x70,0x03169696},
+{0x74,0x8210625a},
+{0x78,0x80a28001},
+{0x7c,0x033fc180},
+{0xf0,0x4d},
+{0x00,0x82106030},
+{0x04,0x02800005},
+{0x08,0xd4204000},
+{0x0c,0x03000008},
+{0x10,0x81c063a0},
+{0x14,0x90102001},
+{0x18,0x01000000},
+{0x1c,0x81c3e008},
+{0x20,0x01000000},
+{0x24,0x9de3bf98},
+{0x28,0x9e100018},
+{0x2c,0x0300001c},
+{0x30,0xb0100019},
+{0x34,0xba106200},
+{0x38,0xb6102000},
+{0x3c,0x832ee002},
+{0x40,0xb606e001},
+{0x44,0x80a6e373},
+{0x48,0x08bffffd},
+{0x4c,0xc020401d},
+{0x50,0xb6102000},
+{0x54,0xc20022fc},
+{0x58,0x80a6c001},
+{0x5c,0x1a80001c},
+{0x60,0x0300001c},
+{0x64,0xb210626c},
+{0x68,0xb4102000},
+{0x6c,0xc20022f8},
+{0x70,0x80a68001},
+{0x74,0x1a800011},
+{0x78,0x832ee002},
+{0x7c,0xb8004019},
+{0xf0,0x4e},
+{0x00,0xc200247c},
+{0x04,0xfa0ee380},
+{0x08,0x825e8001},
+{0x0c,0x8200401d},
+{0x10,0x82004001},
+{0x14,0xfa160001},
+{0x18,0xc213c001},
+{0x1c,0x8220401d},
+{0x20,0xc2270000},
+{0x24,0xb406a001},
+{0x28,0xc20022f8},
+{0x2c,0x80a68001},
+{0x30,0x0abffff4},
+{0x34,0xb8072068},
+{0x38,0xb606e001},
+{0x3c,0xc20022fc},
+{0x40,0x80a6c001},
+{0x44,0x0abfffea},
+{0x48,0xb4102000},
+{0x4c,0x81c7e008},
+{0x50,0x81e80000},
+{0x54,0x9de3bf98},
+{0x58,0x11000019},
+{0x5c,0xc2002fe4},
+{0x60,0x9fc04000},
+{0x64,0x90122200},
+{0x68,0xc200254c},
+{0x6c,0xda00259c},
+{0x70,0x1100001b},
+{0x74,0x98087ffd},
+{0x78,0x80886002},
+{0x7c,0x0280002a},
+{0xf0,0x4f},
+{0x00,0xda202550},
+{0x04,0xc2002664},
+{0x08,0x9a004001},
+{0x0c,0x9a034001},
+{0x10,0xc200259c},
+{0x14,0xb2006600},
+{0x18,0x9a03400d},
+{0x1c,0x82102061},
+{0x20,0x8220400d},
+{0x24,0x9b2e6007},
+{0x28,0x973b601f},
+{0x2c,0x8182e000},
+{0x30,0x01000000},
+{0x34,0x01000000},
+{0x38,0x01000000},
+{0x3c,0xb27b4001},
+{0x40,0xd820254c},
+{0x44,0xc2002fe4},
+{0x48,0x9fc04000},
+{0x4c,0x01000000},
+{0x50,0xe000259c},
+{0x54,0xc2002fe4},
+{0x58,0x9fc04000},
+{0x5c,0x11000015},
+{0x60,0x80a64010},
+{0x64,0x9a603fff},
+{0x68,0xc200259c},
+{0x6c,0x80a64001},
+{0x70,0x1100001c},
+{0x74,0x82603fff},
+{0x78,0x80934001},
+{0x7c,0x02800009},
+{0xf0,0x50},
+{0x00,0x901223c0},
+{0x04,0x7ffffa9f},
+{0x08,0x01000000},
+{0x0c,0x7ffffab0},
+{0x10,0x01000000},
+{0x14,0x82102015},
+{0x18,0x10800010},
+{0x1c,0xc2202500},
+{0x20,0xc020250c},
+{0x24,0x31000019},
+{0x28,0xc200250c},
+{0x2c,0xb0162200},
+{0x30,0x80a06000},
+{0x34,0x12800009},
+{0x38,0x33000015},
+{0x3c,0x031696a9},
+{0x40,0x821061a5},
+{0x44,0xc220250c},
+{0x48,0xc0202668},
+{0x4c,0xc0202664},
+{0x50,0x7ffffd2c},
+{0x54,0x81e80000},
+{0x58,0x01000000},
+{0x5c,0x81c7e008},
+{0x60,0x81e80000},
+{0x64,0x9de3bf18},
+{0x68,0x94100018},
+{0x6c,0x9a102000},
+{0x70,0x96102000},
+{0x74,0x98102000},
+{0x78,0x9e102000},
+{0x7c,0x8203000f},
+{0xf0,0x51},
+{0x00,0xf6086441},
+{0x04,0x80a6e000},
+{0x08,0x02800021},
+{0x0c,0xf4086440},
+{0x10,0xf40ea37f},
+{0x14,0xf60ee37f},
+{0x18,0xb2102000},
+{0x1c,0xb007bff8},
+{0x20,0xc200247c},
+{0x24,0x82584019},
+{0x28,0xba06c001},
+{0x2c,0x82068001},
+{0x30,0x82004001},
+{0x34,0xf8528001},
+{0x38,0xba07401d},
+{0x3c,0xc252801d},
+{0x40,0xb8270001},
+{0x44,0x80a66000},
+{0x48,0x02800007},
+{0x4c,0xf8263f80},
+{0x50,0xc2063f7c},
+{0x54,0x82a70001},
+{0x58,0x2c800003},
+{0x5c,0x9a234001},
+{0x60,0x9a034001},
+{0x64,0xc2002300},
+{0x68,0xb2066001},
+{0x6c,0x82007fff},
+{0x70,0x80a64001},
+{0x74,0x08bfffeb},
+{0x78,0xb0062004},
+{0x7c,0x9e03e001},
+{0xf0,0x52},
+{0x00,0x80a3e00a},
+{0x04,0x04bfffdf},
+{0x08,0x8203000f},
+{0x0c,0x9602e001},
+{0x10,0x80a2e001},
+{0x14,0x04bfffd9},
+{0x18,0x9803200c},
+{0x1c,0xda20259c},
+{0x20,0x81c7e008},
+{0x24,0x81e80000},
+{0x28,0x9de3bf98},
+{0x2c,0xc20021cc},
+{0x30,0x80a06000},
+{0x34,0x02800022},
+{0x38,0x9e100019},
+{0x3c,0x03003fc0},
+{0x40,0xba5e601a},
+{0x44,0xb92e2010},
+{0x48,0x9a1060ff},
+{0x4c,0xba074018},
+{0x50,0xb8070019},
+{0x54,0x0300001c},
+{0x58,0xb32f6002},
+{0x5c,0x98106200},
+{0x60,0xb6102007},
+{0x64,0xb52ee002},
+{0x68,0xc206a1b0},
+{0x6c,0x80a06000},
+{0x70,0x0280002e},
+{0x74,0xba08400d},
+{0x78,0x80a7401c},
+{0x7c,0x3280000e},
+{0xf0,0x53},
+{0x00,0xb686ffff},
+{0x04,0xfa0ea1b0},
+{0x08,0x80a76000},
+{0x0c,0x2280000d},
+{0x10,0xc2002568},
+{0x14,0xc206400c},
+{0x18,0x8258401d},
+{0x1c,0xbb38601f},
+{0x20,0xbb376019},
+{0x24,0x8200401d},
+{0x28,0x83386007},
+{0x2c,0x10800004},
+{0x30,0xc226400c},
+{0x34,0x1cbfffed},
+{0x38,0xb52ee002},
+{0x3c,0xc2002568},
+{0x40,0x80a06000},
+{0x44,0x1280002d},
+{0x48,0xb65be01a},
+{0x4c,0x8206c018},
+{0x50,0x3b00001c},
+{0x54,0x83286002},
+{0x58,0xba176200},
+{0x5c,0xf800401d},
+{0x60,0xc200251c},
+{0x64,0x80a70001},
+{0x68,0x04800024},
+{0x6c,0x01000000},
+{0x70,0xfa002540},
+{0x74,0x80a76000},
+{0x78,0x02800013},
+{0x7c,0x832e2010},
+{0xf0,0x54},
+{0x00,0xc20023c8},
+{0x04,0x80886100},
+{0x08,0x0280000f},
+{0x0c,0x832e2010},
+{0x10,0x80a7001d},
+{0x14,0x08800019},
+{0x18,0x8200400f},
+{0x1c,0x82207000},
+{0x20,0x10800010},
+{0x24,0xc22026e0},
+{0x28,0xba5be01a},
+{0x2c,0xba074018},
+{0x30,0x0300001c},
+{0x34,0xbb2f6002},
+{0x38,0x82106200},
+{0x3c,0x10bfffe0},
+{0x40,0xc0274001},
+{0x44,0xfa002514},
+{0x48,0x8200400f},
+{0x4c,0xb92f6002},
+{0x50,0x82207000},
+{0x54,0xc22726e0},
+{0x58,0xba076001},
+{0x5c,0xfa202514},
+{0x60,0x8206c018},
+{0x64,0x3b00001c},
+{0x68,0x83286002},
+{0x6c,0xba176200},
+{0x70,0xc200401d},
+{0x74,0xc2202540},
+{0x78,0x81c7e008},
+{0x7c,0x81e80000},
+{0xf0,0x55},
+{0x00,0x9de3bf98},
+{0x04,0xc2002304},
+{0x08,0x80a06000},
+{0x0c,0x02800020},
+{0x10,0x9e100019},
+{0x14,0xf80021d8},
+{0x18,0x80a72000},
+{0x1c,0x0280001c},
+{0x20,0x825e601a},
+{0x24,0x82004018},
+{0x28,0xb1286002},
+{0x2c,0x3b00001c},
+{0x30,0xc2002300},
+{0x34,0xb61762cc},
+{0x38,0xb41762d0},
+{0x3c,0xb21762d4},
+{0x40,0x80a3c001},
+{0x44,0x12800012},
+{0x48,0x9a176200},
+{0x4c,0xc206001a},
+{0x50,0xfa06001b},
+{0x54,0xba074001},
+{0x58,0xc2060019},
+{0x5c,0xba074001},
+{0x60,0xba5f401c},
+{0x64,0x833f601f},
+{0x68,0x83306019},
+{0x6c,0xba074001},
+{0x70,0xc206000d},
+{0x74,0xbb3f6007},
+{0x78,0x80a0401d},
+{0x7c,0x16800004},
+{0xf0,0x56},
+{0x00,0x82102001},
+{0x04,0xc220259c},
+{0x08,0x30800002},
+{0x0c,0xc020259c},
+{0x10,0x81c7e008},
+{0x14,0x81e80000},
+{0x18,0x9de3bf98},
+{0x1c,0xc2002588},
+{0x20,0x80a06000},
+{0x24,0x02800012},
+{0x28,0x3300001b},
+{0x2c,0xc2002594},
+{0x30,0x80a06000},
+{0x34,0x12800004},
+{0x38,0x90100019},
+{0x3c,0x7ffffc26},
+{0x40,0x01000000},
+{0x44,0xda002588},
+{0x48,0xc2002594},
+{0x4c,0x9a037fff},
+{0x50,0x82006001},
+{0x54,0xda202588},
+{0x58,0x7ffff9bf},
+{0x5c,0xc2202594},
+{0x60,0xf4002594},
+{0x64,0x7ffffbfe},
+{0x68,0x91e80008},
+{0x6c,0x01000000},
+{0x70,0x81c7e008},
+{0x74,0x81e80000},
+{0x78,0xc2002460},
+{0x7c,0x80a06000},
+{0xf0,0x57},
+{0x00,0x12800018},
+{0x04,0xda002298},
+{0x08,0xc2002588},
+{0x0c,0x80a06001},
+{0x10,0x12800015},
+{0x14,0x033fc200},
+{0x18,0xc2002208},
+{0x1c,0x80a06000},
+{0x20,0x22800007},
+{0x24,0xc2102548},
+{0x28,0xc2002558},
+{0x2c,0x80a06000},
+{0x30,0x22800007},
+{0x34,0xc0202598},
+{0x38,0xc2102548},
+{0x3c,0x80886001},
+{0x40,0x22800005},
+{0x44,0xc2002598},
+{0x48,0xc0202598},
+{0x4c,0x10800005},
+{0x50,0xda002234},
+{0x54,0x80a06000},
+{0x58,0x22800002},
+{0x5c,0xda00233c},
+{0x60,0x033fc200},
+{0x64,0x82106070},
+{0x68,0x81c3e008},
+{0x6c,0xda204000},
+{0x70,0x9de3bf98},
+{0x74,0xc2002588},
+{0x78,0x80a06000},
+{0x7c,0x0280000f},
+{0xf0,0x58},
+{0x00,0x1100001b},
+{0x04,0xc2102548},
+{0x08,0x80886001},
+{0x0c,0x2280000f},
+{0x10,0xc200258c},
+{0x14,0xc2002558},
+{0x18,0x80a06000},
+{0x1c,0x3280000b},
+{0x20,0xc200258c},
+{0x24,0xc2002594},
+{0x28,0x80a06001},
+{0x2c,0x32800007},
+{0x30,0xc200258c},
+{0x34,0x1100001b},
+{0x38,0xd0202590},
+{0x3c,0xc0202588},
+{0x40,0x10800014},
+{0x44,0xd2002594},
+{0x48,0x80a06000},
+{0x4c,0x1280000f},
+{0x50,0x82102001},
+{0x54,0xd2002598},
+{0x58,0xc2002554},
+{0x5c,0x80a24001},
+{0x60,0x1a800007},
+{0x64,0x11000013},
+{0x68,0xc220258c},
+{0x6c,0x82102001},
+{0x70,0xc2202584},
+{0x74,0x10800028},
+{0x78,0xc0202598},
+{0x7c,0x90122200},
+{0xf0,0x59},
+{0x00,0x10800004},
+{0x04,0xd0202590},
+{0x08,0x10800023},
+{0x0c,0xc2202584},
+{0x10,0x7ffffbd9},
+{0x14,0x01000000},
+{0x18,0x13000019},
+{0x1c,0xc2002fd0},
+{0x20,0x92126200},
+{0x24,0x9fc04000},
+{0x28,0xd0002590},
+{0x2c,0xc20026a0},
+{0x30,0x82087dff},
+{0x34,0xda08254e},
+{0x38,0x80a36000},
+{0x3c,0x12800006},
+{0x40,0xc22026a0},
+{0x44,0xc200218c},
+{0x48,0x80a06000},
+{0x4c,0x32800004},
+{0x50,0xc220256c},
+{0x54,0x82102080},
+{0x58,0xc220256c},
+{0x5c,0x033fc200},
+{0x60,0x82106030},
+{0x64,0xda004000},
+{0x68,0xc2002670},
+{0x6c,0x80a34001},
+{0x70,0x32800007},
+{0x74,0xc2002548},
+{0x78,0xc2002200},
+{0x7c,0x80a06000},
+{0xf0,0x5a},
+{0x00,0x02800005},
+{0x04,0x01000000},
+{0x08,0xc2002548},
+{0x0c,0x82106001},
+{0x10,0xc2202548},
+{0x14,0x81c7e008},
+{0x18,0x81e80000},
+{0x1c,0x1500003f},
+{0x20,0xd8002508},
+{0x24,0x8212a300},
+{0x28,0x9a0b0001},
+{0x2c,0x808b3f00},
+{0x30,0x02800015},
+{0x34,0x901020a5},
+{0x38,0xc200254c},
+{0x3c,0x8210400d},
+{0x40,0xc220254c},
+{0x44,0x1b3fc000},
+{0x48,0xc2002500},
+{0x4c,0x960b000d},
+{0x50,0x80a06026},
+{0x54,0xc0202508},
+{0x58,0x0880000b},
+{0x5c,0x033fffc0},
+{0x60,0x9a0b0001},
+{0x64,0x03168000},
+{0x68,0x80a2c001},
+{0x6c,0x12800006},
+{0x70,0x9412a3ff},
+{0x74,0xc2002548},
+{0x78,0x8208400a},
+{0x7c,0x8210400d},
+{0xf0,0x5b},
+{0x00,0xc2202548},
+{0x04,0x03000006},
+{0x08,0x81c062f4},
+{0x0c,0x01000000},
+{0x10,0x01000000},
+{0x14,0xda00247c},
+{0x18,0xc20022f8},
+{0x1c,0x8258400d},
+{0x20,0x83306001},
+{0x24,0x9a102000},
+{0x28,0x80a34001},
+{0x2c,0x1a800015},
+{0x30,0x031fffdf},
+{0x34,0x961063ff},
+{0x38,0x98036001},
+{0x3c,0x80a26008},
+{0x40,0x04800006},
+{0x44,0x9b2b6002},
+{0x48,0xc202000d},
+{0x4c,0x83306001},
+{0x50,0x10800003},
+{0x54,0x8208400b},
+{0x58,0xc202000d},
+{0x5c,0x82584009},
+{0x60,0xc222000d},
+{0x64,0xda00247c},
+{0x68,0xc20022f8},
+{0x6c,0x8258400d},
+{0x70,0x83306001},
+{0x74,0x80a30001},
+{0x78,0x0abffff0},
+{0x7c,0x9a10000c},
+{0xf0,0x5c},
+{0x00,0x81c3e008},
+{0x04,0x01000000},
+{0x08,0x9de3bf98},
+{0x0c,0xe6002460},
+{0x10,0x80a4e000},
+{0x14,0x0280006f},
+{0x18,0x01000000},
+{0x1c,0xc2002594},
+{0x20,0xee002588},
+{0x24,0x9805c001},
+{0x28,0xc2002554},
+{0x2c,0x80a30001},
+{0x30,0x12800068},
+{0x34,0x01000000},
+{0x38,0xda002598},
+{0x3c,0xc200258c},
+{0x40,0x8200400d},
+{0x44,0x80a0400c},
+{0x48,0x02800004},
+{0x4c,0x80a36000},
+{0x50,0x12800060},
+{0x54,0x01000000},
+{0x58,0x96102001},
+{0x5c,0xe20022fc},
+{0x60,0x80a2c011},
+{0x64,0x1880002d},
+{0x68,0x9e102000},
+{0x6c,0xe40022f8},
+{0x70,0x1300001c},
+{0x74,0x94102001},
+{0x78,0x80a28012},
+{0x7c,0x18800020},
+{0xf0,0x5d},
+{0x00,0xa0102000},
+{0x04,0x832ae002},
+{0x08,0x98006068},
+{0x0c,0xac126200},
+{0x10,0xaa126198},
+{0x14,0xa8126268},
+{0x18,0xd00022f8},
+{0x1c,0xda030016},
+{0x20,0x80a34013},
+{0x24,0x26800013},
+{0x28,0x9402a001},
+{0x2c,0x80a2a001},
+{0x30,0x22800007},
+{0x34,0xc20022f8},
+{0x38,0xc2030015},
+{0x3c,0x80a34001},
+{0x40,0x2480000c},
+{0x44,0x9402a001},
+{0x48,0xc20022f8},
+{0x4c,0x80a28001},
+{0x50,0x22800007},
+{0x54,0xa0042001},
+{0x58,0xc2030014},
+{0x5c,0x80a34001},
+{0x60,0x26800004},
+{0x64,0x9402a001},
+{0x68,0xa0042001},
+{0x6c,0x9402a001},
+{0x70,0x80a28008},
+{0x74,0x08bfffea},
+{0x78,0x98032068},
+{0x7c,0x80a4000f},
+{0xf0,0x5e},
+{0x00,0x34800002},
+{0x04,0x9e100010},
+{0x08,0x9602e001},
+{0x0c,0x80a2c011},
+{0x10,0x28bfffda},
+{0x14,0x94102001},
+{0x18,0x96102000},
+{0x1c,0xc20ae464},
+{0x20,0x80a06000},
+{0x24,0x22800006},
+{0x28,0x9602e001},
+{0x2c,0x80a3c001},
+{0x30,0x34800007},
+{0x34,0xc20ae278},
+{0x38,0x9602e001},
+{0x3c,0x80a2e003},
+{0x40,0x24bffff8},
+{0x44,0xc20ae464},
+{0x48,0x30800022},
+{0x4c,0xda00256c},
+{0x50,0x8258400d},
+{0x54,0x83306007},
+{0x58,0xc220256c},
+{0x5c,0xe00ae468},
+{0x60,0x80a42000},
+{0x64,0x0280001b},
+{0x68,0x80a5e000},
+{0x6c,0x32800006},
+{0x70,0xc200258c},
+{0x74,0x1100001b},
+{0x78,0x7fffff87},
+{0x7c,0xd2002594},
+{0xf0,0x5f},
+{0x00,0xc200258c},
+{0x04,0x80a06000},
+{0x08,0x32800007},
+{0x0c,0xc2002588},
+{0x10,0x11000013},
+{0x14,0x90122200},
+{0x18,0x7fffff7f},
+{0x1c,0xd2002598},
+{0x20,0xc2002588},
+{0x24,0x82004010},
+{0x28,0xc2202588},
+{0x2c,0xda00258c},
+{0x30,0xc2002554},
+{0x34,0x80a34001},
+{0x38,0x18800005},
+{0x3c,0x82102001},
+{0x40,0x82034010},
+{0x44,0xc220258c},
+{0x48,0x82102001},
+{0x4c,0xc2202584},
+{0x50,0x81c7e008},
+{0x54,0x81e80000},
+{0x58,0x9de3bf98},
+{0x5c,0xc20025a8},
+{0x60,0x82006001},
+{0x64,0xda002310},
+{0x68,0x80a0400d},
+{0x6c,0x0a80005f},
+{0x70,0xc22025a8},
+{0x74,0xd800227c},
+{0x78,0x80a32000},
+{0x7c,0x02800037},
+{0xf0,0x60},
+{0x00,0xc02025a8},
+{0x04,0x1b000007},
+{0x08,0x9a1363ff},
+{0x0c,0x8333200d},
+{0x10,0x9208400d},
+{0x14,0xc200258c},
+{0x18,0x80a06000},
+{0x1c,0x03000013},
+{0x20,0xa4106200},
+{0x24,0x900b000d},
+{0x28,0xa2102000},
+{0x2c,0x02800003},
+{0x30,0x94102000},
+{0x34,0x2500001b},
+{0x38,0xda0022f8},
+{0x3c,0xc200247c},
+{0x40,0x9a5b4001},
+{0x44,0xa0102000},
+{0x48,0x80a4000d},
+{0x4c,0x1a800013},
+{0x50,0x03000019},
+{0x54,0x9e106200},
+{0x58,0x9610000d},
+{0x5c,0x9a040010},
+{0x60,0xc214800d},
+{0x64,0x80a24001},
+{0x68,0xa2400011},
+{0x6c,0xc213400f},
+{0x70,0x80a04008},
+{0x74,0x0a800005},
+{0x78,0xa0042001},
+{0x7c,0x80a04009},
+{0xf0,0x61},
+{0x00,0x08800004},
+{0x04,0x80a4000b},
+{0x08,0x9402a001},
+{0x0c,0x80a4000b},
+{0x10,0x0abffff4},
+{0x14,0x9a040010},
+{0x18,0xa133201a},
+{0x1c,0x80a44010},
+{0x20,0x14800003},
+{0x24,0x9a102001},
+{0x28,0x9a102000},
+{0x2c,0x80a28010},
+{0x30,0x14800003},
+{0x34,0x82102001},
+{0x38,0x82102000},
+{0x3c,0x80934001},
+{0x40,0x22800007},
+{0x44,0xc2002274},
+{0x48,0x033fc180},
+{0x4c,0x1b008000},
+{0x50,0x8210603c},
+{0x54,0xda204000},
+{0x58,0xc2002274},
+{0x5c,0x80a06000},
+{0x60,0x02800022},
+{0x64,0xa2102000},
+{0x68,0xc20023d4},
+{0x6c,0x80a44001},
+{0x70,0xa4102000},
+{0x74,0x1a800016},
+{0x78,0xa0102000},
+{0x7c,0xc200247c},
+{0xf0,0x62},
+{0x00,0x80a40001},
+{0x04,0x3a80000f},
+{0x08,0xa404a001},
+{0x0c,0x7ffff8de},
+{0x10,0x90100010},
+{0x14,0x92100008},
+{0x18,0x7ffff879},
+{0x1c,0x90100012},
+{0x20,0x0300003f},
+{0x24,0xda002274},
+{0x28,0x821063ff},
+{0x2c,0x9a0b4001},
+{0x30,0x80a2000d},
+{0x34,0xa2400011},
+{0x38,0x10bffff1},
+{0x3c,0xa0042001},
+{0x40,0xc20023d4},
+{0x44,0x10bfffec},
+{0x48,0x80a48001},
+{0x4c,0xc2102274},
+{0x50,0x80a44001},
+{0x54,0x08800005},
+{0x58,0x033fc180},
+{0x5c,0x1b004000},
+{0x60,0x8210603c},
+{0x64,0xda204000},
+{0x68,0x81c7e008},
+{0x6c,0x81e80000},
+{0x70,0x9de3bf98},
+{0x74,0xda002310},
+{0x78,0x80a36000},
+{0x7c,0x02800056},
+{0xf0,0x63},
+{0x00,0x01000000},
+{0x04,0xc200254c},
+{0x08,0x80886100},
+{0x0c,0x12800052},
+{0x10,0x01000000},
+{0x14,0xc2002578},
+{0x18,0x82006001},
+{0x1c,0x80a0400d},
+{0x20,0x0a80004d},
+{0x24,0xc2202578},
+{0x28,0xa4102000},
+{0x2c,0xc20023d4},
+{0x30,0x80a48001},
+{0x34,0xc0202578},
+{0x38,0xa2102000},
+{0x3c,0x1a80002a},
+{0x40,0xa72c6002},
+{0x44,0xc204e364},
+{0x48,0x80a06000},
+{0x4c,0x02800022},
+{0x50,0xa0102000},
+{0x54,0xc20022fc},
+{0x58,0x80a40001},
+{0x5c,0x1a80001e},
+{0x60,0x15000019},
+{0x64,0xc2002548},
+{0x68,0x80886020},
+{0x6c,0x03000013},
+{0x70,0x9a106200},
+{0x74,0xc20c2380},
+{0x78,0x90100011},
+{0x7c,0x9412a200},
+{0xf0,0x64},
+{0x00,0x02800007},
+{0x04,0x920860ff},
+{0x08,0xc200258c},
+{0x0c,0x80a06000},
+{0x10,0x32800002},
+{0x14,0x1b00001b},
+{0x18,0x9410000d},
+{0x1c,0x7ffff86b},
+{0x20,0xa0042001},
+{0x24,0xc204e364},
+{0x28,0xda002348},
+{0x2c,0x98020001},
+{0x30,0x82034001},
+{0x34,0x80a20001},
+{0x38,0x38bfffe7},
+{0x3c,0xa404a001},
+{0x40,0x80a3000d},
+{0x44,0x3abfffe5},
+{0x48,0xc20022fc},
+{0x4c,0x10bfffe2},
+{0x50,0xa404a001},
+{0x54,0xa2046001},
+{0x58,0xc20023d4},
+{0x5c,0x10bfffd8},
+{0x60,0x80a44001},
+{0x64,0xd8002574},
+{0x68,0x80a0000c},
+{0x6c,0x9a603fff},
+{0x70,0x80a00012},
+{0x74,0x82603fff},
+{0x78,0x808b4001},
+{0x7c,0x0280000a},
+{0xf0,0x65},
+{0x00,0x80a4a000},
+{0x04,0xda002548},
+{0x08,0x83336005},
+{0x0c,0x82086001},
+{0x10,0x82186001},
+{0x14,0x83286005},
+{0x18,0x9a0b7fdf},
+{0x1c,0x9a134001},
+{0x20,0xda202548},
+{0x24,0x12800004},
+{0x28,0x82032001},
+{0x2c,0x10800003},
+{0x30,0xc0202574},
+{0x34,0xc2202574},
+{0x38,0xc2002574},
+{0x3c,0x80a06002},
+{0x40,0x08800005},
+{0x44,0x1b000040},
+{0x48,0xc200254c},
+{0x4c,0x8210400d},
+{0x50,0xc220254c},
+{0x54,0x81c7e008},
+{0x58,0x81e80000},
+{0x5c,0x9de3bf58},
+{0x60,0xc2002548},
+{0x64,0x80886001},
+{0x68,0x1280006f},
+{0x6c,0x01000000},
+{0x70,0xfa002500},
+{0x74,0xc20021f4},
+{0x78,0x80a74001},
+{0x7c,0x1880006a},
+{0xf0,0x66},
+{0x00,0x01000000},
+{0x04,0xc200254c},
+{0x08,0x8330600b},
+{0x0c,0x82086001},
+{0x10,0x80a00001},
+{0x14,0x9a603fff},
+{0x18,0x9403400d},
+{0x1c,0xc252a210},
+{0x20,0x80a06000},
+{0x24,0x02800060},
+{0x28,0x8207bfb8},
+{0x2c,0xb810200f},
+{0x30,0xc0204000},
+{0x34,0xb8873fff},
+{0x38,0x1cbffffe},
+{0x3c,0x82006004},
+{0x40,0xb0102001},
+{0x44,0xc2002300},
+{0x48,0x80a60001},
+{0x4c,0x1880003e},
+{0x50,0xb4102000},
+{0x54,0x9610201a},
+{0x58,0xb4102001},
+{0x5c,0xc2002308},
+{0x60,0x80a68001},
+{0x64,0x18800032},
+{0x68,0x0300001c},
+{0x6c,0xbb2ae002},
+{0x70,0x82106200},
+{0x74,0xba074001},
+{0x78,0xb2076004},
+{0x7c,0xfa52a210},
+{0xf0,0x67},
+{0x00,0xc2064000},
+{0x04,0x80a0401d},
+{0x08,0x36800025},
+{0x0c,0xb406a001},
+{0x10,0x832ea018},
+{0x14,0xbb2e2010},
+{0x18,0x8200401d},
+{0x1c,0x9e006001},
+{0x20,0xb8102000},
+{0x24,0x98102001},
+{0x28,0xb607bfb8},
+{0x2c,0xbb2f2002},
+{0x30,0xc20f67f8},
+{0x34,0x80a68001},
+{0x38,0x1280000f},
+{0x3c,0xb8072001},
+{0x40,0xc20f67f9},
+{0x44,0x80a60001},
+{0x48,0x3280000c},
+{0x4c,0xc21767f8},
+{0x50,0xd826c000},
+{0x54,0xc21767fa},
+{0x58,0x80a061fe},
+{0x5c,0x38800010},
+{0x60,0xb406a001},
+{0x64,0xc20767f8},
+{0x68,0x82006001},
+{0x6c,0x1080000b},
+{0x70,0xc22767f8},
+{0x74,0xc21767f8},
+{0x78,0x80a06000},
+{0x7c,0x12800005},
+{0xf0,0x68},
+{0x00,0x80a7200f},
+{0x04,0xd826c000},
+{0x08,0x10800004},
+{0x0c,0xde2767f8},
+{0x10,0x08bfffe7},
+{0x14,0xb606e004},
+{0x18,0xb406a001},
+{0x1c,0xc2002308},
+{0x20,0x80a68001},
+{0x24,0x08bfffd6},
+{0x28,0xb2066004},
+{0x2c,0xb0062001},
+{0x30,0xc2002300},
+{0x34,0x80a60001},
+{0x38,0x08bfffc8},
+{0x3c,0x9602e01a},
+{0x40,0xb4102000},
+{0x44,0xb8102000},
+{0x48,0xb607bff8},
+{0x4c,0xbb2f2002},
+{0x50,0x8207401b},
+{0x54,0xc2007fc0},
+{0x58,0x80a06000},
+{0x5c,0x32800004},
+{0x60,0xfa1767fa},
+{0x64,0x10800005},
+{0x68,0xc02767f8},
+{0x6c,0xc20b63cc},
+{0x70,0x80a74001},
+{0x74,0xb466bfff},
+{0x78,0xb8072001},
+{0x7c,0x80a7200f},
+{0xf0,0x69},
+{0x00,0x08bffff4},
+{0x04,0xbb2f2002},
+{0x08,0xc20b63ce},
+{0x0c,0x80a68001},
+{0x10,0x08800005},
+{0x14,0x3b000200},
+{0x18,0xc200254c},
+{0x1c,0x8210401d},
+{0x20,0xc220254c},
+{0x24,0x81c7e008},
+{0x28,0x81e80000},
+{0x2c,0x9de3bf98},
+{0x30,0xd8002200},
+{0x34,0x80a32000},
+{0x38,0x1280000a},
+{0x3c,0x0300001c},
+{0x40,0xc2002548},
+{0x44,0x82087ffb},
+{0x48,0xc2202548},
+{0x4c,0x033fc180},
+{0x50,0x8210602c},
+{0x54,0xc0204000},
+{0x58,0x1080004d},
+{0x5c,0xc020253c},
+{0x60,0x82106200},
+{0x64,0xc0202504},
+{0x68,0x9e006068},
+{0x6c,0xb0102001},
+{0x70,0x10800016},
+{0x74,0xda102238},
+{0x78,0xf2002308},
+{0x7c,0x80a6c019},
+{0xf0,0x6a},
+{0x00,0x38800011},
+{0x04,0xb0062001},
+{0x08,0xf410223a},
+{0x0c,0xba03e004},
+{0x10,0xc2074000},
+{0x14,0xb606e001},
+{0x18,0xba076004},
+{0x1c,0x80a0401a},
+{0x20,0x04800005},
+{0x24,0xb820401a},
+{0x28,0xc2002504},
+{0x2c,0x8200401c},
+{0x30,0xc2202504},
+{0x34,0x80a6c019},
+{0x38,0x28bffff7},
+{0x3c,0xc2074000},
+{0x40,0xb0062001},
+{0x44,0x9e03e068},
+{0x48,0x80a36000},
+{0x4c,0x32800003},
+{0x50,0x80a6000d},
+{0x54,0x80a6000c},
+{0x58,0x08bfffe8},
+{0x5c,0xb6102001},
+{0x60,0xfa10223e},
+{0x64,0xc2002504},
+{0x68,0x80a0401d},
+{0x6c,0x3480000a},
+{0x70,0xc2002548},
+{0x74,0xfa10223c},
+{0x78,0x80a76000},
+{0x7c,0x2280000b},
+{0xf0,0x6b},
+{0x00,0xc2002548},
+{0x04,0xc2082517},
+{0x08,0x80a0401d},
+{0x0c,0x0a800007},
+{0x10,0xc2002548},
+{0x14,0x80886008},
+{0x18,0x22800008},
+{0x1c,0xc200253c},
+{0x20,0x10800008},
+{0x24,0xc020253c},
+{0x28,0x80886008},
+{0x2c,0x22800005},
+{0x30,0xc020253c},
+{0x34,0xc200253c},
+{0x38,0x82006001},
+{0x3c,0xc220253c},
+{0x40,0xfa00253c},
+{0x44,0xc2002290},
+{0x48,0x80a74001},
+{0x4c,0x0880000b},
+{0x50,0xfa002548},
+{0x54,0x83376003},
+{0x58,0x82086001},
+{0x5c,0x82186001},
+{0x60,0x83286002},
+{0x64,0xba0f7ffb},
+{0x68,0xba174001},
+{0x6c,0xfa202548},
+{0x70,0xc020253c},
+{0x74,0xfa002548},
+{0x78,0xbb376002},
+{0x7c,0x033fc180},
+{0xf0,0x6c},
+{0x00,0xba0f6001},
+{0x04,0x8210602c},
+{0x08,0xfa204000},
+{0x0c,0x81c7e008},
+{0x10,0x81e80000},
+{0x14,0x9de3bf38},
+{0x18,0xc2002548},
+{0x1c,0x80886400},
+{0x20,0x12800096},
+{0x24,0x1b00003f},
+{0x28,0xc2002350},
+{0x2c,0x9a1363ff},
+{0x30,0xba08400d},
+{0x34,0xa4102001},
+{0x38,0xda002300},
+{0x3c,0x80a4800d},
+{0x40,0x18800055},
+{0x44,0xa3306010},
+{0x48,0xae10201a},
+{0x4c,0xac10201a},
+{0x50,0xaa102000},
+{0x54,0xa8102000},
+{0x58,0xa6102000},
+{0x5c,0x80a46000},
+{0x60,0x0280002c},
+{0x64,0xa0102000},
+{0x68,0x0300001c},
+{0x6c,0x96106200},
+{0x70,0x92102000},
+{0x74,0x9807bf98},
+{0x78,0x8204c009},
+{0x7c,0xda086440},
+{0xf0,0x6d},
+{0x00,0x8205800d},
+{0x04,0x80a36000},
+{0x08,0x02800008},
+{0x0c,0x83286002},
+{0x10,0xc200400b},
+{0x14,0xc2230000},
+{0x18,0x92026001},
+{0x1c,0x80a2600b},
+{0x20,0x04bffff6},
+{0x24,0x98032004},
+{0x28,0x7ffff5cb},
+{0x2c,0x9007bf98},
+{0x30,0x80a74011},
+{0x34,0x1480000b},
+{0x38,0x9210001d},
+{0x3c,0x832f6002},
+{0x40,0x8200401e},
+{0x44,0x9a007f98},
+{0x48,0xc2034000},
+{0x4c,0x92026001},
+{0x50,0xa0040001},
+{0x54,0x80a24011},
+{0x58,0x04bffffc},
+{0x5c,0x9a036004},
+{0x60,0x8224401d},
+{0x64,0x82006001},
+{0x68,0x9b3c201f},
+{0x6c,0x81836000},
+{0x70,0x01000000},
+{0x74,0x01000000},
+{0x78,0x01000000},
+{0x7c,0xa07c0001},
+{0xf0,0x6e},
+{0x00,0xc25021ae},
+{0x04,0x80a40001},
+{0x08,0x26800002},
+{0x0c,0xa0100001},
+{0x10,0x92102000},
+{0x14,0x1500001c},
+{0x18,0x82050009},
+{0x1c,0xda086440},
+{0x20,0x8205c00d},
+{0x24,0x92026001},
+{0x28,0x9612a200},
+{0x2c,0x80a36000},
+{0x30,0x0280000e},
+{0x34,0x99286002},
+{0x38,0xc20023c8},
+{0x3c,0x83306011},
+{0x40,0xda03000b},
+{0x44,0x80886001},
+{0x48,0x02800005},
+{0x4c,0x9a234010},
+{0x50,0xc20ca2af},
+{0x54,0x825b4001},
+{0x58,0x9b386007},
+{0x5c,0x80a2600b},
+{0x60,0x04bfffee},
+{0x64,0xda23000b},
+{0x68,0xaa056001},
+{0x6c,0xa604e00c},
+{0x70,0x80a56001},
+{0x74,0x04bfffba},
+{0x78,0xa805200c},
+{0x7c,0xa404a001},
+{0xf0,0x6f},
+{0x00,0xc2002300},
+{0x04,0x80a48001},
+{0x08,0xac05a01a},
+{0x0c,0x08bfffb1},
+{0x10,0xae05e01a},
+{0x14,0xc2082247},
+{0x18,0x80a06000},
+{0x1c,0x02800037},
+{0x20,0x01000000},
+{0x24,0xc20022f8},
+{0x28,0x80a48001},
+{0x2c,0x18800033},
+{0x30,0xa05ca068},
+{0x34,0xa2100010},
+{0x38,0x92102001},
+{0x3c,0xc20022fc},
+{0x40,0x80a24001},
+{0x44,0x1880000e},
+{0x48,0x0300001c},
+{0x4c,0x82106200},
+{0x50,0x82044001},
+{0x54,0x9a006004},
+{0x58,0x9807bf98},
+{0x5c,0xc2034000},
+{0x60,0xc2230000},
+{0x64,0x92026001},
+{0x68,0xc20022fc},
+{0x6c,0x80a24001},
+{0x70,0x9a036004},
+{0x74,0x08bffffa},
+{0x78,0x98032004},
+{0x7c,0x9007bf98},
+{0xf0,0x70},
+{0x00,0x7ffff575},
+{0x04,0xd20022fc},
+{0x08,0xc2082247},
+{0x0c,0x83286002},
+{0x10,0x8200401e},
+{0x14,0xda007f98},
+{0x18,0x80a36000},
+{0x1c,0x26800012},
+{0x20,0xa404a001},
+{0x24,0x92102001},
+{0x28,0xc20022fc},
+{0x2c,0x80a24001},
+{0x30,0x1880000c},
+{0x34,0x0300001c},
+{0x38,0x96106200},
+{0x3c,0x98042004},
+{0x40,0xc203000b},
+{0x44,0x8220400d},
+{0x48,0xc223000b},
+{0x4c,0x92026001},
+{0x50,0xc20022fc},
+{0x54,0x80a24001},
+{0x58,0x08bffffa},
+{0x5c,0x98032004},
+{0x60,0xa404a001},
+{0x64,0xc20022f8},
+{0x68,0x80a48001},
+{0x6c,0xa2046068},
+{0x70,0x08bfffd2},
+{0x74,0xa0042068},
+{0x78,0x81c7e008},
+{0x7c,0x81e80000},
+{0xf0,0x71},
+{0x00,0x9de3bf18},
+{0x04,0xe2502458},
+{0x08,0x80a46000},
+{0x0c,0x02800058},
+{0x10,0x01000000},
+{0x14,0xc20022f8},
+{0x18,0x80a44001},
+{0x1c,0x1a800054},
+{0x20,0xa0102001},
+{0x24,0xc20022fc},
+{0x28,0x80a40001},
+{0x2c,0x18800050},
+{0x30,0xe450245a},
+{0x34,0x96102001},
+{0x38,0xc20022f8},
+{0x3c,0x80a2c001},
+{0x40,0x1880000f},
+{0x44,0x0300001c},
+{0x48,0x9b2c2002},
+{0x4c,0x82106200},
+{0x50,0x9a034001},
+{0x54,0x9a036068},
+{0x58,0x9807bf78},
+{0x5c,0xc2034000},
+{0x60,0xc2230000},
+{0x64,0x9602e001},
+{0x68,0xc20022f8},
+{0x6c,0x80a2c001},
+{0x70,0x9a036068},
+{0x74,0x08bffffa},
+{0x78,0x98032004},
+{0x7c,0x9007bf78},
+{0xf0,0x72},
+{0x00,0x7ffff535},
+{0x04,0xd20022f8},
+{0x08,0x96100012},
+{0x0c,0x80a48011},
+{0x10,0x1480000b},
+{0x14,0x94102000},
+{0x18,0x832ca002},
+{0x1c,0x8200401e},
+{0x20,0x9a007f78},
+{0x24,0xc2034000},
+{0x28,0x9602e001},
+{0x2c,0x94028001},
+{0x30,0x80a2c011},
+{0x34,0x04bffffc},
+{0x38,0x9a036004},
+{0x3c,0x82244012},
+{0x40,0x82006001},
+{0x44,0x9b3aa01f},
+{0x48,0x81836000},
+{0x4c,0x01000000},
+{0x50,0x01000000},
+{0x54,0x01000000},
+{0x58,0x947a8001},
+{0x5c,0xc25021ac},
+{0x60,0x80a28001},
+{0x64,0x26800002},
+{0x68,0x94100001},
+{0x6c,0x96102001},
+{0x70,0xc20022f8},
+{0x74,0x80a2c001},
+{0x78,0x18800018},
+{0x7c,0x9b2c2002},
+{0xf0,0x73},
+{0x00,0x0300001c},
+{0x04,0x92106200},
+{0x08,0x98036068},
+{0x0c,0xc2030009},
+{0x10,0x9a20400a},
+{0x14,0xda230009},
+{0x18,0xc20023c8},
+{0x1c,0x83306012},
+{0x20,0x80886001},
+{0x24,0x02800009},
+{0x28,0x9602e001},
+{0x2c,0xc20c22af},
+{0x30,0x825b4001},
+{0x34,0x9b38601f},
+{0x38,0x9b336019},
+{0x3c,0x8200400d},
+{0x40,0x83386007},
+{0x44,0xc2230009},
+{0x48,0xc20022f8},
+{0x4c,0x80a2c001},
+{0x50,0x08bfffef},
+{0x54,0x98032068},
+{0x58,0xa0042001},
+{0x5c,0xc20022fc},
+{0x60,0x80a40001},
+{0x64,0x08bfffb5},
+{0x68,0x96102001},
+{0x6c,0x81c7e008},
+{0x70,0x81e80000},
+{0x74,0xc2082673},
+{0x78,0xda00256c},
+{0x7c,0x82006001},
+{0xf0,0x74},
+{0x00,0xd808257f},
+{0x04,0x9a5b4001},
+{0x08,0x98032001},
+{0x0c,0x81800000},
+{0x10,0x01000000},
+{0x14,0x01000000},
+{0x18,0x01000000},
+{0x1c,0x9a73400c},
+{0x20,0xda20256c},
+{0x24,0x96102000},
+{0x28,0x832ae002},
+{0x2c,0xd800256c},
+{0x30,0xda1063b6},
+{0x34,0x9a5b400c},
+{0x38,0x9b336007},
+{0x3c,0x9602e001},
+{0x40,0x80a2e003},
+{0x44,0x04bffff9},
+{0x48,0xda206520},
+{0x4c,0xc20023c0},
+{0x50,0x80a06000},
+{0x54,0x02800007},
+{0x58,0x82103001},
+{0x5c,0xc2002200},
+{0x60,0x80a06000},
+{0x64,0x22800005},
+{0x68,0xc2002540},
+{0x6c,0x82103001},
+{0x70,0xc220252c},
+{0x74,0xc2002540},
+{0x78,0x80a06000},
+{0x7c,0x02800005},
+{0xf0,0x75},
+{0x00,0xc2002288},
+{0x04,0x9b306001},
+{0x08,0x83306002},
+{0x0c,0x8200400d},
+{0x10,0xc220251c},
+{0x14,0x03000007},
+{0x18,0x81c06244},
+{0x1c,0x01000000},
+{0x20,0x01000000},
+{0x24,0x9de3bf98},
+{0x28,0xc2002308},
+{0x2c,0x82006001},
+{0x30,0xe00022fc},
+{0x34,0x80a40001},
+{0x38,0x0a80001e},
+{0x3c,0xa4102001},
+{0x40,0xc20022f8},
+{0x44,0x80a48001},
+{0x48,0x38800017},
+{0x4c,0xc2002308},
+{0x50,0x832c2002},
+{0x54,0xa2006068},
+{0x58,0xc2002fec},
+{0x5c,0x92100012},
+{0x60,0x80a06000},
+{0x64,0xa404a001},
+{0x68,0x02800004},
+{0x6c,0x90100010},
+{0x70,0x9fc04000},
+{0x74,0x01000000},
+{0x78,0x0300001c},
+{0x7c,0x98106200},
+{0xf0,0x76},
+{0x00,0xda04400c},
+{0x04,0x82106204},
+{0x08,0xda244001},
+{0x0c,0xc024400c},
+{0x10,0xc20022f8},
+{0x14,0x80a48001},
+{0x18,0x08bffff0},
+{0x1c,0xa2046068},
+{0x20,0xc2002308},
+{0x24,0xa0043fff},
+{0x28,0x10bfffe3},
+{0x2c,0x82006001},
+{0x30,0xc2002300},
+{0x34,0x82006001},
+{0x38,0xe40022f8},
+{0x3c,0x80a48001},
+{0x40,0x0a800020},
+{0x44,0xa65ca01a},
+{0x48,0xa0102001},
+{0x4c,0xc2002308},
+{0x50,0x80a40001},
+{0x54,0x18800015},
+{0x58,0x832ce002},
+{0x5c,0xa2006004},
+{0x60,0xc2002fec},
+{0x64,0x90100010},
+{0x68,0x80a06000},
+{0x6c,0xa0042001},
+{0x70,0x02800004},
+{0x74,0x92100012},
+{0x78,0x9fc04000},
+{0x7c,0x01000000},
+{0xf0,0x77},
+{0x00,0x0300001c},
+{0x04,0x98106200},
+{0x08,0xda04400c},
+{0x0c,0x82106268},
+{0x10,0xda244001},
+{0x14,0xc024400c},
+{0x18,0xc2002308},
+{0x1c,0x80a40001},
+{0x20,0x08bffff0},
+{0x24,0xa2046004},
+{0x28,0xc2002300},
+{0x2c,0xa404bfff},
+{0x30,0x82006001},
+{0x34,0x80a48001},
+{0x38,0x1abfffe4},
+{0x3c,0xa604ffe6},
+{0x40,0x81c7e008},
+{0x44,0x81e80000},
+{0x48,0x9de3bf98},
+{0x4c,0xc2002548},
+{0x50,0x80886100},
+{0x54,0xac102000},
+{0x58,0x128000cb},
+{0x5c,0xa6102000},
+{0x60,0xc2002568},
+{0x64,0x80a06000},
+{0x68,0x02800004},
+{0x6c,0xa2102001},
+{0x70,0x82007fff},
+{0x74,0xc2202568},
+{0x78,0xc2002300},
+{0x7c,0x80a44001},
+{0xf0,0x78},
+{0x00,0x388000a5},
+{0x04,0xda002530},
+{0x08,0xae10201a},
+{0x0c,0xa4102001},
+{0x10,0xc2002308},
+{0x14,0x80a48001},
+{0x18,0x1880008e},
+{0x1c,0x9b2de002},
+{0x20,0x03000050},
+{0x24,0xaa044001},
+{0x28,0xa8036004},
+{0x2c,0xc2002514},
+{0x30,0x80a06009},
+{0x34,0x18800097},
+{0x38,0x0300001c},
+{0x3c,0x82106200},
+{0x40,0xda050001},
+{0x44,0xc2002474},
+{0x48,0x80a34001},
+{0x4c,0x0680007b},
+{0x50,0x03000040},
+{0x54,0x90100012},
+{0x58,0x7ffff843},
+{0x5c,0x92100011},
+{0x60,0x80a22000},
+{0x64,0x02800075},
+{0x68,0x03000040},
+{0x6c,0xc2002ff0},
+{0x70,0x80a06000},
+{0x74,0x2280000a},
+{0x78,0xc2002fe0},
+{0x7c,0x90100012},
+{0xf0,0x79},
+{0x00,0x9fc04000},
+{0x04,0x92100011},
+{0x08,0xc200259c},
+{0x0c,0x80a06000},
+{0x10,0x1280006a},
+{0x14,0x03000040},
+{0x18,0xc2002fe0},
+{0x1c,0x80a06000},
+{0x20,0x2280000b},
+{0x24,0xc2002ff4},
+{0x28,0x90100012},
+{0x2c,0x92100011},
+{0x30,0x9fc04000},
+{0x34,0xd4002470},
+{0x38,0xc200259c},
+{0x3c,0x80a06000},
+{0x40,0x1280005e},
+{0x44,0x03000040},
+{0x48,0xc2002ff4},
+{0x4c,0x80a06000},
+{0x50,0x02800006},
+{0x54,0xa0102000},
+{0x58,0x90100012},
+{0x5c,0x9fc04000},
+{0x60,0x92100011},
+{0x64,0xe000259c},
+{0x68,0x90100012},
+{0x6c,0x92100011},
+{0x70,0x94100010},
+{0x74,0x7ffff862},
+{0x78,0xd6002470},
+{0x7c,0x80a22000},
+{0xf0,0x7a},
+{0x00,0x0280004e},
+{0x04,0x03000040},
+{0x08,0xc2002fe0},
+{0x0c,0x80a06000},
+{0x10,0x02800007},
+{0x14,0x90100012},
+{0x18,0x92100011},
+{0x1c,0x9fc04000},
+{0x20,0x94102100},
+{0x24,0x10800004},
+{0x28,0x94100010},
+{0x2c,0xc020259c},
+{0x30,0x94100010},
+{0x34,0x90100012},
+{0x38,0x92100011},
+{0x3c,0x7ffff850},
+{0x40,0x96102100},
+{0x44,0x80a22000},
+{0x48,0x22800011},
+{0x4c,0xc2002514},
+{0x50,0xc200259c},
+{0x54,0x80a06000},
+{0x58,0x3280000d},
+{0x5c,0xc2002514},
+{0x60,0xc2002280},
+{0x64,0xd8002514},
+{0x68,0xc2202568},
+{0x6c,0x9b2ca010},
+{0x70,0x832b2002},
+{0x74,0x9a034011},
+{0x78,0xda2066e0},
+{0x7c,0x98032001},
+{0xf0,0x7b},
+{0x00,0xd8202514},
+{0x04,0x10800006},
+{0x08,0xac05a001},
+{0x0c,0x9b286002},
+{0x10,0xea2366e0},
+{0x14,0x82006001},
+{0x18,0xc2202514},
+{0x1c,0xc2002514},
+{0x20,0x80a0600a},
+{0x24,0x12800025},
+{0x28,0x03000040},
+{0x2c,0x0300001c},
+{0x30,0x9e106200},
+{0x34,0xe60026e0},
+{0x38,0x90102001},
+{0x3c,0x932a2002},
+{0x40,0xd40266e0},
+{0x44,0x820aafff},
+{0x48,0x9932a010},
+{0x4c,0x980b2fff},
+{0x50,0x9a0cefff},
+{0x54,0x9734e010},
+{0x58,0x8258601a},
+{0x5c,0x8200400c},
+{0x60,0x960aefff},
+{0x64,0x9a5b601a},
+{0x68,0x83286002},
+{0x6c,0x9a03400b},
+{0x70,0xd800400f},
+{0x74,0x9b2b6002},
+{0x78,0xc203400f},
+{0x7c,0x80a30001},
+{0xf0,0x7c},
+{0x00,0x36800004},
+{0x04,0xd42266dc},
+{0x08,0xe62266dc},
+{0x0c,0xa610000a},
+{0x10,0x90022001},
+{0x14,0xda002514},
+{0x18,0x80a2000d},
+{0x1c,0x2abfffe9},
+{0x20,0x932a2002},
+{0x24,0x832b6002},
+{0x28,0xc02066e0},
+{0x2c,0x82037fff},
+{0x30,0xc2202514},
+{0x34,0x03000040},
+{0x38,0xaa054001},
+{0x3c,0xa404a001},
+{0x40,0xc2002308},
+{0x44,0x80a48001},
+{0x48,0x08bfff79},
+{0x4c,0xa8052004},
+{0x50,0xa2046001},
+{0x54,0xc2002300},
+{0x58,0x80a44001},
+{0x5c,0x08bfff6c},
+{0x60,0xae05e01a},
+{0x64,0x80a4e000},
+{0x68,0x2280000b},
+{0x6c,0xda002530},
+{0x70,0xda002514},
+{0x74,0x80a36009},
+{0x78,0x38800007},
+{0x7c,0xda002530},
+{0xf0,0x7d},
+{0x00,0x832b6002},
+{0x04,0xe62066e0},
+{0x08,0x82036001},
+{0x0c,0xc2202514},
+{0x10,0xda002530},
+{0x14,0x80a5800d},
+{0x18,0x14800006},
+{0x1c,0x82100016},
+{0x20,0xc2002514},
+{0x24,0x80a34001},
+{0x28,0x28800002},
+{0x2c,0x8210000d},
+{0x30,0x80a5a000},
+{0x34,0x02800004},
+{0x38,0xc2202530},
+{0x3c,0x1080000a},
+{0x40,0xc20021f8},
+{0x44,0x80a06000},
+{0x48,0x22800009},
+{0x4c,0xc2002530},
+{0x50,0xc20025ac},
+{0x54,0x80a06000},
+{0x58,0x22800004},
+{0x5c,0xc0202530},
+{0x60,0x82006001},
+{0x64,0xc22025ac},
+{0x68,0xc2002530},
+{0x6c,0x80a06000},
+{0x70,0x02800005},
+{0x74,0x01000000},
+{0x78,0xc2002548},
+{0x7c,0x82106040},
+{0xf0,0x7e},
+{0x00,0xc2202548},
+{0x04,0x81c7e008},
+{0x08,0x81e80000},
+{0x0c,0xd2002208},
+{0x10,0x80a26000},
+{0x14,0x0280001a},
+{0x18,0x01000000},
+{0x1c,0xc2102548},
+{0x20,0x80886001},
+{0x24,0x12800016},
+{0x28,0x01000000},
+{0x2c,0xc2002514},
+{0x30,0x80a06000},
+{0x34,0x12800007},
+{0x38,0xc2002558},
+{0x3c,0x80a06000},
+{0x40,0x0280000f},
+{0x44,0x9a007fff},
+{0x48,0x1080000d},
+{0x4c,0xda202558},
+{0x50,0x15200040},
+{0x54,0x1b3fc200},
+{0x58,0x9812a001},
+{0x5c,0x80a06000},
+{0x60,0x12800006},
+{0x64,0x96136070},
+{0x68,0xd8234000},
+{0x6c,0xc2002298},
+{0x70,0xc222c000},
+{0x74,0xd4234000},
+{0x78,0xd2202558},
+{0x7c,0x81c3e008},
+{0xf0,0x7f},
+{0x00,0x01000000},
+{0x04,0x82220009},
+{0x08,0x9a58400a},
+{0x0c,0x833b601f},
+{0x10,0x80a20009},
+{0x14,0x83306019},
+{0x18,0x04800004},
+{0x1c,0x90102000},
+{0x20,0x82034001},
+{0x24,0x91386007},
+{0x28,0x81c3e008},
+{0x2c,0x01000000},
+{0x30,0x9de3bf98},
+{0x34,0xc20022f8},
+{0x38,0x80a07fff},
+{0x3c,0x0280001d},
+{0x40,0xaa102001},
+{0x44,0xa810201a},
+{0x48,0xa6102068},
+{0x4c,0x2300001c},
+{0x50,0x82146208},
+{0x54,0xa4146204},
+{0x58,0xd204c001},
+{0x5c,0xd408228c},
+{0x60,0x7fffffe9},
+{0x64,0xd004c012},
+{0x68,0x82146200},
+{0x6c,0xd024c001},
+{0x70,0xe0002308},
+{0x74,0xa0050010},
+{0x78,0xa12c2002},
+{0x7c,0xa21461fc},
+{0xf0,0x80},
+{0x00,0xd0040001},
+{0x04,0xd2040011},
+{0x08,0x7fffffdf},
+{0x0c,0xd408228d},
+{0x10,0xd0240012},
+{0x14,0xc20022f8},
+{0x18,0xaa056001},
+{0x1c,0x82006001},
+{0x20,0x80a54001},
+{0x24,0xa604e068},
+{0x28,0x08bfffe9},
+{0x2c,0xa805201a},
+{0x30,0xa6102001},
+{0x34,0xc2002308},
+{0x38,0x80a4c001},
+{0x3c,0x1880001a},
+{0x40,0x2300001c},
+{0x44,0xa12ce002},
+{0x48,0x821462d0},
+{0x4c,0xa4146268},
+{0x50,0xd2040001},
+{0x54,0xd408228e},
+{0x58,0x7fffffcb},
+{0x5c,0xd0040012},
+{0x60,0x82146200},
+{0x64,0xd0240001},
+{0x68,0xe0002300},
+{0x6c,0xa05c201a},
+{0x70,0xa0040013},
+{0x74,0xa12c2002},
+{0x78,0xa2146198},
+{0x7c,0xd0040001},
+{0xf0,0x81},
+{0x00,0xd2040011},
+{0x04,0x7fffffc0},
+{0x08,0xd408228f},
+{0x0c,0xd0240012},
+{0x10,0xa604e001},
+{0x14,0xc2002308},
+{0x18,0x80a4c001},
+{0x1c,0x08bfffea},
+{0x20,0x2300001c},
+{0x24,0x81c7e008},
+{0x28,0x81e80000},
+{0x2c,0x9de3bf88},
+{0x30,0xc2002fe4},
+{0x34,0x9fc04000},
+{0x38,0xd0002590},
+{0x3c,0xda002550},
+{0x40,0x832b6004},
+{0x44,0x8220400d},
+{0x48,0xe000259c},
+{0x4c,0x82040001},
+{0x50,0x83306004},
+{0x54,0xc2202550},
+{0x58,0x11000019},
+{0x5c,0xc2002fe4},
+{0x60,0x9fc04000},
+{0x64,0x90122200},
+{0x68,0xc2002308},
+{0x6c,0xda002300},
+{0x70,0x9a5b4001},
+{0x74,0xc200259c},
+{0x78,0x8200400d},
+{0x7c,0xc220259c},
+{0xf0,0x82},
+{0x00,0xda00259c},
+{0x04,0xc2002550},
+{0x08,0x80a34001},
+{0x0c,0x28800011},
+{0x10,0xc2002548},
+{0x14,0xc200259c},
+{0x18,0x80a04010},
+{0x1c,0x0880000d},
+{0x20,0xc2002548},
+{0x24,0x80a42000},
+{0x28,0x0280000a},
+{0x2c,0x01000000},
+{0x30,0x82087f7f},
+{0x34,0xc2202548},
+{0x38,0xc2002668},
+{0x3c,0x80a06000},
+{0x40,0x26800006},
+{0x44,0xc0202668},
+{0x48,0x10800005},
+{0x4c,0xc208254e},
+{0x50,0x82106080},
+{0x54,0xc2202548},
+{0x58,0xc208254e},
+{0x5c,0x80a00001},
+{0x60,0x82602000},
+{0x64,0xa0087ffe},
+{0x68,0xd8002548},
+{0x6c,0x83332010},
+{0x70,0x80886001},
+{0x74,0x02800004},
+{0x78,0xa0042003},
+{0x7c,0x1080001d},
+{0xf0,0x83},
+{0x00,0xa0102000},
+{0x04,0x808b2001},
+{0x08,0x1280003f},
+{0x0c,0x03000007},
+{0x10,0xda0026a0},
+{0x14,0x808b4001},
+{0x18,0x3280003c},
+{0x1c,0xc0202538},
+{0x20,0xda002664},
+{0x24,0xc20021dc},
+{0x28,0x80a34001},
+{0x2c,0x2a800008},
+{0x30,0xc2002514},
+{0x34,0xc200254c},
+{0x38,0x8330600e},
+{0x3c,0x80886001},
+{0x40,0x1280000a},
+{0x44,0x808b2040},
+{0x48,0xc2002514},
+{0x4c,0x80a06000},
+{0x50,0x22800009},
+{0x54,0xc20c2314},
+{0x58,0x808b2080},
+{0x5c,0x22800006},
+{0x60,0xc20c2314},
+{0x64,0x808b2040},
+{0x68,0x32800028},
+{0x6c,0xc0202538},
+{0x70,0xc20c2314},
+{0x74,0x80a06000},
+{0x78,0x22800024},
+{0x7c,0xc0202538},
+{0xf0,0x84},
+{0x00,0xc2002538},
+{0x04,0x82006001},
+{0x08,0xc2202538},
+{0x0c,0xda0c2314},
+{0x10,0x80a0400d},
+{0x14,0x0680001d},
+{0x18,0x01000000},
+{0x1c,0xc0202538},
+{0x20,0xc20c234c},
+{0x24,0xc227bfec},
+{0x28,0xc20c230c},
+{0x2c,0xc227bff0},
+{0x30,0xa0102000},
+{0x34,0xc2002308},
+{0x38,0x80a40001},
+{0x3c,0x1a800013},
+{0x40,0x01000000},
+{0x44,0xc20c2380},
+{0x48,0xc227bfe8},
+{0x4c,0xa2102000},
+{0x50,0xc2002300},
+{0x54,0x80a44001},
+{0x58,0x3a800006},
+{0x5c,0xa0042001},
+{0x60,0x7ffff80e},
+{0x64,0x9007bfe8},
+{0x68,0x10bffffa},
+{0x6c,0xa2046001},
+{0x70,0xc2002308},
+{0x74,0x80a40001},
+{0x78,0x2abffff4},
+{0x7c,0xc20c2380},
+{0xf0,0x85},
+{0x00,0x30800002},
+{0x04,0xc0202538},
+{0x08,0x81c7e008},
+{0x0c,0x81e80000},
+{0x10,0x9de3bf88},
+{0x14,0xd8082246},
+{0x18,0x80a32000},
+{0x1c,0x22800043},
+{0x20,0xc020255c},
+{0x24,0xda00254c},
+{0x28,0x83336018},
+{0x2c,0x80886001},
+{0x30,0x12800007},
+{0x34,0x03004000},
+{0x38,0xc2002568},
+{0x3c,0x80a06000},
+{0x40,0x22800008},
+{0x44,0xc2002540},
+{0x48,0x03004000},
+{0x4c,0x822b4001},
+{0x50,0xc220254c},
+{0x54,0xc027bfec},
+{0x58,0x1080000e},
+{0x5c,0xc027bff0},
+{0x60,0x80a06000},
+{0x64,0x32800031},
+{0x68,0xc020255c},
+{0x6c,0xc200255c},
+{0x70,0x82006001},
+{0x74,0x80a0400c},
+{0x78,0x0a80002c},
+{0x7c,0xc220255c},
+{0xf0,0x86},
+{0x00,0xc2082244},
+{0x04,0xc227bfec},
+{0x08,0xc2082245},
+{0x0c,0xc227bff0},
+{0x10,0xc2002308},
+{0x14,0xa0006001},
+{0x18,0xc20022fc},
+{0x1c,0x80a40001},
+{0x20,0x1880000c},
+{0x24,0xa2102001},
+{0x28,0xc20c237f},
+{0x2c,0xc227bfe8},
+{0x30,0xc20022f8},
+{0x34,0x80a44001},
+{0x38,0x38bffff8},
+{0x3c,0xa0042001},
+{0x40,0x7ffff7d6},
+{0x44,0x9007bfe8},
+{0x48,0x10bffffa},
+{0x4c,0xa2046001},
+{0x50,0xa0102001},
+{0x54,0xc2002308},
+{0x58,0x80a40001},
+{0x5c,0x38800013},
+{0x60,0xc020255c},
+{0x64,0xd80c237f},
+{0x68,0xd827bfe8},
+{0x6c,0xc200247c},
+{0x70,0xda002300},
+{0x74,0x8258400d},
+{0x78,0x98030001},
+{0x7c,0xd827bfe8},
+{0xf0,0x87},
+{0x00,0xc2002300},
+{0x04,0xa2006001},
+{0x08,0xc20022f8},
+{0x0c,0x80a44001},
+{0x10,0x38bffff1},
+{0x14,0xa0042001},
+{0x18,0x7ffff7c0},
+{0x1c,0x9007bfe8},
+{0x20,0x10bffffa},
+{0x24,0xa2046001},
+{0x28,0x81c7e008},
+{0x2c,0x81e80000},
+{0x30,0x9de3bf80},
+{0x34,0x03003fc0},
+{0x38,0x82106001},
+{0x3c,0xc227bff4},
+{0x40,0xc227bff0},
+{0x44,0xa4102000},
+{0x48,0xc2002514},
+{0x4c,0x80a48001},
+{0x50,0x1a800025},
+{0x54,0xa2102000},
+{0x58,0x8207bff8},
+{0x5c,0x9a044001},
+{0x60,0xa12c6002},
+{0x64,0xa0040001},
+{0x68,0xd44b7ff9},
+{0x6c,0x90100012},
+{0x70,0x7ffff719},
+{0x74,0xd24b7ff8},
+{0x78,0xa2046001},
+{0x7c,0x80a46003},
+{0xf0,0x88},
+{0x00,0x04bffff6},
+{0x04,0xd0243fe8},
+{0x08,0xc2002fe8},
+{0x0c,0x80a06000},
+{0x10,0x02800005},
+{0x14,0xda07bfe4},
+{0x18,0x9fc04000},
+{0x1c,0x9007bfe0},
+{0x20,0xda07bfe4},
+{0x24,0xc207bfec},
+{0x28,0x83286010},
+{0x2c,0x9b2b6018},
+{0x30,0x9a034001},
+{0x34,0xc207bfe0},
+{0x38,0x83286008},
+{0x3c,0x9a034001},
+{0x40,0xc207bfe8},
+{0x44,0x9a034001},
+{0x48,0x832ca002},
+{0x4c,0xda206708},
+{0x50,0xa404a001},
+{0x54,0xc2002514},
+{0x58,0x80a48001},
+{0x5c,0x0abfffdf},
+{0x60,0xa2102000},
+{0x64,0x81c7e008},
+{0x68,0x81e80000},
+{0x6c,0x9de3bf98},
+{0x70,0x90102000},
+{0x74,0xc2002514},
+{0x78,0x80a20001},
+{0x7c,0x1a800075},
+{0xf0,0x89},
+{0x00,0x92102000},
+{0x04,0xbb2a2002},
+{0x08,0xf20f6708},
+{0x0c,0xc20f6709},
+{0x10,0x80a64001},
+{0x14,0x9e102000},
+{0x18,0x9a102000},
+{0x1c,0x14800022},
+{0x20,0x98102000},
+{0x24,0x0300001c},
+{0x28,0xa0106200},
+{0x2c,0xb85e601a},
+{0x30,0xc20f670b},
+{0x34,0xf60f670a},
+{0x38,0x80a6c001},
+{0x3c,0x14800014},
+{0x40,0x8207001b},
+{0x44,0x83286002},
+{0x48,0xb4004010},
+{0x4c,0x94066001},
+{0x50,0xd60a670b},
+{0x54,0xfa068000},
+{0x58,0x8206e001},
+{0x5c,0xb6100001},
+{0x60,0xb05f4001},
+{0x64,0xb406a004},
+{0x68,0x80a76000},
+{0x6c,0x04800005},
+{0x70,0x825f400a},
+{0x74,0x9a034001},
+{0x78,0x98030018},
+{0x7c,0x9e03c01d},
+{0xf0,0x8a},
+{0x00,0x80a6c00b},
+{0x04,0x24bffff5},
+{0x08,0xfa068000},
+{0x0c,0xbb2a2002},
+{0x10,0xb2066001},
+{0x14,0xc20f6709},
+{0x18,0x80a64001},
+{0x1c,0x04bfffe5},
+{0x20,0xb807201a},
+{0x24,0x832b6006},
+{0x28,0xb92b2006},
+{0x2c,0x9b38601f},
+{0x30,0x81836000},
+{0x34,0x01000000},
+{0x38,0x01000000},
+{0x3c,0x01000000},
+{0x40,0xb678400f},
+{0x44,0xfa0266e0},
+{0x48,0x833f201f},
+{0x4c,0x81806000},
+{0x50,0x01000000},
+{0x54,0x01000000},
+{0x58,0x01000000},
+{0x5c,0xb87f000f},
+{0x60,0xbb37600c},
+{0x64,0x808f6001},
+{0x68,0x9a06ffa0},
+{0x6c,0x02800007},
+{0x70,0x98073fa0},
+{0x74,0xc200237c},
+{0x78,0x80a06000},
+{0x7c,0x22800003},
+{0xf0,0x8b},
+{0x00,0x9a06ff60},
+{0x04,0x98073f60},
+{0x08,0x80a36000},
+{0x0c,0x24800002},
+{0x10,0x9a102001},
+{0x14,0x80a32000},
+{0x18,0x24800002},
+{0x1c,0x98102001},
+{0x20,0xfa0022f8},
+{0x24,0x832f6006},
+{0x28,0x80a34001},
+{0x2c,0x3a800002},
+{0x30,0x9a007fff},
+{0x34,0xc20022fc},
+{0x38,0x83286006},
+{0x3c,0x80a30001},
+{0x40,0x3a800002},
+{0x44,0x98007fff},
+{0x48,0xc20021e0},
+{0x4c,0x80a06000},
+{0x50,0x22800012},
+{0x54,0x9e102000},
+{0x58,0x80a76040},
+{0x5c,0x3880000f},
+{0x60,0x9e102000},
+{0x64,0x81800000},
+{0x68,0x01000000},
+{0x6c,0x01000000},
+{0x70,0x01000000},
+{0x74,0x9ef3c001},
+{0x78,0x12800004},
+{0x7c,0x80a3e00f},
+{0xf0,0x8c},
+{0x00,0x10800006},
+{0x04,0x9e102001},
+{0x08,0x34800004},
+{0x0c,0x9e10200f},
+{0x10,0x10800003},
+{0x14,0x832b6010},
+{0x18,0x832b6010},
+{0x1c,0x8200400c},
+{0x20,0xbb2be01c},
+{0x24,0xba074001},
+{0x28,0xf80266e0},
+{0x2c,0x0300003c},
+{0x30,0xb80f0001},
+{0x34,0xba07401c},
+{0x38,0xfa2266e0},
+{0x3c,0x90022001},
+{0x40,0xc2002514},
+{0x44,0x80a20001},
+{0x48,0x0abfff8f},
+{0x4c,0x92026004},
+{0x50,0x7ffff529},
+{0x54,0x91e8205a},
+{0x58,0x01000000},
+{0x5c,0x9de3bf98},
+{0x60,0xd8002548},
+{0x64,0x808b2001},
+{0x68,0x12800080},
+{0x6c,0x01000000},
+{0x70,0xc208254d},
+{0x74,0x80a06000},
+{0x78,0x1280007c},
+{0x7c,0x01000000},
+{0xf0,0x8d},
+{0x00,0xc208254e},
+{0x04,0x80a06000},
+{0x08,0x02800078},
+{0x0c,0x01000000},
+{0x10,0xc2002554},
+{0x14,0x825860fa},
+{0x18,0xda002500},
+{0x1c,0x80a34001},
+{0x20,0x0a800072},
+{0x24,0x01000000},
+{0x28,0xd6002668},
+{0x2c,0x80a2e000},
+{0x30,0x1480001c},
+{0x34,0x8202ffff},
+{0x38,0xc2002514},
+{0x3c,0x80a06001},
+{0x40,0x3280006a},
+{0x44,0xc0202668},
+{0x48,0xc20026e0},
+{0x4c,0x80a06000},
+{0x50,0x12800004},
+{0x54,0x808b2040},
+{0x58,0x10800064},
+{0x5c,0xc0202668},
+{0x60,0x32800006},
+{0x64,0xd800239c},
+{0x68,0x80a2e000},
+{0x6c,0x0680000d},
+{0x70,0x8202e001},
+{0x74,0xd800239c},
+{0x78,0x0300003f},
+{0x7c,0x9b332010},
+{0xf0,0x8e},
+{0x00,0x821063ff},
+{0x04,0x980b0001},
+{0x08,0x9a38000d},
+{0x0c,0x9a23400c},
+{0x10,0x80a2c00d},
+{0x14,0x06800005},
+{0x18,0x03296956},
+{0x1c,0x8202ffff},
+{0x20,0x10800052},
+{0x24,0xc2202668},
+{0x28,0x9a10625a},
+{0x2c,0xc200250c},
+{0x30,0x80a0400d},
+{0x34,0x02800004},
+{0x38,0xa0102000},
+{0x3c,0xda20250c},
+{0x40,0xc0202664},
+{0x44,0x832c2002},
+{0x48,0x92006620},
+{0x4c,0xc2006620},
+{0x50,0x901026e0},
+{0x54,0x80a06000},
+{0x58,0x0280000d},
+{0x5c,0xa0042001},
+{0x60,0x7ffff571},
+{0x64,0x01000000},
+{0x68,0xc2002300},
+{0x6c,0xda002308},
+{0x70,0x82584001},
+{0x74,0x9a5b400d},
+{0x78,0x8200400d},
+{0x7c,0x83286006},
+{0xf0,0x8f},
+{0x00,0x80a20001},
+{0x04,0x0a800039},
+{0x08,0x01000000},
+{0x0c,0x80a4200f},
+{0x10,0x08bfffee},
+{0x14,0x832c2002},
+{0x18,0x030041eb},
+{0x1c,0xc2202668},
+{0x20,0xa010200f},
+{0x24,0x9b2c2002},
+{0x28,0xc203661c},
+{0x2c,0xa0843fff},
+{0x30,0x12bffffd},
+{0x34,0xc2236620},
+{0x38,0xda002664},
+{0x3c,0xc20026e0},
+{0x40,0xc2202620},
+{0x44,0x80a3600f},
+{0x48,0x14800003},
+{0x4c,0x9010200f},
+{0x50,0x9010000d},
+{0x54,0x03000019},
+{0x58,0xa2106200},
+{0x5c,0x1f000015},
+{0x60,0x0300003f},
+{0x64,0xa61063ff},
+{0x68,0x92022001},
+{0x6c,0xa0102000},
+{0x70,0xa410000f},
+{0x74,0x972c2002},
+{0x78,0x8203c00b},
+{0x7c,0xda106002},
+{0xf0,0x90},
+{0x00,0x9804400b},
+{0x04,0xd4132002},
+{0x08,0xc213c00b},
+{0x0c,0xd814400b},
+{0x10,0x82584008},
+{0x14,0x9a5b4008},
+{0x18,0x8200400c},
+{0x1c,0x9a03400a},
+{0x20,0x81800000},
+{0x24,0x01000000},
+{0x28,0x01000000},
+{0x2c,0x01000000},
+{0x30,0x82704009},
+{0x34,0x81800000},
+{0x38,0x01000000},
+{0x3c,0x01000000},
+{0x40,0x01000000},
+{0x44,0x9a734009},
+{0x48,0x83286010},
+{0x4c,0x9a0b4013},
+{0x50,0x8200400d},
+{0x54,0xa0042001},
+{0x58,0x80a4217f},
+{0x5c,0x08bfffe6},
+{0x60,0xc222c012},
+{0x64,0xd2202664},
+{0x68,0x81c7e008},
+{0x6c,0x81e80000},
+{0x70,0x9de3bf98},
+{0x74,0xa2102000},
+{0x78,0xc2002514},
+{0x7c,0x80a44001},
+{0xf0,0x91},
+{0x00,0xa0102000},
+{0x04,0x1a800012},
+{0x08,0x832c2002},
+{0x0c,0x920066e0},
+{0x10,0xc20066e0},
+{0x14,0x80a06000},
+{0x18,0x02800009},
+{0x1c,0x90100018},
+{0x20,0x7ffff521},
+{0x24,0x01000000},
+{0x28,0x82102001},
+{0x2c,0x80a20019},
+{0x30,0x1a800003},
+{0x34,0x83284010},
+{0x38,0xa2144001},
+{0x3c,0xa0042001},
+{0x40,0xc2002514},
+{0x44,0x10bffff0},
+{0x48,0x80a40001},
+{0x4c,0x81c7e008},
+{0x50,0x91e80011},
+{0x54,0x9de3bf90},
+{0x58,0x03003fc0},
+{0x5c,0x82106001},
+{0x60,0xc227bff0},
+{0x64,0xc027bff4},
+{0x68,0xa0102000},
+{0x6c,0x8207bff8},
+{0x70,0x82040001},
+{0x74,0xd2487ff9},
+{0x78,0xd0487ff8},
+{0x7c,0x90060008},
+{0xf0,0x92},
+{0x00,0x92064009},
+{0x04,0x94102000},
+{0x08,0x7ffff55d},
+{0x0c,0x9610001a},
+{0x10,0x80a22000},
+{0x14,0x02800004},
+{0x18,0xa0042001},
+{0x1c,0x10800006},
+{0x20,0xb0102001},
+{0x24,0x80a42004},
+{0x28,0x04bffff2},
+{0x2c,0x8207bff8},
+{0x30,0xb0102000},
+{0x34,0x81c7e008},
+{0x38,0x81e80000},
+{0x3c,0x9de3bf90},
+{0x40,0x03003fc0},
+{0x44,0x82106001},
+{0x48,0xc227bff0},
+{0x4c,0xc027bff4},
+{0x50,0xda002500},
+{0x54,0xc20022d0},
+{0x58,0x80a34001},
+{0x5c,0xb8102000},
+{0x60,0xba102000},
+{0x64,0x18800006},
+{0x68,0xae102000},
+{0x6c,0xc2002548},
+{0x70,0x80886001},
+{0x74,0x22800004},
+{0x78,0xc200254c},
+{0x7c,0xba102001},
+{0xf0,0x93},
+{0x00,0xc200254c},
+{0x04,0x80886200},
+{0x08,0x32800010},
+{0x0c,0xc20026a0},
+{0x10,0x03296956},
+{0x14,0xda00250c},
+{0x18,0x8210625a},
+{0x1c,0x80a34001},
+{0x20,0x12800006},
+{0x24,0xc20023c8},
+{0x28,0x80886800},
+{0x2c,0x32800007},
+{0x30,0xc20026a0},
+{0x34,0xc20023c8},
+{0x38,0x80886400},
+{0x3c,0x22800013},
+{0x40,0xec0022ac},
+{0x44,0xc20026a0},
+{0x48,0x80886200},
+{0x4c,0x12800009},
+{0x50,0xb8102001},
+{0x54,0xc2002fd0},
+{0x58,0xd0002590},
+{0x5c,0x9fc04000},
+{0x60,0x13000015},
+{0x64,0xc20026a0},
+{0x68,0x82106200},
+{0x6c,0xc22026a0},
+{0x70,0x10800006},
+{0x74,0xec0023a0},
+{0x78,0x03000080},
+{0x7c,0x82134001},
+{0xf0,0x94},
+{0x00,0x1080007d},
+{0x04,0xc220254c},
+{0x08,0x7ffff43b},
+{0x0c,0x901020aa},
+{0x10,0xaa102000},
+{0x14,0xa12d6003},
+{0x18,0xc2042730},
+{0x1c,0x80a06000},
+{0x20,0x22800072},
+{0x24,0xaa056001},
+{0x28,0x80a56000},
+{0x2c,0x12800008},
+{0x30,0x80a76000},
+{0x34,0xc2002540},
+{0x38,0x80a06000},
+{0x3c,0x1280000c},
+{0x40,0x29200000},
+{0x44,0x1080000a},
+{0x48,0xa8102000},
+{0x4c,0x02800005},
+{0x50,0x90042730},
+{0x54,0xc0242734},
+{0x58,0x10800063},
+{0x5c,0xc0242730},
+{0x60,0x7fffff84},
+{0x64,0x92100016},
+{0x68,0xa8100008},
+{0x6c,0x80a52000},
+{0x70,0x1280000b},
+{0x74,0xae15c014},
+{0x78,0xc2142734},
+{0x7c,0x80a06000},
+{0xf0,0x95},
+{0x00,0x22800058},
+{0x04,0xc0242734},
+{0x08,0xc2042734},
+{0x0c,0x1b3fffc0},
+{0x10,0x8200400d},
+{0x14,0x10800054},
+{0x18,0xc2242734},
+{0x1c,0xc2142736},
+{0x20,0x80a06000},
+{0x24,0x0280000a},
+{0x28,0x80a56000},
+{0x2c,0xc2042734},
+{0x30,0x82007fff},
+{0x34,0xc2242734},
+{0x38,0xc2142736},
+{0x3c,0x80a06000},
+{0x40,0x3280004a},
+{0x44,0xaa056001},
+{0x48,0x80a56000},
+{0x4c,0x1280000c},
+{0x50,0x1b004000},
+{0x54,0xc200254c},
+{0x58,0x8210400d},
+{0x5c,0x10800042},
+{0x60,0xc220254c},
+{0x64,0xc200254c},
+{0x68,0x1b000080},
+{0x6c,0x8210400d},
+{0x70,0xc220254c},
+{0x74,0x10800037},
+{0x78,0xc0202570},
+{0x7c,0xda00254c},
+{0xf0,0x96},
+{0x00,0x83336019},
+{0x04,0x80886001},
+{0x08,0x12bfffbc},
+{0x0c,0x80a72000},
+{0x10,0x02bfffba},
+{0x14,0xa2102000},
+{0x18,0xc2002514},
+{0x1c,0x80a44001},
+{0x20,0x1a80002c},
+{0x24,0x83350011},
+{0x28,0x80886001},
+{0x2c,0x02800027},
+{0x30,0x9b2c6002},
+{0x34,0xc20366e0},
+{0x38,0x9b306016},
+{0x3c,0x82086fff},
+{0x40,0x83386006},
+{0x44,0x9a0b603f},
+{0x48,0xa4006001},
+{0x4c,0xa6036001},
+{0x50,0x92100013},
+{0x54,0xd410246e},
+{0x58,0x7fffff5f},
+{0x5c,0x90100012},
+{0x60,0x80a22000},
+{0x64,0x12800011},
+{0x68,0x82102001},
+{0x6c,0xd410246c},
+{0x70,0x80a2a000},
+{0x74,0x22800011},
+{0x78,0xc2002570},
+{0x7c,0xc2002548},
+{0xf0,0x97},
+{0x00,0x90100012},
+{0x04,0x80886080},
+{0x08,0x0280000b},
+{0x0c,0x92100013},
+{0x10,0x7fffff51},
+{0x14,0x01000000},
+{0x18,0x80a22000},
+{0x1c,0x22800007},
+{0x20,0xc2002570},
+{0x24,0x82102001},
+{0x28,0x83284011},
+{0x2c,0x10800007},
+{0x30,0xa82d0001},
+{0x34,0xc2002570},
+{0x38,0x82006001},
+{0x3c,0x80a06004},
+{0x40,0x18bfffc9},
+{0x44,0xc2202570},
+{0x48,0x10bfffd4},
+{0x4c,0xa2046001},
+{0x50,0x80a52000},
+{0x54,0x32800005},
+{0x58,0xaa056001},
+{0x5c,0xc0242734},
+{0x60,0xc0242730},
+{0x64,0xaa056001},
+{0x68,0x80a56013},
+{0x6c,0x04bfff8b},
+{0x70,0xa12d6003},
+{0x74,0x80a5e000},
+{0x78,0x22800002},
+{0x7c,0xc0202570},
+{0xf0,0x98},
+{0x00,0xc2002540},
+{0x04,0x80a06000},
+{0x08,0x0280000a},
+{0x0c,0x80a76000},
+{0x10,0xc2002730},
+{0x14,0x80a06000},
+{0x18,0x12800006},
+{0x1c,0x80a76000},
+{0x20,0x03000004},
+{0x24,0xc2202730},
+{0x28,0xc2002248},
+{0x2c,0xc2202734},
+{0x30,0x12800027},
+{0x34,0xaa102000},
+{0x38,0xc2002514},
+{0x3c,0x80a54001},
+{0x40,0x1a800023},
+{0x44,0x96102001},
+{0x48,0x992d6002},
+{0x4c,0xc20326e0},
+{0x50,0x8330600c},
+{0x54,0x80886001},
+{0x58,0x32800019},
+{0x5c,0xaa056001},
+{0x60,0x832ac015},
+{0x64,0x808dc001},
+{0x68,0x32800015},
+{0x6c,0xaa056001},
+{0x70,0xa2102001},
+{0x74,0x9b2c6003},
+{0x78,0xc2036730},
+{0x7c,0x80a06000},
+{0xf0,0x99},
+{0x00,0x1280000b},
+{0x04,0xa2046001},
+{0x08,0xc20326e0},
+{0x0c,0x80a72000},
+{0x10,0x02800004},
+{0x14,0xc2236730},
+{0x18,0x10800003},
+{0x1c,0xc200239c},
+{0x20,0xc2002378},
+{0x24,0x10800005},
+{0x28,0xc2236734},
+{0x2c,0x80a46013},
+{0x30,0x04bffff2},
+{0x34,0x9b2c6003},
+{0x38,0xaa056001},
+{0x3c,0xc2002514},
+{0x40,0x80a54001},
+{0x44,0x0abfffe2},
+{0x48,0x992d6002},
+{0x4c,0x81c7e008},
+{0x50,0x81e80000},
+{0x54,0x9de3bf98},
+{0x58,0xc2002510},
+{0x5c,0x80a06000},
+{0x60,0x2280000b},
+{0x64,0xc208254d},
+{0x68,0x82007fff},
+{0x6c,0x80a06000},
+{0x70,0x12800006},
+{0x74,0xc2202510},
+{0x78,0xc200254c},
+{0x7c,0x1b002000},
+{0xf0,0x9a},
+{0x00,0x8210400d},
+{0x04,0xc220254c},
+{0x08,0xc208254d},
+{0x0c,0x80a06000},
+{0x10,0x1280000d},
+{0x14,0x033fc180},
+{0x18,0x033fc200},
+{0x1c,0x82106030},
+{0x20,0xda004000},
+{0x24,0xc200257c},
+{0x28,0x80a34001},
+{0x2c,0x02800021},
+{0x30,0x01000000},
+{0x34,0xc210223e},
+{0x38,0x80a06000},
+{0x3c,0x0280001d},
+{0x40,0x033fc180},
+{0x44,0xc0204000},
+{0x48,0xa0102002},
+{0x4c,0x11000099},
+{0x50,0x7ffff011},
+{0x54,0x9012233c},
+{0x58,0x7ffff592},
+{0x5c,0x90102002},
+{0x60,0xa0843fff},
+{0x64,0x3cbffffb},
+{0x68,0x11000099},
+{0x6c,0xda00254c},
+{0x70,0x83336010},
+{0x74,0x80886001},
+{0x78,0x32800002},
+{0x7c,0xc020250c},
+{0xf0,0x9b},
+{0x00,0x83336017},
+{0x04,0x80886001},
+{0x08,0x32800005},
+{0x0c,0xc2002510},
+{0x10,0xc2002188},
+{0x14,0xc2202510},
+{0x18,0xc2002510},
+{0x1c,0xc220266c},
+{0x20,0x7ffff237},
+{0x24,0x90102015},
+{0x28,0x82102001},
+{0x2c,0xc2202584},
+{0x30,0x81c7e008},
+{0x34,0x81e80000},
+{0x38,0xc2002588},
+{0x3c,0x80a06000},
+{0x40,0x32800006},
+{0x44,0xc200258c},
+{0x48,0xc2002554},
+{0x4c,0xc2202588},
+{0x50,0xc0202594},
+{0x54,0xc200258c},
+{0x58,0x80a06000},
+{0x5c,0x12800005},
+{0x60,0x01000000},
+{0x64,0xc2002554},
+{0x68,0xc220258c},
+{0x6c,0xc0202598},
+{0x70,0x81c3e008},
+{0x74,0x01000000},
+{0x78,0x98102000},
+{0x7c,0xc2002514},
+{0xf0,0x9c},
+{0x00,0x80a30001},
+{0x04,0x1a80000b},
+{0x08,0x033fc180},
+{0x0c,0x96106004},
+{0x10,0x832b2002},
+{0x14,0xda0066e0},
+{0x18,0xda20400b},
+{0x1c,0x98032001},
+{0x20,0xc2002514},
+{0x24,0x80a30001},
+{0x28,0x0abffffb},
+{0x2c,0x832b2002},
+{0x30,0xda00254c},
+{0x34,0x808b6001},
+{0x38,0x32800008},
+{0x3c,0xc208254e},
+{0x40,0xc2002514},
+{0x44,0x9a136001},
+{0x48,0x82106100},
+{0x4c,0xda20254c},
+{0x50,0xc2202514},
+{0x54,0xc208254e},
+{0x58,0x80a06000},
+{0x5c,0x3280000b},
+{0x60,0xc2082517},
+{0x64,0xc20023c8},
+{0x68,0x83306016},
+{0x6c,0x80886001},
+{0x70,0x22800006},
+{0x74,0xc2082517},
+{0x78,0xc2002514},
+{0x7c,0x82106200},
+{0xf0,0x9d},
+{0x00,0xc2202514},
+{0x04,0xc2082517},
+{0x08,0x80a06000},
+{0x0c,0x32800007},
+{0x10,0xda002500},
+{0x14,0xc2002560},
+{0x18,0x80a06000},
+{0x1c,0x22800008},
+{0x20,0xc2082517},
+{0x24,0xda002500},
+{0x28,0xc2002514},
+{0x2c,0x9b2b6010},
+{0x30,0x8210400d},
+{0x34,0xc2202514},
+{0x38,0xc2082517},
+{0x3c,0x80a06000},
+{0x40,0x22800012},
+{0x44,0xda002514},
+{0x48,0xc2002548},
+{0x4c,0x80886800},
+{0x50,0x22800006},
+{0x54,0xc20023c8},
+{0x58,0xc2002514},
+{0x5c,0x82106400},
+{0x60,0xc2202514},
+{0x64,0xc20023c8},
+{0x68,0x80a06000},
+{0x6c,0x36800007},
+{0x70,0xda002514},
+{0x74,0xc2002514},
+{0x78,0x1b000004},
+{0x7c,0x8210400d},
+{0xf0,0x9e},
+{0x00,0xc2202514},
+{0x04,0xda002514},
+{0x08,0x033fc180},
+{0x0c,0x81c3e008},
+{0x10,0xda204000},
+{0x14,0x9de3bf98},
+{0x18,0xc2102516},
+{0x1c,0x80a06000},
+{0x20,0x02800006},
+{0x24,0x90102001},
+{0x28,0xc2002548},
+{0x2c,0x80886004},
+{0x30,0x0280000a},
+{0x34,0x82102005},
+{0x38,0xc2002548},
+{0x3c,0x9b306003},
+{0x40,0x83306002},
+{0x44,0x82086001},
+{0x48,0x9a0b6001},
+{0x4c,0x80a0400d},
+{0x50,0x02800004},
+{0x54,0x82102005},
+{0x58,0x10800008},
+{0x5c,0xc2202560},
+{0x60,0xc2002560},
+{0x64,0x9a007fff},
+{0x68,0x80a06000},
+{0x6c,0x02800005},
+{0x70,0x90102002},
+{0x74,0xda202560},
+{0x78,0x7ffff50a},
+{0x7c,0x01000000},
+{0xf0,0x9f},
+{0x00,0xc2002548},
+{0x04,0x9a004001},
+{0x08,0x9a0b6008},
+{0x0c,0x82087ff7},
+{0x10,0x8210400d},
+{0x14,0xc2202548},
+{0x18,0x81c7e008},
+{0x1c,0x81e80000},
+{0x20,0x00000000},
+{0x24,0x00000000},
+{0x28,0x00000000},
+{0x2c,0x00000000},
+{0x30,0x00000000},
+{0x34,0x00000000},
+{0x38,0x00000000},
+{0x3c,0x00000000},
+{0x40,0x00000000},
+{0x44,0x00000000},
+{0x48,0x00000000},
+{0x4c,0x00000000},
+{0x50,0x00000000},
+{0x54,0x00000000},
+{0x58,0x00000000},
+{0x5c,0x00000000},
+{0x60,0x00000000},
+{0x64,0x00000000},
+{0x68,0x00000000},
+{0x6c,0x00000000},
+{0x70,0x00000000},
+{0x74,0x00000000},
+{0x78,0x00000000},
+{0x7c,0x00000000},
+{0xf0,0xa0},
+{0x00,0x00003692},
+{0x04,0xa5010500},
+{0x08,0xa5000000},
+{0x0c,0x00000000},
+{0x10,0x4c494348},
+{0x14,0x49444449},
+{0x18,0x88ecbdae},
+{0x1c,0x39cf8648},
+{0x20,0xa980c96f},
+{0x24,0xbe719243},
+{0x28,0xc641c654},
+{0x2c,0xcc4d80cb},
+{0x30,0x80d1cce5},
+{0x34,0xa898c9e5},
+{0x38,0xc400c643},
+{0x3c,0xbd130000},
+{0x40,0x00000000},
+{0x44,0x00000000},
+{0x48,0x00000000},
+{0x4c,0x00000000},
+{0x50,0x00000000},
+{0x54,0x00000000},
+{0x58,0x00000000},
+{0x5c,0x00000000},
+{0x60,0x00000000},
+{0x64,0x00000000},
+{0x68,0x4a756e20},
+{0x6c,0x32362032},
+{0x70,0x30313400},
+{0x74,0x00000000},
+{0x78,0x31343a35},
+{0x7c,0x323a3230},
+
+
+};
+
+
+#endif
index a8b6353f1badea652907f45e3f37269d47caef03..ca3c204abe420650f89bd2b828bfbf51440c525a 100644 (file)
@@ -88,7 +88,7 @@
 
 #define RGA_COLOR_FMT_ABGR8888 0
 #define RGA_COLOR_FMT_XBGR8888 1
-#define RGA_COLOR_FMT_BGR888 2
+#define RGA_COLOR_FMT_RGB888 2
 #define RGA_COLOR_FMT_BGR565 4
 #define RGA_COLOR_FMT_ABGR1555 5
 #define RGA_COLOR_FMT_ABGR4444 6
index b0ea8b7736a97a5aef71ffeebc3a7a02ceab694a..9b70181d87bcc433c23e8c9b875411618f89f7e0 100644 (file)
@@ -251,8 +251,17 @@ struct rga_fmt formats[] = {
        },
        {
                .fourcc = V4L2_PIX_FMT_RGB24,
+               .color_swap = RGA_COLOR_NONE_SWAP,
+               .hw_format = RGA_COLOR_FMT_RGB888,
+               .depth = 24,
+               .uv_factor = 1,
+               .y_div = 1,
+               .x_div = 1,
+       },
+       {
+               .fourcc = V4L2_PIX_FMT_BGR24,
                .color_swap = RGA_COLOR_RB_SWAP,
-               .hw_format = RGA_COLOR_FMT_BGR888,
+               .hw_format = RGA_COLOR_FMT_RGB888,
                .depth = 24,
                .uv_factor = 1,
                .y_div = 1,
index dadecc76e48e5c700a455fd388eefd3eb1c809d9..2eadd2c10e6994f8366af01221675f355b1361de 100644 (file)
@@ -24,6 +24,9 @@
 #include <linux/module.h>
 #include <linux/of_device.h>
 #include <linux/regmap.h>
+#include <linux/of_gpio.h>
+#include <linux/gpio.h>
+#include <linux/delay.h>
 
 struct rk808_reg_data {
        int addr;
@@ -65,7 +68,22 @@ static int rk808_shutdown(struct regmap *regmap)
 
        ret = regmap_update_bits(regmap,
                                 RK808_DEVCTRL_REG,
-                                DEV_OFF_RST, DEV_OFF_RST);
+                                DEV_OFF, DEV_OFF);
+       if (ret)
+               printk("DEV_OFF error!\n");
+
+       mdelay(2);
+       ret = regmap_update_bits(regmap,
+                                RK808_DCDC_EN_REG,
+                                BUCK1_EN_MASK | BUCK2_EN_MASK | BUCK3_EN_MASK | BUCK4_EN_MASK, 0xf);
+       if (ret)
+               printk("RK808_DCDC_EN_REG error!\n");
+       ret = regmap_update_bits(regmap,
+                                RK808_LDO_EN_REG,
+                                0xff, 0xff);
+       if (ret)
+               printk("RK808_LDO_EN_REG error!\n");
+
        return ret;
 }
 
@@ -555,6 +573,15 @@ static void rk808_device_shutdown_prepare(void)
        int ret;
        struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client);
 
+    if (gpio_is_valid(rk808->stby_gpio)) {
+        printk("rk808->stby_gpio(%d)=low\n", rk808->stby_gpio);
+        gpio_direction_output(rk808->stby_gpio, 0);
+    }
+    if (gpio_is_valid(rk808->hold_gpio)) {
+        printk("rk808->hold_gpio(%d)=low\n", rk808->hold_gpio);
+        gpio_direction_output(rk808->hold_gpio, 0);
+        mdelay(200);
+    }
        if (!rk808) {
                dev_warn(&rk808_i2c_client->dev,
                         "have no rk808, so do nothing here\n");
@@ -581,17 +608,30 @@ static void rk808_device_shutdown(void)
        }
 
        /* close rtc int when power off */
+#if 0
        regmap_update_bits(rk808->regmap,
                           RK808_INT_STS_MSK_REG1,
                           (0x3 << 5), (0x3 << 5));
        regmap_update_bits(rk808->regmap,
                           RK808_RTC_INT_REG,
                           (0x3 << 2), (0x0 << 2));
+#endif
+
+       if (gpio_is_valid(rk808->stby_gpio)) {
+           printk("rk808->stby_gpio(%d)=low\n", rk808->stby_gpio);
+           gpio_direction_output(rk808->stby_gpio, 0);
+       }
+       if (gpio_is_valid(rk808->hold_gpio)) {
+           printk("rk808->hold_gpio(%d)=low\n", rk808->hold_gpio);
+           gpio_direction_output(rk808->hold_gpio, 0);
+           mdelay(200);
+       }
        if (pm_shutdown) {
                ret = pm_shutdown(rk808->regmap);
                if (ret)
                        dev_err(&rk808_i2c_client->dev, "power off error!\n");
        }
+    printk("%s-%d: pm_shutdown\n", __FUNCTION__, __LINE__);
 }
 
 static ssize_t rk8xx_dbg_store(struct device *dev,
@@ -821,6 +861,36 @@ static int rk808_probe(struct i2c_client *client,
                if (ret)
                        dev_err(&client->dev, "create rk8xx sysfs error\n");
        }
+       //pmic,hold-gpio
+       rk808->hold_gpio = of_get_named_gpio(np, "pmic,hold-gpio", 0);
+       if (gpio_is_valid(rk808->hold_gpio)) {
+               ret = devm_gpio_request(&client->dev, rk808->hold_gpio, "pmic-hold-gpio");
+               if(ret < 0){
+                       dev_err(&client->dev, "pmic-hold-gpio request ERROR\n");
+                       goto err_irq;
+               }
+        dev_dbg(&client->dev, "hold_gpio(%d)=high\n", rk808->hold_gpio);
+        gpio_direction_output(rk808->hold_gpio, 1);
+       }
+    else {
+               dev_err(&client->dev, "Can not read property pmic,hold-gpio\n");
+               //goto err_irq;
+    }
+
+       //pmic,stby-gpio
+       rk808->stby_gpio = of_get_named_gpio(np, "pmic,stby-gpio", 0);
+       if (gpio_is_valid(rk808->stby_gpio)) {
+               ret = devm_gpio_request(&client->dev, rk808->stby_gpio, "pmic-stby-gpio");
+               if(ret < 0){
+                       dev_err(&client->dev, "devm_gpio_request pmic-stby-gpio request ERROR\n");
+                       goto err_irq;
+               }
+        dev_dbg(&client->dev, "stby_gpio(%d)=low\n", rk808->stby_gpio);
+        gpio_direction_output(rk808->stby_gpio, 1);
+       } else {
+               dev_err(&client->dev, "Can not read property pmic,stby-gpio\n");
+               //goto err_irq;
+       }
 
        return 0;
 
index bbe4380a8a3088d1ede040a1b0c7c3788b9157f9..0268217e447faf6c63295592a5cb06414572df7e 100644 (file)
@@ -159,12 +159,23 @@ int mmc_of_parse(struct mmc_host *host)
        int ret;
        bool cd_cap_invert, cd_gpio_invert = false;
        bool ro_cap_invert, ro_gpio_invert = false;
+       enum of_gpio_flags pwrseq_flags;
+       int pwrseq_gpio;
 
        if (!host->parent || !host->parent->of_node)
                return 0;
 
        np = host->parent->of_node;
 
+       pwrseq_gpio = of_get_named_gpio_flags(np, "pwrseq-gpio", 0, &pwrseq_flags);
+       if ( gpio_is_valid(pwrseq_gpio) ) {
+               ret = devm_gpio_request_one(&host->class_dev, pwrseq_gpio, (pwrseq_flags & OF_GPIO_ACTIVE_LOW) ? GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH, "sdpwr-gpio");
+               if (ret != 0) {
+                       dev_err(&host->class_dev, "request sdcard pwrseq gpio error\n");
+                       return -EIO;
+               }
+       };
+
        /* "bus-width" is translated to MMC_CAP_*_BIT_DATA flags */
        if (of_property_read_u32(np, "bus-width", &bus_width) < 0) {
                dev_dbg(host->parent,
index e2305197ad49645874b2ba9e2a1fb7bae1181769..ff18bc0378225954788831843f0abe8b76bd9e47 100644 (file)
@@ -165,7 +165,8 @@ static void stmmac_clk_csr_set(struct stmmac_priv *priv)
 {
        u32 clk_rate;
 
-       clk_rate = clk_get_rate(priv->stmmac_clk);
+       //clk_rate = clk_get_rate(priv->stmmac_clk);
+       clk_rate = clk_get_rate(priv->pclk);
 
        /* Platform provided default clk_csr would be assumed valid
         * for all other cases except for the below mentioned ones.
@@ -2886,7 +2887,8 @@ int stmmac_dvr_probe(struct device *device,
        }
        clk_prepare_enable(priv->stmmac_clk);
 
-       priv->pclk = devm_clk_get(priv->device, "pclk");
+       //priv->pclk = devm_clk_get(priv->device, "pclk");
+       priv->pclk = devm_clk_get(priv->device, "pclk_mac");
        if (IS_ERR(priv->pclk)) {
                if (PTR_ERR(priv->pclk) == -EPROBE_DEFER) {
                        ret = -EPROBE_DEFER;
index 74e75c838271da7397910377c573a42fca13d62f..4cbc1807edfc3175417051eea08fdc66a3a6697d 100644 (file)
@@ -2300,6 +2300,8 @@ static void nvme_alloc_ns(struct nvme_dev *dev, unsigned nsid)
 #else
        disk->is_rk_disk = false;
 #endif
+
+       disk->is_rk_disk = false;
        sprintf(disk->disk_name, "nvme%dn%d", dev->instance, nsid);
 
        /*
index 8b9c2a38d1ccd8ae00d9f2642026438d349c8be1..a8173ada8a677a5c929fdbbc75eb2f632dc76aa1 100644 (file)
@@ -702,6 +702,12 @@ config SPI_TLE62X0
 # Add new SPI protocol masters in alphabetical order above this line
 #
 
+config SPI_WK2XXX
+       tristate "wk2xxx Spi Switch Uart"
+       depends on SPI
+       ---help---
+         Say Y to get the third party encryption service.        
+         
 endif # SPI_MASTER
 
 # (slave support would go here)
index 31fb7fb2a0b698dee2dee7e03a733150857f7363..2abcc397c16e13590d4e0c22ab7e0972474a72f6 100644 (file)
@@ -93,3 +93,5 @@ obj-$(CONFIG_SPI_XILINX)              += spi-xilinx.o
 obj-$(CONFIG_SPI_XLP)                  += spi-xlp.o
 obj-$(CONFIG_SPI_XTENSA_XTFPGA)                += spi-xtensa-xtfpga.o
 obj-$(CONFIG_SPI_ZYNQMP_GQSPI)         += spi-zynqmp-gqspi.o
+obj-$(CONFIG_SPI_WK2XXX) += spi-wk2xxx.o
+spi-wk2xxx-objs = spi-wk2xxx
diff --git a/drivers/spi/spi-wk2xxx b/drivers/spi/spi-wk2xxx
new file mode 100644 (file)
index 0000000..5786845
Binary files /dev/null and b/drivers/spi/spi-wk2xxx differ
index d32ce0128519b07ea448e193a5606d4c81379400..4b782158fab4d9412e5d66ca176cc265b54cffa3 100644 (file)
 #define SCLK_I2S1_DIV                  175
 #define SCLK_I2S2_DIV                  176
 #define SCLK_SPDIF_DIV                 177
+#define SCLK_I2S_8CH                   178
+
 
 #define DCLK_VOP0                      180
 #define DCLK_VOP1                      181
index 20d24c07996126bdbaa6e10a00fb796baee19245..7b2d032e8843df85dded0d5f1098d519d40b8054 100644 (file)
@@ -719,6 +719,8 @@ struct rk808 {
        struct regmap_irq_chip_data *irq_data;
        struct regmap *regmap;
        long variant;
+       int hold_gpio;
+       int stby_gpio;
 };
 
 enum {
index 13a761f90b804a412f3e5349713f4c0b0879cc48..f0a0384337789752d9a044c88cdd1a4957e8545d 100644 (file)
Binary files a/logo.bmp and b/logo.bmp differ
diff --git a/logo_kernel.bmp b/logo_kernel.bmp
deleted file mode 100644 (file)
index 2717218..0000000
Binary files a/logo_kernel.bmp and /dev/null differ
index 0ceb7ac465f937a6b46bb0f0ad3a0583ae98efdb..05bdc5a8b79eb4c16e34e0808231839a085ddd96 100755 (executable)
@@ -40,7 +40,7 @@
 #define ES8323_CODEC_SET_SPK   1
 #define ES8323_CODEC_SET_HP    2
 
-#define es8323_DEF_VOL 0x1b
+#define es8323_DEF_VOL 0x20
 
 static int es8323_set_bias_level(struct snd_soc_codec *codec,
                                 enum snd_soc_bias_level level);
index ed29619df53f92331b57cc608521596c3c8e3a0d..515a5b0aefb2a59f9cb30cb1cb2008cf46dcd771 100644 (file)
 #define RT5640_PR_SPACING 0x100
 #define RT5640_PR_BASE (RT5640_PR_RANGE_BASE + (0 * RT5640_PR_SPACING))
 
+#define LINE_IN_OKAY 1
+#define LINE_IN_NO   0
+static int line_in_status = 0;
+static bool aux_irq_flag = true;  /*true:enable   false:disable*/
+
 static const struct regmap_range_cfg rt5640_ranges[] = {
        { .name = "PR", .range_min = RT5640_PR_BASE,
          .range_max = RT5640_PR_BASE + 0xb4,
@@ -174,6 +179,8 @@ static const struct reg_default rt5640_reg[] = {
 static void rt5640_hp_gpio_ctrl(struct rt5640_priv *rt5640, bool enable)
 {
        dev_dbg(rt5640->codec->dev, "hp-con-gpio enable=%d\n", enable);
+       if (line_in_status && (false == enable))
+               return;
        if (enable)
                gpio_set_value(rt5640->hp_con_gpio,
                               rt5640->hp_con_gpio_active_high ? 1 : 0);
@@ -182,6 +189,122 @@ static void rt5640_hp_gpio_ctrl(struct rt5640_priv *rt5640, bool enable)
                               rt5640->hp_con_gpio_active_high ? 0 : 1);
 }
 
+static void rt5640_set_linein(struct rt5640_priv *rt5640)//struct snd_soc_codec *code/)
+{
+       printk("%s enter\n",__func__);
+       //regmap_write(rt5640->regmap, RT5640_RESET, 0);
+       regmap_write(rt5640->regmap, RT5640_PWR_ANLG1, 0xfdfc);     //63
+       regmap_update_bits(rt5640->regmap, RT5640_REC_L2_MIXER,    //3c
+                               1<<5 | 1<<4,
+                        0<<5 | 1<<4);
+       regmap_update_bits(rt5640->regmap, RT5640_REC_R2_MIXER,    //3e
+                               1<<5 | 1<<4,
+                        0<<5 | 1<<4);
+
+       regmap_update_bits(rt5640->regmap, RT5640_OUT_L3_MIXER,    //4f
+                               1<<3 , 0<<3);
+       regmap_update_bits(rt5640->regmap, RT5640_OUT_R3_MIXER,    //52
+                               1<<3 , 0<<3);
+
+       regmap_write(rt5640->regmap, RT5640_HP_VOL, 0x0808);        //02
+       regmap_update_bits(rt5640->regmap, RT5640_HPO_MIXER,        //45
+                               1<<13 | 1<<12,
+                               0<<13 | 1<<12);
+
+       regmap_update_bits(rt5640->regmap, RT5640_PWR_MIXER,    //65
+                               1<<10 | 1<<11 | 1<<14 | 1<<15,
+                        1<<10 | 1<<11 | 1<<14 | 1<<15);
+       regmap_update_bits(rt5640->regmap, RT5640_PWR_VOL,    //66
+                               1<<8 | 1<<9 | 1<<10 | 1<<11,
+                        1<<8 | 1<<9 | 1<<10 | 1<<11);
+
+       regmap_write(rt5640->regmap, RT5640_DEPOP_M1, 0x8019);     //8e
+       regmap_write(rt5640->regmap, RT5640_DEPOP_M2, 0x3100);     //8f
+
+       regmap_write(rt5640->regmap, RT5640_DUMMY1, 0x3401);     //fa
+
+       rt5640_hp_gpio_ctrl(rt5640, 1);
+}
+
+static void aux_det_work_func(struct work_struct *work)
+{
+       struct rt5640_priv *rt5640 = container_of(work, struct rt5640_priv, aux_det_work.work);
+       line_in_status = gpio_get_value(rt5640->aux_det_gpio);
+       printk("%s", __func__);
+
+       if (line_in_status == LINE_IN_OKAY){
+               printk(" [on] \n");
+               rt5640_set_linein(rt5640);
+       }
+       else if (line_in_status == LINE_IN_NO)
+       {
+               printk(" [off]\n");
+       }
+
+       if(!aux_irq_flag) {
+               enable_irq(rt5640->aux_det_irq);
+               aux_irq_flag = true;
+       }
+}
+
+static irqreturn_t aux_det_isr(int irq, void *data)
+{
+       struct rt5640_priv *rt5640 = data;
+
+       printk("%s\n", __func__);
+
+       line_in_status = gpio_get_value(rt5640->aux_det_gpio);
+       if(aux_irq_flag) {
+               disable_irq_nosync(rt5640->aux_det_irq);
+               aux_irq_flag = false;
+       }
+
+       if (line_in_status == LINE_IN_OKAY) {
+               //set line in on
+               printk(" line_in: [on] \n");
+               line_in_status = LINE_IN_OKAY;
+               schedule_delayed_work(&rt5640->aux_det_work, msecs_to_jiffies(0));
+               //rt5640_set_linein(rt5640);
+       }
+       else if (line_in_status == LINE_IN_NO) {
+               //set line in off
+               printk(" line_in: [off] \n");
+               if (!aux_irq_flag) {
+                       enable_irq(rt5640->aux_det_irq);
+                       aux_irq_flag = true;
+               }
+               line_in_status = LINE_IN_NO;
+       }
+
+       return IRQ_HANDLED;
+}
+
+static void rt5640_delay_workq(struct work_struct *work)
+{
+       int ret;
+       struct rt5640_priv *rt5640 = container_of(work, struct rt5640_priv, init_delayed_work.work);
+       printk("%s\n", __func__);
+
+       rt5640->aux_det_irq = gpio_to_irq(rt5640->aux_det_gpio);
+       if (rt5640->aux_det_irq < 0) {
+        gpio_free(rt5640->aux_det_gpio);
+               printk("aux_det_irq req fail\n");
+       }
+       else {
+               ret = request_irq(rt5640->aux_det_irq, aux_det_isr,  IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, "irq_aux_det", rt5640);
+               if (ret)
+                       printk(KERN_ALERT "Cannot allocate linein INT!ERRNO:%d\n", ret);
+               else {
+                       if (aux_irq_flag) {
+                               disable_irq(rt5640->aux_det_irq);
+                               aux_irq_flag = false;
+                       }
+               }
+       }
+
+       schedule_delayed_work(&rt5640->aux_det_work, msecs_to_jiffies(100));
+}
+
 static int rt5640_reset(struct snd_soc_codec *codec)
 {
        return snd_soc_write(codec, RT5640_RESET, 0);
@@ -2028,6 +2151,7 @@ static int rt5640_set_bias_level(struct snd_soc_codec *codec,
                                                0x0301, 0x0301);
                        snd_soc_update_bits(codec, RT5640_MICBIAS,
                                                0x0030, 0x0030);
+                       snd_soc_write(codec, RT5640_PWR_ANLG2, 0x0800); //micbas1
                }
                break;
 
@@ -2117,21 +2241,21 @@ static void rt5640_hp_adc_poll(struct work_struct *work)
        int result = -1;
 
        rt5640 = container_of(work, struct rt5640_priv, adc_poll_work.work);
-               result = rt5640_hp_adc_iio_read(rt5640);
-               if (result > RT5640_ADC_INVALID_ADVALUE &&
-                   result < RT5640_ADC_EMPTY_ADVALUE) {
-                       if (result < rt5640->hp_det_adc_value + RT5640_ADC_DRIFT_ADVALUE &&
-                           result > rt5640->hp_det_adc_value - RT5640_ADC_DRIFT_ADVALUE){
-               if (!rt5640->hp_insert) {
-                       dev_dbg(rt5640->codec->dev,
-                               "headphone insert,adc=%d\n", result);
-                       rt5640->hp_insert = true;
-                               snd_soc_jack_report(&rt5640->hp_jack, SND_JACK_HEADPHONE,
-                                                   SND_JACK_HEADPHONE);
-                       if (!rt5640->hp_mute)
-                               rt5640_hp_gpio_ctrl(rt5640, true);
-               }
-       } else{
+       result = rt5640_hp_adc_iio_read(rt5640);
+       if (result > RT5640_ADC_INVALID_ADVALUE &&
+               result < RT5640_ADC_EMPTY_ADVALUE) {
+               if (result < rt5640->hp_det_adc_value + RT5640_ADC_DRIFT_ADVALUE &&
+                       result > rt5640->hp_det_adc_value - RT5640_ADC_DRIFT_ADVALUE){
+       if (!rt5640->hp_insert) {
+               dev_dbg(rt5640->codec->dev,
+                       "headphone insert,adc=%d\n", result);
+               rt5640->hp_insert = true;
+                       snd_soc_jack_report(&rt5640->hp_jack, SND_JACK_HEADPHONE,
+                                               SND_JACK_HEADPHONE);
+               if (!rt5640->hp_mute)
+                       rt5640_hp_gpio_ctrl(rt5640, true);
+       }
+       } else {
                if (rt5640->hp_insert) {
                        dev_dbg(rt5640->codec->dev,
                                "headphone not insert,adc=%d\n", result);
@@ -2206,6 +2330,12 @@ static int rt5640_probe(struct snd_soc_codec *codec)
                                      1000);
        }
 
+    /* Init workquence to set up line in func */
+       INIT_DELAYED_WORK(&rt5640->init_delayed_work, rt5640_delay_workq);
+       INIT_DELAYED_WORK(&rt5640->aux_det_work, aux_det_work_func);
+
+       schedule_delayed_work(&rt5640->init_delayed_work, msecs_to_jiffies(20000));
+
        return 0;
 }
 
@@ -2368,16 +2498,17 @@ static int rt5640_parse_dt(struct rt5640_priv *rt5640, struct device *dev)
        struct iio_channel *chan;
        u32 adc_value;
        enum of_gpio_flags flags;
+       unsigned long irq_flags;
        int gpio, ret;
 
        chan = iio_channel_get(dev, NULL);
        if (IS_ERR(chan)) {
                dev_warn(dev, "rt5640 have no io-channels defined\n");
                chan = NULL;
-       } else{
+       } else {
                if (!of_property_read_u32(np, "hp-det-adc-value", &adc_value)) {
                        rt5640->hp_det_adc_value = adc_value;
-               } else{
+               } else {
                        chan = NULL;
                        dev_err(dev, "rt5640 have no hp_det_adc_value defined\n");
                }
@@ -2398,6 +2529,23 @@ static int rt5640_parse_dt(struct rt5640_priv *rt5640, struct device *dev)
        }
        rt5640->hp_con_gpio = gpio;
 
+       gpio = of_get_named_gpio_flags(np, "aux-det-gpio", 0, (enum of_gpio_flags *)&irq_flags);
+       if (gpio < 0) {
+               dev_err(dev, "Can not read property aux-det-gpio\n");
+       } else {
+               if (gpio_is_valid(gpio)) {
+                       ret = devm_gpio_request(dev, gpio, "aux-det-gpio");
+                       if (ret < 0) {
+                               dev_err(dev, "aux-det-gpio request ERROR\n");
+                       } else {
+                               ret = gpio_direction_input(gpio);
+                               if (ret < 0)
+                                       dev_err(dev, "gpio_direction_input aux-det-gpio set ERROR\n");
+                       }
+               }
+       }
+       rt5640->aux_det_gpio = gpio;
+
        rt5640->pdata.in1_diff = of_property_read_bool(np,
                                        "realtek,in1-differential");
        rt5640->pdata.in2_diff = of_property_read_bool(np,
index e7ab4093b61f4344566ef20fcc612b14d4ada876..e96e9915230f7eac7cfabb04ab3ca5c93e96b93a 100644 (file)
@@ -2091,7 +2091,8 @@ struct rt5640_priv {
        struct rt5640_platform_data pdata;
        struct regmap *regmap;
        struct clk *mclk;
-
+       struct work_struct work;
+       struct workqueue_struct *wq;
        int sysclk;
        int sysclk_src;
        int lrck[RT5640_AIFS];
@@ -2110,6 +2111,10 @@ struct rt5640_priv {
        bool hp_insert;
        int hp_con_gpio;
        bool hp_con_gpio_active_high;
+       struct delayed_work init_delayed_work;
+       struct delayed_work aux_det_work;
+       int aux_det_gpio;
+       int aux_det_irq;
        struct snd_soc_jack hp_jack;
 };