From: T-Firefly Date: Thu, 30 Nov 2017 04:59:41 +0000 (+0800) Subject: ARM64: DTS: Fix Firefly board audio driver X-Git-Tag: release-20171130_firefly X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=2ae05321496aa27767bc33a5cc19451b3db67919;hp=ac94e80d6a3cec1b1b08640772f8b3f0a1d5c35b;p=firefly-linux-kernel-4.4.55.git ARM64: DTS: Fix Firefly board audio driver --- diff --git a/.gitignore b/.gitignore index fd3a35592543..274a8b3a893b 100644 --- a/.gitignore +++ b/.gitignore @@ -112,3 +112,5 @@ all.config # Kdevelop4 *.kdev4 + +*.img diff --git a/arch/arm/boot/dts/rk3288-firefly.dts b/arch/arm/boot/dts/rk3288-firefly.dts index c07fe92dc69f..9dcee7031f08 100644 --- a/arch/arm/boot/dts/rk3288-firefly.dts +++ b/arch/arm/boot/dts/rk3288-firefly.dts @@ -67,5 +67,6 @@ }; &pwm1 { - status = "okay"; + status = "disabled"; + //status = "okay"; }; diff --git a/arch/arm/boot/dts/rk3288-firefly.dtsi b/arch/arm/boot/dts/rk3288-firefly.dtsi index 30d262a8d78a..b3bb02ea23fe 100644 --- a/arch/arm/boot/dts/rk3288-firefly.dtsi +++ b/arch/arm/boot/dts/rk3288-firefly.dtsi @@ -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>; @@ -176,6 +178,29 @@ 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"; @@ -302,7 +327,7 @@ vcc-supply = <&vdd_10>; vccio-supply = <&vcc_18>; force-hpd; - status = "okay"; + status = "disabled"; ports { edp_out: port@1 { @@ -322,7 +347,8 @@ }; &edp_phy { - status = "okay"; + status = "disabled"; + //status = "okay"; }; &emmc { @@ -537,6 +563,17 @@ &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 { @@ -682,6 +719,11 @@ }; }; +&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 index 000000000000..4252921d3632 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-aio-linux.dts @@ -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 + +/ { + 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 = ; + 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 = ; + //bus-format = ; + 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 = ; + 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>; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-edp.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-edp.dts index a627db1edcde..afb686f930e3 100755 --- a/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-edp.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-edp.dts @@ -737,6 +737,8 @@ 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>; }; @@ -745,6 +747,8 @@ 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 index 000000000000..09f544a4565c --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-mipi.dts @@ -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 + +/ { + 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 = ; + 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 = ; + //bus-format = ; + 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 = ; + 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>; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts index e0474f92f492..44a8d24ed9ab 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts @@ -498,8 +498,10 @@ 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>; @@ -749,6 +751,8 @@ 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>; }; @@ -757,6 +761,8 @@ 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>; }; @@ -830,6 +836,16 @@ 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 { @@ -916,7 +932,7 @@ }; &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 index 000000000000..999e145e9ed2 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux-edp.dts @@ -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 + +/ { + 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 = ; + 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 = ; + 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 index 000000000000..84decf71fcb7 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux-mipi.dts @@ -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 + +/ { + 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 = ; + 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 = ; + 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 = ; + 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"; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux.dts index 44d517d4ddc3..025e43fce19a 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux.dts @@ -187,7 +187,7 @@ "Headphone Jack","HPOL", "Headphone Jack","HPOR"; simple-audio-card,cpu { - sound-dai = <&i2c1>; + sound-dai = <&i2s1>; }; simple-audio-card,codec { sound-dai = <&es8323>; @@ -272,6 +272,17 @@ 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"; @@ -348,7 +359,6 @@ }; leds { - status = "disabled"; compatible = "gpio-leds"; power { label = "firefly:blue:power"; @@ -726,7 +736,7 @@ 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 { @@ -768,6 +778,8 @@ 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 { @@ -909,6 +921,12 @@ 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 { @@ -994,7 +1012,7 @@ }; &tcphy0 { - extcon = <&fusb0>; + //extcon = <&fusb0>; status = "okay"; }; @@ -1012,7 +1030,7 @@ &u2phy0 { status = "okay"; - extcon = <&fusb0>; + //extcon = <&fusb0>; u2phy0_otg: otg-port { status = "okay"; @@ -1072,9 +1090,15 @@ status = "okay"; }; +&uart4 { + current-speed = <9600>; + no-loopback-test; + status = "okay"; +}; + &usbdrd3_0 { status = "okay"; - extcon = <&fusb0>; + //extcon = <&fusb0>; }; &usbdrd3_1 { @@ -1083,6 +1107,8 @@ &usbdrd_dwc3_0 { status = "okay"; + //dr_mode = "peripheral"; + dr_mode = "host"; }; &usbdrd_dwc3_1 { diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi index 8543e31eccf0..37441ad28d53 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi @@ -1925,11 +1925,17 @@ 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>; diff --git a/arch/arm64/configs/firefly_linux_defconfig b/arch/arm64/configs/firefly_linux_defconfig index 2662a70c4be4..f67a6835a82d 100644 --- a/arch/arm64/configs/firefly_linux_defconfig +++ b/arch/arm64/configs/firefly_linux_defconfig @@ -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 diff --git a/drivers/char/virtd b/drivers/char/virtd index 2372fbdc9ebe..ad79c6c9d5df 100644 Binary files a/drivers/char/virtd and b/drivers/char/virtd differ diff --git a/drivers/clk/rockchip/clk-rk3399.c b/drivers/clk/rockchip/clk-rk3399.c index f4344548d738..f5822f0d02e4 100644 --- a/drivers/clk/rockchip/clk-rk3399.c +++ b/drivers/clk/rockchip/clk-rk3399.c @@ -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, diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 211f331b7a7d..6b113f66dcaf 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -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); diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c index 0951a88c9325..0e948d611041 100644 --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c @@ -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 diff --git a/drivers/input/remotectl/Kconfig b/drivers/input/remotectl/Kconfig index 7879c6e538fc..1d79db6f99a0 100644 --- a/drivers/input/remotectl/Kconfig +++ b/drivers/input/remotectl/Kconfig @@ -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 diff --git a/drivers/input/remotectl/rockchip_pwm_remotectl.c b/drivers/input/remotectl/rockchip_pwm_remotectl.c index bcd1d4bc5a92..2b5862888086 100644 --- a/drivers/input/remotectl/rockchip_pwm_remotectl.c +++ b/drivers/input/remotectl/rockchip_pwm_remotectl.c @@ -13,11 +13,13 @@ #include #include "rockchip_pwm_remotectl.h" #include +#include /*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); diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile index 9be5eb8d4f6c..b71942992239 100644 --- a/drivers/input/touchscreen/Makefile +++ b/drivers/input/touchscreen/Makefile @@ -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 index 000000000000..00f4c2184149 --- /dev/null +++ b/drivers/input/touchscreen/gslx680.c @@ -0,0 +1,1475 @@ +/* + * drivers/input/touchscreen/gslX680.c + * + * Copyright (c) 2012 Shanghai Basewin + * Guan Yuwei + * + * 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 +#include +//#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include +//#include +#include +#include +#include + +//#include +#include +#include +#include +#include "tp_suspend.h" + +#include "gslx680.h" +#include +//#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 +#include +#include //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 = ® + 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,®,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=0 && tmp1 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 index 000000000000..4ec44fe034b4 --- /dev/null +++ b/drivers/input/touchscreen/gslx680.h @@ -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 diff --git a/drivers/media/platform/rockchip-rga/rga-hw.h b/drivers/media/platform/rockchip-rga/rga-hw.h index a8b6353f1bad..ca3c204abe42 100644 --- a/drivers/media/platform/rockchip-rga/rga-hw.h +++ b/drivers/media/platform/rockchip-rga/rga-hw.h @@ -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 diff --git a/drivers/media/platform/rockchip-rga/rga.c b/drivers/media/platform/rockchip-rga/rga.c index b0ea8b7736a9..9b70181d87bc 100644 --- a/drivers/media/platform/rockchip-rga/rga.c +++ b/drivers/media/platform/rockchip-rga/rga.c @@ -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, diff --git a/drivers/mfd/rk808.c b/drivers/mfd/rk808.c index dadecc76e48e..2eadd2c10e69 100644 --- a/drivers/mfd/rk808.c +++ b/drivers/mfd/rk808.c @@ -24,6 +24,9 @@ #include #include #include +#include +#include +#include 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; diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c index bbe4380a8a30..0268217e447f 100644 --- a/drivers/mmc/core/host.c +++ b/drivers/mmc/core/host.c @@ -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, diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index e2305197ad49..ff18bc037822 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -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; diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index 74e75c838271..4cbc1807edfc 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -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); /* diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig index 8b9c2a38d1cc..a8173ada8a67 100644 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig @@ -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) diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile index 31fb7fb2a0b6..2abcc397c16e 100644 --- a/drivers/spi/Makefile +++ b/drivers/spi/Makefile @@ -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 index 000000000000..578684533516 Binary files /dev/null and b/drivers/spi/spi-wk2xxx differ diff --git a/include/dt-bindings/clock/rk3399-cru.h b/include/dt-bindings/clock/rk3399-cru.h index d32ce0128519..4b782158fab4 100644 --- a/include/dt-bindings/clock/rk3399-cru.h +++ b/include/dt-bindings/clock/rk3399-cru.h @@ -143,6 +143,8 @@ #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 diff --git a/include/linux/mfd/rk808.h b/include/linux/mfd/rk808.h index 20d24c079961..7b2d032e8843 100644 --- a/include/linux/mfd/rk808.h +++ b/include/linux/mfd/rk808.h @@ -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 { diff --git a/logo.bmp b/logo.bmp index 13a761f90b80..f0a038433778 100644 Binary files a/logo.bmp and b/logo.bmp differ diff --git a/logo_kernel.bmp b/logo_kernel.bmp deleted file mode 100644 index 271721846e8d..000000000000 Binary files a/logo_kernel.bmp and /dev/null differ diff --git a/sound/soc/codecs/es8323.c b/sound/soc/codecs/es8323.c index 0ceb7ac465f9..05bdc5a8b79e 100755 --- a/sound/soc/codecs/es8323.c +++ b/sound/soc/codecs/es8323.c @@ -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); diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c index ed29619df53f..515a5b0aefb2 100644 --- a/sound/soc/codecs/rt5640.c +++ b/sound/soc/codecs/rt5640.c @@ -46,6 +46,11 @@ #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, diff --git a/sound/soc/codecs/rt5640.h b/sound/soc/codecs/rt5640.h index e7ab4093b61f..e96e9915230f 100644 --- a/sound/soc/codecs/rt5640.h +++ b/sound/soc/codecs/rt5640.h @@ -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; };