# Kdevelop4
*.kdev4
+
+*.img
};
&pwm1 {
- status = "okay";
+ status = "disabled";
+ //status = "okay";
};
};
backlight: backlight {
+ status = "disabled";
compatible = "pwm-backlight";
brightness-levels = <
3 4 5 6 7
};
panel: panel {
+ status = "disabled";
compatible ="lg,lp079qx1-sp0v";
power-supply = <&vcc_sys>;
backlight = <&backlight>;
reset-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
};
+ es8323-sound {
+ status = "okay";
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,name = "rockchip,es8323-codec";
+ simple-audio-card,mclk-fs = <256>;
+ //simple-audio-card,hp-det-gpio = <&gpio7 15 GPIO_ACTIVE_HIGH>;
+ simple-audio-card,widgets =
+ "Microphone","Mic Jack",
+ "Headphone","Headphone Jack";
+ simple-audio-card,routing =
+ "Mic Jack","MICBIAS1",
+ "IN1P","Mic Jack",
+ "Headphone Jack","HPOL",
+ "Headphone Jack","HPOR";
+ simple-audio-card,cpu {
+ sound-dai = <&i2s>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&es8323>;
+ };
+ };
+
sound {
compatible = "simple-audio-card";
simple-audio-card,name = "SPDIF";
vcc-supply = <&vdd_10>;
vccio-supply = <&vcc_18>;
force-hpd;
- status = "okay";
+ status = "disabled";
ports {
edp_out: port@1 {
};
&edp_phy {
- status = "okay";
+ status = "disabled";
+ //status = "okay";
};
&emmc {
&i2c2 {
status = "okay";
+
+ es8323: es8323@10 {
+ status = "okay";
+ compatible = "everest,es8323";
+ reg = <0x10>;
+ spk-con-gpio = <&gpio7 3 GPIO_ACTIVE_HIGH>;
+ hp-det-gpio = <&gpio7 15 GPIO_ACTIVE_LOW>;
+ clock-names = "mclk";
+ clocks = <&cru SCLK_I2S0_OUT>;
+ #sound-dai-cells = <0>;
+ };
};
&i2c4 {
};
};
+&i2s {
+ status = "okay";
+ #sound-dai-cells = <0>;
+};
+
&saradc {
vref-supply = <&vcc_18>;
status = "okay";
--- /dev/null
+/*
+ * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ * a) This file is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ * b) Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/dts-v1/;
+
+#include "dt-bindings/pwm/pwm.h"
+#include "rk3399.dtsi"
+#include "rk3399-opp.dtsi"
+#include "rk3399-linux.dtsi"
+#include <dt-bindings/input/input.h>
+
+/ {
+ model = "Rockchip RK3399 Firefly Board (Linux Opensource)";
+ compatible = "rockchip,rk3399-firefly-linux", "rockchip,rk3399";
+
+ backlight: backlight {
+ status = "disabled";
+ compatible = "pwm-backlight";
+ pwms = <&pwm1 0 25000 0>;
+ brightness-levels = <
+ 0 1 2 3 4 5 6 7
+ 8 9 10 11 12 13 14 15
+ 16 17 18 19 20 21 22 23
+ 24 25 26 27 28 29 30 31
+ 32 33 34 35 36 37 38 39
+ 40 41 42 43 44 45 46 47
+ 48 49 50 51 52 53 54 55
+ 56 57 58 59 60 61 62 63
+ 64 65 66 67 68 69 70 71
+ 72 73 74 75 76 77 78 79
+ 80 81 82 83 84 85 86 87
+ 88 89 90 91 92 93 94 95
+ 96 97 98 99 100 101 102 103
+ 104 105 106 107 108 109 110 111
+ 112 113 114 115 116 117 118 119
+ 120 121 122 123 124 125 126 127
+ 128 129 130 131 132 133 134 135
+ 136 137 138 139 140 141 142 143
+ 144 145 146 147 148 149 150 151
+ 152 153 154 155 156 157 158 159
+ 160 161 162 163 164 165 166 167
+ 168 169 170 171 172 173 174 175
+ 176 177 178 179 180 181 182 183
+ 184 185 186 187 188 189 190 191
+ 192 193 194 195 196 197 198 199
+ 200 201 202 203 204 205 206 207
+ 208 209 210 211 212 213 214 215
+ 216 217 218 219 220 221 222 223
+ 224 225 226 227 228 229 230 231
+ 232 233 234 235 236 237 238 239
+ 240 241 242 243 244 245 246 247
+ 248 249 250 251 252 253 254 255>;
+ default-brightness-level = <200>;
+ };
+
+ clkin_gmac: external-gmac-clock {
+ compatible = "fixed-clock";
+ clock-frequency = <125000000>;
+ clock-output-names = "clkin_gmac";
+ #clock-cells = <0>;
+ };
+
+ dw_hdmi_audio: dw-hdmi-audio {
+ status = "disabled";
+ compatible = "rockchip,dw-hdmi-audio";
+ #sound-dai-cells = <0>;
+ };
+
+ edp_panel: edp-panel {
+ status = "disabled";
+ compatible = "sharp,lcd-f402", "panel-simple";
+ backlight = <&backlight>;
+ power-supply = <&vcc_lcd>;
+ enable-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&lcd_panel_reset>;
+
+ ports {
+ panel_in_edp: endpoint {
+ remote-endpoint = <&edp_out_panel>;
+ };
+ };
+ };
+
+ fiq_debugger: fiq-debugger {
+ compatible = "rockchip,fiq-debugger";
+ rockchip,serial-id = <2>;
+ rockchip,signal-irq = <182>;
+ rockchip,wake-irq = <0>;
+ rockchip,irq-mode-enable = <1>; /* If enable uart uses irq instead of fiq */
+ rockchip,baudrate = <1500000>; /* Only 115200 and 1500000 */
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart2c_xfer>;
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ autorepeat;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&pwrbtn>;
+
+ button@0 {
+ gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_POWER>;
+ label = "GPIO Key Power";
+ linux,input-type = <1>;
+ gpio-key,wakeup = <1>;
+ debounce-interval = <100>;
+ };
+ };
+
+ rt5640-sound {
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,name = "rockchip,rt5640-codec";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,widgets =
+ "Microphone", "Mic Jack",
+ "Headphone", "Headphone Jack";
+ simple-audio-card,routing =
+ "Mic Jack", "MICBIAS1",
+ "IN1P", "Mic Jack",
+ "Headphone Jack", "HPOL",
+ "Headphone Jack", "HPOR";
+ simple-audio-card,cpu {
+ sound-dai = <&i2s1>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&rt5640>;
+ };
+ };
+
+ hdmi_sound: hdmi-sound {
+ status = "disabled";
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,name = "rockchip,hdmi";
+
+ simple-audio-card,cpu {
+ sound-dai = <&i2s2>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&dw_hdmi_audio>;
+ };
+ };
+
+ hdmi_codec: hdmi-codec {
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,name = "HDMI-CODEC";
+
+ simple-audio-card,cpu {
+ sound-dai = <&i2s2>;
+ };
+
+ simple-audio-card,codec {
+ sound-dai = <&hdmi>;
+ };
+ };
+
+ spdif-sound {
+ status = "okay";
+ compatible = "simple-audio-card";
+ simple-audio-card,name = "ROCKCHIP,SPDIF";
+ simple-audio-card,cpu {
+ sound-dai = <&spdif>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&spdif_out>;
+ };
+ };
+
+ spdif_out: spdif-out {
+ status = "okay";
+ compatible = "linux,spdif-dit";
+ #sound-dai-cells = <0>;
+ };
+
+ sdio_pwrseq: sdio-pwrseq {
+ compatible = "mmc-pwrseq-simple";
+ clocks = <&rk808 1>;
+ clock-names = "ext_clock";
+ pinctrl-names = "default";
+ pinctrl-0 = <&wifi_enable_h>;
+
+ /*
+ * On the module itself this is one of these (depending
+ * on the actual card populated):
+ * - SDIO_RESET_L_WL_REG_ON
+ * - PDN (power down when low)
+ */
+ reset-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; /* GPIO0_B2 */
+ };
+
+ vcc3v3_pcie: vcc3v3-pcie-regulator {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ regulator-always-on;
+ regulator-boot-on;
+ //gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+ gpio = <&gpio2 2 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie_drv>;
+ regulator-name = "vcc3v3_pcie";
+ };
+
+ vcc3v3_3g: vcc3v3-3g-regulator {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ regulator-always-on;
+ regulator-boot-on;
+ gpio = <&gpio2 6 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie_3g_drv>;
+ regulator-name = "vcc3v3_3g";
+ };
+
+ vcc3v3_sys: vcc3v3-sys {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc3v3_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ };
+
+ vcc5v0_host: vcc5v0-host-regulator {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&host_vbus_drv>;
+ regulator-name = "vcc5v0_host";
+ regulator-always-on;
+ };
+
+ vbus_5v: vbus-5v-regulator {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ regulator-always-on;
+ regulator-boot-on;
+ gpio = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&vbus_5v_drv>;
+ regulator-name = "vbus_5v";
+ };
+
+ vcc5v0_sys: vcc5v0-sys {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc5v0_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ };
+
+ vcc_phy: vcc-phy-regulator {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc_phy";
+ regulator-always-on;
+ regulator-boot-on;
+ };
+
+ vdd_log: vdd-log {
+ compatible = "pwm-regulator";
+ pwms = <&pwm2 0 25000 1>;
+ regulator-name = "vdd_log";
+ regulator-min-microvolt = <800000>;
+ regulator-max-microvolt = <1100000>;
+ regulator-always-on;
+ regulator-boot-on;
+
+ /* for rockchip boot on */
+ rockchip,pwm_id= <2>;
+ rockchip,pwm_voltage = <1000000>;
+ };
+
+ vccadc_ref: vccadc-ref {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc1v8_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+
+ vcc_lcd: vcc-lcd-regulator {
+ compatible = "regulator-fixed";
+ regulator-always-on;
+ regulator-boot-on;
+ enable-active-high;
+ gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&lcd_en>;
+ regulator-name = "vcc_lcd";
+ };
+
+ wireless-wlan {
+ compatible = "wlan-platdata";
+ rockchip,grf = <&grf>;
+ wifi_chip_type = "ap6354";
+ sdio_vref = <1800>;
+ WIFI,host_wake_irq = <&gpio0 3 GPIO_ACTIVE_HIGH>; /* GPIO0_a3 */
+ status = "okay";
+ };
+
+ wireless-bluetooth {
+ compatible = "bluetooth-platdata";
+ //wifi-bt-power-toggle;
+ clocks = <&rk808 1>;
+ clock-names = "ext_clock";
+ uart_rts_gpios = <&gpio2 19 GPIO_ACTIVE_LOW>; /* GPIO2_C3 */
+ pinctrl-names = "default", "rts_gpio";
+ pinctrl-0 = <&uart0_rts>;
+ pinctrl-1 = <&uart0_gpios>;
+ //BT,power_gpio = <&gpio3 19 GPIO_ACTIVE_HIGH>; /* GPIOx_xx */
+ BT,reset_gpio = <&gpio0 9 GPIO_ACTIVE_HIGH>; /* GPIO0_B1 */
+ BT,wake_gpio = <&gpio2 26 GPIO_ACTIVE_HIGH>; /* GPIO2_D2 */
+ BT,wake_host_irq = <&gpio0 4 GPIO_ACTIVE_HIGH>; /* GPIO0_A4 */
+ status = "okay";
+ };
+
+ leds {
+ compatible = "gpio-leds";
+ power {
+ label = "firefly:blue:power";
+ linux,default-trigger = "ir-power-click";
+ default-state = "on";
+ gpios = <&gpio2 27 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&led_power>;
+ };
+ user {
+ label = "firefly:yellow:user";
+ linux,default-trigger = "ir-user-click";
+ default-state = "off";
+ gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&led_user>;
+ };
+ };
+};
+
+&dsi {
+ status = "disabled";
+ dsi_panel: panel {
+ compatible ="simple-panel-dsi";
+ reg = <0>;
+ backlight = <&backlight>;
+ dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST)>;
+ dsi,format = <MIPI_DSI_FMT_RGB888>;
+ //bus-format = <MEDIA_BUS_FMT_RGB666_1X18>;
+ dsi,lanes = <4>;
+ /*
+ dsi,channel = <0>;
+ delay,enable = <35>;
+ delay,prepare = <6>;
+ delay,unprepare = <0>;
+ delay,disable = <20>;
+ size,width = <120>;
+ size,height = <170>;
+ */
+ status = "disabled";
+
+ panel-init-sequence = [
+ 05 20 01 29
+ 05 96 01 11
+ ];
+
+ panel-exit-sequence = [
+ 05 05 01 28
+ 05 78 01 10
+ ];
+
+ disp_timings: display-timings {
+ native-mode = <&timing0>;
+ timing0: timing0 {
+ clock-frequency = <64000000>;
+ hactive = <768>;
+ vactive = <1024>;
+ hsync-len = <5>; //20, 50
+ hback-porch = <25>; //50, 56
+ hfront-porch = <150>;//50, 30
+ vsync-len = <1>;
+ vback-porch = <15>;
+ vfront-porch = <100>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <0>;
+ pixelclk-active = <0>;
+ };
+ };
+ };
+};
+
+&cpu_l0 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l1 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l2 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l3 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_b0 {
+ cpu-supply = <&vdd_cpu_b>;
+};
+
+&cpu_b1 {
+ cpu-supply = <&vdd_cpu_b>;
+};
+
+&display_subsystem {
+ status = "okay";
+};
+
+&edp {
+ status = "disabled";
+
+ ports {
+ edp_out: port@1 {
+ reg = <1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ edp_out_panel: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&panel_in_edp>;
+ };
+ };
+ };
+};
+
+&emmc_phy {
+ status = "okay";
+};
+
+&gmac {
+ phy-supply = <&vcc_phy>;
+ phy-mode = "rgmii";
+ clock_in_out = "input";
+ snps,reset-gpio = <&gpio3 15 GPIO_ACTIVE_LOW>;
+ snps,reset-active-low;
+ snps,reset-delays-us = <0 10000 50000>;
+ assigned-clocks = <&cru SCLK_RMII_SRC>;
+ assigned-clock-parents = <&clkin_gmac>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&rgmii_pins>;
+ tx_delay = <0x28>;
+ rx_delay = <0x1B>;
+ status = "okay";
+};
+
+&gpu {
+ status = "okay";
+ mali-supply = <&vdd_gpu>;
+};
+
+&hdmi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ #sound-dai-cells = <0>;
+ status = "okay";
+};
+
+&i2c0 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <168>;
+ i2c-scl-falling-time-ns = <4>;
+ clock-frequency = <400000>;
+
+ vdd_cpu_b: syr827@40 {
+ compatible = "silergy,syr827";
+ reg = <0x40>;
+ vin-supply = <&vcc5v0_sys>;
+ regulator-compatible = "fan53555-reg";
+ regulator-name = "vdd_cpu_b";
+ regulator-min-microvolt = <712500>;
+ regulator-max-microvolt = <1500000>;
+ regulator-ramp-delay = <1000>;
+ vsel-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+ fcs,suspend-voltage-selector = <1>;
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-initial-state = <3>;
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vdd_gpu: syr828@41 {
+ compatible = "silergy,syr828";
+ reg = <0x41>;
+ vin-supply = <&vcc5v0_sys>;
+ regulator-compatible = "fan53555-reg";
+ regulator-name = "vdd_gpu";
+ pinctrl-0 = <&vsel2_gpio>;
+ vsel-gpios = <&gpio1 14 0>;
+ regulator-min-microvolt = <712500>;
+ regulator-max-microvolt = <1500000>;
+ regulator-ramp-delay = <1000>;
+ fcs,suspend-voltage-selector = <1>;
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-initial-state = <3>;
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ rk808: pmic@1b {
+ compatible = "rockchip,rk808";
+ reg = <0x1b>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
+ pmic,stby-gpio = <&gpio1 24 GPIO_ACTIVE_LOW>;
+ pmic,hold-gpio = <&gpio1 13 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pmic_int_l &pmic_dvs2 &pmic_stby &pmic_hold>;
+ rockchip,system-power-controller;
+ wakeup-source;
+ #clock-cells = <1>;
+ clock-output-names = "xin32k", "rk808-clkout2";
+
+ vcc1-supply = <&vcc3v3_sys>;
+ vcc2-supply = <&vcc3v3_sys>;
+ vcc3-supply = <&vcc3v3_sys>;
+ vcc4-supply = <&vcc3v3_sys>;
+ vcc6-supply = <&vcc3v3_sys>;
+ vcc7-supply = <&vcc3v3_sys>;
+ vcc8-supply = <&vcc3v3_sys>;
+ vcc9-supply = <&vcc3v3_sys>;
+ vcc10-supply = <&vcc3v3_sys>;
+ vcc11-supply = <&vcc3v3_sys>;
+ vcc12-supply = <&vcc3v3_sys>;
+ vddio-supply = <&vcc1v8_pmu>;
+
+ regulators {
+ vdd_center: DCDC_REG1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <750000>;
+ regulator-max-microvolt = <1350000>;
+ regulator-ramp-delay = <6001>;
+ regulator-name = "vdd_center";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vdd_cpu_l: DCDC_REG2 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <750000>;
+ regulator-max-microvolt = <1350000>;
+ regulator-ramp-delay = <6001>;
+ regulator-name = "vdd_cpu_l";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc_ddr: DCDC_REG3 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vcc_ddr";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ };
+ };
+
+ vcc_1v8: DCDC_REG4 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcc_1v8";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <1800000>;
+ };
+ };
+
+ vcc1v8_dvp: LDO_REG1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcc1v8_dvp";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc3v0_tp: LDO_REG2 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-name = "vcc3v0_tp";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc1v8_pmu: LDO_REG3 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcc1v8_pmu";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <1800000>;
+ };
+ };
+
+ vcc_sd: LDO_REG4 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-name = "vcc_sd";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <3300000>;
+ };
+ };
+
+ vcca3v0_codec: LDO_REG5 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-name = "vcca3v0_codec";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc_1v5: LDO_REG6 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1500000>;
+ regulator-max-microvolt = <1500000>;
+ regulator-name = "vcc_1v5";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <1500000>;
+ };
+ };
+
+ vcca1v8_codec: LDO_REG7 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcca1v8_codec";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc_3v0: LDO_REG8 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-name = "vcc_3v0";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <3000000>;
+ };
+ };
+
+ vcc3v3_s3: SWITCH_REG1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vcc3v3_s3";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc3v3_s0: SWITCH_REG2 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vcc3v3_s0";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+ };
+ };
+};
+
+&vdd_cpu_b {
+ /delete-property/ vsel-gpios; //wk2xxx reset pin
+};
+
+&i2c1 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <300>;
+ i2c-scl-falling-time-ns = <15>;
+
+ rt5640: rt5640@1c {
+ #sound-dai-cells = <0>;
+ compatible = "realtek,rt5640";
+ reg = <0x1c>;
+ clocks = <&cru SCLK_I2S_8CH_OUT>;
+ clock-names = "mclk";
+ realtek,in1-differential;
+ pinctrl-names = "default";
+ pinctrl-0 = <&rt5640_hpcon>;
+ hp-con-gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+ //hp-det-gpio = <&gpio4 28 GPIO_ACTIVE_LOW>;
+ aux-det-gpio = <&gpio2 0 GPIO_ACTIVE_LOW>;
+ io-channels = <&saradc 4>;
+ hp-det-adc-value = <500>;
+ };
+};
+
+&i2c3 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <450>;
+ i2c-scl-falling-time-ns = <15>;
+};
+
+&i2c4 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <475>;
+ i2c-scl-falling-time-ns = <26>;
+
+ fusb0: fusb30x@22 {
+ status = "disabled";
+ compatible = "fairchild,fusb302";
+ reg = <0x22>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&fusb0_int>;
+ int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
+ vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+ };
+
+ gsl3680: gsl3680@40 {
+ status = "disabled";
+ compatible = "gslX680";
+ reg = <0x40>;
+ screen_max_x = <2048>;
+ screen_max_y = <1536>;
+ revert_xy = <1>;
+ revert_x = <1>;
+ revert_y = <0>;
+ touch-gpio = <&gpio4 28 IRQ_TYPE_LEVEL_LOW>;
+ reset-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+ };
+
+ mpu6050:mpu@68{
+ status = "disabled";
+ compatible = "invensense,mpu6050";
+ reg = <0x68>;
+ mpu-int_config = <0x10>;
+ mpu-level_shifter = <0>;
+ mpu-orientation = <0 1 0 1 0 0 0 0 1>;
+ orientation-x= <1>;
+ orientation-y= <1>;
+ orientation-z= <1>;
+ irq-gpio = <&gpio1 4 IRQ_TYPE_LEVEL_LOW>;
+ mpu-debug = <1>;
+ };
+};
+
+&i2s0 {
+ status = "okay";
+ rockchip,i2s-broken-burst-len;
+ rockchip,playback-channels = <8>;
+ rockchip,capture-channels = <8>;
+ assigned-clocks = <&cru SCLK_I2S0_DIV>, <&cru SCLK_I2S_8CH>;
+ assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S0_8CH>;
+ #sound-dai-cells = <0>;
+};
+
+&i2s1 {
+ status = "okay";
+ rockchip,i2s-broken-burst-len;
+ rockchip,playback-channels = <2>;
+ rockchip,capture-channels = <2>;
+ assigned-clocks = <&cru SCLK_I2S1_DIV>, <&cru SCLK_I2S_8CH>;
+ assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S1_8CH>;
+ #sound-dai-cells = <0>;
+};
+
+&i2s2 {
+ status = "okay";
+ #sound-dai-cells = <0>;
+};
+
+&io_domains {
+ status = "okay";
+
+ bt656-supply = <&vcc1v8_dvp>; /* bt656_gpio2ab_ms */
+ audio-supply = <&vcca1v8_codec>; /* audio_gpio3d4a_ms */
+ sdmmc-supply = <&vcc_sd>; /* sdmmc_gpio4b_ms */
+ gpio1830-supply = <&vcc_3v0>; /* gpio1833_gpio4cd_ms */
+};
+
+&pcie_phy {
+ status = "okay";
+};
+
+&pcie0 {
+ ep-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>;
+ num-lanes = <4>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie_clkreqn_cpm>;
+ status = "okay";
+};
+
+&pmu_io_domains {
+ status = "okay";
+ pmu1830-supply = <&vcc_3v0>;
+};
+
+&pinctrl {
+ buttons {
+ pwrbtn: pwrbtn {
+ rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+
+ lcd-panel {
+ lcd_panel_reset: lcd-panel-reset {
+ rockchip,pins = <4 29 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ lcd_en: lcd-en {
+ rockchip,pins = <1 1 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+
+ pcie {
+ pcie_drv: pcie-drv {
+ rockchip,pins =
+ <2 2 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ pcie_3g_drv: pcie-3g-drv {
+ rockchip,pins =
+ <2 6 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ };
+
+ pmic {
+ vsel1_gpio: vsel1-gpio {
+ rockchip,pins =
+ <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+
+ vsel2_gpio: vsel2-gpio {
+ rockchip,pins =
+ <1 14 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+ };
+
+ sdio-pwrseq {
+ wifi_enable_h: wifi-enable-h {
+ rockchip,pins =
+ <0 10 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ wireless-bluetooth {
+ uart0_gpios: uart0-gpios {
+ rockchip,pins =
+ <2 19 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ leds {
+ led_power: led-power {
+ rockchip,pins =
+ <2 27 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ led_user: led-user {
+ rockchip,pins =
+ <0 13 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ rt5640 {
+ rt5640_hpcon: rt5640-hpcon {
+ rockchip,pins = <4 21 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ pmic {
+ pmic_int_l: pmic-int-l {
+ rockchip,pins =
+ <1 21 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ pmic_dvs2: pmic-dvs2 {
+ rockchip,pins =
+ <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+ pmic_stby: pmic-stby {
+ rockchip,pins =
+ <1 24 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ pmic_hold: pmic-hold{
+ rockchip,pins =
+ <1 13 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ vsel1_gpio: vsel1-gpio {
+ rockchip,pins =
+ <1 18 0 &pcfg_pull_down>;
+ };
+ vsel2_gpio: vsel2-gpio {
+ rockchip,pins =
+ <1 14 0 &pcfg_pull_down>;
+ };
+ };
+
+ usb2 {
+ host_vbus_drv: host-vbus-drv {
+ rockchip,pins =
+ <4 25 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ fusb30x {
+ fusb0_int: fusb0-int {
+ rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+ vbus {
+ vbus_5v_drv: vbus-5v-drv {
+ rockchip,pins =
+ <1 3 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+};
+
+&pwm0 {
+ status = "okay";
+};
+
+&pwm1 {
+ status = "okay";
+};
+
+&pwm2 {
+ status = "okay";
+};
+
+&rkvdec {
+ status = "okay";
+};
+
+&rockchip_suspend {
+ rockchip,power-ctrl =
+ <&gpio1 17 GPIO_ACTIVE_HIGH>,
+ <&gpio1 14 GPIO_ACTIVE_HIGH>;
+};
+
+&route_edp {
+ status = "disabled";
+};
+
+&route_hdmi {
+ status = "okay";
+ logo,mode = "center";
+};
+
+&cdn_dp {
+ status = "disabled";
+ extcon = <&fusb0>;
+ phys = <&tcphy0_dp>;
+};
+
+&hdmi_in_vopl {
+ status = "disabled";
+};
+
+&dsi_in_vopb {
+ status = "okay";
+};
+
+&dsi_in_vopl {
+ status = "okay";
+};
+
+&dp_in_vopb {
+ status = "disabled";
+};
+
+&saradc {
+ status = "okay";
+ vref-supply = <&vccadc_ref>;
+};
+
+&sdhci {
+ bus-width = <8>;
+ keep-power-in-suspend;
+ mmc-hs400-1_8v;
+ mmc-hs400-enhanced-strobe;
+ non-removable;
+ status = "okay";
+ supports-emmc;
+};
+
+&sdmmc {
+ max-frequency = <150000000>;
+ supports-sd;
+ bus-width = <4>;
+ cap-mmc-highspeed;
+ cap-sd-highspeed;
+ disable-wp;
+ num-slots = <1>;
+ vqmmc-supply = <&vcc_sd>;
+ pwrseq-gpio = <&gpio4 27 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
+ status = "okay";
+};
+
+&sdio0 {
+ max-frequency = <50000000>;
+ supports-sdio;
+ bus-width = <4>;
+ disable-wp;
+ cap-sd-highspeed;
+ keep-power-in-suspend;
+ mmc-pwrseq = <&sdio_pwrseq>;
+ non-removable;
+ num-slots = <1>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
+ sd-uhs-sdr104;
+ status = "okay";
+};
+
+&spi1 {
+ status = "okay";
+ spi_wk2xxx: spi_wk2xxx@00{
+ status = "okay";
+ compatible = "firefly,spi-wk2xxx";
+ reg = <0x00>;
+ spi-max-frequency = <10000000>;
+ power-gpio = <&gpio2 4 GPIO_ACTIVE_HIGH>;
+ reset-gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+ irq-gpio = <&gpio1 2 IRQ_TYPE_EDGE_FALLING>;
+ cs-gpio = <&gpio1 10 GPIO_ACTIVE_HIGH>;
+ /* rk3399 driver support SPI_CPOL | SPI_CPHA | SPI_CS_HIGH */
+ //spi-cpha; /* SPI mode: CPHA=1 */
+ //spi-cpol; /* SPI mode: CPOL=1 */
+ //spi-cs-high;
+ };
+};
+
+&spdif {
+ status = "okay";
+ pinctrl-0 = <&spdif_bus_1>;
+ i2c-scl-rising-time-ns = <450>;
+ i2c-scl-falling-time-ns = <15>;
+ #sound-dai-cells = <0>;
+};
+
+&tcphy0 {
+ extcon = <&fusb0>;
+ /delete-property/ extcon;
+ status = "okay";
+};
+
+&tcphy1 {
+ status = "okay";
+};
+
+&tsadc {
+ /* tshut mode 0:CRU 1:GPIO */
+ rockchip,hw-tshut-mode = <1>;
+ /* tshut polarity 0:LOW 1:HIGH */
+ rockchip,hw-tshut-polarity = <1>;
+ status = "okay";
+};
+
+&u2phy0 {
+ status = "okay";
+ extcon = <&fusb0>;
+ /delete-property/ extcon;
+
+ u2phy0_otg: otg-port {
+ rockchip,vbus-always-on;
+ vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+ status = "okay";
+ };
+
+ u2phy0_host: host-port {
+ phy-supply = <&vcc5v0_host>;
+ status = "okay";
+ };
+};
+
+&u2phy1 {
+ status = "okay";
+
+ u2phy1_otg: otg-port {
+ status = "okay";
+ };
+
+ u2phy1_host: host-port {
+ phy-supply = <&vcc5v0_host>;
+ status = "okay";
+ };
+};
+
+&pwm3 {
+ status = "okay";
+ interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH 0>;
+ compatible = "rockchip,remotectl-pwm";
+ remote_pwm_id = <3>;
+ handle_cpu_id = <0>;
+
+ ir_key1{
+ rockchip,usercode = <0xff00>;
+ rockchip,key_table =
+ <0xeb KEY_POWER>,
+ <0xec KEY_COMPOSE>,
+ <0xfe KEY_BACK>,
+ <0xb7 KEY_HOME>,
+ <0xa3 KEY_WWW>,
+ <0xf4 KEY_VOLUMEUP>,
+ <0xa7 KEY_VOLUMEDOWN>,
+ <0xf8 KEY_ENTER>,
+ <0xfc KEY_UP>,
+ <0xfd KEY_DOWN>,
+ <0xf1 KEY_LEFT>,
+ <0xe5 KEY_RIGHT>;
+ };
+};
+
+&uart0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_xfer &uart0_cts>;
+ status = "okay";
+};
+
+&uart2 {
+ status = "okay";
+};
+
+&uart4 {
+ status = "disabled";
+ current-speed = <9600>;
+ no-loopback-test;
+};
+
+&usbdrd3_0 {
+ status = "okay";
+ extcon = <&fusb0>;
+ /delete-property/ extcon;
+};
+
+&usbdrd3_1 {
+ status = "okay";
+};
+
+&usbdrd_dwc3_0 {
+ status = "okay";
+ dr_mode = "host";
+};
+
+&usbdrd_dwc3_1 {
+ status = "okay";
+ dr_mode = "host";
+};
+
+&usb_host0_ehci {
+ status = "okay";
+};
+
+&usb_host0_ohci {
+ status = "okay";
+};
+
+&usb_host1_ehci {
+ status = "okay";
+};
+
+&usb_host1_ohci {
+ status = "okay";
+};
+
+&vopb {
+ status = "okay";
+};
+
+&vopb_mmu {
+ status = "okay";
+};
+
+&vopl {
+ status = "okay";
+};
+
+&vopl_mmu {
+ status = "okay";
+};
+
+&vpu {
+ status = "okay";
+ /* 0 means ion, 1 means drm */
+ //allocator = <0>;
+};
rockchip,i2s-broken-burst-len;
rockchip,playback-channels = <8>;
rockchip,capture-channels = <8>;
+ assigned-clocks = <&cru SCLK_I2S0_DIV>, <&cru SCLK_I2S_8CH>;
+ assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S0_8CH>;
#sound-dai-cells = <0>;
};
rockchip,i2s-broken-burst-len;
rockchip,playback-channels = <2>;
rockchip,capture-channels = <2>;
+ assigned-clocks = <&cru SCLK_I2S1_DIV>, <&cru SCLK_I2S_8CH>;
+ assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S1_8CH>;
#sound-dai-cells = <0>;
};
--- /dev/null
+/*
+ * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ * a) This file is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ * b) Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/dts-v1/;
+
+#include "dt-bindings/pwm/pwm.h"
+#include "rk3399.dtsi"
+#include "rk3399-opp.dtsi"
+#include "rk3399-linux.dtsi"
+#include <dt-bindings/input/input.h>
+
+/ {
+ model = "Rockchip RK3399 Firefly Board (Linux Opensource)";
+ compatible = "rockchip,rk3399-firefly-linux", "rockchip,rk3399";
+
+ backlight: backlight {
+ status = "okay";
+ compatible = "pwm-backlight";
+ pwms = <&pwm1 0 25000 0>;
+ brightness-levels = <
+ 0 1 2 3 4 5 6 7
+ 8 9 10 11 12 13 14 15
+ 16 17 18 19 20 21 22 23
+ 24 25 26 27 28 29 30 31
+ 32 33 34 35 36 37 38 39
+ 40 41 42 43 44 45 46 47
+ 48 49 50 51 52 53 54 55
+ 56 57 58 59 60 61 62 63
+ 64 65 66 67 68 69 70 71
+ 72 73 74 75 76 77 78 79
+ 80 81 82 83 84 85 86 87
+ 88 89 90 91 92 93 94 95
+ 96 97 98 99 100 101 102 103
+ 104 105 106 107 108 109 110 111
+ 112 113 114 115 116 117 118 119
+ 120 121 122 123 124 125 126 127
+ 128 129 130 131 132 133 134 135
+ 136 137 138 139 140 141 142 143
+ 144 145 146 147 148 149 150 151
+ 152 153 154 155 156 157 158 159
+ 160 161 162 163 164 165 166 167
+ 168 169 170 171 172 173 174 175
+ 176 177 178 179 180 181 182 183
+ 184 185 186 187 188 189 190 191
+ 192 193 194 195 196 197 198 199
+ 200 201 202 203 204 205 206 207
+ 208 209 210 211 212 213 214 215
+ 216 217 218 219 220 221 222 223
+ 224 225 226 227 228 229 230 231
+ 232 233 234 235 236 237 238 239
+ 240 241 242 243 244 245 246 247
+ 248 249 250 251 252 253 254 255>;
+ default-brightness-level = <200>;
+ };
+
+ clkin_gmac: external-gmac-clock {
+ compatible = "fixed-clock";
+ clock-frequency = <125000000>;
+ clock-output-names = "clkin_gmac";
+ #clock-cells = <0>;
+ };
+
+ dw_hdmi_audio: dw-hdmi-audio {
+ status = "disabled";
+ compatible = "rockchip,dw-hdmi-audio";
+ #sound-dai-cells = <0>;
+ };
+
+ edp_panel: edp-panel {
+ status = "disabled";
+ compatible = "sharp,lcd-f402", "panel-simple";
+ backlight = <&backlight>;
+ power-supply = <&vcc_lcd>;
+ enable-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&lcd_panel_reset>;
+
+ ports {
+ panel_in_edp: endpoint {
+ remote-endpoint = <&edp_out_panel>;
+ };
+ };
+ };
+
+ fiq_debugger: fiq-debugger {
+ compatible = "rockchip,fiq-debugger";
+ rockchip,serial-id = <2>;
+ rockchip,signal-irq = <182>;
+ rockchip,wake-irq = <0>;
+ rockchip,irq-mode-enable = <1>; /* If enable uart uses irq instead of fiq */
+ rockchip,baudrate = <1500000>; /* Only 115200 and 1500000 */
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart2c_xfer>;
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ autorepeat;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&pwrbtn>;
+
+ button@0 {
+ gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_POWER>;
+ label = "GPIO Key Power";
+ linux,input-type = <1>;
+ gpio-key,wakeup = <1>;
+ debounce-interval = <100>;
+ };
+ };
+
+ rt5640-sound {
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,name = "rockchip,rt5640-codec";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,widgets =
+ "Microphone", "Mic Jack",
+ "Headphone", "Headphone Jack";
+ simple-audio-card,routing =
+ "Mic Jack", "MICBIAS1",
+ "IN1P", "Mic Jack",
+ "Headphone Jack", "HPOL",
+ "Headphone Jack", "HPOR";
+ simple-audio-card,cpu {
+ sound-dai = <&i2s1>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&rt5640>;
+ };
+ };
+
+ hdmi_sound: hdmi-sound {
+ status = "disabled";
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,name = "rockchip,hdmi";
+
+ simple-audio-card,cpu {
+ sound-dai = <&i2s2>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&dw_hdmi_audio>;
+ };
+ };
+
+ hdmi_codec: hdmi-codec {
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,name = "HDMI-CODEC";
+
+ simple-audio-card,cpu {
+ sound-dai = <&i2s2>;
+ };
+
+ simple-audio-card,codec {
+ sound-dai = <&hdmi>;
+ };
+ };
+
+ spdif-sound {
+ status = "okay";
+ compatible = "simple-audio-card";
+ simple-audio-card,name = "ROCKCHIP,SPDIF";
+ simple-audio-card,cpu {
+ sound-dai = <&spdif>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&spdif_out>;
+ };
+ };
+
+ spdif_out: spdif-out {
+ status = "okay";
+ compatible = "linux,spdif-dit";
+ #sound-dai-cells = <0>;
+ };
+
+ sdio_pwrseq: sdio-pwrseq {
+ compatible = "mmc-pwrseq-simple";
+ clocks = <&rk808 1>;
+ clock-names = "ext_clock";
+ pinctrl-names = "default";
+ pinctrl-0 = <&wifi_enable_h>;
+
+ /*
+ * On the module itself this is one of these (depending
+ * on the actual card populated):
+ * - SDIO_RESET_L_WL_REG_ON
+ * - PDN (power down when low)
+ */
+ reset-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; /* GPIO0_B2 */
+ };
+
+ vcc3v3_pcie: vcc3v3-pcie-regulator {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ regulator-always-on;
+ regulator-boot-on;
+ gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie_drv>;
+ regulator-name = "vcc3v3_pcie";
+ };
+
+ vcc3v3_3g: vcc3v3-3g-regulator {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ regulator-always-on;
+ regulator-boot-on;
+ gpio = <&gpio0 2 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie_3g_drv>;
+ regulator-name = "vcc3v3_3g";
+ };
+
+ vcc3v3_sys: vcc3v3-sys {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc3v3_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ };
+
+ vcc5v0_host: vcc5v0-host-regulator {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&host_vbus_drv>;
+ regulator-name = "vcc5v0_host";
+ regulator-always-on;
+ };
+
+ vcc5v0_sys: vcc5v0-sys {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc5v0_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ };
+
+ vcc_phy: vcc-phy-regulator {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc_phy";
+ regulator-always-on;
+ regulator-boot-on;
+ };
+
+ vdd_log: vdd-log {
+ compatible = "pwm-regulator";
+ pwms = <&pwm2 0 25000 1>;
+ regulator-name = "vdd_log";
+ regulator-min-microvolt = <800000>;
+ regulator-max-microvolt = <1100000>;
+ regulator-always-on;
+ regulator-boot-on;
+
+ /* for rockchip boot on */
+ rockchip,pwm_id= <2>;
+ rockchip,pwm_voltage = <1000000>;
+ };
+
+ vccadc_ref: vccadc-ref {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc1v8_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+
+ vcc_lcd: vcc-lcd-regulator {
+ compatible = "regulator-fixed";
+ regulator-always-on;
+ regulator-boot-on;
+ enable-active-high;
+ gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&lcd_en>;
+ regulator-name = "vcc_lcd";
+ };
+
+ wireless-wlan {
+ compatible = "wlan-platdata";
+ rockchip,grf = <&grf>;
+ wifi_chip_type = "ap6354";
+ sdio_vref = <1800>;
+ WIFI,host_wake_irq = <&gpio0 3 GPIO_ACTIVE_HIGH>; /* GPIO0_a3 */
+ status = "okay";
+ };
+
+ wireless-bluetooth {
+ compatible = "bluetooth-platdata";
+ //wifi-bt-power-toggle;
+ clocks = <&rk808 1>;
+ clock-names = "ext_clock";
+ uart_rts_gpios = <&gpio2 19 GPIO_ACTIVE_LOW>; /* GPIO2_C3 */
+ pinctrl-names = "default", "rts_gpio";
+ pinctrl-0 = <&uart0_rts>;
+ pinctrl-1 = <&uart0_gpios>;
+ //BT,power_gpio = <&gpio3 19 GPIO_ACTIVE_HIGH>; /* GPIOx_xx */
+ BT,reset_gpio = <&gpio0 9 GPIO_ACTIVE_HIGH>; /* GPIO0_B1 */
+ BT,wake_gpio = <&gpio2 26 GPIO_ACTIVE_HIGH>; /* GPIO2_D2 */
+ BT,wake_host_irq = <&gpio0 4 GPIO_ACTIVE_HIGH>; /* GPIO0_A4 */
+ status = "okay";
+ };
+
+ leds {
+ compatible = "gpio-leds";
+ power {
+ label = "firefly:blue:power";
+ linux,default-trigger = "ir-power-click";
+ default-state = "on";
+ gpios = <&gpio2 27 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&led_power>;
+ };
+ user {
+ label = "firefly:yellow:user";
+ linux,default-trigger = "ir-user-click";
+ default-state = "off";
+ gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&led_user>;
+ };
+ };
+};
+
+&dsi {
+ status = "okay";
+ dsi_panel: panel {
+ compatible ="simple-panel-dsi";
+ reg = <0>;
+ backlight = <&backlight>;
+ dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST)>;
+ dsi,format = <MIPI_DSI_FMT_RGB888>;
+ //bus-format = <MEDIA_BUS_FMT_RGB666_1X18>;
+ dsi,lanes = <4>;
+ /*
+ dsi,channel = <0>;
+ delay,enable = <35>;
+ delay,prepare = <6>;
+ delay,unprepare = <0>;
+ delay,disable = <20>;
+ size,width = <120>;
+ size,height = <170>;
+ */
+ status = "okay";
+
+ panel-init-sequence = [
+ 05 20 01 29
+ 05 96 01 11
+ ];
+
+ panel-exit-sequence = [
+ 05 05 01 28
+ 05 78 01 10
+ ];
+
+ disp_timings: display-timings {
+ native-mode = <&timing0>;
+ timing0: timing0 {
+ clock-frequency = <64000000>;
+ hactive = <768>;
+ vactive = <1024>;
+ hsync-len = <5>; //20, 50
+ hback-porch = <25>; //50, 56
+ hfront-porch = <150>;//50, 30
+ vsync-len = <1>;
+ vback-porch = <15>;
+ vfront-porch = <100>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <0>;
+ pixelclk-active = <0>;
+ };
+ };
+ };
+};
+
+&cpu_l0 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l1 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l2 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l3 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_b0 {
+ cpu-supply = <&vdd_cpu_b>;
+};
+
+&cpu_b1 {
+ cpu-supply = <&vdd_cpu_b>;
+};
+
+&display_subsystem {
+ status = "okay";
+};
+
+&edp {
+ status = "disabled";
+
+ ports {
+ edp_out: port@1 {
+ reg = <1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ edp_out_panel: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&panel_in_edp>;
+ };
+ };
+ };
+};
+
+&emmc_phy {
+ status = "okay";
+};
+
+&gmac {
+ phy-supply = <&vcc_phy>;
+ phy-mode = "rgmii";
+ clock_in_out = "input";
+ snps,reset-gpio = <&gpio3 15 GPIO_ACTIVE_LOW>;
+ snps,reset-active-low;
+ snps,reset-delays-us = <0 10000 50000>;
+ assigned-clocks = <&cru SCLK_RMII_SRC>;
+ assigned-clock-parents = <&clkin_gmac>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&rgmii_pins>;
+ tx_delay = <0x28>;
+ rx_delay = <0x1B>;
+ status = "okay";
+};
+
+&gpu {
+ status = "okay";
+ mali-supply = <&vdd_gpu>;
+};
+
+&hdmi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ #sound-dai-cells = <0>;
+ status = "okay";
+};
+
+&i2c0 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <168>;
+ i2c-scl-falling-time-ns = <4>;
+ clock-frequency = <400000>;
+
+ vdd_cpu_b: syr827@40 {
+ compatible = "silergy,syr827";
+ reg = <0x40>;
+ vin-supply = <&vcc5v0_sys>;
+ regulator-compatible = "fan53555-reg";
+ regulator-name = "vdd_cpu_b";
+ regulator-min-microvolt = <712500>;
+ regulator-max-microvolt = <1500000>;
+ regulator-ramp-delay = <1000>;
+ vsel-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+ fcs,suspend-voltage-selector = <1>;
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-initial-state = <3>;
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vdd_gpu: syr828@41 {
+ compatible = "silergy,syr828";
+ reg = <0x41>;
+ vin-supply = <&vcc5v0_sys>;
+ regulator-compatible = "fan53555-reg";
+ regulator-name = "vdd_gpu";
+ regulator-min-microvolt = <712500>;
+ regulator-max-microvolt = <1500000>;
+ regulator-ramp-delay = <1000>;
+ fcs,suspend-voltage-selector = <1>;
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-initial-state = <3>;
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ rk808: pmic@1b {
+ compatible = "rockchip,rk808";
+ reg = <0x1b>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pmic_int_l &pmic_dvs2>;
+ rockchip,system-power-controller;
+ wakeup-source;
+ #clock-cells = <1>;
+ clock-output-names = "xin32k", "rk808-clkout2";
+
+ vcc1-supply = <&vcc3v3_sys>;
+ vcc2-supply = <&vcc3v3_sys>;
+ vcc3-supply = <&vcc3v3_sys>;
+ vcc4-supply = <&vcc3v3_sys>;
+ vcc6-supply = <&vcc3v3_sys>;
+ vcc7-supply = <&vcc3v3_sys>;
+ vcc8-supply = <&vcc3v3_sys>;
+ vcc9-supply = <&vcc3v3_sys>;
+ vcc10-supply = <&vcc3v3_sys>;
+ vcc11-supply = <&vcc3v3_sys>;
+ vcc12-supply = <&vcc3v3_sys>;
+ vddio-supply = <&vcc1v8_pmu>;
+
+ regulators {
+ vdd_center: DCDC_REG1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <750000>;
+ regulator-max-microvolt = <1350000>;
+ regulator-ramp-delay = <6001>;
+ regulator-name = "vdd_center";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vdd_cpu_l: DCDC_REG2 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <750000>;
+ regulator-max-microvolt = <1350000>;
+ regulator-ramp-delay = <6001>;
+ regulator-name = "vdd_cpu_l";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc_ddr: DCDC_REG3 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vcc_ddr";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ };
+ };
+
+ vcc_1v8: DCDC_REG4 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcc_1v8";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <1800000>;
+ };
+ };
+
+ vcc1v8_dvp: LDO_REG1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcc1v8_dvp";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc3v0_tp: LDO_REG2 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-name = "vcc3v0_tp";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc1v8_pmu: LDO_REG3 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcc1v8_pmu";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <1800000>;
+ };
+ };
+
+ vcc_sd: LDO_REG4 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-name = "vcc_sd";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <3300000>;
+ };
+ };
+
+ vcca3v0_codec: LDO_REG5 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-name = "vcca3v0_codec";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc_1v5: LDO_REG6 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1500000>;
+ regulator-max-microvolt = <1500000>;
+ regulator-name = "vcc_1v5";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <1500000>;
+ };
+ };
+
+ vcca1v8_codec: LDO_REG7 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcca1v8_codec";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc_3v0: LDO_REG8 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-name = "vcc_3v0";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <3000000>;
+ };
+ };
+
+ vcc3v3_s3: SWITCH_REG1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vcc3v3_s3";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc3v3_s0: SWITCH_REG2 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vcc3v3_s0";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+ };
+ };
+};
+
+&i2c1 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <300>;
+ i2c-scl-falling-time-ns = <15>;
+
+ rt5640: rt5640@1c {
+ #sound-dai-cells = <0>;
+ compatible = "realtek,rt5640";
+ reg = <0x1c>;
+ clocks = <&cru SCLK_I2S_8CH_OUT>;
+ clock-names = "mclk";
+ realtek,in1-differential;
+ pinctrl-names = "default";
+ pinctrl-0 = <&rt5640_hpcon>;
+ hp-con-gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+ //hp-det-gpio = <&gpio4 28 GPIO_ACTIVE_LOW>;
+ io-channels = <&saradc 4>;
+ hp-det-adc-value = <500>;
+ };
+};
+
+&i2c3 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <450>;
+ i2c-scl-falling-time-ns = <15>;
+};
+
+&i2c4 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <475>;
+ i2c-scl-falling-time-ns = <26>;
+
+ fusb0: fusb30x@22 {
+ compatible = "fairchild,fusb302";
+ reg = <0x22>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&fusb0_int>;
+ int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
+ vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+ status = "okay";
+ };
+
+ gsl3680: gsl3680@40 {
+ status = "okay";
+ compatible = "gslX680";
+ reg = <0x40>;
+ screen_max_x = <1536>;
+ screen_max_y = <2048>;
+ touch-gpio = <&gpio4 28 IRQ_TYPE_LEVEL_LOW>;
+ reset-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+ };
+
+ mpu6050:mpu@68{
+ status = "disabled";
+ compatible = "invensense,mpu6050";
+ reg = <0x68>;
+ mpu-int_config = <0x10>;
+ mpu-level_shifter = <0>;
+ mpu-orientation = <0 1 0 1 0 0 0 0 1>;
+ orientation-x= <1>;
+ orientation-y= <1>;
+ orientation-z= <1>;
+ irq-gpio = <&gpio1 4 IRQ_TYPE_LEVEL_LOW>;
+ mpu-debug = <1>;
+ };
+};
+
+&i2s0 {
+ status = "okay";
+ rockchip,i2s-broken-burst-len;
+ rockchip,playback-channels = <8>;
+ rockchip,capture-channels = <8>;
+ assigned-clocks = <&cru SCLK_I2S0_DIV>, <&cru SCLK_I2S_8CH>;
+ assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S0_8CH>;
+ #sound-dai-cells = <0>;
+};
+
+&i2s1 {
+ status = "okay";
+ rockchip,i2s-broken-burst-len;
+ rockchip,playback-channels = <2>;
+ rockchip,capture-channels = <2>;
+ assigned-clocks = <&cru SCLK_I2S1_DIV>, <&cru SCLK_I2S_8CH>;
+ assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S1_8CH>;
+ #sound-dai-cells = <0>;
+};
+
+&i2s2 {
+ #sound-dai-cells = <0>;
+ status = "okay";
+};
+
+&io_domains {
+ status = "okay";
+
+ bt656-supply = <&vcc1v8_dvp>; /* bt656_gpio2ab_ms */
+ audio-supply = <&vcca1v8_codec>; /* audio_gpio3d4a_ms */
+ sdmmc-supply = <&vcc_sd>; /* sdmmc_gpio4b_ms */
+ gpio1830-supply = <&vcc_3v0>; /* gpio1833_gpio4cd_ms */
+};
+
+&pcie_phy {
+ status = "okay";
+};
+
+&pcie0 {
+ ep-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>;
+ num-lanes = <4>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie_clkreqn_cpm>;
+ status = "okay";
+};
+
+&pmu_io_domains {
+ status = "okay";
+ pmu1830-supply = <&vcc_3v0>;
+};
+
+&pinctrl {
+ buttons {
+ pwrbtn: pwrbtn {
+ rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+ lcd-panel {
+ lcd_panel_reset: lcd-panel-reset {
+ rockchip,pins = <4 29 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ lcd_en: lcd-en {
+ rockchip,pins = <1 1 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+ pcie {
+ pcie_drv: pcie-drv {
+ rockchip,pins =
+ <1 17 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ pcie_3g_drv: pcie-3g-drv {
+ rockchip,pins =
+ <0 2 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ };
+
+ pmic {
+ vsel1_gpio: vsel1-gpio {
+ rockchip,pins =
+ <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+
+ vsel2_gpio: vsel2-gpio {
+ rockchip,pins =
+ <1 14 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+ };
+
+ sdio-pwrseq {
+ wifi_enable_h: wifi-enable-h {
+ rockchip,pins =
+ <0 10 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ wireless-bluetooth {
+ uart0_gpios: uart0-gpios {
+ rockchip,pins =
+ <2 19 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ leds {
+ led_power: led-power {
+ rockchip,pins = <2 27 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+
+ led_user: led-user {
+ rockchip,pins = <0 13 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ rt5640 {
+ rt5640_hpcon: rt5640-hpcon {
+ rockchip,pins = <4 21 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ pmic {
+ pmic_int_l: pmic-int-l {
+ rockchip,pins =
+ <1 21 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ pmic_dvs2: pmic-dvs2 {
+ rockchip,pins =
+ <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+ };
+
+ usb2 {
+ host_vbus_drv: host-vbus-drv {
+ rockchip,pins =
+ <4 25 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ fusb30x {
+ fusb0_int: fusb0-int {
+ rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+};
+
+&pwm0 {
+ status = "okay";
+};
+
+&pwm1 {
+ status = "okay";
+};
+
+&pwm2 {
+ status = "okay";
+};
+
+&rkvdec {
+ status = "okay";
+};
+
+&rockchip_suspend {
+ rockchip,power-ctrl =
+ <&gpio1 18 GPIO_ACTIVE_LOW>,
+ <&gpio1 14 GPIO_ACTIVE_HIGH>;
+};
+
+&route_edp {
+ status = "disabled";
+};
+
+&route_hdmi {
+ status = "okay";
+ logo,mode = "center";
+};
+
+&cdn_dp {
+ status = "disabled";
+ extcon = <&fusb0>;
+ phys = <&tcphy0_dp>;
+};
+
+&hdmi_in_vopl {
+ status = "disabled";
+};
+
+&dsi_in_vopb {
+ status = "okay";
+};
+
+&dsi_in_vopl {
+ status = "okay";
+};
+
+&dp_in_vopb {
+ status = "disabled";
+};
+
+&saradc {
+ status = "okay";
+ vref-supply = <&vccadc_ref>;
+};
+
+&sdhci {
+ bus-width = <8>;
+ keep-power-in-suspend;
+ mmc-hs400-1_8v;
+ mmc-hs400-enhanced-strobe;
+ non-removable;
+ status = "okay";
+ supports-emmc;
+};
+
+&sdmmc {
+ max-frequency = <150000000>;
+ supports-sd;
+ bus-width = <4>;
+ cap-mmc-highspeed;
+ cap-sd-highspeed;
+ disable-wp;
+ num-slots = <1>;
+ vqmmc-supply = <&vcc_sd>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
+ status = "okay";
+};
+
+&sdio0 {
+ max-frequency = <50000000>;
+ supports-sdio;
+ bus-width = <4>;
+ disable-wp;
+ cap-sd-highspeed;
+ keep-power-in-suspend;
+ mmc-pwrseq = <&sdio_pwrseq>;
+ non-removable;
+ num-slots = <1>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
+ sd-uhs-sdr104;
+ status = "okay";
+};
+
+&spdif {
+ status = "okay";
+ pinctrl-0 = <&spdif_bus_1>;
+ i2c-scl-rising-time-ns = <450>;
+ i2c-scl-falling-time-ns = <15>;
+ #sound-dai-cells = <0>;
+};
+
+&tcphy0 {
+ extcon = <&fusb0>;
+ status = "okay";
+};
+
+&tcphy1 {
+ status = "okay";
+};
+
+&tsadc {
+ /* tshut mode 0:CRU 1:GPIO */
+ rockchip,hw-tshut-mode = <1>;
+ /* tshut polarity 0:LOW 1:HIGH */
+ rockchip,hw-tshut-polarity = <1>;
+ status = "okay";
+};
+
+&u2phy0 {
+ status = "okay";
+ extcon = <&fusb0>;
+
+ u2phy0_otg: otg-port {
+ status = "okay";
+ };
+
+ u2phy0_host: host-port {
+ phy-supply = <&vcc5v0_host>;
+ status = "okay";
+ };
+};
+
+&u2phy1 {
+ status = "okay";
+
+ u2phy1_otg: otg-port {
+ status = "okay";
+ };
+
+ u2phy1_host: host-port {
+ phy-supply = <&vcc5v0_host>;
+ status = "okay";
+ };
+};
+
+&pwm3 {
+ status = "okay";
+ interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH 0>;
+ compatible = "rockchip,remotectl-pwm";
+ remote_pwm_id = <3>;
+ handle_cpu_id = <0>;
+
+ ir_key1{
+ rockchip,usercode = <0xff00>;
+ rockchip,key_table =
+ <0xeb KEY_POWER>,
+ <0xec KEY_COMPOSE>,
+ <0xfe KEY_BACK>,
+ <0xb7 KEY_HOME>,
+ <0xa3 KEY_WWW>,
+ <0xf4 KEY_VOLUMEUP>,
+ <0xa7 KEY_VOLUMEDOWN>,
+ <0xf8 KEY_ENTER>,
+ <0xfc KEY_UP>,
+ <0xfd KEY_DOWN>,
+ <0xf1 KEY_LEFT>,
+ <0xe5 KEY_RIGHT>;
+ };
+};
+
+&uart0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_xfer &uart0_cts>;
+ status = "okay";
+};
+
+&uart2 {
+ status = "okay";
+};
+
+&uart4 {
+ current-speed = <9600>;
+ no-loopback-test;
+ status = "okay";
+};
+
+&usbdrd3_0 {
+ status = "okay";
+ extcon = <&fusb0>;
+};
+
+&usbdrd3_1 {
+ status = "okay";
+};
+
+&usbdrd_dwc3_0 {
+ status = "okay";
+};
+
+&usbdrd_dwc3_1 {
+ status = "okay";
+ dr_mode = "host";
+};
+
+&usb_host0_ehci {
+ status = "okay";
+};
+
+&usb_host0_ohci {
+ status = "okay";
+};
+
+&usb_host1_ehci {
+ status = "okay";
+};
+
+&usb_host1_ohci {
+ status = "okay";
+};
+
+&vopb {
+ status = "okay";
+};
+
+&vopb_mmu {
+ status = "okay";
+};
+
+&vopl {
+ status = "okay";
+};
+
+&vopl_mmu {
+ status = "okay";
+};
+
+&vpu {
+ status = "okay";
+ /* 0 means ion, 1 means drm */
+ //allocator = <0>;
+};
reg = <0x1b>;
interrupt-parent = <&gpio1>;
interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
+ pmic,stby-gpio = <&gpio1 24 GPIO_ACTIVE_LOW>;
+ pmic,hold-gpio = <&gpio1 13 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
- pinctrl-0 = <&pmic_int_l &pmic_dvs2>;
+ pinctrl-0 = <&pmic_int_l &pmic_dvs2 &pmic_stby &pmic_hold>;
rockchip,system-power-controller;
wakeup-source;
#clock-cells = <1>;
rockchip,i2s-broken-burst-len;
rockchip,playback-channels = <8>;
rockchip,capture-channels = <8>;
+ assigned-clocks = <&cru SCLK_I2S0_DIV>, <&cru SCLK_I2S_8CH>;
+ assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S0_8CH>;
#sound-dai-cells = <0>;
};
rockchip,i2s-broken-burst-len;
rockchip,playback-channels = <2>;
rockchip,capture-channels = <2>;
+ assigned-clocks = <&cru SCLK_I2S1_DIV>, <&cru SCLK_I2S_8CH>;
+ assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S1_8CH>;
#sound-dai-cells = <0>;
};
rockchip,pins =
<1 14 RK_FUNC_GPIO &pcfg_pull_down>;
};
+ pmic_stby: pmic-stby {
+ rockchip,pins =
+ <1 24 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ pmic_hold: pmic-hold{
+ rockchip,pins =
+ <1 13 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
};
sdio-pwrseq {
};
&cdn_dp {
- status = "okay";
+ status = "disabled";
extcon = <&fusb0>;
phys = <&tcphy0_dp>;
};
--- /dev/null
+/*
+ * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ * a) This file is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ * b) Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/dts-v1/;
+
+#include "dt-bindings/pwm/pwm.h"
+#include "rk3399.dtsi"
+#include "rk3399-opp.dtsi"
+#include "rk3399-linux.dtsi"
+#include <dt-bindings/input/input.h>
+
+/ {
+ model = "Rockchip RK3399 Firefly Board (Linux Opensource)";
+ compatible = "rockchip,rk3399-firefly-mini-linux", "rockchip,rk3399";
+
+ backlight: backlight {
+ status = "okay";
+ compatible = "pwm-backlight";
+ pwms = <&pwm0 0 25000 0>;
+ brightness-levels = <
+ 0 1 2 3 4 5 6 7
+ 8 9 10 11 12 13 14 15
+ 16 17 18 19 20 21 22 23
+ 24 25 26 27 28 29 30 31
+ 32 33 34 35 36 37 38 39
+ 40 41 42 43 44 45 46 47
+ 48 49 50 51 52 53 54 55
+ 56 57 58 59 60 61 62 63
+ 64 65 66 67 68 69 70 71
+ 72 73 74 75 76 77 78 79
+ 80 81 82 83 84 85 86 87
+ 88 89 90 91 92 93 94 95
+ 96 97 98 99 100 101 102 103
+ 104 105 106 107 108 109 110 111
+ 112 113 114 115 116 117 118 119
+ 120 121 122 123 124 125 126 127
+ 128 129 130 131 132 133 134 135
+ 136 137 138 139 140 141 142 143
+ 144 145 146 147 148 149 150 151
+ 152 153 154 155 156 157 158 159
+ 160 161 162 163 164 165 166 167
+ 168 169 170 171 172 173 174 175
+ 176 177 178 179 180 181 182 183
+ 184 185 186 187 188 189 190 191
+ 192 193 194 195 196 197 198 199
+ 200 201 202 203 204 205 206 207
+ 208 209 210 211 212 213 214 215
+ 216 217 218 219 220 221 222 223
+ 224 225 226 227 228 229 230 231
+ 232 233 234 235 236 237 238 239
+ 240 241 242 243 244 245 246 247
+ 248 249 250 251 252 253 254 255>;
+ default-brightness-level = <200>;
+ };
+
+ clkin_gmac: external-gmac-clock {
+ compatible = "fixed-clock";
+ clock-frequency = <125000000>;
+ clock-output-names = "clkin_gmac";
+ #clock-cells = <0>;
+ };
+
+ dw_hdmi_audio: dw-hdmi-audio {
+ status = "disabled";
+ compatible = "rockchip,dw-hdmi-audio";
+ #sound-dai-cells = <0>;
+ };
+
+ edp_panel: edp-panel {
+ status = "okay";
+ compatible = "sharp,lcd-f402", "panel-simple";
+ backlight = <&backlight>;
+ power-supply = <&vcc_lcd>;
+ enable-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&lcd_panel_reset>;
+
+ ports {
+ panel_in_edp: endpoint {
+ remote-endpoint = <&edp_out_panel>;
+ };
+ };
+ };
+
+ fiq_debugger: fiq-debugger {
+ compatible = "rockchip,fiq-debugger";
+ rockchip,serial-id = <2>;
+ rockchip,signal-irq = <182>;
+ rockchip,wake-irq = <0>;
+ rockchip,irq-mode-enable = <1>; /* If enable uart uses irq instead of fiq */
+ rockchip,baudrate = <1500000>; /* Only 115200 and 1500000 */
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart2c_xfer>;
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ autorepeat;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&pwrbtn>;
+
+ button@0 {
+ gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_POWER>;
+ label = "GPIO Key Power";
+ linux,input-type = <1>;
+ gpio-key,wakeup = <1>;
+ debounce-interval = <100>;
+ };
+ };
+
+ rt5640-sound {
+ status = "disabled";
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,name = "rockchip,rt5640-codec";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,widgets =
+ "Microphone", "Mic Jack",
+ "Headphone", "Headphone Jack";
+ simple-audio-card,routing =
+ "Mic Jack", "MICBIAS1",
+ "IN1P", "Mic Jack",
+ "Headphone Jack", "HPOL",
+ "Headphone Jack", "HPOR";
+ simple-audio-card,cpu {
+ sound-dai = <&i2s1>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&rt5640>;
+ };
+ };
+
+ es8323-sound {
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,name = "rockchip,es8323-codec";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,widgets =
+ "Microphone","Mic Jack",
+ "Headphone","Headphone Jack";
+ simple-audio-card,routing =
+ "Mic Jack","MICBIAS1",
+ "IN1P","Mic Jack",
+ "Headphone Jack","HPOL",
+ "Headphone Jack","HPOR";
+ simple-audio-card,cpu {
+ sound-dai = <&i2c1>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&es8323>;
+ };
+
+ };
+
+ hdmi_sound: hdmi-sound {
+ status = "disabled";
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,name = "rockchip,hdmi";
+
+ simple-audio-card,cpu {
+ sound-dai = <&i2s2>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&dw_hdmi_audio>;
+ };
+ };
+
+ hdmi_codec: hdmi-codec {
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,name = "HDMI-CODEC";
+
+ simple-audio-card,cpu {
+ sound-dai = <&i2s2>;
+ };
+
+ simple-audio-card,codec {
+ sound-dai = <&hdmi>;
+ };
+ };
+
+ sdio_pwrseq: sdio-pwrseq {
+ compatible = "mmc-pwrseq-simple";
+ clocks = <&rk808 1>;
+ clock-names = "ext_clock";
+ pinctrl-names = "default";
+ pinctrl-0 = <&wifi_enable_h>;
+
+ /*
+ * On the module itself this is one of these (depending
+ * on the actual card populated):
+ * - SDIO_RESET_L_WL_REG_ON
+ * - PDN (power down when low)
+ */
+ reset-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; /* GPIO0_B2 */
+ };
+
+ vcc3v3_pcie: vcc3v3-pcie-regulator {
+ status = "disabled";
+ compatible = "regulator-fixed";
+ enable-active-high;
+ regulator-always-on;
+ regulator-boot-on;
+ gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie_drv>;
+ regulator-name = "vcc3v3_pcie";
+ };
+
+ vcc3v3_sys: vcc3v3-sys {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc3v3_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ };
+
+ vcc5v0_host: vcc5v0-host-regulator {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&host_vbus_drv>;
+ regulator-name = "vcc5v0_host";
+ regulator-always-on;
+ };
+
+ vcc5v0_sys: vcc5v0-sys {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc5v0_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ };
+
+ vcc_phy: vcc-phy-regulator {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc_phy";
+ regulator-always-on;
+ regulator-boot-on;
+ };
+
+ vdd_log: vdd-log {
+ compatible = "pwm-regulator";
+ pwms = <&pwm2 0 25000 1>;
+ regulator-name = "vdd_log";
+ regulator-min-microvolt = <800000>;
+ regulator-max-microvolt = <1400000>;
+ regulator-always-on;
+ regulator-boot-on;
+
+ /* for rockchip boot on */
+ rockchip,pwm_id= <2>;
+ rockchip,pwm_voltage = <1000000>;
+ };
+
+ vccadc_ref: vccadc-ref {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc1v8_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+
+ vcc_lcd: vcc-lcd-regulator {
+ compatible = "regulator-fixed";
+ regulator-always-on;
+ regulator-boot-on;
+ enable-active-high;
+ gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&lcd_en>;
+ regulator-name = "vcc_lcd";
+ };
+
+ wireless-wlan {
+ compatible = "wlan-platdata";
+ rockchip,grf = <&grf>;
+ wifi_chip_type = "ap6212";
+ sdio_vref = <1800>;
+ WIFI,host_wake_irq = <&gpio0 3 GPIO_ACTIVE_HIGH>; /* GPIO0_a3 */
+ status = "okay";
+ };
+
+ wireless-bluetooth {
+ compatible = "bluetooth-platdata";
+ //wifi-bt-power-toggle;
+ clocks = <&rk808 1>;
+ clock-names = "ext_clock";
+ uart_rts_gpios = <&gpio2 19 GPIO_ACTIVE_LOW>; /* GPIO2_C3 */
+ pinctrl-names = "default", "rts_gpio";
+ pinctrl-0 = <&uart0_rts>;
+ pinctrl-1 = <&uart0_gpios>;
+ //BT,power_gpio = <&gpio3 19 GPIO_ACTIVE_HIGH>; /* GPIOx_xx */
+ BT,reset_gpio = <&gpio0 9 GPIO_ACTIVE_HIGH>; /* GPIO0_B1 */
+ BT,wake_gpio = <&gpio2 26 GPIO_ACTIVE_HIGH>; /* GPIO2_D2 */
+ BT,wake_host_irq = <&gpio0 4 GPIO_ACTIVE_HIGH>; /* GPIO0_A4 */
+ status = "okay";
+ };
+
+ leds {
+ status = "disabled";
+ compatible = "gpio-leds";
+ power {
+ label = "firefly:blue:power";
+ linux,default-trigger = "ir-power-click";
+ default-state = "on";
+ gpios = <&gpio2 27 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&led_power>;
+ };
+ user {
+ label = "firefly:yellow:user";
+ linux,default-trigger = "ir-user-click";
+ default-state = "off";
+ gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&led_user>;
+ };
+ };
+};
+
+&cpu_l0 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l1 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l2 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l3 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_b0 {
+ cpu-supply = <&vdd_cpu_b>;
+};
+
+&cpu_b1 {
+ cpu-supply = <&vdd_cpu_b>;
+};
+
+&display_subsystem {
+ status = "okay";
+};
+
+&edp {
+ status = "okay";
+
+ ports {
+ edp_out: port@1 {
+ reg = <1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ edp_out_panel: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&panel_in_edp>;
+ };
+ };
+ };
+};
+
+&emmc_phy {
+ status = "okay";
+};
+
+&gmac {
+ phy-supply = <&vcc_phy>;
+ phy-mode = "rgmii";
+ clock_in_out = "input";
+ snps,reset-gpio = <&gpio3 15 GPIO_ACTIVE_LOW>;
+ snps,reset-active-low;
+ snps,reset-delays-us = <0 10000 50000>;
+ assigned-clocks = <&cru SCLK_RMII_SRC>;
+ assigned-clock-parents = <&clkin_gmac>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&rgmii_pins>;
+ tx_delay = <0x28>;
+ rx_delay = <0x1B>;
+ status = "okay";
+};
+
+&gpu {
+ status = "okay";
+ mali-supply = <&vdd_gpu>;
+};
+
+&hdmi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ #sound-dai-cells = <0>;
+ status = "okay";
+};
+
+&i2c0 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <168>;
+ i2c-scl-falling-time-ns = <4>;
+ clock-frequency = <400000>;
+
+ vdd_cpu_b: syr827@40 {
+ compatible = "silergy,syr827";
+ reg = <0x40>;
+ vin-supply = <&vcc5v0_sys>;
+ regulator-compatible = "fan53555-reg";
+ regulator-name = "vdd_cpu_b";
+ regulator-min-microvolt = <712500>;
+ regulator-max-microvolt = <1500000>;
+ regulator-ramp-delay = <1000>;
+ vsel-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+ fcs,suspend-voltage-selector = <1>;
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-initial-state = <3>;
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vdd_gpu: syr828@41 {
+ compatible = "silergy,syr828";
+ reg = <0x41>;
+ vin-supply = <&vcc5v0_sys>;
+ regulator-compatible = "fan53555-reg";
+ regulator-name = "vdd_gpu";
+ regulator-min-microvolt = <712500>;
+ regulator-max-microvolt = <1500000>;
+ regulator-ramp-delay = <1000>;
+ fcs,suspend-voltage-selector = <1>;
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-initial-state = <3>;
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ rk808: pmic@1b {
+ compatible = "rockchip,rk808";
+ reg = <0x1b>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pmic_int_l &pmic_dvs2>;
+ rockchip,system-power-controller;
+ wakeup-source;
+ #clock-cells = <1>;
+ clock-output-names = "xin32k", "rk808-clkout2";
+
+ vcc1-supply = <&vcc3v3_sys>;
+ vcc2-supply = <&vcc3v3_sys>;
+ vcc3-supply = <&vcc3v3_sys>;
+ vcc4-supply = <&vcc3v3_sys>;
+ vcc6-supply = <&vcc3v3_sys>;
+ vcc7-supply = <&vcc3v3_sys>;
+ vcc8-supply = <&vcc3v3_sys>;
+ vcc9-supply = <&vcc3v3_sys>;
+ vcc10-supply = <&vcc3v3_sys>;
+ vcc11-supply = <&vcc3v3_sys>;
+ vcc12-supply = <&vcc3v3_sys>;
+ vddio-supply = <&vcc1v8_pmu>;
+
+ regulators {
+ vdd_center: DCDC_REG1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <750000>;
+ regulator-max-microvolt = <1350000>;
+ regulator-ramp-delay = <6001>;
+ regulator-name = "vdd_center";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vdd_cpu_l: DCDC_REG2 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <750000>;
+ regulator-max-microvolt = <1350000>;
+ regulator-ramp-delay = <6001>;
+ regulator-name = "vdd_cpu_l";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc_ddr: DCDC_REG3 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vcc_ddr";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ };
+ };
+
+ vcc_1v8: DCDC_REG4 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcc_1v8";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <1800000>;
+ };
+ };
+
+ vcc1v8_dvp: LDO_REG1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcc1v8_dvp";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc2v8_dvp: LDO_REG2 {
+ //regulator-always-on;
+ //regulator-boot-on;
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ regulator-name = "vcc2v8_dvp";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc1v8_pmu: LDO_REG3 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcc1v8_pmu";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <1800000>;
+ };
+ };
+
+ vcc_sd: LDO_REG4 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-name = "vcc_sd";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <3300000>;
+ };
+ };
+
+ vcca3v0_codec: LDO_REG5 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-name = "vcca3v0_codec";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc_1v5: LDO_REG6 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1500000>;
+ regulator-max-microvolt = <1500000>;
+ regulator-name = "vcc_1v5";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <1500000>;
+ };
+ };
+
+ vcca1v8_codec: LDO_REG7 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcca1v8_codec";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc_3v0: LDO_REG8 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-name = "vcc_3v0";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <3000000>;
+ };
+ };
+
+ vcc3v3_s3: SWITCH_REG1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vcc3v3_s3";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc3v3_s0: SWITCH_REG2 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vcc3v3_s0";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+ };
+ };
+};
+
+&i2c1 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <300>;
+ i2c-scl-falling-time-ns = <15>;
+
+ es8323: es8323@10{
+ compatible = "everest,es8323";
+ reg = <0x10>;
+ ear-con-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+ hp-det-gpio = <&gpio0 11 GPIO_ACTIVE_HIGH>;
+ hp-mic-only = <1>;
+ #sound-dai-cells = <0>;
+ system-clock-frequency = <11289600>;
+ clocks = <&cru SCLK_I2S_8CH_OUT>;
+ clock-names = "mclk";
+ pinctrl-names = "default";
+ pinctrl-0 = <&es8323_earcon &es8323_hpdet>;
+ };
+ rt5640: rt5640@1c {
+ status = "disabled";
+ #sound-dai-cells = <0>;
+ compatible = "realtek,rt5640";
+ reg = <0x1c>;
+ clocks = <&cru SCLK_I2S_8CH_OUT>;
+ clock-names = "mclk";
+ realtek,in1-differential;
+ pinctrl-names = "default";
+ pinctrl-0 = <&rt5640_hpcon>;
+ hp-con-gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+ //hp-det-gpio = <&gpio4 28 GPIO_ACTIVE_LOW>;
+ io-channels = <&saradc 4>;
+ hp-det-adc-value = <500>;
+ };
+};
+
+&i2c3 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <450>;
+ i2c-scl-falling-time-ns = <15>;
+};
+
+&i2c4 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <475>;
+ i2c-scl-falling-time-ns = <26>;
+
+ fusb0: fusb30x@22 {
+ compatible = "fairchild,fusb302";
+ reg = <0x22>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&fusb0_int>;
+ int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
+ vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+ status = "okay";
+ };
+
+ gsl3680: gsl3680@41 {
+ status = "okay";
+ compatible = "gslX680-pad";
+ reg = <0x41>;
+ screen_max_x = <1536>;
+ screen_max_y = <2048>;
+ touch-gpio = <&gpio1 20 IRQ_TYPE_LEVEL_LOW>;
+ reset-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+ };
+
+ mpu6050:mpu@68{
+ status = "disabled";
+ compatible = "invensense,mpu6050";
+ reg = <0x68>;
+ mpu-int_config = <0x10>;
+ mpu-level_shifter = <0>;
+ mpu-orientation = <0 1 0 1 0 0 0 0 1>;
+ orientation-x= <1>;
+ orientation-y= <1>;
+ orientation-z= <1>;
+ irq-gpio = <&gpio1 4 IRQ_TYPE_LEVEL_LOW>;
+ mpu-debug = <1>;
+ };
+};
+
+&i2s0 {
+ status = "okay";
+ rockchip,i2s-broken-burst-len;
+ rockchip,playback-channels = <8>;
+ rockchip,capture-channels = <8>;
+ #sound-dai-cells = <0>;
+};
+
+&i2s1 {
+ status = "okay";
+ rockchip,i2s-broken-burst-len;
+ rockchip,playback-channels = <2>;
+ rockchip,capture-channels = <2>;
+ #sound-dai-cells = <0>;
+};
+
+&i2s2 {
+
+ #sound-dai-cells = <0>;
+ status = "okay";
+};
+
+&io_domains {
+ status = "okay";
+
+ bt656-supply = <&vcc_3v0>; /* bt656_gpio2ab_ms */
+ audio-supply = <&vcca1v8_codec>; /* audio_gpio3d4a_ms */
+ sdmmc-supply = <&vcc_sd>; /* sdmmc_gpio4b_ms */
+ gpio1830-supply = <&vcc_3v0>; /* gpio1833_gpio4cd_ms */
+};
+
+&pcie_phy {
+ status = "okay";
+};
+
+&pcie0 {
+ ep-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>;
+ num-lanes = <4>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie_clkreqn_cpm>;
+ status = "okay";
+};
+
+&pmu_io_domains {
+ status = "okay";
+ pmu1830-supply = <&vcc_3v0>;
+};
+
+&pinctrl {
+ buttons {
+ pwrbtn: pwrbtn {
+ rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+
+ lcd-panel {
+ lcd_panel_reset: lcd-panel-reset {
+ rockchip,pins = <4 29 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ lcd_en: lcd-en {
+ rockchip,pins = <1 1 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+
+ pcie {
+ pcie_drv: pcie-drv {
+ rockchip,pins =
+ <1 17 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ pcie_3g_drv: pcie-3g-drv {
+ rockchip,pins =
+ <0 2 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ };
+
+ pmic {
+ vsel1_gpio: vsel1-gpio {
+ rockchip,pins =
+ <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+
+ vsel2_gpio: vsel2-gpio {
+ rockchip,pins =
+ <1 14 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+ };
+
+ sdio-pwrseq {
+ wifi_enable_h: wifi-enable-h {
+ rockchip,pins =
+ <0 10 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ wireless-bluetooth {
+ uart0_gpios: uart0-gpios {
+ rockchip,pins =
+ <2 19 RK_FUNC_GPIO &pcfg_pull_none>,
+ <0 9 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+
+ leds {
+ led_power: led-power {
+ rockchip,pins = <2 27 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+
+ led_user: led-user {
+ rockchip,pins = <0 13 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ rt5640 {
+ rt5640_hpcon: rt5640-hpcon {
+ rockchip,pins = <4 21 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ es8223 {
+ es8323_hpdet: es8323-hpdet {
+ rockchip,pins = <0 11 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ es8323_earcon: es8323-earcon {
+ rockchip,pins = <0 12 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ pmic {
+ pmic_int_l: pmic-int-l {
+ rockchip,pins =
+ <1 21 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ pmic_dvs2: pmic-dvs2 {
+ rockchip,pins =
+ <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+
+ };
+
+ usb2 {
+ host_vbus_drv: host-vbus-drv {
+ rockchip,pins =
+ <1 0 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+
+ fusb30x {
+ fusb0_int: fusb0-int {
+ rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+};
+
+&pwm0 {
+ status = "okay";
+};
+
+&pwm2 {
+ status = "okay";
+};
+
+&rkvdec {
+ status = "okay";
+};
+
+&rockchip_suspend {
+ rockchip,power-ctrl =
+ <&gpio1 18 GPIO_ACTIVE_LOW>,
+ <&gpio1 14 GPIO_ACTIVE_HIGH>;
+};
+
+&route_edp {
+ status = "disabled";
+};
+
+&route_hdmi {
+ status = "okay";
+ logo,mode = "center";
+};
+
+&cdn_dp {
+ status = "disabled";
+ extcon = <&fusb0>;
+ phys = <&tcphy0_dp>;
+};
+
+&dp_in_vopb {
+ status = "disabled";
+};
+
+&saradc {
+ status = "okay";
+ vref-supply = <&vccadc_ref>;
+};
+
+&sdhci {
+ bus-width = <8>;
+ keep-power-in-suspend;
+ mmc-hs400-1_8v;
+ mmc-hs400-enhanced-strobe;
+ non-removable;
+ status = "okay";
+ supports-emmc;
+};
+
+&sdmmc {
+ max-frequency = <150000000>;
+ supports-sd;
+ bus-width = <4>;
+ cap-mmc-highspeed;
+ cap-sd-highspeed;
+ disable-wp;
+ num-slots = <1>;
+ vqmmc-supply = <&vcc_sd>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
+ status = "okay";
+};
+
+&sdio0 {
+ max-frequency = <50000000>;
+ supports-sdio;
+ bus-width = <4>;
+ disable-wp;
+ cap-sd-highspeed;
+ keep-power-in-suspend;
+ mmc-pwrseq = <&sdio_pwrseq>;
+ non-removable;
+ num-slots = <1>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
+ sd-uhs-sdr104;
+ status = "okay";
+};
+
+&tcphy0 {
+ extcon = <&fusb0>;
+ status = "okay";
+};
+
+&tcphy1 {
+ status = "okay";
+};
+
+&tsadc {
+ /* tshut mode 0:CRU 1:GPIO */
+ rockchip,hw-tshut-mode = <1>;
+ /* tshut polarity 0:LOW 1:HIGH */
+ rockchip,hw-tshut-polarity = <1>;
+ status = "okay";
+};
+
+&u2phy0 {
+ status = "okay";
+ extcon = <&fusb0>;
+
+ u2phy0_otg: otg-port {
+ status = "okay";
+ };
+
+ u2phy0_host: host-port {
+ phy-supply = <&vcc5v0_host>;
+ status = "okay";
+ };
+};
+
+&u2phy1 {
+ status = "okay";
+
+ u2phy1_otg: otg-port {
+ status = "okay";
+ };
+
+ u2phy1_host: host-port {
+ phy-supply = <&vcc5v0_host>;
+ status = "okay";
+ };
+};
+
+&pwm3 {
+ status = "okay";
+ interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH 0>;
+ compatible = "rockchip,remotectl-pwm";
+ remote_pwm_id = <3>;
+ handle_cpu_id = <0>;
+
+ ir_key1{
+ rockchip,usercode = <0xff00>;
+ rockchip,key_table =
+ <0xeb KEY_POWER>,
+ <0xec KEY_COMPOSE>,
+ <0xfe KEY_BACK>,
+ <0xb7 KEY_HOME>,
+ <0xa3 KEY_WWW>,
+ <0xf4 KEY_VOLUMEUP>,
+ <0xa7 KEY_VOLUMEDOWN>,
+ <0xf8 KEY_ENTER>,
+ <0xfc KEY_UP>,
+ <0xfd KEY_DOWN>,
+ <0xf1 KEY_LEFT>,
+ <0xe5 KEY_RIGHT>;
+ };
+};
+
+&uart0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_xfer &uart0_cts>;
+ status = "okay";
+};
+
+&uart2 {
+ status = "okay";
+};
+
+&usbdrd3_0 {
+ status = "okay";
+ extcon = <&fusb0>;
+};
+
+&usbdrd3_1 {
+ status = "okay";
+};
+
+&usbdrd_dwc3_0 {
+ status = "okay";
+};
+
+&usbdrd_dwc3_1 {
+ status = "okay";
+ dr_mode = "host";
+};
+
+&usb_host0_ehci {
+ status = "okay";
+};
+
+&usb_host0_ohci {
+ status = "okay";
+};
+
+&usb_host1_ehci {
+ status = "okay";
+};
+
+&usb_host1_ohci {
+ status = "okay";
+};
+
+&vopb {
+ status = "okay";
+};
+
+&vopb_mmu {
+ status = "okay";
+};
+
+&vopl {
+ status = "okay";
+};
+
+&vopl_mmu {
+ status = "okay";
+};
+
+&vpu {
+ status = "okay";
+ /* 0 means ion, 1 means drm */
+ //allocator = <0>;
+};
--- /dev/null
+/*
+ * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ * a) This file is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ * b) Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/dts-v1/;
+
+#include "dt-bindings/pwm/pwm.h"
+#include "rk3399.dtsi"
+#include "rk3399-opp.dtsi"
+#include "rk3399-linux.dtsi"
+#include <dt-bindings/input/input.h>
+
+/ {
+ model = "Rockchip RK3399 Firefly Board (Linux Opensource)";
+ compatible = "rockchip,rk3399-firefly-mini-linux", "rockchip,rk3399";
+
+ backlight: backlight {
+ status = "okay";
+ compatible = "pwm-backlight";
+ pwms = <&pwm1 0 25000 0>;
+ brightness-levels = <
+ 0 1 2 3 4 5 6 7
+ 8 9 10 11 12 13 14 15
+ 16 17 18 19 20 21 22 23
+ 24 25 26 27 28 29 30 31
+ 32 33 34 35 36 37 38 39
+ 40 41 42 43 44 45 46 47
+ 48 49 50 51 52 53 54 55
+ 56 57 58 59 60 61 62 63
+ 64 65 66 67 68 69 70 71
+ 72 73 74 75 76 77 78 79
+ 80 81 82 83 84 85 86 87
+ 88 89 90 91 92 93 94 95
+ 96 97 98 99 100 101 102 103
+ 104 105 106 107 108 109 110 111
+ 112 113 114 115 116 117 118 119
+ 120 121 122 123 124 125 126 127
+ 128 129 130 131 132 133 134 135
+ 136 137 138 139 140 141 142 143
+ 144 145 146 147 148 149 150 151
+ 152 153 154 155 156 157 158 159
+ 160 161 162 163 164 165 166 167
+ 168 169 170 171 172 173 174 175
+ 176 177 178 179 180 181 182 183
+ 184 185 186 187 188 189 190 191
+ 192 193 194 195 196 197 198 199
+ 200 201 202 203 204 205 206 207
+ 208 209 210 211 212 213 214 215
+ 216 217 218 219 220 221 222 223
+ 224 225 226 227 228 229 230 231
+ 232 233 234 235 236 237 238 239
+ 240 241 242 243 244 245 246 247
+ 248 249 250 251 252 253 254 255>;
+ default-brightness-level = <200>;
+ };
+
+ clkin_gmac: external-gmac-clock {
+ compatible = "fixed-clock";
+ clock-frequency = <125000000>;
+ clock-output-names = "clkin_gmac";
+ #clock-cells = <0>;
+ };
+
+ dw_hdmi_audio: dw-hdmi-audio {
+ status = "disabled";
+ compatible = "rockchip,dw-hdmi-audio";
+ #sound-dai-cells = <0>;
+ };
+
+ edp_panel: edp-panel {
+ status = "disabled";
+ compatible = "sharp,lcd-f402", "panel-simple";
+ backlight = <&backlight>;
+ power-supply = <&vcc_lcd>;
+ enable-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&lcd_panel_reset>;
+
+ ports {
+ panel_in_edp: endpoint {
+ remote-endpoint = <&edp_out_panel>;
+ };
+ };
+ };
+
+ fiq_debugger: fiq-debugger {
+ compatible = "rockchip,fiq-debugger";
+ rockchip,serial-id = <2>;
+ rockchip,signal-irq = <182>;
+ rockchip,wake-irq = <0>;
+ rockchip,irq-mode-enable = <1>; /* If enable uart uses irq instead of fiq */
+ rockchip,baudrate = <1500000>; /* Only 115200 and 1500000 */
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart2c_xfer>;
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ autorepeat;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&pwrbtn>;
+
+ button@0 {
+ gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_POWER>;
+ label = "GPIO Key Power";
+ linux,input-type = <1>;
+ gpio-key,wakeup = <1>;
+ debounce-interval = <100>;
+ };
+ };
+
+ rt5640-sound {
+ status = "disabled";
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,name = "rockchip,rt5640-codec";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,widgets =
+ "Microphone", "Mic Jack",
+ "Headphone", "Headphone Jack";
+ simple-audio-card,routing =
+ "Mic Jack", "MICBIAS1",
+ "IN1P", "Mic Jack",
+ "Headphone Jack", "HPOL",
+ "Headphone Jack", "HPOR";
+ simple-audio-card,cpu {
+ sound-dai = <&i2s1>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&rt5640>;
+ };
+ };
+
+ es8323-sound {
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,name = "rockchip,es8323-codec";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,widgets =
+ "Microphone","Mic Jack",
+ "Headphone","Headphone Jack";
+ simple-audio-card,routing =
+ "Mic Jack","MICBIAS1",
+ "IN1P","Mic Jack",
+ "Headphone Jack","HPOL",
+ "Headphone Jack","HPOR";
+ simple-audio-card,cpu {
+ sound-dai = <&i2s1>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&es8323>;
+ };
+ };
+
+ hdmi_sound: hdmi-sound {
+ status = "disabled";
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,name = "rockchip,hdmi";
+
+ simple-audio-card,cpu {
+ sound-dai = <&i2s2>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&dw_hdmi_audio>;
+ };
+ };
+
+ hdmi_codec: hdmi-codec {
+ compatible = "simple-audio-card";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,name = "HDMI-CODEC";
+
+ simple-audio-card,cpu {
+ sound-dai = <&i2s2>;
+ };
+ simple-audio-card,codec {
+ sound-dai = <&hdmi>;
+ };
+ };
+
+ sdio_pwrseq: sdio-pwrseq {
+ compatible = "mmc-pwrseq-simple";
+ clocks = <&rk808 1>;
+ clock-names = "ext_clock";
+ pinctrl-names = "default";
+ pinctrl-0 = <&wifi_enable_h>;
+
+ /*
+ * On the module itself this is one of these (depending
+ * on the actual card populated):
+ * - SDIO_RESET_L_WL_REG_ON
+ * - PDN (power down when low)
+ */
+ reset-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; /* GPIO0_B2 */
+ };
+
+ vcc3v3_pcie: vcc3v3-pcie-regulator {
+ status = "disabled";
+ compatible = "regulator-fixed";
+ enable-active-high;
+ regulator-always-on;
+ regulator-boot-on;
+ gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie_drv>;
+ regulator-name = "vcc3v3_pcie";
+ };
+
+ vcc3v3_sys: vcc3v3-sys {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc3v3_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ };
+
+ vcc5v0_host: vcc5v0-host-regulator {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&host_vbus_drv>;
+ regulator-name = "vcc5v0_host";
+ regulator-always-on;
+ };
+
+ vbus_5v: vbus-5v-regulator {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ regulator-always-on;
+ regulator-boot-on;
+ gpio = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&vbus_5v_drv>;
+ regulator-name = "vbus_5v";
+ };
+
+ vcc5v0_sys: vcc5v0-sys {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc5v0_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ };
+
+ vcc_phy: vcc-phy-regulator {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc_phy";
+ regulator-always-on;
+ regulator-boot-on;
+ };
+
+ vdd_log: vdd-log {
+ compatible = "pwm-regulator";
+ pwms = <&pwm2 0 25000 1>;
+ regulator-name = "vdd_log";
+ regulator-min-microvolt = <800000>;
+ regulator-max-microvolt = <1400000>;
+ regulator-always-on;
+ regulator-boot-on;
+
+ /* for rockchip boot on */
+ rockchip,pwm_id= <2>;
+ rockchip,pwm_voltage = <1000000>;
+ };
+
+ vccadc_ref: vccadc-ref {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc1v8_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+
+ vcc_lcd: vcc-lcd-regulator {
+ compatible = "regulator-fixed";
+ regulator-always-on;
+ regulator-boot-on;
+ enable-active-high;
+ gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&lcd_en>;
+ regulator-name = "vcc_lcd";
+ };
+
+ wireless-wlan {
+ compatible = "wlan-platdata";
+ rockchip,grf = <&grf>;
+ wifi_chip_type = "ap6212";
+ sdio_vref = <1800>;
+ WIFI,host_wake_irq = <&gpio0 3 GPIO_ACTIVE_HIGH>; /* GPIO0_a3 */
+ status = "okay";
+ };
+
+ wireless-bluetooth {
+ compatible = "bluetooth-platdata";
+ //wifi-bt-power-toggle;
+ clocks = <&rk808 1>;
+ clock-names = "ext_clock";
+ uart_rts_gpios = <&gpio2 19 GPIO_ACTIVE_LOW>; /* GPIO2_C3 */
+ pinctrl-names = "default", "rts_gpio";
+ pinctrl-0 = <&uart0_rts>;
+ pinctrl-1 = <&uart0_gpios>;
+ //BT,power_gpio = <&gpio3 19 GPIO_ACTIVE_HIGH>; /* GPIOx_xx */
+ BT,reset_gpio = <&gpio0 9 GPIO_ACTIVE_HIGH>; /* GPIO0_B1 */
+ BT,wake_gpio = <&gpio2 26 GPIO_ACTIVE_HIGH>; /* GPIO2_D2 */
+ BT,wake_host_irq = <&gpio0 4 GPIO_ACTIVE_HIGH>; /* GPIO0_A4 */
+ status = "okay";
+ };
+
+ leds {
+ compatible = "gpio-leds";
+ power {
+ label = "firefly:blue:power";
+ linux,default-trigger = "ir-power-click";
+ default-state = "on";
+ gpios = <&gpio2 27 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&led_power>;
+ };
+ user {
+ label = "firefly:yellow:user";
+ linux,default-trigger = "ir-user-click";
+ default-state = "off";
+ gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&led_user>;
+ };
+ };
+};
+
+&dsi {
+ status = "okay";
+ dsi_panel: dsi_panel {
+ compatible ="simple-panel-dsi";
+ reg = <0>;
+ //enable-gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;
+ //reset-gpios = <&gpio4 29 GPIO_ACTIVE_LOW>;
+ dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST)>;
+ dsi,format = <MIPI_DSI_FMT_RGB888>;
+ dsi,lanes = <4>;
+ delay,prepare = <10>;
+ status = "okay";
+
+ /*
+ dsi,channel = <0>;
+
+ delay,enable = <10>;
+ delay,power = <10>;
+ delay,reset = <20>;
+ delay,prepare = <10>;
+
+ delay,unpreapre = <0>;
+ delay,unreset = <0>;
+ delay,unpower = <0>;
+ delay,disable = <0>;
+
+ size,width = <120>;
+ size,height = <170>;
+ */
+
+ panel-init-sequence = [
+ 05 20 01 29
+ 05 96 01 11
+ ];
+ panel-exit-sequence = [
+ 05 05 01 28
+ 05 78 01 10
+ ];
+
+ disp_timings: display-timings {
+ native-mode = <&timing0>;
+ timing0: timing0 {
+ clock-frequency = <64000000>;
+ hactive = <768>;
+ vactive = <1024>;
+ hsync-len = <5>; //20, 50
+ hback-porch = <25>; //50, 56
+ hfront-porch = <150>;//50, 30
+ vsync-len = <1>;
+ vback-porch = <15>;
+ vfront-porch = <100>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <0>;
+ pixelclk-active = <0>;
+ };
+ };
+ };
+};
+
+&cpu_l0 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l1 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l2 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l3 {
+ cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_b0 {
+ cpu-supply = <&vdd_cpu_b>;
+};
+
+&cpu_b1 {
+ cpu-supply = <&vdd_cpu_b>;
+};
+
+&display_subsystem {
+ status = "okay";
+};
+
+&edp {
+ status = "disabled";
+
+ ports {
+ edp_out: port@1 {
+ reg = <1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ edp_out_panel: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&panel_in_edp>;
+ };
+ };
+ };
+};
+
+&emmc_phy {
+ status = "okay";
+};
+
+&gmac {
+ phy-supply = <&vcc_phy>;
+ phy-mode = "rgmii";
+ clock_in_out = "input";
+ snps,reset-gpio = <&gpio3 15 GPIO_ACTIVE_LOW>;
+ snps,reset-active-low;
+ snps,reset-delays-us = <0 10000 50000>;
+ assigned-clocks = <&cru SCLK_RMII_SRC>;
+ assigned-clock-parents = <&clkin_gmac>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&rgmii_pins>;
+ tx_delay = <0x28>;
+ rx_delay = <0x11>;
+ status = "okay";
+};
+
+&gpu {
+ status = "okay";
+ mali-supply = <&vdd_gpu>;
+};
+
+&hdmi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ #sound-dai-cells = <0>;
+ status = "okay";
+};
+
+&i2c0 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <168>;
+ i2c-scl-falling-time-ns = <4>;
+ clock-frequency = <400000>;
+
+ vdd_cpu_b: syr827@40 {
+ compatible = "silergy,syr827";
+ reg = <0x40>;
+ vin-supply = <&vcc5v0_sys>;
+ regulator-compatible = "fan53555-reg";
+ regulator-name = "vdd_cpu_b";
+ regulator-min-microvolt = <712500>;
+ regulator-max-microvolt = <1500000>;
+ regulator-ramp-delay = <1000>;
+ vsel-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+ fcs,suspend-voltage-selector = <1>;
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-initial-state = <3>;
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vdd_gpu: syr828@41 {
+ compatible = "silergy,syr828";
+ reg = <0x41>;
+ vin-supply = <&vcc5v0_sys>;
+ regulator-compatible = "fan53555-reg";
+ regulator-name = "vdd_gpu";
+ regulator-min-microvolt = <712500>;
+ regulator-max-microvolt = <1500000>;
+ regulator-ramp-delay = <1000>;
+ fcs,suspend-voltage-selector = <1>;
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-initial-state = <3>;
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ rk808: pmic@1b {
+ compatible = "rockchip,rk808";
+ reg = <0x1b>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pmic_int_l &pmic_dvs2>;
+ rockchip,system-power-controller;
+ wakeup-source;
+ #clock-cells = <1>;
+ clock-output-names = "xin32k", "rk808-clkout2";
+
+ vcc1-supply = <&vcc3v3_sys>;
+ vcc2-supply = <&vcc3v3_sys>;
+ vcc3-supply = <&vcc3v3_sys>;
+ vcc4-supply = <&vcc3v3_sys>;
+ vcc6-supply = <&vcc3v3_sys>;
+ vcc7-supply = <&vcc3v3_sys>;
+ vcc8-supply = <&vcc3v3_sys>;
+ vcc9-supply = <&vcc3v3_sys>;
+ vcc10-supply = <&vcc3v3_sys>;
+ vcc11-supply = <&vcc3v3_sys>;
+ vcc12-supply = <&vcc3v3_sys>;
+ vddio-supply = <&vcc1v8_pmu>;
+
+ regulators {
+ vdd_center: DCDC_REG1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <750000>;
+ regulator-max-microvolt = <1350000>;
+ regulator-ramp-delay = <6001>;
+ regulator-name = "vdd_center";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vdd_cpu_l: DCDC_REG2 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <750000>;
+ regulator-max-microvolt = <1350000>;
+ regulator-ramp-delay = <6001>;
+ regulator-name = "vdd_cpu_l";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc_ddr: DCDC_REG3 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vcc_ddr";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ };
+ };
+
+ vcc_1v8: DCDC_REG4 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcc_1v8";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <1800000>;
+ };
+ };
+
+ vcc1v8_dvp: LDO_REG1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcc1v8_dvp";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc2v8_dvp: LDO_REG2 {
+ //regulator-always-on;
+ //regulator-boot-on;
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ regulator-name = "vcc2v8_dvp";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc1v8_pmu: LDO_REG3 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcc1v8_pmu";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <1800000>;
+ };
+ };
+
+ vcc_sd: LDO_REG4 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-name = "vcc_sd";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <3300000>;
+ };
+ };
+
+ vcca3v0_codec: LDO_REG5 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-name = "vcca3v0_codec";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc_1v5: LDO_REG6 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1500000>;
+ regulator-max-microvolt = <1500000>;
+ regulator-name = "vcc_1v5";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <1500000>;
+ };
+ };
+
+ vcca1v8_codec: LDO_REG7 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-name = "vcca1v8_codec";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc_3v0: LDO_REG8 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-name = "vcc_3v0";
+ regulator-state-mem {
+ regulator-on-in-suspend;
+ regulator-suspend-microvolt = <3000000>;
+ };
+ };
+
+ vcc3v3_s3: SWITCH_REG1 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vcc3v3_s3";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vcc3v3_s0: SWITCH_REG2 {
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vcc3v3_s0";
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+ };
+ };
+};
+
+&i2c1 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <300>;
+ i2c-scl-falling-time-ns = <15>;
+
+ es8323: es8323@10{
+ compatible = "everest,es8323";
+ reg = <0x10>;
+ ear-con-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+ hp-det-gpio = <&gpio0 11 GPIO_ACTIVE_HIGH>;
+ hp-mic-only = <1>;
+ #sound-dai-cells = <0>;
+ system-clock-frequency = <11289600>;
+ clocks = <&cru SCLK_I2S_8CH_OUT>;
+ clock-names = "mclk";
+ pinctrl-names = "default";
+ pinctrl-0 = <&es8323_earcon &es8323_hpdet>;
+ };
+ rt5640: rt5640@1c {
+ status = "disabled";
+ #sound-dai-cells = <0>;
+ compatible = "realtek,rt5640";
+ reg = <0x1c>;
+ clocks = <&cru SCLK_I2S_8CH_OUT>;
+ clock-names = "mclk";
+ realtek,in1-differential;
+ pinctrl-names = "default";
+ pinctrl-0 = <&rt5640_hpcon>;
+ hp-con-gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+ //hp-det-gpio = <&gpio4 28 GPIO_ACTIVE_LOW>;
+ io-channels = <&saradc 4>;
+ hp-det-adc-value = <500>;
+ };
+};
+
+&i2c3 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <450>;
+ i2c-scl-falling-time-ns = <15>;
+};
+
+&i2c4 {
+ status = "okay";
+ i2c-scl-rising-time-ns = <475>;
+ i2c-scl-falling-time-ns = <26>;
+
+ fusb0: fusb30x@22 {
+ compatible = "fairchild,fusb302";
+ reg = <0x22>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&fusb0_int>;
+ int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
+ vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+ status = "disabled";
+ };
+
+ gsl3680: gsl3680@40 {
+ status = "okay";
+ compatible = "gslX680";
+ reg = <0x40>;
+ screen_max_x = <1536>;
+ screen_max_y = <2048>;
+ touch-gpio = <&gpio4 28 IRQ_TYPE_LEVEL_LOW>;
+ reset-gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+ };
+
+ mpu6050: mpu@68 {
+ status = "disabled";
+ compatible = "invensense,mpu6050";
+ reg = <0x68>;
+ mpu-int_config = <0x10>;
+ mpu-level_shifter = <0>;
+ mpu-orientation = <0 1 0 1 0 0 0 0 1>;
+ orientation-x= <1>;
+ orientation-y= <1>;
+ orientation-z= <1>;
+ irq-gpio = <&gpio1 4 IRQ_TYPE_LEVEL_LOW>;
+ mpu-debug = <1>;
+ };
+};
+
+&i2s0 {
+ status = "okay";
+ rockchip,i2s-broken-burst-len;
+ rockchip,playback-channels = <8>;
+ rockchip,capture-channels = <8>;
+ #sound-dai-cells = <0>;
+};
+
+&i2s1 {
+ status = "okay";
+ rockchip,i2s-broken-burst-len;
+ rockchip,playback-channels = <2>;
+ rockchip,capture-channels = <2>;
+ #sound-dai-cells = <0>;
+ assigned-clocks = <&cru SCLK_I2S1_DIV>, <&cru SCLK_I2S_8CH>;
+ assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S1_8CH>;
+};
+
+&i2s2 {
+ #sound-dai-cells = <0>;
+ status = "okay";
+};
+
+&io_domains {
+ status = "okay";
+
+ bt656-supply = <&vcc_3v0>; /* bt656_gpio2ab_ms */
+ audio-supply = <&vcca1v8_codec>; /* audio_gpio3d4a_ms */
+ sdmmc-supply = <&vcc_sd>; /* sdmmc_gpio4b_ms */
+ gpio1830-supply = <&vcc_3v0>; /* gpio1833_gpio4cd_ms */
+};
+
+&pcie_phy {
+ status = "okay";
+};
+
+&pcie0 {
+ ep-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>;
+ num-lanes = <4>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie_clkreqn_cpm>;
+ status = "okay";
+};
+
+&pmu_io_domains {
+ status = "okay";
+ pmu1830-supply = <&vcc_3v0>;
+};
+
+&pinctrl {
+ buttons {
+ pwrbtn: pwrbtn {
+ rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+
+ lcd-panel {
+ lcd_panel_reset: lcd-panel-reset {
+ rockchip,pins = <4 29 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ lcd_en: lcd-en {
+ rockchip,pins = <1 1 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+
+ pcie {
+ pcie_drv: pcie-drv {
+ rockchip,pins =
+ <1 17 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ pcie_3g_drv: pcie-3g-drv {
+ rockchip,pins =
+ <0 2 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+
+ pmic {
+ vsel1_gpio: vsel1-gpio {
+ rockchip,pins =
+ <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+
+ vsel2_gpio: vsel2-gpio {
+ rockchip,pins =
+ <1 14 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+ };
+
+ sdio-pwrseq {
+ wifi_enable_h: wifi-enable-h {
+ rockchip,pins =
+ <0 10 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ wireless-bluetooth {
+ uart0_gpios: uart0-gpios {
+ rockchip,pins =
+ <2 19 RK_FUNC_GPIO &pcfg_pull_none>,
+ <0 9 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+
+ leds {
+ led_power: led-power {
+ rockchip,pins = <2 27 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+
+ led_user: led-user {
+ rockchip,pins = <0 13 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+ rt5640 {
+ rt5640_hpcon: rt5640-hpcon {
+ rockchip,pins = <4 21 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ es8223 {
+ es8323_hpdet: es8323-hpdet {
+ rockchip,pins = <0 11 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ es8323_earcon: es8323-earcon {
+ rockchip,pins = <0 12 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ pmic {
+ pmic_int_l: pmic-int-l {
+ rockchip,pins =
+ <1 21 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ pmic_dvs2: pmic-dvs2 {
+ rockchip,pins =
+ <1 18 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+ };
+
+ usb2 {
+ host_vbus_drv: host-vbus-drv {
+ rockchip,pins =
+ <1 0 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ fusb30x {
+ fusb0_int: fusb0-int {
+ rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+
+ vbus {
+ vbus_5v_drv: vbus-5v-drv {
+ rockchip,pins = <1 3 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+};
+
+&pwm0 {
+ status = "okay";
+};
+
+&pwm2 {
+ status = "okay";
+};
+
+&rkvdec {
+ status = "okay";
+};
+
+&rockchip_suspend {
+ rockchip,power-ctrl =
+ <&gpio1 18 GPIO_ACTIVE_LOW>,
+ <&gpio1 14 GPIO_ACTIVE_HIGH>;
+};
+
+&route_edp {
+ status = "disabled";
+};
+
+&route_hdmi {
+ status = "okay";
+ logo,mode = "center";
+};
+
+&cdn_dp {
+ status = "disabled";
+ extcon = <&fusb0>;
+ phys = <&tcphy0_dp>;
+};
+
+&dp_in_vopb {
+ status = "disabled";
+};
+
+&saradc {
+ status = "okay";
+ vref-supply = <&vccadc_ref>;
+};
+
+&sdhci {
+ bus-width = <8>;
+ keep-power-in-suspend;
+ mmc-hs400-1_8v;
+ mmc-hs400-enhanced-strobe;
+ non-removable;
+ status = "okay";
+ supports-emmc;
+};
+
+&sdmmc {
+ max-frequency = <150000000>;
+ supports-sd;
+ bus-width = <4>;
+ cap-mmc-highspeed;
+ cap-sd-highspeed;
+ disable-wp;
+ num-slots = <1>;
+ vqmmc-supply = <&vcc_sd>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
+ status = "okay";
+};
+
+&sdio0 {
+ max-frequency = <50000000>;
+ supports-sdio;
+ bus-width = <4>;
+ disable-wp;
+ cap-sd-highspeed;
+ keep-power-in-suspend;
+ mmc-pwrseq = <&sdio_pwrseq>;
+ non-removable;
+ num-slots = <1>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
+ sd-uhs-sdr104;
+ status = "okay";
+};
+
+&tcphy0 {
+ //extcon = <&fusb0>;
+ status = "okay";
+};
+
+&tcphy1 {
+ status = "okay";
+};
+
+&tsadc {
+ /* tshut mode 0:CRU 1:GPIO */
+ rockchip,hw-tshut-mode = <1>;
+ /* tshut polarity 0:LOW 1:HIGH */
+ rockchip,hw-tshut-polarity = <1>;
+ status = "okay";
+};
+
+&u2phy0 {
+ status = "okay";
+ //extcon = <&fusb0>;
+
+ u2phy0_otg: otg-port {
+ status = "okay";
+ };
+
+ u2phy0_host: host-port {
+ phy-supply = <&vcc5v0_host>;
+ status = "okay";
+ };
+};
+
+&u2phy1 {
+ status = "okay";
+
+ u2phy1_otg: otg-port {
+ status = "okay";
+ };
+
+ u2phy1_host: host-port {
+ phy-supply = <&vcc5v0_host>;
+ status = "okay";
+ };
+};
+
+&pwm3 {
+ status = "okay";
+ interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH 0>;
+ compatible = "rockchip,remotectl-pwm";
+ remote_pwm_id = <3>;
+ handle_cpu_id = <0>;
+
+ ir_key1{
+ rockchip,usercode = <0xff00>;
+ rockchip,key_table =
+ <0xeb KEY_POWER>,
+ <0xec KEY_COMPOSE>,
+ <0xfe KEY_BACK>,
+ <0xb7 KEY_HOME>,
+ <0xa3 KEY_WWW>,
+ <0xf4 KEY_VOLUMEUP>,
+ <0xa7 KEY_VOLUMEDOWN>,
+ <0xf8 KEY_ENTER>,
+ <0xfc KEY_UP>,
+ <0xfd KEY_DOWN>,
+ <0xf1 KEY_LEFT>,
+ <0xe5 KEY_RIGHT>;
+ };
+};
+
+&uart0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_xfer &uart0_cts>;
+ status = "okay";
+};
+
+&uart2 {
+ status = "okay";
+};
+
+&usbdrd3_0 {
+ status = "okay";
+ //extcon = <&fusb0>;
+};
+
+&usbdrd3_1 {
+ status = "okay";
+};
+
+&usbdrd_dwc3_0 {
+ status = "okay";
+ //dr_mode = "peripheral";
+ dr_mode = "host";
+};
+
+&usbdrd_dwc3_1 {
+ status = "okay";
+ dr_mode = "host";
+};
+
+&usb_host0_ehci {
+ status = "okay";
+};
+
+&usb_host0_ohci {
+ status = "okay";
+};
+
+&usb_host1_ehci {
+ status = "okay";
+};
+
+&usb_host1_ohci {
+ status = "okay";
+};
+
+&vopb {
+ status = "okay";
+};
+
+&vopb_mmu {
+ status = "okay";
+};
+
+&vopl {
+ status = "okay";
+};
+
+&vopl_mmu {
+ status = "okay";
+};
+
+&vpu {
+ status = "okay";
+};
"Headphone Jack","HPOL",
"Headphone Jack","HPOR";
simple-audio-card,cpu {
- sound-dai = <&i2c1>;
+ sound-dai = <&i2s1>;
};
simple-audio-card,codec {
sound-dai = <&es8323>;
regulator-always-on;
};
+ vbus_5v: vbus-5v-regulator {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ regulator-always-on;
+ regulator-boot-on;
+ gpio = <&gpio1 3 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&vbus_5v_drv>;
+ regulator-name = "vbus_5v";
+ };
+
vcc5v0_sys: vcc5v0-sys {
compatible = "regulator-fixed";
regulator-name = "vcc5v0_sys";
};
leds {
- status = "disabled";
compatible = "gpio-leds";
power {
label = "firefly:blue:power";
pinctrl-0 = <&fusb0_int>;
int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
- status = "okay";
+ status = "disabled";
};
gsl3680: gsl3680@41 {
rockchip,playback-channels = <2>;
rockchip,capture-channels = <2>;
#sound-dai-cells = <0>;
+ assigned-clocks = <&cru SCLK_I2S1_DIV>, <&cru SCLK_I2S_8CH>;
+ assigned-clock-parents = <&cru PLL_GPLL>, <&cru SCLK_I2S1_8CH>;
};
&i2s2 {
rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
+
+ vbus {
+ vbus_5v_drv: vbus-5v-drv {
+ rockchip,pins = <1 3 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
};
&pwm0 {
};
&tcphy0 {
- extcon = <&fusb0>;
+ //extcon = <&fusb0>;
status = "okay";
};
&u2phy0 {
status = "okay";
- extcon = <&fusb0>;
+ //extcon = <&fusb0>;
u2phy0_otg: otg-port {
status = "okay";
status = "okay";
};
+&uart4 {
+ current-speed = <9600>;
+ no-loopback-test;
+ status = "okay";
+};
+
&usbdrd3_0 {
status = "okay";
- extcon = <&fusb0>;
+ //extcon = <&fusb0>;
};
&usbdrd3_1 {
&usbdrd_dwc3_0 {
status = "okay";
+ //dr_mode = "peripheral";
+ dr_mode = "host";
};
&usbdrd_dwc3_1 {
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>;
CONFIG_DEFAULT_HOSTNAME="localhost"
CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
CONFIG_FHANDLE=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=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
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
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
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
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
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
# 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
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
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
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
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
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
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
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,
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;
static int panel_simple_enable(struct drm_panel *panel)
{
struct panel_simple *p = to_panel_simple(panel);
+ int err;
if (p->enabled)
return 0;
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);
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");
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);
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)
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)
if (dsi->panel)
drm_panel_enable(dsi->panel);
+
+ rockchip_dsi_grf_config(dsi, vop_id);
}
static int
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
#include <linux/slab.h>
#include "rockchip_pwm_remotectl.h"
#include <linux/leds.h>
+#include <linux/fb.h>
/*sys/module/rk_pwm_remotectl/parameters,
modify code_print to change the value*/
static int rk_remote_print_code;
+static bool remote_suspend = false;
module_param_named(code_print, rk_remote_print_code, int, 0644);
#define DBG_CODE(args...) \
do { \
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);
}
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))
((~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);
}
}
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;
}
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)
{
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;
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;
}
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);
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
--- /dev/null
+/*
+ * drivers/input/touchscreen/gslX680.c
+ *
+ * Copyright (c) 2012 Shanghai Basewin
+ * Guan Yuwei<guanyuwei@basewin.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+
+#include <linux/module.h>
+#include <linux/delay.h>
+//#include <linux/earlysuspend.h>
+#include <linux/device.h>
+#include <linux/hrtimer.h>
+#include <linux/i2c.h>
+#include <linux/input.h>
+#include <linux/interrupt.h>
+#include <linux/io.h>
+#include <linux/platform_device.h>
+#include <linux/async.h>
+//#include <mach/gpio.h>
+#include <linux/irq.h>
+//#include <mach/board.h>
+#include <linux/workqueue.h>
+#include <linux/proc_fs.h>
+#include <linux/input/mt.h>
+
+//#include <linux/gpio.h>
+#include <linux/version.h>
+#include <linux/slab.h>
+#include <linux/of_gpio.h>
+#include "tp_suspend.h"
+
+#include "gslx680.h"
+#include <linux/wakelock.h>
+//#define GSL_DEBUG
+//#define GSL_MONITOR
+#define REPORT_DATA_ANDROID_4_0
+//#define HAVE_TOUCH_KEY
+#define SLEEP_CLEAR_POINT
+//#define FILTER_POINT
+#ifdef FILTER_POINT
+#define FILTER_MAX 9
+#endif
+
+#define GSLX680_I2C_NAME "gslX680"
+#define GSLX680_I2C_ADDR 0x40
+
+int g_wake_pin=0;
+int g_irq_pin=0;
+
+#define GSL_DATA_REG 0x80
+#define GSL_STATUS_REG 0xe0
+#define GSL_PAGE_REG 0xf0
+
+
+
+#define TPD_PROC_DEBUG
+#ifdef TPD_PROC_DEBUG
+#include <linux/proc_fs.h>
+#include <asm/uaccess.h>
+#include <linux/seq_file.h> //lzk
+//static struct proc_dir_entry *gsl_config_proc = NULL;
+#define GSL_CONFIG_PROC_FILE "gsl_config"
+#define CONFIG_LEN 31
+static char gsl_read[CONFIG_LEN];
+static u8 gsl_data_proc[8] = {0};
+static u8 gsl_proc_flag = 0;
+
+#endif
+
+#define PRESS_MAX 255
+#define MAX_FINGERS 10
+#define MAX_CONTACTS 10
+#define DMA_TRANS_LEN 0x20
+#ifdef GSL_MONITOR
+static struct delayed_work gsl_monitor_work;
+static struct workqueue_struct *gsl_monitor_workqueue = NULL;
+static char int_1st[4] = {0};
+static char int_2nd[4] = {0};
+static char dac_counter = 0;
+static char b0_counter = 0;
+static char i2c_lock_flag = 0;
+#endif
+
+static struct i2c_client *gsl_client = NULL;
+
+#ifdef HAVE_TOUCH_KEY
+static u16 key = 0;
+static int key_state_flag = 0;
+struct key_data {
+ u16 key;
+ u16 x_min;
+ u16 x_max;
+ u16 y_min;
+ u16 y_max;
+};
+
+const u16 key_array[]={
+ KEY_BACK,
+ KEY_HOME,
+ KEY_MENU,
+ KEY_SEARCH,
+ };
+#define MAX_KEY_NUM (sizeof(key_array)/sizeof(key_array[0]))
+
+struct key_data gsl_key_data[MAX_KEY_NUM] = {
+ {KEY_BACK, 2048, 2048, 2048, 2048},
+ {KEY_HOME, 2048, 2048, 2048, 2048},
+ {KEY_MENU, 2048, 2048, 2048, 2048},
+ {KEY_SEARCH, 2048, 2048, 2048, 2048},
+};
+#endif
+
+struct gsl_ts_data {
+ u8 x_index;
+ u8 y_index;
+ u8 z_index;
+ u8 id_index;
+ u8 touch_index;
+ u8 data_reg;
+ u8 status_reg;
+ u8 data_size;
+ u8 touch_bytes;
+ u8 update_data;
+ u8 touch_meta_data;
+ u8 finger_size;
+};
+
+static struct gsl_ts_data devices[] = {
+ {
+ .x_index = 6,
+ .y_index = 4,
+ .z_index = 5,
+ .id_index = 7,
+ .data_reg = GSL_DATA_REG,
+ .status_reg = GSL_STATUS_REG,
+ .update_data = 0x4,
+ .touch_bytes = 4,
+ .touch_meta_data = 4,
+ .finger_size = 70,
+ },
+};
+
+struct gsl_ts {
+ struct i2c_client *client;
+ struct input_dev *input;
+ struct work_struct work;
+ struct workqueue_struct *wq;
+ struct gsl_ts_data *dd;
+ u8 *touch_data;
+ u8 device_id;
+ int irq;
+ int irq_pin;
+ int wake_pin;
+ struct tp_device tp;
+#if defined(CONFIG_HAS_EARLYSUSPEND)
+ struct early_suspend early_suspend;
+#endif
+ int screen_max_x;
+ int screen_max_y;
+ int revert_xy;
+ int revert_x;
+ int revert_y;
+};
+
+#ifdef GSL_DEBUG
+#define print_info(fmt, args...) \
+ do{ \
+ printk(fmt, ##args); \
+ }while(0)
+#else
+#define print_info(fmt, args...)
+#endif
+
+
+static u32 id_sign[MAX_CONTACTS+1] = {0};
+static u8 id_state_flag[MAX_CONTACTS+1] = {0};
+static u8 id_state_old_flag[MAX_CONTACTS+1] = {0};
+static u16 x_old[MAX_CONTACTS+1] = {0};
+static u16 y_old[MAX_CONTACTS+1] = {0};
+static u16 x_new = 0;
+static u16 y_new = 0;
+
+
+
+static int gslX680_init(void)
+{
+
+ gpio_direction_output(g_wake_pin, 0);
+ gpio_set_value(g_wake_pin,1);
+
+
+ /*gpio_direction_output(WAKE_PORT, 0);
+ gpio_set_value(WAKE_PORT,GPIO_HIGH);*/
+ msleep(20);
+
+ gpio_set_value(g_irq_pin,1);
+// gpio_pull_updown(IRQ_PORT, 1);
+
+ msleep(20);
+ return 0;
+}
+
+static int gslX680_shutdown_low(void)
+{
+if(g_wake_pin !=0)
+ {
+ gpio_direction_output(g_wake_pin, 0);
+ gpio_set_value(g_wake_pin,0);
+}
+ return 0;
+}
+
+static int gslX680_shutdown_high(void)
+{
+if(g_wake_pin !=0)
+ {
+ gpio_direction_output(g_wake_pin, 0);
+ gpio_set_value(g_wake_pin,1);
+}
+ return 0;
+}
+
+static inline u16 join_bytes(u8 a, u8 b)
+{
+ u16 ab = 0;
+ ab = ab | a;
+ ab = ab << 8 | b;
+ return ab;
+}
+/*
+static u32 gsl_read_interface(struct i2c_client *client, u8 reg, u8 *buf, u32 num)
+{
+ struct i2c_msg xfer_msg[2];
+
+ xfer_msg[0].addr = client->addr;
+ xfer_msg[0].len = 1;
+ xfer_msg[0].flags = client->flags & I2C_M_TEN;
+ xfer_msg[0].buf = ®
+ 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<CONFIG_LEN?count:CONFIG_LEN));
+ print_info("[tp-gsl][%s][%s]\n",__func__,temp_buf);
+
+ buf[3]=char_to_int(temp_buf[14])<<4 | char_to_int(temp_buf[15]);
+ buf[2]=char_to_int(temp_buf[16])<<4 | char_to_int(temp_buf[17]);
+ buf[1]=char_to_int(temp_buf[18])<<4 | char_to_int(temp_buf[19]);
+ buf[0]=char_to_int(temp_buf[20])<<4 | char_to_int(temp_buf[21]);
+
+ buf[7]=char_to_int(temp_buf[5])<<4 | char_to_int(temp_buf[6]);
+ buf[6]=char_to_int(temp_buf[7])<<4 | char_to_int(temp_buf[8]);
+ buf[5]=char_to_int(temp_buf[9])<<4 | char_to_int(temp_buf[10]);
+ buf[4]=char_to_int(temp_buf[11])<<4 | char_to_int(temp_buf[12]);
+ if('v'==temp_buf[0]&& 's'==temp_buf[1])//version //vs
+ {
+ memcpy(gsl_read,temp_buf,4);
+ printk("gsl version\n");
+ }
+ else if('s'==temp_buf[0]&& 't'==temp_buf[1])//start //st
+ {
+ gsl_proc_flag = 1;
+ reset_chip(gsl_client);
+ }
+ else if('e'==temp_buf[0]&&'n'==temp_buf[1])//end //en
+ {
+ msleep(20);
+ reset_chip(gsl_client);
+ startup_chip(gsl_client);
+ gsl_proc_flag = 0;
+ }
+ else if('r'==temp_buf[0]&&'e'==temp_buf[1])//read buf //
+ {
+ memcpy(gsl_read,temp_buf,4);
+ memcpy(gsl_data_proc,buf,8);
+ }
+ else if('w'==temp_buf[0]&&'r'==temp_buf[1])//write buf
+ {
+ gsl_ts_write(gsl_client,buf[4],buf,4);
+ }
+#ifdef GSL_NOID_VERSION
+ else if('i'==temp_buf[0]&&'d'==temp_buf[1])//write id config //
+ {
+ tmp1=(buf[7]<<24)|(buf[6]<<16)|(buf[5]<<8)|buf[4];
+ tmp=(buf[3]<<24)|(buf[2]<<16)|(buf[1]<<8)|buf[0];
+ if(tmp1>=0 && tmp1<ARRAY_SIZE(gsl_config_data_id))
+ {
+ gsl_config_data_id[tmp1] = tmp;
+ }
+ }
+#endif
+exit_write_proc_out:
+ kfree(path_buf);
+ return count;
+}
+
+static int gsl_server_list_open(struct inode *inode,struct file *file)
+{
+ return single_open(file,gsl_config_read_proc,NULL);
+}
+static const struct file_operations gsl_seq_fops = {
+ .open = gsl_server_list_open,
+ .read = seq_read,
+ .release = single_release,
+ .write = gsl_config_write_proc,
+ .owner = THIS_MODULE,
+};
+#endif
+
+#ifdef FILTER_POINT
+static void filter_point(u16 x, u16 y , u8 id)
+{
+ u16 x_err =0;
+ u16 y_err =0;
+ u16 filter_step_x = 0, filter_step_y = 0;
+
+ id_sign[id] = id_sign[id] + 1;
+ if(id_sign[id] == 1)
+ {
+ x_old[id] = x;
+ y_old[id] = y;
+ }
+
+ x_err = x > x_old[id] ? (x -x_old[id]) : (x_old[id] - x);
+ y_err = y > y_old[id] ? (y -y_old[id]) : (y_old[id] - y);
+
+ if( (x_err > FILTER_MAX && y_err > FILTER_MAX/3) || (x_err > FILTER_MAX/3 && y_err > FILTER_MAX) )
+ {
+ filter_step_x = x_err;
+ filter_step_y = y_err;
+ }
+ else
+ {
+ if(x_err > FILTER_MAX)
+ filter_step_x = x_err;
+ if(y_err> FILTER_MAX)
+ filter_step_y = y_err;
+ }
+
+ if(x_err <= 2*FILTER_MAX && y_err <= 2*FILTER_MAX)
+ {
+ filter_step_x >>= 2;
+ filter_step_y >>= 2;
+ }
+ else if(x_err <= 3*FILTER_MAX && y_err <= 3*FILTER_MAX)
+ {
+ filter_step_x >>= 1;
+ filter_step_y >>= 1;
+ }
+ else if(x_err <= 4*FILTER_MAX && y_err <= 4*FILTER_MAX)
+ {
+ filter_step_x = filter_step_x*3/4;
+ filter_step_y = filter_step_y*3/4;
+ }
+
+ x_new = x > x_old[id] ? (x_old[id] + filter_step_x) : (x_old[id] - filter_step_x);
+ y_new = y > y_old[id] ? (y_old[id] + filter_step_y) : (y_old[id] - filter_step_y);
+
+ x_old[id] = x_new;
+ y_old[id] = y_new;
+}
+#else
+static void record_point(u16 x, u16 y , u8 id)
+{
+ u16 x_err =0;
+ u16 y_err =0;
+
+ id_sign[id]=id_sign[id]+1;
+
+ if(id_sign[id]==1){
+ x_old[id]=x;
+ y_old[id]=y;
+ }
+
+ x = (x_old[id] + x)/2;
+ y = (y_old[id] + y)/2;
+
+ if(x>x_old[id]){
+ x_err=x -x_old[id];
+ }
+ else{
+ x_err=x_old[id]-x;
+ }
+
+ if(y>y_old[id]){
+ y_err=y -y_old[id];
+ }
+ else{
+ y_err=y_old[id]-y;
+ }
+
+ if( (x_err > 3 && y_err > 1) || (x_err > 1 && y_err > 3) ){
+ x_new = x; x_old[id] = x;
+ y_new = y; y_old[id] = y;
+ }
+ else{
+ if(x_err > 3){
+ x_new = x; x_old[id] = x;
+ }
+ else
+ x_new = x_old[id];
+ if(y_err> 3){
+ y_new = y; y_old[id] = y;
+ }
+ else
+ y_new = y_old[id];
+ }
+
+ if(id_sign[id]==1){
+ x_new= x_old[id];
+ y_new= y_old[id];
+ }
+
+}
+#endif
+
+#ifdef HAVE_TOUCH_KEY
+static void report_key(struct gsl_ts *ts, u16 x, u16 y)
+{
+ u16 i = 0;
+
+ for(i = 0; i < MAX_KEY_NUM; i++)
+ {
+ if((gsl_key_data[i].x_min < x) && (x < gsl_key_data[i].x_max)&&(gsl_key_data[i].y_min < y) && (y < gsl_key_data[i].y_max))
+ {
+ key = gsl_key_data[i].key;
+ input_report_key(ts->input, key, 1);
+ input_sync(ts->input);
+ key_state_flag = 1;
+ break;
+ }
+ }
+}
+#endif
+
+static void report_data(struct gsl_ts *ts, u16 x, u16 y, u8 pressure, u8 id)
+{
+ if(ts->revert_xy)
+ swap(x, y);
+
+ print_info("#####id=%d,x=%d,y=%d######\n",id,x,y);
+
+ if(x > ts->screen_max_x || y > ts->screen_max_y)
+ {
+ #ifdef HAVE_TOUCH_KEY
+ report_key(ts,x,y);
+ #endif
+ return;
+ }
+
+ if(ts->revert_x)
+ x = ts->screen_max_x-x-1;
+ if(ts->revert_y)
+ y = ts->screen_max_y-y-1;
+#ifdef REPORT_DATA_ANDROID_4_0
+ input_mt_slot(ts->input, id);
+ input_report_abs(ts->input, ABS_MT_TRACKING_ID, id);
+ input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, pressure);
+ input_report_abs(ts->input, ABS_MT_POSITION_X, x);
+ input_report_abs(ts->input, ABS_MT_POSITION_Y, y);
+ input_report_abs(ts->input, ABS_MT_WIDTH_MAJOR, 1);
+#else
+ input_report_abs(ts->input, ABS_MT_TRACKING_ID, id);
+ input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, pressure);
+ input_report_abs(ts->input, ABS_MT_POSITION_X,x);
+ input_report_abs(ts->input, ABS_MT_POSITION_Y, y);
+ input_report_abs(ts->input, ABS_MT_WIDTH_MAJOR, 1);
+ input_mt_sync(ts->input);
+#endif
+}
+
+static void gslX680_ts_worker(struct work_struct *work)
+{
+ int rc, i;
+ u8 id, touches/*, read_buf[4] = {0}*/;
+ u16 x, y;
+#ifdef GSL_NOID_VERSION
+ unsigned int tmp1;
+ u8 buf[4] = {0};
+ struct gsl_touch_info cinfo = {{0}};
+#endif
+ struct gsl_ts *ts = container_of(work, struct gsl_ts,work);
+
+ print_info("=====gslX680_ts_worker=====\n");
+
+#ifdef TPD_PROC_DEBUG
+ if(gsl_proc_flag == 1)
+ goto schedule;
+#endif
+
+#ifdef GSL_MONITOR
+ if(i2c_lock_flag != 0)
+ goto i2c_lock_schedule;
+ else
+ i2c_lock_flag = 1;
+#endif
+
+
+
+ rc = gsl_ts_read(ts->client, 0x80, ts->touch_data, ts->dd->data_size);
+ if (rc < 0)
+ {
+ dev_err(&ts->client->dev, "read failed\n");
+ reset_chip(ts->client);
+ startup_chip(ts->client);
+ goto schedule;
+ }
+
+ touches = ts->touch_data[ts->dd->touch_index];
+ print_info("-----touches: %d -----\n", touches);
+#ifdef GSL_NOID_VERSION
+ cinfo.finger_num = touches;
+ print_info("tp-gsl finger_num = %d\n",cinfo.finger_num);
+ for(i = 0; i < (touches < MAX_CONTACTS ? touches : MAX_CONTACTS); i ++)
+ {
+ cinfo.x[i] = join_bytes( ( ts->touch_data[ts->dd->x_index + 4 * i + 1] & 0xf),
+ ts->touch_data[ts->dd->x_index + 4 * i]);
+ cinfo.y[i] = join_bytes(ts->touch_data[ts->dd->y_index + 4 * i + 1],
+ ts->touch_data[ts->dd->y_index + 4 * i ]);
+ cinfo.id[i] = ((ts->touch_data[ts->dd->x_index + 4 * i + 1] & 0xf0)>>4);
+ print_info("tp-gsl before: x[%d] = %d, y[%d] = %d, id[%d] = %d \n",i,cinfo.x[i],i,cinfo.y[i],i,cinfo.id[i]);
+ }
+ cinfo.finger_num=(ts->touch_data[3]<<24)|(ts->touch_data[2]<<16)
+ |(ts->touch_data[1]<<8)|(ts->touch_data[0]);
+ gsl_alg_id_main(&cinfo);
+ tmp1=gsl_mask_tiaoping();
+ print_info("[tp-gsl] tmp1=%x\n",tmp1);
+ if(tmp1>0&&tmp1<0xffffffff)
+ {
+ buf[0]=0xa;buf[1]=0;buf[2]=0;buf[3]=0;
+ gsl_ts_write(ts->client,0xf0,buf,4);
+ buf[0]=(u8)(tmp1 & 0xff);
+ buf[1]=(u8)((tmp1>>8) & 0xff);
+ buf[2]=(u8)((tmp1>>16) & 0xff);
+ buf[3]=(u8)((tmp1>>24) & 0xff);
+ print_info("tmp1=%08x,buf[0]=%02x,buf[1]=%02x,buf[2]=%02x,buf[3]=%02x\n",
+ tmp1,buf[0],buf[1],buf[2],buf[3]);
+ gsl_ts_write(ts->client,0x8,buf,4);
+ }
+ touches = cinfo.finger_num;
+#endif
+
+ for(i = 1; i <= MAX_CONTACTS; i ++)
+ {
+ if(touches == 0)
+ id_sign[i] = 0;
+ id_state_flag[i] = 0;
+ }
+ for(i= 0;i < (touches > MAX_FINGERS ? MAX_FINGERS : touches);i ++)
+ {
+ #ifdef GSL_NOID_VERSION
+ {
+ id = cinfo.id[i];
+ x = cinfo.x[i];
+ y = cinfo.y[i];
+ }
+ #else
+ {
+ x = join_bytes( ( ts->touch_data[ts->dd->x_index + 4 * i + 1] & 0xf),
+ ts->touch_data[ts->dd->x_index + 4 * i]);
+ y = join_bytes(ts->touch_data[ts->dd->y_index + 4 * i + 1],
+ ts->touch_data[ts->dd->y_index + 4 * i ]);
+ id = ts->touch_data[ts->dd->id_index + 4 * i] >> 4;
+ }
+ #endif
+
+ if(1 <=id && id <= MAX_CONTACTS)
+ {
+ #ifdef FILTER_POINT
+ filter_point(x, y ,id);
+ #else
+ record_point(x, y , id);
+ #endif
+ report_data(ts, x_new, y_new, 10, id);
+ id_state_flag[id] = 1;
+ }
+ }
+ for(i = 1; i <= MAX_CONTACTS; i ++)
+ {
+ if( (0 == touches) || ((0 != id_state_old_flag[i]) && (0 == id_state_flag[i])) )
+ {
+ #ifdef REPORT_DATA_ANDROID_4_0
+ input_mt_slot(ts->input, i);
+ input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1);
+ input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, false);
+ #endif
+ id_sign[i]=0;
+ }
+ id_state_old_flag[i] = id_state_flag[i];
+ }
+ if(0 == touches)
+ {
+#ifndef REPORT_DATA_ANDROID_4_0
+ input_mt_sync(ts->input);
+#endif
+ #ifdef HAVE_TOUCH_KEY
+ if(key_state_flag)
+ {
+ input_report_key(ts->input, key, 0);
+ input_sync(ts->input);
+ key_state_flag = 0;
+ }
+ #endif
+ }
+ input_sync(ts->input);
+
+schedule:
+#ifdef GSL_MONITOR
+ i2c_lock_flag = 0;
+i2c_lock_schedule:
+#endif
+ //reset_chip(ts->client);
+ //startup_chip(ts->client);
+ enable_irq(ts->irq);
+
+}
+
+#ifdef GSL_MONITOR
+static void gsl_monitor_worker(void)
+{
+ char write_buf[4] = {0};
+ char read_buf[4] = {0};
+
+ print_info("----------------gsl_monitor_worker-----------------\n");
+
+ if(i2c_lock_flag != 0)
+ goto queue_monitor_work;
+ else
+ i2c_lock_flag = 1;
+
+ gsl_ts_read(gsl_client, 0xb0, read_buf, 4);
+ if(read_buf[3] != 0x5a || read_buf[2] != 0x5a || read_buf[1] != 0x5a || read_buf[0] != 0x5a)
+ b0_counter ++;
+ else
+ b0_counter = 0;
+
+ if(b0_counter > 1)
+ {
+ printk("======read 0xb0: %x %x %x %x ======\n",read_buf[3], read_buf[2], read_buf[1], read_buf[0]);
+ init_chip(gsl_client);
+ b0_counter = 0;
+ }
+
+ gsl_ts_read(gsl_client, 0xb4, read_buf, 4);
+ int_2nd[3] = int_1st[3];
+ int_2nd[2] = int_1st[2];
+ int_2nd[1] = int_1st[1];
+ int_2nd[0] = int_1st[0];
+ int_1st[3] = read_buf[3];
+ int_1st[2] = read_buf[2];
+ int_1st[1] = read_buf[1];
+ int_1st[0] = read_buf[0];
+
+ if(int_1st[3] == int_2nd[3] && int_1st[2] == int_2nd[2] &&int_1st[1] == int_2nd[1] && int_1st[0] == int_2nd[0])
+ {
+ printk("======int_1st: %x %x %x %x , int_2nd: %x %x %x %x ======\n",int_1st[3], int_1st[2], int_1st[1], int_1st[0], int_2nd[3], int_2nd[2],int_2nd[1],int_2nd[0]);
+ init_chip(gsl_client);
+ }
+
+ write_buf[3] = 0x01;
+ write_buf[2] = 0xfe;
+ write_buf[1] = 0x10;
+ write_buf[0] = 0x00;
+ gsl_ts_write(gsl_client, 0xf0, write_buf, 4);
+ gsl_ts_read(gsl_client, 0x10, read_buf, 4);
+ gsl_ts_read(gsl_client, 0x10, read_buf, 4);
+
+ if(read_buf[3] < 10 && read_buf[2] < 10 && read_buf[1] < 10 && read_buf[0] < 10)
+ dac_counter ++;
+ else
+ dac_counter = 0;
+
+ if(dac_counter > 1)
+ {
+ printk("======read DAC1_0: %x %x %x %x ======\n",read_buf[3], read_buf[2], read_buf[1], read_buf[0]);
+ init_chip(gsl_client);
+ dac_counter = 0;
+ }
+
+ i2c_lock_flag = 0;
+
+queue_monitor_work:
+ queue_delayed_work(gsl_monitor_workqueue, &gsl_monitor_work, 100);
+}
+#endif
+
+static irqreturn_t gsl_ts_irq(int irq, void *dev_id)
+{
+ struct gsl_ts *ts = dev_id;
+
+ print_info("========gslX680 Interrupt=========\n");
+
+ disable_irq_nosync(ts->irq);
+
+ if (!work_pending(&ts->work))
+ {
+ queue_work(ts->wq, &ts->work);
+ }
+
+ return IRQ_HANDLED;
+
+}
+
+static int gslX680_ts_init(struct i2c_client *client, struct gsl_ts *ts)
+{
+ struct input_dev *input_device;
+ int rc = 0;
+
+ printk("[GSLX680] Enter %s\n", __func__);
+
+ ts->dd = &devices[ts->device_id];
+
+ if (ts->device_id == 0) {
+ ts->dd->data_size = MAX_FINGERS * ts->dd->touch_bytes + ts->dd->touch_meta_data;
+ ts->dd->touch_index = 0;
+ }
+
+ ts->touch_data = kzalloc(ts->dd->data_size, GFP_KERNEL);
+ if (!ts->touch_data) {
+ pr_err("%s: Unable to allocate memory\n", __func__);
+ return -ENOMEM;
+ }
+ input_device = input_allocate_device();
+ if (!input_device) {
+ rc = -ENOMEM;
+ goto error_alloc_dev;
+ }
+
+ ts->input = input_device;
+ input_device->name = GSLX680_I2C_NAME;
+ input_device->id.bustype = BUS_I2C;
+ input_device->dev.parent = &client->dev;
+ input_set_drvdata(input_device, ts);
+
+#ifdef REPORT_DATA_ANDROID_4_0
+ __set_bit(EV_ABS, input_device->evbit);
+ __set_bit(EV_KEY, input_device->evbit);
+ __set_bit(EV_REP, input_device->evbit);
+ __set_bit(INPUT_PROP_DIRECT, input_device->propbit);
+ input_mt_init_slots(input_device, (MAX_CONTACTS+1),0);
+#else
+ input_set_abs_params(input_device,ABS_MT_TRACKING_ID, 0, (MAX_CONTACTS+1), 0, 0);
+ set_bit(EV_ABS, input_device->evbit);
+ set_bit(EV_KEY, input_device->evbit);
+ __set_bit(INPUT_PROP_DIRECT, input_device->propbit);
+ input_device->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
+#endif
+
+#ifdef HAVE_TOUCH_KEY
+ input_device->evbit[0] = BIT_MASK(EV_KEY);
+ //input_device->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
+ for (i = 0; i < MAX_KEY_NUM; i++)
+ set_bit(key_array[i], input_device->keybit);
+#endif
+
+ set_bit(ABS_MT_POSITION_X, input_device->absbit);
+ set_bit(ABS_MT_POSITION_Y, input_device->absbit);
+ set_bit(ABS_MT_TOUCH_MAJOR, input_device->absbit);
+ set_bit(ABS_MT_WIDTH_MAJOR, input_device->absbit);
+
+ input_set_abs_params(input_device,ABS_MT_POSITION_X, 0, ts->screen_max_x, 0, 0);
+ input_set_abs_params(input_device,ABS_MT_POSITION_Y, 0, ts->screen_max_y, 0, 0);
+ input_set_abs_params(input_device,ABS_MT_TOUCH_MAJOR, 0, PRESS_MAX, 0, 0);
+ input_set_abs_params(input_device,ABS_MT_WIDTH_MAJOR, 0, 200, 0, 0);
+
+// ts->irq_pin =
+
+ //client->irq = ts->irq_pin;
+// ts->irq = client->irq;
+
+ ts->wq = create_singlethread_workqueue("kworkqueue_ts");
+ if (!ts->wq) {
+ dev_err(&client->dev, "Could not create workqueue\n");
+ goto error_wq_create;
+ }
+ flush_workqueue(ts->wq);
+
+ INIT_WORK(&ts->work, gslX680_ts_worker);
+
+ rc = input_register_device(input_device);
+ if (rc)
+ goto error_unreg_device;
+
+ return 0;
+
+error_unreg_device:
+ destroy_workqueue(ts->wq);
+error_wq_create:
+ input_free_device(input_device);
+error_alloc_dev:
+ kfree(ts->touch_data);
+ return rc;
+}
+
+static int gsl_ts_suspend(struct device *dev)
+{
+ struct gsl_ts *ts = dev_get_drvdata(dev);
+#ifdef REPORT_DATA_ANDROID_4_0
+ int i;
+#endif
+ printk("I'am in gsl_ts_suspend() start\n");
+
+#ifdef GSL_MONITOR
+ printk( "gsl_ts_suspend () : cancel gsl_monitor_work\n");
+ cancel_delayed_work_sync(&gsl_monitor_work);
+#endif
+
+ disable_irq_nosync(ts->irq);
+
+ gslX680_shutdown_low();
+
+#ifdef SLEEP_CLEAR_POINT
+ msleep(10);
+ #ifdef REPORT_DATA_ANDROID_4_0
+ for(i = 1; i <= MAX_CONTACTS ;i ++)
+ {
+ input_mt_slot(ts->input, i);
+ input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1);
+ input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, false);
+ }
+ #else
+ input_mt_sync(ts->input);
+ #endif
+ input_sync(ts->input);
+ msleep(10);
+ report_data(ts, 1, 1, 10, 1);
+ input_sync(ts->input);
+#endif
+
+ return 0;
+}
+
+static int gsl_ts_resume(struct device *dev)
+{
+ struct gsl_ts *ts = dev_get_drvdata(dev);
+#ifdef REPORT_DATA_ANDROID_4_0
+ int i;
+#endif
+ printk("I'am in gsl_ts_resume() start\n");
+
+ gslX680_shutdown_high();
+ msleep(20);
+ reset_chip(ts->client);
+ startup_chip(ts->client);
+ check_mem_data(ts->client);
+ check_mem_data(ts->client);
+
+#ifdef SLEEP_CLEAR_POINT
+ #ifdef REPORT_DATA_ANDROID_4_0
+ for(i =1;i<=MAX_CONTACTS;i++)
+ {
+ input_mt_slot(ts->input, i);
+ input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1);
+ input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, false);
+ }
+ #else
+ input_mt_sync(ts->input);
+ #endif
+ input_sync(ts->input);
+#endif
+#ifdef GSL_MONITOR
+ printk( "gsl_ts_resume () : queue gsl_monitor_work\n");
+ queue_delayed_work(gsl_monitor_workqueue, &gsl_monitor_work, 300);
+#endif
+ printk("gsl_ts_resume () end\n");
+ enable_irq(ts->irq);
+ return 0;
+}
+
+//#ifdef CONFIG_HAS_EARLYSUSPEND
+#if 1
+static int gsl_ts_early_suspend(struct tp_device *tp_d)
+{
+ struct gsl_ts *ts = container_of(tp_d, struct gsl_ts, tp);
+ printk("[GSLX680] Enter %s\n", __func__);
+ return gsl_ts_suspend(&ts->client->dev);
+}
+
+static int gsl_ts_late_resume(struct tp_device *tp_d)
+{
+ struct gsl_ts *ts = container_of(tp_d, struct gsl_ts, tp);
+ printk("[GSLX680] Enter %s\n", __func__);
+ return gsl_ts_resume(&ts->client->dev);
+}
+#endif
+
+static int gsl_ts_probe(struct i2c_client *client,
+ const struct i2c_device_id *id)
+{
+ struct gsl_ts *ts;
+ int rc;
+ int timer = 3;
+ int ret = 0;
+ char buffer = 0;
+ struct device_node *np = client->dev.of_node;
+ enum of_gpio_flags wake_flags;
+ unsigned long irq_flags;
+
+ printk("GSLX680 Enter %s\n", __func__);
+
+ while(timer > 0)
+ {
+ ret = i2c_master_recv(client,&buffer,1);
+ if(ret >= 0)
+ {
+ printk("%s--%d, i2c_master_recv sucess\n", __func__, __LINE__);
+ break;
+ }
+ timer--;
+ msleep(100);
+ }
+
+ if(ret < 0)
+ {
+ printk("%s--%d, i2c_master_recv fail\n", __func__, __LINE__);
+ return ret;
+ }
+
+ if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
+ dev_err(&client->dev, "I2C functionality not supported\n");
+ return -ENODEV;
+ }
+
+ ts = kzalloc(sizeof(*ts), GFP_KERNEL);
+ if (!ts)
+ return -ENOMEM;
+ printk("==kzalloc success=\n");
+
+ ts->client = client;
+ i2c_set_clientdata(client, ts);
+ ts->device_id = id->driver_data;
+
+ of_property_read_u32(np,"screen_max_x",&(ts->screen_max_x));
+ of_property_read_u32(np,"screen_max_y",&(ts->screen_max_y));
+ print_info("[tp-gsl] screen_max_x =[%d] \n",ts->screen_max_x);
+ print_info("[tp-gsl] screen_max_y =[%d] \n",ts->screen_max_y);
+
+ ret = of_property_read_u32(np,"revert_xy",&(ts->revert_xy));
+ if (ret < 0)
+ ts->revert_xy = 0;
+ ret = of_property_read_u32(np,"revert_x",&(ts->revert_x));
+ if (ret < 0)
+ ts->revert_x = 0;
+ ret = of_property_read_u32(np,"revert_y",&(ts->revert_y));
+ if (ret < 0)
+ ts->revert_y = 0;
+
+ //ts->irq_pin=of_get_named_gpio_flags(np, "irp-gpio", 0, (enum of_gpio_flags *)&irq_flags);
+ //ts->wake_pin=of_get_named_gpio_flags(np, "wake-gpio", 0, &wake_flags);
+ ts->irq_pin=of_get_named_gpio_flags(np, "touch-gpio", 0, (enum of_gpio_flags *)&irq_flags);
+ ts->wake_pin=of_get_named_gpio_flags(np, "reset-gpio", 0, &wake_flags);
+
+ if (gpio_is_valid(ts->wake_pin)) {
+ rc = devm_gpio_request_one(&client->dev, ts->wake_pin, (wake_flags & OF_GPIO_ACTIVE_LOW) ? GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH, "gslX680 wake pin");
+ if (rc != 0) {
+ dev_err(&client->dev, "gslX680 wake pin error\n");
+ return -EIO;
+ }
+ g_wake_pin = ts->wake_pin;
+ } else {
+ dev_info(&client->dev, "wake pin invalid\n");
+ }
+ if (gpio_is_valid(ts->irq_pin)) {
+ rc = devm_gpio_request_one(&client->dev, ts->irq_pin, (irq_flags & OF_GPIO_ACTIVE_LOW) ? GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH, "gslX680 irq pin");
+ if (rc != 0) {
+ dev_err(&client->dev, "gslX680 irq pin error\n");
+ return -EIO;
+ }
+ g_irq_pin = ts->irq_pin;
+ } else {
+ dev_info(&client->dev, "irq pin invalid\n");
+ }
+
+ rc = gslX680_ts_init(client, ts);
+ if (rc < 0) {
+ dev_err(&client->dev, "GSLX680 init failed\n");
+ goto error_mutex_destroy;
+ }
+
+ gsl_client = client;
+
+ gslX680_init();
+// gpio_set_value(ts->irq_pin,1);
+// msleep(20);
+
+ init_chip(ts->client);
+ check_mem_data(ts->client);
+
+ ts->irq=gpio_to_irq(ts->irq_pin); //If not defined in client
+ if (ts->irq)
+ {
+ rc = devm_request_threaded_irq(&client->dev, ts->irq, NULL, gsl_ts_irq, irq_flags | IRQF_ONESHOT, client->name, ts);
+ if (rc != 0) {
+ printk(KERN_ALERT "Cannot allocate ts INT!ERRNO:%d\n", rc);
+ goto error_req_irq_fail;
+ }
+ disable_irq(ts->irq);
+ }
+ else
+ {
+ printk("gsl x680 irq req fail\n");
+ goto error_req_irq_fail;
+ }
+ /* create debug attribute */
+ //rc = device_create_file(&ts->input->dev, &dev_attr_debug_enable);
+ ts->tp.tp_resume = gsl_ts_late_resume;
+ ts->tp.tp_suspend = gsl_ts_early_suspend;
+ tp_register_fb(&ts->tp);
+
+#ifdef CONFIG_HAS_EARLYSUSPEND
+ ts->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
+ //ts->early_suspend.level = EARLY_SUSPEND_LEVEL_DISABLE_FB + 1;
+ ts->early_suspend.suspend = gsl_ts_early_suspend;
+ ts->early_suspend.resume = gsl_ts_late_resume;
+ register_early_suspend(&ts->early_suspend);
+#endif
+
+
+#ifdef GSL_MONITOR
+ printk( "gsl_ts_probe () : queue gsl_monitor_workqueue\n");
+
+ INIT_DELAYED_WORK(&gsl_monitor_work, gsl_monitor_worker);
+ gsl_monitor_workqueue = create_singlethread_workqueue("gsl_monitor_workqueue");
+ queue_delayed_work(gsl_monitor_workqueue, &gsl_monitor_work, 1000);
+#endif
+
+#ifdef TPD_PROC_DEBUG
+/*
+ gsl_config_proc = create_proc_entry(GSL_CONFIG_PROC_FILE, 0666, NULL);
+ //printk("[tp-gsl] [%s] gsl_config_proc = %x \n",__func__,gsl_config_proc);
+ if (gsl_config_proc == NULL)
+ {
+ print_info("create_proc_entry %s failed\n", GSL_CONFIG_PROC_FILE);
+ }
+ else
+ {
+ gsl_config_proc->read_proc = gsl_config_read_proc;
+ gsl_config_proc->write_proc = gsl_config_write_proc;
+ }
+*/
+ proc_create(GSL_CONFIG_PROC_FILE,0666,NULL,&gsl_seq_fops);
+ gsl_proc_flag = 0;
+#endif
+
+ gpio_set_value(ts->irq_pin, 0);
+ enable_irq(ts->irq);
+ printk("[GSLX680] End %s\n", __func__);
+
+ return 0;
+
+//exit_set_irq_mode:
+error_req_irq_fail:
+ free_irq(ts->irq, ts);
+
+error_mutex_destroy:
+ input_free_device(ts->input);
+ kfree(ts);
+ return rc;
+}
+
+static int gsl_ts_remove(struct i2c_client *client)
+{
+ struct gsl_ts *ts = i2c_get_clientdata(client);
+ printk("==gsl_ts_remove=\n");
+
+#ifdef CONFIG_HAS_EARLYSUSPEND
+ unregister_early_suspend(&ts->early_suspend);
+#endif
+
+#ifdef GSL_MONITOR
+ cancel_delayed_work_sync(&gsl_monitor_work);
+ destroy_workqueue(gsl_monitor_workqueue);
+#endif
+
+ device_init_wakeup(&client->dev, 0);
+ cancel_work_sync(&ts->work);
+ free_irq(ts->irq, ts);
+ destroy_workqueue(ts->wq);
+ input_unregister_device(ts->input);
+ //device_remove_file(&ts->input->dev, &dev_attr_debug_enable);
+
+ kfree(ts->touch_data);
+ kfree(ts);
+
+ return 0;
+}
+
+static struct of_device_id gsl_ts_ids[] = {
+ {.compatible = "gslX680"},
+ {}
+};
+
+static const struct i2c_device_id gsl_ts_id[] = {
+ {GSLX680_I2C_NAME, 0},
+ {}
+};
+MODULE_DEVICE_TABLE(i2c, gsl_ts_id);
+
+static struct i2c_driver gsl_ts_driver = {
+ .driver = {
+ .name = GSLX680_I2C_NAME,
+ .owner = THIS_MODULE,
+ .of_match_table = of_match_ptr(gsl_ts_ids),
+ },
+#ifndef CONFIG_HAS_EARLYSUSPEND
+ //.suspend = gsl_ts_suspend,
+ //.resume = gsl_ts_resume,
+#endif
+ .probe = gsl_ts_probe,
+ .remove = gsl_ts_remove,
+ .id_table = gsl_ts_id,
+};
+
+static int __init gsl_ts_init(void)
+{
+ int ret;
+ printk("==gsl_ts_init==\n");
+ ret = i2c_add_driver(&gsl_ts_driver);
+ printk("ret=%d\n",ret);
+ return ret;
+}
+static void __exit gsl_ts_exit(void)
+{
+ printk("==gsl_ts_exit==\n");
+ i2c_del_driver(&gsl_ts_driver);
+ return;
+}
+
+module_init(gsl_ts_init);
+module_exit(gsl_ts_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("GSLX680 touchscreen controller driver");
+MODULE_AUTHOR("Guan Yuwei, guanyuwei@basewin.com");
+MODULE_ALIAS("platform:gsl_ts");
--- /dev/null
+#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
#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
},
{
.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,
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/regmap.h>
+#include <linux/of_gpio.h>
+#include <linux/gpio.h>
+#include <linux/delay.h>
struct rk808_reg_data {
int addr;
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;
}
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");
}
/* 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,
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;
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,
{
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.
}
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;
#else
disk->is_rk_disk = false;
#endif
+
+ disk->is_rk_disk = false;
sprintf(disk->disk_name, "nvme%dn%d", dev->instance, nsid);
/*
# 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)
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
#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
struct regmap_irq_chip_data *irq_data;
struct regmap *regmap;
long variant;
+ int hold_gpio;
+ int stby_gpio;
};
enum {
#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);
#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,
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);
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);
0x0301, 0x0301);
snd_soc_update_bits(codec, RT5640_MICBIAS,
0x0030, 0x0030);
+ snd_soc_write(codec, RT5640_PWR_ANLG2, 0x0800); //micbas1
}
break;
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);
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;
}
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");
}
}
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,
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];
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;
};