From 941e22553dc5b8ddd0d363296499966c7ad29818 Mon Sep 17 00:00:00 2001 From: T-Firefly Date: Sat, 19 Aug 2017 16:12:28 +0800 Subject: [PATCH] ARM64: firefly: Add rk3399-firefly board support Change-Id: I42bc1c24cfbfdb0e713d8fd83fdd2e075fd66d9c --- arch/arm/boot/dts/rk3288-firefly-lvds.dts | 162 +++ arch/arm/configs/firefly_linux_defconfig | 481 +++++++ arch/arm/mach-rockchip/rockchip.c | 18 + .../dts/rockchip/rk3399-firefly-linux-edp.dts | 1092 ++++++++++++++++ .../dts/rockchip/rk3399-firefly-linux.dts | 146 ++- .../rockchip/rk3399-firefly-mini-linux.dts | 1129 +++++++++++++++++ arch/arm64/boot/dts/rockchip/rk3399.dtsi | 6 + arch/arm64/configs/firefly_linux_defconfig | 541 ++++++++ arch/arm64/configs/rockchip_linux_defconfig | 3 + drivers/base/dd.c | 2 +- drivers/char/Kconfig | 2 +- drivers/char/Makefile | 4 + drivers/char/virtd | Bin 0 -> 450328 bytes drivers/gpu/drm/panel/panel-simple.c | 13 +- .../input/remotectl/rockchip_pwm_remotectl.c | 22 +- drivers/input/touchscreen/Makefile | 2 +- drivers/input/touchscreen/gslx680_pad.c | 2 +- .../touchscreen/{gslx680.c => gslx680_vr.c} | 2 +- .../touchscreen/{gslx680.h => gslx680_vr.h} | 2 +- drivers/mmc/card/block.c | 30 +- drivers/mmc/card/queue.h | 38 + .../net/ethernet/stmicro/stmmac/dwmac-rk.c | 2 +- drivers/usb/serial/option.c | 3 + firmware/rockchip/dptx.bin | Bin 0 -> 98320 bytes sound/soc/codecs/rt5640.c | 166 ++- sound/soc/codecs/rt5640.h | 8 + 26 files changed, 3811 insertions(+), 65 deletions(-) create mode 100644 arch/arm/boot/dts/rk3288-firefly-lvds.dts create mode 100644 arch/arm/configs/firefly_linux_defconfig create mode 100755 arch/arm64/boot/dts/rockchip/rk3399-firefly-linux-edp.dts create mode 100644 arch/arm64/boot/dts/rockchip/rk3399-firefly-mini-linux.dts create mode 100644 arch/arm64/configs/firefly_linux_defconfig create mode 100644 drivers/char/virtd rename drivers/input/touchscreen/{gslx680.c => gslx680_vr.c} (99%) rename drivers/input/touchscreen/{gslx680.h => gslx680_vr.h} (99%) create mode 100755 firmware/rockchip/dptx.bin 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 0000000000000000000000000000000000000000..2372fbdc9ebe5c1573e93b8a571c204b356236bb GIT binary patch literal 450328 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 GGU@epIq894SNRPcI3bE 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 z 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 Dyc=b2 literal 0 HcmV?d00001 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_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.c b/drivers/input/touchscreen/gslx680_vr.c similarity index 99% rename from drivers/input/touchscreen/gslx680.c rename to drivers/input/touchscreen/gslx680_vr.c index f24b0dc69661..5d3156c48629 100644 --- a/drivers/input/touchscreen/gslx680.c +++ b/drivers/input/touchscreen/gslx680_vr.c @@ -26,7 +26,7 @@ #include //#include "rockchip_gslX680_rk3168.h" #include "tp_suspend.h" -#include "gslx680.h" +#include "gslx680_vr.h" #include #include diff --git a/drivers/input/touchscreen/gslx680.h b/drivers/input/touchscreen/gslx680_vr.h similarity index 99% rename from drivers/input/touchscreen/gslx680.h rename to drivers/input/touchscreen/gslx680_vr.h index 45339e5ba2ce..679c51faf882 100644 --- a/drivers/input/touchscreen/gslx680.h +++ b/drivers/input/touchscreen/gslx680_vr.h @@ -63,7 +63,7 @@ extern void gsl_DataInit(int *ret); } */ -unsigned int gsl_config_data_id[] = +static unsigned int gsl_config_data_id[] = { 0x852b6a, 0x200, 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 0000000000000000000000000000000000000000..042ec48d748a4a1e9b8174fa0d3fcc64bf2c562f GIT binary patch literal 98320 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 #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, -- 2.34.1