From: T-Firefly Date: Sat, 19 Aug 2017 08:12:28 +0000 (+0800) Subject: ARM64: firefly: Add rk3399-firefly board support X-Git-Tag: firefly_0821_release~2 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=941e22553dc5b8ddd0d363296499966c7ad29818;p=firefly-linux-kernel-4.4.55.git ARM64: firefly: Add rk3399-firefly board support Change-Id: I42bc1c24cfbfdb0e713d8fd83fdd2e075fd66d9c --- diff --git a/arch/arm/boot/dts/rk3288-firefly-lvds.dts b/arch/arm/boot/dts/rk3288-firefly-lvds.dts new file mode 100644 index 000000000000..015b2ba4ce04 --- /dev/null +++ b/arch/arm/boot/dts/rk3288-firefly-lvds.dts @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2014, 2015 FUKAUMI Naoki + * + * 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 "rk3288-firefly.dtsi" +#include +#include + +/ { + model = "Firefly-RK3288"; + compatible = "firefly,firefly-rk3288", "rockchip,rk3288"; + + + backlight: backlight { + compatible = "pwm-backlight"; + 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 = <128>; + /*enable-gpios = <&gpio7 2 GPIO_ACTIVE_HIGH>;*/ + enable-gpios = <&gpio8 6 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&bl_en>; + pwms = <&pwm1 0 10000 PWM_POLARITY_INVERTED>; + /*pwms = <&pwm0 0 1000000 PWM_POLARITY_INVERTED>;*/ + status = "okay"; + }; + + lvds_panel: lvds_panel { + compatible ="auo,b101ew05","simple-panel"; + backlight = <&backlight>; + /*enable-gpios = <&gpio7 4 GPIO_ACTIVE_HIGH>;*/ + enable-gpios = <&gpio7 3 GPIO_ACTIVE_HIGH>; + pinctrl-0 = <&lcd_cs>; + status = "okay"; + }; +}; + + +&lvds { + rockchip,data-mapping = "jeida"; + rockchip,data-width = <24>; + rockchip,output = "lvds"; + rockchip,panel = <&lvds_panel>; + status = "okay"; +}; + +&pwm0 { + status = "okay"; +}; + + +&pinctrl { + backlight { + bl_en: bl-en { + /*rockchip,pins = <7 2 RK_FUNC_GPIO &pcfg_pull_none>;*/ + rockchip,pins = <7 3 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + + lcd { + lcd_cs: lcd-cs { + rockchip,pins = <7 4 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + +}; + + + + +&ir { + gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; +}; + +&pinctrl { + act8846 { + pmic_vsel: pmic-vsel { + rockchip,pins = <7 14 RK_FUNC_GPIO &pcfg_output_low>; + }; + }; + + ir { + ir_int: ir-int { + rockchip,pins = <7 0 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; +}; + +&pwm1 { + status = "okay"; +}; diff --git a/arch/arm/configs/firefly_linux_defconfig b/arch/arm/configs/firefly_linux_defconfig new file mode 100644 index 000000000000..b858d74eed7f --- /dev/null +++ b/arch/arm/configs/firefly_linux_defconfig @@ -0,0 +1,481 @@ +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_DEFAULT_HOSTNAME="localhost" +CONFIG_SYSVIPC=y +CONFIG_FHANDLE=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_CGROUPS=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CPUSETS=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_SCHED=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_NAMESPACES=y +CONFIG_USER_NS=y +CONFIG_BLK_DEV_INITRD=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set +# CONFIG_RD_LZ4 is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_EMBEDDED=y +# CONFIG_COMPAT_BRK is not set +CONFIG_PROFILING=y +CONFIG_MODULES=y +CONFIG_MODULE_FORCE_LOAD=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_MAC_PARTITION=y +CONFIG_ARCH_ROCKCHIP=y +CONFIG_ARM_THUMBEE=y +CONFIG_ARM_KERNMEM_PERMS=y +# CONFIG_ARM_ERRATA_643719 is not set +CONFIG_SMP=y +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_AEABI=y +CONFIG_HIGHMEM=y +# CONFIG_HIGHPTE is not set +# CONFIG_COMPACTION is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 +CONFIG_ZSMALLOC=y +CONFIG_SECCOMP=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPUFREQ_DT=y +CONFIG_ARM_ROCKCHIP_CPUFREQ=y +CONFIG_CPU_IDLE=y +CONFIG_VFP=y +CONFIG_NEON=y +CONFIG_PM_DEBUG=y +CONFIG_PM_ADVANCED_DEBUG=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM_USER=y +CONFIG_NET_KEY=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_MROUTE=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +CONFIG_SYN_COOKIES=y +CONFIG_INET_AH=y +CONFIG_INET_ESP=y +CONFIG_INET_IPCOMP=y +# CONFIG_INET_DIAG is not set +CONFIG_TCP_CONG_ADVANCED=y +# CONFIG_TCP_CONG_BIC is not set +# CONFIG_TCP_CONG_WESTWOOD is not set +# CONFIG_TCP_CONG_HTCP is not set +CONFIG_TCP_CONG_LP=y +CONFIG_TCP_MD5SIG=y +CONFIG_INET6_AH=y +CONFIG_INET6_ESP=y +# CONFIG_ANDROID_PARANOID_NETWORK is not set +CONFIG_NETWORK_SECMARK=y +CONFIG_NETFILTER=y +CONFIG_BRIDGE_NETFILTER=y +CONFIG_NF_CONNTRACK=y +CONFIG_NF_CT_NETLINK=y +CONFIG_NETFILTER_XT_MARK=y +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y +CONFIG_NETFILTER_XT_TARGET_DSCP=y +CONFIG_NETFILTER_XT_TARGET_NFLOG=y +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y +CONFIG_NETFILTER_XT_TARGET_SECMARK=y +CONFIG_NETFILTER_XT_TARGET_TCPMSS=y +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y +CONFIG_NETFILTER_XT_MATCH_DSCP=y +CONFIG_NETFILTER_XT_MATCH_OWNER=y +CONFIG_NETFILTER_XT_MATCH_POLICY=y +CONFIG_NETFILTER_XT_MATCH_STATE=y +CONFIG_IP_SET=y +CONFIG_IP_VS=y +CONFIG_NF_CONNTRACK_IPV4=y +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y +CONFIG_IP_NF_NAT=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IP_NF_TARGET_NETMAP=y +CONFIG_IP_NF_TARGET_REDIRECT=y +CONFIG_IP_NF_MANGLE=y +CONFIG_NF_CONNTRACK_IPV6=y +CONFIG_NF_NAT_IPV6=y +CONFIG_IP6_NF_IPTABLES=y +CONFIG_IP6_NF_MATCH_IPV6HEADER=y +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_TARGET_REJECT=y +CONFIG_IP6_NF_MANGLE=y +CONFIG_BRIDGE=y +CONFIG_VLAN_8021Q=y +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_HTB=y +CONFIG_NET_SCH_CODEL=y +CONFIG_NET_SCH_FQ_CODEL=y +CONFIG_NET_CLS_U32=y +CONFIG_CLS_U32_MARK=y +CONFIG_BT=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_HIDP=y +CONFIG_BT_HCIBTUSB=y +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIBFUSB=y +CONFIG_BT_HCIVHCI=y +CONFIG_BT_MRVL=y +CONFIG_BT_MRVL_SDIO=y +CONFIG_NL80211_TESTMODE=y +CONFIG_CFG80211_DEBUGFS=y +CONFIG_CFG80211_WEXT=y +CONFIG_MAC80211_LEDS=y +CONFIG_MAC80211_DEBUGFS=y +CONFIG_MAC80211_DEBUG_MENU=y +CONFIG_MAC80211_VERBOSE_DEBUG=y +CONFIG_RFKILL=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_DEBUG_DEVRES=y +CONFIG_CONNECTOR=y +CONFIG_ZRAM=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=1 +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_SR=y +CONFIG_SCSI_SPI_ATTRS=y +CONFIG_MD=y +CONFIG_BLK_DEV_DM=y +CONFIG_DM_CRYPT=y +CONFIG_DM_THIN_PROVISIONING=y +CONFIG_DM_VERITY=y +CONFIG_NETDEVICES=y +CONFIG_TUN=y +CONFIG_VETH=y +CONFIG_EMAC_ROCKCHIP=y +CONFIG_STMMAC_ETH=y +CONFIG_PPP=y +CONFIG_PPP_ASYNC=y +CONFIG_USB_PEGASUS=y +CONFIG_USB_RTL8150=y +CONFIG_USB_RTL8152=y +CONFIG_USB_NET_CDC_MBIM=y +CONFIG_USB_NET_DM9601=y +CONFIG_USB_NET_SMSC75XX=y +CONFIG_USB_NET_SMSC95XX=y +CONFIG_USB_NET_MCS7830=y +# CONFIG_USB_NET_CDC_SUBSET is not set +# CONFIG_USB_NET_ZAURUS is not set +CONFIG_LIBERTAS_THINFIRM=y +CONFIG_USB_NET_RNDIS_WLAN=y +CONFIG_HOSTAP=y +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_RT2X00=y +CONFIG_RT2800USB=y +CONFIG_WL_ROCKCHIP=y +CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP=y +CONFIG_AP6XXX=y +CONFIG_RTL8188EU=y +CONFIG_MWIFIEX=y +CONFIG_MWIFIEX_SDIO=y +# CONFIG_INPUT_MOUSEDEV is not set +CONFIG_INPUT_JOYDEV=y +CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_ADC=y +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_GPIO_POLLED=y +CONFIG_KEYBOARD_CROS_EC=y +# CONFIG_MOUSE_PS2 is not set +CONFIG_MOUSE_CYAPA=y +CONFIG_MOUSE_ELAN_I2C=y +CONFIG_INPUT_JOYSTICK=y +CONFIG_JOYSTICK_IFORCE=y +CONFIG_JOYSTICK_IFORCE_USB=y +CONFIG_JOYSTICK_XPAD=y +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +CONFIG_INPUT_TABLET=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ATMEL_MXT=y +CONFIG_TOUCHSCREEN_GSLX680_VR=y +CONFIG_TOUCHSCREEN_GSL3673=y +CONFIG_TOUCHSCREEN_GT9XX=y +CONFIG_TOUCHSCREEN_ELAN=y +CONFIG_TOUCHSCREEN_USB_COMPOSITE=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_UINPUT=y +CONFIG_SERIO_RAW=y +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_DEVKMEM is not set +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_DW=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_HW_RANDOM=y +CONFIG_TCG_TPM=y +CONFIG_TCG_TIS_I2C_INFINEON=y +CONFIG_I2C_CHARDEV=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_DEBUG_GPIO=y +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_GENERIC_PLATFORM=y +CONFIG_BATTERY_SBS=y +CONFIG_CHARGER_GPIO=y +CONFIG_CHARGER_BQ24735=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_GPIO_RESTART=y +CONFIG_SYSCON_REBOOT_MODE=y +CONFIG_POWER_AVS=y +CONFIG_ROCKCHIP_IODOMAIN=y +CONFIG_ROCKCHIP_CPU_AVS=y +CONFIG_THERMAL=y +CONFIG_CPU_THERMAL=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_ROCKCHIP_THERMAL=y +CONFIG_MFD_CROS_EC=y +CONFIG_MFD_CROS_EC_SPI=y +CONFIG_MFD_RK808=y +CONFIG_MFD_TPS6586X=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_ACT8865=y +CONFIG_REGULATOR_FAN53555=y +CONFIG_REGULATOR_PWM=y +CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_TPS6586X=y +CONFIG_MEDIA_SUPPORT=y +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_USB_SUPPORT=y +CONFIG_USB_VIDEO_CLASS=y +# CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV is not set +# CONFIG_USB_GSPCA is not set +CONFIG_V4L_MEM2MEM_DRIVERS=y +CONFIG_VIDEO_ROCKCHIP_VPU=y +CONFIG_V4L_TEST_DRIVERS=y +CONFIG_DRM=y +CONFIG_DRM_COMPONENTS_VGA_ENCODER=y +CONFIG_DRM_COMPONENTS_VGA_CONNECTOR=y +CONFIG_DRM_ROCKCHIP=y +CONFIG_ROCKCHIP_DRM_RGA=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_DRM_PANEL_SIMPLE=y +CONFIG_DRM_DW_HDMI_I2S_AUDIO=y +CONFIG_MALI_DEVFREQ=y +CONFIG_MALI_MIDGARD_FOR_LINUX=y +CONFIG_MALI_MIDGARD=y +CONFIG_MALI_EXPERT=y +CONFIG_MALI_PLATFORM_THIRDPARTY=y +CONFIG_MALI_PLATFORM_THIRDPARTY_NAME="rk" +CONFIG_FB_MODE_HELPERS=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_PWM=y +CONFIG_RK_VCODEC=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_SEQUENCER=y +CONFIG_SND_SEQ_DUMMY=y +CONFIG_SND_HRTIMER=y +CONFIG_SND_DYNAMIC_MINORS=y +# CONFIG_SND_ARM is not set +# CONFIG_SND_SPI is not set +CONFIG_SND_USB_AUDIO=y +CONFIG_SND_SOC=y +CONFIG_SND_SOC_ROCKCHIP=y +CONFIG_SND_SOC_ROCKCHIP_SPDIF=y +CONFIG_SND_SOC_ROCKCHIP_MAX98090=y +CONFIG_SND_SOC_ROCKCHIP_RT5645=y +CONFIG_SND_SOC_ES8323=y +CONFIG_SND_SOC_RT5616=y +CONFIG_SND_SOC_RT5640=y +CONFIG_SND_SOC_SPDIF=y +CONFIG_SND_SIMPLE_CARD=y +CONFIG_SOUND_PRIME=y +CONFIG_HID_BATTERY_STRENGTH=y +CONFIG_HIDRAW=y +CONFIG_UHID=y +CONFIG_HID_APPLE=y +CONFIG_HID_CHERRY=y +CONFIG_HID_KENSINGTON=y +CONFIG_HID_LOGITECH=y +CONFIG_HID_LOGITECH_DJ=y +CONFIG_HID_MAGICMOUSE=y +CONFIG_HID_MICROSOFT=y +CONFIG_HID_MULTITOUCH=y +CONFIG_HID_PLANTRONICS=y +CONFIG_HID_PRIMAX=y +CONFIG_HID_SONY=y +CONFIG_HID_RMI=y +CONFIG_HID_WIIMOTE=y +CONFIG_USB_HIDDEV=y +CONFIG_I2C_HID=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +# CONFIG_USB_DEFAULT_PERSIST is not set +CONFIG_USB_OTG=y +CONFIG_USB_MON=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_ACM=y +CONFIG_USB_STORAGE=y +CONFIG_USB_DWC2=y +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_CP210X=y +CONFIG_USB_SERIAL_FTDI_SIO=y +CONFIG_USB_SERIAL_KEYSPAN=y +CONFIG_USB_SERIAL_PL2303=y +CONFIG_USB_SERIAL_OTI6858=y +CONFIG_USB_SERIAL_QUALCOMM=y +CONFIG_USB_SERIAL_SIERRAWIRELESS=y +CONFIG_USB_SERIAL_OPTION=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_DEBUG_FILES=y +CONFIG_USB_GADGET_VBUS_DRAW=500 +CONFIG_USB_CONFIGFS=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_CONFIGFS_UEVENT=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK_MINORS=16 +CONFIG_MMC_TEST=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_DW=y +CONFIG_MMC_DW_ROCKCHIP=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_HYM8563=y +CONFIG_RTC_DRV_RK808=y +CONFIG_DMADEVICES=y +CONFIG_PL330_DMA=y +CONFIG_STAGING=y +CONFIG_SENSORS_ISL29018=y +CONFIG_TSL2583=y +CONFIG_ASHMEM=y +# CONFIG_ANDROID_TIMED_OUTPUT is not set +CONFIG_COMMON_CLK_RK808=y +CONFIG_ROCKCHIP_IOMMU=y +CONFIG_ROCKCHIP_PM_DOMAINS=y +CONFIG_PM_DEVFREQ=y +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +CONFIG_MEMORY=y +CONFIG_IIO=y +CONFIG_IIO_BUFFER=y +CONFIG_IIO_KFIFO_BUF=y +CONFIG_IIO_TRIGGER=y +CONFIG_ROCKCHIP_SARADC=y +CONFIG_SENSORS_TSL2563=y +CONFIG_IIO_SYSFS_TRIGGER=y +CONFIG_PWM=y +CONFIG_PWM_ROCKCHIP=y +CONFIG_PHY_ROCKCHIP_USB=y +CONFIG_PHY_ROCKCHIP_DP=y +CONFIG_ANDROID=y +CONFIG_NVMEM=y +CONFIG_ROCKCHIP_EFUSE=y +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_DNOTIFY is not set +CONFIG_FUSE_FS=y +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=y +CONFIG_VFAT_FS=y +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_PSTORE_RAM=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +CONFIG_NFS_SWAP=y +CONFIG_NFSD=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +CONFIG_PRINTK_TIME=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0 +CONFIG_LOCKUP_DETECTOR=y +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y +CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y +CONFIG_SCHEDSTATS=y +CONFIG_TIMER_STATS=y +CONFIG_DEBUG_SPINLOCK=y +CONFIG_DEBUG_CREDENTIALS=y +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +CONFIG_FUNCTION_TRACER=y +CONFIG_BLK_DEV_IO_TRACE=y +CONFIG_LKDTM=y +CONFIG_TEST_UDELAY=y +CONFIG_STRICT_DEVMEM=y +CONFIG_DEBUG_SET_MODULE_RONX=y +CONFIG_SECURITY=y +CONFIG_SECURITY_NETWORK=y +CONFIG_SECURITY_PATH=y +CONFIG_SECURITY_YAMA=y +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_USER_API_HASH=y +CONFIG_CRYPTO_USER_API_SKCIPHER=y +CONFIG_ASYMMETRIC_KEY_TYPE=y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_X509_CERTIFICATE_PARSER=y +CONFIG_PKCS7_MESSAGE_PARSER=y +CONFIG_SYSTEM_TRUSTED_KEYRING=y +CONFIG_CRC_T10DIF=y +CONFIG_CRC7=y +# CONFIG_XZ_DEC_X86 is not set +# CONFIG_XZ_DEC_POWERPC is not set +# CONFIG_XZ_DEC_IA64 is not set +# CONFIG_XZ_DEC_SPARC is not set diff --git a/arch/arm/mach-rockchip/rockchip.c b/arch/arm/mach-rockchip/rockchip.c index 8473b26a9bd6..7fbecd0f2d3d 100644 --- a/arch/arm/mach-rockchip/rockchip.c +++ b/arch/arm/mach-rockchip/rockchip.c @@ -37,6 +37,24 @@ static void __init rockchip_timer_init(void) { if (of_machine_is_compatible("rockchip,rk3288")) { struct regmap *grf; + void __iomem *reg_base; + + /* + * Most/all uboot versions for rk3288 don't enable timer7 + * which is needed for the architected timer to work. + * So make sure it is running during early boot. + */ + reg_base = ioremap(RK3288_TIMER6_7_PHYS, SZ_16K); + if (reg_base) { + writel(0, reg_base + 0x30); + writel(0xffffffff, reg_base + 0x20); + writel(0xffffffff, reg_base + 0x24); + writel(1, reg_base + 0x30); + dsb(); + iounmap(reg_base); + } else { + pr_err("rockchip: could not map timer7 registers\n"); + } /* * Disable auto jtag/sdmmc switching that causes issues diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-edp.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-edp.dts new file mode 100755 index 000000000000..a627db1edcde --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-edp.dts @@ -0,0 +1,1092 @@ +/* + * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd + * + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole. + * + * a) This file is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Or, alternatively, + * + * b) Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/dts-v1/; + +#include "dt-bindings/pwm/pwm.h" +#include "rk3399.dtsi" +#include "rk3399-opp.dtsi" +#include "rk3399-linux.dtsi" +#include + +/ { + model = "Rockchip RK3399 Firefly Board (Linux Opensource)"; + compatible = "rockchip,rk3399-firefly-linux", "rockchip,rk3399"; + + backlight: backlight { + status = "okay"; + compatible = "pwm-backlight"; + pwms = <&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 { + compatible = "sharp,lcd-f402", "panel-simple"; + backlight = <&backlight>; + power-supply = <&vcc_lcd>; + enable-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&lcd_panel_reset>; + + ports { + panel_in_edp: endpoint { + remote-endpoint = <&edp_out_panel>; + }; + }; + }; + + fiq_debugger: fiq-debugger { + compatible = "rockchip,fiq-debugger"; + rockchip,serial-id = <2>; + rockchip,signal-irq = <182>; + rockchip,wake-irq = <0>; + rockchip,irq-mode-enable = <1>; /* If enable uart uses irq instead of fiq */ + rockchip,baudrate = <1500000>; /* Only 115200 and 1500000 */ + pinctrl-names = "default"; + pinctrl-0 = <&uart2c_xfer>; + }; + + gpio-keys { + compatible = "gpio-keys"; + #address-cells = <1>; + #size-cells = <0>; + autorepeat; + + pinctrl-names = "default"; + pinctrl-0 = <&pwrbtn>; + + button@0 { + gpios = <&gpio0 5 GPIO_ACTIVE_LOW>; + linux,code = ; + label = "GPIO Key Power"; + linux,input-type = <1>; + gpio-key,wakeup = <1>; + debounce-interval = <100>; + }; + }; + + rt5640-sound { + compatible = "simple-audio-card"; + simple-audio-card,format = "i2s"; + simple-audio-card,name = "rockchip,rt5640-codec"; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,widgets = + "Microphone", "Mic Jack", + "Headphone", "Headphone Jack"; + simple-audio-card,routing = + "Mic Jack", "MICBIAS1", + "IN1P", "Mic Jack", + "Headphone Jack", "HPOL", + "Headphone Jack", "HPOR"; + simple-audio-card,cpu { + sound-dai = <&i2s1>; + }; + simple-audio-card,codec { + sound-dai = <&rt5640>; + }; + }; + + hdmi_sound: hdmi-sound { + status = "disabled"; + compatible = "simple-audio-card"; + simple-audio-card,format = "i2s"; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,name = "rockchip,hdmi"; + + simple-audio-card,cpu { + sound-dai = <&i2s2>; + }; + simple-audio-card,codec { + sound-dai = <&dw_hdmi_audio>; + }; + }; + + hdmi_codec: hdmi-codec { + compatible = "simple-audio-card"; + simple-audio-card,format = "i2s"; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,name = "HDMI-CODEC"; + + simple-audio-card,cpu { + sound-dai = <&i2s2>; + }; + + simple-audio-card,codec { + sound-dai = <&hdmi>; + }; + }; + + spdif-sound { + status = "okay"; + compatible = "simple-audio-card"; + simple-audio-card,name = "ROCKCHIP,SPDIF"; + simple-audio-card,cpu { + sound-dai = <&spdif>; + }; + simple-audio-card,codec { + sound-dai = <&spdif_out>; + }; + }; + + spdif_out: spdif-out { + status = "okay"; + compatible = "linux,spdif-dit"; + #sound-dai-cells = <0>; + }; + + sdio_pwrseq: sdio-pwrseq { + compatible = "mmc-pwrseq-simple"; + clocks = <&rk808 1>; + clock-names = "ext_clock"; + pinctrl-names = "default"; + pinctrl-0 = <&wifi_enable_h>; + + /* + * On the module itself this is one of these (depending + * on the actual card populated): + * - SDIO_RESET_L_WL_REG_ON + * - PDN (power down when low) + */ + reset-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; /* GPIO0_B2 */ + }; + + vcc3v3_pcie: vcc3v3-pcie-regulator { + compatible = "regulator-fixed"; + enable-active-high; + regulator-always-on; + regulator-boot-on; + gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&pcie_drv>; + regulator-name = "vcc3v3_pcie"; + }; + + vcc3v3_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 = "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>; + }; + }; +}; + +&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 = <0x11>; + status = "okay"; +}; + +&gpu { + status = "okay"; + mali-supply = <&vdd_gpu>; +}; + +&hdmi { + #address-cells = <1>; + #size-cells = <0>; + #sound-dai-cells = <0>; + ddc-i2c-bus = <&i2c3>; + 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@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{ + 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 = <&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"; +}; + +&pwm2 { + status = "okay"; +}; + +&rkvdec { + status = "okay"; +}; + +&rockchip_suspend { + rockchip,power-ctrl = + <&gpio1 18 GPIO_ACTIVE_LOW>, + <&gpio1 14 GPIO_ACTIVE_HIGH>; +}; + +&route_edp { + status = "okay"; +}; + +&route_hdmi { + status = "okay"; + logo,mode = "center"; +}; + +&saradc { + status = "okay"; + vref-supply = <&vccadc_ref>; +}; + +&sdhci { + bus-width = <8>; + keep-power-in-suspend; + mmc-hs400-1_8v; + mmc-hs400-enhanced-strobe; + non-removable; + status = "okay"; + supports-emmc; +}; + +&sdmmc { + max-frequency = <150000000>; + supports-sd; + bus-width = <4>; + cap-mmc-highspeed; + cap-sd-highspeed; + disable-wp; + num-slots = <1>; + vqmmc-supply = <&vcc_sd>; + pinctrl-names = "default"; + pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; + status = "okay"; +}; + +&sdio0 { + max-frequency = <50000000>; + supports-sdio; + bus-width = <4>; + disable-wp; + cap-sd-highspeed; + keep-power-in-suspend; + mmc-pwrseq = <&sdio_pwrseq>; + non-removable; + num-slots = <1>; + pinctrl-names = "default"; + pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>; + sd-uhs-sdr104; + status = "okay"; +}; + +&spdif { + status = "okay"; + pinctrl-0 = <&spdif_bus_1>; + i2c-scl-rising-time-ns = <450>; + i2c-scl-falling-time-ns = <15>; + #sound-dai-cells = <0>; +}; + +&tcphy0 { + extcon = <&fusb0>; + status = "okay"; +}; + +&tcphy1 { + status = "okay"; +}; + +&tsadc { + /* tshut mode 0:CRU 1:GPIO */ + rockchip,hw-tshut-mode = <1>; + /* tshut polarity 0:LOW 1:HIGH */ + rockchip,hw-tshut-polarity = <1>; + status = "okay"; +}; + +&u2phy0 { + status = "okay"; + extcon = <&fusb0>; + + u2phy0_otg: otg-port { + status = "okay"; + }; + + u2phy0_host: host-port { + phy-supply = <&vcc5v0_host>; + status = "okay"; + }; +}; + +&u2phy1 { + status = "okay"; + + u2phy1_otg: otg-port { + status = "okay"; + }; + + u2phy1_host: host-port { + phy-supply = <&vcc5v0_host>; + status = "okay"; + }; +}; + +&pwm3 { + status = "okay"; + interrupts = ; + compatible = "rockchip,remotectl-pwm"; + remote_pwm_id = <3>; + handle_cpu_id = <0>; + + ir_key1{ + rockchip,usercode = <0xff00>; + rockchip,key_table = + <0xeb KEY_POWER>, + <0xec KEY_COMPOSE>, + <0xfe KEY_BACK>, + <0xb7 KEY_HOME>, + <0xa3 KEY_WWW>, + <0xf4 KEY_VOLUMEUP>, + <0xa7 KEY_VOLUMEDOWN>, + <0xf8 KEY_ENTER>, + <0xfc KEY_UP>, + <0xfd KEY_DOWN>, + <0xf1 KEY_LEFT>, + <0xe5 KEY_RIGHT>; + }; +}; + +&uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_xfer &uart0_cts>; + status = "okay"; +}; + +&uart2 { + status = "okay"; +}; + +&usbdrd3_0 { + status = "okay"; + extcon = <&fusb0>; +}; + +&usbdrd3_1 { + status = "okay"; +}; + +&usbdrd_dwc3_0 { + status = "okay"; +}; + +&usbdrd_dwc3_1 { + status = "okay"; + dr_mode = "host"; +}; + +&usb_host0_ehci { + status = "okay"; +}; + +&usb_host0_ohci { + status = "okay"; +}; + +&usb_host1_ehci { + status = "okay"; +}; + +&usb_host1_ohci { + status = "okay"; +}; + +&vopb { + status = "okay"; +}; + +&vopb_mmu { + status = "okay"; +}; + +&vopl { + status = "okay"; +}; + +&vopl_mmu { + status = "okay"; +}; + +&vpu { + status = "okay"; + /* 0 means ion, 1 means drm */ + //allocator = <0>; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts index 740a5fbf7f2c..6672571c2c6b 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts @@ -247,6 +247,17 @@ 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"; @@ -328,6 +339,8 @@ 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>; @@ -338,6 +351,26 @@ 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>; + }; + }; }; &cpu_l0 { @@ -401,7 +434,7 @@ pinctrl-names = "default"; pinctrl-0 = <&rgmii_pins>; tx_delay = <0x28>; - rx_delay = <0x11>; + rx_delay = <0x1B>; status = "okay"; }; @@ -673,8 +706,8 @@ &i2c4 { status = "okay"; - i2c-scl-rising-time-ns = <600>; - i2c-scl-falling-time-ns = <20>; + i2c-scl-rising-time-ns = <475>; + i2c-scl-falling-time-ns = <26>; fusb0: fusb30x@22 { compatible = "fairchild,fusb302"; @@ -682,33 +715,33 @@ pinctrl-names = "default"; pinctrl-0 = <&fusb0_int>; int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; - vbus-5v-gpios = <&gpio2 0 GPIO_ACTIVE_HIGH>; + vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>; status = "okay"; }; - gsl3680: gsl3680@41 { - status = "disabled"; - 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>; - }; + gsl3680: gsl3680@41 { + status = "disabled"; + 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 { @@ -779,11 +812,12 @@ pcie_drv: pcie-drv { rockchip,pins = <1 17 RK_FUNC_GPIO &pcfg_pull_none>; - }; - pcie_3g_drv: pcie-3g-drv { - rockchip,pins = + }; + pcie_3g_drv: pcie-3g-drv { + rockchip,pins = <0 2 RK_FUNC_GPIO &pcfg_pull_up>; }; + }; pmic { @@ -812,6 +846,16 @@ }; }; + 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>; @@ -866,6 +910,21 @@ status = "disabled"; }; +&route_hdmi { + status = "okay"; + logo,mode = "center"; +}; + +&cdn_dp { + status = "okay"; + extcon = <&fusb0>; + phys = <&tcphy0_dp>; +}; + +&dp_in_vopb { + status = "disabled"; +}; + &saradc { status = "okay"; vref-supply = <&vccadc_ref>; @@ -963,6 +1022,31 @@ }; }; +&pwm3 { + status = "okay"; + interrupts = ; + compatible = "rockchip,remotectl-pwm"; + remote_pwm_id = <3>; + handle_cpu_id = <0>; + + ir_key1{ + rockchip,usercode = <0xff00>; + rockchip,key_table = + <0xeb KEY_POWER>, + <0xec KEY_COMPOSE>, + <0xfe KEY_BACK>, + <0xb7 KEY_HOME>, + <0xa3 KEY_WWW>, + <0xf4 KEY_VOLUMEUP>, + <0xa7 KEY_VOLUMEDOWN>, + <0xf8 KEY_ENTER>, + <0xfc KEY_UP>, + <0xfd KEY_DOWN>, + <0xf1 KEY_LEFT>, + <0xe5 KEY_RIGHT>; + }; +}; + &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_xfer &uart0_cts>; @@ -1025,4 +1109,6 @@ &vpu { status = "okay"; + /* 0 means ion, 1 means drm */ + //allocator = <0>; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux.dts new file mode 100644 index 000000000000..44d517d4ddc3 --- /dev/null +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux.dts @@ -0,0 +1,1129 @@ +/* + * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd + * + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole. + * + * a) This file is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Or, alternatively, + * + * b) Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/dts-v1/; + +#include "dt-bindings/pwm/pwm.h" +#include "rk3399.dtsi" +#include "rk3399-opp.dtsi" +#include "rk3399-linux.dtsi" +#include + +/ { + model = "Rockchip RK3399 Firefly Board (Linux Opensource)"; + compatible = "rockchip,rk3399-firefly-mini-linux", "rockchip,rk3399"; + + backlight: backlight { + status = "disabled"; + 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 = "disabled"; + compatible = "sharp,lcd-f402", "panel-simple"; + backlight = <&backlight>; + power-supply = <&vcc_lcd>; + enable-gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>; + pinctrl-names = "default"; + pinctrl-0 = <&lcd_panel_reset>; + + ports { + panel_in_edp: endpoint { + remote-endpoint = <&edp_out_panel>; + }; + }; + }; + + fiq_debugger: fiq-debugger { + compatible = "rockchip,fiq-debugger"; + rockchip,serial-id = <2>; + rockchip,signal-irq = <182>; + rockchip,wake-irq = <0>; + rockchip,irq-mode-enable = <1>; /* If enable uart uses irq instead of fiq */ + rockchip,baudrate = <1500000>; /* Only 115200 and 1500000 */ + pinctrl-names = "default"; + pinctrl-0 = <&uart2c_xfer>; + }; + + gpio-keys { + compatible = "gpio-keys"; + #address-cells = <1>; + #size-cells = <0>; + autorepeat; + + pinctrl-names = "default"; + pinctrl-0 = <&pwrbtn>; + + button@0 { + gpios = <&gpio0 5 GPIO_ACTIVE_LOW>; + linux,code = ; + label = "GPIO Key Power"; + linux,input-type = <1>; + gpio-key,wakeup = <1>; + debounce-interval = <100>; + }; + }; + + rt5640-sound { + status = "disabled"; + compatible = "simple-audio-card"; + simple-audio-card,format = "i2s"; + simple-audio-card,name = "rockchip,rt5640-codec"; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,widgets = + "Microphone", "Mic Jack", + "Headphone", "Headphone Jack"; + simple-audio-card,routing = + "Mic Jack", "MICBIAS1", + "IN1P", "Mic Jack", + "Headphone Jack", "HPOL", + "Headphone Jack", "HPOR"; + simple-audio-card,cpu { + sound-dai = <&i2s1>; + }; + simple-audio-card,codec { + sound-dai = <&rt5640>; + }; + }; + + es8323-sound { + compatible = "simple-audio-card"; + simple-audio-card,format = "i2s"; + simple-audio-card,name = "rockchip,es8323-codec"; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,widgets = + "Microphone","Mic Jack", + "Headphone","Headphone Jack"; + simple-audio-card,routing = + "Mic Jack","MICBIAS1", + "IN1P","Mic Jack", + "Headphone Jack","HPOL", + "Headphone Jack","HPOR"; + simple-audio-card,cpu { + sound-dai = <&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 = "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 = "okay"; + }; + + gsl3680: gsl3680@41 { + status = "disabled"; + compatible = "gslX680-pad"; + reg = <0x41>; + screen_max_x = <1536>; + screen_max_y = <2048>; + touch-gpio = <&gpio1 20 IRQ_TYPE_LEVEL_LOW>; + reset-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>; + }; + + mpu6050:mpu@68{ + status = "disabled"; + compatible = "invensense,mpu6050"; + reg = <0x68>; + mpu-int_config = <0x10>; + mpu-level_shifter = <0>; + mpu-orientation = <0 1 0 1 0 0 0 0 1>; + orientation-x= <1>; + orientation-y= <1>; + orientation-z= <1>; + irq-gpio = <&gpio1 4 IRQ_TYPE_LEVEL_LOW>; + mpu-debug = <1>; + }; +}; + +&i2s0 { + status = "okay"; + rockchip,i2s-broken-burst-len; + rockchip,playback-channels = <8>; + rockchip,capture-channels = <8>; + #sound-dai-cells = <0>; +}; + +&i2s1 { + status = "okay"; + rockchip,i2s-broken-burst-len; + rockchip,playback-channels = <2>; + rockchip,capture-channels = <2>; + #sound-dai-cells = <0>; +}; + +&i2s2 { + + #sound-dai-cells = <0>; + status = "okay"; +}; + +&io_domains { + status = "okay"; + + bt656-supply = <&vcc_3v0>; /* bt656_gpio2ab_ms */ + audio-supply = <&vcca1v8_codec>; /* audio_gpio3d4a_ms */ + sdmmc-supply = <&vcc_sd>; /* sdmmc_gpio4b_ms */ + gpio1830-supply = <&vcc_3v0>; /* gpio1833_gpio4cd_ms */ +}; + +&pcie_phy { + status = "okay"; +}; + +&pcie0 { + ep-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>; + num-lanes = <4>; + pinctrl-names = "default"; + pinctrl-0 = <&pcie_clkreqn_cpm>; + status = "okay"; +}; + +&pmu_io_domains { + status = "okay"; + pmu1830-supply = <&vcc_3v0>; +}; + +&pinctrl { + buttons { + pwrbtn: pwrbtn { + rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; + + lcd-panel { + lcd_panel_reset: lcd-panel-reset { + rockchip,pins = <4 29 RK_FUNC_GPIO &pcfg_pull_up>; + }; + + lcd_en: lcd-en { + rockchip,pins = <1 1 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; + + pcie { + pcie_drv: pcie-drv { + rockchip,pins = + <1 17 RK_FUNC_GPIO &pcfg_pull_none>; + }; + pcie_3g_drv: pcie-3g-drv { + rockchip,pins = + <0 2 RK_FUNC_GPIO &pcfg_pull_up>; + }; + + }; + + pmic { + vsel1_gpio: vsel1-gpio { + rockchip,pins = + <1 18 RK_FUNC_GPIO &pcfg_pull_down>; + }; + + vsel2_gpio: vsel2-gpio { + rockchip,pins = + <1 14 RK_FUNC_GPIO &pcfg_pull_down>; + }; + }; + + sdio-pwrseq { + wifi_enable_h: wifi-enable-h { + rockchip,pins = + <0 10 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + + wireless-bluetooth { + uart0_gpios: uart0-gpios { + rockchip,pins = + <2 19 RK_FUNC_GPIO &pcfg_pull_none>, + <0 9 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; + + leds { + led_power: led-power { + rockchip,pins = <2 27 RK_FUNC_GPIO &pcfg_pull_none>; + }; + + led_user: led-user { + rockchip,pins = <0 13 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + + rt5640 { + rt5640_hpcon: rt5640-hpcon { + rockchip,pins = <4 21 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + + es8223 { + es8323_hpdet: es8323-hpdet { + rockchip,pins = <0 11 RK_FUNC_GPIO &pcfg_pull_up>; + }; + es8323_earcon: es8323-earcon { + rockchip,pins = <0 12 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + + pmic { + pmic_int_l: pmic-int-l { + rockchip,pins = + <1 21 RK_FUNC_GPIO &pcfg_pull_up>; + }; + + pmic_dvs2: pmic-dvs2 { + rockchip,pins = + <1 18 RK_FUNC_GPIO &pcfg_pull_down>; + }; + + }; + + usb2 { + host_vbus_drv: host-vbus-drv { + rockchip,pins = + <1 0 RK_FUNC_GPIO &pcfg_pull_none>; + }; + }; + + + fusb30x { + fusb0_int: fusb0-int { + rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; +}; + +&pwm0 { + status = "okay"; +}; + +&pwm2 { + status = "okay"; +}; + +&rkvdec { + status = "okay"; +}; + +&rockchip_suspend { + rockchip,power-ctrl = + <&gpio1 18 GPIO_ACTIVE_LOW>, + <&gpio1 14 GPIO_ACTIVE_HIGH>; +}; + +&route_edp { + status = "disabled"; +}; + +&route_hdmi { + status = "okay"; + logo,mode = "center"; +}; + +&cdn_dp { + status = "disabled"; + extcon = <&fusb0>; + phys = <&tcphy0_dp>; +}; + +&dp_in_vopb { + status = "disabled"; +}; + +&saradc { + status = "okay"; + vref-supply = <&vccadc_ref>; +}; + +&sdhci { + bus-width = <8>; + keep-power-in-suspend; + mmc-hs400-1_8v; + mmc-hs400-enhanced-strobe; + non-removable; + status = "okay"; + supports-emmc; +}; + +&sdmmc { + max-frequency = <150000000>; + supports-sd; + bus-width = <4>; + cap-mmc-highspeed; + cap-sd-highspeed; + disable-wp; + num-slots = <1>; + vqmmc-supply = <&vcc_sd>; + pinctrl-names = "default"; + pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; + status = "okay"; +}; + +&sdio0 { + max-frequency = <50000000>; + supports-sdio; + bus-width = <4>; + disable-wp; + cap-sd-highspeed; + keep-power-in-suspend; + mmc-pwrseq = <&sdio_pwrseq>; + non-removable; + num-slots = <1>; + pinctrl-names = "default"; + pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>; + sd-uhs-sdr104; + status = "okay"; +}; + +&tcphy0 { + extcon = <&fusb0>; + status = "okay"; +}; + +&tcphy1 { + status = "okay"; +}; + +&tsadc { + /* tshut mode 0:CRU 1:GPIO */ + rockchip,hw-tshut-mode = <1>; + /* tshut polarity 0:LOW 1:HIGH */ + rockchip,hw-tshut-polarity = <1>; + status = "okay"; +}; + +&u2phy0 { + status = "okay"; + extcon = <&fusb0>; + + u2phy0_otg: otg-port { + status = "okay"; + }; + + u2phy0_host: host-port { + phy-supply = <&vcc5v0_host>; + status = "okay"; + }; +}; + +&u2phy1 { + status = "okay"; + + u2phy1_otg: otg-port { + status = "okay"; + }; + + u2phy1_host: host-port { + phy-supply = <&vcc5v0_host>; + status = "okay"; + }; +}; + +&pwm3 { + status = "okay"; + interrupts = ; + compatible = "rockchip,remotectl-pwm"; + remote_pwm_id = <3>; + handle_cpu_id = <0>; + + ir_key1{ + rockchip,usercode = <0xff00>; + rockchip,key_table = + <0xeb KEY_POWER>, + <0xec KEY_COMPOSE>, + <0xfe KEY_BACK>, + <0xb7 KEY_HOME>, + <0xa3 KEY_WWW>, + <0xf4 KEY_VOLUMEUP>, + <0xa7 KEY_VOLUMEDOWN>, + <0xf8 KEY_ENTER>, + <0xfc KEY_UP>, + <0xfd KEY_DOWN>, + <0xf1 KEY_LEFT>, + <0xe5 KEY_RIGHT>; + }; +}; + +&uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_xfer &uart0_cts>; + status = "okay"; +}; + +&uart2 { + status = "okay"; +}; + +&usbdrd3_0 { + status = "okay"; + extcon = <&fusb0>; +}; + +&usbdrd3_1 { + status = "okay"; +}; + +&usbdrd_dwc3_0 { + status = "okay"; +}; + +&usbdrd_dwc3_1 { + status = "okay"; + dr_mode = "host"; +}; + +&usb_host0_ehci { + status = "okay"; +}; + +&usb_host0_ohci { + status = "okay"; +}; + +&usb_host1_ehci { + status = "okay"; +}; + +&usb_host1_ohci { + status = "okay"; +}; + +&vopb { + status = "okay"; +}; + +&vopb_mmu { + status = "okay"; +}; + +&vopl { + status = "okay"; +}; + +&vopl_mmu { + status = "okay"; +}; + +&vpu { + status = "okay"; + /* 0 means ion, 1 means drm */ + //allocator = <0>; +}; diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi index 563b481c43c1..3acdcc3fb4a4 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi @@ -227,6 +227,12 @@ method = "smc"; }; + cpuinfo { + compatible = "rockchip,cpuinfo"; + nvmem-cells = <&efuse_id>; + nvmem-cell-names = "id"; + }; + timer { compatible = "arm,armv8-timer"; interrupts = , diff --git a/arch/arm64/configs/firefly_linux_defconfig b/arch/arm64/configs/firefly_linux_defconfig new file mode 100644 index 000000000000..2662a70c4be4 --- /dev/null +++ b/arch/arm64/configs/firefly_linux_defconfig @@ -0,0 +1,541 @@ +CONFIG_DEFAULT_HOSTNAME="localhost" +CONFIG_SYSVIPC=y +CONFIG_FHANDLE=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_CGROUPS=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CPUSETS=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_SCHED=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_NAMESPACES=y +CONFIG_USER_NS=y +CONFIG_DEFAULT_USE_ENERGY_AWARE=y +CONFIG_BLK_DEV_INITRD=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_LZO is not set +# CONFIG_RD_LZ4 is not set +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_EMBEDDED=y +# CONFIG_COMPAT_BRK is not set +CONFIG_PROFILING=y +CONFIG_MODULES=y +CONFIG_MODULE_FORCE_LOAD=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_MAC_PARTITION=y +CONFIG_ARCH_ROCKCHIP=y +CONFIG_PCI=y +CONFIG_PCI_MSI=y +CONFIG_PCIE_ROCKCHIP=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCIE_ECRC=y +CONFIG_PCIEAER_INJECT=y +CONFIG_PCIEASPM_DEBUG=y +CONFIG_PCIEASPM_POWERSAVE=y +# CONFIG_ARM64_ERRATUM_826319 is not set +# CONFIG_ARM64_ERRATUM_827319 is not set +# CONFIG_ARM64_ERRATUM_824069 is not set +# CONFIG_ARM64_ERRATUM_819472 is not set +# CONFIG_ARM64_ERRATUM_832075 is not set +# CONFIG_CAVIUM_ERRATUM_22375 is not set +# CONFIG_CAVIUM_ERRATUM_23154 is not set +CONFIG_SCHED_MC=y +CONFIG_NR_CPUS=8 +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_HZ_1000=y +# CONFIG_COMPACTION is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 +CONFIG_ZSMALLOC=y +CONFIG_SECCOMP=y +CONFIG_ARMV8_DEPRECATED=y +CONFIG_SWP_EMULATION=y +CONFIG_CP15_BARRIER_EMULATION=y +CONFIG_SETEND_EMULATION=y +# CONFIG_EFI is not set +CONFIG_COMPAT=y +CONFIG_PM_DEBUG=y +CONFIG_PM_ADVANCED_DEBUG=y +CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +CONFIG_ARM_CPUIDLE=y +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPUFREQ_DT=y +CONFIG_ARM_ROCKCHIP_CPUFREQ=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM_USER=y +CONFIG_NET_KEY=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_MROUTE=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +CONFIG_SYN_COOKIES=y +CONFIG_INET_AH=y +CONFIG_INET_ESP=y +CONFIG_INET_IPCOMP=y +# CONFIG_INET_DIAG is not set +CONFIG_TCP_CONG_ADVANCED=y +# CONFIG_TCP_CONG_BIC is not set +# CONFIG_TCP_CONG_WESTWOOD is not set +# CONFIG_TCP_CONG_HTCP is not set +CONFIG_TCP_CONG_LP=y +CONFIG_TCP_MD5SIG=y +CONFIG_INET6_AH=y +CONFIG_INET6_ESP=y +# CONFIG_ANDROID_PARANOID_NETWORK is not set +CONFIG_NETWORK_SECMARK=y +CONFIG_NETFILTER=y +CONFIG_BRIDGE_NETFILTER=y +CONFIG_NF_CONNTRACK=y +CONFIG_NF_CT_NETLINK=y +CONFIG_NETFILTER_XT_MARK=y +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y +CONFIG_NETFILTER_XT_TARGET_DSCP=y +CONFIG_NETFILTER_XT_TARGET_NFLOG=y +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y +CONFIG_NETFILTER_XT_TARGET_SECMARK=y +CONFIG_NETFILTER_XT_TARGET_TCPMSS=y +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y +CONFIG_NETFILTER_XT_MATCH_DSCP=y +CONFIG_NETFILTER_XT_MATCH_OWNER=y +CONFIG_NETFILTER_XT_MATCH_POLICY=y +CONFIG_NETFILTER_XT_MATCH_STATE=y +CONFIG_IP_SET=y +CONFIG_IP_VS=y +CONFIG_NF_CONNTRACK_IPV4=y +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y +CONFIG_IP_NF_NAT=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IP_NF_TARGET_NETMAP=y +CONFIG_IP_NF_TARGET_REDIRECT=y +CONFIG_IP_NF_MANGLE=y +CONFIG_NF_CONNTRACK_IPV6=y +CONFIG_NF_NAT_IPV6=y +CONFIG_IP6_NF_IPTABLES=y +CONFIG_IP6_NF_MATCH_IPV6HEADER=y +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_TARGET_REJECT=y +CONFIG_IP6_NF_MANGLE=y +CONFIG_BRIDGE=y +CONFIG_VLAN_8021Q=y +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_HTB=y +CONFIG_NET_SCH_CODEL=y +CONFIG_NET_SCH_FQ_CODEL=y +CONFIG_NET_CLS_U32=y +CONFIG_CLS_U32_MARK=y +CONFIG_BT=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_HIDP=y +CONFIG_BT_HCIBTUSB=y +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIBFUSB=y +CONFIG_BT_HCIVHCI=y +CONFIG_BT_MRVL=y +CONFIG_BT_MRVL_SDIO=y +CONFIG_NL80211_TESTMODE=y +CONFIG_CFG80211_DEBUGFS=y +CONFIG_CFG80211_WEXT=y +CONFIG_MAC80211_LEDS=y +CONFIG_MAC80211_DEBUGFS=y +CONFIG_MAC80211_DEBUG_MENU=y +CONFIG_MAC80211_VERBOSE_DEBUG=y +CONFIG_RFKILL=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_DEBUG_DEVRES=y +CONFIG_CONNECTOR=y +CONFIG_ZRAM=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=1 +CONFIG_BLK_DEV_NVME=y +CONFIG_ROCKCHIP_SCR=y +CONFIG_SRAM=y +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_SR=y +CONFIG_SCSI_SPI_ATTRS=y +CONFIG_MD=y +CONFIG_BLK_DEV_DM=y +CONFIG_DM_CRYPT=y +CONFIG_DM_THIN_PROVISIONING=y +CONFIG_DM_VERITY=y +CONFIG_NETDEVICES=y +CONFIG_TUN=y +CONFIG_VETH=y +CONFIG_EMAC_ROCKCHIP=y +CONFIG_STMMAC_ETH=y +CONFIG_PPP=y +CONFIG_PPP_ASYNC=y +CONFIG_USB_PEGASUS=y +CONFIG_USB_RTL8150=y +CONFIG_USB_RTL8152=y +CONFIG_USB_NET_CDC_MBIM=y +CONFIG_USB_NET_DM9601=y +CONFIG_USB_NET_SMSC75XX=y +CONFIG_USB_NET_SMSC95XX=y +CONFIG_USB_NET_MCS7830=y +# CONFIG_USB_NET_CDC_SUBSET is not set +# CONFIG_USB_NET_ZAURUS is not set +CONFIG_USB_NET_QMI_WWAN=y +CONFIG_LIBERTAS_THINFIRM=y +CONFIG_USB_NET_RNDIS_WLAN=y +CONFIG_HOSTAP=y +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_WL_ROCKCHIP=y +CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP=y +CONFIG_AP6XXX=y +CONFIG_RTL8188EU=y +CONFIG_MWIFIEX=y +CONFIG_MWIFIEX_SDIO=y +# CONFIG_INPUT_MOUSEDEV is not set +CONFIG_INPUT_JOYDEV=y +CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_ADC=y +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_GPIO_POLLED=y +CONFIG_KEYBOARD_ROCKCHIP=y +CONFIG_KEYBOARD_CROS_EC=y +# CONFIG_MOUSE_PS2 is not set +CONFIG_MOUSE_CYAPA=y +CONFIG_MOUSE_ELAN_I2C=y +CONFIG_INPUT_JOYSTICK=y +CONFIG_JOYSTICK_IFORCE=y +CONFIG_JOYSTICK_IFORCE_USB=y +CONFIG_JOYSTICK_XPAD=y +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +CONFIG_INPUT_TABLET=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ATMEL_MXT=y +CONFIG_TOUCHSCREEN_GSLX680_VR=y +CONFIG_TOUCHSCREEN_GSL3673=y +CONFIG_TOUCHSCREEN_GT9XX=y +CONFIG_TOUCHSCREEN_ELAN=y +CONFIG_TOUCHSCREEN_USB_COMPOSITE=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_UINPUT=y +CONFIG_INPUT_GPIO=y +CONFIG_SERIO_RAW=y +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_DEVKMEM is not set +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_DW=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_HW_RANDOM=y +CONFIG_TCG_TPM=y +CONFIG_TCG_TIS_I2C_INFINEON=y +CONFIG_I2C_CHARDEV=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_DEBUG_GPIO=y +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_GENERIC_PLATFORM=y +CONFIG_BATTERY_SBS=y +CONFIG_CHARGER_GPIO=y +CONFIG_CHARGER_BQ24735=y +CONFIG_POWER_RESET_GPIO=y +CONFIG_POWER_RESET_GPIO_RESTART=y +CONFIG_SYSCON_REBOOT_MODE=y +CONFIG_POWER_AVS=y +CONFIG_ROCKCHIP_IODOMAIN=y +CONFIG_ROCKCHIP_CPU_AVS=y +CONFIG_THERMAL_WRITABLE_TRIPS=y +CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR=y +CONFIG_THERMAL_GOV_FAIR_SHARE=y +CONFIG_THERMAL_GOV_STEP_WISE=y +CONFIG_CPU_THERMAL=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_ROCKCHIP_THERMAL=y +CONFIG_MFD_CROS_EC=y +CONFIG_MFD_CROS_EC_SPI=y +CONFIG_MFD_RK808=y +CONFIG_MFD_TPS6586X=y +CONFIG_FUSB_30X=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_DEBUG=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_ACT8865=y +CONFIG_REGULATOR_FAN53555=y +CONFIG_REGULATOR_GPIO=y +CONFIG_REGULATOR_LP8752=y +CONFIG_REGULATOR_MP8865=y +CONFIG_REGULATOR_PWM=y +CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_RK818=y +CONFIG_REGULATOR_TPS6586X=y +CONFIG_REGULATOR_XZ3216=y +CONFIG_MEDIA_SUPPORT=y +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_RC_SUPPORT=y +CONFIG_MEDIA_CONTROLLER=y +CONFIG_VIDEO_V4L2_SUBDEV_API=y +CONFIG_MEDIA_USB_SUPPORT=y +CONFIG_USB_VIDEO_CLASS=y +# CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV is not set +# CONFIG_USB_GSPCA is not set +CONFIG_V4L_PLATFORM_DRIVERS=y +CONFIG_V4L_MEM2MEM_DRIVERS=y +CONFIG_V4L_TEST_DRIVERS=y +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_DRM_PANEL_SIMPLE=y +CONFIG_DRM_DW_HDMI_I2S_AUDIO=y +CONFIG_MALI_DEVFREQ=y +CONFIG_MALI_MIDGARD_FOR_LINUX=y +CONFIG_MALI_MIDGARD=y +CONFIG_MALI_EXPERT=y +CONFIG_MALI_PLATFORM_THIRDPARTY=y +CONFIG_MALI_PLATFORM_THIRDPARTY_NAME="rk" +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_PWM=y +CONFIG_RK_VCODEC=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_SEQUENCER=y +CONFIG_SND_SEQ_DUMMY=y +CONFIG_SND_HRTIMER=y +CONFIG_SND_DYNAMIC_MINORS=y +# CONFIG_SND_SPI is not set +CONFIG_SND_USB_AUDIO=y +CONFIG_SND_SOC=y +CONFIG_SND_SOC_ROCKCHIP=y +CONFIG_SND_SOC_ROCKCHIP_SPDIF=y +CONFIG_SND_SOC_ROCKCHIP_MAX98090=y +CONFIG_SND_SOC_ROCKCHIP_RT5645=y +CONFIG_SND_SOC_ES8316=y +CONFIG_SND_SOC_RT5616=y +CONFIG_SND_SOC_RT5640=y +CONFIG_SND_SOC_RT5651=y +CONFIG_SND_SOC_SPDIF=y +CONFIG_SND_SIMPLE_CARD=y +CONFIG_SOUND_PRIME=y +CONFIG_HID_BATTERY_STRENGTH=y +CONFIG_HIDRAW=y +CONFIG_UHID=y +CONFIG_HID_APPLE=y +CONFIG_HID_CHERRY=y +CONFIG_HID_KENSINGTON=y +CONFIG_HID_LOGITECH=y +CONFIG_HID_LOGITECH_DJ=y +CONFIG_HID_MAGICMOUSE=y +CONFIG_HID_MICROSOFT=y +CONFIG_HID_MULTITOUCH=y +CONFIG_HID_PLANTRONICS=y +CONFIG_HID_PRIMAX=y +CONFIG_HID_SONY=y +CONFIG_HID_RMI=y +CONFIG_HID_WIIMOTE=y +CONFIG_USB_HIDDEV=y +CONFIG_I2C_HID=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +# CONFIG_USB_DEFAULT_PERSIST is not set +CONFIG_USB_OTG=y +CONFIG_USB_MON=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_ACM=y +CONFIG_USB_STORAGE=y +CONFIG_USB_UAS=y +CONFIG_USB_DWC3=y +# CONFIG_USB_DWC3_PCI is not set +CONFIG_USB_DWC2=y +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_CP210X=y +CONFIG_USB_SERIAL_FTDI_SIO=y +CONFIG_USB_SERIAL_KEYSPAN=y +CONFIG_USB_SERIAL_PL2303=y +CONFIG_USB_SERIAL_OTI6858=y +CONFIG_USB_SERIAL_QUALCOMM=y +CONFIG_USB_SERIAL_SIERRAWIRELESS=y +CONFIG_USB_SERIAL_OPTION=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_DEBUG_FILES=y +CONFIG_USB_GADGET_VBUS_DRAW=500 +CONFIG_USB_CONFIGFS=y +CONFIG_USB_CONFIGFS_ACM=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_CONFIGFS_UEVENT=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK_MINORS=32 +CONFIG_MMC_TEST=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_OF_ARASAN=y +CONFIG_MMC_DW=y +CONFIG_MMC_DW_ROCKCHIP=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_HYM8563=y +CONFIG_RTC_DRV_RK808=y +CONFIG_DMADEVICES=y +CONFIG_PL330_DMA=y +CONFIG_STAGING=y +CONFIG_SENSORS_ISL29018=y +CONFIG_TSL2583=y +CONFIG_ASHMEM=y +# CONFIG_ANDROID_TIMED_OUTPUT is not set +CONFIG_FIQ_DEBUGGER=y +CONFIG_FIQ_DEBUGGER_NO_SLEEP=y +CONFIG_FIQ_DEBUGGER_CONSOLE=y +CONFIG_FIQ_DEBUGGER_CONSOLE_DEFAULT_ENABLE=y +CONFIG_COMMON_CLK_RK808=y +CONFIG_MAILBOX=y +CONFIG_ROCKCHIP_IOMMU=y +CONFIG_ROCKCHIP_PM_DOMAINS=y +CONFIG_PM_DEVFREQ=y +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +CONFIG_PM_DEVFREQ_EVENT=y +CONFIG_MEMORY=y +CONFIG_IIO=y +CONFIG_IIO_BUFFER=y +CONFIG_IIO_KFIFO_BUF=y +CONFIG_IIO_TRIGGER=y +CONFIG_ROCKCHIP_SARADC=y +CONFIG_SENSORS_TSL2563=y +CONFIG_IIO_SYSFS_TRIGGER=y +CONFIG_PWM=y +CONFIG_PWM_ROCKCHIP=y +CONFIG_PHY_ROCKCHIP_USB=y +CONFIG_PHY_ROCKCHIP_INNO_USB2=y +CONFIG_PHY_ROCKCHIP_INNO_USB3=y +CONFIG_PHY_ROCKCHIP_EMMC=y +CONFIG_PHY_ROCKCHIP_DP=y +CONFIG_PHY_ROCKCHIP_TYPEC=y +CONFIG_PHY_ROCKCHIP_PCIE=y +CONFIG_ANDROID=y +CONFIG_NVMEM=y +CONFIG_ROCKCHIP_EFUSE=y +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_DNOTIFY is not set +CONFIG_FUSE_FS=y +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=y +CONFIG_VFAT_FS=y +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_PSTORE_RAM=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +CONFIG_NFS_SWAP=y +CONFIG_NFSD=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +CONFIG_PRINTK_TIME=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0 +CONFIG_LOCKUP_DETECTOR=y +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y +CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y +CONFIG_SCHEDSTATS=y +CONFIG_TIMER_STATS=y +CONFIG_DEBUG_SPINLOCK=y +CONFIG_DEBUG_CREDENTIALS=y +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +CONFIG_FUNCTION_TRACER=y +CONFIG_BLK_DEV_IO_TRACE=y +CONFIG_LKDTM=y +CONFIG_TEST_UDELAY=y +CONFIG_STRICT_DEVMEM=y +CONFIG_DEBUG_SET_MODULE_RONX=y +CONFIG_SECURITY=y +CONFIG_SECURITY_NETWORK=y +CONFIG_SECURITY_PATH=y +CONFIG_SECURITY_YAMA=y +CONFIG_CRYPTO_ECHAINIV=y +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_TWOFISH=y +CONFIG_CRYPTO_ANSI_CPRNG=y +CONFIG_CRYPTO_USER_API_HASH=y +CONFIG_CRYPTO_USER_API_SKCIPHER=y +CONFIG_ASYMMETRIC_KEY_TYPE=y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_X509_CERTIFICATE_PARSER=y +CONFIG_PKCS7_MESSAGE_PARSER=y +CONFIG_SYSTEM_TRUSTED_KEYRING=y +CONFIG_ARM64_CRYPTO=y +CONFIG_CRYPTO_SHA1_ARM64_CE=y +CONFIG_CRYPTO_SHA2_ARM64_CE=y +CONFIG_CRYPTO_GHASH_ARM64_CE=y +CONFIG_CRYPTO_AES_ARM64_CE_CCM=y +CONFIG_CRYPTO_AES_ARM64_CE_BLK=y +CONFIG_CRC_T10DIF=y +CONFIG_CRC7=y +# CONFIG_XZ_DEC_X86 is not set +# CONFIG_XZ_DEC_POWERPC is not set +# CONFIG_XZ_DEC_IA64 is not set +# CONFIG_XZ_DEC_SPARC is not set diff --git a/arch/arm64/configs/rockchip_linux_defconfig b/arch/arm64/configs/rockchip_linux_defconfig index 9100f825e948..38aeb1e861e1 100644 --- a/arch/arm64/configs/rockchip_linux_defconfig +++ b/arch/arm64/configs/rockchip_linux_defconfig @@ -36,6 +36,9 @@ CONFIG_PCI=y CONFIG_PCI_MSI=y CONFIG_PCIE_ROCKCHIP=y CONFIG_PCIEPORTBUS=y +CONFIG_PCIE_ECRC=y +CONFIG_PCIEAER_INJECT=y +CONFIG_PCIEASPM_DEBUG=y CONFIG_PCIEASPM_POWERSAVE=y # CONFIG_ARM64_ERRATUM_826319 is not set # CONFIG_ARM64_ERRATUM_827319 is not set diff --git a/drivers/base/dd.c b/drivers/base/dd.c index 9e425fbf83cb..4d74ea802dbd 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c @@ -346,7 +346,7 @@ probe_failed: switch (ret) { case -EPROBE_DEFER: /* Driver requested deferred probing */ - dev_dbg(dev, "Driver %s requests probe deferral\n", drv->name); + dev_info(dev, "Driver %s requests probe deferral\n", drv->name); driver_deferred_probe_add(dev); /* Did a trigger occur while probing? Need to re-trigger if yes */ if (local_trigger_count != atomic_read(&deferred_trigger_count)) diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig index a043107da2af..2f23878ad031 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig @@ -602,6 +602,6 @@ config TILE_SROM how to partition a single ROM for multiple purposes. source "drivers/char/xillybus/Kconfig" - +#source "drivers/char/drm/Kconfig" endmenu diff --git a/drivers/char/Makefile b/drivers/char/Makefile index d8a7579300d2..51d1a3a27401 100644 --- a/drivers/char/Makefile +++ b/drivers/char/Makefile @@ -51,6 +51,10 @@ obj-y += agp/ obj-$(CONFIG_PCMCIA) += pcmcia/ obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.o +ifeq ($(CONFIG_ARM64),y) +obj-y += virtdrm.o +virtdrm-objs := virtd +endif obj-$(CONFIG_TCG_TPM) += tpm/ obj-$(CONFIG_PS3_FLASH) += ps3flash.o diff --git a/drivers/char/virtd b/drivers/char/virtd new file mode 100644 index 000000000000..2372fbdc9ebe Binary files /dev/null and b/drivers/char/virtd differ diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 20a4bb6b548c..cf02e19ae00f 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -686,15 +686,15 @@ static const struct panel_desc auo_b101ean01 = { }; static const struct drm_display_mode auo_b101ew05_mode = { - .clock = 71000, + .clock = 78000, .hdisplay = 1280, .hsync_start = 1280 + 18, - .hsync_end = 1280 + 18 + 10, - .htotal = 1280 + 18 + 10 + 100, + .hsync_end = 1280 + 18 + 100, + .htotal = 1280 + 18 + 100 + 10, .vdisplay = 800, .vsync_start = 800 + 6, - .vsync_end = 800 + 6 + 2, - .vtotal = 800 + 6 + 2 + 8, + .vsync_end = 800 + 6 + 8, + .vtotal = 800 + 6 + 8 + 2, .vrefresh = 60, }; @@ -1656,6 +1656,9 @@ static const struct of_device_id platform_of_match[] = { }, { .compatible = "lg,lp079qx1-sp0v", .data = &lg_lp079qx1_sp0v, + }, { + .compatible = "sharp,lcd-f402", + .data = &sharp_lcd_f402, }, { .compatible = "lg,lp097qx1-spa1", .data = &lg_lp097qx1_spa1, diff --git a/drivers/input/remotectl/rockchip_pwm_remotectl.c b/drivers/input/remotectl/rockchip_pwm_remotectl.c index 831d46cc9bb5..bcd1d4bc5a92 100644 --- a/drivers/input/remotectl/rockchip_pwm_remotectl.c +++ b/drivers/input/remotectl/rockchip_pwm_remotectl.c @@ -12,8 +12,7 @@ #include #include #include "rockchip_pwm_remotectl.h" - - +#include /*sys/module/rk_pwm_remotectl/parameters, modify code_print to change the value*/ @@ -36,7 +35,14 @@ module_param_named(dbg_level, rk_remote_pwm_dbg_level, int, 0644); } \ } while (0) +#define BLINK_DELAY 50 +DEFINE_LED_TRIGGER(ledtrig_ir_click); +static unsigned long ir_blink_delay = BLINK_DELAY; +void ledtrig_ir_activity(void) +{ + led_trigger_blink_oneshot(ledtrig_ir_click, &ir_blink_delay, &ir_blink_delay,1); +} struct rkxx_remote_key_table { int scancode; int keycode; @@ -220,6 +226,12 @@ static void rk_pwm_remotectl_do_something(unsigned long data) } break; case RMC_GETDATA: { + if(ddata->keycode != KEY_POWER) + { + ledtrig_ir_activity(); + 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 |= (0x01<count); @@ -231,6 +243,9 @@ static void rk_pwm_remotectl_do_something(unsigned long data) ((~ddata->scandata >> 8) & 0x0ff)) { if (remotectl_keycode_lookup(ddata)) { ddata->press = 1; + if(ddata->keycode == KEY_POWER){ + led_trigger_event(ledtrig_ir_click,LED_OFF); + } input_event(ddata->input, EV_KEY, ddata->keycode, 1); input_sync(ddata->input); @@ -488,11 +503,14 @@ static int rk_pwm_probe(struct platform_device *pdev) rk_pwm_remotectl_hw_init(ddata); pwm_freq = clk_get_rate(clk) / 64; ddata->pwm_freq_nstime = 1000000000 / pwm_freq; + led_trigger_register_simple("ir-power-click", &ledtrig_ir_click); + return ret; } static int rk_pwm_remove(struct platform_device *pdev) { + led_trigger_unregister_simple(ledtrig_ir_click); return 0; } diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile index 9ddc1e981d7c..bc362ab5821a 100644 --- a/drivers/input/touchscreen/Makefile +++ b/drivers/input/touchscreen/Makefile @@ -39,7 +39,7 @@ obj-$(CONFIG_TOUCHSCREEN_FT6236) += ft6236.o obj-$(CONFIG_TOUCHSCREEN_FUJITSU) += fujitsu_ts.o obj-$(CONFIG_TOUCHSCREEN_GOODIX) += goodix.o obj-$(CONFIG_TOUCHSCREEN_GSLX680_PAD) += gslx680_pad.o gsl_point_id.o -obj-$(CONFIG_TOUCHSCREEN_GSLX680_VR) += gslx680.o gsl_point_id.o +obj-$(CONFIG_TOUCHSCREEN_GSLX680_VR) += gslx680_vr.o gsl_point_id.o obj-$(CONFIG_TOUCHSCREEN_GSL3673) += gsl3673.o gsl_point_id.o obj-$(CONFIG_TOUCHSCREEN_GT9XX) += gt9xx/ obj-$(CONFIG_TOUCHSCREEN_ILI210X) += ili210x.o diff --git a/drivers/input/touchscreen/gslx680.c b/drivers/input/touchscreen/gslx680.c deleted file mode 100644 index f24b0dc69661..000000000000 --- a/drivers/input/touchscreen/gslx680.c +++ /dev/null @@ -1,1848 +0,0 @@ -/* - * drivers/input/touchscreen/gslX680.c - * - * Copyright (c) 2012 Shanghai Basewin - * Guan Yuwei - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include "rockchip_gslX680_rk3168.h" -#include "tp_suspend.h" -#include "gslx680.h" -#include -#include - -#define GSL_DEBUG - -/* -struct fw_data -{ - u32 offset : 8; - u32 : 0; - u32 val; -}; -*/ - -#define RK_GEAR_TOUCH -#define REPORT_DATA_ANDROID_4_0 -#define HAVE_TOUCH_KEY -//#define SLEEP_CLEAR_POINT - -//#define FILTER_POINT - -#ifdef FILTER_POINT -#define FILTER_MAX 9 //6 -#endif - -#define GSLX680_I2C_NAME "gslX680" -#define GSLX680_I2C_ADDR 0x40 - -//#define IRQ_PORT RK2928_PIN1_PB0//RK30_PIN1_PB7 -//#define WAKE_PORT RK30_PIN0_PA1//RK30_PIN0_PB6 - -#define GSL_DATA_REG 0x80 -#define GSL_STATUS_REG 0xe0 -#define GSL_PAGE_REG 0xf0 - -#define TPD_PROC_DEBUG -#ifdef TPD_PROC_DEBUG -#include -#include -#include -//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; -static struct i2c_client *i2c_client = NULL; -#endif -#define GSL_MONITOR -#define PRESS_MAX 255 -#define MAX_FINGERS 10 -#define MAX_CONTACTS 10 -#define DMA_TRANS_LEN 0x20 -#ifdef GSL_MONITOR - -#ifdef RK_GEAR_TOUCH -static int g_istouch=0; -#endif - -static struct workqueue_struct *gsl_monitor_workqueue = NULL; -static u8 int_1st[4] = { 0 }; -static u8 int_2nd[4] = { 0 }; -//static char dac_counter = 0; -static char b0_counter = 0; -static char bc_counter = 0; -static char i2c_lock_flag = 0; -#endif - -#define WRITE_I2C_SPEED (350*1000) -#define I2C_SPEED (200*1000) -#define CLOSE_TP_POWER 0 -//add by yuandan -//#define HAVE_CLICK_TIMER - -#ifdef HAVE_CLICK_TIMER - -static struct workqueue_struct *gsl_timer_workqueue = NULL; -bool send_key = false; -struct semaphore my_sem; -#endif - -#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_LEFT, - KEY_RIGHT, - KEY_UP, - KEY_DOWN, - KEY_ENTER, -}; - -#define MAX_KEY_NUM (sizeof(key_array)/sizeof(key_array[0])) -//add by yuandan -int key_x[512]; -int key_y[512]; -int key_count = 0; -int key_repeat; -struct key_data gsl_key_data[MAX_KEY_NUM] = { - {KEY_BACK, 550, 650, 1400, 1600}, - {KEY_HOMEPAGE, 350, 450, 1400, 1600}, - {KEY_MENU, 150, 250, 1400, 1600}, - {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; - int flag_irq_is_disable; - spinlock_t irq_lock; - u8 *touch_data; - u8 device_id; - int irq; - int rst; - struct delayed_work gsl_monitor_work; -#if defined(CONFIG_HAS_EARLYSUSPEND) - struct early_suspend early_suspend; -#endif - -#if defined (HAVE_CLICK_TIMER) - struct work_struct click_work; -#endif - - struct tp_device tp; - struct pinctrl *pinctrl; - struct pinctrl_state *pins_default; - struct pinctrl_state *pins_sleep; - struct pinctrl_state *pins_inactive; -}; - -#ifdef GSL_DEBUG -#define print_info(fmt, args...) printk(fmt, ##args); -#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; - -int gslx680_set_pinctrl_state(struct gsl_ts *ts, struct pinctrl_state *state) -{ - int ret = 0; - - if (!IS_ERR(state)) { - ret = pinctrl_select_state(ts->pinctrl, state); - if (ret) - printk("could not set pins \n"); - } - - return ret; -} - -static int gslX680_init(struct gsl_ts *ts) -{ - struct device_node *np = ts->client->dev.of_node; - int err = 0; - int ret = 0; - - ts->irq = of_get_named_gpio_flags(np, "touch-gpio", 0, NULL); - ts->rst = of_get_named_gpio_flags(np, "reset-gpio", 0, NULL); - - //msleep(20); -#if 0 //#if defined (CONFIG_BOARD_ZM71C)||defined (CONFIG_BOARD_ZM72CP) || - defined(CONFIG_BOARD_ZM726C) || defined(CONFIG_BOARD_ZM726CE) - if (gpio_request(ts->rst, NULL) != 0) { - gpio_free(ts->rst); - printk("gslX680_init gpio_request error\n"); - return -EIO; - } -#endif - - /* pinctrl */ - ts->pinctrl = devm_pinctrl_get(&ts->client->dev); - if (IS_ERR(ts->pinctrl)) { - ret = PTR_ERR(ts->pinctrl); - //goto out; - } - - ts->pins_default = - pinctrl_lookup_state(ts->pinctrl, PINCTRL_STATE_DEFAULT); - //if (IS_ERR(ts->pins_default)) - // dev_err(&client->dev, "could not get default pinstate\n"); - - ts->pins_sleep = pinctrl_lookup_state(ts->pinctrl, PINCTRL_STATE_SLEEP); - //if (IS_ERR(ts->pins_sleep)) - // dev_err(&client->dev, "could not get sleep pinstate\n"); - - ts->pins_inactive = pinctrl_lookup_state(ts->pinctrl, "inactive"); - //if (IS_ERR(ts->pins_inactive)) - // dev_err(&client->dev, "could not get inactive pinstate\n"); - - err = gpio_request(ts->rst, "tp reset"); - if (err) { - printk("gslx680 reset gpio request failed.\n"); - return -1; - } - - gslx680_set_pinctrl_state(ts, ts->pins_default); - gpio_direction_output(ts->rst, 1); - gpio_set_value(ts->rst, 1); - - return 0; -} - -static int gslX680_shutdown_low(struct gsl_ts *ts) -{ - printk("gsl gslX680_shutdown_low\n"); - gpio_direction_output(ts->rst, 0); - gpio_set_value(ts->rst, 0); - - return 0; -} - -static int gslX680_shutdown_high(struct gsl_ts *ts) -{ - printk("gsl gslX680_shutdown_high\n"); - gpio_direction_output(ts->rst, 1); - gpio_set_value(ts->rst, 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=300*1000; - - 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=300*1000; - - 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; -} - */ - -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 = 100 * 1000; - - return i2c_transfer(client->adapter, xfer_msg, 1) == 1 ? 0 : -EFAULT; -} - -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; - //u8 read_buf[4] = {0}; - struct fw_data const *ptr_fw; - - 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); - 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); - cur = buf + 1; - } - - send_flag++; - } - } -} - -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("gsl 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("gsl 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("gsl I read reg 0xf0 is 0x%x\n", read_buf); - - return rc; -} -static void startup_chip(struct i2c_client *client) -{ - u8 tmp = 0x00; - - printk("gsl startup_chip\n"); - -#ifdef GSL_NOID_VERSION - gsl_DataInit(gsl_config_data_id); -#endif - gsl_ts_write(client, 0xe0, &tmp, 1); - mdelay(10); -} - -static void reset_chip(struct i2c_client *client) -{ - u8 tmp = 0x88; - u8 buf[4] = { 0x00 }; - - printk("gsl reset_chip\n"); - - gsl_ts_write(client, 0xe0, &tmp, sizeof(tmp)); - mdelay(20); - tmp = 0x04; - gsl_ts_write(client, 0xe4, &tmp, sizeof(tmp)); - mdelay(10); - gsl_ts_write(client, 0xbc, buf, sizeof(buf)); - mdelay(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); - mdelay(20); - write_buf[0] = 0x03; - gsl_ts_write(client, 0x80, &write_buf[0], 1); - mdelay(5); - write_buf[0] = 0x04; - gsl_ts_write(client, 0xe4, &write_buf[0], 1); - mdelay(5); - write_buf[0] = 0x00; - gsl_ts_write(client, 0xe0, &write_buf[0], 1); - mdelay(20); -} - -static void init_chip(struct i2c_client *client, struct gsl_ts *ts) -{ - int rc; - - printk("gsl init_chip\n"); - - gslX680_shutdown_low(ts); - mdelay(20); - gslX680_shutdown_high(ts); - mdelay(20); - rc = test_i2c(client); - 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, struct gsl_ts *ts) -{ - u8 read_buf[4] = { 0 }; - - mdelay(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) { - init_chip(client, ts); - } -} - -#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_config_read_proc(struct seq_file *m, void *v) -{ - //char *ptr = page; - char temp_data[5] = { 0 }; - unsigned int tmp = 0; - //unsigned int *ptr_fw; - - 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]; - seq_printf(m,"gsl_config_data_id[%d] = ",tmp); - if(tmp>=0&&tmp 512) { - //print_info("size not match [%d:%d]\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(i2c_client); - } else if ('e' == temp_buf[0] && 'n' == temp_buf[1]) { - //end //en - mdelay(20); - reset_chip(i2c_client); - startup_chip(i2c_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 - i2c_smbus_write_i2c_block_data(i2c_client, buf[4], 4, buf); - } -#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 < 512) { - 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 SLEEP_CLEAR_POINT -#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 -#endif - -#ifdef RK_GEAR_TOUCH -static void report_data(struct gsl_ts *ts, u16 x, u16 y, u8 pressure, u8 id) -{ -#ifdef RK_GEAR_TOUCH - int delt_x,delt_y; - static int old_x=0, old_y=0; -#endif - //#ifndef SWAP_XY - // swap(x, y); - //#endif - //printk("#####id=%d,x=%d,y=%d######\n",id,x,y); - - if (x > SCREEN_MAX_X || y > SCREEN_MAX_Y) { -#ifdef HAVE_TOUCH_KEY - //report_key(ts, x, y); - //printk("#####report_key x=%d,y=%d######\n",x,y); -#endif - return; - } - - /* - input_mt_slot(ts->input_dev, id); - input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, id); - input_report_abs(ts->input_dev, ABS_MT_POSITION_X, x); - input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, y); - input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, w); - input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, w); - */ -#ifdef RK_GEAR_TOUCH - if (g_istouch == 0){ - g_istouch = 1; - input_event(ts->input, EV_MSC, MSC_SCAN, 0x90001); - input_report_key(ts->input, 0x110, 1); - input_sync(ts->input); - } - delt_x = (int)x - old_x; - delt_y = (int)y - old_y; - delt_x /= 10; - delt_y /= 10; - input_report_rel(ts->input, REL_Y, -delt_x); - input_report_rel(ts->input, REL_X, -delt_y); - input_sync(ts->input); - old_x = x; - old_y = y; - return; -#endif - -#ifdef REPORT_DATA_ANDROID_4_0 - //printk("#####REPORT_DATA_ANDROID_4_0######\n"); - input_mt_slot(ts->input, id); - //input_report_abs(ts->input, ABS_MT_TRACKING_ID, id); - input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, 1); - input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, pressure); -#ifdef X_POL - input_report_abs(ts->input, ABS_MT_POSITION_X, SCREEN_MAX_X - x); -#else - input_report_abs(ts->input, ABS_MT_POSITION_X, x); -#endif -#ifdef Y_POL - input_report_abs(ts->input, ABS_MT_POSITION_Y, (SCREEN_MAX_Y - y)); -#else - input_report_abs(ts->input, ABS_MT_POSITION_Y, (y)); -#endif - input_report_abs(ts->input, ABS_MT_WIDTH_MAJOR, 1); -#else - //printk("#####nonono REPORT_DATA_ANDROID_4_0######\n"); - 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 -} -#endif - -void glsx680_ts_irq_disable(struct gsl_ts *ts) -{ - unsigned long irqflags; - - spin_lock_irqsave(&ts->irq_lock, irqflags); - if (!ts->flag_irq_is_disable) { - disable_irq_nosync(ts->client->irq); - ts->flag_irq_is_disable = 1; - } - spin_unlock_irqrestore(&ts->irq_lock, irqflags); -} - -void glsx680_ts_irq_enable(struct gsl_ts *ts) -{ - unsigned long irqflags = 0; - - spin_lock_irqsave(&ts->irq_lock, irqflags); - if (ts->flag_irq_is_disable) { - enable_irq(ts->client->irq); - ts->flag_irq_is_disable = 0; - } - spin_unlock_irqrestore(&ts->irq_lock, irqflags); -} - -static void gslX680_ts_worker(struct work_struct *work) -{ - int rc, i; - u8 id, touches; - u16 x, y; - -#ifdef GSL_NOID_VERSION - u32 tmp1; - u8 buf[4] = { 0 }; - struct gsl_touch_info cinfo; -#endif - - struct gsl_ts *ts = container_of(work, struct gsl_ts, work); - -#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"); - 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 -#ifdef RK_GEAR_TOUCH - report_data(ts, x_new, y_new, 10, id); -#endif - if (key_count <= 512) { - key_x[key_count] = x_new; - key_y[key_count] = y_new; - key_count++; - /*printk("test in key store in here, - x_new is %d , y_new is %d , - key_count is %d \n", x_new ,y_new,key_count);*/ - } - 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 RK_GEAR_TOUCH - if (g_istouch == 1){ - g_istouch = 0; - input_event(ts->input, EV_MSC, MSC_SCAN, 0x90001); - input_report_key(ts->input, 0x110, 0); - input_sync(ts->input); - } - g_istouch = 0; -#endif -#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) { -#ifdef REPORT_DATA_ANDROID_4_0 -#ifndef RK_GEAR_TOUCH - //input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, 0); - //input_report_abs(ts->input, ABS_MT_WIDTH_MAJOR, 0); - //input_mt_sync(ts->input); - - int temp_x = 0; - int temp_y = 0; - temp_x = - (((key_x[key_count - 1] - key_x[0]) > - 0) ? (key_x[key_count - 1] - key_x[0]) - : (key_x[0] - key_x[key_count - 1])); - temp_y = - (((key_y[key_count - 1] - key_y[0]) > - 0) ? (key_y[key_count - 1] - key_y[0]) - : (key_y[0] - key_y[key_count - 1])); - if (key_count <= 512) { - if (temp_x > temp_y) { - if ((key_x[key_count - 1] - key_x[0]) > 100) { - printk(" send up key \n"); - input_report_key(ts->input, - key_array[2], 1); - input_sync(ts->input); - input_report_key(ts->input, - key_array[2], 0); - input_sync(ts->input); - } else if ((key_x[0] - key_x[key_count - 1]) > - 100) { - printk(" send down key \n"); - input_report_key(ts->input, - key_array[3], 1); - input_sync(ts->input); - input_report_key(ts->input, - key_array[3], 0); - input_sync(ts->input); - } - } else if (temp_x <= temp_y) { - if ((key_y[key_count - 1] - key_y[0]) > 100) { - printk(" send left key \n"); - input_report_key(ts->input, - key_array[0], 1); - input_sync(ts->input); - input_report_key(ts->input, - key_array[0], 0); - input_sync(ts->input); - } else if ((key_y[0] - key_y[key_count - 1]) > - 100) { - printk(" send right key \n"); - input_report_key(ts->input, - key_array[1], 1); - input_sync(ts->input); - input_report_key(ts->input, - key_array[1], 0); - input_sync(ts->input); - } - } - /*printk(" key_x[key_count -1], key_x[0], - key_y[key_count -1], key_y[0] is %d ,%d , %d , %d\n", - key_x[key_count -1], key_x[0], key_y[key_count -1], - key_y[0]);*/ - if ((key_x[key_count - 1] - key_x[0] < 50) - && (key_x[key_count - 1] - key_x[0] >= -50) - && (key_y[key_count - 1] - key_y[0] < 50) - && (key_y[key_count - 1] - key_y[0] >= -50) - && (key_x[0] != 0) && (key_y[0] != 0)) { - //queue_work(gsl_timer_workqueue,&ts->click_work); - //printk(" send enter2 key by yuandan \n"); - //if(send_key) - // { - printk(" send enter key \n"); - input_report_key(ts->input, key_array[4], 1); - input_sync(ts->input); - input_report_key(ts->input, key_array[4], 0); - input_sync(ts->input); - // }else - // { - //down(&my_sem); - // send_key = true; - //up(&my_sem); - // } - } - } else if (key_count > 512) { - if (temp_x > temp_y) { - if ((key_x[511] - key_x[0]) > 100) { - printk(" send up key \n"); - input_report_key(ts->input, - key_array[2], 1); - input_sync(ts->input); - input_report_key(ts->input, - key_array[2], 0); - input_sync(ts->input); - } else if ((key_x[0] - key_x[511]) > 100) { - printk(" send down key \n"); - input_report_key(ts->input, - key_array[3], 1); - input_sync(ts->input); - input_report_key(ts->input, - key_array[3], 0); - input_sync(ts->input); - } - } else if (temp_x <= temp_y) { - - if ((key_y[511] - key_y[0]) > 100) { - printk(" send left key \n"); - input_report_key(ts->input, - key_array[0], 1); - input_sync(ts->input); - input_report_key(ts->input, - key_array[0], 0); - input_sync(ts->input); - } else if ((key_y[0] - key_y[511]) > 100) { - printk(" send right key \n"); - input_report_key(ts->input, - key_array[1], 1); - input_sync(ts->input); - input_report_key(ts->input, - key_array[1], 0); - input_sync(ts->input); - } - } - } - memset(key_y, 0, sizeof(int) * 512); - memset(key_x, 0, sizeof(int) * 512); - key_count = 0; -#endif -#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 - glsx680_ts_irq_enable(ts); - -} - -#ifdef HAVE_CLICK_TIMER - -static void click_timer_worker(struct work_struct *work) -{ - while (true) { - mdelay(500); - //down(&my_sem); - send_key = false; - //up(&my_sem); - } -} - -#endif - -#ifdef GSL_MONITOR -static void gsl_monitor_worker(struct work_struct *work) -{ - //u8 write_buf[4] = {0}; - u8 read_buf[4] = { 0 }; - char init_chip_flag = 0; - - //print_info("gsl_monitor_worker\n"); - struct gsl_ts *ts = - container_of(work, struct gsl_ts, gsl_monitor_work.work); - if (i2c_lock_flag != 0) { - i2c_lock_flag = 1; - } - //goto queue_monitor_work; - else - i2c_lock_flag = 1; - - //gsl_ts_read(ts->client, 0x80, read_buf, 4); - /*printk("======read 0x80: %x %x %x %x ======tony0geshu\n", - read_buf[3], read_buf[2], read_buf[1], read_buf[0]);*/ - - gsl_ts_read(ts->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_flag = 1; - b0_counter = 0; - } - - gsl_ts_read(ts->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]; - - /*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]);*/ - - 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_flag = 1; - //goto queue_monitor_init_chip; - } - - gsl_ts_read(ts->client, 0xbc, read_buf, 4); - if (read_buf[3] != 0 || read_buf[2] != 0 || read_buf[1] != 0 - || read_buf[0] != 0) - bc_counter++; - else - bc_counter = 0; - if (bc_counter > 1) { - /*printk("======read 0xbc: %x %x %x %x======\n", - read_buf[3], read_buf[2], read_buf[1], read_buf[0]);*/ - init_chip_flag = 1; - bc_counter = 0; - } - - /* - write_buf[3] = 0x01; - write_buf[2] = 0xfe; - write_buf[1] = 0x10; - write_buf[0] = 0x00; - gsl_ts_write(ts->client, 0xf0, write_buf, 4); - gsl_ts_read(ts->client, 0x10, read_buf, 4); - gsl_ts_read(ts->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_flag = 1; - dac_counter = 0; - } - */ - //queue_monitor_init_chip: - if (init_chip_flag) - init_chip(ts->client, ts); - - i2c_lock_flag = 0; - - //queue_monitor_work: - //queue_delayed_work(gsl_monitor_workqueue, &ts->gsl_monitor_work, 100); -} -#endif - -static irqreturn_t gsl_ts_irq(int irq, void *dev_id) -{ - ///struct gsl_ts *ts = dev_id; - struct gsl_ts *ts = (struct gsl_ts *)dev_id; - //print_info("========gslX680 Interrupt=========\n"); - - glsx680_ts_irq_disable(ts); - - 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; - int i = 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 = - devm_kzalloc(&client->dev, ts->dd->data_size, GFP_KERNEL); - if (!ts->touch_data) { - pr_err("%s: Unable to allocate memory\n", __func__); - return -ENOMEM; - } - - input_device = devm_input_allocate_device(&ts->client->dev); - if (!input_device) { - rc = -ENOMEM; - goto init_err_ret; - } - - 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(EV_SYN, input_device->evbit); - __set_bit(INPUT_PROP_DIRECT, input_device->propbit); - __set_bit(MT_TOOL_FINGER, input_device->keybit); - 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 - -#ifdef RK_GEAR_TOUCH - set_bit(EV_REL, input_device->evbit); - input_set_capability(input_device, EV_REL, REL_X); - input_set_capability(input_device, EV_REL, REL_Y); - input_set_capability(input_device, EV_MSC, MSC_SCAN); - input_set_capability(input_device, EV_KEY, 0x110); -#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, SCREEN_MAX_X, - 0, 0); - input_set_abs_params(input_device, ABS_MT_POSITION_Y, 0, 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); - - //client->irq = IRQ_PORT; - //ts->irq = client->irq; - - ts->wq = create_singlethread_workqueue("kworkqueue_ts"); - if (!ts->wq) { - dev_err(&client->dev, "gsl Could not create workqueue\n"); - goto init_err_ret; - } - 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); - init_err_ret: - return rc; -} - -#if 0 -static int gsl_ts_suspend(struct i2c_client *dev, pm_message_t mesg) -{ -#if 0 - struct gsl_ts *ts = dev_get_drvdata(dev); - - 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(&ts->gsl_monitor_work); -#endif - -#ifdef HAVE_CLICK_TIMER - //cancel_work_sync(&ts->click_work); -#endif - disable_irq_nosync(ts->irq); - - gslX680_shutdown_low(ts); - -#ifdef SLEEP_CLEAR_POINT - mdelay(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); - mdelay(10); - report_data(ts, 1, 1, 10, 1); - input_sync(ts->input); -#endif - -#endif - return 0; -} -#endif - -#if 0 -static int gsl_ts_resume(struct i2c_client *dev) -{ -#if 0 - struct gsl_ts *ts = dev_get_drvdata(dev); - - printk("I'am in gsl_ts_resume() start\n"); - - gslX680_shutdown_high(ts); - msleep(20); - reset_chip(ts->client); - startup_chip(ts->client); - check_mem_data(ts->client, ts); - -#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, &ts->gsl_monitor_work, 300); -#endif - -#ifdef HAVE_CLICK_TIMER - //queue_work(gsl_timer_workqueue,&ts->click_work); -#endif - - disable_irq_nosync(ts->irq); - enable_irq(ts->irq); -#endif - - return 0; -} -#endif - -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__); - //gsl_ts_suspend(&ts->client->dev); -#ifdef GSL_MONITOR - printk("gsl_ts_suspend () : cancel gsl_monitor_work\n"); - cancel_delayed_work_sync(&ts->gsl_monitor_work); -#endif - - glsx680_ts_irq_disable(ts); - cancel_work_sync(&ts->work); - -#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 - gslX680_shutdown_low(ts); - return 0; -} - -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__); - //gsl_ts_resume(&ts->client->dev); - - printk("I'am in gsl_ts_resume() start\n"); - - gslX680_shutdown_high(ts); - msleep(20); - reset_chip(ts->client); - startup_chip(ts->client); - check_mem_data(ts->client, ts); - -#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, &ts->gsl_monitor_work, 300); -#endif - glsx680_ts_irq_enable(ts); - - return 0; -} - -#ifdef CONFIG_HAS_EARLYSUSPEND - -static void gsl_ts_early_suspend(struct early_suspend *h) -{ - struct gsl_ts *ts = container_of(h, struct gsl_ts, early_suspend); - printk("[GSLX680] Enter %s\n", __func__); - //gsl_ts_suspend(&ts->client->dev); -#ifdef GSL_MONITOR - printk("gsl_ts_suspend () : cancel gsl_monitor_work\n"); - cancel_delayed_work_sync(&ts->gsl_monitor_work); -#endif - - glsx680_ts_irq_disable(ts); - cancel_work_sync(&ts->work); - -#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 - gslX680_shutdown_low(ts); - return 0; -} - -static void gsl_ts_late_resume(struct early_suspend *h) -{ - struct gsl_ts *ts = container_of(h, struct gsl_ts, early_suspend); - printk("[GSLX680] Enter %s\n", __func__); - //gsl_ts_resume(&ts->client->dev); - int i; - - printk("I'am in gsl_ts_resume() start\n"); - - gslX680_shutdown_high(ts); - msleep(20); - reset_chip(ts->client); - startup_chip(ts->client); - check_mem_data(ts->client, ts); - -#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, &ts->gsl_monitor_work, 300); -#endif - glsx680_ts_irq_enable(ts); - -} -#endif - -//static struct wake_lock touch_wakelock; - -static int gsl_ts_probe(struct i2c_client *client, - const struct i2c_device_id *id) -{ - struct gsl_ts *ts; - int rc; - - printk("GSLX680 Enter %s\n", __func__); - //wake_lock_init(&touch_wakelock, WAKE_LOCK_SUSPEND, "touch"); - //wake_lock(&touch_wakelock); //system do not enter deep sleep - if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { - dev_err(&client->dev, "gsl I2C functionality not supported\n"); - return -ENODEV; - } - - ts = devm_kzalloc(&client->dev, sizeof(*ts), GFP_KERNEL); - if (!ts) - return -ENOMEM; - - ts->tp.tp_suspend = gsl_ts_early_suspend; - ts->tp.tp_resume = gsl_ts_late_resume; - tp_register_fb(&ts->tp); - - ts->client = client; - i2c_set_clientdata(client, ts); - //ts->device_id = id->driver_data; - - gslX680_init(ts); - rc = gslX680_ts_init(client, ts); - if (rc < 0) { - dev_err(&client->dev, "gsl GSLX680 init failed\n"); - goto porbe_err_ret; - } - //#ifdef GSLX680_COMPATIBLE - // judge_chip_type(client); - //#endif - //printk("##################### probe [2]chip_type=%c .\n",chip_type); - init_chip(ts->client, ts); - check_mem_data(ts->client, ts); - spin_lock_init(&ts->irq_lock); - client->irq = gpio_to_irq(ts->irq); - rc = request_irq(client->irq, gsl_ts_irq, IRQF_TRIGGER_RISING, - client->name, ts); - if (rc < 0) { - printk("gsl_probe: request irq failed\n"); - goto porbe_err_ret; - } - - /* create debug attribute */ - //rc = device_create_file(&ts->input->dev, &dev_attr_debug_enable); - -#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 - - INIT_DELAYED_WORK(&ts->gsl_monitor_work, gsl_monitor_worker); - gsl_monitor_workqueue = - create_singlethread_workqueue("gsl_monitor_workqueue"); - queue_delayed_work(gsl_monitor_workqueue, &ts->gsl_monitor_work, 1000); -#endif - -#ifdef HAVE_CLICK_TIMER - sema_init(&my_sem, 1); - INIT_WORK(&ts->click_work, click_timer_worker); - gsl_timer_workqueue = create_singlethread_workqueue("click_timer"); - queue_work(gsl_timer_workqueue, &ts->click_work); -#endif - -#ifdef TPD_PROC_DEBUG -#if 0 - 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; - } -#else - i2c_client = client; - proc_create(GSL_CONFIG_PROC_FILE, 0666, NULL, &gsl_seq_fops); -#endif - gsl_proc_flag = 0; -#endif - //disable_irq_nosync(->irq); - printk("[GSLX680] End %s\n", __func__); - - return 0; - - porbe_err_ret: - return rc; -} - -static int gsl_ts_remove(struct i2c_client *client) -{ - struct gsl_ts *ts = i2c_get_clientdata(client); - -#ifdef CONFIG_HAS_EARLYSUSPEND - unregister_early_suspend(&ts->early_suspend); -#endif - -#ifdef GSL_MONITOR - cancel_delayed_work_sync(&ts->gsl_monitor_work); - destroy_workqueue(gsl_monitor_workqueue); -#endif - -#ifdef HAVE_CLICK_TIMER - cancel_work_sync(&ts->click_work); - destroy_workqueue(gsl_timer_workqueue); -#endif - - device_init_wakeup(&client->dev, 0); - cancel_work_sync(&ts->work); - free_irq(ts->client->irq, ts); - destroy_workqueue(ts->wq); - //device_remove_file(&ts->input->dev, &dev_attr_debug_enable); - - 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), - }, -#if 0 //ndef 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; - ret = i2c_add_driver(&gsl_ts_driver); - return ret; -} -static void __exit gsl_ts_exit(void) -{ - i2c_del_driver(&gsl_ts_driver); - return; -} - -module_init(gsl_ts_init); -module_exit(gsl_ts_exit); - -MODULE_LICENSE("GPL"); -MODULE_DESCRIPTION("GSLX680 touchscreen controller driver"); -MODULE_AUTHOR("Guan Yuwei, guanyuwei@basewin.com"); -MODULE_ALIAS("platform:gsl_ts"); diff --git a/drivers/input/touchscreen/gslx680.h b/drivers/input/touchscreen/gslx680.h deleted file mode 100644 index 45339e5ba2ce..000000000000 --- a/drivers/input/touchscreen/gslx680.h +++ /dev/null @@ -1,5403 +0,0 @@ -/* - * drivers/input/touchscreen/gslX680.h - * - * Copyright (c) 2012 Shanghai Basewin - * Guan Yuwei - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef _GSLX680_H_ -#define _GSLX680_H_ - - -#define SCREEN_MAX_X 1920 -#define SCREEN_MAX_Y 1080 - -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_versions[]= - { - 0xa55a0003,//°æ±¾ - 0x168045,//оƬÐͺŠ- 0,//¿Õ - 0,0,0,0,//·½°¸¹«Ë¾0-3 - 0,0,0,0,//ÏîÄ¿Ãû³Æ4-7 - 0,0,0,0,//ƽ̨8-11 - 0,0,0,0,//TP³§12-15 - 0,//TP³ß´ç16 - - 0,0,0,0,//°æ±¾£¬ÐÕÃû1£¬ÐÕÃû2£¬ÈÕÆÚ17-20 - 0,0,0,0, - 0,0,0,0, - 0,0,0,0, - 0,0,0,0, - - 0,0,0,0, - 0,0,0,0, - 0,0,0,0, - 0,0,0,0, - 0,0,0,0, - } - */ - -unsigned int gsl_config_data_id[] = -{ - 0x852b6a, - 0x200, - 0,0, - 0, - 0,0,0, - 0,0,0,0,0,0,0,0xd2c687c4, - - - 0x100,0x5,0x70007,0x70007,0x7800438,0,0x5100,0x8e00, - 0,0x320014,0,0,0,0,0,0, - 0x4,0x4000,0x4000,0x10120001,0x101c0002,0,0,0x2020000, - 0x1b6db688,0,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, - 0x1c001c0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,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 const 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,0xf8010023}, - {0x68,0x00066414}, - {0x6c,0x1001020a}, - {0x70,0x00000fff}, - {0x74,0x00000000}, - {0x78,0x00000000}, - {0x7c,0x07070707}, - {0xf0,0x3}, - {0x00,0x0e42ee0e}, - {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,0x00000014}, - {0x60,0x00000000}, - {0x64,0x1a0ac00a}, - {0x68,0x00000002}, - {0x6c,0x0000000f}, - {0x70,0x00000000}, - {0x74,0x00000000}, - {0x78,0xffffffec}, - {0x7c,0x00000000}, - {0xf0,0x4}, - {0x00,0x00000000}, - {0x04,0x0001660b}, - {0x08,0x00000064}, - {0x0c,0x00000000}, - {0x10,0x0000ff06}, - {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,0x80808080}, - {0x10,0x0000000a}, - {0x14,0x00000000}, - {0x18,0x00000fff}, - {0x1c,0x10120001}, - {0x20,0x101c0002}, - {0x24,0x00000000}, - {0x28,0x00000000}, - {0x2c,0x00000000}, - {0x30,0x80808080}, - {0x34,0x80808080}, - {0x38,0x80808080}, - {0x3c,0x80808080}, - {0x40,0x80808080}, - {0x44,0x80808080}, - {0x48,0x80808080}, - {0x4c,0x80808000}, - {0x50,0x00000000}, - {0x54,0x00000000}, - {0x58,0x00000000}, - {0x5c,0x00000000}, - {0x60,0x00000000}, - {0x64,0x00000000}, - {0x68,0x00000000}, - {0x6c,0x00000000}, - {0x70,0x00000000}, - {0x74,0x00000220}, - {0x78,0x00000007}, - {0x7c,0x00000007}, - {0xf0,0x6}, - {0x00,0x00000007}, - {0x04,0x00000000}, - {0x08,0x00000007}, - {0x0c,0x04030402}, - {0x10,0x00000032}, - {0x14,0x1414010a}, - {0x18,0x00000000}, - {0x1c,0x00000001}, - {0x20,0x00002904}, - {0x24,0x00000780}, - {0x28,0x00000438}, - {0x2c,0xf8010023}, - {0x30,0xf8010005}, - {0x34,0x00000007}, - {0x38,0x00000003}, - {0x3c,0x00000fff}, - {0x40,0x80000000}, - {0x44,0x00030003}, - {0x48,0x00000fff}, - {0x4c,0x04040402}, - {0x50,0x00030002}, - {0x54,0x00000e10}, - {0x58,0x000a012c}, - {0x5c,0x1b6db688}, - {0x60,0x20100804}, - {0x64,0x00000000}, - {0x68,0x00000000}, - {0x6c,0x00000000}, - {0x70,0x00000000}, - {0x74,0x000000c8}, - {0x78,0x000a003c}, - {0x7c,0x00000000}, - {0xf0,0x7}, - {0x00,0x05000403}, - {0x04,0x07020601}, - {0x08,0x0508040a}, - {0x0c,0x07110610}, - {0x10,0x09130812}, - {0x14,0x00123456}, - {0x18,0x00000000}, - {0x1c,0x000a0078}, - {0x20,0x00001081}, - {0x24,0xff080010}, - {0x28,0xff080120}, - {0x2c,0xff080140}, - {0x30,0xff080160}, - {0x34,0x000000dc}, - {0x38,0x000000b7}, - {0x3c,0x00000092}, - {0x40,0x00000000}, - {0x44,0x00780078}, - {0x48,0x00000100}, - {0x4c,0x320f0f03}, - {0x50,0x00000000}, - {0x54,0x00000003}, - {0x58,0x00020000}, - {0x5c,0x00040003}, - {0x60,0x00060005}, - {0x64,0x00000000}, - {0x68,0x00020000}, - {0x6c,0x00010000}, - {0x70,0x00010000}, - {0x74,0x00000000}, - {0x78,0x00012345}, - {0x7c,0x006789ab}, - {0xf0,0x8}, - {0x00,0x026f028f}, - {0x04,0x02af22cf}, - {0x08,0x22ef430f}, - {0x0c,0x532f034f}, - {0x10,0x01f301f4}, - {0x14,0x01f501f6}, - {0x18,0x01f701f8}, - {0x1c,0x01f901fa}, - {0x20,0x01f401f5}, - {0x24,0x01f601f7}, - {0x28,0x01f801f9}, - {0x2c,0x01fa0000}, - {0x30,0x00000000}, - {0x34,0x00000000}, - {0x38,0x00000000}, - {0x3c,0x00000000}, - {0x40,0x02040600}, - {0x44,0x00000000}, - {0x48,0x00000000}, - {0x4c,0x01030507}, - {0x50,0x00000000}, - {0x54,0x00000000}, - {0x58,0x00040003}, - {0x5c,0x00000006}, - {0x60,0x0000012c}, - {0x64,0x00000201}, - {0x68,0x00000808}, - {0x6c,0x006600cd}, - {0x70,0x000000cd}, - {0x74,0x0000005d}, - {0x78,0x00000000}, - {0x7c,0x00000008}, - {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,0x00640190}, - {0x44,0x00640064}, - {0x48,0x012c0064}, - {0x4c,0x0050012c}, - {0x50,0x00500050}, - {0x54,0x00c80050}, - {0x58,0x00c800c8}, - {0x5c,0x003700c8}, - {0x60,0x00640000}, - {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,0x00002b08}, - {0x08,0x00002b7c}, - {0x0c,0x00002bfc}, - {0x10,0x00002d30}, - {0x14,0x00002e2c}, - {0x18,0x00002fe0}, - {0x1c,0x00003170}, - {0x20,0x000032c0}, - {0x24,0x0000348c}, - {0x28,0x000035fc}, - {0x2c,0x000037ac}, - {0x30,0x00003954}, - {0x34,0x00003a58}, - {0x38,0x00003c80}, - {0x3c,0x00003e54}, - {0x40,0x000041d4}, - {0x44,0x000042dc}, - {0x48,0x00004548}, - {0x4c,0x0000465c}, - {0x50,0x000046d4}, - {0x54,0x0000474c}, - {0x58,0x000048e4}, - {0x5c,0x00004bcc}, - {0x60,0x00004f68}, - {0x64,0x00005050}, - {0x68,0x000050b4}, - {0x6c,0x000051e8}, - {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,0x000024b0}, - {0x44,0x00000000}, - {0x48,0x00000000}, - {0x4c,0x00002530}, - {0x50,0x000025f0}, - {0x54,0x00000000}, - {0x58,0x000026a0}, - {0x5c,0x00000000}, - {0x60,0x00000000}, - {0x64,0x000027d0}, - {0x68,0x00000000}, - {0x6c,0x00000000}, - {0x70,0x000028a0}, - {0x74,0x00002940}, - {0x78,0x000052a0}, - {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,0xbc102cfc}, - {0x40,0x9c102cf8}, - {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,0x82106053}, - {0x78,0x03296945}, - {0x7c,0x82106288}, - {0xf0,0x1a}, - {0x00,0x9de3bf98}, - {0x04,0x40000010}, - {0x08,0x01000000}, - {0x0c,0x40000007}, - {0x10,0x01000000}, - {0x14,0x4000031b}, - {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,0x9de3bf18}, - {0x58,0xb2067fff}, - {0x5c,0x96100018}, - {0x60,0xf227bf7c}, - {0x64,0xc027bf78}, - {0x68,0x98102000}, - {0x6c,0xb007bff8}, - {0x70,0xd4063f80}, - {0x74,0xda063f84}, - {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,0xc2263f84}, - {0x2c,0xd4263f80}, - {0x30,0x832f2002}, - {0x34,0xb0062008}, - {0x38,0xde22c001}, - {0x3c,0xba072001}, - {0x40,0xfa263f80}, - {0x44,0xda263f84}, - {0x48,0x98032002}, - {0x4c,0x80a33fff}, - {0x50,0x34bfffc9}, - {0x54,0xd4063f80}, - {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,0x02800027}, - {0x14,0x01000000}, - {0x18,0x80a06006}, - {0x1c,0x0280003c}, - {0x20,0x01000000}, - {0x24,0x80a06015}, - {0x28,0x02800054}, - {0x2c,0x01000000}, - {0x30,0x80a0602a}, - {0x34,0x02800090}, - {0x38,0x01000000}, - {0x3c,0x80a06018}, - {0x40,0x02800085}, - {0x44,0x01000000}, - {0x48,0x073fc180}, - {0x4c,0x8610e03c}, - {0x50,0x05169680}, - {0x54,0x84004002}, - {0x58,0xc420c000}, - {0x5c,0x073fc000}, - {0x60,0x8610e020}, - {0x64,0x84102001}, - {0x68,0xc420c000}, - {0x6c,0x0500000c}, - {0x70,0x01000000}, - {0x74,0x01000000}, - {0x78,0x8480bfff}, - {0x7c,0x12bffffe}, - {0xf0,0x21}, - {0x00,0x01000000}, - {0x04,0x01000000}, - {0x08,0x073fc000}, - {0x0c,0x8610e020}, - {0x10,0x84102000}, - {0x14,0xc420c000}, - {0x18,0x01000000}, - {0x1c,0x01000000}, - {0x20,0x81c44000}, - {0x24,0x81cc8000}, - {0x28,0x01000000}, - {0x2c,0xa7500000}, - {0x30,0xa92ce002}, - {0x34,0xa734e001}, - {0x38,0xa614c014}, - {0x3c,0xa60ce007}, - {0x40,0x81900000}, - {0x44,0x01000000}, - {0x48,0x01000000}, - {0x4c,0x81e00000}, - {0x50,0xe03ba000}, - {0x54,0xe43ba008}, - {0x58,0xe83ba010}, - {0x5c,0xec3ba018}, - {0x60,0xf03ba020}, - {0x64,0xf43ba028}, - {0x68,0xf83ba030}, - {0x6c,0xfc3ba038}, - {0x70,0x81e80000}, - {0x74,0x8194c000}, - {0x78,0x01000000}, - {0x7c,0x01000000}, - {0xf0,0x22}, - {0x00,0x81c44000}, - {0x04,0x81cc8000}, - {0x08,0x01000000}, - {0x0c,0xa7500000}, - {0x10,0xa934e002}, - {0x14,0xa72ce001}, - {0x18,0xa614c014}, - {0x1c,0xa60ce007}, - {0x20,0x81900000}, - {0x24,0x01000000}, - {0x28,0x01000000}, - {0x2c,0x81e80000}, - {0x30,0x81e80000}, - {0x34,0xe01ba000}, - {0x38,0xe41ba008}, - {0x3c,0xe81ba010}, - {0x40,0xec1ba018}, - {0x44,0xf01ba020}, - {0x48,0xf41ba028}, - {0x4c,0xf81ba030}, - {0x50,0xfc1ba038}, - {0x54,0x81e00000}, - {0x58,0x81e00000}, - {0x5c,0x8194c000}, - {0x60,0x01000000}, - {0x64,0x01000000}, - {0x68,0x81c44000}, - {0x6c,0x81cc8000}, - {0x70,0x01000000}, - {0x74,0x01000000}, - {0x78,0x82102010}, - {0x7c,0x273fc0c0}, - {0xf0,0x23}, - {0x00,0xa614e010}, - {0x04,0xc224c000}, - {0x08,0x01000000}, - {0x0c,0x033fc0c0}, - {0x10,0x82106004}, - {0x14,0xa6102000}, - {0x18,0xe6204000}, - {0x1c,0x01000000}, - {0x20,0x01000000}, - {0x24,0x01000000}, - {0x28,0xa6102020}, - {0x2c,0x83480000}, - {0x30,0x82104013}, - {0x34,0x81884000}, - {0x38,0x01000000}, - {0x3c,0x4000044d}, - {0x40,0x01000000}, - {0x44,0x01000000}, - {0x48,0x01000000}, - {0x4c,0xa7500000}, - {0x50,0xa934e002}, - {0x54,0xa72ce001}, - {0x58,0xa614c014}, - {0x5c,0xa60ce007}, - {0x60,0x81900000}, - {0x64,0x01000000}, - {0x68,0x81e80000}, - {0x6c,0xe01ba000}, - {0x70,0xe41ba008}, - {0x74,0xe81ba010}, - {0x78,0xec1ba018}, - {0x7c,0xf01ba020}, - {0xf0,0x24}, - {0x00,0xf41ba028}, - {0x04,0xf81ba030}, - {0x08,0xfc1ba038}, - {0x0c,0x81e00000}, - {0x10,0x8194c000}, - {0x14,0x01000000}, - {0x18,0xa6102020}, - {0x1c,0x83480000}, - {0x20,0x82284013}, - {0x24,0x81884000}, - {0x28,0x01000000}, - {0x2c,0x033fc0c0}, - {0x30,0x82106004}, - {0x34,0xa6103fff}, - {0x38,0xe6204000}, - {0x3c,0x01000000}, - {0x40,0x01000000}, - {0x44,0x01000000}, - {0x48,0x81c44000}, - {0x4c,0x81cc8000}, - {0x50,0x01000000}, - {0x54,0x82102080}, - {0x58,0x273fc0c0}, - {0x5c,0xa614e010}, - {0x60,0xc224c000}, - {0x64,0x01000000}, - {0x68,0x81c44000}, - {0x6c,0x81cc8000}, - {0x70,0x01000000}, - {0x74,0x81c48000}, - {0x78,0x81cca004}, - {0x7c,0x01000000}, - {0xf0,0x25}, - {0x00,0x1b3fc140}, - {0x04,0x82136048}, - {0x08,0xc2104000}, - {0x0c,0x82006003}, - {0x10,0x82086003}, - {0x14,0x83286002}, - {0x18,0x9a136080}, - {0x1c,0x81c3e008}, - {0x20,0xd000400d}, - {0x24,0x94102000}, - {0x28,0x96102000}, - {0x2c,0x832ae002}, - {0x30,0xd20063a4}, - {0x34,0x98102000}, - {0x38,0x832b2002}, - {0x3c,0x9b2aa002}, - {0x40,0xda02000d}, - {0x44,0x98032001}, - {0x48,0xda224001}, - {0x4c,0x80a32005}, - {0x50,0x04bffffa}, - {0x54,0x9402a001}, - {0x58,0x9602e001}, - {0x5c,0x80a2e003}, - {0x60,0x04bffff4}, - {0x64,0x832ae002}, - {0x68,0x81c3e008}, - {0x6c,0x01000000}, - {0x70,0x82020008}, - {0x74,0x82004008}, - {0x78,0x9b326002}, - {0x7c,0x82004001}, - {0xf0,0x26}, - {0x00,0x8200400d}, - {0x04,0x83286002}, - {0x08,0x920a6003}, - {0x0c,0x932a6003}, - {0x10,0xd00065b0}, - {0x14,0x91320009}, - {0x18,0x81c3e008}, - {0x1c,0x900a20ff}, - {0x20,0x9a020008}, - {0x24,0x9a034008}, - {0x28,0x97326002}, - {0x2c,0x9a03400d}, - {0x30,0x9a03400b}, - {0x34,0x920a6003}, - {0x38,0x9b2b6002}, - {0x3c,0x932a6003}, - {0x40,0x821020ff}, - {0x44,0xd80365b0}, - {0x48,0x83284009}, - {0x4c,0x822b0001}, - {0x50,0x952a8009}, - {0x54,0x8210400a}, - {0x58,0xc22365b0}, - {0x5c,0x912a2002}, - {0x60,0xda0223a4}, - {0x64,0x972ae002}, - {0x68,0x81c3e008}, - {0x6c,0xc223400b}, - {0x70,0x82102005}, - {0x74,0x1b3fc200}, - {0x78,0x82204008}, - {0x7c,0x9a136008}, - {0xf0,0x27}, - {0x00,0x83286002}, - {0x04,0xd0034000}, - {0x08,0x91320001}, - {0x0c,0x81c3e008}, - {0x10,0x900a200f}, - {0x14,0x9de3bf58}, - {0x18,0xa12e2002}, - {0x1c,0xda1423da}, - {0x20,0xd61423d8}, - {0x24,0xc200247c}, - {0x28,0xb022c00d}, - {0x2c,0x825b4001}, - {0x30,0xb21e6001}, - {0x34,0x92862001}, - {0x38,0x0280000c}, - {0x3c,0x9a004019}, - {0x40,0xb0100009}, - {0x44,0x9807bfb8}, - {0x48,0x8203400d}, - {0x4c,0xc2168001}, - {0x50,0xc2230000}, - {0x54,0xc200247c}, - {0x58,0x9a034001}, - {0x5c,0xb0863fff}, - {0x60,0x12bffffa}, - {0x64,0x98032004}, - {0x68,0x7ffffe7b}, - {0x6c,0x9007bfb8}, - {0x70,0xda1423ea}, - {0x74,0xd61423e8}, - {0x78,0x80a3400b}, - {0x7c,0x92102000}, - {0xf0,0x28}, - {0x00,0x1880000b}, - {0x04,0xb010000d}, - {0x08,0x832b6002}, - {0x0c,0x8200401e}, - {0x10,0x98007fb8}, - {0x14,0xc2030000}, - {0x18,0xb0062001}, - {0x1c,0x92024001}, - {0x20,0x80a6000b}, - {0x24,0x08bffffc}, - {0x28,0x98032004}, - {0x2c,0xb022c00d}, - {0x30,0xb0062001}, - {0x34,0x81800000}, - {0x38,0x01000000}, - {0x3c,0x01000000}, - {0x40,0x01000000}, - {0x44,0xb0724018}, - {0x48,0x81c7e008}, - {0x4c,0x81e80000}, - {0x50,0x033fc200}, - {0x54,0x961060a0}, - {0x58,0x98102000}, - {0x5c,0x832b2002}, - {0x60,0x9a03000c}, - {0x64,0xda136400}, - {0x68,0x98032001}, - {0x6c,0x80a3200f}, - {0x70,0x04bffffb}, - {0x74,0xda20400b}, - {0x78,0x81c3e008}, - {0x7c,0x01000000}, - {0xf0,0x29}, - {0x00,0x9de3bf98}, - {0x04,0xc200247c}, - {0x08,0x83306001}, - {0x0c,0x80a60001}, - {0x10,0x1a800006}, - {0x14,0x90100018}, - {0x18,0x7fffffb6}, - {0x1c,0x01000000}, - {0x20,0x10800006}, - {0x24,0xb0020008}, - {0x28,0x7fffffb2}, - {0x2c,0x90260001}, - {0x30,0x90020008}, - {0x34,0xb0022001}, - {0x38,0x81c7e008}, - {0x3c,0x81e80000}, - {0x40,0x9de3bf98}, - {0x44,0xa8102000}, - {0x48,0xc20023d4}, - {0x4c,0x80a50001}, - {0x50,0x1a800057}, - {0x54,0xe2002348}, - {0x58,0xa4102000}, - {0x5c,0xc200247c}, - {0x60,0x80a48001}, - {0x64,0x3a80004e}, - {0x68,0xa8052001}, - {0x6c,0x7fffffe5}, - {0x70,0x90100012}, - {0x74,0xaa100008}, - {0x78,0x90100014}, - {0x7c,0x7fffff7d}, - {0xf0,0x2a}, - {0x00,0x92100015}, - {0x04,0x80a62000}, - {0x08,0x12800004}, - {0x0c,0xa0100008}, - {0x10,0x10800016}, - {0x14,0xa0102000}, - {0x18,0x80a62009}, - {0x1c,0x18800011}, - {0x20,0x80a62007}, - {0x24,0x7fffff57}, - {0x28,0x01000000}, - {0x2c,0x94100008}, - {0x30,0x90100014}, - {0x34,0x7fffff98}, - {0x38,0x92100012}, - {0x3c,0x80a20011}, - {0x40,0x04800007}, - {0x44,0xa6100008}, - {0x48,0x9a102008}, - {0x4c,0x9a234018}, - {0x50,0x82102001}, - {0x54,0x8328400d}, - {0x58,0xa02c0001}, - {0x5c,0x80a62007}, - {0x60,0x18800008}, - {0x64,0x80a62008}, - {0x68,0x9a102007}, - {0x6c,0x9a234018}, - {0x70,0x82102001}, - {0x74,0x8328400d}, - {0x78,0x10800023}, - {0x7c,0xa0140001}, - {0xf0,0x2b}, - {0x00,0x1280000a}, - {0x04,0x821e2009}, - {0x08,0x80a420fe}, - {0x0c,0x24800002}, - {0x10,0xa0042001}, - {0x14,0x03000019}, - {0x18,0x9b2ca002}, - {0x1c,0x82106080}, - {0x20,0x10800019}, - {0x24,0xe6234001}, - {0x28,0x80a00001}, - {0x2c,0x9a603fff}, - {0x30,0x80a420fe}, - {0x34,0x04800003}, - {0x38,0x82102001}, - {0x3c,0x82102000}, - {0x40,0x808b4001}, - {0x44,0x02800011}, - {0x48,0x92100015}, - {0x4c,0x03000019}, - {0x50,0x9b2ca002}, - {0x54,0x82106080}, - {0x58,0xc2034001}, - {0x5c,0x80a04011}, - {0x60,0x18800003}, - {0x64,0x9a204011}, - {0x68,0x9a244001}, - {0x6c,0x80a4c011}, - {0x70,0x14800003}, - {0x74,0x8224c011}, - {0x78,0x82244013}, - {0x7c,0x80a34001}, - {0xf0,0x2c}, - {0x00,0xa0642000}, - {0x04,0x92100015}, - {0x08,0x94100010}, - {0x0c,0x7fffff45}, - {0x10,0x90100014}, - {0x14,0x10bfffb2}, - {0x18,0xa404a001}, - {0x1c,0xc20023d4}, - {0x20,0x80a50001}, - {0x24,0x0abfffae}, - {0x28,0xa4102000}, - {0x2c,0x81c7e008}, - {0x30,0x81e80000}, - {0x34,0x98102000}, - {0x38,0x9610201e}, - {0x3c,0x80a22000}, - {0x40,0x12800003}, - {0x44,0x8210000c}, - {0x48,0x8222c00c}, - {0x4c,0x83286002}, - {0x50,0xda006480}, - {0x54,0x80a37ff0}, - {0x58,0x02800006}, - {0x5c,0x98032002}, - {0x60,0xc2006484}, - {0x64,0x80a3201f}, - {0x68,0x04bffff5}, - {0x6c,0xc2234000}, - {0x70,0x81c3e008}, - {0x74,0x01000000}, - {0x78,0x9de3bf98}, - {0x7c,0xda002508}, - {0xf0,0x2d}, - {0x00,0x033fc000}, - {0x04,0x9a0b4001}, - {0x08,0x173fc180}, - {0x0c,0x03202020}, - {0x10,0x82106080}, - {0x14,0x9812e038}, - {0x18,0xc2230000}, - {0x1c,0x03168000}, - {0x20,0x80a34001}, - {0x24,0xc022c000}, - {0x28,0xa6102000}, - {0x2c,0x1280000b}, - {0x30,0xa8102000}, - {0x34,0x0300003f}, - {0x38,0xda002548}, - {0x3c,0x821063ff}, - {0x40,0x9a0b4001}, - {0x44,0xd8002508}, - {0x48,0x033fffc0}, - {0x4c,0x980b0001}, - {0x50,0x9a13400c}, - {0x54,0xda202548}, - {0x58,0x80a62000}, - {0x5c,0x16800027}, - {0x60,0x1b296956}, - {0x64,0x1b3fc040}, - {0x68,0xc2002548}, - {0x6c,0x8208400d}, - {0x70,0x1b168040}, - {0x74,0x80a0400d}, - {0x78,0x22800002}, - {0x7c,0xa6102001}, - {0xf0,0x2e}, - {0x00,0xda002654}, - {0x04,0xc20021dc}, - {0x08,0x80a34001}, - {0x0c,0x1a80001b}, - {0x10,0x1b296956}, - {0x14,0x031696a9}, - {0x18,0xda00250c}, - {0x1c,0x821061a5}, - {0x20,0x80a34001}, - {0x24,0x02800006}, - {0x28,0x03296956}, - {0x2c,0x8210625a}, - {0x30,0x80a34001}, - {0x34,0x12800011}, - {0x38,0x1b296956}, - {0x3c,0x11000018}, - {0x40,0x92122340}, - {0x44,0x40000187}, - {0x48,0x90122200}, - {0x4c,0x03000019}, - {0x50,0x96106200}, - {0x54,0xa8102001}, - {0x58,0x98102000}, - {0x5c,0x9b2b2002}, - {0x60,0x98032001}, - {0x64,0xc20365b0}, - {0x68,0x80a32017}, - {0x6c,0x08bffffc}, - {0x70,0xc223400b}, - {0x74,0x1b296956}, - {0x78,0x80a00013}, - {0x7c,0x82380018}, - {0xf0,0x2f}, - {0x00,0xa413625a}, - {0x04,0x90402000}, - {0x08,0x8330601f}, - {0x0c,0x1b1696a9}, - {0x10,0xa21361a5}, - {0x14,0x9e104008}, - {0x18,0xd200254c}, - {0x1c,0xe0002548}, - {0x20,0x98102500}, - {0x24,0xc200250c}, - {0x28,0x96033a50}, - {0x2c,0x941b250c}, - {0x30,0x80a04012}, - {0x34,0x02800007}, - {0x38,0x9a184011}, - {0x3c,0x80a0000d}, - {0x40,0x82603fff}, - {0x44,0x80904008}, - {0x48,0x0280000a}, - {0x4c,0x80a3e000}, - {0x50,0x80a2e0e0}, - {0x54,0x9a402000}, - {0x58,0x80a0000a}, - {0x5c,0x82603fff}, - {0x60,0x80934001}, - {0x64,0x3280000a}, - {0x68,0x98032004}, - {0x6c,0x80a3e000}, - {0x70,0x02800005}, - {0x74,0x82033970}, - {0x78,0x80a0603f}, - {0x7c,0x28800004}, - {0xf0,0x30}, - {0x00,0x98032004}, - {0x04,0xc0230000}, - {0x08,0x98032004}, - {0x0c,0x80a32867}, - {0x10,0x28bfffe6}, - {0x14,0xc200250c}, - {0x18,0x80a62000}, - {0x1c,0x06800006}, - {0x20,0x0300003f}, - {0x24,0x821063ff}, - {0x28,0x820a4001}, - {0x2c,0x10800005}, - {0x30,0xc220254c}, - {0x34,0xc21022d4}, - {0x38,0x83286010}, - {0x3c,0xc2202690}, - {0x40,0xc20023c8}, - {0x44,0xda002548}, - {0x48,0x83306012}, - {0x4c,0x82086200}, - {0x50,0x9a0b7dff}, - {0x54,0x9a134001}, - {0x58,0xd800254c}, - {0x5c,0xd4002334}, - {0x60,0x033fc200}, - {0x64,0x9402a001}, - {0x68,0x92050014}, - {0x6c,0x980b3ffd}, - {0x70,0x82106054}, - {0x74,0xc2004000}, - {0x78,0x98130009}, - {0x7c,0x9732a001}, - {0xf0,0x31}, - {0x00,0x9602800b}, - {0x04,0xd820254c}, - {0x08,0x80a06114}, - {0x0c,0xd620258c}, - {0x10,0xda202548}, - {0x14,0xd4202554}, - {0x18,0xd4202588}, - {0x1c,0xc2002344}, - {0x20,0x1280000a}, - {0x24,0x99342018}, - {0x28,0x820860ff}, - {0x2c,0x8258605a}, - {0x30,0x82006040}, - {0x34,0x83306007}, - {0x38,0x9b286010}, - {0x3c,0x9a034001}, - {0x40,0x10800003}, - {0x44,0xda202570}, - {0x48,0xc2202570}, - {0x4c,0x173fc200}, - {0x50,0xda002570}, - {0x54,0x8212e030}, - {0x58,0xda204000}, - {0x5c,0x80a3205a}, - {0x60,0x1280000a}, - {0x64,0xda20257c}, - {0x68,0x1b00003f}, - {0x6c,0xc2002548}, - {0x70,0x9a1363ff}, - {0x74,0x8208400d}, - {0x78,0x1b3fffc0}, - {0x7c,0x9a0c000d}, - {0xf0,0x32}, - {0x00,0x8210400d}, - {0x04,0xc2202548}, - {0x08,0x80a4e001}, - {0x0c,0x1280000c}, - {0x10,0x03296956}, - {0x14,0xc2002548}, - {0x18,0x83306012}, - {0x1c,0x80886001}, - {0x20,0x32800010}, - {0x24,0x82102029}, - {0x28,0x9a12e074}, - {0x2c,0xc2002330}, - {0x30,0xc2234000}, - {0x34,0x1080000b}, - {0x38,0x82102029}, - {0x3c,0xda00250c}, - {0x40,0x8210625a}, - {0x44,0x80a34001}, - {0x48,0x1280000b}, - {0x4c,0x01000000}, - {0x50,0xc200254c}, - {0x54,0x80886002}, - {0x58,0x12800007}, - {0x5c,0x82102015}, - {0x60,0xc2202500}, - {0x64,0x7ffffe50}, - {0x68,0x901025b0}, - {0x6c,0x7ffffeb9}, - {0x70,0x81e80000}, - {0x74,0x01000000}, - {0x78,0x81c7e008}, - {0x7c,0x81e80000}, - {0xf0,0x33}, - {0x00,0x9de3bf98}, - {0x04,0x4000023f}, - {0x08,0x90102000}, - {0x0c,0x133fc200}, - {0x10,0xe80021fc}, - {0x14,0xc2002298}, - {0x18,0x98126070}, - {0x1c,0xc2230000}, - {0x20,0x033fc000}, - {0x24,0xd8002338}, - {0x28,0x82106030}, - {0x2c,0xd8204000}, - {0x30,0xc200232c}, - {0x34,0x90126074}, - {0x38,0xc2220000}, - {0x3c,0x1b3fc140}, - {0x40,0x0300003f}, - {0x44,0xa013608c}, - {0x48,0x9e136058}, - {0x4c,0xa213605c}, - {0x50,0xa4136080}, - {0x54,0xa6136084}, - {0x58,0x821063ff}, - {0x5c,0x15000017}, - {0x60,0xc223c000}, - {0x64,0x9412a380}, - {0x68,0x17000018}, - {0x6c,0x9a136088}, - {0x70,0xd4234000}, - {0x74,0x9612e0c0}, - {0x78,0x03200040}, - {0x7c,0xd6240000}, - {0xf0,0x34}, - {0x00,0x82106101}, - {0x04,0xc2224000}, - {0x08,0x033fc0c0}, - {0x0c,0x82106004}, - {0x10,0xc0204000}, - {0x14,0xc0244000}, - {0x18,0xd4248000}, - {0x1c,0xd624c000}, - {0x20,0x80a52000}, - {0x24,0xc2002374}, - {0x28,0xd600247c}, - {0x2c,0x02800006}, - {0x30,0xd40022f8}, - {0x34,0x82584014}, - {0x38,0x82006800}, - {0x3c,0x10800003}, - {0x40,0xa130600c}, - {0x44,0xa0100001}, - {0x48,0x1b3fc140}, - {0x4c,0x98136040}, - {0x50,0xd0030000}, - {0x54,0x9732e001}, - {0x58,0x825ac00a}, - {0x5c,0x900a3800}, - {0x60,0x90120001}, - {0x64,0xd0230000}, - {0x68,0x9a136004}, - {0x6c,0xd0034000}, - {0x70,0x900a3fe0}, - {0x74,0x9012000b}, - {0x78,0x193fc200}, - {0x7c,0xd0234000}, - {0xf0,0x35}, - {0x00,0x94132080}, - {0x04,0xd0028000}, - {0x08,0x92132054}, - {0x0c,0x900a3fe0}, - {0x10,0xc2024000}, - {0x14,0x9012000b}, - {0x18,0x960861ff}, - {0x1c,0x80a2e114}, - {0x20,0x1280000d}, - {0x24,0xd0228000}, - {0x28,0x82102006}, - {0x2c,0xc2228000}, - {0x30,0x03009051}, - {0x34,0x9a132058}, - {0x38,0x82106040}, - {0x3c,0xc2234000}, - {0x40,0x80a52000}, - {0x44,0x12800004}, - {0x48,0xd6224000}, - {0x4c,0x825c2349}, - {0x50,0xa130600a}, - {0x54,0x233fc200}, - {0x58,0xda0023f8}, - {0x5c,0x82146008}, - {0x60,0xda204000}, - {0x64,0x9814600c}, - {0x68,0x7ffffe5a}, - {0x6c,0xda230000}, - {0x70,0x9814607c}, - {0x74,0xd0030000}, - {0x78,0x033ff000}, - {0x7c,0x902a0001}, - {0xf0,0x36}, - {0x00,0xd0230000}, - {0x04,0x033fc1c0}, - {0x08,0xd8002340}, - {0x0c,0x82106064}, - {0x10,0xd8204000}, - {0x14,0x1b3fc140}, - {0x18,0x0300007f}, - {0x1c,0x94136010}, - {0x20,0x821063ff}, - {0x24,0x92136030}, - {0x28,0x1707ffc0}, - {0x2c,0xc2228000}, - {0x30,0x9a136014}, - {0x34,0xd6224000}, - {0x38,0x80a42000}, - {0x3c,0x0280000f}, - {0x40,0xd6234000}, - {0x44,0x932c2010}, - {0x48,0x82042001}, - {0x4c,0x9b2c2004}, - {0x50,0x83286010}, - {0x54,0x9a02400d}, - {0x58,0x98146084}, - {0x5c,0xda230000}, - {0x60,0x82004010}, - {0x64,0x96146088}, - {0x68,0x82006002}, - {0x6c,0x9414608c}, - {0x70,0xd222c000}, - {0x74,0xc2228000}, - {0x78,0xc2002174}, - {0x7c,0x80a06000}, - {0xf0,0x37}, - {0x00,0x02800007}, - {0x04,0x173fc080}, - {0x08,0xc2082174}, - {0x0c,0xda082177}, - {0x10,0x9812e008}, - {0x14,0xc2230000}, - {0x18,0xda22c000}, - {0x1c,0x7ffffeb7}, - {0x20,0x90103fff}, - {0x24,0x7ffffea4}, - {0x28,0x90102001}, - {0x2c,0x1b3fc0c0}, - {0x30,0x82103fff}, - {0x34,0x9a136004}, - {0x38,0xc2234000}, - {0x3c,0x03200040}, - {0x40,0xc2244000}, - {0x44,0x81c7e008}, - {0x48,0x81e80000}, - {0x4c,0x9de3bf98}, - {0x50,0xc2002508}, - {0x54,0x808860ff}, - {0x58,0x02800015}, - {0x5c,0x1b3fc180}, - {0x60,0x82102001}, - {0x64,0x9a13603c}, - {0x68,0xc2234000}, - {0x6c,0xc2002508}, - {0x70,0x820860ff}, - {0x74,0x80a04018}, - {0x78,0x1280000b}, - {0x7c,0x033fc180}, - {0xf0,0x38}, - {0x00,0x7ffffc6e}, - {0x04,0x01000000}, - {0x08,0xda002508}, - {0x0c,0x033fc040}, - {0x10,0x9a0b60ff}, - {0x14,0x8210600c}, - {0x18,0xc0204000}, - {0x1c,0x10bffff7}, - {0x20,0x80a34018}, - {0x24,0x8210603c}, - {0x28,0xc0204000}, - {0x2c,0x81c7e008}, - {0x30,0x81e80000}, - {0x34,0x9a102000}, - {0x38,0x832b6002}, - {0x3c,0x9a036001}, - {0x40,0x80a3604f}, - {0x44,0x08bffffd}, - {0x48,0xc0220001}, - {0x4c,0x81c3e008}, - {0x50,0x01000000}, - {0x54,0xc20022f8}, - {0x58,0xda00247c}, - {0x5c,0x8258400d}, - {0x60,0x83306001}, - {0x64,0x96102000}, - {0x68,0x80a2c001}, - {0x6c,0x1a80003b}, - {0x70,0x0300003f}, - {0x74,0x941063ff}, - {0x78,0x98102000}, - {0x7c,0x80a26001}, - {0xf0,0x39}, - {0x00,0x0280002e}, - {0x04,0x80a26004}, - {0x08,0x12800008}, - {0x0c,0x80a26008}, - {0x10,0xc2030008}, - {0x14,0x9a08400a}, - {0x18,0x83306012}, - {0x1c,0x83286010}, - {0x20,0x10800014}, - {0x24,0x9b336002}, - {0x28,0x28800015}, - {0x2c,0xda02000c}, - {0x30,0xda030008}, - {0x34,0x83336010}, - {0x38,0x82004001}, - {0x3c,0x9a0b400a}, - {0x40,0x81800000}, - {0x44,0x01000000}, - {0x48,0x01000000}, - {0x4c,0x01000000}, - {0x50,0x82704009}, - {0x54,0x9a03400d}, - {0x58,0x83286010}, - {0x5c,0x81800000}, - {0x60,0x01000000}, - {0x64,0x01000000}, - {0x68,0x01000000}, - {0x6c,0x9a734009}, - {0x70,0x8200400d}, - {0x74,0x10800011}, - {0x78,0xc2230008}, - {0x7c,0x83336010}, - {0xf0,0x3a}, - {0x00,0x81800000}, - {0x04,0x01000000}, - {0x08,0x01000000}, - {0x0c,0x01000000}, - {0x10,0x82704009}, - {0x14,0x9a0b400a}, - {0x18,0x83286010}, - {0x1c,0x81800000}, - {0x20,0x01000000}, - {0x24,0x01000000}, - {0x28,0x01000000}, - {0x2c,0x9a734009}, - {0x30,0x8200400d}, - {0x34,0xc222000c}, - {0x38,0xc20022f8}, - {0x3c,0xda00247c}, - {0x40,0x8258400d}, - {0x44,0x9602e001}, - {0x48,0x83306001}, - {0x4c,0x80a2c001}, - {0x50,0x0abfffcb}, - {0x54,0x98032004}, - {0x58,0x81c3e008}, - {0x5c,0x01000000}, - {0x60,0x98102000}, - {0x64,0x9b2b2002}, - {0x68,0x98032001}, - {0x6c,0xc202000d}, - {0x70,0x80a3204f}, - {0x74,0x04bffffc}, - {0x78,0xc222400d}, - {0x7c,0x81c3e008}, - {0xf0,0x3b}, - {0x00,0x01000000}, - {0x04,0xd6020000}, - {0x08,0xd8024000}, - {0x0c,0x9132e010}, - {0x10,0x95332010}, - {0x14,0x900a2fff}, - {0x18,0x940aafff}, - {0x1c,0x03000007}, - {0x20,0x9a22000a}, - {0x24,0x821063ff}, - {0x28,0x940b0001}, - {0x2c,0x900ac001}, - {0x30,0x9022000a}, - {0x34,0x9a5b400d}, - {0x38,0x905a0008}, - {0x3c,0x81c3e008}, - {0x40,0x90034008}, - {0x44,0x9de3bf88}, - {0x48,0x82064019}, - {0x4c,0x82004019}, - {0x50,0x83286002}, - {0x54,0x82004018}, - {0x58,0x3b000019}, - {0x5c,0xba176080}, - {0x60,0x83286002}, - {0x64,0xf400401d}, - {0x68,0x033fc000}, - {0x6c,0x82106001}, - {0x70,0xc227bfe8}, - {0x74,0x03000040}, - {0x78,0xc227bfec}, - {0x7c,0x033fc040}, - {0xf0,0x3c}, - {0x00,0x821061fe}, - {0x04,0xc227bff0}, - {0x08,0x0300bf80}, - {0x0c,0x82106101}, - {0x10,0xc227bff4}, - {0x14,0x9e10001d}, - {0x18,0xb6102000}, - {0x1c,0x9a07bff8}, - {0x20,0xba06c00d}, - {0x24,0xc24f7ff0}, - {0x28,0xb0060001}, - {0x2c,0xc24f7ff8}, - {0x30,0xb2064001}, - {0x34,0x82067fff}, - {0x38,0x82164001}, - {0x3c,0x80a62000}, - {0x40,0x0480001e}, - {0x44,0xbb30601f}, - {0x48,0xc2002308}, - {0x4c,0x80a04018}, - {0x50,0x82402000}, - {0x54,0x8090401d}, - {0x58,0x32800019}, - {0x5c,0xb606e001}, - {0x60,0xc2002300}, - {0x64,0x80a64001}, - {0x68,0x18800014}, - {0x6c,0xba064019}, - {0x70,0x82074019}, - {0x74,0x83286002}, - {0x78,0x82004018}, - {0x7c,0x80a6e003}, - {0xf0,0x3d}, - {0x00,0x14800008}, - {0x04,0xb9286002}, - {0x08,0xc207000f}, - {0x0c,0x80a0401a}, - {0x10,0x2680000b}, - {0x14,0xb606e001}, - {0x18,0x1080000d}, - {0x1c,0xb0102000}, - {0x20,0xc207000f}, - {0x24,0x80a0401a}, - {0x28,0x24800005}, - {0x2c,0xb606e001}, - {0x30,0x10800007}, - {0x34,0xb0102000}, - {0x38,0xb606e001}, - {0x3c,0x80a6e007}, - {0x40,0x04bfffd9}, - {0x44,0xba06c00d}, - {0x48,0xb0102001}, - {0x4c,0x81c7e008}, - {0x50,0x81e80000}, - {0x54,0xc2002548}, - {0x58,0x82087fbf}, - {0x5c,0xc2202548}, - {0x60,0xc020255c}, - {0x64,0xc0202514}, - {0x68,0x9a102000}, - {0x6c,0x832b6002}, - {0x70,0x9a036001}, - {0x74,0xc0206738}, - {0x78,0x80a36009}, - {0x7c,0x04bffffc}, - {0xf0,0x3e}, - {0x00,0xc0206710}, - {0x04,0x81c3e008}, - {0x08,0x01000000}, - {0x0c,0x9de3bf88}, - {0x10,0x82063fff}, - {0x14,0xb8067fff}, - {0x18,0x82160001}, - {0x1c,0xba16401c}, - {0x20,0x80974001}, - {0x24,0xa610001a}, - {0x28,0x0680007d}, - {0x2c,0xa410001b}, - {0x30,0xc2002308}, - {0x34,0x80a60001}, - {0x38,0x3880007a}, - {0x3c,0xb0102000}, - {0x40,0xc2002300}, - {0x44,0x80a64001}, - {0x48,0x38800076}, - {0x4c,0xb0102000}, - {0x50,0x94062001}, - {0x54,0x96066001}, - {0x58,0xa207bff8}, - {0x5c,0x8207bfe8}, - {0x60,0xb0102003}, - {0x64,0xc0204000}, - {0x68,0xb0863fff}, - {0x6c,0x1cbffffe}, - {0x70,0x82006004}, - {0x74,0xc2002160}, - {0x78,0x80886004}, - {0x7c,0x0280000f}, - {0xf0,0x3f}, - {0x00,0xb0102004}, - {0x04,0x80a66001}, - {0x08,0x0280000b}, - {0x0c,0x821021ff}, - {0x10,0xc2002308}, - {0x14,0x80a60001}, - {0x18,0x02800007}, - {0x1c,0x821021ff}, - {0x20,0xc2002300}, - {0x24,0x80a64001}, - {0x28,0x12800005}, - {0x2c,0x80a7000b}, - {0x30,0x821021ff}, - {0x34,0xc227bff4}, - {0x38,0x80a7000b}, - {0x3c,0x14800031}, - {0x40,0xb210001c}, - {0x44,0x8207001c}, - {0x48,0xba02c00b}, - {0x4c,0x8200401c}, - {0x50,0xba07400b}, - {0x54,0xba20401d}, - {0x58,0x39000019}, - {0x5c,0xa0172080}, - {0x60,0x9827400a}, - {0x64,0x9b286002}, - {0x68,0xb002bffe}, - {0x6c,0x82034018}, - {0x70,0x83286002}, - {0x74,0xba06000c}, - {0x78,0xb4004010}, - {0x7c,0xb6076008}, - {0xf0,0x40}, - {0x00,0x90102001}, - {0x04,0x932a001b}, - {0x08,0x9e102000}, - {0x0c,0xb92be002}, - {0x10,0xfa072520}, - {0x14,0xba5f4012}, - {0x18,0x833f601f}, - {0x1c,0x83306018}, - {0x20,0xba074001}, - {0x24,0xc2068000}, - {0x28,0x82204013}, - {0x2c,0xbb3f6008}, - {0x30,0x9e03e001}, - {0x34,0x80a0401d}, - {0x38,0x04800005}, - {0x3c,0xb8070011}, - {0x40,0xc2073ff0}, - {0x44,0x82104009}, - {0x48,0xc2273ff0}, - {0x4c,0x80a3e003}, - {0x50,0x08bffff0}, - {0x54,0xb92be002}, - {0x58,0xb0062001}, - {0x5c,0xb606e001}, - {0x60,0x80a6000a}, - {0x64,0x04bfffe8}, - {0x68,0xb406a004}, - {0x6c,0xb2066001}, - {0x70,0x9a03600c}, - {0x74,0x80a6400b}, - {0x78,0x04bfffdc}, - {0x7c,0x98032003}, - {0xf0,0x41}, - {0x00,0xc207bfe8}, - {0x04,0x80886010}, - {0x08,0x0280000a}, - {0x0c,0xfa07bfec}, - {0x10,0xc207bff4}, - {0x14,0x80886082}, - {0x18,0x02800007}, - {0x1c,0x808f6010}, - {0x20,0x80886028}, - {0x24,0x1280001f}, - {0x28,0xb0102003}, - {0x2c,0xfa07bfec}, - {0x30,0x808f6010}, - {0x34,0x02800012}, - {0x38,0xc207bff0}, - {0x3c,0x808f6082}, - {0x40,0x02800007}, - {0x44,0x808f6028}, - {0x48,0xc207bff4}, - {0x4c,0x80886028}, - {0x50,0x32800014}, - {0x54,0xb0102002}, - {0x58,0x808f6028}, - {0x5c,0x02800008}, - {0x60,0xc207bff0}, - {0x64,0xc207bff4}, - {0x68,0x80886082}, - {0x6c,0x02800004}, - {0x70,0xc207bff0}, - {0x74,0x1080000b}, - {0x78,0xb0102002}, - {0x7c,0x80886010}, - {0xf0,0x42}, - {0x00,0x02800008}, - {0x04,0xb0102000}, - {0x08,0x80886082}, - {0x0c,0x02800005}, - {0x10,0x80886028}, - {0x14,0x12800003}, - {0x18,0xb0102001}, - {0x1c,0xb0102000}, - {0x20,0x81c7e008}, - {0x24,0x81e80000}, - {0x28,0x94102000}, - {0x2c,0xc2002514}, - {0x30,0x80a28001}, - {0x34,0x96102000}, - {0x38,0x1a80000e}, - {0x3c,0x9b2ae002}, - {0x40,0xc2036710}, - {0x44,0x9602e001}, - {0x48,0x80a06000}, - {0x4c,0x02800006}, - {0x50,0x992aa002}, - {0x54,0xc2232710}, - {0x58,0xc2036738}, - {0x5c,0x9402a001}, - {0x60,0xc2232738}, - {0x64,0xc2002514}, - {0x68,0x10bffff4}, - {0x6c,0x80a2c001}, - {0x70,0x81c3e008}, - {0x74,0xd4202514}, - {0x78,0xd4020000}, - {0x7c,0x03000018}, - {0xf0,0x43}, - {0x00,0x9802800a}, - {0x04,0x82106200}, - {0x08,0xda530001}, - {0x0c,0xc2002590}, - {0x10,0xc250400c}, - {0x14,0x96a0400d}, - {0x18,0x02800016}, - {0x1c,0x03000018}, - {0x20,0x80a2e000}, - {0x24,0x04800009}, - {0x28,0x82102001}, - {0x2c,0xda022004}, - {0x30,0x8328400d}, - {0x34,0x80a2c001}, - {0x38,0x3480000d}, - {0x3c,0x973ac00d}, - {0x40,0x1080000b}, - {0x44,0x96102001}, - {0x48,0x1680000a}, - {0x4c,0x03000018}, - {0x50,0xda022008}, - {0x54,0x82103fff}, - {0x58,0x8328400d}, - {0x5c,0x80a2c001}, - {0x60,0x36800003}, - {0x64,0x96103fff}, - {0x68,0x973ac00d}, - {0x6c,0x03000018}, - {0x70,0x92106200}, - {0x74,0x8202800a}, - {0x78,0xc2504009}, - {0x7c,0x9602c001}, - {0xf0,0x44}, - {0x00,0x808aa001}, - {0x04,0x0280000f}, - {0x08,0x9b3aa01f}, - {0x0c,0x9b33601f}, - {0x10,0x9a02800d}, - {0x14,0x9b3b6001}, - {0x18,0x9b2b6002}, - {0x1c,0xd8034009}, - {0x20,0x033fffc0}, - {0x24,0x980b0001}, - {0x28,0x0300003f}, - {0x2c,0x821063ff}, - {0x30,0x820ac001}, - {0x34,0x98030001}, - {0x38,0x1080000d}, - {0x3c,0xd8234009}, - {0x40,0x9b33601f}, - {0x44,0x9a02800d}, - {0x48,0x9b3b6001}, - {0x4c,0x9b2b6002}, - {0x50,0x0300003f}, - {0x54,0xd8034009}, - {0x58,0x821063ff}, - {0x5c,0x980b0001}, - {0x60,0x832ae010}, - {0x64,0x8200400c}, - {0x68,0xc2234009}, - {0x6c,0xc2020000}, - {0x70,0xda00247c}, - {0x74,0x8200400d}, - {0x78,0x81c3e008}, - {0x7c,0xc2220000}, - {0xf0,0x45}, - {0x00,0x9de3bf98}, - {0x04,0x833e201f}, - {0x08,0xd0002320}, - {0x0c,0x82204018}, - {0x10,0x80a22000}, - {0x14,0x02800015}, - {0x18,0x9b30601f}, - {0x1c,0x033fc000}, - {0x20,0xa0106020}, - {0x24,0xc200231c}, - {0x28,0x80a00001}, - {0x2c,0x82402000}, - {0x30,0x8088400d}, - {0x34,0xc2002318}, - {0x38,0x02800009}, - {0x3c,0xb01e0001}, - {0x40,0x80a00001}, - {0x44,0x82603fff}, - {0x48,0x7ffffab3}, - {0x4c,0xc2240000}, - {0x50,0xc2002318}, - {0x54,0x10800005}, - {0x58,0xc2240000}, - {0x5c,0x033fc000}, - {0x60,0x82106020}, - {0x64,0xf0204000}, - {0x68,0x81c7e008}, - {0x6c,0x81e80000}, - {0x70,0x9de3bf98}, - {0x74,0x7ffffab1}, - {0x78,0x01000000}, - {0x7c,0xe0002500}, - {0xf0,0x46}, - {0x00,0x80a42028}, - {0x04,0x08800013}, - {0x08,0x80a42000}, - {0x0c,0xc0202584}, - {0x10,0xa2102000}, - {0x14,0x832c6002}, - {0x18,0xc2006f04}, - {0x1c,0x80a06000}, - {0x20,0x02800053}, - {0x24,0xa2046001}, - {0x28,0x9fc04000}, - {0x2c,0x01000000}, - {0x30,0xc2002584}, - {0x34,0x80a06000}, - {0x38,0x1280004d}, - {0x3c,0x80a4603b}, - {0x40,0x24bffff6}, - {0x44,0x832c6002}, - {0x48,0x1080004a}, - {0x4c,0xc2002500}, - {0x50,0x1280000b}, - {0x54,0x80a42014}, - {0x58,0xc2002fcc}, - {0x5c,0x9fc04000}, - {0x60,0x01000000}, - {0x64,0x7ffffcc5}, - {0x68,0x90102000}, - {0x6c,0x7ffffcb2}, - {0x70,0x90102001}, - {0x74,0x1080003f}, - {0x78,0xc2002500}, - {0x7c,0x1880000c}, - {0xf0,0x47}, - {0x00,0x80a42015}, - {0x04,0x808c2001}, - {0x08,0x3280003a}, - {0x0c,0xc2002500}, - {0x10,0x90043ffe}, - {0x14,0x7ffffc4b}, - {0x18,0x91322001}, - {0x1c,0x7ffffc2d}, - {0x20,0x01000000}, - {0x24,0x10800033}, - {0x28,0xc2002500}, - {0x2c,0x18800010}, - {0x30,0x80a42018}, - {0x34,0x033fc180}, - {0x38,0xda0025b0}, - {0x3c,0x82106038}, - {0x40,0xda204000}, - {0x44,0x033fc200}, - {0x48,0x82106074}, - {0x4c,0xda00232c}, - {0x50,0xda204000}, - {0x54,0x7ffffc98}, - {0x58,0x90102000}, - {0x5c,0xc200265c}, - {0x60,0xc2202538}, - {0x64,0x10800020}, - {0x68,0xc2002fcc}, - {0x6c,0x1880000c}, - {0x70,0x80a42028}, - {0x74,0x90102000}, - {0x78,0x92102000}, - {0x7c,0xc2002fc0}, - {0xf0,0x48}, - {0x00,0x9fc04000}, - {0x04,0x94102000}, - {0x08,0x11000018}, - {0x0c,0x7ffffe0a}, - {0x10,0x90122200}, - {0x14,0x10800017}, - {0x18,0xc2002500}, - {0x1c,0x38800015}, - {0x20,0xc2002500}, - {0x24,0x7ffffb97}, - {0x28,0x23000018}, - {0x2c,0x92146200}, - {0x30,0xc2002fc0}, - {0x34,0x9fc04000}, - {0x38,0x94043fe8}, - {0x3c,0x80a42028}, - {0x40,0x3280000c}, - {0x44,0xc2002500}, - {0x48,0x90146200}, - {0x4c,0x7ffffe02}, - {0x50,0x92102008}, - {0x54,0xc2002fd8}, - {0x58,0x80a06000}, - {0x5c,0x22800005}, - {0x60,0xc2002500}, - {0x64,0x9fc04000}, - {0x68,0x01000000}, - {0x6c,0xc2002500}, - {0x70,0x80a40001}, - {0x74,0x1280000b}, - {0x78,0x031fffff}, - {0x7c,0x821063f0}, - {0xf0,0x49}, - {0x00,0x80a40001}, - {0x04,0x38800003}, - {0x08,0x21040000}, - {0x0c,0xa0042001}, - {0x10,0x033fc180}, - {0x14,0x82106034}, - {0x18,0xe0204000}, - {0x1c,0xe0202500}, - {0x20,0x81c7e008}, - {0x24,0x81e80000}, - {0x28,0x81c3e008}, - {0x2c,0x01000000}, - {0x30,0x9de3bf98}, - {0x34,0x9e100018}, - {0x38,0x80a66000}, - {0x3c,0x0280001b}, - {0x40,0xb010001a}, - {0x44,0x031fffdf}, - {0x48,0xb41063ff}, - {0x4c,0x82102000}, - {0x50,0xbb286002}, - {0x54,0x80a62009}, - {0x58,0xb6006001}, - {0x5c,0x12800006}, - {0x60,0xb810001d}, - {0x64,0xc206401d}, - {0x68,0x83306001}, - {0x6c,0x8208401a}, - {0x70,0xc226401d}, - {0x74,0x80a62008}, - {0x78,0x08800006}, - {0x7c,0xc206401c}, - {0xf0,0x4a}, - {0x00,0xfa03c01c}, - {0x04,0xbb376001}, - {0x08,0x10800003}, - {0x0c,0xba0f401a}, - {0x10,0xfa03c01c}, - {0x14,0x8200401d}, - {0x18,0xc226401c}, - {0x1c,0x80a6e04f}, - {0x20,0x08bfffec}, - {0x24,0x8210001b}, - {0x28,0x81c7e008}, - {0x2c,0x81e80000}, - {0x30,0x03169696}, - {0x34,0xda002180}, - {0x38,0x8210625a}, - {0x3c,0x80a34001}, - {0x40,0x94102000}, - {0x44,0x12800006}, - {0x48,0x96102000}, - {0x4c,0x033fc180}, - {0x50,0x82106030}, - {0x54,0x10800024}, - {0x58,0xda204000}, - {0x5c,0xc202c000}, - {0x60,0x9602e004}, - {0x64,0x80a2e4ff}, - {0x68,0x08bffffd}, - {0x6c,0x94028001}, - {0x70,0x96102d00}, - {0x74,0xd2002ff8}, - {0x78,0x03000019}, - {0x7c,0x80a2c009}, - {0xf0,0x4b}, - {0x00,0x1a80000b}, - {0x04,0x901063ff}, - {0x08,0xd802c000}, - {0x0c,0x9602e004}, - {0x10,0x80a2c009}, - {0x14,0x9a402000}, - {0x18,0x80a2000b}, - {0x1c,0x82603fff}, - {0x20,0x808b4001}, - {0x24,0x12bffff9}, - {0x28,0x9402800c}, - {0x2c,0xc20021fc}, - {0x30,0x94228001}, - {0x34,0xc2002200}, - {0x38,0x94228001}, - {0x3c,0x03169696}, - {0x40,0x8210625a}, - {0x44,0x80a28001}, - {0x48,0x033fc180}, - {0x4c,0x82106030}, - {0x50,0x02800005}, - {0x54,0xd4204000}, - {0x58,0x03000008}, - {0x5c,0x81c06280}, - {0x60,0x90102001}, - {0x64,0x01000000}, - {0x68,0x81c3e008}, - {0x6c,0x01000000}, - {0x70,0x9de3bf98}, - {0x74,0x9e100018}, - {0x78,0x03000019}, - {0x7c,0xb0100019}, - {0xf0,0x4c}, - {0x00,0xba106080}, - {0x04,0xb6102000}, - {0x08,0x832ee002}, - {0x0c,0xb606e001}, - {0x10,0x80a6e0d7}, - {0x14,0x08bffffd}, - {0x18,0xc020401d}, - {0x1c,0xb6102000}, - {0x20,0xc20022fc}, - {0x24,0x80a6c001}, - {0x28,0x1a80001c}, - {0x2c,0x03000019}, - {0x30,0xb21060b4}, - {0x34,0xb4102000}, - {0x38,0xc20022f8}, - {0x3c,0x80a68001}, - {0x40,0x1a800011}, - {0x44,0x832ee002}, - {0x48,0xb8004019}, - {0x4c,0xc200247c}, - {0x50,0xfa0ee380}, - {0x54,0x825e8001}, - {0x58,0x8200401d}, - {0x5c,0x82004001}, - {0x60,0xfa160001}, - {0x64,0xc213c001}, - {0x68,0x8220401d}, - {0x6c,0xc2270000}, - {0x70,0xb406a001}, - {0x74,0xc20022f8}, - {0x78,0x80a68001}, - {0x7c,0x0abffff4}, - {0xf0,0x4d}, - {0x00,0xb8072030}, - {0x04,0xb606e001}, - {0x08,0xc20022fc}, - {0x0c,0x80a6c001}, - {0x10,0x0abfffea}, - {0x14,0xb4102000}, - {0x18,0x81c7e008}, - {0x1c,0x81e80000}, - {0x20,0x9de3bf98}, - {0x24,0x21000018}, - {0x28,0xc2002fe4}, - {0x2c,0x9fc04000}, - {0x30,0x90142200}, - {0x34,0xc200259c}, - {0x38,0xd800254c}, - {0x3c,0x808b2002}, - {0x40,0x02800033}, - {0x44,0xc2202550}, - {0x48,0xda002654}, - {0x4c,0x8203400d}, - {0x50,0x8200400d}, - {0x54,0xda00259c}, - {0x58,0xb2036140}, - {0x5c,0x82004001}, - {0x60,0x9a102061}, - {0x64,0x9a234001}, - {0x68,0x832e6007}, - {0x6c,0x9738601f}, - {0x70,0x8182e000}, - {0x74,0x01000000}, - {0x78,0x01000000}, - {0x7c,0x01000000}, - {0xf0,0x4e}, - {0x00,0xb278400d}, - {0x04,0x980b3ffd}, - {0x08,0xd820254c}, - {0x0c,0xc2002fe4}, - {0x10,0x9fc04000}, - {0x14,0x90142340}, - {0x18,0x11000017}, - {0x1c,0xe000259c}, - {0x20,0xc2002fe4}, - {0x24,0x9fc04000}, - {0x28,0x90122240}, - {0x2c,0x80a64010}, - {0x30,0x9a603fff}, - {0x34,0xc200259c}, - {0x38,0x80a64001}, - {0x3c,0x82603fff}, - {0x40,0x80934001}, - {0x44,0x22800012}, - {0x48,0xc020250c}, - {0x4c,0x21000019}, - {0x50,0x7ffffad5}, - {0x54,0x90142200}, - {0x58,0xa0142200}, - {0x5c,0xb2102000}, - {0x60,0x9b2e6002}, - {0x64,0xb2066001}, - {0x68,0xc2034010}, - {0x6c,0x80a66017}, - {0x70,0x04bffffc}, - {0x74,0xc22365b0}, - {0x78,0x7ffffb36}, - {0x7c,0x01000000}, - {0xf0,0x4f}, - {0x00,0x82102015}, - {0x04,0x10800010}, - {0x08,0xc2202500}, - {0x0c,0xc200250c}, - {0x10,0x80a06000}, - {0x14,0x1280000c}, - {0x18,0x031696a9}, - {0x1c,0x821061a5}, - {0x20,0x31000018}, - {0x24,0x33000017}, - {0x28,0xc220250c}, - {0x2c,0xc0202658}, - {0x30,0xc0202654}, - {0x34,0xb0162200}, - {0x38,0xb2166240}, - {0x3c,0x7ffffd69}, - {0x40,0x81e80000}, - {0x44,0x01000000}, - {0x48,0x81c7e008}, - {0x4c,0x81e80000}, - {0x50,0x9de3bf58}, - {0x54,0x94100018}, - {0x58,0x9a102000}, - {0x5c,0x96102000}, - {0x60,0x98102000}, - {0x64,0x9e102000}, - {0x68,0x8203000f}, - {0x6c,0xf6086441}, - {0x70,0x80a6e000}, - {0x74,0x02800024}, - {0x78,0xf4086440}, - {0x7c,0xc208217d}, - {0xf0,0x50}, - {0x00,0x80807fff}, - {0x04,0xf40ea37f}, - {0x08,0xf60ee37f}, - {0x0c,0x0c80001a}, - {0x10,0xb2102000}, - {0x14,0xb007bff8}, - {0x18,0xc200247c}, - {0x1c,0x82584019}, - {0x20,0xba06c001}, - {0x24,0x82068001}, - {0x28,0x82004001}, - {0x2c,0xf8528001}, - {0x30,0xba07401d}, - {0x34,0xc252801d}, - {0x38,0xb8270001}, - {0x3c,0x80a66000}, - {0x40,0x02800007}, - {0x44,0xf8263fc0}, - {0x48,0xc2063fbc}, - {0x4c,0x82a70001}, - {0x50,0x2c800003}, - {0x54,0x9a234001}, - {0x58,0x9a034001}, - {0x5c,0xc208217d}, - {0x60,0xb2066001}, - {0x64,0x82007fff}, - {0x68,0x80a64001}, - {0x6c,0x04bfffeb}, - {0x70,0xb0062004}, - {0x74,0x9e03e001}, - {0x78,0x80a3e00a}, - {0x7c,0x04bfffdc}, - {0xf0,0x51}, - {0x00,0x8203000f}, - {0x04,0x9602e001}, - {0x08,0x80a2e001}, - {0x0c,0x04bfffd6}, - {0x10,0x9803200c}, - {0x14,0xda20259c}, - {0x18,0x81c7e008}, - {0x1c,0x81e80000}, - {0x20,0x9de3bf98}, - {0x24,0xc2002304}, - {0x28,0x80a06000}, - {0x2c,0x02800022}, - {0x30,0x01000000}, - {0x34,0xf80021d8}, - {0x38,0x80a72000}, - {0x3c,0x0280001e}, - {0x40,0x82064019}, - {0x44,0x82004019}, - {0x48,0x83286002}, - {0x4c,0x82004018}, - {0x50,0xb1286002}, - {0x54,0x3b000019}, - {0x58,0xc2002300}, - {0x5c,0xb61760dc}, - {0x60,0xb41760e0}, - {0x64,0x9e1760e4}, - {0x68,0x80a64001}, - {0x6c,0x12800012}, - {0x70,0x9a176080}, - {0x74,0xc206001a}, - {0x78,0xfa06001b}, - {0x7c,0xba074001}, - {0xf0,0x52}, - {0x00,0xc206000f}, - {0x04,0xba074001}, - {0x08,0xba5f401c}, - {0x0c,0x833f601f}, - {0x10,0x83306019}, - {0x14,0xba074001}, - {0x18,0xc206000d}, - {0x1c,0xbb3f6007}, - {0x20,0x80a0401d}, - {0x24,0x16800004}, - {0x28,0x82102001}, - {0x2c,0xc220259c}, - {0x30,0x30800002}, - {0x34,0xc020259c}, - {0x38,0x81c7e008}, - {0x3c,0x81e80000}, - {0x40,0x9de3bf58}, - {0x44,0xc208224d}, - {0x48,0x80a06000}, - {0x4c,0x12800004}, - {0x50,0x90067ffe}, - {0x54,0xc020259c}, - {0x58,0x3080006a}, - {0x5c,0xac066002}, - {0x60,0x80a20016}, - {0x64,0x14800044}, - {0x68,0x9e102000}, - {0x6c,0x82020008}, - {0x70,0x82004008}, - {0x74,0xa1286002}, - {0x78,0xa8062002}, - {0x7c,0x92063ffe}, - {0xf0,0x53}, - {0x00,0x80a24014}, - {0x04,0x14800038}, - {0x08,0x82064019}, - {0x0c,0x82204008}, - {0x10,0x98004001}, - {0x14,0x98030001}, - {0x18,0x9b3a201f}, - {0x1c,0x96040009}, - {0x20,0x952be002}, - {0x24,0x03000019}, - {0x28,0x9a234008}, - {0x2c,0xae106080}, - {0x30,0x972ae002}, - {0x34,0x9402801e}, - {0x38,0xa72b2002}, - {0x3c,0xab33601f}, - {0x40,0x9602c017}, - {0x44,0x9402bfb8}, - {0x48,0xa4063fff}, - {0x4c,0xa2062001}, - {0x50,0x98067fff}, - {0x54,0x82060018}, - {0x58,0x82204009}, - {0x5c,0x8204c001}, - {0x60,0x80a24012}, - {0x64,0x0680000b}, - {0x68,0x9b286002}, - {0x6c,0x80a24011}, - {0x70,0x14800009}, - {0x74,0x80a26000}, - {0x78,0x80a2000c}, - {0x7c,0x06800005}, - {0xf0,0x54}, - {0x00,0x82066001}, - {0x04,0x80a20001}, - {0x08,0x24800014}, - {0x0c,0x92026001}, - {0x10,0x80a26000}, - {0x14,0x2480000d}, - {0x18,0xc2034017}, - {0x1c,0xc2002308}, - {0x20,0x80a04009}, - {0x24,0x82603fff}, - {0x28,0x80884015}, - {0x2c,0x22800007}, - {0x30,0xc2034017}, - {0x34,0xc2002300}, - {0x38,0x80a20001}, - {0x3c,0x38800003}, - {0x40,0xc2034017}, - {0x44,0xc202c000}, - {0x48,0xc2228000}, - {0x4c,0x9e03e001}, - {0x50,0x9402a004}, - {0x54,0x92026001}, - {0x58,0x80a24014}, - {0x5c,0x04bfffde}, - {0x60,0x9602e004}, - {0x64,0x90022001}, - {0x68,0x80a20016}, - {0x6c,0x04bfffc4}, - {0x70,0xa004200c}, - {0x74,0x9007bfb8}, - {0x78,0x7ffff8d7}, - {0x7c,0x92102010}, - {0xf0,0x55}, - {0x00,0xd608224f}, - {0x04,0xb00ae0ff}, - {0x08,0xd808224d}, - {0x0c,0x80a6000c}, - {0x10,0x1480000b}, - {0x14,0x9e102000}, - {0x18,0x832e2002}, - {0x1c,0x8200401e}, - {0x20,0x9a007fb8}, - {0x24,0xc2034000}, - {0x28,0xb0062001}, - {0x2c,0x9e03c001}, - {0x30,0x80a6000c}, - {0x34,0x04bffffc}, - {0x38,0x9a036004}, - {0x3c,0x820ae0ff}, - {0x40,0xda08224d}, - {0x44,0x9a234001}, - {0x48,0xc208224c}, - {0x4c,0x9a036001}, - {0x50,0x825bc001}, - {0x54,0x9938601f}, - {0x58,0x81832000}, - {0x5c,0x01000000}, - {0x60,0x01000000}, - {0x64,0x01000000}, - {0x68,0x8278400d}, - {0x6c,0x9b38601f}, - {0x70,0x9b336019}, - {0x74,0x8200400d}, - {0x78,0x83386007}, - {0x7c,0xc220259c}, - {0xf0,0x56}, - {0x00,0x81c7e008}, - {0x04,0x81e80000}, - {0x08,0x9de3bf98}, - {0x0c,0xc2002540}, - {0x10,0x82006001}, - {0x14,0xc2202540}, - {0x18,0xc2002588}, - {0x1c,0x80a06000}, - {0x20,0x02800014}, - {0x24,0x11000018}, - {0x28,0xc2002594}, - {0x2c,0x80a06000}, - {0x30,0x12800004}, - {0x34,0x90122340}, - {0x38,0x7ffffc3f}, - {0x3c,0x01000000}, - {0x40,0xda002588}, - {0x44,0xc2002594}, - {0x48,0x82006001}, - {0x4c,0x9a037fff}, - {0x50,0xc2202594}, - {0x54,0x7ffff9cb}, - {0x58,0xda202588}, - {0x5c,0x13000018}, - {0x60,0x92126340}, - {0x64,0xc2002fc0}, - {0x68,0x9fc04000}, - {0x6c,0xd4002594}, - {0x70,0x01000000}, - {0x74,0x81c7e008}, - {0x78,0x81e80000}, - {0x7c,0xc2002588}, - {0xf0,0x57}, - {0x00,0x80a06001}, - {0x04,0x1280001a}, - {0x08,0xda002298}, - {0x0c,0xc2102548}, - {0x10,0x80886001}, - {0x14,0x22800009}, - {0x18,0xc2002208}, - {0x1c,0xc2002170}, - {0x20,0x80a06000}, - {0x24,0x22800005}, - {0x28,0xc2002208}, - {0x2c,0xc0202598}, - {0x30,0x1080000f}, - {0x34,0x9a100001}, - {0x38,0x80a06000}, - {0x3c,0x22800009}, - {0x40,0xc2002598}, - {0x44,0xc2002558}, - {0x48,0x80a06000}, - {0x4c,0x32800005}, - {0x50,0xc2002598}, - {0x54,0xc0202598}, - {0x58,0x10800005}, - {0x5c,0xda002234}, - {0x60,0x80a06000}, - {0x64,0x22800002}, - {0x68,0xda00233c}, - {0x6c,0x033fc200}, - {0x70,0x82106070}, - {0x74,0x81c3e008}, - {0x78,0xda204000}, - {0x7c,0x9de3bf98}, - {0xf0,0x58}, - {0x00,0xc2002588}, - {0x04,0x80a06000}, - {0x08,0x02800010}, - {0x0c,0x11000018}, - {0x10,0xd8002548}, - {0x14,0x83332010}, - {0x18,0x80886001}, - {0x1c,0x22800010}, - {0x20,0xc200258c}, - {0x24,0xc2002558}, - {0x28,0x80a06000}, - {0x2c,0x3280000c}, - {0x30,0xc200258c}, - {0x34,0xc2002594}, - {0x38,0x80a06001}, - {0x3c,0x32800008}, - {0x40,0xc200258c}, - {0x44,0x11000018}, - {0x48,0x90122340}, - {0x4c,0xd0202590}, - {0x50,0xc0202588}, - {0x54,0x1080001a}, - {0x58,0xd2002594}, - {0x5c,0x80a06000}, - {0x60,0x12800015}, - {0x64,0x82102001}, - {0x68,0xda002554}, - {0x6c,0xc2002598}, - {0x70,0x80a0400d}, - {0x74,0x1a800007}, - {0x78,0x03000017}, - {0x7c,0x82102001}, - {0xf0,0x59}, - {0x00,0xda20258c}, - {0x04,0xc2202584}, - {0x08,0x10800028}, - {0x0c,0xc0202598}, - {0x10,0x808b2400}, - {0x14,0x12800004}, - {0x18,0x82106240}, - {0x1c,0x03000017}, - {0x20,0x82106100}, - {0x24,0xc2202590}, - {0x28,0xd2002598}, - {0x2c,0x10800004}, - {0x30,0xd0002590}, - {0x34,0x1080001d}, - {0x38,0xc2202584}, - {0x3c,0x7ffffbe6}, - {0x40,0x01000000}, - {0x44,0x13000018}, - {0x48,0xc2002fd0}, - {0x4c,0x92126200}, - {0x50,0x9fc04000}, - {0x54,0xd0002590}, - {0x58,0xc2002690}, - {0x5c,0x82087dff}, - {0x60,0xc2202690}, - {0x64,0x82102080}, - {0x68,0xc220256c}, - {0x6c,0xc2002200}, - {0x70,0x80a06000}, - {0x74,0x32800008}, - {0x78,0xc2002548}, - {0x7c,0xda002548}, - {0xf0,0x5a}, - {0x00,0x83336010}, - {0x04,0x80886001}, - {0x08,0x22800006}, - {0x0c,0x03000004}, - {0x10,0xc2002548}, - {0x14,0x1b000004}, - {0x18,0x10800003}, - {0x1c,0x8210400d}, - {0x20,0x822b4001}, - {0x24,0xc2202548}, - {0x28,0x81c7e008}, - {0x2c,0x81e80000}, - {0x30,0xda002508}, - {0x34,0x033fc000}, - {0x38,0x960b4001}, - {0x3c,0x808b7f00}, - {0x40,0x0280001a}, - {0x44,0x901020a5}, - {0x48,0x1500003f}, - {0x4c,0x8212a300}, - {0x50,0x980b4001}, - {0x54,0x03294000}, - {0x58,0x80a2c001}, - {0x5c,0x02800013}, - {0x60,0x01000000}, - {0x64,0xc200254c}, - {0x68,0x8210400c}, - {0x6c,0xc220254c}, - {0x70,0xc2002500}, - {0x74,0x80a06028}, - {0x78,0xc0202508}, - {0x7c,0x0880000b}, - {0xf0,0x5b}, - {0x00,0x033fffc0}, - {0x04,0x9a0b4001}, - {0x08,0x03168000}, - {0x0c,0x80a2c001}, - {0x10,0x12800006}, - {0x14,0x9812a3ff}, - {0x18,0xc2002548}, - {0x1c,0x8208400c}, - {0x20,0x8210400d}, - {0x24,0xc2202548}, - {0x28,0x03000006}, - {0x2c,0x81c063cc}, - {0x30,0x01000000}, - {0x34,0x01000000}, - {0x38,0xda00247c}, - {0x3c,0xc20022f8}, - {0x40,0x8258400d}, - {0x44,0x83306001}, - {0x48,0x9a102000}, - {0x4c,0x80a34001}, - {0x50,0x1a800015}, - {0x54,0x031fffdf}, - {0x58,0x961063ff}, - {0x5c,0x98036001}, - {0x60,0x80a26008}, - {0x64,0x04800006}, - {0x68,0x9b2b6002}, - {0x6c,0xc202000d}, - {0x70,0x83306001}, - {0x74,0x10800003}, - {0x78,0x8208400b}, - {0x7c,0xc202000d}, - {0xf0,0x5c}, - {0x00,0x82584009}, - {0x04,0xc222000d}, - {0x08,0xda00247c}, - {0x0c,0xc20022f8}, - {0x10,0x8258400d}, - {0x14,0x83306001}, - {0x18,0x80a30001}, - {0x1c,0x0abffff0}, - {0x20,0x9a10000c}, - {0x24,0x81c3e008}, - {0x28,0x01000000}, - {0x2c,0x9de3bf98}, - {0x30,0xc2102548}, - {0x34,0x80886001}, - {0x38,0x12800068}, - {0x3c,0x01000000}, - {0x40,0xe6002460}, - {0x44,0x80a4e000}, - {0x48,0x02800064}, - {0x4c,0x01000000}, - {0x50,0xc2002588}, - {0x54,0xda002594}, - {0x58,0x9800400d}, - {0x5c,0xc2002554}, - {0x60,0x80a30001}, - {0x64,0x1280005d}, - {0x68,0x01000000}, - {0x6c,0xda002598}, - {0x70,0xc200258c}, - {0x74,0x8200400d}, - {0x78,0x80a0400c}, - {0x7c,0x02800004}, - {0xf0,0x5d}, - {0x00,0x80a36000}, - {0x04,0x12800055}, - {0x08,0x01000000}, - {0x0c,0xe208217e}, - {0x10,0x808c60ff}, - {0x14,0x9e102000}, - {0x18,0x0280002e}, - {0x1c,0x96102001}, - {0x20,0xe408217f}, - {0x24,0x13000019}, - {0x28,0x94102001}, - {0x2c,0x80a28012}, - {0x30,0x14800020}, - {0x34,0xa0102000}, - {0x38,0x832ae002}, - {0x3c,0x98006030}, - {0x40,0xac126080}, - {0x44,0xaa126050}, - {0x48,0xa81260b0}, - {0x4c,0xd008217f}, - {0x50,0xda030016}, - {0x54,0x80a34013}, - {0x58,0x26800013}, - {0x5c,0x9402a001}, - {0x60,0x80a2a001}, - {0x64,0x22800007}, - {0x68,0xc208217f}, - {0x6c,0xc2030015}, - {0x70,0x80a34001}, - {0x74,0x2480000c}, - {0x78,0x9402a001}, - {0x7c,0xc208217f}, - {0xf0,0x5e}, - {0x00,0x80a28001}, - {0x04,0x22800007}, - {0x08,0xa0042001}, - {0x0c,0xc2030014}, - {0x10,0x80a34001}, - {0x14,0x26800004}, - {0x18,0x9402a001}, - {0x1c,0xa0042001}, - {0x20,0x9402a001}, - {0x24,0x80a28008}, - {0x28,0x04bfffea}, - {0x2c,0x98032030}, - {0x30,0x80a4000f}, - {0x34,0x34800002}, - {0x38,0x9e100010}, - {0x3c,0x9602e001}, - {0x40,0x820c60ff}, - {0x44,0x80a2c001}, - {0x48,0x24bfffd9}, - {0x4c,0x94102001}, - {0x50,0x96102000}, - {0x54,0xc20ae464}, - {0x58,0x80a06000}, - {0x5c,0x22800006}, - {0x60,0x9602e001}, - {0x64,0x80a3c001}, - {0x68,0x34800007}, - {0x6c,0xc20ae278}, - {0x70,0x9602e001}, - {0x74,0x80a2e003}, - {0x78,0x24bffff8}, - {0x7c,0xc20ae464}, - {0xf0,0x5f}, - {0x00,0x30800016}, - {0x04,0xda00256c}, - {0x08,0x8258400d}, - {0x0c,0x83306007}, - {0x10,0xc220256c}, - {0x14,0xe00ae468}, - {0x18,0x80a42000}, - {0x1c,0x0280000f}, - {0x20,0x82102001}, - {0x24,0xc2202584}, - {0x28,0xd0002590}, - {0x2c,0x7fffff83}, - {0x30,0xd2002554}, - {0x34,0xc2002588}, - {0x38,0x82004010}, - {0x3c,0xc2202588}, - {0x40,0xda00258c}, - {0x44,0xc2002554}, - {0x48,0x80a34001}, - {0x4c,0x18800003}, - {0x50,0x82034010}, - {0x54,0xc220258c}, - {0x58,0x81c7e008}, - {0x5c,0x81e80000}, - {0x60,0x9de3bf98}, - {0x64,0xc2002588}, - {0x68,0x80a06000}, - {0x6c,0x1280005f}, - {0x70,0x01000000}, - {0x74,0xc20026f4}, - {0x78,0x82006001}, - {0x7c,0xda002310}, - {0xf0,0x60}, - {0x00,0x80a0400d}, - {0x04,0x0a800059}, - {0x08,0xc22026f4}, - {0x0c,0xd800227c}, - {0x10,0x80a32000}, - {0x14,0x02800031}, - {0x18,0xc02026f4}, - {0x1c,0xda0022f8}, - {0x20,0xc200247c}, - {0x24,0x965b4001}, - {0x28,0x03000007}, - {0x2c,0x821063ff}, - {0x30,0x9b33200d}, - {0x34,0xa2102000}, - {0x38,0x920b4001}, - {0x3c,0x80a4400b}, - {0x40,0x900b0001}, - {0x44,0x94102000}, - {0x48,0x1a800014}, - {0x4c,0xa0102000}, - {0x50,0x03000018}, - {0x54,0xa4106200}, - {0x58,0x9e106340}, - {0x5c,0x9a040010}, - {0x60,0xc213400f}, - {0x64,0x80a24001}, - {0x68,0xa2400011}, - {0x6c,0xc2534012}, - {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,0x7ffff8dd}, - {0x10,0x90100010}, - {0x14,0x92100008}, - {0x18,0x7ffff876}, - {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,0x0280004f}, - {0xf0,0x63}, - {0x00,0x01000000}, - {0x04,0xc200254c}, - {0x08,0x80886100}, - {0x0c,0x1280004b}, - {0x10,0x01000000}, - {0x14,0xc20026f0}, - {0x18,0x82006001}, - {0x1c,0x80a0400d}, - {0x20,0x0a800046}, - {0x24,0xc22026f0}, - {0x28,0xa4102000}, - {0x2c,0xc20023d4}, - {0x30,0x80a48001}, - {0x34,0xc02026f0}, - {0x38,0xa2102000}, - {0x3c,0x1a800027}, - {0x40,0xa72c6002}, - {0x44,0xc204e364}, - {0x48,0x80a06000}, - {0x4c,0x0280001f}, - {0x50,0xa0102000}, - {0x54,0xc208217e}, - {0x58,0x80a40001}, - {0x5c,0x1680001b}, - {0x60,0x15000018}, - {0x64,0xc2002548}, - {0x68,0x80886020}, - {0x6c,0xc20c2380}, - {0x70,0x9412a340}, - {0x74,0x90100011}, - {0x78,0x12800006}, - {0x7c,0x920860ff}, - {0xf0,0x64}, - {0x00,0x15000018}, - {0x04,0x920860ff}, - {0x08,0x9412a200}, - {0x0c,0x90100011}, - {0x10,0x7ffff861}, - {0x14,0xa0042001}, - {0x18,0xc204e364}, - {0x1c,0xda002348}, - {0x20,0x98020001}, - {0x24,0x82034001}, - {0x28,0x80a20001}, - {0x2c,0x38bfffea}, - {0x30,0xa404a001}, - {0x34,0x80a3000d}, - {0x38,0x3abfffe8}, - {0x3c,0xc208217e}, - {0x40,0x10bfffe5}, - {0x44,0xa404a001}, - {0x48,0xa2046001}, - {0x4c,0xc20023d4}, - {0x50,0x10bfffdb}, - {0x54,0x80a44001}, - {0x58,0xd80026ec}, - {0x5c,0x80930012}, - {0x60,0x1280000a}, - {0x64,0x80a4a000}, - {0x68,0xda002548}, - {0x6c,0x83336005}, - {0x70,0x82086001}, - {0x74,0x82186001}, - {0x78,0x83286005}, - {0x7c,0x9a0b7fdf}, - {0xf0,0x65}, - {0x00,0x9a134001}, - {0x04,0xda202548}, - {0x08,0x12800004}, - {0x0c,0x82032001}, - {0x10,0x10800003}, - {0x14,0xc02026ec}, - {0x18,0xc22026ec}, - {0x1c,0xc20026ec}, - {0x20,0x80a06002}, - {0x24,0x04800005}, - {0x28,0x1b000040}, - {0x2c,0xc200254c}, - {0x30,0x8210400d}, - {0x34,0xc220254c}, - {0x38,0x81c7e008}, - {0x3c,0x81e80000}, - {0x40,0x9de3bf58}, - {0x44,0xc2002548}, - {0x48,0x8330600c}, - {0x4c,0x80886001}, - {0x50,0x1280006d}, - {0x54,0x01000000}, - {0x58,0xfa002500}, - {0x5c,0xc20021f4}, - {0x60,0x80a74001}, - {0x64,0x18800068}, - {0x68,0x01000000}, - {0x6c,0xc200254c}, - {0x70,0x8330600b}, - {0x74,0x82086001}, - {0x78,0x80a00001}, - {0x7c,0x9a603fff}, - {0xf0,0x66}, - {0x00,0x9403400d}, - {0x04,0xc252a210}, - {0x08,0x80a06000}, - {0x0c,0x0280005e}, - {0x10,0x8207bfb8}, - {0x14,0xb810200f}, - {0x18,0xc0204000}, - {0x1c,0xb8873fff}, - {0x20,0x1cbffffe}, - {0x24,0x82006004}, - {0x28,0xb0102001}, - {0x2c,0xc2002300}, - {0x30,0x80a60001}, - {0x34,0x1880003b}, - {0x38,0x03000019}, - {0x3c,0x82106080}, - {0x40,0x96006030}, - {0x44,0xb4102001}, - {0x48,0xc2002308}, - {0x4c,0x80a68001}, - {0x50,0x38800030}, - {0x54,0xb0062001}, - {0x58,0xb202e004}, - {0x5c,0xfa52a210}, - {0x60,0xc2064000}, - {0x64,0x80a0401d}, - {0x68,0x36800025}, - {0x6c,0xb406a001}, - {0x70,0x832ea018}, - {0x74,0xbb2e2010}, - {0x78,0x8200401d}, - {0x7c,0x9e006001}, - {0xf0,0x67}, - {0x00,0xb8102000}, - {0x04,0x98102001}, - {0x08,0xb607bfb8}, - {0x0c,0xbb2f2002}, - {0x10,0xc20f6828}, - {0x14,0x80a68001}, - {0x18,0x1280000f}, - {0x1c,0xb8072001}, - {0x20,0xc20f6829}, - {0x24,0x80a60001}, - {0x28,0x3280000c}, - {0x2c,0xc2176828}, - {0x30,0xd826c000}, - {0x34,0xc217682a}, - {0x38,0x80a061fe}, - {0x3c,0x38800010}, - {0x40,0xb406a001}, - {0x44,0xc2076828}, - {0x48,0x82006001}, - {0x4c,0x1080000b}, - {0x50,0xc2276828}, - {0x54,0xc2176828}, - {0x58,0x80a06000}, - {0x5c,0x12800005}, - {0x60,0x80a7200f}, - {0x64,0xd826c000}, - {0x68,0x10800004}, - {0x6c,0xde276828}, - {0x70,0x08bfffe7}, - {0x74,0xb606e004}, - {0x78,0xb406a001}, - {0x7c,0xc2002308}, - {0xf0,0x68}, - {0x00,0x80a68001}, - {0x04,0x08bfffd6}, - {0x08,0xb2066004}, - {0x0c,0xb0062001}, - {0x10,0xc2002300}, - {0x14,0x80a60001}, - {0x18,0x08bfffcb}, - {0x1c,0x9602e030}, - {0x20,0xb4102000}, - {0x24,0xb8102000}, - {0x28,0xb607bff8}, - {0x2c,0xbb2f2002}, - {0x30,0x8207401b}, - {0x34,0xc2007fc0}, - {0x38,0x80a06000}, - {0x3c,0x32800004}, - {0x40,0xfa17682a}, - {0x44,0x10800005}, - {0x48,0xc0276828}, - {0x4c,0xc20b63cc}, - {0x50,0x80a74001}, - {0x54,0xb466bfff}, - {0x58,0xb8072001}, - {0x5c,0x80a7200f}, - {0x60,0x08bffff4}, - {0x64,0xbb2f2002}, - {0x68,0xc20b63ce}, - {0x6c,0x80a68001}, - {0x70,0x08800005}, - {0x74,0x3b000200}, - {0x78,0xc200254c}, - {0x7c,0x8210401d}, - {0xf0,0x69}, - {0x00,0xc220254c}, - {0x04,0x81c7e008}, - {0x08,0x81e80000}, - {0x0c,0x9de3bf98}, - {0x10,0xd8002200}, - {0x14,0x80a32000}, - {0x18,0x1280000a}, - {0x1c,0x03000019}, - {0x20,0xc2002548}, - {0x24,0x82087ffb}, - {0x28,0xc2202548}, - {0x2c,0x033fc180}, - {0x30,0x8210602c}, - {0x34,0xc0204000}, - {0x38,0x1080004f}, - {0x3c,0xc02026d8}, - {0x40,0x82106080}, - {0x44,0xc0202504}, - {0x48,0x9e006030}, - {0x4c,0xb2102001}, - {0x50,0x10800016}, - {0x54,0xda102238}, - {0x58,0xf0002308}, - {0x5c,0x80a6c018}, - {0x60,0x38800011}, - {0x64,0xb2066001}, - {0x68,0xf410223a}, - {0x6c,0xba03e004}, - {0x70,0xc2074000}, - {0x74,0xb606e001}, - {0x78,0xba076004}, - {0x7c,0x80a0401a}, - {0xf0,0x6a}, - {0x00,0x04800005}, - {0x04,0xb820401a}, - {0x08,0xc2002504}, - {0x0c,0x8200401c}, - {0x10,0xc2202504}, - {0x14,0x80a6c018}, - {0x18,0x28bffff7}, - {0x1c,0xc2074000}, - {0x20,0xb2066001}, - {0x24,0x9e03e030}, - {0x28,0x80a36000}, - {0x2c,0x32800003}, - {0x30,0x80a6400d}, - {0x34,0x80a6400c}, - {0x38,0x18800004}, - {0x3c,0x80a66010}, - {0x40,0x08bfffe6}, - {0x44,0xb6102001}, - {0x48,0xfa10223e}, - {0x4c,0xc2002504}, - {0x50,0x80a0401d}, - {0x54,0x3480000a}, - {0x58,0xc2002548}, - {0x5c,0xfa10223c}, - {0x60,0x80a76000}, - {0x64,0x2280000b}, - {0x68,0xc2002548}, - {0x6c,0xc2082517}, - {0x70,0x80a0401d}, - {0x74,0x0a800007}, - {0x78,0xc2002548}, - {0x7c,0x80886008}, - {0xf0,0x6b}, - {0x00,0x22800008}, - {0x04,0xc20026d8}, - {0x08,0x10800008}, - {0x0c,0xc02026d8}, - {0x10,0x80886008}, - {0x14,0x22800005}, - {0x18,0xc02026d8}, - {0x1c,0xc20026d8}, - {0x20,0x82006001}, - {0x24,0xc22026d8}, - {0x28,0xfa0026d8}, - {0x2c,0xc2002290}, - {0x30,0x80a74001}, - {0x34,0x0880000b}, - {0x38,0xfa002548}, - {0x3c,0x83376003}, - {0x40,0x82086001}, - {0x44,0x82186001}, - {0x48,0x83286002}, - {0x4c,0xba0f7ffb}, - {0x50,0xba174001}, - {0x54,0xfa202548}, - {0x58,0xc02026d8}, - {0x5c,0xfa002548}, - {0x60,0xbb376002}, - {0x64,0x033fc180}, - {0x68,0xba0f6001}, - {0x6c,0x8210602c}, - {0x70,0xfa204000}, - {0x74,0x81c7e008}, - {0x78,0x81e80000}, - {0x7c,0x9de3bf70}, - {0xf0,0x6c}, - {0x00,0x1b00003f}, - {0x04,0xc2002350}, - {0x08,0x9a1363ff}, - {0x0c,0xae08400d}, - {0x10,0xa6102001}, - {0x14,0xda002300}, - {0x18,0x80a4c00d}, - {0x1c,0x18800062}, - {0x20,0xa3306010}, - {0x24,0xa410200c}, - {0x28,0xac102000}, - {0x2c,0xaa102000}, - {0x30,0xa8102000}, - {0x34,0x80a46000}, - {0x38,0x0280002c}, - {0x3c,0xa0102000}, - {0x40,0x03000019}, - {0x44,0x96106080}, - {0x48,0x92102000}, - {0x4c,0x9807bfd0}, - {0x50,0x82050009}, - {0x54,0xda086440}, - {0x58,0x8204800d}, - {0x5c,0x80a36000}, - {0x60,0x02800008}, - {0x64,0x83286002}, - {0x68,0xc200400b}, - {0x6c,0xc2230000}, - {0x70,0x92026001}, - {0x74,0x80a2600b}, - {0x78,0x04bffff6}, - {0x7c,0x98032004}, - {0xf0,0x6d}, - {0x00,0x7ffff5d5}, - {0x04,0x9007bfd0}, - {0x08,0x80a5c011}, - {0x0c,0x1480000b}, - {0x10,0x92100017}, - {0x14,0x832de002}, - {0x18,0x8200401e}, - {0x1c,0x9a007fd0}, - {0x20,0xc2034000}, - {0x24,0x92026001}, - {0x28,0xa0040001}, - {0x2c,0x80a24011}, - {0x30,0x04bffffc}, - {0x34,0x9a036004}, - {0x38,0x82244017}, - {0x3c,0x82006001}, - {0x40,0x9b3c201f}, - {0x44,0x81836000}, - {0x48,0x01000000}, - {0x4c,0x01000000}, - {0x50,0x01000000}, - {0x54,0xa07c0001}, - {0x58,0xc25021ae}, - {0x5c,0x80a40001}, - {0x60,0x26800002}, - {0x64,0xa0100001}, - {0x68,0x03000019}, - {0x6c,0x94106080}, - {0x70,0x92102000}, - {0x74,0x82054009}, - {0x78,0xda086440}, - {0x7c,0x8204800d}, - {0xf0,0x6e}, - {0x00,0x99286002}, - {0x04,0x80a36000}, - {0x08,0x0280001d}, - {0x0c,0x9610000c}, - {0x10,0x80a42000}, - {0x14,0x2480000c}, - {0x18,0xc202c00a}, - {0x1c,0xc203000a}, - {0x20,0x80a04010}, - {0x24,0x16800007}, - {0x28,0x98102000}, - {0x2c,0x80a06000}, - {0x30,0x24800006}, - {0x34,0x98100001}, - {0x38,0x10800005}, - {0x3c,0x8204800d}, - {0x40,0xc202c00a}, - {0x44,0x98204010}, - {0x48,0x8204800d}, - {0x4c,0x9b286002}, - {0x50,0xc20023c8}, - {0x54,0x83306011}, - {0x58,0x80886001}, - {0x5c,0x02800005}, - {0x60,0x92026001}, - {0x64,0xc20ce2af}, - {0x68,0x825b0001}, - {0x6c,0x99386007}, - {0x70,0x80a2600b}, - {0x74,0x04bfffe0}, - {0x78,0xd823400a}, - {0x7c,0xac05a001}, - {0xf0,0x6f}, - {0x00,0xa805200c}, - {0x04,0x80a5a001}, - {0x08,0x04bfffab}, - {0x0c,0xaa05600c}, - {0x10,0xa604e001}, - {0x14,0xc2002300}, - {0x18,0x80a4c001}, - {0x1c,0x08bfffa3}, - {0x20,0xa404a00c}, - {0x24,0x81c7e008}, - {0x28,0x81e80000}, - {0x2c,0x9de3bf58}, - {0x30,0xe2502458}, - {0x34,0x80a46000}, - {0x38,0x02800065}, - {0x3c,0x01000000}, - {0x40,0xc208217f}, - {0x44,0x80a44001}, - {0x48,0x16800061}, - {0x4c,0xa0102001}, - {0x50,0xc208217e}, - {0x54,0x80a40001}, - {0x58,0x1480005d}, - {0x5c,0xe450245a}, - {0x60,0x96102001}, - {0x64,0xc208217f}, - {0x68,0x80a2c001}, - {0x6c,0x1480000f}, - {0x70,0x03000019}, - {0x74,0x9b2c2002}, - {0x78,0x82106080}, - {0x7c,0x9a034001}, - {0xf0,0x70}, - {0x00,0x9a036030}, - {0x04,0x9807bfb8}, - {0x08,0xc2034000}, - {0x0c,0xc2230000}, - {0x10,0x9602e001}, - {0x14,0xc208217f}, - {0x18,0x80a2c001}, - {0x1c,0x9a036030}, - {0x20,0x04bffffa}, - {0x24,0x98032004}, - {0x28,0x9007bfb8}, - {0x2c,0x7ffff56a}, - {0x30,0xd208217f}, - {0x34,0x96100012}, - {0x38,0x80a48011}, - {0x3c,0x1480000b}, - {0x40,0x94102000}, - {0x44,0x832ca002}, - {0x48,0x8200401e}, - {0x4c,0x9a007fb8}, - {0x50,0xc2034000}, - {0x54,0x9602e001}, - {0x58,0x94028001}, - {0x5c,0x80a2c011}, - {0x60,0x04bffffc}, - {0x64,0x9a036004}, - {0x68,0x82244012}, - {0x6c,0x82006001}, - {0x70,0x9b3aa01f}, - {0x74,0x81836000}, - {0x78,0x01000000}, - {0x7c,0x01000000}, - {0xf0,0x71}, - {0x00,0x01000000}, - {0x04,0x947a8001}, - {0x08,0xc25021ac}, - {0x0c,0x80a28001}, - {0x10,0x26800002}, - {0x14,0x94100001}, - {0x18,0x96102001}, - {0x1c,0xc208217f}, - {0x20,0x80a2c001}, - {0x24,0x14800025}, - {0x28,0x832c2002}, - {0x2c,0x11000019}, - {0x30,0x98006030}, - {0x34,0x92122080}, - {0x38,0x80a2a000}, - {0x3c,0x0480000b}, - {0x40,0x9a122080}, - {0x44,0xc203000d}, - {0x48,0x80a0400a}, - {0x4c,0x36800008}, - {0x50,0xc2030009}, - {0x54,0x80a06000}, - {0x58,0x34800007}, - {0x5c,0xc023000d}, - {0x60,0x10800006}, - {0x64,0xc20023c8}, - {0x68,0xc2030009}, - {0x6c,0x8220400a}, - {0x70,0xc2230009}, - {0x74,0xc20023c8}, - {0x78,0x83306012}, - {0x7c,0x80886001}, - {0xf0,0x72}, - {0x00,0x0280000a}, - {0x04,0x9602e001}, - {0x08,0xda0c22af}, - {0x0c,0xc2030009}, - {0x10,0x8258400d}, - {0x14,0x9b38601f}, - {0x18,0x9b336019}, - {0x1c,0x8200400d}, - {0x20,0x83386007}, - {0x24,0xc2230009}, - {0x28,0xc208217f}, - {0x2c,0x80a2c001}, - {0x30,0x04bfffe2}, - {0x34,0x98032030}, - {0x38,0xa0042001}, - {0x3c,0xc208217e}, - {0x40,0x80a40001}, - {0x44,0x04bfffa8}, - {0x48,0x96102001}, - {0x4c,0x81c7e008}, - {0x50,0x81e80000}, - {0x54,0x9de3bf98}, - {0x58,0xfa5023c6}, - {0x5c,0x80a76000}, - {0x60,0x0280003c}, - {0x64,0xb0102001}, - {0x68,0xc208217e}, - {0x6c,0x80a60001}, - {0x70,0x14800038}, - {0x74,0x19000019}, - {0x78,0x82132080}, - {0x7c,0x9a10001d}, - {0xf0,0x73}, - {0x00,0x9e006004}, - {0x04,0xfa08217f}, - {0x08,0x80a76000}, - {0x0c,0xb2102000}, - {0x10,0x0280002b}, - {0x14,0x82102000}, - {0x18,0xb810001d}, - {0x1c,0xf45023c4}, - {0x20,0xba03e030}, - {0x24,0xf6074000}, - {0x28,0x80a6c01a}, - {0x2c,0x06800004}, - {0x30,0xba076030}, - {0x34,0xb206401b}, - {0x38,0x82006001}, - {0x3c,0xb8873fff}, - {0x40,0x32bffffa}, - {0x44,0xf6074000}, - {0x48,0x80a06000}, - {0x4c,0x2280001d}, - {0x50,0xb0062001}, - {0x54,0x973e601f}, - {0x58,0x8182e000}, - {0x5c,0x01000000}, - {0x60,0x01000000}, - {0x64,0x01000000}, - {0x68,0x827e4001}, - {0x6c,0x8258400d}, - {0x70,0xbb38601f}, - {0x74,0xbb376016}, - {0x78,0x8200401d}, - {0x7c,0xb8102001}, - {0xf0,0x74}, - {0x00,0xfa08217f}, - {0x04,0x80a7001d}, - {0x08,0x1480000d}, - {0x0c,0xb338600a}, - {0x10,0x832e2002}, - {0x14,0xba006030}, - {0x18,0xb6132080}, - {0x1c,0xc207401b}, - {0x20,0x82204019}, - {0x24,0xc227401b}, - {0x28,0xb8072001}, - {0x2c,0xc208217f}, - {0x30,0x80a70001}, - {0x34,0x04bffffa}, - {0x38,0xba076030}, - {0x3c,0xb0062001}, - {0x40,0xc208217e}, - {0x44,0x80a60001}, - {0x48,0x04bfffcf}, - {0x4c,0x9e03e004}, - {0x50,0x81c7e008}, - {0x54,0x81e80000}, - {0x58,0xc2082573}, - {0x5c,0xda00256c}, - {0x60,0x82006001}, - {0x64,0xd808257f}, - {0x68,0x9a5b4001}, - {0x6c,0x98032001}, - {0x70,0x81800000}, - {0x74,0x01000000}, - {0x78,0x01000000}, - {0x7c,0x01000000}, - {0xf0,0x75}, - {0x00,0x9a73400c}, - {0x04,0xda20256c}, - {0x08,0x96102000}, - {0x0c,0x832ae002}, - {0x10,0xd800256c}, - {0x14,0xda1063b6}, - {0x18,0x9a5b400c}, - {0x1c,0x9b336007}, - {0x20,0x9602e001}, - {0x24,0x80a2e003}, - {0x28,0x04bffff9}, - {0x2c,0xda206520}, - {0x30,0xc20023c0}, - {0x34,0x80a06000}, - {0x38,0x02800007}, - {0x3c,0x82103000}, - {0x40,0xc2002200}, - {0x44,0x80a06000}, - {0x48,0x22800005}, - {0x4c,0xc200255c}, - {0x50,0x82103000}, - {0x54,0xc220252c}, - {0x58,0xc200255c}, - {0x5c,0x80a06000}, - {0x60,0x02800005}, - {0x64,0xc2002288}, - {0x68,0x9b306001}, - {0x6c,0x83306002}, - {0x70,0x8200400d}, - {0x74,0xc220251c}, - {0x78,0x03000007}, - {0x7c,0x81c062d4}, - {0xf0,0x76}, - {0x00,0x01000000}, - {0x04,0x01000000}, - {0x08,0x9de3bf98}, - {0x0c,0xc20021cc}, - {0x10,0x80a06000}, - {0x14,0x22800025}, - {0x18,0xc20026e4}, - {0x1c,0x82064019}, - {0x20,0x82004019}, - {0x24,0x83286002}, - {0x28,0x82004018}, - {0x2c,0x9f286002}, - {0x30,0xb92e2010}, - {0x34,0x3b003fc0}, - {0x38,0x03000019}, - {0x3c,0x9a1760ff}, - {0x40,0xb8070019}, - {0x44,0x98106080}, - {0x48,0xb4102007}, - {0x4c,0xbb2ea002}, - {0x50,0xc20761b0}, - {0x54,0x80a06000}, - {0x58,0x02800030}, - {0x5c,0xb608400d}, - {0x60,0x80a6c01c}, - {0x64,0x3280000e}, - {0x68,0xb486bfff}, - {0x6c,0xfa0f61b0}, - {0x70,0x80a76000}, - {0x74,0x2280000d}, - {0x78,0xc20026e4}, - {0x7c,0xc203c00c}, - {0xf0,0x77}, - {0x00,0x8258401d}, - {0x04,0xbb38601f}, - {0x08,0xbb376019}, - {0x0c,0x8200401d}, - {0x10,0x83386007}, - {0x14,0x10800004}, - {0x18,0xc223c00c}, - {0x1c,0x1cbfffed}, - {0x20,0xbb2ea002}, - {0x24,0xc20026e4}, - {0x28,0x80a06000}, - {0x2c,0x12800033}, - {0x30,0xb6064019}, - {0x34,0x8206c019}, - {0x38,0x83286002}, - {0x3c,0x82004018}, - {0x40,0x3b000019}, - {0x44,0x83286002}, - {0x48,0xba176080}, - {0x4c,0xf800401d}, - {0x50,0xc200251c}, - {0x54,0x80a70001}, - {0x58,0x04800028}, - {0x5c,0x01000000}, - {0x60,0xfa00255c}, - {0x64,0x80a76000}, - {0x68,0x02800015}, - {0x6c,0x832e2010}, - {0x70,0xc20023c8}, - {0x74,0x80886100}, - {0x78,0x02800011}, - {0x7c,0x832e2010}, - {0xf0,0x78}, - {0x00,0x80a7001d}, - {0x04,0x0880001d}, - {0x08,0x82004019}, - {0x0c,0x82207000}, - {0x10,0x10800012}, - {0x14,0xc2202710}, - {0x18,0x82064019}, - {0x1c,0x82004019}, - {0x20,0x83286002}, - {0x24,0x82004018}, - {0x28,0x3b000019}, - {0x2c,0x83286002}, - {0x30,0xba176080}, - {0x34,0x10bfffdc}, - {0x38,0xc020401d}, - {0x3c,0xfa002514}, - {0x40,0x82004019}, - {0x44,0xb92f6002}, - {0x48,0x82207000}, - {0x4c,0xc2272710}, - {0x50,0xba076001}, - {0x54,0xfa202514}, - {0x58,0x8206c019}, - {0x5c,0x83286002}, - {0x60,0x82004018}, - {0x64,0x3b000019}, - {0x68,0x83286002}, - {0x6c,0xba176080}, - {0x70,0xc200401d}, - {0x74,0xc220255c}, - {0x78,0x81c7e008}, - {0x7c,0x81e80000}, - {0xf0,0x79}, - {0x00,0x9de3bf98}, - {0x04,0xc2002308}, - {0x08,0x82006001}, - {0x0c,0xe208217e}, - {0x10,0x80a44001}, - {0x14,0x0a80001a}, - {0x18,0xa4102001}, - {0x1c,0xc208217f}, - {0x20,0x80a48001}, - {0x24,0x38800013}, - {0x28,0xc2002308}, - {0x2c,0x832c6002}, - {0x30,0xa0006030}, - {0x34,0x92100012}, - {0x38,0x7fffff94}, - {0x3c,0x90100011}, - {0x40,0x03000019}, - {0x44,0x98106080}, - {0x48,0xda04000c}, - {0x4c,0x82106084}, - {0x50,0xda240001}, - {0x54,0xc024000c}, - {0x58,0xa404a001}, - {0x5c,0xc208217f}, - {0x60,0x80a48001}, - {0x64,0x08bffff4}, - {0x68,0xa0042030}, - {0x6c,0xc2002308}, - {0x70,0xa2047fff}, - {0x74,0x10bfffe7}, - {0x78,0x82006001}, - {0x7c,0xc2002300}, - {0xf0,0x7a}, - {0x00,0x82006001}, - {0x04,0xe408217f}, - {0x08,0x80a48001}, - {0x0c,0x0a80001e}, - {0x10,0x82048012}, - {0x14,0x82004012}, - {0x18,0xa7286002}, - {0x1c,0xa2102001}, - {0x20,0xc2002308}, - {0x24,0x80a44001}, - {0x28,0x18800011}, - {0x2c,0x832ce002}, - {0x30,0xa0006004}, - {0x34,0x90100011}, - {0x38,0x7fffff74}, - {0x3c,0x92100012}, - {0x40,0x03000019}, - {0x44,0x98106080}, - {0x48,0xda04000c}, - {0x4c,0x821060b0}, - {0x50,0xda240001}, - {0x54,0xc024000c}, - {0x58,0xa2046001}, - {0x5c,0xc2002308}, - {0x60,0x80a44001}, - {0x64,0x08bffff4}, - {0x68,0xa0042004}, - {0x6c,0xc2002300}, - {0x70,0xa404bfff}, - {0x74,0x82006001}, - {0x78,0x80a48001}, - {0x7c,0x1abfffe8}, - {0xf0,0x7b}, - {0x00,0xa604fff4}, - {0x04,0xa2102000}, - {0x08,0xc2002514}, - {0x0c,0x80a44001}, - {0x10,0x1a80002f}, - {0x14,0x94102000}, - {0x18,0xc200237c}, - {0x1c,0x80a06000}, - {0x20,0x2280000a}, - {0x24,0xc20023c8}, - {0x28,0xc202a710}, - {0x2c,0x99306010}, - {0x30,0x82086fff}, - {0x34,0x980b2fff}, - {0x38,0x97286010}, - {0x3c,0x83286018}, - {0x40,0x1080000d}, - {0x44,0x9a032001}, - {0x48,0x80886200}, - {0x4c,0x22800010}, - {0x50,0xda02a710}, - {0x54,0xc202a710}, - {0x58,0x99306010}, - {0x5c,0x82086fff}, - {0x60,0x82006001}, - {0x64,0x980b2fff}, - {0x68,0x97286010}, - {0x6c,0x83286018}, - {0x70,0x9a033fff}, - {0x74,0x8200400b}, - {0x78,0x9b2b6008}, - {0x7c,0x8200400d}, - {0xf0,0x7c}, - {0x00,0x8200400c}, - {0x04,0x1080000c}, - {0x08,0x82006001}, - {0x0c,0x820b6fff}, - {0x10,0x82006001}, - {0x14,0x99286010}, - {0x18,0x9b336010}, - {0x1c,0x83286018}, - {0x20,0x9a0b6fff}, - {0x24,0x8200400c}, - {0x28,0x992b6008}, - {0x2c,0x8200400c}, - {0x30,0x8200400d}, - {0x34,0xc222a738}, - {0x38,0xa2046001}, - {0x3c,0xc2002514}, - {0x40,0x80a44001}, - {0x44,0x0abfffd5}, - {0x48,0x9402a004}, - {0x4c,0x81c7e008}, - {0x50,0x81e80000}, - {0x54,0x9de3bf98}, - {0x58,0xc2002548}, - {0x5c,0x80886100}, - {0x60,0xac102000}, - {0x64,0x128000cf}, - {0x68,0xa6102000}, - {0x6c,0xc20026e4}, - {0x70,0x80a06000}, - {0x74,0x02800004}, - {0x78,0xa2102001}, - {0x7c,0x82007fff}, - {0xf0,0x7d}, - {0x00,0xc22026e4}, - {0x04,0xc2002300}, - {0x08,0x80a44001}, - {0x0c,0x388000a9}, - {0x10,0xda002530}, - {0x14,0xae10200c}, - {0x18,0xa4102001}, - {0x1c,0xc2002308}, - {0x20,0x80a48001}, - {0x24,0x18800092}, - {0x28,0x9b2de002}, - {0x2c,0x03000050}, - {0x30,0xaa044001}, - {0x34,0xa8036004}, - {0x38,0xc2002514}, - {0x3c,0x80a06009}, - {0x40,0x1880009b}, - {0x44,0x03000019}, - {0x48,0x82106080}, - {0x4c,0xda050001}, - {0x50,0xc2002474}, - {0x54,0x80a34001}, - {0x58,0x0680007f}, - {0x5c,0x03000040}, - {0x60,0x90100012}, - {0x64,0x7ffff7b8}, - {0x68,0x92100011}, - {0x6c,0x80a22000}, - {0x70,0x02800079}, - {0x74,0x03000040}, - {0x78,0xc2002ff0}, - {0x7c,0x80a06000}, - {0xf0,0x7e}, - {0x00,0x2280000a}, - {0x04,0xc2002fe0}, - {0x08,0x90100012}, - {0x0c,0x9fc04000}, - {0x10,0x92100011}, - {0x14,0xc200259c}, - {0x18,0x80a06000}, - {0x1c,0x1280006e}, - {0x20,0x03000040}, - {0x24,0xc2002fe0}, - {0x28,0x80a06000}, - {0x2c,0x2280000b}, - {0x30,0xc2002ff4}, - {0x34,0x90100012}, - {0x38,0x92100011}, - {0x3c,0x9fc04000}, - {0x40,0xd4002470}, - {0x44,0xc200259c}, - {0x48,0x80a06000}, - {0x4c,0x12800062}, - {0x50,0x03000040}, - {0x54,0xc2002ff4}, - {0x58,0x80a06000}, - {0x5c,0x02800006}, - {0x60,0xa0102000}, - {0x64,0x90100012}, - {0x68,0x9fc04000}, - {0x6c,0x92100011}, - {0x70,0xe000259c}, - {0x74,0x90100012}, - {0x78,0x92100011}, - {0x7c,0x94100010}, - {0xf0,0x7f}, - {0x00,0x7ffff7e3}, - {0x04,0xd6002470}, - {0x08,0x80a22000}, - {0x0c,0x02800052}, - {0x10,0x03000040}, - {0x14,0xc2002fe0}, - {0x18,0x80a06000}, - {0x1c,0x02800007}, - {0x20,0x90100012}, - {0x24,0x92100011}, - {0x28,0x9fc04000}, - {0x2c,0x94102100}, - {0x30,0x10800004}, - {0x34,0x94100010}, - {0x38,0xc020259c}, - {0x3c,0x94100010}, - {0x40,0x90100012}, - {0x44,0x92100011}, - {0x48,0x7ffff7d1}, - {0x4c,0x96102100}, - {0x50,0x80a22000}, - {0x54,0x22800011}, - {0x58,0xc2002514}, - {0x5c,0xc200259c}, - {0x60,0x80a06000}, - {0x64,0x3280000d}, - {0x68,0xc2002514}, - {0x6c,0xc2002280}, - {0x70,0xd8002514}, - {0x74,0xc22026e4}, - {0x78,0x9b2ca010}, - {0x7c,0x832b2002}, - {0xf0,0x80}, - {0x00,0x9a034011}, - {0x04,0xda206710}, - {0x08,0x98032001}, - {0x0c,0xd8202514}, - {0x10,0x10800006}, - {0x14,0xac05a001}, - {0x18,0x9b286002}, - {0x1c,0xea236710}, - {0x20,0x82006001}, - {0x24,0xc2202514}, - {0x28,0xc2002514}, - {0x2c,0x80a0600a}, - {0x30,0x12800029}, - {0x34,0x03000040}, - {0x38,0x03000019}, - {0x3c,0x9e106080}, - {0x40,0xe6002710}, - {0x44,0x90102001}, - {0x48,0x932a2002}, - {0x4c,0xd4026710}, - {0x50,0x980aafff}, - {0x54,0x960cefff}, - {0x58,0x8203000c}, - {0x5c,0x9a02c00b}, - {0x60,0x8200400c}, - {0x64,0x9a03400b}, - {0x68,0x9932a010}, - {0x6c,0x980b2fff}, - {0x70,0x9734e010}, - {0x74,0x83286002}, - {0x78,0x8200400c}, - {0x7c,0x960aefff}, - {0xf0,0x81}, - {0x00,0x9b2b6002}, - {0x04,0x83286002}, - {0x08,0x9a03400b}, - {0x0c,0xd800400f}, - {0x10,0x9b2b6002}, - {0x14,0xc203400f}, - {0x18,0x80a30001}, - {0x1c,0x36800004}, - {0x20,0xd422670c}, - {0x24,0xe622670c}, - {0x28,0xa610000a}, - {0x2c,0x90022001}, - {0x30,0xda002514}, - {0x34,0x80a2000d}, - {0x38,0x2abfffe5}, - {0x3c,0x932a2002}, - {0x40,0x832b6002}, - {0x44,0xc0206710}, - {0x48,0x82037fff}, - {0x4c,0xc2202514}, - {0x50,0x03000040}, - {0x54,0xaa054001}, - {0x58,0xa404a001}, - {0x5c,0xc2002308}, - {0x60,0x80a48001}, - {0x64,0x08bfff75}, - {0x68,0xa8052004}, - {0x6c,0xa2046001}, - {0x70,0xc2002300}, - {0x74,0x80a44001}, - {0x78,0x08bfff68}, - {0x7c,0xae05e00c}, - {0xf0,0x82}, - {0x00,0x80a4e000}, - {0x04,0x2280000b}, - {0x08,0xda002530}, - {0x0c,0xda002514}, - {0x10,0x80a36009}, - {0x14,0x38800007}, - {0x18,0xda002530}, - {0x1c,0x832b6002}, - {0x20,0xe6206710}, - {0x24,0x82036001}, - {0x28,0xc2202514}, - {0x2c,0xda002530}, - {0x30,0x80a5800d}, - {0x34,0x14800006}, - {0x38,0x82100016}, - {0x3c,0xc2002514}, - {0x40,0x80a34001}, - {0x44,0x28800002}, - {0x48,0x8210000d}, - {0x4c,0x80a5a000}, - {0x50,0x02800004}, - {0x54,0xc2202530}, - {0x58,0x1080000a}, - {0x5c,0xc20021f8}, - {0x60,0x80a06000}, - {0x64,0x22800009}, - {0x68,0xc2002530}, - {0x6c,0xc20026f8}, - {0x70,0x80a06000}, - {0x74,0x22800004}, - {0x78,0xc0202530}, - {0x7c,0x82006001}, - {0xf0,0x83}, - {0x00,0xc22026f8}, - {0x04,0xc2002530}, - {0x08,0x80a06000}, - {0x0c,0x02800005}, - {0x10,0x01000000}, - {0x14,0xc2002548}, - {0x18,0x82106040}, - {0x1c,0xc2202548}, - {0x20,0x81c7e008}, - {0x24,0x81e80000}, - {0x28,0x82220009}, - {0x2c,0x9a58400a}, - {0x30,0x833b601f}, - {0x34,0x80a20009}, - {0x38,0x83306019}, - {0x3c,0x04800004}, - {0x40,0x90102000}, - {0x44,0x82034001}, - {0x48,0x91386007}, - {0x4c,0x81c3e008}, - {0x50,0x01000000}, - {0x54,0x9de3bf98}, - {0x58,0x7ffff7d4}, - {0x5c,0xa8102001}, - {0x60,0xc208217f}, - {0x64,0x80a07fff}, - {0x68,0x0280001c}, - {0x6c,0xa6102003}, - {0x70,0x23000019}, - {0x74,0xa12ce004}, - {0x78,0x82146088}, - {0x7c,0xa4146084}, - {0xf0,0x84}, - {0x00,0xd2040001}, - {0x04,0xd408228c}, - {0x08,0x7fffffe8}, - {0x0c,0xd0040012}, - {0x10,0x9a146080}, - {0x14,0xd024000d}, - {0x18,0xc2002308}, - {0x1c,0xa12ce002}, - {0x20,0xa0040001}, - {0x24,0xa12c2002}, - {0x28,0xa214607c}, - {0x2c,0xd004000d}, - {0x30,0xd2040011}, - {0x34,0x7fffffdd}, - {0x38,0xd408228d}, - {0x3c,0xd0240012}, - {0x40,0xc208217f}, - {0x44,0xa8052001}, - {0x48,0x82006001}, - {0x4c,0x80a50001}, - {0x50,0x08bfffe8}, - {0x54,0xa604e003}, - {0x58,0xa6102001}, - {0x5c,0xc2002308}, - {0x60,0x80a4c001}, - {0x64,0x1880001c}, - {0x68,0x23000019}, - {0x6c,0xa12ce002}, - {0x70,0x821460e0}, - {0x74,0xa41460b0}, - {0x78,0xd2040001}, - {0x7c,0xd408228e}, - {0xf0,0x85}, - {0x00,0x7fffffca}, - {0x04,0xd0040012}, - {0x08,0x9a146080}, - {0x0c,0xd024000d}, - {0x10,0xc2002300}, - {0x14,0xa0004001}, - {0x18,0xa0040001}, - {0x1c,0xa12c2002}, - {0x20,0xa0040013}, - {0x24,0xa12c2002}, - {0x28,0xa2146050}, - {0x2c,0xd004000d}, - {0x30,0xd2040011}, - {0x34,0x7fffffbd}, - {0x38,0xd408228f}, - {0x3c,0xd0240012}, - {0x40,0xa604e001}, - {0x44,0xc2002308}, - {0x48,0x80a4c001}, - {0x4c,0x08bfffe8}, - {0x50,0x23000019}, - {0x54,0x81c7e008}, - {0x58,0x81e80000}, - {0x5c,0x9de3bf88}, - {0x60,0xc2002fe4}, - {0x64,0x9fc04000}, - {0x68,0xd0002590}, - {0x6c,0xda002550}, - {0x70,0x832b6004}, - {0x74,0x8220400d}, - {0x78,0xe000259c}, - {0x7c,0x82040001}, - {0xf0,0x86}, - {0x00,0x83306004}, - {0x04,0xc2202550}, - {0x08,0x11000018}, - {0x0c,0xc2002fe4}, - {0x10,0x9fc04000}, - {0x14,0x90122200}, - {0x18,0xc208217c}, - {0x1c,0xda08217d}, - {0x20,0x9a5b4001}, - {0x24,0xc200259c}, - {0x28,0x8200400d}, - {0x2c,0xc220259c}, - {0x30,0xda00259c}, - {0x34,0xc2002550}, - {0x38,0x80a34001}, - {0x3c,0x28800011}, - {0x40,0xc2002548}, - {0x44,0xc200259c}, - {0x48,0x80a04010}, - {0x4c,0x0880000d}, - {0x50,0xc2002548}, - {0x54,0x80a42000}, - {0x58,0x0280000a}, - {0x5c,0x01000000}, - {0x60,0x82087f7f}, - {0x64,0xc2202548}, - {0x68,0xc2002658}, - {0x6c,0x80a06000}, - {0x70,0x26800006}, - {0x74,0xc0202658}, - {0x78,0x10800005}, - {0x7c,0xc208254e}, - {0xf0,0x87}, - {0x00,0x82106080}, - {0x04,0xc2202548}, - {0x08,0xc208254e}, - {0x0c,0x80a00001}, - {0x10,0x82602000}, - {0x14,0xa0087ffe}, - {0x18,0xd8002548}, - {0x1c,0x83332010}, - {0x20,0x80886001}, - {0x24,0x02800012}, - {0x28,0xa0042003}, - {0x2c,0x03000180}, - {0x30,0x820b0001}, - {0x34,0x1b000080}, - {0x38,0x80a0400d}, - {0x3c,0x22800061}, - {0x40,0xc02026d4}, - {0x44,0xc2002160}, - {0x48,0x80886040}, - {0x4c,0x0280002c}, - {0x50,0xa0102000}, - {0x54,0xc2002558}, - {0x58,0x80a06000}, - {0x5c,0x02800028}, - {0x60,0xa0102002}, - {0x64,0x10800026}, - {0x68,0xa0102000}, - {0x6c,0x033fc200}, - {0x70,0x82106030}, - {0x74,0xda004000}, - {0x78,0xc2002570}, - {0x7c,0x80a34001}, - {0xf0,0x88}, - {0x00,0x32800050}, - {0x04,0xc02026d4}, - {0x08,0xc2002200}, - {0x0c,0x80a06000}, - {0x10,0x3280004c}, - {0x14,0xc02026d4}, - {0x18,0xda002690}, - {0x1c,0x03000007}, - {0x20,0x808b4001}, - {0x24,0x32800047}, - {0x28,0xc02026d4}, - {0x2c,0xda002654}, - {0x30,0xc20021dc}, - {0x34,0x80a34001}, - {0x38,0x2a800008}, - {0x3c,0xc2002514}, - {0x40,0xc200254c}, - {0x44,0x8330600e}, - {0x48,0x80886001}, - {0x4c,0x1280000a}, - {0x50,0x808b2040}, - {0x54,0xc2002514}, - {0x58,0x80a06000}, - {0x5c,0x22800009}, - {0x60,0xc20c2314}, - {0x64,0x808b2080}, - {0x68,0x22800006}, - {0x6c,0xc20c2314}, - {0x70,0x808b2040}, - {0x74,0x32800033}, - {0x78,0xc02026d4}, - {0x7c,0xc20c2314}, - {0xf0,0x89}, - {0x00,0x80a06000}, - {0x04,0x2280002f}, - {0x08,0xc02026d4}, - {0x0c,0xc20026d4}, - {0x10,0x98006001}, - {0x14,0xc2002700}, - {0x18,0xda082169}, - {0x1c,0xd82026d4}, - {0x20,0x80a0400d}, - {0x24,0x0480000a}, - {0x28,0xc20c2314}, - {0x2c,0x820860ff}, - {0x30,0xda082168}, - {0x34,0x8258400d}, - {0x38,0x80a30001}, - {0x3c,0x06800021}, - {0x40,0x01000000}, - {0x44,0x10800007}, - {0x48,0xc02026d4}, - {0x4c,0x820860ff}, - {0x50,0x80a30001}, - {0x54,0x0680001b}, - {0x58,0x01000000}, - {0x5c,0xc02026d4}, - {0x60,0xc20c234c}, - {0x64,0xc227bfec}, - {0x68,0xc20c230c}, - {0x6c,0xc227bff0}, - {0x70,0xa0102000}, - {0x74,0xc208217c}, - {0x78,0x80a40001}, - {0x7c,0x1a800011}, - {0xf0,0x8a}, - {0x00,0x01000000}, - {0x04,0xc20c2380}, - {0x08,0xc227bfe8}, - {0x0c,0xa2102000}, - {0x10,0xc208217d}, - {0x14,0x80a44001}, - {0x18,0x3a800006}, - {0x1c,0xa0042001}, - {0x20,0x7ffff716}, - {0x24,0x9007bfe8}, - {0x28,0x10bffffa}, - {0x2c,0xa2046001}, - {0x30,0xc208217c}, - {0x34,0x80a40001}, - {0x38,0x2abffff4}, - {0x3c,0xc20c2380}, - {0x40,0x81c7e008}, - {0x44,0x81e80000}, - {0x48,0x9de3bf88}, - {0x4c,0xd8082246}, - {0x50,0x80a32000}, - {0x54,0x22800040}, - {0x58,0xc02026e0}, - {0x5c,0xda00254c}, - {0x60,0x83336018}, - {0x64,0x80886001}, - {0x68,0x12800007}, - {0x6c,0x03004000}, - {0x70,0xc20026e4}, - {0x74,0x80a06000}, - {0x78,0x22800008}, - {0x7c,0xc200255c}, - {0xf0,0x8b}, - {0x00,0x03004000}, - {0x04,0x822b4001}, - {0x08,0xc220254c}, - {0x0c,0xc027bfec}, - {0x10,0x1080000e}, - {0x14,0xc027bff0}, - {0x18,0x80a06000}, - {0x1c,0x3280002e}, - {0x20,0xc02026e0}, - {0x24,0xc20026e0}, - {0x28,0x82006001}, - {0x2c,0x80a0400c}, - {0x30,0x06800029}, - {0x34,0xc22026e0}, - {0x38,0xc2082244}, - {0x3c,0xc227bfec}, - {0x40,0xc2082245}, - {0x44,0xc227bff0}, - {0x48,0xe008217c}, - {0x4c,0xc20022fc}, - {0x50,0x80a40001}, - {0x54,0x1a80000c}, - {0x58,0xa2102001}, - {0x5c,0xc20c2380}, - {0x60,0xc227bfe8}, - {0x64,0xc20022f8}, - {0x68,0x80a44001}, - {0x6c,0x38bffff8}, - {0x70,0xa0042001}, - {0x74,0x7ffff6e1}, - {0x78,0x9007bfe8}, - {0x7c,0x10bffffa}, - {0xf0,0x8c}, - {0x00,0xa2046001}, - {0x04,0xa0102001}, - {0x08,0xc208217c}, - {0x0c,0x80a40001}, - {0x10,0x14800010}, - {0x14,0xa2102000}, - {0x18,0xc208217d}, - {0x1c,0xda00247c}, - {0x20,0x9a5b4001}, - {0x24,0xc20c237f}, - {0x28,0x8200400d}, - {0x2c,0xc227bfe8}, - {0x30,0xc2002304}, - {0x34,0x80a44001}, - {0x38,0x3abffff4}, - {0x3c,0xa0042001}, - {0x40,0x7ffff6ce}, - {0x44,0x9007bfe8}, - {0x48,0x10bffffa}, - {0x4c,0xa2046001}, - {0x50,0xc02026e0}, - {0x54,0x81c7e008}, - {0x58,0x81e80000}, - {0x5c,0xd2002208}, - {0x60,0x80a26000}, - {0x64,0x0280001a}, - {0x68,0x01000000}, - {0x6c,0xc2102548}, - {0x70,0x80886001}, - {0x74,0x12800016}, - {0x78,0x01000000}, - {0x7c,0xc2002514}, - {0xf0,0x8d}, - {0x00,0x80a06000}, - {0x04,0x12800007}, - {0x08,0xc2002558}, - {0x0c,0x80a06000}, - {0x10,0x0280000f}, - {0x14,0x9a007fff}, - {0x18,0x1080000d}, - {0x1c,0xda202558}, - {0x20,0x15200040}, - {0x24,0x1b3fc200}, - {0x28,0x9812a001}, - {0x2c,0x80a06000}, - {0x30,0x12800006}, - {0x34,0x96136070}, - {0x38,0xd8234000}, - {0x3c,0xc2002298}, - {0x40,0xc222c000}, - {0x44,0xd4234000}, - {0x48,0xd2202558}, - {0x4c,0x81c3e008}, - {0x50,0x01000000}, - {0x54,0x92102000}, - {0x58,0xc2002514}, - {0x5c,0x80a24001}, - {0x60,0x1a800019}, - {0x64,0x912a6002}, - {0x68,0xd4022710}, - {0x6c,0x820aafff}, - {0x70,0x9732a010}, - {0x74,0x98006001}, - {0x78,0x960aefff}, - {0x7c,0x82007fff}, - {0xf0,0x8e}, - {0x00,0x83286018}, - {0x04,0x992b2010}, - {0x08,0x9a02ffff}, - {0x0c,0x8200400c}, - {0x10,0x9b2b6008}, - {0x14,0x8200400d}, - {0x18,0x8200400b}, - {0x1c,0x9532a00c}, - {0x20,0x92026001}, - {0x24,0x808aa001}, - {0x28,0x12800003}, - {0x2c,0x82006001}, - {0x30,0xc2222738}, - {0x34,0xc2002514}, - {0x38,0x80a24001}, - {0x3c,0x0abfffeb}, - {0x40,0x912a6002}, - {0x44,0x81c3e008}, - {0x48,0x01000000}, - {0x4c,0x9de3bf98}, - {0x50,0x92102000}, - {0x54,0xc2002514}, - {0x58,0x80a24001}, - {0x5c,0x1a80005f}, - {0x60,0x94102000}, - {0x64,0xb72a6002}, - {0x68,0xf20ee738}, - {0x6c,0xc20ee739}, - {0x70,0x80a64001}, - {0x74,0x96102000}, - {0x78,0x9e102000}, - {0x7c,0x14800022}, - {0xf0,0x8f}, - {0x00,0x9a102000}, - {0x04,0x82064019}, - {0x08,0x82004019}, - {0x0c,0x3b000019}, - {0x10,0x90176080}, - {0x14,0xb9286002}, - {0x18,0xc20ee73b}, - {0x1c,0xf40ee73a}, - {0x20,0x80a68001}, - {0x24,0x14800012}, - {0x28,0x8207001a}, - {0x2c,0x83286002}, - {0x30,0x82004008}, - {0x34,0xd80aa73b}, - {0x38,0xf6004000}, - {0x3c,0xba5ec01a}, - {0x40,0x82006004}, - {0x44,0xb406a001}, - {0x48,0x80a6e000}, - {0x4c,0x04800005}, - {0x50,0xb05ec019}, - {0x54,0x9e03c018}, - {0x58,0x9a03401d}, - {0x5c,0x9602c01b}, - {0x60,0x80a6800c}, - {0x64,0x24bffff6}, - {0x68,0xf6004000}, - {0x6c,0xb72a6002}, - {0x70,0xb2066001}, - {0x74,0xc20ee739}, - {0x78,0x80a64001}, - {0x7c,0x04bfffe7}, - {0xf0,0x90}, - {0x00,0xb807200c}, - {0x04,0xbb2b6006}, - {0x08,0xb92be006}, - {0x0c,0xc202a710}, - {0x10,0x9b3f201f}, - {0x14,0x81836000}, - {0x18,0x01000000}, - {0x1c,0x01000000}, - {0x20,0x01000000}, - {0x24,0xb87f000b}, - {0x28,0x9b3f601f}, - {0x2c,0x81836000}, - {0x30,0x01000000}, - {0x34,0x01000000}, - {0x38,0x01000000}, - {0x3c,0xba7f400b}, - {0x40,0x8330600c}, - {0x44,0x80886001}, - {0x48,0x9e073fe0}, - {0x4c,0x02800007}, - {0x50,0x9a077fe0}, - {0x54,0xc200237c}, - {0x58,0x80a06000}, - {0x5c,0x22800003}, - {0x60,0x9e073fa0}, - {0x64,0x9a077fa0}, - {0x68,0x80a3e000}, - {0x6c,0x24800002}, - {0x70,0x9e102001}, - {0x74,0x80a36000}, - {0x78,0x24800002}, - {0x7c,0x9a102001}, - {0xf0,0x91}, - {0x00,0xc208217f}, - {0x04,0x83286006}, - {0x08,0x80a3c001}, - {0x0c,0x36800002}, - {0x10,0x9e007fff}, - {0x14,0xc208217e}, - {0x18,0x83286006}, - {0x1c,0x80a34001}, - {0x20,0x36800002}, - {0x24,0x9a007fff}, - {0x28,0xfa02a710}, - {0x2c,0x832be010}, - {0x30,0x3900003c}, - {0x34,0x8200400d}, - {0x38,0xba0f401c}, - {0x3c,0x8200401d}, - {0x40,0xc222a710}, - {0x44,0x92026001}, - {0x48,0xc2002514}, - {0x4c,0x80a24001}, - {0x50,0x0abfffa5}, - {0x54,0x9402a004}, - {0x58,0x7ffff4bd}, - {0x5c,0x91e8205a}, - {0x60,0x01000000}, - {0x64,0x9de3bf98}, - {0x68,0xd8002548}, - {0x6c,0x8333200c}, - {0x70,0x80886001}, - {0x74,0x12800081}, - {0x78,0x01000000}, - {0x7c,0xc208254d}, - {0xf0,0x92}, - {0x00,0x80a06000}, - {0x04,0x1280007d}, - {0x08,0x01000000}, - {0x0c,0xc208254e}, - {0x10,0x80a06000}, - {0x14,0x02800079}, - {0x18,0x01000000}, - {0x1c,0xc2002554}, - {0x20,0x825860fa}, - {0x24,0xda002500}, - {0x28,0x80a34001}, - {0x2c,0x0a800073}, - {0x30,0x01000000}, - {0x34,0xd6002658}, - {0x38,0x80a2e000}, - {0x3c,0x1480001c}, - {0x40,0x8202ffff}, - {0x44,0xc2002514}, - {0x48,0x80a06001}, - {0x4c,0x3280006b}, - {0x50,0xc0202658}, - {0x54,0xc2002710}, - {0x58,0x80a06000}, - {0x5c,0x12800004}, - {0x60,0x808b2040}, - {0x64,0x10800065}, - {0x68,0xc0202658}, - {0x6c,0x32800006}, - {0x70,0xd800239c}, - {0x74,0x80a2e000}, - {0x78,0x0680000d}, - {0x7c,0x8202e001}, - {0xf0,0x93}, - {0x00,0xd800239c}, - {0x04,0x0300003f}, - {0x08,0x9b332010}, - {0x0c,0x821063ff}, - {0x10,0x980b0001}, - {0x14,0x9a38000d}, - {0x18,0x9a23400c}, - {0x1c,0x80a2c00d}, - {0x20,0x06800005}, - {0x24,0x03296956}, - {0x28,0x8202ffff}, - {0x2c,0x10800053}, - {0x30,0xc2202658}, - {0x34,0x9a10625a}, - {0x38,0xc200250c}, - {0x3c,0x80a0400d}, - {0x40,0x02800004}, - {0x44,0xa0102000}, - {0x48,0xda20250c}, - {0x4c,0xc0202654}, - {0x50,0x832c2002}, - {0x54,0x92006610}, - {0x58,0xc2006610}, - {0x5c,0x90102710}, - {0x60,0x80a06000}, - {0x64,0x0280000d}, - {0x68,0xa0042001}, - {0x6c,0x7ffff4e6}, - {0x70,0x01000000}, - {0x74,0xc2002300}, - {0x78,0xda002308}, - {0x7c,0x82584001}, - {0xf0,0x94}, - {0x00,0x9a5b400d}, - {0x04,0x8200400d}, - {0x08,0x83286006}, - {0x0c,0x80a20001}, - {0x10,0x0a80003a}, - {0x14,0x01000000}, - {0x18,0x80a4200f}, - {0x1c,0x08bfffee}, - {0x20,0x832c2002}, - {0x24,0x030041eb}, - {0x28,0xc2202658}, - {0x2c,0xa010200f}, - {0x30,0x9b2c2002}, - {0x34,0xc203660c}, - {0x38,0xa0843fff}, - {0x3c,0x12bffffd}, - {0x40,0xc2236610}, - {0x44,0xda002654}, - {0x48,0xc2002710}, - {0x4c,0xc2202610}, - {0x50,0x80a3600f}, - {0x54,0x14800003}, - {0x58,0x9010200f}, - {0x5c,0x9010000d}, - {0x60,0x03000017}, - {0x64,0x9e106240}, - {0x68,0x82006400}, - {0x6c,0xa2106200}, - {0x70,0x0300003f}, - {0x74,0xa61063ff}, - {0x78,0x92022001}, - {0x7c,0xa0102000}, - {0xf0,0x95}, - {0x00,0xa410000f}, - {0x04,0x972c2002}, - {0x08,0x8203c00b}, - {0x0c,0xda106002}, - {0x10,0x9804400b}, - {0x14,0xd4132002}, - {0x18,0xc213c00b}, - {0x1c,0xd814400b}, - {0x20,0x82584008}, - {0x24,0x9a5b4008}, - {0x28,0x8200400c}, - {0x2c,0x9a03400a}, - {0x30,0x81800000}, - {0x34,0x01000000}, - {0x38,0x01000000}, - {0x3c,0x01000000}, - {0x40,0x82704009}, - {0x44,0x81800000}, - {0x48,0x01000000}, - {0x4c,0x01000000}, - {0x50,0x01000000}, - {0x54,0x9a734009}, - {0x58,0x83286010}, - {0x5c,0x9a0b4013}, - {0x60,0x8200400d}, - {0x64,0xa0042001}, - {0x68,0x80a4204f}, - {0x6c,0x08bfffe6}, - {0x70,0xc222c012}, - {0x74,0xd2202654}, - {0x78,0x81c7e008}, - {0x7c,0x81e80000}, - {0xf0,0x96}, - {0x00,0x9de3bf98}, - {0x04,0xa2102000}, - {0x08,0xc2002514}, - {0x0c,0x80a44001}, - {0x10,0xa0102000}, - {0x14,0x1a800012}, - {0x18,0x832c2002}, - {0x1c,0x92006710}, - {0x20,0xc2006710}, - {0x24,0x80a06000}, - {0x28,0x02800009}, - {0x2c,0x90100018}, - {0x30,0x7ffff495}, - {0x34,0x01000000}, - {0x38,0x82102001}, - {0x3c,0x80a20019}, - {0x40,0x1a800003}, - {0x44,0x83284010}, - {0x48,0xa2144001}, - {0x4c,0xa0042001}, - {0x50,0xc2002514}, - {0x54,0x10bffff0}, - {0x58,0x80a40001}, - {0x5c,0x81c7e008}, - {0x60,0x91e80011}, - {0x64,0x9de3bf90}, - {0x68,0x03003fc0}, - {0x6c,0x82106001}, - {0x70,0xc227bff0}, - {0x74,0xc027bff4}, - {0x78,0xa0102000}, - {0x7c,0x8207bff8}, - {0xf0,0x97}, - {0x00,0x82040001}, - {0x04,0xd2487ff9}, - {0x08,0xd0487ff8}, - {0x0c,0x90060008}, - {0x10,0x92064009}, - {0x14,0x94102000}, - {0x18,0x7ffff4dd}, - {0x1c,0x9610001a}, - {0x20,0x80a22000}, - {0x24,0x02800004}, - {0x28,0xa0042001}, - {0x2c,0x10800006}, - {0x30,0xb0102001}, - {0x34,0x80a42004}, - {0x38,0x04bffff2}, - {0x3c,0x8207bff8}, - {0x40,0xb0102000}, - {0x44,0x81c7e008}, - {0x48,0x81e80000}, - {0x4c,0x9de3bf98}, - {0x50,0xc2102548}, - {0x54,0x80886001}, - {0x58,0xb8102000}, - {0x5c,0xba102000}, - {0x60,0x02800004}, - {0x64,0xae102000}, - {0x68,0x10800026}, - {0x6c,0xec002354}, - {0x70,0xc200254c}, - {0x74,0x80886200}, - {0x78,0x32800010}, - {0x7c,0xc2002690}, - {0xf0,0x98}, - {0x00,0x03296956}, - {0x04,0xda00250c}, - {0x08,0x8210625a}, - {0x0c,0x80a34001}, - {0x10,0x12800006}, - {0x14,0xc20023c8}, - {0x18,0x80886800}, - {0x1c,0x32800007}, - {0x20,0xc2002690}, - {0x24,0xc20023c8}, - {0x28,0x80886400}, - {0x2c,0x22800015}, - {0x30,0xec0022ac}, - {0x34,0xc2002690}, - {0x38,0x80886200}, - {0x3c,0x1280000a}, - {0x40,0xb8102001}, - {0x44,0x13000017}, - {0x48,0xc2002fd0}, - {0x4c,0x92126240}, - {0x50,0x9fc04000}, - {0x54,0xd0002590}, - {0x58,0xc2002690}, - {0x5c,0x82106200}, - {0x60,0xc2202690}, - {0x64,0x10800007}, - {0x68,0xec0023a0}, - {0x6c,0xc200254c}, - {0x70,0x1b000080}, - {0x74,0x8210400d}, - {0x78,0x10800080}, - {0x7c,0xc220254c}, - {0xf0,0x99}, - {0x00,0x7ffff3d3}, - {0x04,0x901020aa}, - {0x08,0xda002500}, - {0x0c,0xc20022d0}, - {0x10,0x80a34001}, - {0x14,0x3880000b}, - {0x18,0xba102001}, - {0x1c,0xc2002200}, - {0x20,0x80a00001}, - {0x24,0x9a402000}, - {0x28,0x80a00016}, - {0x2c,0x82603fff}, - {0x30,0x80934001}, - {0x34,0x02800004}, - {0x38,0xaa102000}, - {0x3c,0xba102001}, - {0x40,0xaa102000}, - {0x44,0xa52d6003}, - {0x48,0xc204a760}, - {0x4c,0x80a06000}, - {0x50,0x22800067}, - {0x54,0xaa056001}, - {0x58,0x80a56000}, - {0x5c,0x12800008}, - {0x60,0x80a76000}, - {0x64,0xc200255c}, - {0x68,0x80a06000}, - {0x6c,0x1280000c}, - {0x70,0x29200000}, - {0x74,0x1080000a}, - {0x78,0xa8102000}, - {0x7c,0x02800005}, - {0xf0,0x9a}, - {0x00,0x9004a760}, - {0x04,0xc024a764}, - {0x08,0x10800058}, - {0x0c,0xc024a760}, - {0x10,0x7fffff7c}, - {0x14,0x92100016}, - {0x18,0xa8100008}, - {0x1c,0x80a52000}, - {0x20,0x02800050}, - {0x24,0xae15c014}, - {0x28,0xc214a766}, - {0x2c,0x80a06000}, - {0x30,0x0280000a}, - {0x34,0x80a56000}, - {0x38,0xc204a764}, - {0x3c,0x82007fff}, - {0x40,0xc224a764}, - {0x44,0xc214a766}, - {0x48,0x80a06000}, - {0x4c,0x32800048}, - {0x50,0xaa056001}, - {0x54,0x80a56000}, - {0x58,0x12800006}, - {0x5c,0x1b004000}, - {0x60,0xc200254c}, - {0x64,0x8210400d}, - {0x68,0x10800040}, - {0x6c,0xc220254c}, - {0x70,0xc2102548}, - {0x74,0x80886001}, - {0x78,0x02800006}, - {0x7c,0x82103fff}, - {0xf0,0x9b}, - {0x00,0xc024a764}, - {0x04,0xc024a760}, - {0x08,0x10800038}, - {0x0c,0xc2202700}, - {0x10,0x80a72000}, - {0x14,0x02bfffb6}, - {0x18,0xa6102000}, - {0x1c,0xc2002514}, - {0x20,0x80a4c001}, - {0x24,0x1a80002c}, - {0x28,0x83350013}, - {0x2c,0x80886001}, - {0x30,0x02800027}, - {0x34,0x9b2ce002}, - {0x38,0xe0036710}, - {0x3c,0xa3342016}, - {0x40,0xa00c2fff}, - {0x44,0xa13c2006}, - {0x48,0xa20c603f}, - {0x4c,0xa0042001}, - {0x50,0xa2046001}, - {0x54,0x92100011}, - {0x58,0xd410246e}, - {0x5c,0x7fffff62}, - {0x60,0x90100010}, - {0x64,0x80a22000}, - {0x68,0x92100011}, - {0x6c,0x1280000f}, - {0x70,0x90100010}, - {0x74,0xc210246c}, - {0x78,0x94906000}, - {0x7c,0x2280000f}, - {0xf0,0x9c}, - {0x00,0xc200254c}, - {0x04,0xc2002548}, - {0x08,0x80886080}, - {0x0c,0x2280000b}, - {0x10,0xc200254c}, - {0x14,0x7fffff54}, - {0x18,0x01000000}, - {0x1c,0x80a22000}, - {0x20,0x22800006}, - {0x24,0xc200254c}, - {0x28,0x82102001}, - {0x2c,0x83284013}, - {0x30,0x10800007}, - {0x34,0xa82d0001}, - {0x38,0x1b000080}, - {0x3c,0x8210400d}, - {0x40,0xc220254c}, - {0x44,0x10800004}, - {0x48,0xc02026e8}, - {0x4c,0x10bfffd4}, - {0x50,0xa604e001}, - {0x54,0x80a52000}, - {0x58,0x32800005}, - {0x5c,0xaa056001}, - {0x60,0xc024a764}, - {0x64,0xc024a760}, - {0x68,0xaa056001}, - {0x6c,0x80a56013}, - {0x70,0x04bfff96}, - {0x74,0xa52d6003}, - {0x78,0x80a5e000}, - {0x7c,0x22800002}, - {0xf0,0x9d}, - {0x00,0xc02026e8}, - {0x04,0xc200255c}, - {0x08,0x80a06000}, - {0x0c,0x0280000a}, - {0x10,0x80a76000}, - {0x14,0xc2002760}, - {0x18,0x80a06000}, - {0x1c,0x12800006}, - {0x20,0x80a76000}, - {0x24,0x03000004}, - {0x28,0xc2202760}, - {0x2c,0xc2002248}, - {0x30,0xc2202764}, - {0x34,0x1280002b}, - {0x38,0xaa102000}, - {0x3c,0xc2002514}, - {0x40,0x80a54001}, - {0x44,0x1a800027}, - {0x48,0x96102001}, - {0x4c,0x992d6002}, - {0x50,0xc2032710}, - {0x54,0x8330600c}, - {0x58,0x80886001}, - {0x5c,0x3280001d}, - {0x60,0xaa056001}, - {0x64,0x832ac015}, - {0x68,0x808dc001}, - {0x6c,0x32800019}, - {0x70,0xaa056001}, - {0x74,0xa6102001}, - {0x78,0x9b2ce003}, - {0x7c,0xc2036760}, - {0xf0,0x9e}, - {0x00,0x80a06000}, - {0x04,0x1280000f}, - {0x08,0xa604e001}, - {0x0c,0xc2032710}, - {0x10,0xc2236760}, - {0x14,0xc2102548}, - {0x18,0x80886001}, - {0x1c,0x02800004}, - {0x20,0x80a72000}, - {0x24,0x10800005}, - {0x28,0xc2002358}, - {0x2c,0x22800003}, - {0x30,0xc2002378}, - {0x34,0xc200239c}, - {0x38,0x10800005}, - {0x3c,0xc2236764}, - {0x40,0x80a4e013}, - {0x44,0x04bfffee}, - {0x48,0x9b2ce003}, - {0x4c,0xaa056001}, - {0x50,0xc2002514}, - {0x54,0x80a54001}, - {0x58,0x0abfffde}, - {0x5c,0x992d6002}, - {0x60,0x81c7e008}, - {0x64,0x81e80000}, - {0x68,0x9de3bf98}, - {0x6c,0x7ffff46f}, - {0x70,0x01000000}, - {0x74,0xda002548}, - {0x78,0x83336010}, - {0x7c,0x80886001}, - {0xf0,0x9f}, - {0x00,0x12800032}, - {0x04,0x8333600c}, - {0x08,0x80886001}, - {0x0c,0x1280002f}, - {0x10,0x01000000}, - {0x14,0xc2002538}, - {0x18,0x80a06000}, - {0x1c,0x2280000b}, - {0x20,0xc208254d}, - {0x24,0x82007fff}, - {0x28,0x80a06000}, - {0x2c,0x12800006}, - {0x30,0xc2202538}, - {0x34,0xc200254c}, - {0x38,0x1b002000}, - {0x3c,0x8210400d}, - {0x40,0xc220254c}, - {0x44,0xc208254d}, - {0x48,0x80a06000}, - {0x4c,0x0280001f}, - {0x50,0x033fc180}, - {0x54,0xc0204000}, - {0x58,0xa0102002}, - {0x5c,0x7ffff4a9}, - {0x60,0x90102001}, - {0x64,0x11000099}, - {0x68,0x7fffef6b}, - {0x6c,0x9012233c}, - {0x70,0xa0843fff}, - {0x74,0x1cbffffa}, - {0x78,0x01000000}, - {0x7c,0x7ffff4a1}, - {0xf0,0xa0}, - {0x00,0x90102000}, - {0x04,0xda00254c}, - {0x08,0x83336010}, - {0x0c,0x80886001}, - {0x10,0x32800002}, - {0x14,0xc020250c}, - {0x18,0x83336017}, - {0x1c,0x80886001}, - {0x20,0x32800005}, - {0x24,0xc2002538}, - {0x28,0xc2002188}, - {0x2c,0xc2202538}, - {0x30,0xc2002538}, - {0x34,0xc220265c}, - {0x38,0x7ffff190}, - {0x3c,0x90102015}, - {0x40,0x82102001}, - {0x44,0xc2202584}, - {0x48,0x81c7e008}, - {0x4c,0x81e80000}, - {0x50,0xc2002588}, - {0x54,0x80a06000}, - {0x58,0x32800006}, - {0x5c,0xc200258c}, - {0x60,0xc2002554}, - {0x64,0xc2202588}, - {0x68,0xc0202594}, - {0x6c,0xc200258c}, - {0x70,0x80a06000}, - {0x74,0x32800006}, - {0x78,0xc2102548}, - {0x7c,0xc2002554}, - {0xf0,0xa1}, - {0x00,0xc220258c}, - {0x04,0xc0202598}, - {0x08,0xc2102548}, - {0x0c,0x80886001}, - {0x10,0x02800007}, - {0x14,0x01000000}, - {0x18,0xc2002558}, - {0x1c,0x80a06001}, - {0x20,0x18800003}, - {0x24,0x82102001}, - {0x28,0xc2202584}, - {0x2c,0x81c3e008}, - {0x30,0x01000000}, - {0x34,0xc2002548}, - {0x38,0x8330600e}, - {0x3c,0x80886001}, - {0x40,0x12800048}, - {0x44,0x98102000}, - {0x48,0xc2002514}, - {0x4c,0x80a30001}, - {0x50,0x1a80000b}, - {0x54,0x033fc180}, - {0x58,0x96106004}, - {0x5c,0x832b2002}, - {0x60,0xda006710}, - {0x64,0xda20400b}, - {0x68,0x98032001}, - {0x6c,0xc2002514}, - {0x70,0x80a30001}, - {0x74,0x0abffffb}, - {0x78,0x832b2002}, - {0x7c,0xda00254c}, - {0xf0,0xa2}, - {0x00,0x808b6001}, - {0x04,0x32800008}, - {0x08,0xc208254e}, - {0x0c,0xc2002514}, - {0x10,0x9a136001}, - {0x14,0x82106100}, - {0x18,0xda20254c}, - {0x1c,0xc2202514}, - {0x20,0xc208254e}, - {0x24,0x80a06000}, - {0x28,0x3280000b}, - {0x2c,0xc2082517}, - {0x30,0xc20023c8}, - {0x34,0x83306016}, - {0x38,0x80886001}, - {0x3c,0x22800006}, - {0x40,0xc2082517}, - {0x44,0xc2002514}, - {0x48,0x82106200}, - {0x4c,0xc2202514}, - {0x50,0xc2082517}, - {0x54,0x80a06000}, - {0x58,0x2280001d}, - {0x5c,0xd8082517}, - {0x60,0xc2002548}, - {0x64,0x80886800}, - {0x68,0x22800006}, - {0x6c,0xd80023c8}, - {0x70,0xc2002514}, - {0x74,0x82106400}, - {0x78,0xc2202514}, - {0x7c,0xd80023c8}, - {0xf0,0xa3}, - {0x00,0x80a32000}, - {0x04,0x16800007}, - {0x08,0x8333200c}, - {0x0c,0xc2002514}, - {0x10,0x1b000004}, - {0x14,0x8210400d}, - {0x18,0xc2202514}, - {0x1c,0x8333200c}, - {0x20,0x80886001}, - {0x24,0x2280000a}, - {0x28,0xd8082517}, - {0x2c,0xc2002540}, - {0x30,0x1b164020}, - {0x34,0x83286010}, - {0x38,0x8200400d}, - {0x3c,0xda002514}, - {0x40,0x9a134001}, - {0x44,0xda202514}, - {0x48,0xd8082517}, - {0x4c,0xda002514}, - {0x50,0x033fc180}, - {0x54,0xda204000}, - {0x58,0xd8202568}, - {0x5c,0xc0202540}, - {0x60,0x81c3e008}, - {0x64,0x01000000}, - {0x68,0x9de3bf98}, - {0x6c,0xd8002548}, - {0x70,0x8333200e}, - {0x74,0x80886001}, - {0x78,0x22800006}, - {0x7c,0xc2102516}, - {0xf0,0xa4}, - {0x00,0x03000010}, - {0x04,0x822b0001}, - {0x08,0x1080001e}, - {0x0c,0xc2202548}, - {0x10,0x80a06000}, - {0x14,0x02800006}, - {0x18,0x9b332003}, - {0x1c,0x808b2004}, - {0x20,0x2280000a}, - {0x24,0xc200231c}, - {0x28,0x9b332003}, - {0x2c,0x83332002}, - {0x30,0x82086001}, - {0x34,0x9a0b6001}, - {0x38,0x80a0400d}, - {0x3c,0x2280000a}, - {0x40,0xc2002560}, - {0x44,0xc200231c}, - {0x48,0x80a06000}, - {0x4c,0x22800003}, - {0x50,0xc2082360}, - {0x54,0x82102005}, - {0x58,0xc2202560}, - {0x5c,0x10800007}, - {0x60,0x90102001}, - {0x64,0x80a06000}, - {0x68,0x02800004}, - {0x6c,0x90102000}, - {0x70,0x10bffffa}, - {0x74,0x82007fff}, - {0x78,0x7ffff402}, - {0x7c,0x01000000}, - {0xf0,0xa5}, - {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,0xa6}, - {0x00,0x00001688}, - {0x04,0xa5010503}, - {0x08,0xa5000000}, - {0x0c,0x00000000}, - {0x10,0x4c494348}, - {0x14,0x49444449}, - {0x18,0x88ecbdae}, - {0x1c,0x39cf8648}, - {0x20,0xa98080cd}, - {0x24,0xc96fbe71}, - {0x28,0x9243c641}, - {0x2c,0xc654cc4d}, - {0x30,0x80cb80d1}, - {0x34,0xc471cce5}, - {0x38,0xa898c9e5}, - {0x3c,0xc400bc0d}, - {0x40,0xbc43c643}, - {0x44,0xbd130000}, - {0x48,0x00000000}, - {0x4c,0x00000000}, - {0x50,0x00000000}, - {0x54,0x00000000}, - {0x58,0x00000000}, - {0x5c,0x00000000}, - {0x60,0x00000000}, - {0x64,0x00000000}, - {0x68,0x41756720}, - {0x6c,0x31322032}, - {0x70,0x30313500}, - {0x74,0x00000000}, - {0x78,0x31383a31}, - {0x7c,0x393a3338}, - - - -}; - - - -#endif diff --git a/drivers/input/touchscreen/gslx680_pad.c b/drivers/input/touchscreen/gslx680_pad.c index d7fd1c70d420..d7da14313209 100644 --- a/drivers/input/touchscreen/gslx680_pad.c +++ b/drivers/input/touchscreen/gslx680_pad.c @@ -181,7 +181,7 @@ static u32 gsl_write_interface(struct i2c_client *client, const u8 reg, u8 *buf, 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±¨´íʱ´ò¿ªÕâ¸ö + //xfer_msg[0].scl_rate = 400*1000; //RK3066 RK2926 I2C±¨´íʱ´ò¿ªÕâ¸ö return i2c_transfer(client->adapter, xfer_msg, 1) == 1 ? 0 : -EFAULT; } diff --git a/drivers/input/touchscreen/gslx680_vr.c b/drivers/input/touchscreen/gslx680_vr.c new file mode 100644 index 000000000000..5d3156c48629 --- /dev/null +++ b/drivers/input/touchscreen/gslx680_vr.c @@ -0,0 +1,1848 @@ +/* + * drivers/input/touchscreen/gslX680.c + * + * Copyright (c) 2012 Shanghai Basewin + * Guan Yuwei + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include "rockchip_gslX680_rk3168.h" +#include "tp_suspend.h" +#include "gslx680_vr.h" +#include +#include + +#define GSL_DEBUG + +/* +struct fw_data +{ + u32 offset : 8; + u32 : 0; + u32 val; +}; +*/ + +#define RK_GEAR_TOUCH +#define REPORT_DATA_ANDROID_4_0 +#define HAVE_TOUCH_KEY +//#define SLEEP_CLEAR_POINT + +//#define FILTER_POINT + +#ifdef FILTER_POINT +#define FILTER_MAX 9 //6 +#endif + +#define GSLX680_I2C_NAME "gslX680" +#define GSLX680_I2C_ADDR 0x40 + +//#define IRQ_PORT RK2928_PIN1_PB0//RK30_PIN1_PB7 +//#define WAKE_PORT RK30_PIN0_PA1//RK30_PIN0_PB6 + +#define GSL_DATA_REG 0x80 +#define GSL_STATUS_REG 0xe0 +#define GSL_PAGE_REG 0xf0 + +#define TPD_PROC_DEBUG +#ifdef TPD_PROC_DEBUG +#include +#include +#include +//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; +static struct i2c_client *i2c_client = NULL; +#endif +#define GSL_MONITOR +#define PRESS_MAX 255 +#define MAX_FINGERS 10 +#define MAX_CONTACTS 10 +#define DMA_TRANS_LEN 0x20 +#ifdef GSL_MONITOR + +#ifdef RK_GEAR_TOUCH +static int g_istouch=0; +#endif + +static struct workqueue_struct *gsl_monitor_workqueue = NULL; +static u8 int_1st[4] = { 0 }; +static u8 int_2nd[4] = { 0 }; +//static char dac_counter = 0; +static char b0_counter = 0; +static char bc_counter = 0; +static char i2c_lock_flag = 0; +#endif + +#define WRITE_I2C_SPEED (350*1000) +#define I2C_SPEED (200*1000) +#define CLOSE_TP_POWER 0 +//add by yuandan +//#define HAVE_CLICK_TIMER + +#ifdef HAVE_CLICK_TIMER + +static struct workqueue_struct *gsl_timer_workqueue = NULL; +bool send_key = false; +struct semaphore my_sem; +#endif + +#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_LEFT, + KEY_RIGHT, + KEY_UP, + KEY_DOWN, + KEY_ENTER, +}; + +#define MAX_KEY_NUM (sizeof(key_array)/sizeof(key_array[0])) +//add by yuandan +int key_x[512]; +int key_y[512]; +int key_count = 0; +int key_repeat; +struct key_data gsl_key_data[MAX_KEY_NUM] = { + {KEY_BACK, 550, 650, 1400, 1600}, + {KEY_HOMEPAGE, 350, 450, 1400, 1600}, + {KEY_MENU, 150, 250, 1400, 1600}, + {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; + int flag_irq_is_disable; + spinlock_t irq_lock; + u8 *touch_data; + u8 device_id; + int irq; + int rst; + struct delayed_work gsl_monitor_work; +#if defined(CONFIG_HAS_EARLYSUSPEND) + struct early_suspend early_suspend; +#endif + +#if defined (HAVE_CLICK_TIMER) + struct work_struct click_work; +#endif + + struct tp_device tp; + struct pinctrl *pinctrl; + struct pinctrl_state *pins_default; + struct pinctrl_state *pins_sleep; + struct pinctrl_state *pins_inactive; +}; + +#ifdef GSL_DEBUG +#define print_info(fmt, args...) printk(fmt, ##args); +#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; + +int gslx680_set_pinctrl_state(struct gsl_ts *ts, struct pinctrl_state *state) +{ + int ret = 0; + + if (!IS_ERR(state)) { + ret = pinctrl_select_state(ts->pinctrl, state); + if (ret) + printk("could not set pins \n"); + } + + return ret; +} + +static int gslX680_init(struct gsl_ts *ts) +{ + struct device_node *np = ts->client->dev.of_node; + int err = 0; + int ret = 0; + + ts->irq = of_get_named_gpio_flags(np, "touch-gpio", 0, NULL); + ts->rst = of_get_named_gpio_flags(np, "reset-gpio", 0, NULL); + + //msleep(20); +#if 0 //#if defined (CONFIG_BOARD_ZM71C)||defined (CONFIG_BOARD_ZM72CP) || + defined(CONFIG_BOARD_ZM726C) || defined(CONFIG_BOARD_ZM726CE) + if (gpio_request(ts->rst, NULL) != 0) { + gpio_free(ts->rst); + printk("gslX680_init gpio_request error\n"); + return -EIO; + } +#endif + + /* pinctrl */ + ts->pinctrl = devm_pinctrl_get(&ts->client->dev); + if (IS_ERR(ts->pinctrl)) { + ret = PTR_ERR(ts->pinctrl); + //goto out; + } + + ts->pins_default = + pinctrl_lookup_state(ts->pinctrl, PINCTRL_STATE_DEFAULT); + //if (IS_ERR(ts->pins_default)) + // dev_err(&client->dev, "could not get default pinstate\n"); + + ts->pins_sleep = pinctrl_lookup_state(ts->pinctrl, PINCTRL_STATE_SLEEP); + //if (IS_ERR(ts->pins_sleep)) + // dev_err(&client->dev, "could not get sleep pinstate\n"); + + ts->pins_inactive = pinctrl_lookup_state(ts->pinctrl, "inactive"); + //if (IS_ERR(ts->pins_inactive)) + // dev_err(&client->dev, "could not get inactive pinstate\n"); + + err = gpio_request(ts->rst, "tp reset"); + if (err) { + printk("gslx680 reset gpio request failed.\n"); + return -1; + } + + gslx680_set_pinctrl_state(ts, ts->pins_default); + gpio_direction_output(ts->rst, 1); + gpio_set_value(ts->rst, 1); + + return 0; +} + +static int gslX680_shutdown_low(struct gsl_ts *ts) +{ + printk("gsl gslX680_shutdown_low\n"); + gpio_direction_output(ts->rst, 0); + gpio_set_value(ts->rst, 0); + + return 0; +} + +static int gslX680_shutdown_high(struct gsl_ts *ts) +{ + printk("gsl gslX680_shutdown_high\n"); + gpio_direction_output(ts->rst, 1); + gpio_set_value(ts->rst, 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=300*1000; + + 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=300*1000; + + 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; +} + */ + +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 = 100 * 1000; + + return i2c_transfer(client->adapter, xfer_msg, 1) == 1 ? 0 : -EFAULT; +} + +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; + //u8 read_buf[4] = {0}; + struct fw_data const *ptr_fw; + + 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); + 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); + cur = buf + 1; + } + + send_flag++; + } + } +} + +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("gsl 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("gsl 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("gsl I read reg 0xf0 is 0x%x\n", read_buf); + + return rc; +} +static void startup_chip(struct i2c_client *client) +{ + u8 tmp = 0x00; + + printk("gsl startup_chip\n"); + +#ifdef GSL_NOID_VERSION + gsl_DataInit(gsl_config_data_id); +#endif + gsl_ts_write(client, 0xe0, &tmp, 1); + mdelay(10); +} + +static void reset_chip(struct i2c_client *client) +{ + u8 tmp = 0x88; + u8 buf[4] = { 0x00 }; + + printk("gsl reset_chip\n"); + + gsl_ts_write(client, 0xe0, &tmp, sizeof(tmp)); + mdelay(20); + tmp = 0x04; + gsl_ts_write(client, 0xe4, &tmp, sizeof(tmp)); + mdelay(10); + gsl_ts_write(client, 0xbc, buf, sizeof(buf)); + mdelay(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); + mdelay(20); + write_buf[0] = 0x03; + gsl_ts_write(client, 0x80, &write_buf[0], 1); + mdelay(5); + write_buf[0] = 0x04; + gsl_ts_write(client, 0xe4, &write_buf[0], 1); + mdelay(5); + write_buf[0] = 0x00; + gsl_ts_write(client, 0xe0, &write_buf[0], 1); + mdelay(20); +} + +static void init_chip(struct i2c_client *client, struct gsl_ts *ts) +{ + int rc; + + printk("gsl init_chip\n"); + + gslX680_shutdown_low(ts); + mdelay(20); + gslX680_shutdown_high(ts); + mdelay(20); + rc = test_i2c(client); + 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, struct gsl_ts *ts) +{ + u8 read_buf[4] = { 0 }; + + mdelay(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) { + init_chip(client, ts); + } +} + +#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_config_read_proc(struct seq_file *m, void *v) +{ + //char *ptr = page; + char temp_data[5] = { 0 }; + unsigned int tmp = 0; + //unsigned int *ptr_fw; + + 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]; + seq_printf(m,"gsl_config_data_id[%d] = ",tmp); + if(tmp>=0&&tmp 512) { + //print_info("size not match [%d:%d]\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(i2c_client); + } else if ('e' == temp_buf[0] && 'n' == temp_buf[1]) { + //end //en + mdelay(20); + reset_chip(i2c_client); + startup_chip(i2c_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 + i2c_smbus_write_i2c_block_data(i2c_client, buf[4], 4, buf); + } +#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 < 512) { + 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 SLEEP_CLEAR_POINT +#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 +#endif + +#ifdef RK_GEAR_TOUCH +static void report_data(struct gsl_ts *ts, u16 x, u16 y, u8 pressure, u8 id) +{ +#ifdef RK_GEAR_TOUCH + int delt_x,delt_y; + static int old_x=0, old_y=0; +#endif + //#ifndef SWAP_XY + // swap(x, y); + //#endif + //printk("#####id=%d,x=%d,y=%d######\n",id,x,y); + + if (x > SCREEN_MAX_X || y > SCREEN_MAX_Y) { +#ifdef HAVE_TOUCH_KEY + //report_key(ts, x, y); + //printk("#####report_key x=%d,y=%d######\n",x,y); +#endif + return; + } + + /* + input_mt_slot(ts->input_dev, id); + input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, id); + input_report_abs(ts->input_dev, ABS_MT_POSITION_X, x); + input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, y); + input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, w); + input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, w); + */ +#ifdef RK_GEAR_TOUCH + if (g_istouch == 0){ + g_istouch = 1; + input_event(ts->input, EV_MSC, MSC_SCAN, 0x90001); + input_report_key(ts->input, 0x110, 1); + input_sync(ts->input); + } + delt_x = (int)x - old_x; + delt_y = (int)y - old_y; + delt_x /= 10; + delt_y /= 10; + input_report_rel(ts->input, REL_Y, -delt_x); + input_report_rel(ts->input, REL_X, -delt_y); + input_sync(ts->input); + old_x = x; + old_y = y; + return; +#endif + +#ifdef REPORT_DATA_ANDROID_4_0 + //printk("#####REPORT_DATA_ANDROID_4_0######\n"); + input_mt_slot(ts->input, id); + //input_report_abs(ts->input, ABS_MT_TRACKING_ID, id); + input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, 1); + input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, pressure); +#ifdef X_POL + input_report_abs(ts->input, ABS_MT_POSITION_X, SCREEN_MAX_X - x); +#else + input_report_abs(ts->input, ABS_MT_POSITION_X, x); +#endif +#ifdef Y_POL + input_report_abs(ts->input, ABS_MT_POSITION_Y, (SCREEN_MAX_Y - y)); +#else + input_report_abs(ts->input, ABS_MT_POSITION_Y, (y)); +#endif + input_report_abs(ts->input, ABS_MT_WIDTH_MAJOR, 1); +#else + //printk("#####nonono REPORT_DATA_ANDROID_4_0######\n"); + 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 +} +#endif + +void glsx680_ts_irq_disable(struct gsl_ts *ts) +{ + unsigned long irqflags; + + spin_lock_irqsave(&ts->irq_lock, irqflags); + if (!ts->flag_irq_is_disable) { + disable_irq_nosync(ts->client->irq); + ts->flag_irq_is_disable = 1; + } + spin_unlock_irqrestore(&ts->irq_lock, irqflags); +} + +void glsx680_ts_irq_enable(struct gsl_ts *ts) +{ + unsigned long irqflags = 0; + + spin_lock_irqsave(&ts->irq_lock, irqflags); + if (ts->flag_irq_is_disable) { + enable_irq(ts->client->irq); + ts->flag_irq_is_disable = 0; + } + spin_unlock_irqrestore(&ts->irq_lock, irqflags); +} + +static void gslX680_ts_worker(struct work_struct *work) +{ + int rc, i; + u8 id, touches; + u16 x, y; + +#ifdef GSL_NOID_VERSION + u32 tmp1; + u8 buf[4] = { 0 }; + struct gsl_touch_info cinfo; +#endif + + struct gsl_ts *ts = container_of(work, struct gsl_ts, work); + +#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"); + 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 +#ifdef RK_GEAR_TOUCH + report_data(ts, x_new, y_new, 10, id); +#endif + if (key_count <= 512) { + key_x[key_count] = x_new; + key_y[key_count] = y_new; + key_count++; + /*printk("test in key store in here, + x_new is %d , y_new is %d , + key_count is %d \n", x_new ,y_new,key_count);*/ + } + 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 RK_GEAR_TOUCH + if (g_istouch == 1){ + g_istouch = 0; + input_event(ts->input, EV_MSC, MSC_SCAN, 0x90001); + input_report_key(ts->input, 0x110, 0); + input_sync(ts->input); + } + g_istouch = 0; +#endif +#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) { +#ifdef REPORT_DATA_ANDROID_4_0 +#ifndef RK_GEAR_TOUCH + //input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, 0); + //input_report_abs(ts->input, ABS_MT_WIDTH_MAJOR, 0); + //input_mt_sync(ts->input); + + int temp_x = 0; + int temp_y = 0; + temp_x = + (((key_x[key_count - 1] - key_x[0]) > + 0) ? (key_x[key_count - 1] - key_x[0]) + : (key_x[0] - key_x[key_count - 1])); + temp_y = + (((key_y[key_count - 1] - key_y[0]) > + 0) ? (key_y[key_count - 1] - key_y[0]) + : (key_y[0] - key_y[key_count - 1])); + if (key_count <= 512) { + if (temp_x > temp_y) { + if ((key_x[key_count - 1] - key_x[0]) > 100) { + printk(" send up key \n"); + input_report_key(ts->input, + key_array[2], 1); + input_sync(ts->input); + input_report_key(ts->input, + key_array[2], 0); + input_sync(ts->input); + } else if ((key_x[0] - key_x[key_count - 1]) > + 100) { + printk(" send down key \n"); + input_report_key(ts->input, + key_array[3], 1); + input_sync(ts->input); + input_report_key(ts->input, + key_array[3], 0); + input_sync(ts->input); + } + } else if (temp_x <= temp_y) { + if ((key_y[key_count - 1] - key_y[0]) > 100) { + printk(" send left key \n"); + input_report_key(ts->input, + key_array[0], 1); + input_sync(ts->input); + input_report_key(ts->input, + key_array[0], 0); + input_sync(ts->input); + } else if ((key_y[0] - key_y[key_count - 1]) > + 100) { + printk(" send right key \n"); + input_report_key(ts->input, + key_array[1], 1); + input_sync(ts->input); + input_report_key(ts->input, + key_array[1], 0); + input_sync(ts->input); + } + } + /*printk(" key_x[key_count -1], key_x[0], + key_y[key_count -1], key_y[0] is %d ,%d , %d , %d\n", + key_x[key_count -1], key_x[0], key_y[key_count -1], + key_y[0]);*/ + if ((key_x[key_count - 1] - key_x[0] < 50) + && (key_x[key_count - 1] - key_x[0] >= -50) + && (key_y[key_count - 1] - key_y[0] < 50) + && (key_y[key_count - 1] - key_y[0] >= -50) + && (key_x[0] != 0) && (key_y[0] != 0)) { + //queue_work(gsl_timer_workqueue,&ts->click_work); + //printk(" send enter2 key by yuandan \n"); + //if(send_key) + // { + printk(" send enter key \n"); + input_report_key(ts->input, key_array[4], 1); + input_sync(ts->input); + input_report_key(ts->input, key_array[4], 0); + input_sync(ts->input); + // }else + // { + //down(&my_sem); + // send_key = true; + //up(&my_sem); + // } + } + } else if (key_count > 512) { + if (temp_x > temp_y) { + if ((key_x[511] - key_x[0]) > 100) { + printk(" send up key \n"); + input_report_key(ts->input, + key_array[2], 1); + input_sync(ts->input); + input_report_key(ts->input, + key_array[2], 0); + input_sync(ts->input); + } else if ((key_x[0] - key_x[511]) > 100) { + printk(" send down key \n"); + input_report_key(ts->input, + key_array[3], 1); + input_sync(ts->input); + input_report_key(ts->input, + key_array[3], 0); + input_sync(ts->input); + } + } else if (temp_x <= temp_y) { + + if ((key_y[511] - key_y[0]) > 100) { + printk(" send left key \n"); + input_report_key(ts->input, + key_array[0], 1); + input_sync(ts->input); + input_report_key(ts->input, + key_array[0], 0); + input_sync(ts->input); + } else if ((key_y[0] - key_y[511]) > 100) { + printk(" send right key \n"); + input_report_key(ts->input, + key_array[1], 1); + input_sync(ts->input); + input_report_key(ts->input, + key_array[1], 0); + input_sync(ts->input); + } + } + } + memset(key_y, 0, sizeof(int) * 512); + memset(key_x, 0, sizeof(int) * 512); + key_count = 0; +#endif +#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 + glsx680_ts_irq_enable(ts); + +} + +#ifdef HAVE_CLICK_TIMER + +static void click_timer_worker(struct work_struct *work) +{ + while (true) { + mdelay(500); + //down(&my_sem); + send_key = false; + //up(&my_sem); + } +} + +#endif + +#ifdef GSL_MONITOR +static void gsl_monitor_worker(struct work_struct *work) +{ + //u8 write_buf[4] = {0}; + u8 read_buf[4] = { 0 }; + char init_chip_flag = 0; + + //print_info("gsl_monitor_worker\n"); + struct gsl_ts *ts = + container_of(work, struct gsl_ts, gsl_monitor_work.work); + if (i2c_lock_flag != 0) { + i2c_lock_flag = 1; + } + //goto queue_monitor_work; + else + i2c_lock_flag = 1; + + //gsl_ts_read(ts->client, 0x80, read_buf, 4); + /*printk("======read 0x80: %x %x %x %x ======tony0geshu\n", + read_buf[3], read_buf[2], read_buf[1], read_buf[0]);*/ + + gsl_ts_read(ts->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_flag = 1; + b0_counter = 0; + } + + gsl_ts_read(ts->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]; + + /*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]);*/ + + 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_flag = 1; + //goto queue_monitor_init_chip; + } + + gsl_ts_read(ts->client, 0xbc, read_buf, 4); + if (read_buf[3] != 0 || read_buf[2] != 0 || read_buf[1] != 0 + || read_buf[0] != 0) + bc_counter++; + else + bc_counter = 0; + if (bc_counter > 1) { + /*printk("======read 0xbc: %x %x %x %x======\n", + read_buf[3], read_buf[2], read_buf[1], read_buf[0]);*/ + init_chip_flag = 1; + bc_counter = 0; + } + + /* + write_buf[3] = 0x01; + write_buf[2] = 0xfe; + write_buf[1] = 0x10; + write_buf[0] = 0x00; + gsl_ts_write(ts->client, 0xf0, write_buf, 4); + gsl_ts_read(ts->client, 0x10, read_buf, 4); + gsl_ts_read(ts->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_flag = 1; + dac_counter = 0; + } + */ + //queue_monitor_init_chip: + if (init_chip_flag) + init_chip(ts->client, ts); + + i2c_lock_flag = 0; + + //queue_monitor_work: + //queue_delayed_work(gsl_monitor_workqueue, &ts->gsl_monitor_work, 100); +} +#endif + +static irqreturn_t gsl_ts_irq(int irq, void *dev_id) +{ + ///struct gsl_ts *ts = dev_id; + struct gsl_ts *ts = (struct gsl_ts *)dev_id; + //print_info("========gslX680 Interrupt=========\n"); + + glsx680_ts_irq_disable(ts); + + 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; + int i = 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 = + devm_kzalloc(&client->dev, ts->dd->data_size, GFP_KERNEL); + if (!ts->touch_data) { + pr_err("%s: Unable to allocate memory\n", __func__); + return -ENOMEM; + } + + input_device = devm_input_allocate_device(&ts->client->dev); + if (!input_device) { + rc = -ENOMEM; + goto init_err_ret; + } + + 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(EV_SYN, input_device->evbit); + __set_bit(INPUT_PROP_DIRECT, input_device->propbit); + __set_bit(MT_TOOL_FINGER, input_device->keybit); + 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 + +#ifdef RK_GEAR_TOUCH + set_bit(EV_REL, input_device->evbit); + input_set_capability(input_device, EV_REL, REL_X); + input_set_capability(input_device, EV_REL, REL_Y); + input_set_capability(input_device, EV_MSC, MSC_SCAN); + input_set_capability(input_device, EV_KEY, 0x110); +#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, SCREEN_MAX_X, + 0, 0); + input_set_abs_params(input_device, ABS_MT_POSITION_Y, 0, 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); + + //client->irq = IRQ_PORT; + //ts->irq = client->irq; + + ts->wq = create_singlethread_workqueue("kworkqueue_ts"); + if (!ts->wq) { + dev_err(&client->dev, "gsl Could not create workqueue\n"); + goto init_err_ret; + } + 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); + init_err_ret: + return rc; +} + +#if 0 +static int gsl_ts_suspend(struct i2c_client *dev, pm_message_t mesg) +{ +#if 0 + struct gsl_ts *ts = dev_get_drvdata(dev); + + 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(&ts->gsl_monitor_work); +#endif + +#ifdef HAVE_CLICK_TIMER + //cancel_work_sync(&ts->click_work); +#endif + disable_irq_nosync(ts->irq); + + gslX680_shutdown_low(ts); + +#ifdef SLEEP_CLEAR_POINT + mdelay(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); + mdelay(10); + report_data(ts, 1, 1, 10, 1); + input_sync(ts->input); +#endif + +#endif + return 0; +} +#endif + +#if 0 +static int gsl_ts_resume(struct i2c_client *dev) +{ +#if 0 + struct gsl_ts *ts = dev_get_drvdata(dev); + + printk("I'am in gsl_ts_resume() start\n"); + + gslX680_shutdown_high(ts); + msleep(20); + reset_chip(ts->client); + startup_chip(ts->client); + check_mem_data(ts->client, ts); + +#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, &ts->gsl_monitor_work, 300); +#endif + +#ifdef HAVE_CLICK_TIMER + //queue_work(gsl_timer_workqueue,&ts->click_work); +#endif + + disable_irq_nosync(ts->irq); + enable_irq(ts->irq); +#endif + + return 0; +} +#endif + +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__); + //gsl_ts_suspend(&ts->client->dev); +#ifdef GSL_MONITOR + printk("gsl_ts_suspend () : cancel gsl_monitor_work\n"); + cancel_delayed_work_sync(&ts->gsl_monitor_work); +#endif + + glsx680_ts_irq_disable(ts); + cancel_work_sync(&ts->work); + +#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 + gslX680_shutdown_low(ts); + return 0; +} + +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__); + //gsl_ts_resume(&ts->client->dev); + + printk("I'am in gsl_ts_resume() start\n"); + + gslX680_shutdown_high(ts); + msleep(20); + reset_chip(ts->client); + startup_chip(ts->client); + check_mem_data(ts->client, ts); + +#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, &ts->gsl_monitor_work, 300); +#endif + glsx680_ts_irq_enable(ts); + + return 0; +} + +#ifdef CONFIG_HAS_EARLYSUSPEND + +static void gsl_ts_early_suspend(struct early_suspend *h) +{ + struct gsl_ts *ts = container_of(h, struct gsl_ts, early_suspend); + printk("[GSLX680] Enter %s\n", __func__); + //gsl_ts_suspend(&ts->client->dev); +#ifdef GSL_MONITOR + printk("gsl_ts_suspend () : cancel gsl_monitor_work\n"); + cancel_delayed_work_sync(&ts->gsl_monitor_work); +#endif + + glsx680_ts_irq_disable(ts); + cancel_work_sync(&ts->work); + +#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 + gslX680_shutdown_low(ts); + return 0; +} + +static void gsl_ts_late_resume(struct early_suspend *h) +{ + struct gsl_ts *ts = container_of(h, struct gsl_ts, early_suspend); + printk("[GSLX680] Enter %s\n", __func__); + //gsl_ts_resume(&ts->client->dev); + int i; + + printk("I'am in gsl_ts_resume() start\n"); + + gslX680_shutdown_high(ts); + msleep(20); + reset_chip(ts->client); + startup_chip(ts->client); + check_mem_data(ts->client, ts); + +#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, &ts->gsl_monitor_work, 300); +#endif + glsx680_ts_irq_enable(ts); + +} +#endif + +//static struct wake_lock touch_wakelock; + +static int gsl_ts_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct gsl_ts *ts; + int rc; + + printk("GSLX680 Enter %s\n", __func__); + //wake_lock_init(&touch_wakelock, WAKE_LOCK_SUSPEND, "touch"); + //wake_lock(&touch_wakelock); //system do not enter deep sleep + if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { + dev_err(&client->dev, "gsl I2C functionality not supported\n"); + return -ENODEV; + } + + ts = devm_kzalloc(&client->dev, sizeof(*ts), GFP_KERNEL); + if (!ts) + return -ENOMEM; + + ts->tp.tp_suspend = gsl_ts_early_suspend; + ts->tp.tp_resume = gsl_ts_late_resume; + tp_register_fb(&ts->tp); + + ts->client = client; + i2c_set_clientdata(client, ts); + //ts->device_id = id->driver_data; + + gslX680_init(ts); + rc = gslX680_ts_init(client, ts); + if (rc < 0) { + dev_err(&client->dev, "gsl GSLX680 init failed\n"); + goto porbe_err_ret; + } + //#ifdef GSLX680_COMPATIBLE + // judge_chip_type(client); + //#endif + //printk("##################### probe [2]chip_type=%c .\n",chip_type); + init_chip(ts->client, ts); + check_mem_data(ts->client, ts); + spin_lock_init(&ts->irq_lock); + client->irq = gpio_to_irq(ts->irq); + rc = request_irq(client->irq, gsl_ts_irq, IRQF_TRIGGER_RISING, + client->name, ts); + if (rc < 0) { + printk("gsl_probe: request irq failed\n"); + goto porbe_err_ret; + } + + /* create debug attribute */ + //rc = device_create_file(&ts->input->dev, &dev_attr_debug_enable); + +#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 + + INIT_DELAYED_WORK(&ts->gsl_monitor_work, gsl_monitor_worker); + gsl_monitor_workqueue = + create_singlethread_workqueue("gsl_monitor_workqueue"); + queue_delayed_work(gsl_monitor_workqueue, &ts->gsl_monitor_work, 1000); +#endif + +#ifdef HAVE_CLICK_TIMER + sema_init(&my_sem, 1); + INIT_WORK(&ts->click_work, click_timer_worker); + gsl_timer_workqueue = create_singlethread_workqueue("click_timer"); + queue_work(gsl_timer_workqueue, &ts->click_work); +#endif + +#ifdef TPD_PROC_DEBUG +#if 0 + 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; + } +#else + i2c_client = client; + proc_create(GSL_CONFIG_PROC_FILE, 0666, NULL, &gsl_seq_fops); +#endif + gsl_proc_flag = 0; +#endif + //disable_irq_nosync(->irq); + printk("[GSLX680] End %s\n", __func__); + + return 0; + + porbe_err_ret: + return rc; +} + +static int gsl_ts_remove(struct i2c_client *client) +{ + struct gsl_ts *ts = i2c_get_clientdata(client); + +#ifdef CONFIG_HAS_EARLYSUSPEND + unregister_early_suspend(&ts->early_suspend); +#endif + +#ifdef GSL_MONITOR + cancel_delayed_work_sync(&ts->gsl_monitor_work); + destroy_workqueue(gsl_monitor_workqueue); +#endif + +#ifdef HAVE_CLICK_TIMER + cancel_work_sync(&ts->click_work); + destroy_workqueue(gsl_timer_workqueue); +#endif + + device_init_wakeup(&client->dev, 0); + cancel_work_sync(&ts->work); + free_irq(ts->client->irq, ts); + destroy_workqueue(ts->wq); + //device_remove_file(&ts->input->dev, &dev_attr_debug_enable); + + 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), + }, +#if 0 //ndef 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; + ret = i2c_add_driver(&gsl_ts_driver); + return ret; +} +static void __exit gsl_ts_exit(void) +{ + i2c_del_driver(&gsl_ts_driver); + return; +} + +module_init(gsl_ts_init); +module_exit(gsl_ts_exit); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("GSLX680 touchscreen controller driver"); +MODULE_AUTHOR("Guan Yuwei, guanyuwei@basewin.com"); +MODULE_ALIAS("platform:gsl_ts"); diff --git a/drivers/input/touchscreen/gslx680_vr.h b/drivers/input/touchscreen/gslx680_vr.h new file mode 100644 index 000000000000..679c51faf882 --- /dev/null +++ b/drivers/input/touchscreen/gslx680_vr.h @@ -0,0 +1,5403 @@ +/* + * drivers/input/touchscreen/gslX680.h + * + * Copyright (c) 2012 Shanghai Basewin + * Guan Yuwei + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef _GSLX680_H_ +#define _GSLX680_H_ + + +#define SCREEN_MAX_X 1920 +#define SCREEN_MAX_Y 1080 + +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_versions[]= + { + 0xa55a0003,//°æ±¾ + 0x168045,//оƬÐͺŠ+ 0,//¿Õ + 0,0,0,0,//·½°¸¹«Ë¾0-3 + 0,0,0,0,//ÏîÄ¿Ãû³Æ4-7 + 0,0,0,0,//ƽ̨8-11 + 0,0,0,0,//TP³§12-15 + 0,//TP³ß´ç16 + + 0,0,0,0,//°æ±¾£¬ÐÕÃû1£¬ÐÕÃû2£¬ÈÕÆÚ17-20 + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + } + */ + +static unsigned int gsl_config_data_id[] = +{ + 0x852b6a, + 0x200, + 0,0, + 0, + 0,0,0, + 0,0,0,0,0,0,0,0xd2c687c4, + + + 0x100,0x5,0x70007,0x70007,0x7800438,0,0x5100,0x8e00, + 0,0x320014,0,0,0,0,0,0, + 0x4,0x4000,0x4000,0x10120001,0x101c0002,0,0,0x2020000, + 0x1b6db688,0,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, + 0x1c001c0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,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 const 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,0xf8010023}, + {0x68,0x00066414}, + {0x6c,0x1001020a}, + {0x70,0x00000fff}, + {0x74,0x00000000}, + {0x78,0x00000000}, + {0x7c,0x07070707}, + {0xf0,0x3}, + {0x00,0x0e42ee0e}, + {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,0x00000014}, + {0x60,0x00000000}, + {0x64,0x1a0ac00a}, + {0x68,0x00000002}, + {0x6c,0x0000000f}, + {0x70,0x00000000}, + {0x74,0x00000000}, + {0x78,0xffffffec}, + {0x7c,0x00000000}, + {0xf0,0x4}, + {0x00,0x00000000}, + {0x04,0x0001660b}, + {0x08,0x00000064}, + {0x0c,0x00000000}, + {0x10,0x0000ff06}, + {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,0x80808080}, + {0x10,0x0000000a}, + {0x14,0x00000000}, + {0x18,0x00000fff}, + {0x1c,0x10120001}, + {0x20,0x101c0002}, + {0x24,0x00000000}, + {0x28,0x00000000}, + {0x2c,0x00000000}, + {0x30,0x80808080}, + {0x34,0x80808080}, + {0x38,0x80808080}, + {0x3c,0x80808080}, + {0x40,0x80808080}, + {0x44,0x80808080}, + {0x48,0x80808080}, + {0x4c,0x80808000}, + {0x50,0x00000000}, + {0x54,0x00000000}, + {0x58,0x00000000}, + {0x5c,0x00000000}, + {0x60,0x00000000}, + {0x64,0x00000000}, + {0x68,0x00000000}, + {0x6c,0x00000000}, + {0x70,0x00000000}, + {0x74,0x00000220}, + {0x78,0x00000007}, + {0x7c,0x00000007}, + {0xf0,0x6}, + {0x00,0x00000007}, + {0x04,0x00000000}, + {0x08,0x00000007}, + {0x0c,0x04030402}, + {0x10,0x00000032}, + {0x14,0x1414010a}, + {0x18,0x00000000}, + {0x1c,0x00000001}, + {0x20,0x00002904}, + {0x24,0x00000780}, + {0x28,0x00000438}, + {0x2c,0xf8010023}, + {0x30,0xf8010005}, + {0x34,0x00000007}, + {0x38,0x00000003}, + {0x3c,0x00000fff}, + {0x40,0x80000000}, + {0x44,0x00030003}, + {0x48,0x00000fff}, + {0x4c,0x04040402}, + {0x50,0x00030002}, + {0x54,0x00000e10}, + {0x58,0x000a012c}, + {0x5c,0x1b6db688}, + {0x60,0x20100804}, + {0x64,0x00000000}, + {0x68,0x00000000}, + {0x6c,0x00000000}, + {0x70,0x00000000}, + {0x74,0x000000c8}, + {0x78,0x000a003c}, + {0x7c,0x00000000}, + {0xf0,0x7}, + {0x00,0x05000403}, + {0x04,0x07020601}, + {0x08,0x0508040a}, + {0x0c,0x07110610}, + {0x10,0x09130812}, + {0x14,0x00123456}, + {0x18,0x00000000}, + {0x1c,0x000a0078}, + {0x20,0x00001081}, + {0x24,0xff080010}, + {0x28,0xff080120}, + {0x2c,0xff080140}, + {0x30,0xff080160}, + {0x34,0x000000dc}, + {0x38,0x000000b7}, + {0x3c,0x00000092}, + {0x40,0x00000000}, + {0x44,0x00780078}, + {0x48,0x00000100}, + {0x4c,0x320f0f03}, + {0x50,0x00000000}, + {0x54,0x00000003}, + {0x58,0x00020000}, + {0x5c,0x00040003}, + {0x60,0x00060005}, + {0x64,0x00000000}, + {0x68,0x00020000}, + {0x6c,0x00010000}, + {0x70,0x00010000}, + {0x74,0x00000000}, + {0x78,0x00012345}, + {0x7c,0x006789ab}, + {0xf0,0x8}, + {0x00,0x026f028f}, + {0x04,0x02af22cf}, + {0x08,0x22ef430f}, + {0x0c,0x532f034f}, + {0x10,0x01f301f4}, + {0x14,0x01f501f6}, + {0x18,0x01f701f8}, + {0x1c,0x01f901fa}, + {0x20,0x01f401f5}, + {0x24,0x01f601f7}, + {0x28,0x01f801f9}, + {0x2c,0x01fa0000}, + {0x30,0x00000000}, + {0x34,0x00000000}, + {0x38,0x00000000}, + {0x3c,0x00000000}, + {0x40,0x02040600}, + {0x44,0x00000000}, + {0x48,0x00000000}, + {0x4c,0x01030507}, + {0x50,0x00000000}, + {0x54,0x00000000}, + {0x58,0x00040003}, + {0x5c,0x00000006}, + {0x60,0x0000012c}, + {0x64,0x00000201}, + {0x68,0x00000808}, + {0x6c,0x006600cd}, + {0x70,0x000000cd}, + {0x74,0x0000005d}, + {0x78,0x00000000}, + {0x7c,0x00000008}, + {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,0x00640190}, + {0x44,0x00640064}, + {0x48,0x012c0064}, + {0x4c,0x0050012c}, + {0x50,0x00500050}, + {0x54,0x00c80050}, + {0x58,0x00c800c8}, + {0x5c,0x003700c8}, + {0x60,0x00640000}, + {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,0x00002b08}, + {0x08,0x00002b7c}, + {0x0c,0x00002bfc}, + {0x10,0x00002d30}, + {0x14,0x00002e2c}, + {0x18,0x00002fe0}, + {0x1c,0x00003170}, + {0x20,0x000032c0}, + {0x24,0x0000348c}, + {0x28,0x000035fc}, + {0x2c,0x000037ac}, + {0x30,0x00003954}, + {0x34,0x00003a58}, + {0x38,0x00003c80}, + {0x3c,0x00003e54}, + {0x40,0x000041d4}, + {0x44,0x000042dc}, + {0x48,0x00004548}, + {0x4c,0x0000465c}, + {0x50,0x000046d4}, + {0x54,0x0000474c}, + {0x58,0x000048e4}, + {0x5c,0x00004bcc}, + {0x60,0x00004f68}, + {0x64,0x00005050}, + {0x68,0x000050b4}, + {0x6c,0x000051e8}, + {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,0x000024b0}, + {0x44,0x00000000}, + {0x48,0x00000000}, + {0x4c,0x00002530}, + {0x50,0x000025f0}, + {0x54,0x00000000}, + {0x58,0x000026a0}, + {0x5c,0x00000000}, + {0x60,0x00000000}, + {0x64,0x000027d0}, + {0x68,0x00000000}, + {0x6c,0x00000000}, + {0x70,0x000028a0}, + {0x74,0x00002940}, + {0x78,0x000052a0}, + {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,0xbc102cfc}, + {0x40,0x9c102cf8}, + {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,0x82106053}, + {0x78,0x03296945}, + {0x7c,0x82106288}, + {0xf0,0x1a}, + {0x00,0x9de3bf98}, + {0x04,0x40000010}, + {0x08,0x01000000}, + {0x0c,0x40000007}, + {0x10,0x01000000}, + {0x14,0x4000031b}, + {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,0x9de3bf18}, + {0x58,0xb2067fff}, + {0x5c,0x96100018}, + {0x60,0xf227bf7c}, + {0x64,0xc027bf78}, + {0x68,0x98102000}, + {0x6c,0xb007bff8}, + {0x70,0xd4063f80}, + {0x74,0xda063f84}, + {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,0xc2263f84}, + {0x2c,0xd4263f80}, + {0x30,0x832f2002}, + {0x34,0xb0062008}, + {0x38,0xde22c001}, + {0x3c,0xba072001}, + {0x40,0xfa263f80}, + {0x44,0xda263f84}, + {0x48,0x98032002}, + {0x4c,0x80a33fff}, + {0x50,0x34bfffc9}, + {0x54,0xd4063f80}, + {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,0x02800027}, + {0x14,0x01000000}, + {0x18,0x80a06006}, + {0x1c,0x0280003c}, + {0x20,0x01000000}, + {0x24,0x80a06015}, + {0x28,0x02800054}, + {0x2c,0x01000000}, + {0x30,0x80a0602a}, + {0x34,0x02800090}, + {0x38,0x01000000}, + {0x3c,0x80a06018}, + {0x40,0x02800085}, + {0x44,0x01000000}, + {0x48,0x073fc180}, + {0x4c,0x8610e03c}, + {0x50,0x05169680}, + {0x54,0x84004002}, + {0x58,0xc420c000}, + {0x5c,0x073fc000}, + {0x60,0x8610e020}, + {0x64,0x84102001}, + {0x68,0xc420c000}, + {0x6c,0x0500000c}, + {0x70,0x01000000}, + {0x74,0x01000000}, + {0x78,0x8480bfff}, + {0x7c,0x12bffffe}, + {0xf0,0x21}, + {0x00,0x01000000}, + {0x04,0x01000000}, + {0x08,0x073fc000}, + {0x0c,0x8610e020}, + {0x10,0x84102000}, + {0x14,0xc420c000}, + {0x18,0x01000000}, + {0x1c,0x01000000}, + {0x20,0x81c44000}, + {0x24,0x81cc8000}, + {0x28,0x01000000}, + {0x2c,0xa7500000}, + {0x30,0xa92ce002}, + {0x34,0xa734e001}, + {0x38,0xa614c014}, + {0x3c,0xa60ce007}, + {0x40,0x81900000}, + {0x44,0x01000000}, + {0x48,0x01000000}, + {0x4c,0x81e00000}, + {0x50,0xe03ba000}, + {0x54,0xe43ba008}, + {0x58,0xe83ba010}, + {0x5c,0xec3ba018}, + {0x60,0xf03ba020}, + {0x64,0xf43ba028}, + {0x68,0xf83ba030}, + {0x6c,0xfc3ba038}, + {0x70,0x81e80000}, + {0x74,0x8194c000}, + {0x78,0x01000000}, + {0x7c,0x01000000}, + {0xf0,0x22}, + {0x00,0x81c44000}, + {0x04,0x81cc8000}, + {0x08,0x01000000}, + {0x0c,0xa7500000}, + {0x10,0xa934e002}, + {0x14,0xa72ce001}, + {0x18,0xa614c014}, + {0x1c,0xa60ce007}, + {0x20,0x81900000}, + {0x24,0x01000000}, + {0x28,0x01000000}, + {0x2c,0x81e80000}, + {0x30,0x81e80000}, + {0x34,0xe01ba000}, + {0x38,0xe41ba008}, + {0x3c,0xe81ba010}, + {0x40,0xec1ba018}, + {0x44,0xf01ba020}, + {0x48,0xf41ba028}, + {0x4c,0xf81ba030}, + {0x50,0xfc1ba038}, + {0x54,0x81e00000}, + {0x58,0x81e00000}, + {0x5c,0x8194c000}, + {0x60,0x01000000}, + {0x64,0x01000000}, + {0x68,0x81c44000}, + {0x6c,0x81cc8000}, + {0x70,0x01000000}, + {0x74,0x01000000}, + {0x78,0x82102010}, + {0x7c,0x273fc0c0}, + {0xf0,0x23}, + {0x00,0xa614e010}, + {0x04,0xc224c000}, + {0x08,0x01000000}, + {0x0c,0x033fc0c0}, + {0x10,0x82106004}, + {0x14,0xa6102000}, + {0x18,0xe6204000}, + {0x1c,0x01000000}, + {0x20,0x01000000}, + {0x24,0x01000000}, + {0x28,0xa6102020}, + {0x2c,0x83480000}, + {0x30,0x82104013}, + {0x34,0x81884000}, + {0x38,0x01000000}, + {0x3c,0x4000044d}, + {0x40,0x01000000}, + {0x44,0x01000000}, + {0x48,0x01000000}, + {0x4c,0xa7500000}, + {0x50,0xa934e002}, + {0x54,0xa72ce001}, + {0x58,0xa614c014}, + {0x5c,0xa60ce007}, + {0x60,0x81900000}, + {0x64,0x01000000}, + {0x68,0x81e80000}, + {0x6c,0xe01ba000}, + {0x70,0xe41ba008}, + {0x74,0xe81ba010}, + {0x78,0xec1ba018}, + {0x7c,0xf01ba020}, + {0xf0,0x24}, + {0x00,0xf41ba028}, + {0x04,0xf81ba030}, + {0x08,0xfc1ba038}, + {0x0c,0x81e00000}, + {0x10,0x8194c000}, + {0x14,0x01000000}, + {0x18,0xa6102020}, + {0x1c,0x83480000}, + {0x20,0x82284013}, + {0x24,0x81884000}, + {0x28,0x01000000}, + {0x2c,0x033fc0c0}, + {0x30,0x82106004}, + {0x34,0xa6103fff}, + {0x38,0xe6204000}, + {0x3c,0x01000000}, + {0x40,0x01000000}, + {0x44,0x01000000}, + {0x48,0x81c44000}, + {0x4c,0x81cc8000}, + {0x50,0x01000000}, + {0x54,0x82102080}, + {0x58,0x273fc0c0}, + {0x5c,0xa614e010}, + {0x60,0xc224c000}, + {0x64,0x01000000}, + {0x68,0x81c44000}, + {0x6c,0x81cc8000}, + {0x70,0x01000000}, + {0x74,0x81c48000}, + {0x78,0x81cca004}, + {0x7c,0x01000000}, + {0xf0,0x25}, + {0x00,0x1b3fc140}, + {0x04,0x82136048}, + {0x08,0xc2104000}, + {0x0c,0x82006003}, + {0x10,0x82086003}, + {0x14,0x83286002}, + {0x18,0x9a136080}, + {0x1c,0x81c3e008}, + {0x20,0xd000400d}, + {0x24,0x94102000}, + {0x28,0x96102000}, + {0x2c,0x832ae002}, + {0x30,0xd20063a4}, + {0x34,0x98102000}, + {0x38,0x832b2002}, + {0x3c,0x9b2aa002}, + {0x40,0xda02000d}, + {0x44,0x98032001}, + {0x48,0xda224001}, + {0x4c,0x80a32005}, + {0x50,0x04bffffa}, + {0x54,0x9402a001}, + {0x58,0x9602e001}, + {0x5c,0x80a2e003}, + {0x60,0x04bffff4}, + {0x64,0x832ae002}, + {0x68,0x81c3e008}, + {0x6c,0x01000000}, + {0x70,0x82020008}, + {0x74,0x82004008}, + {0x78,0x9b326002}, + {0x7c,0x82004001}, + {0xf0,0x26}, + {0x00,0x8200400d}, + {0x04,0x83286002}, + {0x08,0x920a6003}, + {0x0c,0x932a6003}, + {0x10,0xd00065b0}, + {0x14,0x91320009}, + {0x18,0x81c3e008}, + {0x1c,0x900a20ff}, + {0x20,0x9a020008}, + {0x24,0x9a034008}, + {0x28,0x97326002}, + {0x2c,0x9a03400d}, + {0x30,0x9a03400b}, + {0x34,0x920a6003}, + {0x38,0x9b2b6002}, + {0x3c,0x932a6003}, + {0x40,0x821020ff}, + {0x44,0xd80365b0}, + {0x48,0x83284009}, + {0x4c,0x822b0001}, + {0x50,0x952a8009}, + {0x54,0x8210400a}, + {0x58,0xc22365b0}, + {0x5c,0x912a2002}, + {0x60,0xda0223a4}, + {0x64,0x972ae002}, + {0x68,0x81c3e008}, + {0x6c,0xc223400b}, + {0x70,0x82102005}, + {0x74,0x1b3fc200}, + {0x78,0x82204008}, + {0x7c,0x9a136008}, + {0xf0,0x27}, + {0x00,0x83286002}, + {0x04,0xd0034000}, + {0x08,0x91320001}, + {0x0c,0x81c3e008}, + {0x10,0x900a200f}, + {0x14,0x9de3bf58}, + {0x18,0xa12e2002}, + {0x1c,0xda1423da}, + {0x20,0xd61423d8}, + {0x24,0xc200247c}, + {0x28,0xb022c00d}, + {0x2c,0x825b4001}, + {0x30,0xb21e6001}, + {0x34,0x92862001}, + {0x38,0x0280000c}, + {0x3c,0x9a004019}, + {0x40,0xb0100009}, + {0x44,0x9807bfb8}, + {0x48,0x8203400d}, + {0x4c,0xc2168001}, + {0x50,0xc2230000}, + {0x54,0xc200247c}, + {0x58,0x9a034001}, + {0x5c,0xb0863fff}, + {0x60,0x12bffffa}, + {0x64,0x98032004}, + {0x68,0x7ffffe7b}, + {0x6c,0x9007bfb8}, + {0x70,0xda1423ea}, + {0x74,0xd61423e8}, + {0x78,0x80a3400b}, + {0x7c,0x92102000}, + {0xf0,0x28}, + {0x00,0x1880000b}, + {0x04,0xb010000d}, + {0x08,0x832b6002}, + {0x0c,0x8200401e}, + {0x10,0x98007fb8}, + {0x14,0xc2030000}, + {0x18,0xb0062001}, + {0x1c,0x92024001}, + {0x20,0x80a6000b}, + {0x24,0x08bffffc}, + {0x28,0x98032004}, + {0x2c,0xb022c00d}, + {0x30,0xb0062001}, + {0x34,0x81800000}, + {0x38,0x01000000}, + {0x3c,0x01000000}, + {0x40,0x01000000}, + {0x44,0xb0724018}, + {0x48,0x81c7e008}, + {0x4c,0x81e80000}, + {0x50,0x033fc200}, + {0x54,0x961060a0}, + {0x58,0x98102000}, + {0x5c,0x832b2002}, + {0x60,0x9a03000c}, + {0x64,0xda136400}, + {0x68,0x98032001}, + {0x6c,0x80a3200f}, + {0x70,0x04bffffb}, + {0x74,0xda20400b}, + {0x78,0x81c3e008}, + {0x7c,0x01000000}, + {0xf0,0x29}, + {0x00,0x9de3bf98}, + {0x04,0xc200247c}, + {0x08,0x83306001}, + {0x0c,0x80a60001}, + {0x10,0x1a800006}, + {0x14,0x90100018}, + {0x18,0x7fffffb6}, + {0x1c,0x01000000}, + {0x20,0x10800006}, + {0x24,0xb0020008}, + {0x28,0x7fffffb2}, + {0x2c,0x90260001}, + {0x30,0x90020008}, + {0x34,0xb0022001}, + {0x38,0x81c7e008}, + {0x3c,0x81e80000}, + {0x40,0x9de3bf98}, + {0x44,0xa8102000}, + {0x48,0xc20023d4}, + {0x4c,0x80a50001}, + {0x50,0x1a800057}, + {0x54,0xe2002348}, + {0x58,0xa4102000}, + {0x5c,0xc200247c}, + {0x60,0x80a48001}, + {0x64,0x3a80004e}, + {0x68,0xa8052001}, + {0x6c,0x7fffffe5}, + {0x70,0x90100012}, + {0x74,0xaa100008}, + {0x78,0x90100014}, + {0x7c,0x7fffff7d}, + {0xf0,0x2a}, + {0x00,0x92100015}, + {0x04,0x80a62000}, + {0x08,0x12800004}, + {0x0c,0xa0100008}, + {0x10,0x10800016}, + {0x14,0xa0102000}, + {0x18,0x80a62009}, + {0x1c,0x18800011}, + {0x20,0x80a62007}, + {0x24,0x7fffff57}, + {0x28,0x01000000}, + {0x2c,0x94100008}, + {0x30,0x90100014}, + {0x34,0x7fffff98}, + {0x38,0x92100012}, + {0x3c,0x80a20011}, + {0x40,0x04800007}, + {0x44,0xa6100008}, + {0x48,0x9a102008}, + {0x4c,0x9a234018}, + {0x50,0x82102001}, + {0x54,0x8328400d}, + {0x58,0xa02c0001}, + {0x5c,0x80a62007}, + {0x60,0x18800008}, + {0x64,0x80a62008}, + {0x68,0x9a102007}, + {0x6c,0x9a234018}, + {0x70,0x82102001}, + {0x74,0x8328400d}, + {0x78,0x10800023}, + {0x7c,0xa0140001}, + {0xf0,0x2b}, + {0x00,0x1280000a}, + {0x04,0x821e2009}, + {0x08,0x80a420fe}, + {0x0c,0x24800002}, + {0x10,0xa0042001}, + {0x14,0x03000019}, + {0x18,0x9b2ca002}, + {0x1c,0x82106080}, + {0x20,0x10800019}, + {0x24,0xe6234001}, + {0x28,0x80a00001}, + {0x2c,0x9a603fff}, + {0x30,0x80a420fe}, + {0x34,0x04800003}, + {0x38,0x82102001}, + {0x3c,0x82102000}, + {0x40,0x808b4001}, + {0x44,0x02800011}, + {0x48,0x92100015}, + {0x4c,0x03000019}, + {0x50,0x9b2ca002}, + {0x54,0x82106080}, + {0x58,0xc2034001}, + {0x5c,0x80a04011}, + {0x60,0x18800003}, + {0x64,0x9a204011}, + {0x68,0x9a244001}, + {0x6c,0x80a4c011}, + {0x70,0x14800003}, + {0x74,0x8224c011}, + {0x78,0x82244013}, + {0x7c,0x80a34001}, + {0xf0,0x2c}, + {0x00,0xa0642000}, + {0x04,0x92100015}, + {0x08,0x94100010}, + {0x0c,0x7fffff45}, + {0x10,0x90100014}, + {0x14,0x10bfffb2}, + {0x18,0xa404a001}, + {0x1c,0xc20023d4}, + {0x20,0x80a50001}, + {0x24,0x0abfffae}, + {0x28,0xa4102000}, + {0x2c,0x81c7e008}, + {0x30,0x81e80000}, + {0x34,0x98102000}, + {0x38,0x9610201e}, + {0x3c,0x80a22000}, + {0x40,0x12800003}, + {0x44,0x8210000c}, + {0x48,0x8222c00c}, + {0x4c,0x83286002}, + {0x50,0xda006480}, + {0x54,0x80a37ff0}, + {0x58,0x02800006}, + {0x5c,0x98032002}, + {0x60,0xc2006484}, + {0x64,0x80a3201f}, + {0x68,0x04bffff5}, + {0x6c,0xc2234000}, + {0x70,0x81c3e008}, + {0x74,0x01000000}, + {0x78,0x9de3bf98}, + {0x7c,0xda002508}, + {0xf0,0x2d}, + {0x00,0x033fc000}, + {0x04,0x9a0b4001}, + {0x08,0x173fc180}, + {0x0c,0x03202020}, + {0x10,0x82106080}, + {0x14,0x9812e038}, + {0x18,0xc2230000}, + {0x1c,0x03168000}, + {0x20,0x80a34001}, + {0x24,0xc022c000}, + {0x28,0xa6102000}, + {0x2c,0x1280000b}, + {0x30,0xa8102000}, + {0x34,0x0300003f}, + {0x38,0xda002548}, + {0x3c,0x821063ff}, + {0x40,0x9a0b4001}, + {0x44,0xd8002508}, + {0x48,0x033fffc0}, + {0x4c,0x980b0001}, + {0x50,0x9a13400c}, + {0x54,0xda202548}, + {0x58,0x80a62000}, + {0x5c,0x16800027}, + {0x60,0x1b296956}, + {0x64,0x1b3fc040}, + {0x68,0xc2002548}, + {0x6c,0x8208400d}, + {0x70,0x1b168040}, + {0x74,0x80a0400d}, + {0x78,0x22800002}, + {0x7c,0xa6102001}, + {0xf0,0x2e}, + {0x00,0xda002654}, + {0x04,0xc20021dc}, + {0x08,0x80a34001}, + {0x0c,0x1a80001b}, + {0x10,0x1b296956}, + {0x14,0x031696a9}, + {0x18,0xda00250c}, + {0x1c,0x821061a5}, + {0x20,0x80a34001}, + {0x24,0x02800006}, + {0x28,0x03296956}, + {0x2c,0x8210625a}, + {0x30,0x80a34001}, + {0x34,0x12800011}, + {0x38,0x1b296956}, + {0x3c,0x11000018}, + {0x40,0x92122340}, + {0x44,0x40000187}, + {0x48,0x90122200}, + {0x4c,0x03000019}, + {0x50,0x96106200}, + {0x54,0xa8102001}, + {0x58,0x98102000}, + {0x5c,0x9b2b2002}, + {0x60,0x98032001}, + {0x64,0xc20365b0}, + {0x68,0x80a32017}, + {0x6c,0x08bffffc}, + {0x70,0xc223400b}, + {0x74,0x1b296956}, + {0x78,0x80a00013}, + {0x7c,0x82380018}, + {0xf0,0x2f}, + {0x00,0xa413625a}, + {0x04,0x90402000}, + {0x08,0x8330601f}, + {0x0c,0x1b1696a9}, + {0x10,0xa21361a5}, + {0x14,0x9e104008}, + {0x18,0xd200254c}, + {0x1c,0xe0002548}, + {0x20,0x98102500}, + {0x24,0xc200250c}, + {0x28,0x96033a50}, + {0x2c,0x941b250c}, + {0x30,0x80a04012}, + {0x34,0x02800007}, + {0x38,0x9a184011}, + {0x3c,0x80a0000d}, + {0x40,0x82603fff}, + {0x44,0x80904008}, + {0x48,0x0280000a}, + {0x4c,0x80a3e000}, + {0x50,0x80a2e0e0}, + {0x54,0x9a402000}, + {0x58,0x80a0000a}, + {0x5c,0x82603fff}, + {0x60,0x80934001}, + {0x64,0x3280000a}, + {0x68,0x98032004}, + {0x6c,0x80a3e000}, + {0x70,0x02800005}, + {0x74,0x82033970}, + {0x78,0x80a0603f}, + {0x7c,0x28800004}, + {0xf0,0x30}, + {0x00,0x98032004}, + {0x04,0xc0230000}, + {0x08,0x98032004}, + {0x0c,0x80a32867}, + {0x10,0x28bfffe6}, + {0x14,0xc200250c}, + {0x18,0x80a62000}, + {0x1c,0x06800006}, + {0x20,0x0300003f}, + {0x24,0x821063ff}, + {0x28,0x820a4001}, + {0x2c,0x10800005}, + {0x30,0xc220254c}, + {0x34,0xc21022d4}, + {0x38,0x83286010}, + {0x3c,0xc2202690}, + {0x40,0xc20023c8}, + {0x44,0xda002548}, + {0x48,0x83306012}, + {0x4c,0x82086200}, + {0x50,0x9a0b7dff}, + {0x54,0x9a134001}, + {0x58,0xd800254c}, + {0x5c,0xd4002334}, + {0x60,0x033fc200}, + {0x64,0x9402a001}, + {0x68,0x92050014}, + {0x6c,0x980b3ffd}, + {0x70,0x82106054}, + {0x74,0xc2004000}, + {0x78,0x98130009}, + {0x7c,0x9732a001}, + {0xf0,0x31}, + {0x00,0x9602800b}, + {0x04,0xd820254c}, + {0x08,0x80a06114}, + {0x0c,0xd620258c}, + {0x10,0xda202548}, + {0x14,0xd4202554}, + {0x18,0xd4202588}, + {0x1c,0xc2002344}, + {0x20,0x1280000a}, + {0x24,0x99342018}, + {0x28,0x820860ff}, + {0x2c,0x8258605a}, + {0x30,0x82006040}, + {0x34,0x83306007}, + {0x38,0x9b286010}, + {0x3c,0x9a034001}, + {0x40,0x10800003}, + {0x44,0xda202570}, + {0x48,0xc2202570}, + {0x4c,0x173fc200}, + {0x50,0xda002570}, + {0x54,0x8212e030}, + {0x58,0xda204000}, + {0x5c,0x80a3205a}, + {0x60,0x1280000a}, + {0x64,0xda20257c}, + {0x68,0x1b00003f}, + {0x6c,0xc2002548}, + {0x70,0x9a1363ff}, + {0x74,0x8208400d}, + {0x78,0x1b3fffc0}, + {0x7c,0x9a0c000d}, + {0xf0,0x32}, + {0x00,0x8210400d}, + {0x04,0xc2202548}, + {0x08,0x80a4e001}, + {0x0c,0x1280000c}, + {0x10,0x03296956}, + {0x14,0xc2002548}, + {0x18,0x83306012}, + {0x1c,0x80886001}, + {0x20,0x32800010}, + {0x24,0x82102029}, + {0x28,0x9a12e074}, + {0x2c,0xc2002330}, + {0x30,0xc2234000}, + {0x34,0x1080000b}, + {0x38,0x82102029}, + {0x3c,0xda00250c}, + {0x40,0x8210625a}, + {0x44,0x80a34001}, + {0x48,0x1280000b}, + {0x4c,0x01000000}, + {0x50,0xc200254c}, + {0x54,0x80886002}, + {0x58,0x12800007}, + {0x5c,0x82102015}, + {0x60,0xc2202500}, + {0x64,0x7ffffe50}, + {0x68,0x901025b0}, + {0x6c,0x7ffffeb9}, + {0x70,0x81e80000}, + {0x74,0x01000000}, + {0x78,0x81c7e008}, + {0x7c,0x81e80000}, + {0xf0,0x33}, + {0x00,0x9de3bf98}, + {0x04,0x4000023f}, + {0x08,0x90102000}, + {0x0c,0x133fc200}, + {0x10,0xe80021fc}, + {0x14,0xc2002298}, + {0x18,0x98126070}, + {0x1c,0xc2230000}, + {0x20,0x033fc000}, + {0x24,0xd8002338}, + {0x28,0x82106030}, + {0x2c,0xd8204000}, + {0x30,0xc200232c}, + {0x34,0x90126074}, + {0x38,0xc2220000}, + {0x3c,0x1b3fc140}, + {0x40,0x0300003f}, + {0x44,0xa013608c}, + {0x48,0x9e136058}, + {0x4c,0xa213605c}, + {0x50,0xa4136080}, + {0x54,0xa6136084}, + {0x58,0x821063ff}, + {0x5c,0x15000017}, + {0x60,0xc223c000}, + {0x64,0x9412a380}, + {0x68,0x17000018}, + {0x6c,0x9a136088}, + {0x70,0xd4234000}, + {0x74,0x9612e0c0}, + {0x78,0x03200040}, + {0x7c,0xd6240000}, + {0xf0,0x34}, + {0x00,0x82106101}, + {0x04,0xc2224000}, + {0x08,0x033fc0c0}, + {0x0c,0x82106004}, + {0x10,0xc0204000}, + {0x14,0xc0244000}, + {0x18,0xd4248000}, + {0x1c,0xd624c000}, + {0x20,0x80a52000}, + {0x24,0xc2002374}, + {0x28,0xd600247c}, + {0x2c,0x02800006}, + {0x30,0xd40022f8}, + {0x34,0x82584014}, + {0x38,0x82006800}, + {0x3c,0x10800003}, + {0x40,0xa130600c}, + {0x44,0xa0100001}, + {0x48,0x1b3fc140}, + {0x4c,0x98136040}, + {0x50,0xd0030000}, + {0x54,0x9732e001}, + {0x58,0x825ac00a}, + {0x5c,0x900a3800}, + {0x60,0x90120001}, + {0x64,0xd0230000}, + {0x68,0x9a136004}, + {0x6c,0xd0034000}, + {0x70,0x900a3fe0}, + {0x74,0x9012000b}, + {0x78,0x193fc200}, + {0x7c,0xd0234000}, + {0xf0,0x35}, + {0x00,0x94132080}, + {0x04,0xd0028000}, + {0x08,0x92132054}, + {0x0c,0x900a3fe0}, + {0x10,0xc2024000}, + {0x14,0x9012000b}, + {0x18,0x960861ff}, + {0x1c,0x80a2e114}, + {0x20,0x1280000d}, + {0x24,0xd0228000}, + {0x28,0x82102006}, + {0x2c,0xc2228000}, + {0x30,0x03009051}, + {0x34,0x9a132058}, + {0x38,0x82106040}, + {0x3c,0xc2234000}, + {0x40,0x80a52000}, + {0x44,0x12800004}, + {0x48,0xd6224000}, + {0x4c,0x825c2349}, + {0x50,0xa130600a}, + {0x54,0x233fc200}, + {0x58,0xda0023f8}, + {0x5c,0x82146008}, + {0x60,0xda204000}, + {0x64,0x9814600c}, + {0x68,0x7ffffe5a}, + {0x6c,0xda230000}, + {0x70,0x9814607c}, + {0x74,0xd0030000}, + {0x78,0x033ff000}, + {0x7c,0x902a0001}, + {0xf0,0x36}, + {0x00,0xd0230000}, + {0x04,0x033fc1c0}, + {0x08,0xd8002340}, + {0x0c,0x82106064}, + {0x10,0xd8204000}, + {0x14,0x1b3fc140}, + {0x18,0x0300007f}, + {0x1c,0x94136010}, + {0x20,0x821063ff}, + {0x24,0x92136030}, + {0x28,0x1707ffc0}, + {0x2c,0xc2228000}, + {0x30,0x9a136014}, + {0x34,0xd6224000}, + {0x38,0x80a42000}, + {0x3c,0x0280000f}, + {0x40,0xd6234000}, + {0x44,0x932c2010}, + {0x48,0x82042001}, + {0x4c,0x9b2c2004}, + {0x50,0x83286010}, + {0x54,0x9a02400d}, + {0x58,0x98146084}, + {0x5c,0xda230000}, + {0x60,0x82004010}, + {0x64,0x96146088}, + {0x68,0x82006002}, + {0x6c,0x9414608c}, + {0x70,0xd222c000}, + {0x74,0xc2228000}, + {0x78,0xc2002174}, + {0x7c,0x80a06000}, + {0xf0,0x37}, + {0x00,0x02800007}, + {0x04,0x173fc080}, + {0x08,0xc2082174}, + {0x0c,0xda082177}, + {0x10,0x9812e008}, + {0x14,0xc2230000}, + {0x18,0xda22c000}, + {0x1c,0x7ffffeb7}, + {0x20,0x90103fff}, + {0x24,0x7ffffea4}, + {0x28,0x90102001}, + {0x2c,0x1b3fc0c0}, + {0x30,0x82103fff}, + {0x34,0x9a136004}, + {0x38,0xc2234000}, + {0x3c,0x03200040}, + {0x40,0xc2244000}, + {0x44,0x81c7e008}, + {0x48,0x81e80000}, + {0x4c,0x9de3bf98}, + {0x50,0xc2002508}, + {0x54,0x808860ff}, + {0x58,0x02800015}, + {0x5c,0x1b3fc180}, + {0x60,0x82102001}, + {0x64,0x9a13603c}, + {0x68,0xc2234000}, + {0x6c,0xc2002508}, + {0x70,0x820860ff}, + {0x74,0x80a04018}, + {0x78,0x1280000b}, + {0x7c,0x033fc180}, + {0xf0,0x38}, + {0x00,0x7ffffc6e}, + {0x04,0x01000000}, + {0x08,0xda002508}, + {0x0c,0x033fc040}, + {0x10,0x9a0b60ff}, + {0x14,0x8210600c}, + {0x18,0xc0204000}, + {0x1c,0x10bffff7}, + {0x20,0x80a34018}, + {0x24,0x8210603c}, + {0x28,0xc0204000}, + {0x2c,0x81c7e008}, + {0x30,0x81e80000}, + {0x34,0x9a102000}, + {0x38,0x832b6002}, + {0x3c,0x9a036001}, + {0x40,0x80a3604f}, + {0x44,0x08bffffd}, + {0x48,0xc0220001}, + {0x4c,0x81c3e008}, + {0x50,0x01000000}, + {0x54,0xc20022f8}, + {0x58,0xda00247c}, + {0x5c,0x8258400d}, + {0x60,0x83306001}, + {0x64,0x96102000}, + {0x68,0x80a2c001}, + {0x6c,0x1a80003b}, + {0x70,0x0300003f}, + {0x74,0x941063ff}, + {0x78,0x98102000}, + {0x7c,0x80a26001}, + {0xf0,0x39}, + {0x00,0x0280002e}, + {0x04,0x80a26004}, + {0x08,0x12800008}, + {0x0c,0x80a26008}, + {0x10,0xc2030008}, + {0x14,0x9a08400a}, + {0x18,0x83306012}, + {0x1c,0x83286010}, + {0x20,0x10800014}, + {0x24,0x9b336002}, + {0x28,0x28800015}, + {0x2c,0xda02000c}, + {0x30,0xda030008}, + {0x34,0x83336010}, + {0x38,0x82004001}, + {0x3c,0x9a0b400a}, + {0x40,0x81800000}, + {0x44,0x01000000}, + {0x48,0x01000000}, + {0x4c,0x01000000}, + {0x50,0x82704009}, + {0x54,0x9a03400d}, + {0x58,0x83286010}, + {0x5c,0x81800000}, + {0x60,0x01000000}, + {0x64,0x01000000}, + {0x68,0x01000000}, + {0x6c,0x9a734009}, + {0x70,0x8200400d}, + {0x74,0x10800011}, + {0x78,0xc2230008}, + {0x7c,0x83336010}, + {0xf0,0x3a}, + {0x00,0x81800000}, + {0x04,0x01000000}, + {0x08,0x01000000}, + {0x0c,0x01000000}, + {0x10,0x82704009}, + {0x14,0x9a0b400a}, + {0x18,0x83286010}, + {0x1c,0x81800000}, + {0x20,0x01000000}, + {0x24,0x01000000}, + {0x28,0x01000000}, + {0x2c,0x9a734009}, + {0x30,0x8200400d}, + {0x34,0xc222000c}, + {0x38,0xc20022f8}, + {0x3c,0xda00247c}, + {0x40,0x8258400d}, + {0x44,0x9602e001}, + {0x48,0x83306001}, + {0x4c,0x80a2c001}, + {0x50,0x0abfffcb}, + {0x54,0x98032004}, + {0x58,0x81c3e008}, + {0x5c,0x01000000}, + {0x60,0x98102000}, + {0x64,0x9b2b2002}, + {0x68,0x98032001}, + {0x6c,0xc202000d}, + {0x70,0x80a3204f}, + {0x74,0x04bffffc}, + {0x78,0xc222400d}, + {0x7c,0x81c3e008}, + {0xf0,0x3b}, + {0x00,0x01000000}, + {0x04,0xd6020000}, + {0x08,0xd8024000}, + {0x0c,0x9132e010}, + {0x10,0x95332010}, + {0x14,0x900a2fff}, + {0x18,0x940aafff}, + {0x1c,0x03000007}, + {0x20,0x9a22000a}, + {0x24,0x821063ff}, + {0x28,0x940b0001}, + {0x2c,0x900ac001}, + {0x30,0x9022000a}, + {0x34,0x9a5b400d}, + {0x38,0x905a0008}, + {0x3c,0x81c3e008}, + {0x40,0x90034008}, + {0x44,0x9de3bf88}, + {0x48,0x82064019}, + {0x4c,0x82004019}, + {0x50,0x83286002}, + {0x54,0x82004018}, + {0x58,0x3b000019}, + {0x5c,0xba176080}, + {0x60,0x83286002}, + {0x64,0xf400401d}, + {0x68,0x033fc000}, + {0x6c,0x82106001}, + {0x70,0xc227bfe8}, + {0x74,0x03000040}, + {0x78,0xc227bfec}, + {0x7c,0x033fc040}, + {0xf0,0x3c}, + {0x00,0x821061fe}, + {0x04,0xc227bff0}, + {0x08,0x0300bf80}, + {0x0c,0x82106101}, + {0x10,0xc227bff4}, + {0x14,0x9e10001d}, + {0x18,0xb6102000}, + {0x1c,0x9a07bff8}, + {0x20,0xba06c00d}, + {0x24,0xc24f7ff0}, + {0x28,0xb0060001}, + {0x2c,0xc24f7ff8}, + {0x30,0xb2064001}, + {0x34,0x82067fff}, + {0x38,0x82164001}, + {0x3c,0x80a62000}, + {0x40,0x0480001e}, + {0x44,0xbb30601f}, + {0x48,0xc2002308}, + {0x4c,0x80a04018}, + {0x50,0x82402000}, + {0x54,0x8090401d}, + {0x58,0x32800019}, + {0x5c,0xb606e001}, + {0x60,0xc2002300}, + {0x64,0x80a64001}, + {0x68,0x18800014}, + {0x6c,0xba064019}, + {0x70,0x82074019}, + {0x74,0x83286002}, + {0x78,0x82004018}, + {0x7c,0x80a6e003}, + {0xf0,0x3d}, + {0x00,0x14800008}, + {0x04,0xb9286002}, + {0x08,0xc207000f}, + {0x0c,0x80a0401a}, + {0x10,0x2680000b}, + {0x14,0xb606e001}, + {0x18,0x1080000d}, + {0x1c,0xb0102000}, + {0x20,0xc207000f}, + {0x24,0x80a0401a}, + {0x28,0x24800005}, + {0x2c,0xb606e001}, + {0x30,0x10800007}, + {0x34,0xb0102000}, + {0x38,0xb606e001}, + {0x3c,0x80a6e007}, + {0x40,0x04bfffd9}, + {0x44,0xba06c00d}, + {0x48,0xb0102001}, + {0x4c,0x81c7e008}, + {0x50,0x81e80000}, + {0x54,0xc2002548}, + {0x58,0x82087fbf}, + {0x5c,0xc2202548}, + {0x60,0xc020255c}, + {0x64,0xc0202514}, + {0x68,0x9a102000}, + {0x6c,0x832b6002}, + {0x70,0x9a036001}, + {0x74,0xc0206738}, + {0x78,0x80a36009}, + {0x7c,0x04bffffc}, + {0xf0,0x3e}, + {0x00,0xc0206710}, + {0x04,0x81c3e008}, + {0x08,0x01000000}, + {0x0c,0x9de3bf88}, + {0x10,0x82063fff}, + {0x14,0xb8067fff}, + {0x18,0x82160001}, + {0x1c,0xba16401c}, + {0x20,0x80974001}, + {0x24,0xa610001a}, + {0x28,0x0680007d}, + {0x2c,0xa410001b}, + {0x30,0xc2002308}, + {0x34,0x80a60001}, + {0x38,0x3880007a}, + {0x3c,0xb0102000}, + {0x40,0xc2002300}, + {0x44,0x80a64001}, + {0x48,0x38800076}, + {0x4c,0xb0102000}, + {0x50,0x94062001}, + {0x54,0x96066001}, + {0x58,0xa207bff8}, + {0x5c,0x8207bfe8}, + {0x60,0xb0102003}, + {0x64,0xc0204000}, + {0x68,0xb0863fff}, + {0x6c,0x1cbffffe}, + {0x70,0x82006004}, + {0x74,0xc2002160}, + {0x78,0x80886004}, + {0x7c,0x0280000f}, + {0xf0,0x3f}, + {0x00,0xb0102004}, + {0x04,0x80a66001}, + {0x08,0x0280000b}, + {0x0c,0x821021ff}, + {0x10,0xc2002308}, + {0x14,0x80a60001}, + {0x18,0x02800007}, + {0x1c,0x821021ff}, + {0x20,0xc2002300}, + {0x24,0x80a64001}, + {0x28,0x12800005}, + {0x2c,0x80a7000b}, + {0x30,0x821021ff}, + {0x34,0xc227bff4}, + {0x38,0x80a7000b}, + {0x3c,0x14800031}, + {0x40,0xb210001c}, + {0x44,0x8207001c}, + {0x48,0xba02c00b}, + {0x4c,0x8200401c}, + {0x50,0xba07400b}, + {0x54,0xba20401d}, + {0x58,0x39000019}, + {0x5c,0xa0172080}, + {0x60,0x9827400a}, + {0x64,0x9b286002}, + {0x68,0xb002bffe}, + {0x6c,0x82034018}, + {0x70,0x83286002}, + {0x74,0xba06000c}, + {0x78,0xb4004010}, + {0x7c,0xb6076008}, + {0xf0,0x40}, + {0x00,0x90102001}, + {0x04,0x932a001b}, + {0x08,0x9e102000}, + {0x0c,0xb92be002}, + {0x10,0xfa072520}, + {0x14,0xba5f4012}, + {0x18,0x833f601f}, + {0x1c,0x83306018}, + {0x20,0xba074001}, + {0x24,0xc2068000}, + {0x28,0x82204013}, + {0x2c,0xbb3f6008}, + {0x30,0x9e03e001}, + {0x34,0x80a0401d}, + {0x38,0x04800005}, + {0x3c,0xb8070011}, + {0x40,0xc2073ff0}, + {0x44,0x82104009}, + {0x48,0xc2273ff0}, + {0x4c,0x80a3e003}, + {0x50,0x08bffff0}, + {0x54,0xb92be002}, + {0x58,0xb0062001}, + {0x5c,0xb606e001}, + {0x60,0x80a6000a}, + {0x64,0x04bfffe8}, + {0x68,0xb406a004}, + {0x6c,0xb2066001}, + {0x70,0x9a03600c}, + {0x74,0x80a6400b}, + {0x78,0x04bfffdc}, + {0x7c,0x98032003}, + {0xf0,0x41}, + {0x00,0xc207bfe8}, + {0x04,0x80886010}, + {0x08,0x0280000a}, + {0x0c,0xfa07bfec}, + {0x10,0xc207bff4}, + {0x14,0x80886082}, + {0x18,0x02800007}, + {0x1c,0x808f6010}, + {0x20,0x80886028}, + {0x24,0x1280001f}, + {0x28,0xb0102003}, + {0x2c,0xfa07bfec}, + {0x30,0x808f6010}, + {0x34,0x02800012}, + {0x38,0xc207bff0}, + {0x3c,0x808f6082}, + {0x40,0x02800007}, + {0x44,0x808f6028}, + {0x48,0xc207bff4}, + {0x4c,0x80886028}, + {0x50,0x32800014}, + {0x54,0xb0102002}, + {0x58,0x808f6028}, + {0x5c,0x02800008}, + {0x60,0xc207bff0}, + {0x64,0xc207bff4}, + {0x68,0x80886082}, + {0x6c,0x02800004}, + {0x70,0xc207bff0}, + {0x74,0x1080000b}, + {0x78,0xb0102002}, + {0x7c,0x80886010}, + {0xf0,0x42}, + {0x00,0x02800008}, + {0x04,0xb0102000}, + {0x08,0x80886082}, + {0x0c,0x02800005}, + {0x10,0x80886028}, + {0x14,0x12800003}, + {0x18,0xb0102001}, + {0x1c,0xb0102000}, + {0x20,0x81c7e008}, + {0x24,0x81e80000}, + {0x28,0x94102000}, + {0x2c,0xc2002514}, + {0x30,0x80a28001}, + {0x34,0x96102000}, + {0x38,0x1a80000e}, + {0x3c,0x9b2ae002}, + {0x40,0xc2036710}, + {0x44,0x9602e001}, + {0x48,0x80a06000}, + {0x4c,0x02800006}, + {0x50,0x992aa002}, + {0x54,0xc2232710}, + {0x58,0xc2036738}, + {0x5c,0x9402a001}, + {0x60,0xc2232738}, + {0x64,0xc2002514}, + {0x68,0x10bffff4}, + {0x6c,0x80a2c001}, + {0x70,0x81c3e008}, + {0x74,0xd4202514}, + {0x78,0xd4020000}, + {0x7c,0x03000018}, + {0xf0,0x43}, + {0x00,0x9802800a}, + {0x04,0x82106200}, + {0x08,0xda530001}, + {0x0c,0xc2002590}, + {0x10,0xc250400c}, + {0x14,0x96a0400d}, + {0x18,0x02800016}, + {0x1c,0x03000018}, + {0x20,0x80a2e000}, + {0x24,0x04800009}, + {0x28,0x82102001}, + {0x2c,0xda022004}, + {0x30,0x8328400d}, + {0x34,0x80a2c001}, + {0x38,0x3480000d}, + {0x3c,0x973ac00d}, + {0x40,0x1080000b}, + {0x44,0x96102001}, + {0x48,0x1680000a}, + {0x4c,0x03000018}, + {0x50,0xda022008}, + {0x54,0x82103fff}, + {0x58,0x8328400d}, + {0x5c,0x80a2c001}, + {0x60,0x36800003}, + {0x64,0x96103fff}, + {0x68,0x973ac00d}, + {0x6c,0x03000018}, + {0x70,0x92106200}, + {0x74,0x8202800a}, + {0x78,0xc2504009}, + {0x7c,0x9602c001}, + {0xf0,0x44}, + {0x00,0x808aa001}, + {0x04,0x0280000f}, + {0x08,0x9b3aa01f}, + {0x0c,0x9b33601f}, + {0x10,0x9a02800d}, + {0x14,0x9b3b6001}, + {0x18,0x9b2b6002}, + {0x1c,0xd8034009}, + {0x20,0x033fffc0}, + {0x24,0x980b0001}, + {0x28,0x0300003f}, + {0x2c,0x821063ff}, + {0x30,0x820ac001}, + {0x34,0x98030001}, + {0x38,0x1080000d}, + {0x3c,0xd8234009}, + {0x40,0x9b33601f}, + {0x44,0x9a02800d}, + {0x48,0x9b3b6001}, + {0x4c,0x9b2b6002}, + {0x50,0x0300003f}, + {0x54,0xd8034009}, + {0x58,0x821063ff}, + {0x5c,0x980b0001}, + {0x60,0x832ae010}, + {0x64,0x8200400c}, + {0x68,0xc2234009}, + {0x6c,0xc2020000}, + {0x70,0xda00247c}, + {0x74,0x8200400d}, + {0x78,0x81c3e008}, + {0x7c,0xc2220000}, + {0xf0,0x45}, + {0x00,0x9de3bf98}, + {0x04,0x833e201f}, + {0x08,0xd0002320}, + {0x0c,0x82204018}, + {0x10,0x80a22000}, + {0x14,0x02800015}, + {0x18,0x9b30601f}, + {0x1c,0x033fc000}, + {0x20,0xa0106020}, + {0x24,0xc200231c}, + {0x28,0x80a00001}, + {0x2c,0x82402000}, + {0x30,0x8088400d}, + {0x34,0xc2002318}, + {0x38,0x02800009}, + {0x3c,0xb01e0001}, + {0x40,0x80a00001}, + {0x44,0x82603fff}, + {0x48,0x7ffffab3}, + {0x4c,0xc2240000}, + {0x50,0xc2002318}, + {0x54,0x10800005}, + {0x58,0xc2240000}, + {0x5c,0x033fc000}, + {0x60,0x82106020}, + {0x64,0xf0204000}, + {0x68,0x81c7e008}, + {0x6c,0x81e80000}, + {0x70,0x9de3bf98}, + {0x74,0x7ffffab1}, + {0x78,0x01000000}, + {0x7c,0xe0002500}, + {0xf0,0x46}, + {0x00,0x80a42028}, + {0x04,0x08800013}, + {0x08,0x80a42000}, + {0x0c,0xc0202584}, + {0x10,0xa2102000}, + {0x14,0x832c6002}, + {0x18,0xc2006f04}, + {0x1c,0x80a06000}, + {0x20,0x02800053}, + {0x24,0xa2046001}, + {0x28,0x9fc04000}, + {0x2c,0x01000000}, + {0x30,0xc2002584}, + {0x34,0x80a06000}, + {0x38,0x1280004d}, + {0x3c,0x80a4603b}, + {0x40,0x24bffff6}, + {0x44,0x832c6002}, + {0x48,0x1080004a}, + {0x4c,0xc2002500}, + {0x50,0x1280000b}, + {0x54,0x80a42014}, + {0x58,0xc2002fcc}, + {0x5c,0x9fc04000}, + {0x60,0x01000000}, + {0x64,0x7ffffcc5}, + {0x68,0x90102000}, + {0x6c,0x7ffffcb2}, + {0x70,0x90102001}, + {0x74,0x1080003f}, + {0x78,0xc2002500}, + {0x7c,0x1880000c}, + {0xf0,0x47}, + {0x00,0x80a42015}, + {0x04,0x808c2001}, + {0x08,0x3280003a}, + {0x0c,0xc2002500}, + {0x10,0x90043ffe}, + {0x14,0x7ffffc4b}, + {0x18,0x91322001}, + {0x1c,0x7ffffc2d}, + {0x20,0x01000000}, + {0x24,0x10800033}, + {0x28,0xc2002500}, + {0x2c,0x18800010}, + {0x30,0x80a42018}, + {0x34,0x033fc180}, + {0x38,0xda0025b0}, + {0x3c,0x82106038}, + {0x40,0xda204000}, + {0x44,0x033fc200}, + {0x48,0x82106074}, + {0x4c,0xda00232c}, + {0x50,0xda204000}, + {0x54,0x7ffffc98}, + {0x58,0x90102000}, + {0x5c,0xc200265c}, + {0x60,0xc2202538}, + {0x64,0x10800020}, + {0x68,0xc2002fcc}, + {0x6c,0x1880000c}, + {0x70,0x80a42028}, + {0x74,0x90102000}, + {0x78,0x92102000}, + {0x7c,0xc2002fc0}, + {0xf0,0x48}, + {0x00,0x9fc04000}, + {0x04,0x94102000}, + {0x08,0x11000018}, + {0x0c,0x7ffffe0a}, + {0x10,0x90122200}, + {0x14,0x10800017}, + {0x18,0xc2002500}, + {0x1c,0x38800015}, + {0x20,0xc2002500}, + {0x24,0x7ffffb97}, + {0x28,0x23000018}, + {0x2c,0x92146200}, + {0x30,0xc2002fc0}, + {0x34,0x9fc04000}, + {0x38,0x94043fe8}, + {0x3c,0x80a42028}, + {0x40,0x3280000c}, + {0x44,0xc2002500}, + {0x48,0x90146200}, + {0x4c,0x7ffffe02}, + {0x50,0x92102008}, + {0x54,0xc2002fd8}, + {0x58,0x80a06000}, + {0x5c,0x22800005}, + {0x60,0xc2002500}, + {0x64,0x9fc04000}, + {0x68,0x01000000}, + {0x6c,0xc2002500}, + {0x70,0x80a40001}, + {0x74,0x1280000b}, + {0x78,0x031fffff}, + {0x7c,0x821063f0}, + {0xf0,0x49}, + {0x00,0x80a40001}, + {0x04,0x38800003}, + {0x08,0x21040000}, + {0x0c,0xa0042001}, + {0x10,0x033fc180}, + {0x14,0x82106034}, + {0x18,0xe0204000}, + {0x1c,0xe0202500}, + {0x20,0x81c7e008}, + {0x24,0x81e80000}, + {0x28,0x81c3e008}, + {0x2c,0x01000000}, + {0x30,0x9de3bf98}, + {0x34,0x9e100018}, + {0x38,0x80a66000}, + {0x3c,0x0280001b}, + {0x40,0xb010001a}, + {0x44,0x031fffdf}, + {0x48,0xb41063ff}, + {0x4c,0x82102000}, + {0x50,0xbb286002}, + {0x54,0x80a62009}, + {0x58,0xb6006001}, + {0x5c,0x12800006}, + {0x60,0xb810001d}, + {0x64,0xc206401d}, + {0x68,0x83306001}, + {0x6c,0x8208401a}, + {0x70,0xc226401d}, + {0x74,0x80a62008}, + {0x78,0x08800006}, + {0x7c,0xc206401c}, + {0xf0,0x4a}, + {0x00,0xfa03c01c}, + {0x04,0xbb376001}, + {0x08,0x10800003}, + {0x0c,0xba0f401a}, + {0x10,0xfa03c01c}, + {0x14,0x8200401d}, + {0x18,0xc226401c}, + {0x1c,0x80a6e04f}, + {0x20,0x08bfffec}, + {0x24,0x8210001b}, + {0x28,0x81c7e008}, + {0x2c,0x81e80000}, + {0x30,0x03169696}, + {0x34,0xda002180}, + {0x38,0x8210625a}, + {0x3c,0x80a34001}, + {0x40,0x94102000}, + {0x44,0x12800006}, + {0x48,0x96102000}, + {0x4c,0x033fc180}, + {0x50,0x82106030}, + {0x54,0x10800024}, + {0x58,0xda204000}, + {0x5c,0xc202c000}, + {0x60,0x9602e004}, + {0x64,0x80a2e4ff}, + {0x68,0x08bffffd}, + {0x6c,0x94028001}, + {0x70,0x96102d00}, + {0x74,0xd2002ff8}, + {0x78,0x03000019}, + {0x7c,0x80a2c009}, + {0xf0,0x4b}, + {0x00,0x1a80000b}, + {0x04,0x901063ff}, + {0x08,0xd802c000}, + {0x0c,0x9602e004}, + {0x10,0x80a2c009}, + {0x14,0x9a402000}, + {0x18,0x80a2000b}, + {0x1c,0x82603fff}, + {0x20,0x808b4001}, + {0x24,0x12bffff9}, + {0x28,0x9402800c}, + {0x2c,0xc20021fc}, + {0x30,0x94228001}, + {0x34,0xc2002200}, + {0x38,0x94228001}, + {0x3c,0x03169696}, + {0x40,0x8210625a}, + {0x44,0x80a28001}, + {0x48,0x033fc180}, + {0x4c,0x82106030}, + {0x50,0x02800005}, + {0x54,0xd4204000}, + {0x58,0x03000008}, + {0x5c,0x81c06280}, + {0x60,0x90102001}, + {0x64,0x01000000}, + {0x68,0x81c3e008}, + {0x6c,0x01000000}, + {0x70,0x9de3bf98}, + {0x74,0x9e100018}, + {0x78,0x03000019}, + {0x7c,0xb0100019}, + {0xf0,0x4c}, + {0x00,0xba106080}, + {0x04,0xb6102000}, + {0x08,0x832ee002}, + {0x0c,0xb606e001}, + {0x10,0x80a6e0d7}, + {0x14,0x08bffffd}, + {0x18,0xc020401d}, + {0x1c,0xb6102000}, + {0x20,0xc20022fc}, + {0x24,0x80a6c001}, + {0x28,0x1a80001c}, + {0x2c,0x03000019}, + {0x30,0xb21060b4}, + {0x34,0xb4102000}, + {0x38,0xc20022f8}, + {0x3c,0x80a68001}, + {0x40,0x1a800011}, + {0x44,0x832ee002}, + {0x48,0xb8004019}, + {0x4c,0xc200247c}, + {0x50,0xfa0ee380}, + {0x54,0x825e8001}, + {0x58,0x8200401d}, + {0x5c,0x82004001}, + {0x60,0xfa160001}, + {0x64,0xc213c001}, + {0x68,0x8220401d}, + {0x6c,0xc2270000}, + {0x70,0xb406a001}, + {0x74,0xc20022f8}, + {0x78,0x80a68001}, + {0x7c,0x0abffff4}, + {0xf0,0x4d}, + {0x00,0xb8072030}, + {0x04,0xb606e001}, + {0x08,0xc20022fc}, + {0x0c,0x80a6c001}, + {0x10,0x0abfffea}, + {0x14,0xb4102000}, + {0x18,0x81c7e008}, + {0x1c,0x81e80000}, + {0x20,0x9de3bf98}, + {0x24,0x21000018}, + {0x28,0xc2002fe4}, + {0x2c,0x9fc04000}, + {0x30,0x90142200}, + {0x34,0xc200259c}, + {0x38,0xd800254c}, + {0x3c,0x808b2002}, + {0x40,0x02800033}, + {0x44,0xc2202550}, + {0x48,0xda002654}, + {0x4c,0x8203400d}, + {0x50,0x8200400d}, + {0x54,0xda00259c}, + {0x58,0xb2036140}, + {0x5c,0x82004001}, + {0x60,0x9a102061}, + {0x64,0x9a234001}, + {0x68,0x832e6007}, + {0x6c,0x9738601f}, + {0x70,0x8182e000}, + {0x74,0x01000000}, + {0x78,0x01000000}, + {0x7c,0x01000000}, + {0xf0,0x4e}, + {0x00,0xb278400d}, + {0x04,0x980b3ffd}, + {0x08,0xd820254c}, + {0x0c,0xc2002fe4}, + {0x10,0x9fc04000}, + {0x14,0x90142340}, + {0x18,0x11000017}, + {0x1c,0xe000259c}, + {0x20,0xc2002fe4}, + {0x24,0x9fc04000}, + {0x28,0x90122240}, + {0x2c,0x80a64010}, + {0x30,0x9a603fff}, + {0x34,0xc200259c}, + {0x38,0x80a64001}, + {0x3c,0x82603fff}, + {0x40,0x80934001}, + {0x44,0x22800012}, + {0x48,0xc020250c}, + {0x4c,0x21000019}, + {0x50,0x7ffffad5}, + {0x54,0x90142200}, + {0x58,0xa0142200}, + {0x5c,0xb2102000}, + {0x60,0x9b2e6002}, + {0x64,0xb2066001}, + {0x68,0xc2034010}, + {0x6c,0x80a66017}, + {0x70,0x04bffffc}, + {0x74,0xc22365b0}, + {0x78,0x7ffffb36}, + {0x7c,0x01000000}, + {0xf0,0x4f}, + {0x00,0x82102015}, + {0x04,0x10800010}, + {0x08,0xc2202500}, + {0x0c,0xc200250c}, + {0x10,0x80a06000}, + {0x14,0x1280000c}, + {0x18,0x031696a9}, + {0x1c,0x821061a5}, + {0x20,0x31000018}, + {0x24,0x33000017}, + {0x28,0xc220250c}, + {0x2c,0xc0202658}, + {0x30,0xc0202654}, + {0x34,0xb0162200}, + {0x38,0xb2166240}, + {0x3c,0x7ffffd69}, + {0x40,0x81e80000}, + {0x44,0x01000000}, + {0x48,0x81c7e008}, + {0x4c,0x81e80000}, + {0x50,0x9de3bf58}, + {0x54,0x94100018}, + {0x58,0x9a102000}, + {0x5c,0x96102000}, + {0x60,0x98102000}, + {0x64,0x9e102000}, + {0x68,0x8203000f}, + {0x6c,0xf6086441}, + {0x70,0x80a6e000}, + {0x74,0x02800024}, + {0x78,0xf4086440}, + {0x7c,0xc208217d}, + {0xf0,0x50}, + {0x00,0x80807fff}, + {0x04,0xf40ea37f}, + {0x08,0xf60ee37f}, + {0x0c,0x0c80001a}, + {0x10,0xb2102000}, + {0x14,0xb007bff8}, + {0x18,0xc200247c}, + {0x1c,0x82584019}, + {0x20,0xba06c001}, + {0x24,0x82068001}, + {0x28,0x82004001}, + {0x2c,0xf8528001}, + {0x30,0xba07401d}, + {0x34,0xc252801d}, + {0x38,0xb8270001}, + {0x3c,0x80a66000}, + {0x40,0x02800007}, + {0x44,0xf8263fc0}, + {0x48,0xc2063fbc}, + {0x4c,0x82a70001}, + {0x50,0x2c800003}, + {0x54,0x9a234001}, + {0x58,0x9a034001}, + {0x5c,0xc208217d}, + {0x60,0xb2066001}, + {0x64,0x82007fff}, + {0x68,0x80a64001}, + {0x6c,0x04bfffeb}, + {0x70,0xb0062004}, + {0x74,0x9e03e001}, + {0x78,0x80a3e00a}, + {0x7c,0x04bfffdc}, + {0xf0,0x51}, + {0x00,0x8203000f}, + {0x04,0x9602e001}, + {0x08,0x80a2e001}, + {0x0c,0x04bfffd6}, + {0x10,0x9803200c}, + {0x14,0xda20259c}, + {0x18,0x81c7e008}, + {0x1c,0x81e80000}, + {0x20,0x9de3bf98}, + {0x24,0xc2002304}, + {0x28,0x80a06000}, + {0x2c,0x02800022}, + {0x30,0x01000000}, + {0x34,0xf80021d8}, + {0x38,0x80a72000}, + {0x3c,0x0280001e}, + {0x40,0x82064019}, + {0x44,0x82004019}, + {0x48,0x83286002}, + {0x4c,0x82004018}, + {0x50,0xb1286002}, + {0x54,0x3b000019}, + {0x58,0xc2002300}, + {0x5c,0xb61760dc}, + {0x60,0xb41760e0}, + {0x64,0x9e1760e4}, + {0x68,0x80a64001}, + {0x6c,0x12800012}, + {0x70,0x9a176080}, + {0x74,0xc206001a}, + {0x78,0xfa06001b}, + {0x7c,0xba074001}, + {0xf0,0x52}, + {0x00,0xc206000f}, + {0x04,0xba074001}, + {0x08,0xba5f401c}, + {0x0c,0x833f601f}, + {0x10,0x83306019}, + {0x14,0xba074001}, + {0x18,0xc206000d}, + {0x1c,0xbb3f6007}, + {0x20,0x80a0401d}, + {0x24,0x16800004}, + {0x28,0x82102001}, + {0x2c,0xc220259c}, + {0x30,0x30800002}, + {0x34,0xc020259c}, + {0x38,0x81c7e008}, + {0x3c,0x81e80000}, + {0x40,0x9de3bf58}, + {0x44,0xc208224d}, + {0x48,0x80a06000}, + {0x4c,0x12800004}, + {0x50,0x90067ffe}, + {0x54,0xc020259c}, + {0x58,0x3080006a}, + {0x5c,0xac066002}, + {0x60,0x80a20016}, + {0x64,0x14800044}, + {0x68,0x9e102000}, + {0x6c,0x82020008}, + {0x70,0x82004008}, + {0x74,0xa1286002}, + {0x78,0xa8062002}, + {0x7c,0x92063ffe}, + {0xf0,0x53}, + {0x00,0x80a24014}, + {0x04,0x14800038}, + {0x08,0x82064019}, + {0x0c,0x82204008}, + {0x10,0x98004001}, + {0x14,0x98030001}, + {0x18,0x9b3a201f}, + {0x1c,0x96040009}, + {0x20,0x952be002}, + {0x24,0x03000019}, + {0x28,0x9a234008}, + {0x2c,0xae106080}, + {0x30,0x972ae002}, + {0x34,0x9402801e}, + {0x38,0xa72b2002}, + {0x3c,0xab33601f}, + {0x40,0x9602c017}, + {0x44,0x9402bfb8}, + {0x48,0xa4063fff}, + {0x4c,0xa2062001}, + {0x50,0x98067fff}, + {0x54,0x82060018}, + {0x58,0x82204009}, + {0x5c,0x8204c001}, + {0x60,0x80a24012}, + {0x64,0x0680000b}, + {0x68,0x9b286002}, + {0x6c,0x80a24011}, + {0x70,0x14800009}, + {0x74,0x80a26000}, + {0x78,0x80a2000c}, + {0x7c,0x06800005}, + {0xf0,0x54}, + {0x00,0x82066001}, + {0x04,0x80a20001}, + {0x08,0x24800014}, + {0x0c,0x92026001}, + {0x10,0x80a26000}, + {0x14,0x2480000d}, + {0x18,0xc2034017}, + {0x1c,0xc2002308}, + {0x20,0x80a04009}, + {0x24,0x82603fff}, + {0x28,0x80884015}, + {0x2c,0x22800007}, + {0x30,0xc2034017}, + {0x34,0xc2002300}, + {0x38,0x80a20001}, + {0x3c,0x38800003}, + {0x40,0xc2034017}, + {0x44,0xc202c000}, + {0x48,0xc2228000}, + {0x4c,0x9e03e001}, + {0x50,0x9402a004}, + {0x54,0x92026001}, + {0x58,0x80a24014}, + {0x5c,0x04bfffde}, + {0x60,0x9602e004}, + {0x64,0x90022001}, + {0x68,0x80a20016}, + {0x6c,0x04bfffc4}, + {0x70,0xa004200c}, + {0x74,0x9007bfb8}, + {0x78,0x7ffff8d7}, + {0x7c,0x92102010}, + {0xf0,0x55}, + {0x00,0xd608224f}, + {0x04,0xb00ae0ff}, + {0x08,0xd808224d}, + {0x0c,0x80a6000c}, + {0x10,0x1480000b}, + {0x14,0x9e102000}, + {0x18,0x832e2002}, + {0x1c,0x8200401e}, + {0x20,0x9a007fb8}, + {0x24,0xc2034000}, + {0x28,0xb0062001}, + {0x2c,0x9e03c001}, + {0x30,0x80a6000c}, + {0x34,0x04bffffc}, + {0x38,0x9a036004}, + {0x3c,0x820ae0ff}, + {0x40,0xda08224d}, + {0x44,0x9a234001}, + {0x48,0xc208224c}, + {0x4c,0x9a036001}, + {0x50,0x825bc001}, + {0x54,0x9938601f}, + {0x58,0x81832000}, + {0x5c,0x01000000}, + {0x60,0x01000000}, + {0x64,0x01000000}, + {0x68,0x8278400d}, + {0x6c,0x9b38601f}, + {0x70,0x9b336019}, + {0x74,0x8200400d}, + {0x78,0x83386007}, + {0x7c,0xc220259c}, + {0xf0,0x56}, + {0x00,0x81c7e008}, + {0x04,0x81e80000}, + {0x08,0x9de3bf98}, + {0x0c,0xc2002540}, + {0x10,0x82006001}, + {0x14,0xc2202540}, + {0x18,0xc2002588}, + {0x1c,0x80a06000}, + {0x20,0x02800014}, + {0x24,0x11000018}, + {0x28,0xc2002594}, + {0x2c,0x80a06000}, + {0x30,0x12800004}, + {0x34,0x90122340}, + {0x38,0x7ffffc3f}, + {0x3c,0x01000000}, + {0x40,0xda002588}, + {0x44,0xc2002594}, + {0x48,0x82006001}, + {0x4c,0x9a037fff}, + {0x50,0xc2202594}, + {0x54,0x7ffff9cb}, + {0x58,0xda202588}, + {0x5c,0x13000018}, + {0x60,0x92126340}, + {0x64,0xc2002fc0}, + {0x68,0x9fc04000}, + {0x6c,0xd4002594}, + {0x70,0x01000000}, + {0x74,0x81c7e008}, + {0x78,0x81e80000}, + {0x7c,0xc2002588}, + {0xf0,0x57}, + {0x00,0x80a06001}, + {0x04,0x1280001a}, + {0x08,0xda002298}, + {0x0c,0xc2102548}, + {0x10,0x80886001}, + {0x14,0x22800009}, + {0x18,0xc2002208}, + {0x1c,0xc2002170}, + {0x20,0x80a06000}, + {0x24,0x22800005}, + {0x28,0xc2002208}, + {0x2c,0xc0202598}, + {0x30,0x1080000f}, + {0x34,0x9a100001}, + {0x38,0x80a06000}, + {0x3c,0x22800009}, + {0x40,0xc2002598}, + {0x44,0xc2002558}, + {0x48,0x80a06000}, + {0x4c,0x32800005}, + {0x50,0xc2002598}, + {0x54,0xc0202598}, + {0x58,0x10800005}, + {0x5c,0xda002234}, + {0x60,0x80a06000}, + {0x64,0x22800002}, + {0x68,0xda00233c}, + {0x6c,0x033fc200}, + {0x70,0x82106070}, + {0x74,0x81c3e008}, + {0x78,0xda204000}, + {0x7c,0x9de3bf98}, + {0xf0,0x58}, + {0x00,0xc2002588}, + {0x04,0x80a06000}, + {0x08,0x02800010}, + {0x0c,0x11000018}, + {0x10,0xd8002548}, + {0x14,0x83332010}, + {0x18,0x80886001}, + {0x1c,0x22800010}, + {0x20,0xc200258c}, + {0x24,0xc2002558}, + {0x28,0x80a06000}, + {0x2c,0x3280000c}, + {0x30,0xc200258c}, + {0x34,0xc2002594}, + {0x38,0x80a06001}, + {0x3c,0x32800008}, + {0x40,0xc200258c}, + {0x44,0x11000018}, + {0x48,0x90122340}, + {0x4c,0xd0202590}, + {0x50,0xc0202588}, + {0x54,0x1080001a}, + {0x58,0xd2002594}, + {0x5c,0x80a06000}, + {0x60,0x12800015}, + {0x64,0x82102001}, + {0x68,0xda002554}, + {0x6c,0xc2002598}, + {0x70,0x80a0400d}, + {0x74,0x1a800007}, + {0x78,0x03000017}, + {0x7c,0x82102001}, + {0xf0,0x59}, + {0x00,0xda20258c}, + {0x04,0xc2202584}, + {0x08,0x10800028}, + {0x0c,0xc0202598}, + {0x10,0x808b2400}, + {0x14,0x12800004}, + {0x18,0x82106240}, + {0x1c,0x03000017}, + {0x20,0x82106100}, + {0x24,0xc2202590}, + {0x28,0xd2002598}, + {0x2c,0x10800004}, + {0x30,0xd0002590}, + {0x34,0x1080001d}, + {0x38,0xc2202584}, + {0x3c,0x7ffffbe6}, + {0x40,0x01000000}, + {0x44,0x13000018}, + {0x48,0xc2002fd0}, + {0x4c,0x92126200}, + {0x50,0x9fc04000}, + {0x54,0xd0002590}, + {0x58,0xc2002690}, + {0x5c,0x82087dff}, + {0x60,0xc2202690}, + {0x64,0x82102080}, + {0x68,0xc220256c}, + {0x6c,0xc2002200}, + {0x70,0x80a06000}, + {0x74,0x32800008}, + {0x78,0xc2002548}, + {0x7c,0xda002548}, + {0xf0,0x5a}, + {0x00,0x83336010}, + {0x04,0x80886001}, + {0x08,0x22800006}, + {0x0c,0x03000004}, + {0x10,0xc2002548}, + {0x14,0x1b000004}, + {0x18,0x10800003}, + {0x1c,0x8210400d}, + {0x20,0x822b4001}, + {0x24,0xc2202548}, + {0x28,0x81c7e008}, + {0x2c,0x81e80000}, + {0x30,0xda002508}, + {0x34,0x033fc000}, + {0x38,0x960b4001}, + {0x3c,0x808b7f00}, + {0x40,0x0280001a}, + {0x44,0x901020a5}, + {0x48,0x1500003f}, + {0x4c,0x8212a300}, + {0x50,0x980b4001}, + {0x54,0x03294000}, + {0x58,0x80a2c001}, + {0x5c,0x02800013}, + {0x60,0x01000000}, + {0x64,0xc200254c}, + {0x68,0x8210400c}, + {0x6c,0xc220254c}, + {0x70,0xc2002500}, + {0x74,0x80a06028}, + {0x78,0xc0202508}, + {0x7c,0x0880000b}, + {0xf0,0x5b}, + {0x00,0x033fffc0}, + {0x04,0x9a0b4001}, + {0x08,0x03168000}, + {0x0c,0x80a2c001}, + {0x10,0x12800006}, + {0x14,0x9812a3ff}, + {0x18,0xc2002548}, + {0x1c,0x8208400c}, + {0x20,0x8210400d}, + {0x24,0xc2202548}, + {0x28,0x03000006}, + {0x2c,0x81c063cc}, + {0x30,0x01000000}, + {0x34,0x01000000}, + {0x38,0xda00247c}, + {0x3c,0xc20022f8}, + {0x40,0x8258400d}, + {0x44,0x83306001}, + {0x48,0x9a102000}, + {0x4c,0x80a34001}, + {0x50,0x1a800015}, + {0x54,0x031fffdf}, + {0x58,0x961063ff}, + {0x5c,0x98036001}, + {0x60,0x80a26008}, + {0x64,0x04800006}, + {0x68,0x9b2b6002}, + {0x6c,0xc202000d}, + {0x70,0x83306001}, + {0x74,0x10800003}, + {0x78,0x8208400b}, + {0x7c,0xc202000d}, + {0xf0,0x5c}, + {0x00,0x82584009}, + {0x04,0xc222000d}, + {0x08,0xda00247c}, + {0x0c,0xc20022f8}, + {0x10,0x8258400d}, + {0x14,0x83306001}, + {0x18,0x80a30001}, + {0x1c,0x0abffff0}, + {0x20,0x9a10000c}, + {0x24,0x81c3e008}, + {0x28,0x01000000}, + {0x2c,0x9de3bf98}, + {0x30,0xc2102548}, + {0x34,0x80886001}, + {0x38,0x12800068}, + {0x3c,0x01000000}, + {0x40,0xe6002460}, + {0x44,0x80a4e000}, + {0x48,0x02800064}, + {0x4c,0x01000000}, + {0x50,0xc2002588}, + {0x54,0xda002594}, + {0x58,0x9800400d}, + {0x5c,0xc2002554}, + {0x60,0x80a30001}, + {0x64,0x1280005d}, + {0x68,0x01000000}, + {0x6c,0xda002598}, + {0x70,0xc200258c}, + {0x74,0x8200400d}, + {0x78,0x80a0400c}, + {0x7c,0x02800004}, + {0xf0,0x5d}, + {0x00,0x80a36000}, + {0x04,0x12800055}, + {0x08,0x01000000}, + {0x0c,0xe208217e}, + {0x10,0x808c60ff}, + {0x14,0x9e102000}, + {0x18,0x0280002e}, + {0x1c,0x96102001}, + {0x20,0xe408217f}, + {0x24,0x13000019}, + {0x28,0x94102001}, + {0x2c,0x80a28012}, + {0x30,0x14800020}, + {0x34,0xa0102000}, + {0x38,0x832ae002}, + {0x3c,0x98006030}, + {0x40,0xac126080}, + {0x44,0xaa126050}, + {0x48,0xa81260b0}, + {0x4c,0xd008217f}, + {0x50,0xda030016}, + {0x54,0x80a34013}, + {0x58,0x26800013}, + {0x5c,0x9402a001}, + {0x60,0x80a2a001}, + {0x64,0x22800007}, + {0x68,0xc208217f}, + {0x6c,0xc2030015}, + {0x70,0x80a34001}, + {0x74,0x2480000c}, + {0x78,0x9402a001}, + {0x7c,0xc208217f}, + {0xf0,0x5e}, + {0x00,0x80a28001}, + {0x04,0x22800007}, + {0x08,0xa0042001}, + {0x0c,0xc2030014}, + {0x10,0x80a34001}, + {0x14,0x26800004}, + {0x18,0x9402a001}, + {0x1c,0xa0042001}, + {0x20,0x9402a001}, + {0x24,0x80a28008}, + {0x28,0x04bfffea}, + {0x2c,0x98032030}, + {0x30,0x80a4000f}, + {0x34,0x34800002}, + {0x38,0x9e100010}, + {0x3c,0x9602e001}, + {0x40,0x820c60ff}, + {0x44,0x80a2c001}, + {0x48,0x24bfffd9}, + {0x4c,0x94102001}, + {0x50,0x96102000}, + {0x54,0xc20ae464}, + {0x58,0x80a06000}, + {0x5c,0x22800006}, + {0x60,0x9602e001}, + {0x64,0x80a3c001}, + {0x68,0x34800007}, + {0x6c,0xc20ae278}, + {0x70,0x9602e001}, + {0x74,0x80a2e003}, + {0x78,0x24bffff8}, + {0x7c,0xc20ae464}, + {0xf0,0x5f}, + {0x00,0x30800016}, + {0x04,0xda00256c}, + {0x08,0x8258400d}, + {0x0c,0x83306007}, + {0x10,0xc220256c}, + {0x14,0xe00ae468}, + {0x18,0x80a42000}, + {0x1c,0x0280000f}, + {0x20,0x82102001}, + {0x24,0xc2202584}, + {0x28,0xd0002590}, + {0x2c,0x7fffff83}, + {0x30,0xd2002554}, + {0x34,0xc2002588}, + {0x38,0x82004010}, + {0x3c,0xc2202588}, + {0x40,0xda00258c}, + {0x44,0xc2002554}, + {0x48,0x80a34001}, + {0x4c,0x18800003}, + {0x50,0x82034010}, + {0x54,0xc220258c}, + {0x58,0x81c7e008}, + {0x5c,0x81e80000}, + {0x60,0x9de3bf98}, + {0x64,0xc2002588}, + {0x68,0x80a06000}, + {0x6c,0x1280005f}, + {0x70,0x01000000}, + {0x74,0xc20026f4}, + {0x78,0x82006001}, + {0x7c,0xda002310}, + {0xf0,0x60}, + {0x00,0x80a0400d}, + {0x04,0x0a800059}, + {0x08,0xc22026f4}, + {0x0c,0xd800227c}, + {0x10,0x80a32000}, + {0x14,0x02800031}, + {0x18,0xc02026f4}, + {0x1c,0xda0022f8}, + {0x20,0xc200247c}, + {0x24,0x965b4001}, + {0x28,0x03000007}, + {0x2c,0x821063ff}, + {0x30,0x9b33200d}, + {0x34,0xa2102000}, + {0x38,0x920b4001}, + {0x3c,0x80a4400b}, + {0x40,0x900b0001}, + {0x44,0x94102000}, + {0x48,0x1a800014}, + {0x4c,0xa0102000}, + {0x50,0x03000018}, + {0x54,0xa4106200}, + {0x58,0x9e106340}, + {0x5c,0x9a040010}, + {0x60,0xc213400f}, + {0x64,0x80a24001}, + {0x68,0xa2400011}, + {0x6c,0xc2534012}, + {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,0x7ffff8dd}, + {0x10,0x90100010}, + {0x14,0x92100008}, + {0x18,0x7ffff876}, + {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,0x0280004f}, + {0xf0,0x63}, + {0x00,0x01000000}, + {0x04,0xc200254c}, + {0x08,0x80886100}, + {0x0c,0x1280004b}, + {0x10,0x01000000}, + {0x14,0xc20026f0}, + {0x18,0x82006001}, + {0x1c,0x80a0400d}, + {0x20,0x0a800046}, + {0x24,0xc22026f0}, + {0x28,0xa4102000}, + {0x2c,0xc20023d4}, + {0x30,0x80a48001}, + {0x34,0xc02026f0}, + {0x38,0xa2102000}, + {0x3c,0x1a800027}, + {0x40,0xa72c6002}, + {0x44,0xc204e364}, + {0x48,0x80a06000}, + {0x4c,0x0280001f}, + {0x50,0xa0102000}, + {0x54,0xc208217e}, + {0x58,0x80a40001}, + {0x5c,0x1680001b}, + {0x60,0x15000018}, + {0x64,0xc2002548}, + {0x68,0x80886020}, + {0x6c,0xc20c2380}, + {0x70,0x9412a340}, + {0x74,0x90100011}, + {0x78,0x12800006}, + {0x7c,0x920860ff}, + {0xf0,0x64}, + {0x00,0x15000018}, + {0x04,0x920860ff}, + {0x08,0x9412a200}, + {0x0c,0x90100011}, + {0x10,0x7ffff861}, + {0x14,0xa0042001}, + {0x18,0xc204e364}, + {0x1c,0xda002348}, + {0x20,0x98020001}, + {0x24,0x82034001}, + {0x28,0x80a20001}, + {0x2c,0x38bfffea}, + {0x30,0xa404a001}, + {0x34,0x80a3000d}, + {0x38,0x3abfffe8}, + {0x3c,0xc208217e}, + {0x40,0x10bfffe5}, + {0x44,0xa404a001}, + {0x48,0xa2046001}, + {0x4c,0xc20023d4}, + {0x50,0x10bfffdb}, + {0x54,0x80a44001}, + {0x58,0xd80026ec}, + {0x5c,0x80930012}, + {0x60,0x1280000a}, + {0x64,0x80a4a000}, + {0x68,0xda002548}, + {0x6c,0x83336005}, + {0x70,0x82086001}, + {0x74,0x82186001}, + {0x78,0x83286005}, + {0x7c,0x9a0b7fdf}, + {0xf0,0x65}, + {0x00,0x9a134001}, + {0x04,0xda202548}, + {0x08,0x12800004}, + {0x0c,0x82032001}, + {0x10,0x10800003}, + {0x14,0xc02026ec}, + {0x18,0xc22026ec}, + {0x1c,0xc20026ec}, + {0x20,0x80a06002}, + {0x24,0x04800005}, + {0x28,0x1b000040}, + {0x2c,0xc200254c}, + {0x30,0x8210400d}, + {0x34,0xc220254c}, + {0x38,0x81c7e008}, + {0x3c,0x81e80000}, + {0x40,0x9de3bf58}, + {0x44,0xc2002548}, + {0x48,0x8330600c}, + {0x4c,0x80886001}, + {0x50,0x1280006d}, + {0x54,0x01000000}, + {0x58,0xfa002500}, + {0x5c,0xc20021f4}, + {0x60,0x80a74001}, + {0x64,0x18800068}, + {0x68,0x01000000}, + {0x6c,0xc200254c}, + {0x70,0x8330600b}, + {0x74,0x82086001}, + {0x78,0x80a00001}, + {0x7c,0x9a603fff}, + {0xf0,0x66}, + {0x00,0x9403400d}, + {0x04,0xc252a210}, + {0x08,0x80a06000}, + {0x0c,0x0280005e}, + {0x10,0x8207bfb8}, + {0x14,0xb810200f}, + {0x18,0xc0204000}, + {0x1c,0xb8873fff}, + {0x20,0x1cbffffe}, + {0x24,0x82006004}, + {0x28,0xb0102001}, + {0x2c,0xc2002300}, + {0x30,0x80a60001}, + {0x34,0x1880003b}, + {0x38,0x03000019}, + {0x3c,0x82106080}, + {0x40,0x96006030}, + {0x44,0xb4102001}, + {0x48,0xc2002308}, + {0x4c,0x80a68001}, + {0x50,0x38800030}, + {0x54,0xb0062001}, + {0x58,0xb202e004}, + {0x5c,0xfa52a210}, + {0x60,0xc2064000}, + {0x64,0x80a0401d}, + {0x68,0x36800025}, + {0x6c,0xb406a001}, + {0x70,0x832ea018}, + {0x74,0xbb2e2010}, + {0x78,0x8200401d}, + {0x7c,0x9e006001}, + {0xf0,0x67}, + {0x00,0xb8102000}, + {0x04,0x98102001}, + {0x08,0xb607bfb8}, + {0x0c,0xbb2f2002}, + {0x10,0xc20f6828}, + {0x14,0x80a68001}, + {0x18,0x1280000f}, + {0x1c,0xb8072001}, + {0x20,0xc20f6829}, + {0x24,0x80a60001}, + {0x28,0x3280000c}, + {0x2c,0xc2176828}, + {0x30,0xd826c000}, + {0x34,0xc217682a}, + {0x38,0x80a061fe}, + {0x3c,0x38800010}, + {0x40,0xb406a001}, + {0x44,0xc2076828}, + {0x48,0x82006001}, + {0x4c,0x1080000b}, + {0x50,0xc2276828}, + {0x54,0xc2176828}, + {0x58,0x80a06000}, + {0x5c,0x12800005}, + {0x60,0x80a7200f}, + {0x64,0xd826c000}, + {0x68,0x10800004}, + {0x6c,0xde276828}, + {0x70,0x08bfffe7}, + {0x74,0xb606e004}, + {0x78,0xb406a001}, + {0x7c,0xc2002308}, + {0xf0,0x68}, + {0x00,0x80a68001}, + {0x04,0x08bfffd6}, + {0x08,0xb2066004}, + {0x0c,0xb0062001}, + {0x10,0xc2002300}, + {0x14,0x80a60001}, + {0x18,0x08bfffcb}, + {0x1c,0x9602e030}, + {0x20,0xb4102000}, + {0x24,0xb8102000}, + {0x28,0xb607bff8}, + {0x2c,0xbb2f2002}, + {0x30,0x8207401b}, + {0x34,0xc2007fc0}, + {0x38,0x80a06000}, + {0x3c,0x32800004}, + {0x40,0xfa17682a}, + {0x44,0x10800005}, + {0x48,0xc0276828}, + {0x4c,0xc20b63cc}, + {0x50,0x80a74001}, + {0x54,0xb466bfff}, + {0x58,0xb8072001}, + {0x5c,0x80a7200f}, + {0x60,0x08bffff4}, + {0x64,0xbb2f2002}, + {0x68,0xc20b63ce}, + {0x6c,0x80a68001}, + {0x70,0x08800005}, + {0x74,0x3b000200}, + {0x78,0xc200254c}, + {0x7c,0x8210401d}, + {0xf0,0x69}, + {0x00,0xc220254c}, + {0x04,0x81c7e008}, + {0x08,0x81e80000}, + {0x0c,0x9de3bf98}, + {0x10,0xd8002200}, + {0x14,0x80a32000}, + {0x18,0x1280000a}, + {0x1c,0x03000019}, + {0x20,0xc2002548}, + {0x24,0x82087ffb}, + {0x28,0xc2202548}, + {0x2c,0x033fc180}, + {0x30,0x8210602c}, + {0x34,0xc0204000}, + {0x38,0x1080004f}, + {0x3c,0xc02026d8}, + {0x40,0x82106080}, + {0x44,0xc0202504}, + {0x48,0x9e006030}, + {0x4c,0xb2102001}, + {0x50,0x10800016}, + {0x54,0xda102238}, + {0x58,0xf0002308}, + {0x5c,0x80a6c018}, + {0x60,0x38800011}, + {0x64,0xb2066001}, + {0x68,0xf410223a}, + {0x6c,0xba03e004}, + {0x70,0xc2074000}, + {0x74,0xb606e001}, + {0x78,0xba076004}, + {0x7c,0x80a0401a}, + {0xf0,0x6a}, + {0x00,0x04800005}, + {0x04,0xb820401a}, + {0x08,0xc2002504}, + {0x0c,0x8200401c}, + {0x10,0xc2202504}, + {0x14,0x80a6c018}, + {0x18,0x28bffff7}, + {0x1c,0xc2074000}, + {0x20,0xb2066001}, + {0x24,0x9e03e030}, + {0x28,0x80a36000}, + {0x2c,0x32800003}, + {0x30,0x80a6400d}, + {0x34,0x80a6400c}, + {0x38,0x18800004}, + {0x3c,0x80a66010}, + {0x40,0x08bfffe6}, + {0x44,0xb6102001}, + {0x48,0xfa10223e}, + {0x4c,0xc2002504}, + {0x50,0x80a0401d}, + {0x54,0x3480000a}, + {0x58,0xc2002548}, + {0x5c,0xfa10223c}, + {0x60,0x80a76000}, + {0x64,0x2280000b}, + {0x68,0xc2002548}, + {0x6c,0xc2082517}, + {0x70,0x80a0401d}, + {0x74,0x0a800007}, + {0x78,0xc2002548}, + {0x7c,0x80886008}, + {0xf0,0x6b}, + {0x00,0x22800008}, + {0x04,0xc20026d8}, + {0x08,0x10800008}, + {0x0c,0xc02026d8}, + {0x10,0x80886008}, + {0x14,0x22800005}, + {0x18,0xc02026d8}, + {0x1c,0xc20026d8}, + {0x20,0x82006001}, + {0x24,0xc22026d8}, + {0x28,0xfa0026d8}, + {0x2c,0xc2002290}, + {0x30,0x80a74001}, + {0x34,0x0880000b}, + {0x38,0xfa002548}, + {0x3c,0x83376003}, + {0x40,0x82086001}, + {0x44,0x82186001}, + {0x48,0x83286002}, + {0x4c,0xba0f7ffb}, + {0x50,0xba174001}, + {0x54,0xfa202548}, + {0x58,0xc02026d8}, + {0x5c,0xfa002548}, + {0x60,0xbb376002}, + {0x64,0x033fc180}, + {0x68,0xba0f6001}, + {0x6c,0x8210602c}, + {0x70,0xfa204000}, + {0x74,0x81c7e008}, + {0x78,0x81e80000}, + {0x7c,0x9de3bf70}, + {0xf0,0x6c}, + {0x00,0x1b00003f}, + {0x04,0xc2002350}, + {0x08,0x9a1363ff}, + {0x0c,0xae08400d}, + {0x10,0xa6102001}, + {0x14,0xda002300}, + {0x18,0x80a4c00d}, + {0x1c,0x18800062}, + {0x20,0xa3306010}, + {0x24,0xa410200c}, + {0x28,0xac102000}, + {0x2c,0xaa102000}, + {0x30,0xa8102000}, + {0x34,0x80a46000}, + {0x38,0x0280002c}, + {0x3c,0xa0102000}, + {0x40,0x03000019}, + {0x44,0x96106080}, + {0x48,0x92102000}, + {0x4c,0x9807bfd0}, + {0x50,0x82050009}, + {0x54,0xda086440}, + {0x58,0x8204800d}, + {0x5c,0x80a36000}, + {0x60,0x02800008}, + {0x64,0x83286002}, + {0x68,0xc200400b}, + {0x6c,0xc2230000}, + {0x70,0x92026001}, + {0x74,0x80a2600b}, + {0x78,0x04bffff6}, + {0x7c,0x98032004}, + {0xf0,0x6d}, + {0x00,0x7ffff5d5}, + {0x04,0x9007bfd0}, + {0x08,0x80a5c011}, + {0x0c,0x1480000b}, + {0x10,0x92100017}, + {0x14,0x832de002}, + {0x18,0x8200401e}, + {0x1c,0x9a007fd0}, + {0x20,0xc2034000}, + {0x24,0x92026001}, + {0x28,0xa0040001}, + {0x2c,0x80a24011}, + {0x30,0x04bffffc}, + {0x34,0x9a036004}, + {0x38,0x82244017}, + {0x3c,0x82006001}, + {0x40,0x9b3c201f}, + {0x44,0x81836000}, + {0x48,0x01000000}, + {0x4c,0x01000000}, + {0x50,0x01000000}, + {0x54,0xa07c0001}, + {0x58,0xc25021ae}, + {0x5c,0x80a40001}, + {0x60,0x26800002}, + {0x64,0xa0100001}, + {0x68,0x03000019}, + {0x6c,0x94106080}, + {0x70,0x92102000}, + {0x74,0x82054009}, + {0x78,0xda086440}, + {0x7c,0x8204800d}, + {0xf0,0x6e}, + {0x00,0x99286002}, + {0x04,0x80a36000}, + {0x08,0x0280001d}, + {0x0c,0x9610000c}, + {0x10,0x80a42000}, + {0x14,0x2480000c}, + {0x18,0xc202c00a}, + {0x1c,0xc203000a}, + {0x20,0x80a04010}, + {0x24,0x16800007}, + {0x28,0x98102000}, + {0x2c,0x80a06000}, + {0x30,0x24800006}, + {0x34,0x98100001}, + {0x38,0x10800005}, + {0x3c,0x8204800d}, + {0x40,0xc202c00a}, + {0x44,0x98204010}, + {0x48,0x8204800d}, + {0x4c,0x9b286002}, + {0x50,0xc20023c8}, + {0x54,0x83306011}, + {0x58,0x80886001}, + {0x5c,0x02800005}, + {0x60,0x92026001}, + {0x64,0xc20ce2af}, + {0x68,0x825b0001}, + {0x6c,0x99386007}, + {0x70,0x80a2600b}, + {0x74,0x04bfffe0}, + {0x78,0xd823400a}, + {0x7c,0xac05a001}, + {0xf0,0x6f}, + {0x00,0xa805200c}, + {0x04,0x80a5a001}, + {0x08,0x04bfffab}, + {0x0c,0xaa05600c}, + {0x10,0xa604e001}, + {0x14,0xc2002300}, + {0x18,0x80a4c001}, + {0x1c,0x08bfffa3}, + {0x20,0xa404a00c}, + {0x24,0x81c7e008}, + {0x28,0x81e80000}, + {0x2c,0x9de3bf58}, + {0x30,0xe2502458}, + {0x34,0x80a46000}, + {0x38,0x02800065}, + {0x3c,0x01000000}, + {0x40,0xc208217f}, + {0x44,0x80a44001}, + {0x48,0x16800061}, + {0x4c,0xa0102001}, + {0x50,0xc208217e}, + {0x54,0x80a40001}, + {0x58,0x1480005d}, + {0x5c,0xe450245a}, + {0x60,0x96102001}, + {0x64,0xc208217f}, + {0x68,0x80a2c001}, + {0x6c,0x1480000f}, + {0x70,0x03000019}, + {0x74,0x9b2c2002}, + {0x78,0x82106080}, + {0x7c,0x9a034001}, + {0xf0,0x70}, + {0x00,0x9a036030}, + {0x04,0x9807bfb8}, + {0x08,0xc2034000}, + {0x0c,0xc2230000}, + {0x10,0x9602e001}, + {0x14,0xc208217f}, + {0x18,0x80a2c001}, + {0x1c,0x9a036030}, + {0x20,0x04bffffa}, + {0x24,0x98032004}, + {0x28,0x9007bfb8}, + {0x2c,0x7ffff56a}, + {0x30,0xd208217f}, + {0x34,0x96100012}, + {0x38,0x80a48011}, + {0x3c,0x1480000b}, + {0x40,0x94102000}, + {0x44,0x832ca002}, + {0x48,0x8200401e}, + {0x4c,0x9a007fb8}, + {0x50,0xc2034000}, + {0x54,0x9602e001}, + {0x58,0x94028001}, + {0x5c,0x80a2c011}, + {0x60,0x04bffffc}, + {0x64,0x9a036004}, + {0x68,0x82244012}, + {0x6c,0x82006001}, + {0x70,0x9b3aa01f}, + {0x74,0x81836000}, + {0x78,0x01000000}, + {0x7c,0x01000000}, + {0xf0,0x71}, + {0x00,0x01000000}, + {0x04,0x947a8001}, + {0x08,0xc25021ac}, + {0x0c,0x80a28001}, + {0x10,0x26800002}, + {0x14,0x94100001}, + {0x18,0x96102001}, + {0x1c,0xc208217f}, + {0x20,0x80a2c001}, + {0x24,0x14800025}, + {0x28,0x832c2002}, + {0x2c,0x11000019}, + {0x30,0x98006030}, + {0x34,0x92122080}, + {0x38,0x80a2a000}, + {0x3c,0x0480000b}, + {0x40,0x9a122080}, + {0x44,0xc203000d}, + {0x48,0x80a0400a}, + {0x4c,0x36800008}, + {0x50,0xc2030009}, + {0x54,0x80a06000}, + {0x58,0x34800007}, + {0x5c,0xc023000d}, + {0x60,0x10800006}, + {0x64,0xc20023c8}, + {0x68,0xc2030009}, + {0x6c,0x8220400a}, + {0x70,0xc2230009}, + {0x74,0xc20023c8}, + {0x78,0x83306012}, + {0x7c,0x80886001}, + {0xf0,0x72}, + {0x00,0x0280000a}, + {0x04,0x9602e001}, + {0x08,0xda0c22af}, + {0x0c,0xc2030009}, + {0x10,0x8258400d}, + {0x14,0x9b38601f}, + {0x18,0x9b336019}, + {0x1c,0x8200400d}, + {0x20,0x83386007}, + {0x24,0xc2230009}, + {0x28,0xc208217f}, + {0x2c,0x80a2c001}, + {0x30,0x04bfffe2}, + {0x34,0x98032030}, + {0x38,0xa0042001}, + {0x3c,0xc208217e}, + {0x40,0x80a40001}, + {0x44,0x04bfffa8}, + {0x48,0x96102001}, + {0x4c,0x81c7e008}, + {0x50,0x81e80000}, + {0x54,0x9de3bf98}, + {0x58,0xfa5023c6}, + {0x5c,0x80a76000}, + {0x60,0x0280003c}, + {0x64,0xb0102001}, + {0x68,0xc208217e}, + {0x6c,0x80a60001}, + {0x70,0x14800038}, + {0x74,0x19000019}, + {0x78,0x82132080}, + {0x7c,0x9a10001d}, + {0xf0,0x73}, + {0x00,0x9e006004}, + {0x04,0xfa08217f}, + {0x08,0x80a76000}, + {0x0c,0xb2102000}, + {0x10,0x0280002b}, + {0x14,0x82102000}, + {0x18,0xb810001d}, + {0x1c,0xf45023c4}, + {0x20,0xba03e030}, + {0x24,0xf6074000}, + {0x28,0x80a6c01a}, + {0x2c,0x06800004}, + {0x30,0xba076030}, + {0x34,0xb206401b}, + {0x38,0x82006001}, + {0x3c,0xb8873fff}, + {0x40,0x32bffffa}, + {0x44,0xf6074000}, + {0x48,0x80a06000}, + {0x4c,0x2280001d}, + {0x50,0xb0062001}, + {0x54,0x973e601f}, + {0x58,0x8182e000}, + {0x5c,0x01000000}, + {0x60,0x01000000}, + {0x64,0x01000000}, + {0x68,0x827e4001}, + {0x6c,0x8258400d}, + {0x70,0xbb38601f}, + {0x74,0xbb376016}, + {0x78,0x8200401d}, + {0x7c,0xb8102001}, + {0xf0,0x74}, + {0x00,0xfa08217f}, + {0x04,0x80a7001d}, + {0x08,0x1480000d}, + {0x0c,0xb338600a}, + {0x10,0x832e2002}, + {0x14,0xba006030}, + {0x18,0xb6132080}, + {0x1c,0xc207401b}, + {0x20,0x82204019}, + {0x24,0xc227401b}, + {0x28,0xb8072001}, + {0x2c,0xc208217f}, + {0x30,0x80a70001}, + {0x34,0x04bffffa}, + {0x38,0xba076030}, + {0x3c,0xb0062001}, + {0x40,0xc208217e}, + {0x44,0x80a60001}, + {0x48,0x04bfffcf}, + {0x4c,0x9e03e004}, + {0x50,0x81c7e008}, + {0x54,0x81e80000}, + {0x58,0xc2082573}, + {0x5c,0xda00256c}, + {0x60,0x82006001}, + {0x64,0xd808257f}, + {0x68,0x9a5b4001}, + {0x6c,0x98032001}, + {0x70,0x81800000}, + {0x74,0x01000000}, + {0x78,0x01000000}, + {0x7c,0x01000000}, + {0xf0,0x75}, + {0x00,0x9a73400c}, + {0x04,0xda20256c}, + {0x08,0x96102000}, + {0x0c,0x832ae002}, + {0x10,0xd800256c}, + {0x14,0xda1063b6}, + {0x18,0x9a5b400c}, + {0x1c,0x9b336007}, + {0x20,0x9602e001}, + {0x24,0x80a2e003}, + {0x28,0x04bffff9}, + {0x2c,0xda206520}, + {0x30,0xc20023c0}, + {0x34,0x80a06000}, + {0x38,0x02800007}, + {0x3c,0x82103000}, + {0x40,0xc2002200}, + {0x44,0x80a06000}, + {0x48,0x22800005}, + {0x4c,0xc200255c}, + {0x50,0x82103000}, + {0x54,0xc220252c}, + {0x58,0xc200255c}, + {0x5c,0x80a06000}, + {0x60,0x02800005}, + {0x64,0xc2002288}, + {0x68,0x9b306001}, + {0x6c,0x83306002}, + {0x70,0x8200400d}, + {0x74,0xc220251c}, + {0x78,0x03000007}, + {0x7c,0x81c062d4}, + {0xf0,0x76}, + {0x00,0x01000000}, + {0x04,0x01000000}, + {0x08,0x9de3bf98}, + {0x0c,0xc20021cc}, + {0x10,0x80a06000}, + {0x14,0x22800025}, + {0x18,0xc20026e4}, + {0x1c,0x82064019}, + {0x20,0x82004019}, + {0x24,0x83286002}, + {0x28,0x82004018}, + {0x2c,0x9f286002}, + {0x30,0xb92e2010}, + {0x34,0x3b003fc0}, + {0x38,0x03000019}, + {0x3c,0x9a1760ff}, + {0x40,0xb8070019}, + {0x44,0x98106080}, + {0x48,0xb4102007}, + {0x4c,0xbb2ea002}, + {0x50,0xc20761b0}, + {0x54,0x80a06000}, + {0x58,0x02800030}, + {0x5c,0xb608400d}, + {0x60,0x80a6c01c}, + {0x64,0x3280000e}, + {0x68,0xb486bfff}, + {0x6c,0xfa0f61b0}, + {0x70,0x80a76000}, + {0x74,0x2280000d}, + {0x78,0xc20026e4}, + {0x7c,0xc203c00c}, + {0xf0,0x77}, + {0x00,0x8258401d}, + {0x04,0xbb38601f}, + {0x08,0xbb376019}, + {0x0c,0x8200401d}, + {0x10,0x83386007}, + {0x14,0x10800004}, + {0x18,0xc223c00c}, + {0x1c,0x1cbfffed}, + {0x20,0xbb2ea002}, + {0x24,0xc20026e4}, + {0x28,0x80a06000}, + {0x2c,0x12800033}, + {0x30,0xb6064019}, + {0x34,0x8206c019}, + {0x38,0x83286002}, + {0x3c,0x82004018}, + {0x40,0x3b000019}, + {0x44,0x83286002}, + {0x48,0xba176080}, + {0x4c,0xf800401d}, + {0x50,0xc200251c}, + {0x54,0x80a70001}, + {0x58,0x04800028}, + {0x5c,0x01000000}, + {0x60,0xfa00255c}, + {0x64,0x80a76000}, + {0x68,0x02800015}, + {0x6c,0x832e2010}, + {0x70,0xc20023c8}, + {0x74,0x80886100}, + {0x78,0x02800011}, + {0x7c,0x832e2010}, + {0xf0,0x78}, + {0x00,0x80a7001d}, + {0x04,0x0880001d}, + {0x08,0x82004019}, + {0x0c,0x82207000}, + {0x10,0x10800012}, + {0x14,0xc2202710}, + {0x18,0x82064019}, + {0x1c,0x82004019}, + {0x20,0x83286002}, + {0x24,0x82004018}, + {0x28,0x3b000019}, + {0x2c,0x83286002}, + {0x30,0xba176080}, + {0x34,0x10bfffdc}, + {0x38,0xc020401d}, + {0x3c,0xfa002514}, + {0x40,0x82004019}, + {0x44,0xb92f6002}, + {0x48,0x82207000}, + {0x4c,0xc2272710}, + {0x50,0xba076001}, + {0x54,0xfa202514}, + {0x58,0x8206c019}, + {0x5c,0x83286002}, + {0x60,0x82004018}, + {0x64,0x3b000019}, + {0x68,0x83286002}, + {0x6c,0xba176080}, + {0x70,0xc200401d}, + {0x74,0xc220255c}, + {0x78,0x81c7e008}, + {0x7c,0x81e80000}, + {0xf0,0x79}, + {0x00,0x9de3bf98}, + {0x04,0xc2002308}, + {0x08,0x82006001}, + {0x0c,0xe208217e}, + {0x10,0x80a44001}, + {0x14,0x0a80001a}, + {0x18,0xa4102001}, + {0x1c,0xc208217f}, + {0x20,0x80a48001}, + {0x24,0x38800013}, + {0x28,0xc2002308}, + {0x2c,0x832c6002}, + {0x30,0xa0006030}, + {0x34,0x92100012}, + {0x38,0x7fffff94}, + {0x3c,0x90100011}, + {0x40,0x03000019}, + {0x44,0x98106080}, + {0x48,0xda04000c}, + {0x4c,0x82106084}, + {0x50,0xda240001}, + {0x54,0xc024000c}, + {0x58,0xa404a001}, + {0x5c,0xc208217f}, + {0x60,0x80a48001}, + {0x64,0x08bffff4}, + {0x68,0xa0042030}, + {0x6c,0xc2002308}, + {0x70,0xa2047fff}, + {0x74,0x10bfffe7}, + {0x78,0x82006001}, + {0x7c,0xc2002300}, + {0xf0,0x7a}, + {0x00,0x82006001}, + {0x04,0xe408217f}, + {0x08,0x80a48001}, + {0x0c,0x0a80001e}, + {0x10,0x82048012}, + {0x14,0x82004012}, + {0x18,0xa7286002}, + {0x1c,0xa2102001}, + {0x20,0xc2002308}, + {0x24,0x80a44001}, + {0x28,0x18800011}, + {0x2c,0x832ce002}, + {0x30,0xa0006004}, + {0x34,0x90100011}, + {0x38,0x7fffff74}, + {0x3c,0x92100012}, + {0x40,0x03000019}, + {0x44,0x98106080}, + {0x48,0xda04000c}, + {0x4c,0x821060b0}, + {0x50,0xda240001}, + {0x54,0xc024000c}, + {0x58,0xa2046001}, + {0x5c,0xc2002308}, + {0x60,0x80a44001}, + {0x64,0x08bffff4}, + {0x68,0xa0042004}, + {0x6c,0xc2002300}, + {0x70,0xa404bfff}, + {0x74,0x82006001}, + {0x78,0x80a48001}, + {0x7c,0x1abfffe8}, + {0xf0,0x7b}, + {0x00,0xa604fff4}, + {0x04,0xa2102000}, + {0x08,0xc2002514}, + {0x0c,0x80a44001}, + {0x10,0x1a80002f}, + {0x14,0x94102000}, + {0x18,0xc200237c}, + {0x1c,0x80a06000}, + {0x20,0x2280000a}, + {0x24,0xc20023c8}, + {0x28,0xc202a710}, + {0x2c,0x99306010}, + {0x30,0x82086fff}, + {0x34,0x980b2fff}, + {0x38,0x97286010}, + {0x3c,0x83286018}, + {0x40,0x1080000d}, + {0x44,0x9a032001}, + {0x48,0x80886200}, + {0x4c,0x22800010}, + {0x50,0xda02a710}, + {0x54,0xc202a710}, + {0x58,0x99306010}, + {0x5c,0x82086fff}, + {0x60,0x82006001}, + {0x64,0x980b2fff}, + {0x68,0x97286010}, + {0x6c,0x83286018}, + {0x70,0x9a033fff}, + {0x74,0x8200400b}, + {0x78,0x9b2b6008}, + {0x7c,0x8200400d}, + {0xf0,0x7c}, + {0x00,0x8200400c}, + {0x04,0x1080000c}, + {0x08,0x82006001}, + {0x0c,0x820b6fff}, + {0x10,0x82006001}, + {0x14,0x99286010}, + {0x18,0x9b336010}, + {0x1c,0x83286018}, + {0x20,0x9a0b6fff}, + {0x24,0x8200400c}, + {0x28,0x992b6008}, + {0x2c,0x8200400c}, + {0x30,0x8200400d}, + {0x34,0xc222a738}, + {0x38,0xa2046001}, + {0x3c,0xc2002514}, + {0x40,0x80a44001}, + {0x44,0x0abfffd5}, + {0x48,0x9402a004}, + {0x4c,0x81c7e008}, + {0x50,0x81e80000}, + {0x54,0x9de3bf98}, + {0x58,0xc2002548}, + {0x5c,0x80886100}, + {0x60,0xac102000}, + {0x64,0x128000cf}, + {0x68,0xa6102000}, + {0x6c,0xc20026e4}, + {0x70,0x80a06000}, + {0x74,0x02800004}, + {0x78,0xa2102001}, + {0x7c,0x82007fff}, + {0xf0,0x7d}, + {0x00,0xc22026e4}, + {0x04,0xc2002300}, + {0x08,0x80a44001}, + {0x0c,0x388000a9}, + {0x10,0xda002530}, + {0x14,0xae10200c}, + {0x18,0xa4102001}, + {0x1c,0xc2002308}, + {0x20,0x80a48001}, + {0x24,0x18800092}, + {0x28,0x9b2de002}, + {0x2c,0x03000050}, + {0x30,0xaa044001}, + {0x34,0xa8036004}, + {0x38,0xc2002514}, + {0x3c,0x80a06009}, + {0x40,0x1880009b}, + {0x44,0x03000019}, + {0x48,0x82106080}, + {0x4c,0xda050001}, + {0x50,0xc2002474}, + {0x54,0x80a34001}, + {0x58,0x0680007f}, + {0x5c,0x03000040}, + {0x60,0x90100012}, + {0x64,0x7ffff7b8}, + {0x68,0x92100011}, + {0x6c,0x80a22000}, + {0x70,0x02800079}, + {0x74,0x03000040}, + {0x78,0xc2002ff0}, + {0x7c,0x80a06000}, + {0xf0,0x7e}, + {0x00,0x2280000a}, + {0x04,0xc2002fe0}, + {0x08,0x90100012}, + {0x0c,0x9fc04000}, + {0x10,0x92100011}, + {0x14,0xc200259c}, + {0x18,0x80a06000}, + {0x1c,0x1280006e}, + {0x20,0x03000040}, + {0x24,0xc2002fe0}, + {0x28,0x80a06000}, + {0x2c,0x2280000b}, + {0x30,0xc2002ff4}, + {0x34,0x90100012}, + {0x38,0x92100011}, + {0x3c,0x9fc04000}, + {0x40,0xd4002470}, + {0x44,0xc200259c}, + {0x48,0x80a06000}, + {0x4c,0x12800062}, + {0x50,0x03000040}, + {0x54,0xc2002ff4}, + {0x58,0x80a06000}, + {0x5c,0x02800006}, + {0x60,0xa0102000}, + {0x64,0x90100012}, + {0x68,0x9fc04000}, + {0x6c,0x92100011}, + {0x70,0xe000259c}, + {0x74,0x90100012}, + {0x78,0x92100011}, + {0x7c,0x94100010}, + {0xf0,0x7f}, + {0x00,0x7ffff7e3}, + {0x04,0xd6002470}, + {0x08,0x80a22000}, + {0x0c,0x02800052}, + {0x10,0x03000040}, + {0x14,0xc2002fe0}, + {0x18,0x80a06000}, + {0x1c,0x02800007}, + {0x20,0x90100012}, + {0x24,0x92100011}, + {0x28,0x9fc04000}, + {0x2c,0x94102100}, + {0x30,0x10800004}, + {0x34,0x94100010}, + {0x38,0xc020259c}, + {0x3c,0x94100010}, + {0x40,0x90100012}, + {0x44,0x92100011}, + {0x48,0x7ffff7d1}, + {0x4c,0x96102100}, + {0x50,0x80a22000}, + {0x54,0x22800011}, + {0x58,0xc2002514}, + {0x5c,0xc200259c}, + {0x60,0x80a06000}, + {0x64,0x3280000d}, + {0x68,0xc2002514}, + {0x6c,0xc2002280}, + {0x70,0xd8002514}, + {0x74,0xc22026e4}, + {0x78,0x9b2ca010}, + {0x7c,0x832b2002}, + {0xf0,0x80}, + {0x00,0x9a034011}, + {0x04,0xda206710}, + {0x08,0x98032001}, + {0x0c,0xd8202514}, + {0x10,0x10800006}, + {0x14,0xac05a001}, + {0x18,0x9b286002}, + {0x1c,0xea236710}, + {0x20,0x82006001}, + {0x24,0xc2202514}, + {0x28,0xc2002514}, + {0x2c,0x80a0600a}, + {0x30,0x12800029}, + {0x34,0x03000040}, + {0x38,0x03000019}, + {0x3c,0x9e106080}, + {0x40,0xe6002710}, + {0x44,0x90102001}, + {0x48,0x932a2002}, + {0x4c,0xd4026710}, + {0x50,0x980aafff}, + {0x54,0x960cefff}, + {0x58,0x8203000c}, + {0x5c,0x9a02c00b}, + {0x60,0x8200400c}, + {0x64,0x9a03400b}, + {0x68,0x9932a010}, + {0x6c,0x980b2fff}, + {0x70,0x9734e010}, + {0x74,0x83286002}, + {0x78,0x8200400c}, + {0x7c,0x960aefff}, + {0xf0,0x81}, + {0x00,0x9b2b6002}, + {0x04,0x83286002}, + {0x08,0x9a03400b}, + {0x0c,0xd800400f}, + {0x10,0x9b2b6002}, + {0x14,0xc203400f}, + {0x18,0x80a30001}, + {0x1c,0x36800004}, + {0x20,0xd422670c}, + {0x24,0xe622670c}, + {0x28,0xa610000a}, + {0x2c,0x90022001}, + {0x30,0xda002514}, + {0x34,0x80a2000d}, + {0x38,0x2abfffe5}, + {0x3c,0x932a2002}, + {0x40,0x832b6002}, + {0x44,0xc0206710}, + {0x48,0x82037fff}, + {0x4c,0xc2202514}, + {0x50,0x03000040}, + {0x54,0xaa054001}, + {0x58,0xa404a001}, + {0x5c,0xc2002308}, + {0x60,0x80a48001}, + {0x64,0x08bfff75}, + {0x68,0xa8052004}, + {0x6c,0xa2046001}, + {0x70,0xc2002300}, + {0x74,0x80a44001}, + {0x78,0x08bfff68}, + {0x7c,0xae05e00c}, + {0xf0,0x82}, + {0x00,0x80a4e000}, + {0x04,0x2280000b}, + {0x08,0xda002530}, + {0x0c,0xda002514}, + {0x10,0x80a36009}, + {0x14,0x38800007}, + {0x18,0xda002530}, + {0x1c,0x832b6002}, + {0x20,0xe6206710}, + {0x24,0x82036001}, + {0x28,0xc2202514}, + {0x2c,0xda002530}, + {0x30,0x80a5800d}, + {0x34,0x14800006}, + {0x38,0x82100016}, + {0x3c,0xc2002514}, + {0x40,0x80a34001}, + {0x44,0x28800002}, + {0x48,0x8210000d}, + {0x4c,0x80a5a000}, + {0x50,0x02800004}, + {0x54,0xc2202530}, + {0x58,0x1080000a}, + {0x5c,0xc20021f8}, + {0x60,0x80a06000}, + {0x64,0x22800009}, + {0x68,0xc2002530}, + {0x6c,0xc20026f8}, + {0x70,0x80a06000}, + {0x74,0x22800004}, + {0x78,0xc0202530}, + {0x7c,0x82006001}, + {0xf0,0x83}, + {0x00,0xc22026f8}, + {0x04,0xc2002530}, + {0x08,0x80a06000}, + {0x0c,0x02800005}, + {0x10,0x01000000}, + {0x14,0xc2002548}, + {0x18,0x82106040}, + {0x1c,0xc2202548}, + {0x20,0x81c7e008}, + {0x24,0x81e80000}, + {0x28,0x82220009}, + {0x2c,0x9a58400a}, + {0x30,0x833b601f}, + {0x34,0x80a20009}, + {0x38,0x83306019}, + {0x3c,0x04800004}, + {0x40,0x90102000}, + {0x44,0x82034001}, + {0x48,0x91386007}, + {0x4c,0x81c3e008}, + {0x50,0x01000000}, + {0x54,0x9de3bf98}, + {0x58,0x7ffff7d4}, + {0x5c,0xa8102001}, + {0x60,0xc208217f}, + {0x64,0x80a07fff}, + {0x68,0x0280001c}, + {0x6c,0xa6102003}, + {0x70,0x23000019}, + {0x74,0xa12ce004}, + {0x78,0x82146088}, + {0x7c,0xa4146084}, + {0xf0,0x84}, + {0x00,0xd2040001}, + {0x04,0xd408228c}, + {0x08,0x7fffffe8}, + {0x0c,0xd0040012}, + {0x10,0x9a146080}, + {0x14,0xd024000d}, + {0x18,0xc2002308}, + {0x1c,0xa12ce002}, + {0x20,0xa0040001}, + {0x24,0xa12c2002}, + {0x28,0xa214607c}, + {0x2c,0xd004000d}, + {0x30,0xd2040011}, + {0x34,0x7fffffdd}, + {0x38,0xd408228d}, + {0x3c,0xd0240012}, + {0x40,0xc208217f}, + {0x44,0xa8052001}, + {0x48,0x82006001}, + {0x4c,0x80a50001}, + {0x50,0x08bfffe8}, + {0x54,0xa604e003}, + {0x58,0xa6102001}, + {0x5c,0xc2002308}, + {0x60,0x80a4c001}, + {0x64,0x1880001c}, + {0x68,0x23000019}, + {0x6c,0xa12ce002}, + {0x70,0x821460e0}, + {0x74,0xa41460b0}, + {0x78,0xd2040001}, + {0x7c,0xd408228e}, + {0xf0,0x85}, + {0x00,0x7fffffca}, + {0x04,0xd0040012}, + {0x08,0x9a146080}, + {0x0c,0xd024000d}, + {0x10,0xc2002300}, + {0x14,0xa0004001}, + {0x18,0xa0040001}, + {0x1c,0xa12c2002}, + {0x20,0xa0040013}, + {0x24,0xa12c2002}, + {0x28,0xa2146050}, + {0x2c,0xd004000d}, + {0x30,0xd2040011}, + {0x34,0x7fffffbd}, + {0x38,0xd408228f}, + {0x3c,0xd0240012}, + {0x40,0xa604e001}, + {0x44,0xc2002308}, + {0x48,0x80a4c001}, + {0x4c,0x08bfffe8}, + {0x50,0x23000019}, + {0x54,0x81c7e008}, + {0x58,0x81e80000}, + {0x5c,0x9de3bf88}, + {0x60,0xc2002fe4}, + {0x64,0x9fc04000}, + {0x68,0xd0002590}, + {0x6c,0xda002550}, + {0x70,0x832b6004}, + {0x74,0x8220400d}, + {0x78,0xe000259c}, + {0x7c,0x82040001}, + {0xf0,0x86}, + {0x00,0x83306004}, + {0x04,0xc2202550}, + {0x08,0x11000018}, + {0x0c,0xc2002fe4}, + {0x10,0x9fc04000}, + {0x14,0x90122200}, + {0x18,0xc208217c}, + {0x1c,0xda08217d}, + {0x20,0x9a5b4001}, + {0x24,0xc200259c}, + {0x28,0x8200400d}, + {0x2c,0xc220259c}, + {0x30,0xda00259c}, + {0x34,0xc2002550}, + {0x38,0x80a34001}, + {0x3c,0x28800011}, + {0x40,0xc2002548}, + {0x44,0xc200259c}, + {0x48,0x80a04010}, + {0x4c,0x0880000d}, + {0x50,0xc2002548}, + {0x54,0x80a42000}, + {0x58,0x0280000a}, + {0x5c,0x01000000}, + {0x60,0x82087f7f}, + {0x64,0xc2202548}, + {0x68,0xc2002658}, + {0x6c,0x80a06000}, + {0x70,0x26800006}, + {0x74,0xc0202658}, + {0x78,0x10800005}, + {0x7c,0xc208254e}, + {0xf0,0x87}, + {0x00,0x82106080}, + {0x04,0xc2202548}, + {0x08,0xc208254e}, + {0x0c,0x80a00001}, + {0x10,0x82602000}, + {0x14,0xa0087ffe}, + {0x18,0xd8002548}, + {0x1c,0x83332010}, + {0x20,0x80886001}, + {0x24,0x02800012}, + {0x28,0xa0042003}, + {0x2c,0x03000180}, + {0x30,0x820b0001}, + {0x34,0x1b000080}, + {0x38,0x80a0400d}, + {0x3c,0x22800061}, + {0x40,0xc02026d4}, + {0x44,0xc2002160}, + {0x48,0x80886040}, + {0x4c,0x0280002c}, + {0x50,0xa0102000}, + {0x54,0xc2002558}, + {0x58,0x80a06000}, + {0x5c,0x02800028}, + {0x60,0xa0102002}, + {0x64,0x10800026}, + {0x68,0xa0102000}, + {0x6c,0x033fc200}, + {0x70,0x82106030}, + {0x74,0xda004000}, + {0x78,0xc2002570}, + {0x7c,0x80a34001}, + {0xf0,0x88}, + {0x00,0x32800050}, + {0x04,0xc02026d4}, + {0x08,0xc2002200}, + {0x0c,0x80a06000}, + {0x10,0x3280004c}, + {0x14,0xc02026d4}, + {0x18,0xda002690}, + {0x1c,0x03000007}, + {0x20,0x808b4001}, + {0x24,0x32800047}, + {0x28,0xc02026d4}, + {0x2c,0xda002654}, + {0x30,0xc20021dc}, + {0x34,0x80a34001}, + {0x38,0x2a800008}, + {0x3c,0xc2002514}, + {0x40,0xc200254c}, + {0x44,0x8330600e}, + {0x48,0x80886001}, + {0x4c,0x1280000a}, + {0x50,0x808b2040}, + {0x54,0xc2002514}, + {0x58,0x80a06000}, + {0x5c,0x22800009}, + {0x60,0xc20c2314}, + {0x64,0x808b2080}, + {0x68,0x22800006}, + {0x6c,0xc20c2314}, + {0x70,0x808b2040}, + {0x74,0x32800033}, + {0x78,0xc02026d4}, + {0x7c,0xc20c2314}, + {0xf0,0x89}, + {0x00,0x80a06000}, + {0x04,0x2280002f}, + {0x08,0xc02026d4}, + {0x0c,0xc20026d4}, + {0x10,0x98006001}, + {0x14,0xc2002700}, + {0x18,0xda082169}, + {0x1c,0xd82026d4}, + {0x20,0x80a0400d}, + {0x24,0x0480000a}, + {0x28,0xc20c2314}, + {0x2c,0x820860ff}, + {0x30,0xda082168}, + {0x34,0x8258400d}, + {0x38,0x80a30001}, + {0x3c,0x06800021}, + {0x40,0x01000000}, + {0x44,0x10800007}, + {0x48,0xc02026d4}, + {0x4c,0x820860ff}, + {0x50,0x80a30001}, + {0x54,0x0680001b}, + {0x58,0x01000000}, + {0x5c,0xc02026d4}, + {0x60,0xc20c234c}, + {0x64,0xc227bfec}, + {0x68,0xc20c230c}, + {0x6c,0xc227bff0}, + {0x70,0xa0102000}, + {0x74,0xc208217c}, + {0x78,0x80a40001}, + {0x7c,0x1a800011}, + {0xf0,0x8a}, + {0x00,0x01000000}, + {0x04,0xc20c2380}, + {0x08,0xc227bfe8}, + {0x0c,0xa2102000}, + {0x10,0xc208217d}, + {0x14,0x80a44001}, + {0x18,0x3a800006}, + {0x1c,0xa0042001}, + {0x20,0x7ffff716}, + {0x24,0x9007bfe8}, + {0x28,0x10bffffa}, + {0x2c,0xa2046001}, + {0x30,0xc208217c}, + {0x34,0x80a40001}, + {0x38,0x2abffff4}, + {0x3c,0xc20c2380}, + {0x40,0x81c7e008}, + {0x44,0x81e80000}, + {0x48,0x9de3bf88}, + {0x4c,0xd8082246}, + {0x50,0x80a32000}, + {0x54,0x22800040}, + {0x58,0xc02026e0}, + {0x5c,0xda00254c}, + {0x60,0x83336018}, + {0x64,0x80886001}, + {0x68,0x12800007}, + {0x6c,0x03004000}, + {0x70,0xc20026e4}, + {0x74,0x80a06000}, + {0x78,0x22800008}, + {0x7c,0xc200255c}, + {0xf0,0x8b}, + {0x00,0x03004000}, + {0x04,0x822b4001}, + {0x08,0xc220254c}, + {0x0c,0xc027bfec}, + {0x10,0x1080000e}, + {0x14,0xc027bff0}, + {0x18,0x80a06000}, + {0x1c,0x3280002e}, + {0x20,0xc02026e0}, + {0x24,0xc20026e0}, + {0x28,0x82006001}, + {0x2c,0x80a0400c}, + {0x30,0x06800029}, + {0x34,0xc22026e0}, + {0x38,0xc2082244}, + {0x3c,0xc227bfec}, + {0x40,0xc2082245}, + {0x44,0xc227bff0}, + {0x48,0xe008217c}, + {0x4c,0xc20022fc}, + {0x50,0x80a40001}, + {0x54,0x1a80000c}, + {0x58,0xa2102001}, + {0x5c,0xc20c2380}, + {0x60,0xc227bfe8}, + {0x64,0xc20022f8}, + {0x68,0x80a44001}, + {0x6c,0x38bffff8}, + {0x70,0xa0042001}, + {0x74,0x7ffff6e1}, + {0x78,0x9007bfe8}, + {0x7c,0x10bffffa}, + {0xf0,0x8c}, + {0x00,0xa2046001}, + {0x04,0xa0102001}, + {0x08,0xc208217c}, + {0x0c,0x80a40001}, + {0x10,0x14800010}, + {0x14,0xa2102000}, + {0x18,0xc208217d}, + {0x1c,0xda00247c}, + {0x20,0x9a5b4001}, + {0x24,0xc20c237f}, + {0x28,0x8200400d}, + {0x2c,0xc227bfe8}, + {0x30,0xc2002304}, + {0x34,0x80a44001}, + {0x38,0x3abffff4}, + {0x3c,0xa0042001}, + {0x40,0x7ffff6ce}, + {0x44,0x9007bfe8}, + {0x48,0x10bffffa}, + {0x4c,0xa2046001}, + {0x50,0xc02026e0}, + {0x54,0x81c7e008}, + {0x58,0x81e80000}, + {0x5c,0xd2002208}, + {0x60,0x80a26000}, + {0x64,0x0280001a}, + {0x68,0x01000000}, + {0x6c,0xc2102548}, + {0x70,0x80886001}, + {0x74,0x12800016}, + {0x78,0x01000000}, + {0x7c,0xc2002514}, + {0xf0,0x8d}, + {0x00,0x80a06000}, + {0x04,0x12800007}, + {0x08,0xc2002558}, + {0x0c,0x80a06000}, + {0x10,0x0280000f}, + {0x14,0x9a007fff}, + {0x18,0x1080000d}, + {0x1c,0xda202558}, + {0x20,0x15200040}, + {0x24,0x1b3fc200}, + {0x28,0x9812a001}, + {0x2c,0x80a06000}, + {0x30,0x12800006}, + {0x34,0x96136070}, + {0x38,0xd8234000}, + {0x3c,0xc2002298}, + {0x40,0xc222c000}, + {0x44,0xd4234000}, + {0x48,0xd2202558}, + {0x4c,0x81c3e008}, + {0x50,0x01000000}, + {0x54,0x92102000}, + {0x58,0xc2002514}, + {0x5c,0x80a24001}, + {0x60,0x1a800019}, + {0x64,0x912a6002}, + {0x68,0xd4022710}, + {0x6c,0x820aafff}, + {0x70,0x9732a010}, + {0x74,0x98006001}, + {0x78,0x960aefff}, + {0x7c,0x82007fff}, + {0xf0,0x8e}, + {0x00,0x83286018}, + {0x04,0x992b2010}, + {0x08,0x9a02ffff}, + {0x0c,0x8200400c}, + {0x10,0x9b2b6008}, + {0x14,0x8200400d}, + {0x18,0x8200400b}, + {0x1c,0x9532a00c}, + {0x20,0x92026001}, + {0x24,0x808aa001}, + {0x28,0x12800003}, + {0x2c,0x82006001}, + {0x30,0xc2222738}, + {0x34,0xc2002514}, + {0x38,0x80a24001}, + {0x3c,0x0abfffeb}, + {0x40,0x912a6002}, + {0x44,0x81c3e008}, + {0x48,0x01000000}, + {0x4c,0x9de3bf98}, + {0x50,0x92102000}, + {0x54,0xc2002514}, + {0x58,0x80a24001}, + {0x5c,0x1a80005f}, + {0x60,0x94102000}, + {0x64,0xb72a6002}, + {0x68,0xf20ee738}, + {0x6c,0xc20ee739}, + {0x70,0x80a64001}, + {0x74,0x96102000}, + {0x78,0x9e102000}, + {0x7c,0x14800022}, + {0xf0,0x8f}, + {0x00,0x9a102000}, + {0x04,0x82064019}, + {0x08,0x82004019}, + {0x0c,0x3b000019}, + {0x10,0x90176080}, + {0x14,0xb9286002}, + {0x18,0xc20ee73b}, + {0x1c,0xf40ee73a}, + {0x20,0x80a68001}, + {0x24,0x14800012}, + {0x28,0x8207001a}, + {0x2c,0x83286002}, + {0x30,0x82004008}, + {0x34,0xd80aa73b}, + {0x38,0xf6004000}, + {0x3c,0xba5ec01a}, + {0x40,0x82006004}, + {0x44,0xb406a001}, + {0x48,0x80a6e000}, + {0x4c,0x04800005}, + {0x50,0xb05ec019}, + {0x54,0x9e03c018}, + {0x58,0x9a03401d}, + {0x5c,0x9602c01b}, + {0x60,0x80a6800c}, + {0x64,0x24bffff6}, + {0x68,0xf6004000}, + {0x6c,0xb72a6002}, + {0x70,0xb2066001}, + {0x74,0xc20ee739}, + {0x78,0x80a64001}, + {0x7c,0x04bfffe7}, + {0xf0,0x90}, + {0x00,0xb807200c}, + {0x04,0xbb2b6006}, + {0x08,0xb92be006}, + {0x0c,0xc202a710}, + {0x10,0x9b3f201f}, + {0x14,0x81836000}, + {0x18,0x01000000}, + {0x1c,0x01000000}, + {0x20,0x01000000}, + {0x24,0xb87f000b}, + {0x28,0x9b3f601f}, + {0x2c,0x81836000}, + {0x30,0x01000000}, + {0x34,0x01000000}, + {0x38,0x01000000}, + {0x3c,0xba7f400b}, + {0x40,0x8330600c}, + {0x44,0x80886001}, + {0x48,0x9e073fe0}, + {0x4c,0x02800007}, + {0x50,0x9a077fe0}, + {0x54,0xc200237c}, + {0x58,0x80a06000}, + {0x5c,0x22800003}, + {0x60,0x9e073fa0}, + {0x64,0x9a077fa0}, + {0x68,0x80a3e000}, + {0x6c,0x24800002}, + {0x70,0x9e102001}, + {0x74,0x80a36000}, + {0x78,0x24800002}, + {0x7c,0x9a102001}, + {0xf0,0x91}, + {0x00,0xc208217f}, + {0x04,0x83286006}, + {0x08,0x80a3c001}, + {0x0c,0x36800002}, + {0x10,0x9e007fff}, + {0x14,0xc208217e}, + {0x18,0x83286006}, + {0x1c,0x80a34001}, + {0x20,0x36800002}, + {0x24,0x9a007fff}, + {0x28,0xfa02a710}, + {0x2c,0x832be010}, + {0x30,0x3900003c}, + {0x34,0x8200400d}, + {0x38,0xba0f401c}, + {0x3c,0x8200401d}, + {0x40,0xc222a710}, + {0x44,0x92026001}, + {0x48,0xc2002514}, + {0x4c,0x80a24001}, + {0x50,0x0abfffa5}, + {0x54,0x9402a004}, + {0x58,0x7ffff4bd}, + {0x5c,0x91e8205a}, + {0x60,0x01000000}, + {0x64,0x9de3bf98}, + {0x68,0xd8002548}, + {0x6c,0x8333200c}, + {0x70,0x80886001}, + {0x74,0x12800081}, + {0x78,0x01000000}, + {0x7c,0xc208254d}, + {0xf0,0x92}, + {0x00,0x80a06000}, + {0x04,0x1280007d}, + {0x08,0x01000000}, + {0x0c,0xc208254e}, + {0x10,0x80a06000}, + {0x14,0x02800079}, + {0x18,0x01000000}, + {0x1c,0xc2002554}, + {0x20,0x825860fa}, + {0x24,0xda002500}, + {0x28,0x80a34001}, + {0x2c,0x0a800073}, + {0x30,0x01000000}, + {0x34,0xd6002658}, + {0x38,0x80a2e000}, + {0x3c,0x1480001c}, + {0x40,0x8202ffff}, + {0x44,0xc2002514}, + {0x48,0x80a06001}, + {0x4c,0x3280006b}, + {0x50,0xc0202658}, + {0x54,0xc2002710}, + {0x58,0x80a06000}, + {0x5c,0x12800004}, + {0x60,0x808b2040}, + {0x64,0x10800065}, + {0x68,0xc0202658}, + {0x6c,0x32800006}, + {0x70,0xd800239c}, + {0x74,0x80a2e000}, + {0x78,0x0680000d}, + {0x7c,0x8202e001}, + {0xf0,0x93}, + {0x00,0xd800239c}, + {0x04,0x0300003f}, + {0x08,0x9b332010}, + {0x0c,0x821063ff}, + {0x10,0x980b0001}, + {0x14,0x9a38000d}, + {0x18,0x9a23400c}, + {0x1c,0x80a2c00d}, + {0x20,0x06800005}, + {0x24,0x03296956}, + {0x28,0x8202ffff}, + {0x2c,0x10800053}, + {0x30,0xc2202658}, + {0x34,0x9a10625a}, + {0x38,0xc200250c}, + {0x3c,0x80a0400d}, + {0x40,0x02800004}, + {0x44,0xa0102000}, + {0x48,0xda20250c}, + {0x4c,0xc0202654}, + {0x50,0x832c2002}, + {0x54,0x92006610}, + {0x58,0xc2006610}, + {0x5c,0x90102710}, + {0x60,0x80a06000}, + {0x64,0x0280000d}, + {0x68,0xa0042001}, + {0x6c,0x7ffff4e6}, + {0x70,0x01000000}, + {0x74,0xc2002300}, + {0x78,0xda002308}, + {0x7c,0x82584001}, + {0xf0,0x94}, + {0x00,0x9a5b400d}, + {0x04,0x8200400d}, + {0x08,0x83286006}, + {0x0c,0x80a20001}, + {0x10,0x0a80003a}, + {0x14,0x01000000}, + {0x18,0x80a4200f}, + {0x1c,0x08bfffee}, + {0x20,0x832c2002}, + {0x24,0x030041eb}, + {0x28,0xc2202658}, + {0x2c,0xa010200f}, + {0x30,0x9b2c2002}, + {0x34,0xc203660c}, + {0x38,0xa0843fff}, + {0x3c,0x12bffffd}, + {0x40,0xc2236610}, + {0x44,0xda002654}, + {0x48,0xc2002710}, + {0x4c,0xc2202610}, + {0x50,0x80a3600f}, + {0x54,0x14800003}, + {0x58,0x9010200f}, + {0x5c,0x9010000d}, + {0x60,0x03000017}, + {0x64,0x9e106240}, + {0x68,0x82006400}, + {0x6c,0xa2106200}, + {0x70,0x0300003f}, + {0x74,0xa61063ff}, + {0x78,0x92022001}, + {0x7c,0xa0102000}, + {0xf0,0x95}, + {0x00,0xa410000f}, + {0x04,0x972c2002}, + {0x08,0x8203c00b}, + {0x0c,0xda106002}, + {0x10,0x9804400b}, + {0x14,0xd4132002}, + {0x18,0xc213c00b}, + {0x1c,0xd814400b}, + {0x20,0x82584008}, + {0x24,0x9a5b4008}, + {0x28,0x8200400c}, + {0x2c,0x9a03400a}, + {0x30,0x81800000}, + {0x34,0x01000000}, + {0x38,0x01000000}, + {0x3c,0x01000000}, + {0x40,0x82704009}, + {0x44,0x81800000}, + {0x48,0x01000000}, + {0x4c,0x01000000}, + {0x50,0x01000000}, + {0x54,0x9a734009}, + {0x58,0x83286010}, + {0x5c,0x9a0b4013}, + {0x60,0x8200400d}, + {0x64,0xa0042001}, + {0x68,0x80a4204f}, + {0x6c,0x08bfffe6}, + {0x70,0xc222c012}, + {0x74,0xd2202654}, + {0x78,0x81c7e008}, + {0x7c,0x81e80000}, + {0xf0,0x96}, + {0x00,0x9de3bf98}, + {0x04,0xa2102000}, + {0x08,0xc2002514}, + {0x0c,0x80a44001}, + {0x10,0xa0102000}, + {0x14,0x1a800012}, + {0x18,0x832c2002}, + {0x1c,0x92006710}, + {0x20,0xc2006710}, + {0x24,0x80a06000}, + {0x28,0x02800009}, + {0x2c,0x90100018}, + {0x30,0x7ffff495}, + {0x34,0x01000000}, + {0x38,0x82102001}, + {0x3c,0x80a20019}, + {0x40,0x1a800003}, + {0x44,0x83284010}, + {0x48,0xa2144001}, + {0x4c,0xa0042001}, + {0x50,0xc2002514}, + {0x54,0x10bffff0}, + {0x58,0x80a40001}, + {0x5c,0x81c7e008}, + {0x60,0x91e80011}, + {0x64,0x9de3bf90}, + {0x68,0x03003fc0}, + {0x6c,0x82106001}, + {0x70,0xc227bff0}, + {0x74,0xc027bff4}, + {0x78,0xa0102000}, + {0x7c,0x8207bff8}, + {0xf0,0x97}, + {0x00,0x82040001}, + {0x04,0xd2487ff9}, + {0x08,0xd0487ff8}, + {0x0c,0x90060008}, + {0x10,0x92064009}, + {0x14,0x94102000}, + {0x18,0x7ffff4dd}, + {0x1c,0x9610001a}, + {0x20,0x80a22000}, + {0x24,0x02800004}, + {0x28,0xa0042001}, + {0x2c,0x10800006}, + {0x30,0xb0102001}, + {0x34,0x80a42004}, + {0x38,0x04bffff2}, + {0x3c,0x8207bff8}, + {0x40,0xb0102000}, + {0x44,0x81c7e008}, + {0x48,0x81e80000}, + {0x4c,0x9de3bf98}, + {0x50,0xc2102548}, + {0x54,0x80886001}, + {0x58,0xb8102000}, + {0x5c,0xba102000}, + {0x60,0x02800004}, + {0x64,0xae102000}, + {0x68,0x10800026}, + {0x6c,0xec002354}, + {0x70,0xc200254c}, + {0x74,0x80886200}, + {0x78,0x32800010}, + {0x7c,0xc2002690}, + {0xf0,0x98}, + {0x00,0x03296956}, + {0x04,0xda00250c}, + {0x08,0x8210625a}, + {0x0c,0x80a34001}, + {0x10,0x12800006}, + {0x14,0xc20023c8}, + {0x18,0x80886800}, + {0x1c,0x32800007}, + {0x20,0xc2002690}, + {0x24,0xc20023c8}, + {0x28,0x80886400}, + {0x2c,0x22800015}, + {0x30,0xec0022ac}, + {0x34,0xc2002690}, + {0x38,0x80886200}, + {0x3c,0x1280000a}, + {0x40,0xb8102001}, + {0x44,0x13000017}, + {0x48,0xc2002fd0}, + {0x4c,0x92126240}, + {0x50,0x9fc04000}, + {0x54,0xd0002590}, + {0x58,0xc2002690}, + {0x5c,0x82106200}, + {0x60,0xc2202690}, + {0x64,0x10800007}, + {0x68,0xec0023a0}, + {0x6c,0xc200254c}, + {0x70,0x1b000080}, + {0x74,0x8210400d}, + {0x78,0x10800080}, + {0x7c,0xc220254c}, + {0xf0,0x99}, + {0x00,0x7ffff3d3}, + {0x04,0x901020aa}, + {0x08,0xda002500}, + {0x0c,0xc20022d0}, + {0x10,0x80a34001}, + {0x14,0x3880000b}, + {0x18,0xba102001}, + {0x1c,0xc2002200}, + {0x20,0x80a00001}, + {0x24,0x9a402000}, + {0x28,0x80a00016}, + {0x2c,0x82603fff}, + {0x30,0x80934001}, + {0x34,0x02800004}, + {0x38,0xaa102000}, + {0x3c,0xba102001}, + {0x40,0xaa102000}, + {0x44,0xa52d6003}, + {0x48,0xc204a760}, + {0x4c,0x80a06000}, + {0x50,0x22800067}, + {0x54,0xaa056001}, + {0x58,0x80a56000}, + {0x5c,0x12800008}, + {0x60,0x80a76000}, + {0x64,0xc200255c}, + {0x68,0x80a06000}, + {0x6c,0x1280000c}, + {0x70,0x29200000}, + {0x74,0x1080000a}, + {0x78,0xa8102000}, + {0x7c,0x02800005}, + {0xf0,0x9a}, + {0x00,0x9004a760}, + {0x04,0xc024a764}, + {0x08,0x10800058}, + {0x0c,0xc024a760}, + {0x10,0x7fffff7c}, + {0x14,0x92100016}, + {0x18,0xa8100008}, + {0x1c,0x80a52000}, + {0x20,0x02800050}, + {0x24,0xae15c014}, + {0x28,0xc214a766}, + {0x2c,0x80a06000}, + {0x30,0x0280000a}, + {0x34,0x80a56000}, + {0x38,0xc204a764}, + {0x3c,0x82007fff}, + {0x40,0xc224a764}, + {0x44,0xc214a766}, + {0x48,0x80a06000}, + {0x4c,0x32800048}, + {0x50,0xaa056001}, + {0x54,0x80a56000}, + {0x58,0x12800006}, + {0x5c,0x1b004000}, + {0x60,0xc200254c}, + {0x64,0x8210400d}, + {0x68,0x10800040}, + {0x6c,0xc220254c}, + {0x70,0xc2102548}, + {0x74,0x80886001}, + {0x78,0x02800006}, + {0x7c,0x82103fff}, + {0xf0,0x9b}, + {0x00,0xc024a764}, + {0x04,0xc024a760}, + {0x08,0x10800038}, + {0x0c,0xc2202700}, + {0x10,0x80a72000}, + {0x14,0x02bfffb6}, + {0x18,0xa6102000}, + {0x1c,0xc2002514}, + {0x20,0x80a4c001}, + {0x24,0x1a80002c}, + {0x28,0x83350013}, + {0x2c,0x80886001}, + {0x30,0x02800027}, + {0x34,0x9b2ce002}, + {0x38,0xe0036710}, + {0x3c,0xa3342016}, + {0x40,0xa00c2fff}, + {0x44,0xa13c2006}, + {0x48,0xa20c603f}, + {0x4c,0xa0042001}, + {0x50,0xa2046001}, + {0x54,0x92100011}, + {0x58,0xd410246e}, + {0x5c,0x7fffff62}, + {0x60,0x90100010}, + {0x64,0x80a22000}, + {0x68,0x92100011}, + {0x6c,0x1280000f}, + {0x70,0x90100010}, + {0x74,0xc210246c}, + {0x78,0x94906000}, + {0x7c,0x2280000f}, + {0xf0,0x9c}, + {0x00,0xc200254c}, + {0x04,0xc2002548}, + {0x08,0x80886080}, + {0x0c,0x2280000b}, + {0x10,0xc200254c}, + {0x14,0x7fffff54}, + {0x18,0x01000000}, + {0x1c,0x80a22000}, + {0x20,0x22800006}, + {0x24,0xc200254c}, + {0x28,0x82102001}, + {0x2c,0x83284013}, + {0x30,0x10800007}, + {0x34,0xa82d0001}, + {0x38,0x1b000080}, + {0x3c,0x8210400d}, + {0x40,0xc220254c}, + {0x44,0x10800004}, + {0x48,0xc02026e8}, + {0x4c,0x10bfffd4}, + {0x50,0xa604e001}, + {0x54,0x80a52000}, + {0x58,0x32800005}, + {0x5c,0xaa056001}, + {0x60,0xc024a764}, + {0x64,0xc024a760}, + {0x68,0xaa056001}, + {0x6c,0x80a56013}, + {0x70,0x04bfff96}, + {0x74,0xa52d6003}, + {0x78,0x80a5e000}, + {0x7c,0x22800002}, + {0xf0,0x9d}, + {0x00,0xc02026e8}, + {0x04,0xc200255c}, + {0x08,0x80a06000}, + {0x0c,0x0280000a}, + {0x10,0x80a76000}, + {0x14,0xc2002760}, + {0x18,0x80a06000}, + {0x1c,0x12800006}, + {0x20,0x80a76000}, + {0x24,0x03000004}, + {0x28,0xc2202760}, + {0x2c,0xc2002248}, + {0x30,0xc2202764}, + {0x34,0x1280002b}, + {0x38,0xaa102000}, + {0x3c,0xc2002514}, + {0x40,0x80a54001}, + {0x44,0x1a800027}, + {0x48,0x96102001}, + {0x4c,0x992d6002}, + {0x50,0xc2032710}, + {0x54,0x8330600c}, + {0x58,0x80886001}, + {0x5c,0x3280001d}, + {0x60,0xaa056001}, + {0x64,0x832ac015}, + {0x68,0x808dc001}, + {0x6c,0x32800019}, + {0x70,0xaa056001}, + {0x74,0xa6102001}, + {0x78,0x9b2ce003}, + {0x7c,0xc2036760}, + {0xf0,0x9e}, + {0x00,0x80a06000}, + {0x04,0x1280000f}, + {0x08,0xa604e001}, + {0x0c,0xc2032710}, + {0x10,0xc2236760}, + {0x14,0xc2102548}, + {0x18,0x80886001}, + {0x1c,0x02800004}, + {0x20,0x80a72000}, + {0x24,0x10800005}, + {0x28,0xc2002358}, + {0x2c,0x22800003}, + {0x30,0xc2002378}, + {0x34,0xc200239c}, + {0x38,0x10800005}, + {0x3c,0xc2236764}, + {0x40,0x80a4e013}, + {0x44,0x04bfffee}, + {0x48,0x9b2ce003}, + {0x4c,0xaa056001}, + {0x50,0xc2002514}, + {0x54,0x80a54001}, + {0x58,0x0abfffde}, + {0x5c,0x992d6002}, + {0x60,0x81c7e008}, + {0x64,0x81e80000}, + {0x68,0x9de3bf98}, + {0x6c,0x7ffff46f}, + {0x70,0x01000000}, + {0x74,0xda002548}, + {0x78,0x83336010}, + {0x7c,0x80886001}, + {0xf0,0x9f}, + {0x00,0x12800032}, + {0x04,0x8333600c}, + {0x08,0x80886001}, + {0x0c,0x1280002f}, + {0x10,0x01000000}, + {0x14,0xc2002538}, + {0x18,0x80a06000}, + {0x1c,0x2280000b}, + {0x20,0xc208254d}, + {0x24,0x82007fff}, + {0x28,0x80a06000}, + {0x2c,0x12800006}, + {0x30,0xc2202538}, + {0x34,0xc200254c}, + {0x38,0x1b002000}, + {0x3c,0x8210400d}, + {0x40,0xc220254c}, + {0x44,0xc208254d}, + {0x48,0x80a06000}, + {0x4c,0x0280001f}, + {0x50,0x033fc180}, + {0x54,0xc0204000}, + {0x58,0xa0102002}, + {0x5c,0x7ffff4a9}, + {0x60,0x90102001}, + {0x64,0x11000099}, + {0x68,0x7fffef6b}, + {0x6c,0x9012233c}, + {0x70,0xa0843fff}, + {0x74,0x1cbffffa}, + {0x78,0x01000000}, + {0x7c,0x7ffff4a1}, + {0xf0,0xa0}, + {0x00,0x90102000}, + {0x04,0xda00254c}, + {0x08,0x83336010}, + {0x0c,0x80886001}, + {0x10,0x32800002}, + {0x14,0xc020250c}, + {0x18,0x83336017}, + {0x1c,0x80886001}, + {0x20,0x32800005}, + {0x24,0xc2002538}, + {0x28,0xc2002188}, + {0x2c,0xc2202538}, + {0x30,0xc2002538}, + {0x34,0xc220265c}, + {0x38,0x7ffff190}, + {0x3c,0x90102015}, + {0x40,0x82102001}, + {0x44,0xc2202584}, + {0x48,0x81c7e008}, + {0x4c,0x81e80000}, + {0x50,0xc2002588}, + {0x54,0x80a06000}, + {0x58,0x32800006}, + {0x5c,0xc200258c}, + {0x60,0xc2002554}, + {0x64,0xc2202588}, + {0x68,0xc0202594}, + {0x6c,0xc200258c}, + {0x70,0x80a06000}, + {0x74,0x32800006}, + {0x78,0xc2102548}, + {0x7c,0xc2002554}, + {0xf0,0xa1}, + {0x00,0xc220258c}, + {0x04,0xc0202598}, + {0x08,0xc2102548}, + {0x0c,0x80886001}, + {0x10,0x02800007}, + {0x14,0x01000000}, + {0x18,0xc2002558}, + {0x1c,0x80a06001}, + {0x20,0x18800003}, + {0x24,0x82102001}, + {0x28,0xc2202584}, + {0x2c,0x81c3e008}, + {0x30,0x01000000}, + {0x34,0xc2002548}, + {0x38,0x8330600e}, + {0x3c,0x80886001}, + {0x40,0x12800048}, + {0x44,0x98102000}, + {0x48,0xc2002514}, + {0x4c,0x80a30001}, + {0x50,0x1a80000b}, + {0x54,0x033fc180}, + {0x58,0x96106004}, + {0x5c,0x832b2002}, + {0x60,0xda006710}, + {0x64,0xda20400b}, + {0x68,0x98032001}, + {0x6c,0xc2002514}, + {0x70,0x80a30001}, + {0x74,0x0abffffb}, + {0x78,0x832b2002}, + {0x7c,0xda00254c}, + {0xf0,0xa2}, + {0x00,0x808b6001}, + {0x04,0x32800008}, + {0x08,0xc208254e}, + {0x0c,0xc2002514}, + {0x10,0x9a136001}, + {0x14,0x82106100}, + {0x18,0xda20254c}, + {0x1c,0xc2202514}, + {0x20,0xc208254e}, + {0x24,0x80a06000}, + {0x28,0x3280000b}, + {0x2c,0xc2082517}, + {0x30,0xc20023c8}, + {0x34,0x83306016}, + {0x38,0x80886001}, + {0x3c,0x22800006}, + {0x40,0xc2082517}, + {0x44,0xc2002514}, + {0x48,0x82106200}, + {0x4c,0xc2202514}, + {0x50,0xc2082517}, + {0x54,0x80a06000}, + {0x58,0x2280001d}, + {0x5c,0xd8082517}, + {0x60,0xc2002548}, + {0x64,0x80886800}, + {0x68,0x22800006}, + {0x6c,0xd80023c8}, + {0x70,0xc2002514}, + {0x74,0x82106400}, + {0x78,0xc2202514}, + {0x7c,0xd80023c8}, + {0xf0,0xa3}, + {0x00,0x80a32000}, + {0x04,0x16800007}, + {0x08,0x8333200c}, + {0x0c,0xc2002514}, + {0x10,0x1b000004}, + {0x14,0x8210400d}, + {0x18,0xc2202514}, + {0x1c,0x8333200c}, + {0x20,0x80886001}, + {0x24,0x2280000a}, + {0x28,0xd8082517}, + {0x2c,0xc2002540}, + {0x30,0x1b164020}, + {0x34,0x83286010}, + {0x38,0x8200400d}, + {0x3c,0xda002514}, + {0x40,0x9a134001}, + {0x44,0xda202514}, + {0x48,0xd8082517}, + {0x4c,0xda002514}, + {0x50,0x033fc180}, + {0x54,0xda204000}, + {0x58,0xd8202568}, + {0x5c,0xc0202540}, + {0x60,0x81c3e008}, + {0x64,0x01000000}, + {0x68,0x9de3bf98}, + {0x6c,0xd8002548}, + {0x70,0x8333200e}, + {0x74,0x80886001}, + {0x78,0x22800006}, + {0x7c,0xc2102516}, + {0xf0,0xa4}, + {0x00,0x03000010}, + {0x04,0x822b0001}, + {0x08,0x1080001e}, + {0x0c,0xc2202548}, + {0x10,0x80a06000}, + {0x14,0x02800006}, + {0x18,0x9b332003}, + {0x1c,0x808b2004}, + {0x20,0x2280000a}, + {0x24,0xc200231c}, + {0x28,0x9b332003}, + {0x2c,0x83332002}, + {0x30,0x82086001}, + {0x34,0x9a0b6001}, + {0x38,0x80a0400d}, + {0x3c,0x2280000a}, + {0x40,0xc2002560}, + {0x44,0xc200231c}, + {0x48,0x80a06000}, + {0x4c,0x22800003}, + {0x50,0xc2082360}, + {0x54,0x82102005}, + {0x58,0xc2202560}, + {0x5c,0x10800007}, + {0x60,0x90102001}, + {0x64,0x80a06000}, + {0x68,0x02800004}, + {0x6c,0x90102000}, + {0x70,0x10bffffa}, + {0x74,0x82007fff}, + {0x78,0x7ffff402}, + {0x7c,0x01000000}, + {0xf0,0xa5}, + {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,0xa6}, + {0x00,0x00001688}, + {0x04,0xa5010503}, + {0x08,0xa5000000}, + {0x0c,0x00000000}, + {0x10,0x4c494348}, + {0x14,0x49444449}, + {0x18,0x88ecbdae}, + {0x1c,0x39cf8648}, + {0x20,0xa98080cd}, + {0x24,0xc96fbe71}, + {0x28,0x9243c641}, + {0x2c,0xc654cc4d}, + {0x30,0x80cb80d1}, + {0x34,0xc471cce5}, + {0x38,0xa898c9e5}, + {0x3c,0xc400bc0d}, + {0x40,0xbc43c643}, + {0x44,0xbd130000}, + {0x48,0x00000000}, + {0x4c,0x00000000}, + {0x50,0x00000000}, + {0x54,0x00000000}, + {0x58,0x00000000}, + {0x5c,0x00000000}, + {0x60,0x00000000}, + {0x64,0x00000000}, + {0x68,0x41756720}, + {0x6c,0x31322032}, + {0x70,0x30313500}, + {0x74,0x00000000}, + {0x78,0x31383a31}, + {0x7c,0x393a3338}, + + + +}; + + + +#endif diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index 139c4e37735a..edaffc83626d 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c @@ -89,6 +89,8 @@ static int max_devices; /* TODO: Replace these with struct ida */ static DECLARE_BITMAP(dev_use, MAX_DEVICES); +#if 0 +/* move to drivers/mmc/card/queue.h*/ /* * There is one mmc_blk_data per slot. */ @@ -122,6 +124,7 @@ struct mmc_blk_data { struct device_attribute power_ro_lock; int area_type; }; +#endif static DEFINE_MUTEX(open_lock); @@ -134,7 +137,7 @@ enum { module_param(perdev_minors, int, 0444); MODULE_PARM_DESC(perdev_minors, "Minors numbers to allocate per device"); -static inline int mmc_blk_part_switch(struct mmc_card *card, +int mmc_blk_part_switch(struct mmc_card *card, struct mmc_blk_data *md); static int get_card_status(struct mmc_card *card, u32 *status, int retries); @@ -151,7 +154,7 @@ static inline void mmc_blk_clear_packed(struct mmc_queue_req *mqrq) packed->blocks = 0; } -static struct mmc_blk_data *mmc_blk_get(struct gendisk *disk) +struct mmc_blk_data *mmc_blk_get(struct gendisk *disk) { struct mmc_blk_data *md; @@ -172,7 +175,7 @@ static inline int mmc_get_devidx(struct gendisk *disk) return devidx; } -static void mmc_blk_put(struct mmc_blk_data *md) +void mmc_blk_put(struct mmc_blk_data *md) { mutex_lock(&open_lock); md->usage--; @@ -641,7 +644,7 @@ static int mmc_blk_ioctl_copy_to_user(struct mmc_ioc_cmd __user *ic_ptr, return 0; } -static int ioctl_rpmb_card_status_poll(struct mmc_card *card, u32 *status, +int ioctl_rpmb_card_status_poll(struct mmc_card *card, u32 *status, u32 retries_max) { int err; @@ -979,7 +982,7 @@ static const struct block_device_operations mmc_bdops = { #endif }; -static inline int mmc_blk_part_switch(struct mmc_card *card, +int mmc_blk_part_switch(struct mmc_card *card, struct mmc_blk_data *md) { int ret; @@ -1340,7 +1343,7 @@ static int mmc_blk_cmd_recovery(struct mmc_card *card, struct request *req, return ERR_CONTINUE; } -static int mmc_blk_reset(struct mmc_blk_data *md, struct mmc_host *host, +int mmc_blk_reset(struct mmc_blk_data *md, struct mmc_host *host, int type) { int err; @@ -1369,7 +1372,7 @@ static int mmc_blk_reset(struct mmc_blk_data *md, struct mmc_host *host, return err; } -static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type) +void mmc_blk_reset_success(struct mmc_blk_data *md, int type) { md->reset_done &= ~type; } @@ -2886,7 +2889,10 @@ static int mmc_blk_probe(struct mmc_card *card) if (mmc_add_disk(part_md)) goto out; } - + #ifdef CONFIG_ARM64 + if (card->host->restrict_caps & RESTRICT_CARD_TYPE_EMMC) + mmc_blk_emmc_add(card, sizeof(struct mmc_blk_data)); + #endif pm_runtime_set_autosuspend_delay(&card->dev, 3000); pm_runtime_use_autosuspend(&card->dev); @@ -2915,6 +2921,10 @@ static void mmc_blk_remove(struct mmc_card *card) if (card->host->restrict_caps & RESTRICT_CARD_TYPE_EMMC) this_card = NULL; #endif + #ifdef CONFIG_ARM64 + if (card->host->restrict_caps & RESTRICT_CARD_TYPE_EMMC) + mmc_blk_emmc_remove(card); + #endif mmc_blk_remove_parts(card, md); pm_runtime_get_sync(&card->dev); @@ -2944,6 +2954,10 @@ static int _mmc_blk_suspend(struct mmc_card *card) static void mmc_blk_shutdown(struct mmc_card *card) { + #ifdef CONFIG_ARM64 + if (card->host->restrict_caps & RESTRICT_CARD_TYPE_EMMC) + mmc_blk_emmc_remove(card); + #endif _mmc_blk_suspend(card); } diff --git a/drivers/mmc/card/queue.h b/drivers/mmc/card/queue.h index 1dc4c99f52a1..bd0274e814c3 100644 --- a/drivers/mmc/card/queue.h +++ b/drivers/mmc/card/queue.h @@ -68,6 +68,42 @@ struct mmc_queue { #endif }; +/* + * There is one mmc_blk_data per slot. + */ +struct mmc_blk_data { + spinlock_t lock; + struct gendisk *disk; + struct mmc_queue queue; + struct list_head part; + + unsigned int flags; +#define MMC_BLK_CMD23 (1 << 0) /* Can do SET_BLOCK_COUNT for multiblock */ +#define MMC_BLK_REL_WR (1 << 1) /* MMC Reliable write support */ +#define MMC_BLK_PACKED_CMD (1 << 2) /* MMC packed command support */ + + unsigned int usage; + unsigned int read_only; + unsigned int part_type; + unsigned int name_idx; + unsigned int reset_done; +#define MMC_BLK_READ BIT(0) +#define MMC_BLK_WRITE BIT(1) +#define MMC_BLK_DISCARD BIT(2) +#define MMC_BLK_SECDISCARD BIT(3) +#define MMC_BLK_RPMB BIT(4) + + /* + * Only set in main mmc_blk_data associated + * with mmc_card with mmc_set_drvdata, and keeps + * track of the current selected device partition. + */ + unsigned int part_curr; + struct device_attribute force_ro; + struct device_attribute power_ro_lock; + int area_type; +}; + extern int mmc_init_queue(struct mmc_queue *, struct mmc_card *, spinlock_t *, const char *); extern void mmc_cleanup_queue(struct mmc_queue *); @@ -83,5 +119,7 @@ extern int mmc_packed_init(struct mmc_queue *, struct mmc_card *); extern void mmc_packed_clean(struct mmc_queue *); extern int mmc_access_rpmb(struct mmc_queue *); +void mmc_blk_emmc_remove(struct mmc_card *card); +void mmc_blk_emmc_add(struct mmc_card *card, size_t data_size); #endif diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c index 19e8c569d2c0..0109c48f1533 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c @@ -1049,7 +1049,7 @@ void rk_get_eth_addr_vendor(void *priv, unsigned char *addr) dev_err(dev, "%s: rk_vendor_write eth mac address failed (%d)", __func__, ret); } else { - dev_err(dev, "%s: rk_vendor_read eth mac address: %02x:%02x:%02x:%02x:%02x:%02x", + dev_dbg(dev, "%s: rk_vendor_read eth mac address: %02x:%02x:%02x:%02x:%02x:%02x", __func__, addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); } diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 42cc72e54c05..c7fb89688169 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c @@ -51,6 +51,8 @@ static void option_release(struct usb_serial *serial); static void option_instat_callback(struct urb *urb); /* Vendor and product IDs */ +#define SIGNAL_VENDOR_ID 0x05c6 +#define SIGNAL_PRODUCT_ID 0x9025 #define OPTION_VENDOR_ID 0x0AF0 #define OPTION_PRODUCT_COLT 0x5000 #define OPTION_PRODUCT_RICOLA 0x6000 @@ -662,6 +664,7 @@ static const struct option_blacklist_info cinterion_rmnet2_blacklist = { }; static const struct usb_device_id option_ids[] = { + { USB_DEVICE(SIGNAL_VENDOR_ID, SIGNAL_PRODUCT_ID) }, { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) }, { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) }, diff --git a/firmware/rockchip/dptx.bin b/firmware/rockchip/dptx.bin new file mode 100755 index 000000000000..042ec48d748a Binary files /dev/null and b/firmware/rockchip/dptx.bin differ diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c index 5f37d75e5f7f..ed29619df53f 100644 --- a/sound/soc/codecs/rt5640.c +++ b/sound/soc/codecs/rt5640.c @@ -9,7 +9,6 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ - #include #include #include @@ -30,15 +29,21 @@ #include #include #include - +#include #include "rl6231.h" #include "rt5640.h" - +#include +#include +#include +#include + +#define RT5640_ADC_EMPTY_ADVALUE 950 +#define RT5640_ADC_DRIFT_ADVALUE 70 +#define RT5640_ADC_INVALID_ADVALUE -1 +#define RT5640_ADC_SAMPLE_JIFFIES (100 / (MSEC_PER_SEC / HZ)) /* 100ms */ #define RT5640_DEVICE_ID 0x6231 - #define RT5640_PR_RANGE_BASE (0xff + 1) #define RT5640_PR_SPACING 0x100 - #define RT5640_PR_BASE (RT5640_PR_RANGE_BASE + (0 * RT5640_PR_SPACING)) static const struct regmap_range_cfg rt5640_ranges[] = { @@ -166,6 +171,17 @@ static const struct reg_default rt5640_reg[] = { { 0xff, 0x6231 }, }; +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 (enable) + gpio_set_value(rt5640->hp_con_gpio, + rt5640->hp_con_gpio_active_high ? 1 : 0); + else + gpio_set_value(rt5640->hp_con_gpio, + rt5640->hp_con_gpio_active_high ? 0 : 1); +} + static int rt5640_reset(struct snd_soc_codec *codec) { return snd_soc_write(codec, RT5640_RESET, 0); @@ -981,9 +997,9 @@ static int rt5640_hp_event(struct snd_soc_dapm_widget *w, case SND_SOC_DAPM_PRE_PMD: rt5640->hp_mute = 1; + rt5640_hp_gpio_ctrl(rt5640, false); usleep_range(70000, 75000); break; - default: return 0; } @@ -1044,11 +1060,12 @@ static int rt5640_hp_post_event(struct snd_soc_dapm_widget *w, switch (event) { case SND_SOC_DAPM_POST_PMU: - if (!rt5640->hp_mute) - usleep_range(80000, 85000); + if (!rt5640->hp_mute && rt5640->hp_insert) { + usleep_range(120000, 125000); + rt5640_hp_gpio_ctrl(rt5640, true); + } break; - default: return 0; } @@ -2057,8 +2074,79 @@ int rt5640_dmic_enable(struct snd_soc_codec *codec, return 0; } + EXPORT_SYMBOL_GPL(rt5640_dmic_enable); +static int rt5640_hp_jack_change(struct notifier_block *nb, + unsigned long flags, void *data) +{ + return NOTIFY_OK; +} + +static struct notifier_block rt5640_hp_jack_nb = { + .notifier_call = rt5640_hp_jack_change, +}; + +static void rt5640_jack_init(struct rt5640_priv *rt5640) +{ + snd_soc_card_jack_new(rt5640->codec->component.card, + "Headphone Jack", SND_JACK_HEADPHONE, + &rt5640->hp_jack, NULL, 0); + snd_soc_jack_notifier_register(&rt5640->hp_jack, &rt5640_hp_jack_nb); +} + +static int rt5640_hp_adc_iio_read(struct rt5640_priv *rt5640) +{ + struct iio_channel *channel = rt5640->chan; + int val, ret; + + if (!channel) + return RT5640_ADC_INVALID_ADVALUE; + ret = iio_read_channel_raw(channel, &val); + if (ret < 0) { + dev_err(rt5640->codec->dev, + "read hp_det channel() error: %d\n", ret); + return ret; + } + return val; +} + +static void rt5640_hp_adc_poll(struct work_struct *work) +{ + struct rt5640_priv *rt5640; + 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{ + if (rt5640->hp_insert) { + dev_dbg(rt5640->codec->dev, + "headphone not insert,adc=%d\n", result); + rt5640->hp_insert = false; + rt5640_hp_gpio_ctrl(rt5640, false); + snd_soc_jack_report(&rt5640->hp_jack, 0, + SND_JACK_HEADPHONE); + } + } + } + + schedule_delayed_work(&rt5640->adc_poll_work, + RT5640_ADC_SAMPLE_JIFFIES); +} + static int rt5640_probe(struct snd_soc_codec *codec) { struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec); @@ -2108,6 +2196,16 @@ static int rt5640_probe(struct snd_soc_codec *codec) rt5640_dmic_enable(codec, rt5640->pdata.dmic1_data_pin, rt5640->pdata.dmic2_data_pin); + rt5640->hp_mute = 1; + rt5640->hp_insert = false; + /* adc polling work */ + if (rt5640->chan) { + rt5640_jack_init(rt5640); + INIT_DELAYED_WORK(&rt5640->adc_poll_work, rt5640_hp_adc_poll); + schedule_delayed_work(&rt5640->adc_poll_work, + 1000); + } + return 0; } @@ -2260,11 +2358,46 @@ static const struct acpi_device_id rt5640_acpi_match[] = { { "10EC5642", 0 }, { }, }; + MODULE_DEVICE_TABLE(acpi, rt5640_acpi_match); #endif -static int rt5640_parse_dt(struct rt5640_priv *rt5640, struct device_node *np) +static int rt5640_parse_dt(struct rt5640_priv *rt5640, struct device *dev) { + struct device_node *np = dev->of_node; + struct iio_channel *chan; + u32 adc_value; + enum of_gpio_flags 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{ + if (!of_property_read_u32(np, "hp-det-adc-value", &adc_value)) { + rt5640->hp_det_adc_value = adc_value; + } else{ + chan = NULL; + dev_err(dev, "rt5640 have no hp_det_adc_value defined\n"); + } + } + rt5640->chan = chan; + + gpio = of_get_named_gpio_flags(np, "hp-con-gpio", 0, &flags); + if (gpio < 0) { + dev_err(dev, "Can not read property hp-con-gpio\n"); + } else { + rt5640->hp_con_gpio_active_high = + (flags & OF_GPIO_ACTIVE_LOW) ? false : true; + ret = devm_gpio_request(dev, gpio, "hp-con-gpio"); + if (ret < 0) + dev_err(dev, "hp-con-gpio request ERROR\n"); + else + gpio_direction_output(gpio, rt5640->hp_con_gpio_active_high ? 0 : 1); + } + rt5640->hp_con_gpio = gpio; + rt5640->pdata.in1_diff = of_property_read_bool(np, "realtek,in1-differential"); rt5640->pdata.in2_diff = of_property_read_bool(np, @@ -2311,7 +2444,7 @@ static int rt5640_i2c_probe(struct i2c_client *i2c, if (!rt5640->pdata.ldo1_en) rt5640->pdata.ldo1_en = -EINVAL; } else if (i2c->dev.of_node) { - ret = rt5640_parse_dt(rt5640, i2c->dev.of_node); + ret = rt5640_parse_dt(rt5640, &(i2c->dev)); if (ret) return ret; } else @@ -2366,8 +2499,6 @@ static int rt5640_i2c_probe(struct i2c_client *i2c, regmap_update_bits(rt5640->regmap, RT5640_IN1_IN2, RT5640_IN_DF2, RT5640_IN_DF2); - rt5640->hp_mute = 1; - return snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5640, rt5640_dai, ARRAY_SIZE(rt5640_dai)); } @@ -2379,6 +2510,14 @@ static int rt5640_i2c_remove(struct i2c_client *i2c) return 0; } +static void rt5640_i2c_shutdown(struct i2c_client *i2c) +{ + struct rt5640_priv *rt5640; + + rt5640 = (struct rt5640_priv *)i2c_get_clientdata(i2c); + rt5640_hp_gpio_ctrl(rt5640, false); +} + static struct i2c_driver rt5640_i2c_driver = { .driver = { .name = "rt5640", @@ -2387,6 +2526,7 @@ static struct i2c_driver rt5640_i2c_driver = { }, .probe = rt5640_i2c_probe, .remove = rt5640_i2c_remove, + .shutdown = rt5640_i2c_shutdown, .id_table = rt5640_i2c_id, }; module_i2c_driver(rt5640_i2c_driver); diff --git a/sound/soc/codecs/rt5640.h b/sound/soc/codecs/rt5640.h index a5d01e69edd2..e7ab4093b61f 100644 --- a/sound/soc/codecs/rt5640.h +++ b/sound/soc/codecs/rt5640.h @@ -2103,6 +2103,14 @@ struct rt5640_priv { int pll_out; bool hp_mute; + + struct delayed_work adc_poll_work; + struct iio_channel *chan; + int hp_det_adc_value; + bool hp_insert; + int hp_con_gpio; + bool hp_con_gpio_active_high; + struct snd_soc_jack hp_jack; }; int rt5640_dmic_enable(struct snd_soc_codec *codec,