From 9f182d8178f405a0020702b64196125a95273494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Ter=C3=A4s?= Date: Tue, 6 Oct 2015 19:45:38 +0000 Subject: main/linux-rpi: upgrade to 4.1.10 update configs and add driver for the cirrus audio add-on board --- ...-potential-deadlock-in-reqsk_queue_unlink.patch | 40 + main/linux-rpi/APKBUILD | 58 +- main/linux-rpi/aslr-pie.patch | 70 - main/linux-rpi/config-rpi.armhf | 369 ++-- main/linux-rpi/config-rpi2.armhf | 367 ++-- main/linux-rpi/rpi-cirrus-4.1.x-20151006.patch | 2046 ++++++++++++++++++++ 6 files changed, 2605 insertions(+), 345 deletions(-) create mode 100644 main/linux-rpi/0001-inet-fix-potential-deadlock-in-reqsk_queue_unlink.patch delete mode 100644 main/linux-rpi/aslr-pie.patch create mode 100644 main/linux-rpi/rpi-cirrus-4.1.x-20151006.patch (limited to 'main/linux-rpi') diff --git a/main/linux-rpi/0001-inet-fix-potential-deadlock-in-reqsk_queue_unlink.patch b/main/linux-rpi/0001-inet-fix-potential-deadlock-in-reqsk_queue_unlink.patch new file mode 100644 index 0000000000..fdd23d5cc5 --- /dev/null +++ b/main/linux-rpi/0001-inet-fix-potential-deadlock-in-reqsk_queue_unlink.patch @@ -0,0 +1,40 @@ +From 83fccfc3940c4a2db90fd7e7079f5b465cd8c6af Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Thu, 13 Aug 2015 15:44:51 -0700 +Subject: [PATCH] inet: fix potential deadlock in reqsk_queue_unlink() + +When replacing del_timer() with del_timer_sync(), I introduced +a deadlock condition : + +reqsk_queue_unlink() is called from inet_csk_reqsk_queue_drop() + +inet_csk_reqsk_queue_drop() can be called from many contexts, +one being the timer handler itself (reqsk_timer_handler()). + +In this case, del_timer_sync() loops forever. + +Simple fix is to test if timer is pending. + +Fixes: 2235f2ac75fd ("inet: fix races with reqsk timers") +Signed-off-by: Eric Dumazet +Signed-off-by: David S. Miller +--- + net/ipv4/inet_connection_sock.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c +index 05e3145..1349571 100644 +--- a/net/ipv4/inet_connection_sock.c ++++ b/net/ipv4/inet_connection_sock.c +@@ -593,7 +593,7 @@ static bool reqsk_queue_unlink(struct request_sock_queue *queue, + } + + spin_unlock(&queue->syn_wait_lock); +- if (del_timer_sync(&req->rsk_timer)) ++ if (timer_pending(&req->rsk_timer) && del_timer_sync(&req->rsk_timer)) + reqsk_put(req); + return found; + } +-- +2.6.0 + diff --git a/main/linux-rpi/APKBUILD b/main/linux-rpi/APKBUILD index 1a055cda04..ba02b7903c 100644 --- a/main/linux-rpi/APKBUILD +++ b/main/linux-rpi/APKBUILD @@ -2,7 +2,7 @@ _mainflavor=rpi pkgname=linux-$_mainflavor -pkgver=3.18.20 +pkgver=4.1.10 case $pkgver in *.*.*) _kernver=${pkgver%.*};; *.*) _kernver=${pkgver};; @@ -14,10 +14,10 @@ depends="mkinitfs linux-firmware" makedepends="perl installkernel bash gmp-dev bc" options="!strip" install= -source="http://ftp.kernel.org/pub/linux/kernel/v3.x/linux-$_kernver.tar.xz - http://ftp.kernel.org/pub/linux/kernel/v3.x/patch-$pkgver.xz - http://dev.alpinelinux.org/~tteras/linux-3.18.y-rpi-20150617.patch - aslr-pie.patch +source="http://ftp.kernel.org/pub/linux/kernel/v4.x/linux-$_kernver.tar.xz + http://ftp.kernel.org/pub/linux/kernel/v4.x/patch-$pkgver.xz + http://dev.alpinelinux.org/~tteras/linux-4.1.y-rpi-20151006.patch + 0001-inet-fix-potential-deadlock-in-reqsk_queue_unlink.patch config-rpi.armhf config-rpi2.armhf @@ -108,14 +108,9 @@ _package() { case "$CARCH" in arm*) local _dtbdir="$_outdir"/usr/lib/linux-${_abi_release} - mkdir -p "$_dtbdir" "$_dtbdir"/overlays - for i in arch/arm/boot/dts/*.dtb ; do - case "$i" in - *-overlay.dtb) install -m644 "$i" "$_dtbdir/overlays" ;; - *.dtb) install -m644 "$i" "$_dtbdir" ;; - esac - done - + cd "$srcdir"/build-$_buildflavor/arch/arm/boot/dts || return 1 + mkdir -p "$_dtbdir" + find . -name "*.dtb" -type f | cpio -pdm "$_dtbdir" _install=zinstall ;; *) @@ -123,6 +118,7 @@ _package() { ;; esac + cd "$srcdir"/build-$_buildflavor || return 1 make -j1 modules_install firmware_install $_install \ INSTALL_MOD_PATH="$_outdir" \ INSTALL_PATH="$_outdir"/boot \ @@ -199,24 +195,24 @@ dev() { "$subpkgdir"/lib/modules/${_abi_release}/build } -md5sums="9e854df51ca3fef8bfe566dbd7b89241 linux-3.18.tar.xz -483dc72613a4f67c856acb2208de3d86 patch-3.18.20.xz -4224a13261d65db5c09e88e6a14d670b linux-3.18.y-rpi-20150617.patch -6f5854b710be8f38f67fc7ec8f3d0625 aslr-pie.patch -52f17d154ebd339617c42318f569b979 config-rpi.armhf -1bb45f3fea9fdecb88c9d6fb8d607ec7 config-rpi2.armhf +md5sums="fe9dc0f6729f36400ea81aa41d614c37 linux-4.1.tar.xz +599cb082ef44d8fb76ad8fd49d1b50fc patch-4.1.10.xz +161b4c74b6071d5bfb51ac5175cbab04 linux-4.1.y-rpi-20151006.patch +ffa7fdc282af20f2b48b95b2687b7452 0001-inet-fix-potential-deadlock-in-reqsk_queue_unlink.patch +242b81099d0eec85103a59a65ad9bf3e config-rpi.armhf +9b055df73d3876d73700f63136628183 config-rpi2.armhf 1f3dda659442fa7e2afc62bffeceb129 markdt" -sha256sums="becc413cc9e6d7f5cc52a3ce66d65c3725bc1d1cc1001f4ce6c32b69eb188cbd linux-3.18.tar.xz -00bbeee2ead1c67d5603b86b688e37e328d471bc15415e8c4e806fc1b246aacf patch-3.18.20.xz -82f881bfbb3f761ae4c81ec6272ee0b62f1066deb9fff9b290774f844d838638 linux-3.18.y-rpi-20150617.patch -e1db8126b13507f4442b1fa5c3d2648fa453f0ca3ea75145ec6f0faeab923c08 aslr-pie.patch -a92e574315ccbbb7de621e9c8945ae11a83c7c2cd41116b7a2a71b8c0affb656 config-rpi.armhf -571204b3caa01e40c46351f28e9ce3ed276e9111355e4ba953f898f76c8d5143 config-rpi2.armhf +sha256sums="caf51f085aac1e1cea4d00dbbf3093ead07b551fc07b31b2a989c05f8ea72d9f linux-4.1.tar.xz +929e210fe6dbd5dd26812c146630be14e979aae6c960a2feb39544babb8e73cb patch-4.1.10.xz +777909c66d87d0f18796cc4fe426a30ae89ce20380c62ae00976bbffd28374ec linux-4.1.y-rpi-20151006.patch +c56583010561ca7d7b5e5aa3eed67c939f67deb2d22af7155e475c10baa4d7a5 0001-inet-fix-potential-deadlock-in-reqsk_queue_unlink.patch +7a49802d041ef18ccfd8127581982638c4c3ca8f8352b179fe74dfa996daf374 config-rpi.armhf +e5a00767290bb542388d4a7daa8f6331b563880e03def85ec1fd2a09fb7f9b84 config-rpi2.armhf 289a7509bc294295b65680c7fff0b2ec07cf359ea8a57cef00267396885f9b54 markdt" -sha512sums="2f0b72466e9bc538a675738aa416573d41bbbd7e3e2ffd5b5b127afde609ebc278cec5a3c37e73479607e957c13f1b4ed9782a3795e0dcc2cf8e550228594009 linux-3.18.tar.xz -d9005d27bbcfc98600053dcf3e72398efd50fb9e1e0e46ffca2e3091d4a67c53bccec28312e7debc8f10273dc0bfbff12898cb71b977e5b4839c422a31c4e22f patch-3.18.20.xz -f48822399d842f60d533d11be0c1eeb881d21fb69fa110d19cb0778d271e9f2bd230673a9dffca98483a317150fac62c0eb1e0fae50d85751b05fa0b7a58132f linux-3.18.y-rpi-20150617.patch -8b2080b72cd0a1bf8f528e8a7a4ab7921ee9e1e425a5c0439e9409b599eca23ad992f5fec67924da736c20de9728c7f0cb2f3087212a278e82ba8ecfc8fac7d0 aslr-pie.patch -cd3c88c5d66b4b809cc1fb3420479e2dd3d6d7c85b7bcccbb2348d01934fd1a878f3047f3dcb616687634e9f8024e3fd4ad94246c02e44a173991ce4ff526b5b config-rpi.armhf -c3c8f5563f0e3b2aa4c4231e7c01c5724b628a51720296e31801de0d04076ce8cf178315f13502b5388ba5b325ef02e03d72adfb694564ad2f4aeeefa40e2cbc config-rpi2.armhf +sha512sums="168ef84a4e67619f9f53f3574e438542a5747f9b43443363cb83597fcdac9f40d201625c66e375a23226745eaada9176eb006ca023613cec089349e91751f3c0 linux-4.1.tar.xz +3b5cb5c8f494958c39a06a1b416e3e5a075a3c76c44f8bf1ae5a14deec9861407100c2ef59b0720e8fc0729b5c8422b4d819ff59f1f7ec4eed20c5ba8a95d6d5 patch-4.1.10.xz +fa9022592a4ea1ce7cc2cadac672ba120471be6453f40acef8b8ac6ad50fa36701bd4ebe335507dff848d335c2b7f4e74ec0313ea039edfa7a35900c31639097 linux-4.1.y-rpi-20151006.patch +32ae58cf74d5e02cb09445be35772dad0a517949bd1836f8dbc90b871de67901b61dba5eccdc2a795a9f7e5c06831335504a738205eb49768f7424cf30ddd8ae 0001-inet-fix-potential-deadlock-in-reqsk_queue_unlink.patch +103c7ea030b8cf8dc7d26e426236b24a13841e6d7b698cd172990be2198286d35d70b13e4b6ea4ca8517d5443305d0447662205bfe4c963b332543e2e5d7be0c config-rpi.armhf +012a7fdacfac2cd851010dd72ed772c82c9622eb1a36e47f372341c6d32ba6ef686b22515ae347c69db14e9648d4d7e3897b13751a816c351d0098cabf979b3c config-rpi2.armhf 89601aa0e4f77fb07fb1d58c6a9394c8683bc7dfc905ca6612d607ef4188637662d295fa3d5640e3e0a4cd08c98c10511a4f3cea41e7568167b12d0a6c813e8b markdt" diff --git a/main/linux-rpi/aslr-pie.patch b/main/linux-rpi/aslr-pie.patch deleted file mode 100644 index 70771427db..0000000000 --- a/main/linux-rpi/aslr-pie.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 0b277f076ead47454b4438a7d20d0807acd2af6a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Timo=20Ter=C3=A4s?= -Date: Tue, 1 Oct 2013 13:46:04 +0300 -Subject: [PATCH] fs/binfmt_elf: fix memory map for PIE applications -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -arch/x86/include/asm/elf.h comment says: -" -ELF_ET_DYN_BASE is the location that an ET_DYN program is loaded -if exec'ed. Typical use of this is to invoke "./ld.so someprog" -to test out a new version of the loader. We need to make sure -that it is out of the way of the program that it will "exec", -and that there is sufficient room for the brk. -" - -In case we have main application linked as PIE, this will cause -problems as the main program itself will go the memory location -that allows very little heap. - -This fixes the loader to detect PIE application by checking if -elf_interpreter is requested, and loads them to beginning of the -address space instead of the specially crafted place for elf -interpreter. - -Signed-off-by: Timo Teräs ---- - fs/binfmt_elf.c | 17 +++++++++++------ - 1 file changed, 11 insertions(+), 6 deletions(-) - -diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c -index 78f4608..c075ace 100644 ---- a/fs/binfmt_elf.c -+++ b/fs/binfmt_elf.c -@@ -801,6 +801,10 @@ static int load_elf_binary(struct linux_binprm *bprm) - * default mmap base, as well as whatever program they - * might try to exec. This is because the brk will - * follow the loader, and is not movable. */ -+ if (elf_interpreter) -+ load_bias = 0x00400000UL; -+ else -+ load_bias = ELF_ET_DYN_BASE; - #ifdef CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE - /* Memory randomization might have been switched off - * in runtime via sysctl or explicit setting of -@@ -809,13 +813,14 @@ static int load_elf_binary(struct linux_binprm *bprm) - * load_bias value in order to establish proper - * non-randomized mappings. - */ -- if (current->flags & PF_RANDOMIZE) -- load_bias = 0; -- else -- load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr); --#else -- load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr); -+ if (current->flags & PF_RANDOMIZE) { -+ if (elf_interpreter) -+ load_bias += (get_random_int() & STACK_RND_MASK) << PAGE_SHIFT; -+ else -+ load_bias = 0; -+ } - #endif -+ load_bias = ELF_PAGESTART(load_bias - vaddr); - total_size = total_mapping_size(elf_phdata, - loc->elf_ex.e_phnum); - if (!total_size) { --- -2.4.0 - diff --git a/main/linux-rpi/config-rpi.armhf b/main/linux-rpi/config-rpi.armhf index fb92983bb5..ebbb5b9093 100644 --- a/main/linux-rpi/config-rpi.armhf +++ b/main/linux-rpi/config-rpi.armhf @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 3.18.17 Kernel Configuration +# Linux/arm 4.1.10 Kernel Configuration # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -21,6 +21,7 @@ CONFIG_NEED_MACH_IO_H=y CONFIG_NEED_MACH_MEMORY_H=y CONFIG_PHYS_OFFSET=0 CONFIG_GENERIC_BUG=y +CONFIG_PGTABLE_LEVELS=2 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_EXTABLE_SORT=y @@ -62,13 +63,13 @@ CONFIG_HAVE_ARCH_AUDITSYSCALL=y # CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_IRQ_SHOW_LEVEL=y CONFIG_HARDIRQS_SW_RESEND=y CONFIG_IRQ_DOMAIN=y CONFIG_HANDLE_DOMAIN_IRQ=y # CONFIG_IRQ_DOMAIN_DEBUG is not set CONFIG_IRQ_FORCED_THREADING=y CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_GENERIC_CLOCKEVENTS_BUILD=y # # Timers subsystem @@ -96,8 +97,8 @@ CONFIG_TASK_IO_ACCOUNTING=y # # RCU Subsystem # -CONFIG_TREE_PREEMPT_RCU=y CONFIG_PREEMPT_RCU=y +CONFIG_SRCU=y # CONFIG_TASKS_RCU is not set CONFIG_RCU_STALL_COMMON=y CONFIG_RCU_FANOUT=32 @@ -105,7 +106,9 @@ CONFIG_RCU_FANOUT_LEAF=16 # CONFIG_RCU_FANOUT_EXACT is not set # CONFIG_TREE_RCU_TRACE is not set # CONFIG_RCU_BOOST is not set +CONFIG_RCU_KTHREAD_PRIO=0 # CONFIG_RCU_NOCB_CPU is not set +# CONFIG_RCU_EXPEDITE_BOOT is not set CONFIG_BUILD_BIN2C=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y @@ -117,7 +120,7 @@ CONFIG_CGROUP_FREEZER=y CONFIG_CGROUP_DEVICE=y # CONFIG_CPUSETS is not set CONFIG_CGROUP_CPUACCT=y -CONFIG_RESOURCE_COUNTERS=y +CONFIG_PAGE_COUNTER=y CONFIG_MEMCG=y # CONFIG_MEMCG_SWAP is not set # CONFIG_MEMCG_KMEM is not set @@ -153,6 +156,7 @@ CONFIG_HAVE_UID16=y CONFIG_BPF=y CONFIG_EXPERT=y CONFIG_UID16=y +CONFIG_MULTIUSER=y # CONFIG_SGETMASK_SYSCALL is not set CONFIG_SYSFS_SYSCALL=y # CONFIG_SYSCTL_SYSCALL is not set @@ -199,6 +203,7 @@ CONFIG_ARCH_USE_BUILTIN_BSWAP=y CONFIG_KRETPROBES=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_ATTRS=y CONFIG_HAVE_DMA_CONTIGUOUS=y @@ -224,6 +229,7 @@ CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_MODULES_USE_ELF_REL=y +CONFIG_ARCH_HAS_ELF_RANDOMIZE=y CONFIG_CLONE_BACKWARDS=y CONFIG_OLD_SIGSUSPEND3=y CONFIG_OLD_SIGACTION=y @@ -232,6 +238,7 @@ CONFIG_OLD_SIGACTION=y # GCOV-based kernel profiling # # CONFIG_GCOV_KERNEL is not set +CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y CONFIG_HAVE_GENERIC_DMA_COHERENT=y CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y @@ -295,12 +302,11 @@ CONFIG_FREEZER=y # System Type # CONFIG_MMU=y +CONFIG_ARCH_BCM2708=y +# CONFIG_ARCH_BCM2709 is not set # CONFIG_ARCH_MULTIPLATFORM is not set -# CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_REALVIEW is not set # CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -CONFIG_ARCH_BCM2708=y # CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_GEMINI is not set # CONFIG_ARCH_EBSA110 is not set @@ -319,7 +325,6 @@ CONFIG_ARCH_BCM2708=y # CONFIG_ARCH_W90X900 is not set # CONFIG_ARCH_LPC32XX is not set # CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_MSM is not set # CONFIG_ARCH_SHMOBILE_LEGACY is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set @@ -327,7 +332,6 @@ CONFIG_ARCH_BCM2708=y # CONFIG_ARCH_S3C64XX is not set # CONFIG_ARCH_DAVINCI is not set # CONFIG_ARCH_OMAP1 is not set -# CONFIG_ARCH_BCM2709 is not set # # Broadcom BCM2708 Implementations @@ -335,7 +339,6 @@ CONFIG_ARCH_BCM2708=y CONFIG_MACH_BCM2708=y CONFIG_BCM2708_DT=y CONFIG_BCM2708_GPIO=y -CONFIG_BCM2708_VCMEM=y # CONFIG_BCM2708_NOL2CACHE is not set CONFIG_BCM2708_SPIDEV=y @@ -366,6 +369,7 @@ CONFIG_KUSER_HELPERS=y # CONFIG_CACHE_L2X0 is not set CONFIG_ARM_L1_CACHE_SHIFT=5 CONFIG_ARM_DMA_MEM_BUFFERABLE=y +# CONFIG_ARM_KERNMEM_PERMS is not set # CONFIG_ARM_ERRATA_326103 is not set CONFIG_ARM_ERRATA_411920=y # CONFIG_ARM_ERRATA_364296 is not set @@ -373,7 +377,7 @@ CONFIG_ARM_ERRATA_411920=y # # Bus support # -CONFIG_ARM_AMBA=y +# CONFIG_PCI_DOMAINS_GENERIC is not set # CONFIG_PCI_SYSCALL is not set # CONFIG_PCCARD is not set @@ -425,6 +429,7 @@ CONFIG_CLEANCACHE=y CONFIG_FRONTSWAP=y CONFIG_CMA=y # CONFIG_CMA_DEBUG is not set +# CONFIG_CMA_DEBUGFS is not set CONFIG_CMA_AREAS=7 # CONFIG_ZSWAP is not set # CONFIG_ZPOOL is not set @@ -477,13 +482,13 @@ 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 is not set # -# ARM CPU frequency scaling drivers +# CPU frequency scaling drivers # +# CONFIG_CPUFREQ_DT is not set # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set -CONFIG_ARM_BCM2835_CPUFREQ=y +# CONFIG_QORIQ_CPUFREQ is not set # # CPU Idle @@ -495,6 +500,7 @@ CONFIG_CPU_IDLE_GOV_MENU=y # # ARM CPU Idle Drivers # +# CONFIG_ARM_CPUIDLE is not set # CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set # @@ -510,7 +516,6 @@ CONFIG_VFP=y # Userspace binary formats # CONFIG_BINFMT_ELF=y -CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y CONFIG_BINFMT_SCRIPT=y # CONFIG_HAVE_AOUT is not set @@ -526,7 +531,6 @@ CONFIG_SUSPEND_FREEZER=y CONFIG_PM_SLEEP=y # CONFIG_PM_AUTOSLEEP is not set # CONFIG_PM_WAKELOCKS is not set -# CONFIG_PM_RUNTIME is not set CONFIG_PM=y # CONFIG_PM_DEBUG is not set # CONFIG_APM_EMULATION is not set @@ -579,6 +583,7 @@ CONFIG_SYN_COOKIES=y # CONFIG_NET_IPVTI is not set CONFIG_NET_UDP_TUNNEL=m # CONFIG_NET_FOU is not set +# CONFIG_NET_FOU_IP_TUNNELS is not set # CONFIG_GENEVE is not set CONFIG_INET_AH=m CONFIG_INET_ESP=m @@ -672,6 +677,7 @@ CONFIG_NF_NAT_FTP=m CONFIG_NF_NAT_IRC=m CONFIG_NF_NAT_SIP=m CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_REDIRECT=m # CONFIG_NF_TABLES is not set CONFIG_NETFILTER_XTABLES=m @@ -1005,6 +1011,9 @@ CONFIG_NET_ACT_PEDIT=m CONFIG_NET_ACT_SIMP=m CONFIG_NET_ACT_SKBEDIT=m CONFIG_NET_ACT_CSUM=m +# CONFIG_NET_ACT_VLAN is not set +CONFIG_NET_ACT_BPF=m +CONFIG_NET_ACT_CONNMARK=m # CONFIG_NET_CLS_IND is not set CONFIG_NET_SCH_FIFO=y # CONFIG_DCB is not set @@ -1016,12 +1025,15 @@ CONFIG_BATMAN_ADV_BLA=y # CONFIG_BATMAN_ADV_MCAST is not set # CONFIG_BATMAN_ADV_DEBUG is not set CONFIG_OPENVSWITCH=m -CONFIG_OPENVSWITCH_GRE=y +CONFIG_OPENVSWITCH_GRE=m # CONFIG_VSOCKETS is not set # CONFIG_NETLINK_MMAP is not set # CONFIG_NETLINK_DIAG is not set -# CONFIG_NET_MPLS_GSO is not set +CONFIG_MPLS=y +CONFIG_NET_MPLS_GSO=m +# CONFIG_MPLS_ROUTING is not set # CONFIG_HSR is not set +# CONFIG_NET_SWITCHDEV is not set # CONFIG_CGROUP_NET_PRIO is not set CONFIG_CGROUP_NET_CLASSID=y CONFIG_NET_RX_BUSY_POLL=y @@ -1033,25 +1045,7 @@ CONFIG_BQL=y # CONFIG_NET_PKTGEN=m # CONFIG_NET_TCPPROBE is not set -CONFIG_HAMRADIO=y - -# -# Packet Radio protocols -# -CONFIG_AX25=m -CONFIG_AX25_DAMA_SLAVE=y -CONFIG_NETROM=m -CONFIG_ROSE=m - -# -# AX.25 network device drivers -# -CONFIG_MKISS=m -CONFIG_6PACK=m -CONFIG_BPQETHER=m -CONFIG_BAYCOM_SER_FDX=m -CONFIG_BAYCOM_SER_HDX=m -CONFIG_YAM=m +# CONFIG_HAMRADIO is not set # CONFIG_CAN is not set CONFIG_IRDA=m @@ -1094,17 +1088,24 @@ CONFIG_USB_IRDA=m CONFIG_SIGMATEL_FIR=m CONFIG_MCS_FIR=m CONFIG_BT=m +CONFIG_BT_BREDR=y CONFIG_BT_RFCOMM=m CONFIG_BT_RFCOMM_TTY=y CONFIG_BT_BNEP=m CONFIG_BT_BNEP_MC_FILTER=y CONFIG_BT_BNEP_PROTO_FILTER=y CONFIG_BT_HIDP=m +CONFIG_BT_LE=y +# CONFIG_BT_SELFTEST is not set +# CONFIG_BT_DEBUGFS is not set # # Bluetooth device drivers # +CONFIG_BT_INTEL=m +CONFIG_BT_BCM=m CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIBTUSB_BCM=y # CONFIG_BT_HCIBTSDIO is not set # CONFIG_BT_HCIUART is not set CONFIG_BT_HCIBCM203X=m @@ -1141,6 +1142,7 @@ CONFIG_MAC80211=m CONFIG_MAC80211_HAS_RC=y CONFIG_MAC80211_RC_MINSTREL=y CONFIG_MAC80211_RC_MINSTREL_HT=y +# CONFIG_MAC80211_RC_MINSTREL_VHT is not set CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" CONFIG_MAC80211_MESH=y @@ -1153,6 +1155,7 @@ CONFIG_WIMAX_DEBUG_LEVEL=8 CONFIG_RFKILL=m CONFIG_RFKILL_LEDS=y CONFIG_RFKILL_INPUT=y +# CONFIG_RFKILL_REGULATOR is not set # CONFIG_RFKILL_GPIO is not set CONFIG_NET_9P=m # CONFIG_NET_9P_DEBUG is not set @@ -1173,6 +1176,8 @@ CONFIG_HAVE_BPF_JIT=y # # Device Drivers # +CONFIG_ARM_AMBA=y +# CONFIG_TEGRA_AHB is not set # # Generic Driver Options @@ -1188,7 +1193,9 @@ CONFIG_FIRMWARE_IN_KERNEL=y CONFIG_EXTRA_FIRMWARE="" CONFIG_FW_LOADER_USER_HELPER=y CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y +CONFIG_WANT_DEV_COREDUMP=y CONFIG_ALLOW_DEV_COREDUMP=y +CONFIG_DEV_COREDUMP=y # CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_DEVRES is not set # CONFIG_SYS_HYPERVISOR is not set @@ -1215,8 +1222,11 @@ CONFIG_CMA_ALIGNMENT=8 # # Bus devices # -# CONFIG_BRCMSTB_GISB_ARB is not set +CONFIG_ARM_CCI=y +CONFIG_ARM_CCI400_COMMON=y +CONFIG_ARM_CCI400_PMU=y # CONFIG_ARM_CCN is not set +# CONFIG_BRCMSTB_GISB_ARB is not set # CONFIG_VEXPRESS_CONFIG is not set CONFIG_CONNECTOR=m # CONFIG_MTD is not set @@ -1226,14 +1236,17 @@ CONFIG_OF=y # # Device Tree and Open Firmware support # -# CONFIG_OF_SELFTEST is not set +# CONFIG_OF_UNITTEST is not set CONFIG_OF_FLATTREE=y CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_DYNAMIC=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y CONFIG_OF_NET=y CONFIG_OF_MDIO=m CONFIG_OF_RESERVED_MEM=y +CONFIG_OF_RESOLVE=y +CONFIG_OF_OVERLAY=y CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_PARPORT is not set CONFIG_BLK_DEV=y @@ -1248,7 +1261,7 @@ CONFIG_BLK_DEV_NBD=m CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_XIP is not set +# CONFIG_BLK_DEV_PMEM is not set CONFIG_CDROM_PKTCDVD=m CONFIG_CDROM_PKTCDVD_BUFFERS=8 # CONFIG_CDROM_PKTCDVD_WCACHE is not set @@ -1260,6 +1273,7 @@ CONFIG_CDROM_PKTCDVD_BUFFERS=8 # Misc devices # # CONFIG_SENSORS_LIS3LV02D is not set +CONFIG_BCM2835_SMI=m # CONFIG_AD525X_DPOT is not set # CONFIG_DUMMY_IRQ is not set # CONFIG_ICS932S401 is not set @@ -1302,7 +1316,6 @@ CONFIG_TI_ST=m # Altera FPGA firmware download module # # CONFIG_ALTERA_STAPL is not set -CONFIG_BCM2708_VCHIQ=y # # Intel MIC Bus Driver @@ -1369,9 +1382,11 @@ CONFIG_MD_RAID10=m CONFIG_MD_RAID456=m # CONFIG_MD_MULTIPATH is not set # CONFIG_MD_FAULTY is not set +# CONFIG_MD_CLUSTER is not set # CONFIG_BCACHE is not set CONFIG_BLK_DEV_DM_BUILTIN=y CONFIG_BLK_DEV_DM=m +# CONFIG_DM_MQ_DEFAULT is not set # CONFIG_DM_DEBUG is not set CONFIG_DM_BUFIO=m CONFIG_DM_CRYPT=m @@ -1389,6 +1404,7 @@ CONFIG_DM_DELAY=m # CONFIG_DM_FLAKEY is not set # CONFIG_DM_VERITY is not set # CONFIG_DM_SWITCH is not set +# CONFIG_DM_LOG_WRITES is not set # CONFIG_TARGET_CORE is not set CONFIG_NETDEVICES=y CONFIG_MII=y @@ -1400,6 +1416,7 @@ CONFIG_IFB=m # CONFIG_NET_TEAM is not set CONFIG_MACVLAN=m # CONFIG_MACVTAP is not set +# CONFIG_IPVLAN is not set # CONFIG_VXLAN is not set CONFIG_NETCONSOLE=m # CONFIG_NETCONSOLE_DYNAMIC is not set @@ -1417,18 +1434,14 @@ CONFIG_VETH=m # Distributed Switch Architecture drivers # # CONFIG_NET_DSA_MV88E6XXX is not set -# CONFIG_NET_DSA_MV88E6060 is not set # CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set -# CONFIG_NET_DSA_MV88E6131 is not set -# CONFIG_NET_DSA_MV88E6123_61_65 is not set -# CONFIG_NET_DSA_MV88E6171 is not set -# CONFIG_NET_DSA_BCM_SF2 is not set CONFIG_ETHERNET=y # CONFIG_ALTERA_TSE is not set -# CONFIG_NET_XGENE is not set CONFIG_NET_VENDOR_ARC=y # CONFIG_ARC_EMAC is not set +# CONFIG_EMAC_ROCKCHIP is not set CONFIG_NET_CADENCE=y +# CONFIG_MACB is not set CONFIG_NET_VENDOR_BROADCOM=y # CONFIG_B44 is not set # CONFIG_BCMGENET is not set @@ -1456,6 +1469,7 @@ CONFIG_NET_VENDOR_8390=y # CONFIG_AX88796 is not set # CONFIG_ETHOC is not set # CONFIG_NET_VENDOR_QUALCOMM is not set +CONFIG_NET_VENDOR_ROCKER=y # CONFIG_NET_VENDOR_SAMSUNG is not set CONFIG_NET_VENDOR_SEEQ=y CONFIG_NET_VENDOR_SMSC=y @@ -1477,7 +1491,6 @@ CONFIG_PHYLIB=m # # CONFIG_AT803X_PHY is not set # CONFIG_AMD_PHY is not set -# CONFIG_AMD_XGBE_PHY is not set # CONFIG_MARVELL_PHY is not set # CONFIG_DAVICOM_PHY is not set # CONFIG_QSEMI_PHY is not set @@ -1494,6 +1507,7 @@ CONFIG_PHYLIB=m # CONFIG_STE10XP is not set # CONFIG_LSI_ET1011C_PHY is not set # CONFIG_MICREL_PHY is not set +# CONFIG_FIXED_PHY is not set CONFIG_MDIO_BITBANG=m # CONFIG_MDIO_GPIO is not set # CONFIG_MDIO_BUS_MUX_GPIO is not set @@ -1579,6 +1593,7 @@ CONFIG_ATH9K=m # CONFIG_ATH9K_WOW is not set CONFIG_ATH9K_RFKILL=y # CONFIG_ATH9K_CHANNEL_CONTEXT is not set +CONFIG_ATH9K_PCOEM=y CONFIG_ATH9K_HTC=m # CONFIG_ATH9K_HTC_DEBUGFS is not set CONFIG_CARL9170=m @@ -1654,6 +1669,7 @@ CONFIG_RT2X00_LIB_FIRMWARE=y CONFIG_RT2X00_LIB_CRYPTO=y CONFIG_RT2X00_LIB_LEDS=y # CONFIG_RT2X00_DEBUG is not set +# CONFIG_WL_MEDIATEK is not set CONFIG_RTL8192CU=m # CONFIG_WL_TI is not set CONFIG_ZD1211RW=m @@ -1725,6 +1741,7 @@ CONFIG_JOYSTICK_IFORCE_USB=y CONFIG_JOYSTICK_XPAD=m CONFIG_JOYSTICK_XPAD_FF=y # CONFIG_JOYSTICK_XPAD_LEDS is not set +CONFIG_JOYSTICK_RPISENSE=m # CONFIG_INPUT_TABLET is not set CONFIG_INPUT_TOUCHSCREEN=y CONFIG_OF_TOUCHSCREEN=y @@ -1735,6 +1752,7 @@ CONFIG_TOUCHSCREEN_ADS7846=m # CONFIG_TOUCHSCREEN_ATMEL_MXT is not set # CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set # CONFIG_TOUCHSCREEN_BU21013 is not set +# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set # CONFIG_TOUCHSCREEN_CY8CTMG110 is not set # CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set # CONFIG_TOUCHSCREEN_CYTTSP4_CORE is not set @@ -1743,8 +1761,10 @@ CONFIG_TOUCHSCREEN_ADS7846=m # CONFIG_TOUCHSCREEN_EETI is not set # CONFIG_TOUCHSCREEN_EGALAX is not set # CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GOODIX is not set # CONFIG_TOUCHSCREEN_ILI210X is not set # CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELAN is not set # CONFIG_TOUCHSCREEN_ELO is not set # CONFIG_TOUCHSCREEN_WACOM_W8001 is not set # CONFIG_TOUCHSCREEN_WACOM_I2C is not set @@ -1767,6 +1787,7 @@ CONFIG_TOUCHSCREEN_ADS7846=m # CONFIG_TOUCHSCREEN_ST1232 is not set CONFIG_TOUCHSCREEN_STMPE=m # CONFIG_TOUCHSCREEN_SUR40 is not set +# CONFIG_TOUCHSCREEN_SX8654 is not set # CONFIG_TOUCHSCREEN_TPS6507X is not set # CONFIG_TOUCHSCREEN_ZFORCE is not set CONFIG_INPUT_MISC=y @@ -1775,6 +1796,7 @@ CONFIG_INPUT_AD714X_I2C=m CONFIG_INPUT_AD714X_SPI=m # CONFIG_INPUT_ARIZONA_HAPTICS is not set # CONFIG_INPUT_BMA150 is not set +# CONFIG_INPUT_E3X0_BUTTON is not set # CONFIG_INPUT_MMA8450 is not set # CONFIG_INPUT_MPU3050 is not set # CONFIG_INPUT_GP2A is not set @@ -1786,6 +1808,7 @@ CONFIG_INPUT_KEYSPAN_REMOTE=m CONFIG_INPUT_POWERMATE=m CONFIG_INPUT_YEALINK=m CONFIG_INPUT_CM109=m +# CONFIG_INPUT_REGULATOR_HAPTIC is not set CONFIG_INPUT_UINPUT=m # CONFIG_INPUT_PCF8574 is not set CONFIG_INPUT_GPIO_ROTARY_ENCODER=m @@ -1825,11 +1848,12 @@ CONFIG_VT_CONSOLE_SLEEP=y CONFIG_HW_CONSOLE=y CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_UNIX98_PTYS=y -# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y # CONFIG_LEGACY_PTYS is not set # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_N_GSM is not set # CONFIG_TRACE_SINK is not set +CONFIG_DEVMEM=y # CONFIG_DEVKMEM is not set # @@ -1853,26 +1877,30 @@ CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_CONSOLE_POLL=y # CONFIG_SERIAL_SCCNXP is not set # CONFIG_SERIAL_SC16IS7XX is not set +CONFIG_SERIAL_BCM63XX=m # CONFIG_SERIAL_ALTERA_JTAGUART is not set # CONFIG_SERIAL_ALTERA_UART is not set # CONFIG_SERIAL_IFX6X60 is not set # CONFIG_SERIAL_XILINX_PS_UART is not set # CONFIG_SERIAL_ARC is not set # CONFIG_SERIAL_FSL_LPUART is not set +# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set # CONFIG_SERIAL_ST_ASC is not set CONFIG_TTY_PRINTK=y # CONFIG_HVC_DCC is not set # CONFIG_IPMI_HANDLER is not set CONFIG_HW_RANDOM=y # CONFIG_HW_RANDOM_TIMERIOMEM is not set +CONFIG_HW_RANDOM_BCM2835=y CONFIG_HW_RANDOM_BCM2708=m # CONFIG_R3964 is not set CONFIG_RAW_DRIVER=y CONFIG_MAX_RAW_DEVS=256 # CONFIG_TCG_TPM is not set CONFIG_BRCM_CHAR_DRIVERS=y -CONFIG_BCM_VC_CMA=y -CONFIG_BCM_VC_SM=y +CONFIG_BCM2708_VCMEM=y +CONFIG_BCM2835_DEVGPIOMEM=y +CONFIG_BCM2835_SMI_DEV=m # CONFIG_XILLYBUS is not set # @@ -1898,13 +1926,13 @@ CONFIG_I2C_ALGOBIT=m # # I2C Hardware Bus support # +CONFIG_I2C_BCM2708=m +CONFIG_I2C_BCM2708_BAUDRATE=100000 # # I2C system bus drivers (mostly embedded / system-on-chip) # CONFIG_I2C_BCM2835=m -CONFIG_I2C_BCM2708=m -CONFIG_I2C_BCM2708_BAUDRATE=100000 # CONFIG_I2C_CBUS_GPIO is not set # CONFIG_I2C_DESIGNWARE_PLATFORM is not set # CONFIG_I2C_GPIO is not set @@ -1929,6 +1957,7 @@ CONFIG_I2C_BCM2708_BAUDRATE=100000 # Other I2C/SMBus bus drivers # # CONFIG_I2C_STUB is not set +# CONFIG_I2C_SLAVE is not set # CONFIG_I2C_DEBUG_CORE is not set # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set @@ -1996,8 +2025,9 @@ CONFIG_PINCTRL=y CONFIG_PINMUX=y CONFIG_PINCONF=y # CONFIG_DEBUG_PINCTRL is not set -CONFIG_PINCTRL_BCM2835=y +# CONFIG_PINCTRL_AMD is not set # CONFIG_PINCTRL_SINGLE is not set +CONFIG_PINCTRL_BCM2835=y CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y CONFIG_ARCH_REQUIRE_GPIOLIB=y CONFIG_GPIOLIB=y @@ -2008,55 +2038,45 @@ CONFIG_GPIOLIB_IRQCHIP=y CONFIG_GPIO_SYSFS=y # -# Memory mapped GPIO drivers: +# Memory mapped GPIO drivers # -# CONFIG_GPIO_GENERIC_PLATFORM is not set +# CONFIG_GPIO_74XX_MMIO is not set +# CONFIG_GPIO_ALTERA is not set # CONFIG_GPIO_DWAPB is not set # CONFIG_GPIO_EM is not set -# CONFIG_GPIO_ZEVIO is not set +# CONFIG_GPIO_GENERIC_PLATFORM is not set +# CONFIG_GPIO_GRGPIO is not set # CONFIG_GPIO_PL061 is not set # CONFIG_GPIO_SCH311X is not set -# CONFIG_GPIO_GRGPIO is not set +# CONFIG_GPIO_ZEVIO is not set # -# I2C GPIO expanders: +# I2C GPIO expanders # -CONFIG_GPIO_ARIZONA=m +# CONFIG_GPIO_ADP5588 is not set +# CONFIG_GPIO_ADNP is not set # CONFIG_GPIO_MAX7300 is not set # CONFIG_GPIO_MAX732X is not set # CONFIG_GPIO_PCA953X is not set # CONFIG_GPIO_PCF857X is not set # CONFIG_GPIO_SX150X is not set -CONFIG_GPIO_STMPE=y -# CONFIG_GPIO_ADP5588 is not set -# CONFIG_GPIO_ADNP is not set # -# PCI GPIO expanders: +# MFD GPIO expanders # +CONFIG_GPIO_ARIZONA=m +CONFIG_GPIO_STMPE=y # -# SPI GPIO expanders: +# SPI GPIO expanders # +# CONFIG_GPIO_74X164 is not set # CONFIG_GPIO_MAX7301 is not set # CONFIG_GPIO_MCP23S08 is not set # CONFIG_GPIO_MC33880 is not set -# CONFIG_GPIO_74X164 is not set - -# -# AC97 GPIO expanders: -# # -# LPC GPIO expanders: -# - -# -# MODULbus GPIO expanders: -# - -# -# USB GPIO expanders: +# USB GPIO expanders # CONFIG_W1=m CONFIG_W1_CON=y @@ -2102,10 +2122,12 @@ CONFIG_BATTERY_DS2760=m # CONFIG_CHARGER_MAX8903 is not set # CONFIG_CHARGER_LP8727 is not set # CONFIG_CHARGER_GPIO is not set +# CONFIG_CHARGER_MANAGER is not set # CONFIG_CHARGER_BQ2415X is not set # CONFIG_CHARGER_BQ24190 is not set # CONFIG_CHARGER_BQ24735 is not set # CONFIG_CHARGER_SMB347 is not set +# CONFIG_BATTERY_GAUGE_LTC2941 is not set # CONFIG_POWER_RESET is not set # CONFIG_POWER_AVS is not set # CONFIG_HWMON is not set @@ -2120,13 +2142,12 @@ CONFIG_THERMAL_GOV_STEP_WISE=y # CONFIG_THERMAL_GOV_USER_SPACE is not set # CONFIG_CPU_THERMAL is not set # CONFIG_THERMAL_EMULATION is not set -CONFIG_THERMAL_BCM2835=y # # Texas Instruments thermal drivers # CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_CORE is not set +CONFIG_WATCHDOG_CORE=y # CONFIG_WATCHDOG_NOWAYOUT is not set # @@ -2140,6 +2161,7 @@ CONFIG_WATCHDOG=y # CONFIG_DW_WATCHDOG is not set # CONFIG_MAX63XX_WATCHDOG is not set CONFIG_BCM2708_WDT=m +CONFIG_BCM2835_WDT=m # CONFIG_MEN_A21_WDT is not set # @@ -2174,10 +2196,12 @@ CONFIG_BCMA_BLOCKIO=y # Multifunction device drivers # CONFIG_MFD_CORE=y +CONFIG_MFD_RPISENSE_CORE=m # CONFIG_MFD_AS3711 is not set # CONFIG_MFD_AS3722 is not set # CONFIG_PMIC_ADP5520 is not set # CONFIG_MFD_AAT2870_CORE is not set +# CONFIG_MFD_ATMEL_HLCDC is not set # CONFIG_MFD_BCM590XX is not set # CONFIG_MFD_AXP20X is not set # CONFIG_MFD_CROS_EC is not set @@ -2187,6 +2211,8 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9055 is not set # CONFIG_MFD_DA9063 is not set +# CONFIG_MFD_DA9150 is not set +# CONFIG_MFD_DLN2 is not set # CONFIG_MFD_MC13XXX_SPI is not set # CONFIG_MFD_MC13XXX_I2C is not set # CONFIG_MFD_HI6421_PMIC is not set @@ -2201,16 +2227,19 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_MAX14577 is not set # CONFIG_MFD_MAX77686 is not set # CONFIG_MFD_MAX77693 is not set +# CONFIG_MFD_MAX77843 is not set # CONFIG_MFD_MAX8907 is not set # CONFIG_MFD_MAX8925 is not set # CONFIG_MFD_MAX8997 is not set # CONFIG_MFD_MAX8998 is not set +# CONFIG_MFD_MT6397 is not set # CONFIG_MFD_MENF21BMC is not set # CONFIG_EZX_PCAP is not set # CONFIG_MFD_VIPERBOARD is not set # CONFIG_MFD_RETU is not set # CONFIG_MFD_PCF50633 is not set # CONFIG_MFD_PM8921_CORE is not set +# CONFIG_MFD_RT5033 is not set # CONFIG_MFD_RTSX_USB is not set # CONFIG_MFD_RC5T583 is not set # CONFIG_MFD_RK808 is not set @@ -2218,6 +2247,7 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_SEC_CORE is not set # CONFIG_MFD_SI476X_CORE is not set # CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SKY81452 is not set # CONFIG_MFD_SMSC is not set # CONFIG_ABX500_CORE is not set CONFIG_MFD_STMPE=y @@ -2264,7 +2294,36 @@ CONFIG_MFD_WM5102=y # CONFIG_MFD_WM831X_SPI is not set # CONFIG_MFD_WM8350_I2C is not set # CONFIG_MFD_WM8994 is not set -# CONFIG_REGULATOR is not set +CONFIG_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_REGULATOR_FIXED_VOLTAGE=m +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set +# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set +# CONFIG_REGULATOR_ACT8865 is not set +# CONFIG_REGULATOR_AD5398 is not set +CONFIG_REGULATOR_ARIZONA=m +# CONFIG_REGULATOR_DA9210 is not set +# CONFIG_REGULATOR_DA9211 is not set +# CONFIG_REGULATOR_FAN53555 is not set +# CONFIG_REGULATOR_GPIO is not set +# CONFIG_REGULATOR_ISL9305 is not set +# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_LP872X is not set +# CONFIG_REGULATOR_LP8755 is not set +# CONFIG_REGULATOR_LTC3589 is not set +# CONFIG_REGULATOR_MAX1586 is not set +# CONFIG_REGULATOR_MAX8649 is not set +# CONFIG_REGULATOR_MAX8660 is not set +# CONFIG_REGULATOR_MAX8952 is not set +# CONFIG_REGULATOR_MAX8973 is not set +# CONFIG_REGULATOR_PFUZE100 is not set +# CONFIG_REGULATOR_TPS51632 is not set +# CONFIG_REGULATOR_TPS62360 is not set +# CONFIG_REGULATOR_TPS65023 is not set +# CONFIG_REGULATOR_TPS6507X is not set +# CONFIG_REGULATOR_TPS6524X is not set CONFIG_MEDIA_SUPPORT=m # @@ -2319,9 +2378,9 @@ CONFIG_IR_IMON=m CONFIG_IR_MCEUSB=m CONFIG_IR_REDRAT3=m CONFIG_IR_STREAMZAP=m +# CONFIG_IR_IGORPLUGUSB is not set CONFIG_IR_IGUANA=m CONFIG_IR_TTUSBIR=m -# CONFIG_IR_IMG is not set CONFIG_RC_LOOPBACK=m CONFIG_IR_GPIO_CIR=m CONFIG_MEDIA_USB_SUPPORT=y @@ -2375,6 +2434,7 @@ CONFIG_USB_GSPCA_STV0680=m CONFIG_USB_GSPCA_SUNPLUS=m CONFIG_USB_GSPCA_T613=m CONFIG_USB_GSPCA_TOPRO=m +# CONFIG_USB_GSPCA_TOUPTEK is not set CONFIG_USB_GSPCA_TV8532=m CONFIG_USB_GSPCA_VC032X=m CONFIG_USB_GSPCA_VICAM=m @@ -2387,7 +2447,7 @@ CONFIG_VIDEO_CPIA2=m CONFIG_USB_ZR364XX=m CONFIG_USB_STKWEBCAM=m CONFIG_USB_S2255=m -# CONFIG_VIDEO_USBTV is not set +CONFIG_VIDEO_USBTV=m # # Analog TV USB devices @@ -2397,7 +2457,6 @@ CONFIG_VIDEO_PVRUSB2_SYSFS=y CONFIG_VIDEO_PVRUSB2_DVB=y # CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set CONFIG_VIDEO_HDPVR=m -CONFIG_VIDEO_TLG2300=m CONFIG_VIDEO_USBVISION=m # CONFIG_VIDEO_STK1160_COMMON is not set # CONFIG_VIDEO_GO7007 is not set @@ -2473,9 +2532,8 @@ CONFIG_VIDEO_EM28XX_ALSA=m CONFIG_VIDEO_EM28XX_DVB=m CONFIG_VIDEO_EM28XX_RC=m CONFIG_V4L_PLATFORM_DRIVERS=y -# CONFIG_SOC_CAMERA is not set CONFIG_VIDEO_BCM2835=y -CONFIG_VIDEO_BCM2835_MMAL=m +# CONFIG_SOC_CAMERA is not set # CONFIG_V4L_MEM2MEM_DRIVERS is not set # CONFIG_V4L_TEST_DRIVERS is not set @@ -2602,7 +2660,6 @@ CONFIG_MEDIA_TUNER_FC0013=m CONFIG_MEDIA_TUNER_TDA18212=m CONFIG_MEDIA_TUNER_E4000=m CONFIG_MEDIA_TUNER_FC2580=m -CONFIG_MEDIA_TUNER_M88TS2022=m CONFIG_MEDIA_TUNER_TUA9001=m CONFIG_MEDIA_TUNER_SI2157=m CONFIG_MEDIA_TUNER_IT913X=m @@ -2681,6 +2738,7 @@ CONFIG_DVB_NXT200X=m CONFIG_DVB_BCM3510=m CONFIG_DVB_LGDT330X=m CONFIG_DVB_LGDT3305=m +CONFIG_DVB_LGDT3306A=m CONFIG_DVB_LG2160=m CONFIG_DVB_S5H1409=m CONFIG_DVB_AU8522=m @@ -2695,6 +2753,10 @@ CONFIG_DVB_S921=m CONFIG_DVB_DIB8000=m CONFIG_DVB_MB86A20S=m +# +# ISDB-S (satellite) & ISDB-T (terrestrial) frontends +# + # # Digital terrestrial only tuners/PLL # @@ -2739,9 +2801,9 @@ CONFIG_FB=y CONFIG_FB_CMDLINE=y # CONFIG_FB_DDC is not set # CONFIG_FB_BOOT_VESA_SUPPORT is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_FILLRECT is not set +# CONFIG_FB_CFB_COPYAREA is not set +# CONFIG_FB_CFB_IMAGEBLIT is not set # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set CONFIG_FB_SYS_FILLRECT=m CONFIG_FB_SYS_COPYAREA=m @@ -2758,7 +2820,6 @@ CONFIG_FB_BACKLIGHT=y # # Frame buffer hardware drivers # -CONFIG_FB_BCM2708=y # CONFIG_FB_ARMCLCD is not set # CONFIG_FB_UVESA is not set # CONFIG_FB_OPENCORES is not set @@ -2771,6 +2832,7 @@ CONFIG_FB_BCM2708=y # CONFIG_FB_AUO_K190X is not set # CONFIG_FB_SIMPLE is not set # CONFIG_FB_SSD1307 is not set +CONFIG_FB_RPISENSE=m CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_LCD_CLASS_DEVICE=m # CONFIG_LCD_L4F00242T03 is not set @@ -2849,7 +2911,6 @@ CONFIG_SND_MPU401=m # CONFIG_SND_ARM=y # CONFIG_SND_ARMAACI is not set -CONFIG_SND_BCM2835=m CONFIG_SND_SPI=y CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=m @@ -2859,6 +2920,10 @@ CONFIG_SND_USB_CAIAQ_INPUT=y CONFIG_SND_USB_6FIRE=m # CONFIG_SND_USB_HIFACE is not set # CONFIG_SND_BCD2000 is not set +# CONFIG_SND_USB_POD is not set +# CONFIG_SND_USB_PODHD is not set +# CONFIG_SND_USB_TONEPORT is not set +# CONFIG_SND_USB_VARIAX is not set CONFIG_SND_SOC=m CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_ATMEL_SOC is not set @@ -2870,6 +2935,9 @@ CONFIG_SND_BCM2708_SOC_HIFIBERRY_AMP=m CONFIG_SND_BCM2708_SOC_RPI_DAC=m CONFIG_SND_BCM2708_SOC_RPI_PROTO=m CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC=m +CONFIG_SND_BCM2708_SOC_RASPIDAC3=m +CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP_PREINIT=m +CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP=m # CONFIG_SND_DESIGNWARE_I2S is not set # @@ -2885,11 +2953,15 @@ CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC=m # CONFIG_SND_SOC_FSL_SPDIF is not set # CONFIG_SND_SOC_FSL_ESAI is not set # CONFIG_SND_SOC_IMX_AUDMUX is not set +# CONFIG_SND_SOC_QCOM is not set +# CONFIG_SND_SOC_XTFPGA_I2S is not set CONFIG_SND_SOC_I2C_AND_SPI=m # # CODEC drivers # +CONFIG_SND_SOC_ARIZONA=m +CONFIG_SND_SOC_WM_ADSP=m # CONFIG_SND_SOC_ADAU1701 is not set # CONFIG_SND_SOC_AK4104 is not set # CONFIG_SND_SOC_AK4554 is not set @@ -2897,12 +2969,14 @@ CONFIG_SND_SOC_I2C_AND_SPI=m # CONFIG_SND_SOC_AK5386 is not set # CONFIG_SND_SOC_ALC5623 is not set # CONFIG_SND_SOC_CS35L32 is not set +# CONFIG_SND_SOC_CS42L51_I2C is not set # CONFIG_SND_SOC_CS42L52 is not set # CONFIG_SND_SOC_CS42L56 is not set # CONFIG_SND_SOC_CS42L73 is not set # CONFIG_SND_SOC_CS4265 is not set # CONFIG_SND_SOC_CS4270 is not set -# CONFIG_SND_SOC_CS4271 is not set +# CONFIG_SND_SOC_CS4271_I2C is not set +# CONFIG_SND_SOC_CS4271_SPI is not set # CONFIG_SND_SOC_CS42XX8_I2C is not set # CONFIG_SND_SOC_HDMI_CODEC is not set # CONFIG_SND_SOC_ES8328 is not set @@ -2913,18 +2987,26 @@ CONFIG_SND_SOC_PCM512x_I2C=m # CONFIG_SND_SOC_PCM512x_SPI is not set CONFIG_SND_SOC_PCM1794A=m CONFIG_SND_SOC_PCM5102A=m +# CONFIG_SND_SOC_RT5631 is not set +# CONFIG_SND_SOC_RT5677_SPI is not set # CONFIG_SND_SOC_SGTL5000 is not set # CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set # CONFIG_SND_SOC_SPDIF is not set # CONFIG_SND_SOC_SSM2602_SPI is not set # CONFIG_SND_SOC_SSM2602_I2C is not set # CONFIG_SND_SOC_SSM4567 is not set +# CONFIG_SND_SOC_STA32X is not set # CONFIG_SND_SOC_STA350 is not set # CONFIG_SND_SOC_TAS2552 is not set # CONFIG_SND_SOC_TAS5086 is not set +# CONFIG_SND_SOC_TFA9879 is not set CONFIG_SND_SOC_TAS5713=m +# CONFIG_SND_SOC_TLV320AIC23_I2C is not set +# CONFIG_SND_SOC_TLV320AIC23_SPI is not set # CONFIG_SND_SOC_TLV320AIC31XX is not set # CONFIG_SND_SOC_TLV320AIC3X is not set +# CONFIG_SND_SOC_TS3A227E is not set +CONFIG_SND_SOC_WM5102=m # CONFIG_SND_SOC_WM8510 is not set # CONFIG_SND_SOC_WM8523 is not set # CONFIG_SND_SOC_WM8580 is not set @@ -2938,10 +3020,12 @@ CONFIG_SND_SOC_WM8731=m # CONFIG_SND_SOC_WM8770 is not set # CONFIG_SND_SOC_WM8776 is not set CONFIG_SND_SOC_WM8804=m +CONFIG_SND_SOC_WM8804_I2C=m +# CONFIG_SND_SOC_WM8804_SPI is not set # CONFIG_SND_SOC_WM8903 is not set # CONFIG_SND_SOC_WM8962 is not set # CONFIG_SND_SOC_WM8978 is not set -# CONFIG_SND_SOC_TPA6130A2 is not set +CONFIG_SND_SOC_TPA6130A2=m CONFIG_SND_SIMPLE_CARD=m CONFIG_SOUND_PRIME=m @@ -2964,6 +3048,7 @@ CONFIG_HID_APPLE=m # CONFIG_HID_APPLEIR is not set # CONFIG_HID_AUREAL is not set CONFIG_HID_BELKIN=m +# CONFIG_HID_BETOP_FF is not set CONFIG_HID_CHERRY=m CONFIG_HID_CHICONY=m # CONFIG_HID_PRODIKEYS is not set @@ -2978,7 +3063,6 @@ CONFIG_HID_EZKEY=m CONFIG_HID_HOLTEK=m # CONFIG_HOLTEK_FF is not set # CONFIG_HID_GT683R is not set -# CONFIG_HID_HUION is not set CONFIG_HID_KEYTOUCH=m CONFIG_HID_KYE=m CONFIG_HID_UCLOGIC=m @@ -3012,6 +3096,7 @@ CONFIG_HID_PICOLCD=m # CONFIG_HID_PICOLCD_LCD is not set # CONFIG_HID_PICOLCD_LEDS is not set # CONFIG_HID_PICOLCD_CIR is not set +# CONFIG_HID_PLANTRONICS is not set # CONFIG_HID_PRIMAX is not set CONFIG_HID_ROCCAT=m # CONFIG_HID_SAITEK is not set @@ -3062,6 +3147,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y # CONFIG_USB_DEFAULT_PERSIST=y # CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG is not set # CONFIG_USB_OTG_WHITELIST is not set # CONFIG_USB_OTG_BLACKLIST_HUB is not set # CONFIG_USB_OTG_FSM is not set @@ -3076,7 +3162,6 @@ CONFIG_USB_MON=m # CONFIG_USB_EHCI_HCD is not set # CONFIG_USB_OXU210HP_HCD is not set # CONFIG_USB_ISP116X_HCD is not set -# CONFIG_USB_ISP1760_HCD is not set # CONFIG_USB_ISP1362_HCD is not set # CONFIG_USB_FUSBH200_HCD is not set # CONFIG_USB_FOTG210_HCD is not set @@ -3108,6 +3193,7 @@ CONFIG_USB_WDM=m CONFIG_USB_STORAGE=y # CONFIG_USB_STORAGE_DEBUG is not set CONFIG_USB_STORAGE_REALTEK=m +CONFIG_REALTEK_AUTOPM=y CONFIG_USB_STORAGE_DATAFAB=m CONFIG_USB_STORAGE_FREECOM=m CONFIG_USB_STORAGE_ISD200=m @@ -3134,6 +3220,7 @@ CONFIG_USBIP_HOST=m # CONFIG_USB_MUSB_HDRC is not set # CONFIG_USB_DWC3 is not set # CONFIG_USB_DWC2 is not set +# CONFIG_USB_ISP1760 is not set # # USB port drivers @@ -3230,6 +3317,7 @@ CONFIG_USB_YUREX=m CONFIG_USB_EZUSB_FX2=m # CONFIG_USB_HSIC_USB3503 is not set # CONFIG_USB_LINK_LAYER_TEST is not set +# CONFIG_USB_CHAOSKEY is not set # # USB Physical Layer drivers @@ -3267,8 +3355,7 @@ CONFIG_MMC_BCM2835_SDHOST=y CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_PLTFM=y # CONFIG_MMC_SDHCI_OF_ARASAN is not set -# CONFIG_MMC_SDHCI_PXAV3 is not set -# CONFIG_MMC_SDHCI_PXAV2 is not set +# CONFIG_MMC_SDHCI_F_SDH30 is not set CONFIG_MMC_SPI=m # CONFIG_MMC_DW is not set # CONFIG_MMC_VUB300 is not set @@ -3277,6 +3364,7 @@ CONFIG_MMC_SPI=m # CONFIG_MEMSTICK is not set CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y +CONFIG_LEDS_CLASS_FLASH=y # # LED drivers @@ -3290,9 +3378,11 @@ CONFIG_LEDS_GPIO=y # CONFIG_LEDS_LP5523 is not set # CONFIG_LEDS_LP5562 is not set # CONFIG_LEDS_LP8501 is not set +# CONFIG_LEDS_LP8860 is not set # CONFIG_LEDS_PCA955X is not set # CONFIG_LEDS_PCA963X is not set # CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_REGULATOR is not set # CONFIG_LEDS_BD2802 is not set # CONFIG_LEDS_LT3593 is not set # CONFIG_LEDS_TCA6507 is not set @@ -3302,6 +3392,7 @@ CONFIG_LEDS_GPIO=y # LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) # # CONFIG_LEDS_BLINKM is not set +# CONFIG_LEDS_PM8941_WLED is not set # # LED Triggers @@ -3342,8 +3433,11 @@ CONFIG_RTC_INTF_DEV=y # # I2C RTC drivers # +# CONFIG_RTC_DRV_ABB5ZES3 is not set +# CONFIG_RTC_DRV_ABX80X is not set CONFIG_RTC_DRV_DS1307=m CONFIG_RTC_DRV_DS1374=m +# CONFIG_RTC_DRV_DS1374_WDT is not set CONFIG_RTC_DRV_DS1672=m CONFIG_RTC_DRV_DS3232=m # CONFIG_RTC_DRV_HYM8563 is not set @@ -3392,6 +3486,7 @@ CONFIG_RTC_DRV_RX4581=m # CONFIG_RTC_DRV_DS1286 is not set # CONFIG_RTC_DRV_DS1511 is not set # CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1685_FAMILY is not set # CONFIG_RTC_DRV_DS1742 is not set # CONFIG_RTC_DRV_DS2404 is not set # CONFIG_RTC_DRV_STK17TA8 is not set @@ -3422,10 +3517,10 @@ CONFIG_DMADEVICES=y # DMA Devices # # CONFIG_AMBA_PL08X is not set -# CONFIG_DW_DMAC_CORE is not set # CONFIG_DW_DMAC is not set # CONFIG_PL330_DMA is not set CONFIG_DMA_BCM2708=y +CONFIG_DMA_BCM2708_LEGACY=y # CONFIG_FSL_EDMA is not set # CONFIG_NBPFAXI_DMA is not set CONFIG_DMA_ENGINE=y @@ -3461,9 +3556,7 @@ CONFIG_88EU_AP_MODE=y CONFIG_R8723AU=m CONFIG_8723AU_AP_MODE=y CONFIG_8723AU_BT_COEXIST=y -# CONFIG_LINE6_USB is not set CONFIG_VT6656=m -# CONFIG_BCM_WIMAX is not set # CONFIG_FT1000 is not set # @@ -3481,13 +3574,12 @@ CONFIG_SPEAKUP_SYNTH_SOFT=m # CONFIG_SPEAKUP_SYNTH_SPKOUT is not set # CONFIG_SPEAKUP_SYNTH_TXPRT is not set # CONFIG_SPEAKUP_SYNTH_DUMMY is not set -# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set # CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set CONFIG_STAGING_MEDIA=y # CONFIG_I2C_BCM2048 is not set -# CONFIG_VIDEO_TCM825X is not set +# CONFIG_DVB_MN88472 is not set +# CONFIG_DVB_MN88473 is not set CONFIG_LIRC_STAGING=y -CONFIG_LIRC_IGORPLUGUSB=m CONFIG_LIRC_IMON=m CONFIG_LIRC_RPI=m CONFIG_LIRC_SASEM=m @@ -3499,19 +3591,20 @@ CONFIG_LIRC_SERIAL_TRANSMITTER=y # # Android # -# CONFIG_ANDROID is not set # CONFIG_USB_WPAN_HCD is not set # CONFIG_WIMAX_GDM72XX is not set # CONFIG_LTE_GDM724X is not set # CONFIG_LUSTRE_FS is not set # CONFIG_DGAP is not set # CONFIG_GS_FPGABOOT is not set +# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set CONFIG_FB_TFT=m CONFIG_FB_TFT_AGM1264K_FL=m CONFIG_FB_TFT_BD663474=m CONFIG_FB_TFT_HX8340BN=m CONFIG_FB_TFT_HX8347D=m CONFIG_FB_TFT_HX8353D=m +CONFIG_FB_TFT_ILI9163=m CONFIG_FB_TFT_ILI9320=m CONFIG_FB_TFT_ILI9325=m CONFIG_FB_TFT_ILI9340=m @@ -3534,11 +3627,7 @@ CONFIG_FB_TFT_UPD161704=m CONFIG_FB_TFT_WATTEROTT=m CONFIG_FB_FLEX=m CONFIG_FB_TFT_FBTFT_DEVICE=m - -# -# SOC (System On Chip) specific Drivers -# -# CONFIG_SOC_TI is not set +# CONFIG_CHROME_PLATFORMS is not set CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_COMMON_CLK=y @@ -3548,8 +3637,9 @@ CONFIG_COMMON_CLK=y # # CONFIG_COMMON_CLK_SI5351 is not set # CONFIG_COMMON_CLK_SI570 is not set +# CONFIG_CLK_QORIQ is not set # CONFIG_COMMON_CLK_PXA is not set -# CONFIG_COMMON_CLK_QCOM is not set +# CONFIG_COMMON_CLK_CDCE706 is not set # # Hardware Spinlock drivers @@ -3563,7 +3653,6 @@ CONFIG_COMMON_CLK=y # CONFIG_SH_TIMER_MTU2 is not set # CONFIG_SH_TIMER_TMU is not set # CONFIG_EM_TIMER_STI is not set -# CONFIG_CLKSRC_VERSATILE is not set # CONFIG_MAILBOX is not set # CONFIG_IOMMU_SUPPORT is not set @@ -3579,6 +3668,7 @@ CONFIG_COMMON_CLK=y # # SOC (System On Chip) specific Drivers # +# CONFIG_SOC_TI is not set # CONFIG_PM_DEVFREQ is not set CONFIG_EXTCON=m @@ -3589,6 +3679,7 @@ CONFIG_EXTCON_ARIZONA=m # CONFIG_EXTCON_GPIO is not set # CONFIG_EXTCON_RT8973A is not set # CONFIG_EXTCON_SM5502 is not set +# CONFIG_EXTCON_USB_GPIO is not set # CONFIG_MEMORY is not set # CONFIG_IIO is not set # CONFIG_PWM is not set @@ -3605,6 +3696,16 @@ CONFIG_IRQCHIP=y # CONFIG_POWERCAP is not set # CONFIG_MCB is not set +# +# Android +# +# CONFIG_ANDROID is not set + +# +# Firmware Drivers +# +# CONFIG_FIRMWARE_MEMMAP is not set + # # File systems # @@ -3615,6 +3716,7 @@ CONFIG_EXT4_FS=y CONFIG_EXT4_USE_FOR_EXT23=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_ENCRYPTION is not set # CONFIG_EXT4_DEBUG is not set CONFIG_JBD2=y # CONFIG_JBD2_DEBUG is not set @@ -3651,6 +3753,12 @@ CONFIG_BTRFS_FS_POSIX_ACL=y # CONFIG_BTRFS_DEBUG is not set # CONFIG_BTRFS_ASSERT is not set CONFIG_NILFS2_FS=m +CONFIG_F2FS_FS=y +CONFIG_F2FS_STAT_FS=y +CONFIG_F2FS_FS_XATTR=y +CONFIG_F2FS_FS_POSIX_ACL=y +# CONFIG_F2FS_FS_SECURITY is not set +# CONFIG_F2FS_CHECK_FS is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y CONFIG_FILE_LOCKING=y @@ -3669,7 +3777,7 @@ CONFIG_QUOTACTL=y CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m CONFIG_CUSE=m -# CONFIG_OVERLAY_FS is not set +CONFIG_OVERLAY_FS=m # # Caches @@ -3738,6 +3846,7 @@ CONFIG_SQUASHFS_DECOMP_SINGLE=y # CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set CONFIG_SQUASHFS_XATTR=y CONFIG_SQUASHFS_ZLIB=y +CONFIG_SQUASHFS_LZ4=y CONFIG_SQUASHFS_LZO=y CONFIG_SQUASHFS_XZ=y # CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set @@ -3753,12 +3862,6 @@ CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 # CONFIG_PSTORE is not set # CONFIG_SYSV_FS is not set # CONFIG_UFS_FS is not set -CONFIG_F2FS_FS=y -CONFIG_F2FS_STAT_FS=y -CONFIG_F2FS_FS_XATTR=y -CONFIG_F2FS_FS_POSIX_ACL=y -# CONFIG_F2FS_FS_SECURITY is not set -# CONFIG_F2FS_CHECK_FS is not set CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y CONFIG_NFS_V2=y @@ -3776,6 +3879,7 @@ CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y +CONFIG_NFSD_PNFS=y # CONFIG_NFSD_FAULT_INJECTION is not set CONFIG_GRACE_PERIOD=y CONFIG_LOCKD=y @@ -3881,6 +3985,7 @@ CONFIG_FRAME_WARN=1024 # CONFIG_STRIP_ASM_SYMS is not set # CONFIG_READABLE_ASM is not set # CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_PAGE_OWNER is not set CONFIG_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set # CONFIG_DEBUG_SECTION_MISMATCH is not set @@ -3892,6 +3997,7 @@ CONFIG_DEBUG_KERNEL=y # # Memory Debugging # +# CONFIG_PAGE_EXTENSION is not set # CONFIG_DEBUG_PAGEALLOC is not set # CONFIG_DEBUG_OBJECTS is not set # CONFIG_SLUB_DEBUG_ON is not set @@ -3917,6 +4023,7 @@ CONFIG_PANIC_TIMEOUT=0 CONFIG_SCHED_DEBUG=y CONFIG_SCHEDSTATS=y # CONFIG_SCHED_STACK_END_CHECK is not set +# CONFIG_DEBUG_TIMEKEEPING is not set CONFIG_TIMER_STATS=y # CONFIG_DEBUG_PREEMPT is not set @@ -3945,11 +4052,11 @@ CONFIG_DEBUG_BUGVERBOSE=y # # RCU Debugging # +# CONFIG_PROVE_RCU is not set # CONFIG_SPARSE_RCU_POINTER is not set # CONFIG_TORTURE_TEST is not set # CONFIG_RCU_TORTURE_TEST is not set CONFIG_RCU_CPU_STALL_TIMEOUT=21 -CONFIG_RCU_CPU_STALL_VERBOSE=y # CONFIG_RCU_CPU_STALL_INFO is not set # CONFIG_RCU_TRACE is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set @@ -3998,6 +4105,7 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_PERCPU_TEST is not set # CONFIG_ATOMIC64_SELFTEST is not set # CONFIG_ASYNC_RAID6_TEST is not set +# CONFIG_TEST_HEXDUMP is not set # CONFIG_TEST_STRING_HELPERS is not set # CONFIG_TEST_KSTRTOX is not set # CONFIG_TEST_RHASHTABLE is not set @@ -4007,12 +4115,14 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_TEST_BPF is not set # CONFIG_TEST_FIRMWARE is not set # CONFIG_TEST_UDELAY is not set +# CONFIG_MEMTEST is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y CONFIG_KGDB=y CONFIG_KGDB_SERIAL_CONSOLE=y # CONFIG_KGDB_TESTS is not set CONFIG_KGDB_KDB=y +CONFIG_KDB_DEFAULT_ENABLE=0x1 CONFIG_KDB_KEYBOARD=y CONFIG_KDB_CONTINUE_CATASTROPHIC=0 # CONFIG_ARM_PTDUMP is not set @@ -4021,14 +4131,13 @@ CONFIG_ARM_UNWIND=y # CONFIG_DEBUG_USER is not set # CONFIG_DEBUG_LL is not set CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" -# CONFIG_DEBUG_UART_PL01X is not set # CONFIG_DEBUG_UART_8250 is not set # CONFIG_DEBUG_UART_BCM63XX is not set CONFIG_UNCOMPRESS_INCLUDE="mach/uncompress.h" -# CONFIG_OC_ETM is not set # CONFIG_ARM_KPROBES_TEST is not set # CONFIG_PID_IN_CONTEXTIDR is not set # CONFIG_DEBUG_SET_MODULE_RONX is not set +# CONFIG_CORESIGHT is not set # # Security options @@ -4037,7 +4146,6 @@ CONFIG_KEYS=y # CONFIG_PERSISTENT_KEYRINGS is not set # CONFIG_BIG_KEYS is not set # CONFIG_ENCRYPTED_KEYS is not set -# CONFIG_KEYS_DEBUG_PROC_KEYS is not set # CONFIG_SECURITY_DMESG_RESTRICT is not set # CONFIG_SECURITY is not set # CONFIG_SECURITYFS is not set @@ -4081,7 +4189,7 @@ CONFIG_CRYPTO_AUTHENC=m # Authenticated Encryption with Associated Data # CONFIG_CRYPTO_CCM=m -# CONFIG_CRYPTO_GCM is not set +CONFIG_CRYPTO_GCM=m CONFIG_CRYPTO_SEQIV=m # @@ -4109,7 +4217,7 @@ CONFIG_CRYPTO_XCBC=m CONFIG_CRYPTO_CRC32C=y # CONFIG_CRYPTO_CRC32 is not set # CONFIG_CRYPTO_CRCT10DIF is not set -# CONFIG_CRYPTO_GHASH is not set +CONFIG_CRYPTO_GHASH=m CONFIG_CRYPTO_MD4=m CONFIG_CRYPTO_MD5=m CONFIG_CRYPTO_MICHAEL_MIC=m @@ -4118,7 +4226,6 @@ CONFIG_CRYPTO_MICHAEL_MIC=m # CONFIG_CRYPTO_RMD256 is not set # CONFIG_CRYPTO_RMD320 is not set CONFIG_CRYPTO_SHA1=m -CONFIG_CRYPTO_SHA1_ARM=m CONFIG_CRYPTO_SHA256=m CONFIG_CRYPTO_SHA512=m CONFIG_CRYPTO_TGR192=m @@ -4128,7 +4235,6 @@ CONFIG_CRYPTO_WP512=m # Ciphers # CONFIG_CRYPTO_AES=y -CONFIG_CRYPTO_AES_ARM=m # CONFIG_CRYPTO_ANUBIS is not set CONFIG_CRYPTO_ARC4=m # CONFIG_CRYPTO_BLOWFISH is not set @@ -4161,8 +4267,13 @@ CONFIG_CRYPTO_DEFLATE=m # CONFIG_CRYPTO_DRBG_MENU is not set # CONFIG_CRYPTO_USER_API_HASH is not set # CONFIG_CRYPTO_USER_API_SKCIPHER is not set +# CONFIG_CRYPTO_USER_API_RNG is not set # CONFIG_CRYPTO_HW is not set # CONFIG_ASYMMETRIC_KEY_TYPE is not set +CONFIG_ARM_CRYPTO=y +CONFIG_CRYPTO_SHA1_ARM=m +CONFIG_CRYPTO_SHA256_ARM=m +CONFIG_CRYPTO_AES_ARM=m # CONFIG_BINARY_PRINTF is not set # @@ -4170,6 +4281,7 @@ CONFIG_CRYPTO_DEFLATE=m # CONFIG_RAID6_PQ=m CONFIG_BITREVERSE=y +# CONFIG_HAVE_ARCH_BITREVERSE is not set CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_NET_UTILS=y @@ -4196,6 +4308,7 @@ CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=m CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_DECOMPRESS=m CONFIG_XZ_DEC=m # CONFIG_XZ_DEC_X86 is not set # CONFIG_XZ_DEC_POWERPC is not set diff --git a/main/linux-rpi/config-rpi2.armhf b/main/linux-rpi/config-rpi2.armhf index ea4cda2a4c..11a90338dd 100644 --- a/main/linux-rpi/config-rpi2.armhf +++ b/main/linux-rpi/config-rpi2.armhf @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 3.18.17 Kernel Configuration +# Linux/arm 4.1.10 Kernel Configuration # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -20,6 +20,7 @@ CONFIG_NEED_MACH_IO_H=y CONFIG_NEED_MACH_MEMORY_H=y CONFIG_PHYS_OFFSET=0 CONFIG_GENERIC_BUG=y +CONFIG_PGTABLE_LEVELS=2 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_EXTABLE_SORT=y @@ -60,13 +61,14 @@ CONFIG_HAVE_ARCH_AUDITSYSCALL=y # CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_IRQ_SHOW_LEVEL=y CONFIG_HARDIRQS_SW_RESEND=y CONFIG_IRQ_DOMAIN=y CONFIG_HANDLE_DOMAIN_IRQ=y # CONFIG_IRQ_DOMAIN_DEBUG is not set CONFIG_IRQ_FORCED_THREADING=y +CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_GENERIC_CLOCKEVENTS_BUILD=y CONFIG_ARCH_HAS_TICK_BROADCAST=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y @@ -97,8 +99,8 @@ CONFIG_TASK_IO_ACCOUNTING=y # # RCU Subsystem # -CONFIG_TREE_PREEMPT_RCU=y CONFIG_PREEMPT_RCU=y +CONFIG_SRCU=y # CONFIG_TASKS_RCU is not set CONFIG_RCU_STALL_COMMON=y # CONFIG_RCU_USER_QS is not set @@ -108,7 +110,9 @@ CONFIG_RCU_FANOUT_LEAF=16 # CONFIG_RCU_FAST_NO_HZ is not set # CONFIG_TREE_RCU_TRACE is not set # CONFIG_RCU_BOOST is not set +CONFIG_RCU_KTHREAD_PRIO=0 # CONFIG_RCU_NOCB_CPU is not set +# CONFIG_RCU_EXPEDITE_BOOT is not set CONFIG_BUILD_BIN2C=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y @@ -121,7 +125,7 @@ CONFIG_CGROUP_FREEZER=y CONFIG_CGROUP_DEVICE=y # CONFIG_CPUSETS is not set CONFIG_CGROUP_CPUACCT=y -CONFIG_RESOURCE_COUNTERS=y +CONFIG_PAGE_COUNTER=y CONFIG_MEMCG=y # CONFIG_MEMCG_SWAP is not set # CONFIG_MEMCG_KMEM is not set @@ -157,6 +161,7 @@ CONFIG_HAVE_UID16=y CONFIG_BPF=y CONFIG_EXPERT=y CONFIG_UID16=y +CONFIG_MULTIUSER=y # CONFIG_SGETMASK_SYSCALL is not set CONFIG_SYSFS_SYSCALL=y # CONFIG_SYSCTL_SYSCALL is not set @@ -204,6 +209,7 @@ CONFIG_ARCH_USE_BUILTIN_BSWAP=y CONFIG_KRETPROBES=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_ATTRS=y CONFIG_HAVE_DMA_CONTIGUOUS=y @@ -229,6 +235,7 @@ CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_MODULES_USE_ELF_REL=y +CONFIG_ARCH_HAS_ELF_RANDOMIZE=y CONFIG_CLONE_BACKWARDS=y CONFIG_OLD_SIGSUSPEND3=y CONFIG_OLD_SIGACTION=y @@ -237,6 +244,7 @@ CONFIG_OLD_SIGACTION=y # GCOV-based kernel profiling # # CONFIG_GCOV_KERNEL is not set +CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y CONFIG_HAVE_GENERIC_DMA_COHERENT=y CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y @@ -297,18 +305,18 @@ CONFIG_UNINLINE_SPIN_UNLOCK=y CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_RWSEM_SPIN_ON_OWNER=y +CONFIG_LOCK_SPIN_ON_OWNER=y CONFIG_FREEZER=y # # System Type # CONFIG_MMU=y +# CONFIG_ARCH_BCM2708 is not set +CONFIG_ARCH_BCM2709=y # CONFIG_ARCH_MULTIPLATFORM is not set -# CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_REALVIEW is not set # CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_AT91 is not set -# CONFIG_ARCH_BCM2708 is not set # CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_GEMINI is not set # CONFIG_ARCH_EBSA110 is not set @@ -327,7 +335,6 @@ CONFIG_MMU=y # CONFIG_ARCH_W90X900 is not set # CONFIG_ARCH_LPC32XX is not set # CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_MSM is not set # CONFIG_ARCH_SHMOBILE_LEGACY is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set @@ -335,9 +342,7 @@ CONFIG_MMU=y # CONFIG_ARCH_S3C64XX is not set # CONFIG_ARCH_DAVINCI is not set # CONFIG_ARCH_OMAP1 is not set -CONFIG_ARCH_BCM2709=y CONFIG_BCM2708_GPIO=y -CONFIG_BCM2708_VCMEM=y CONFIG_BCM2708_NOL2CACHE=y CONFIG_BCM2708_SPIDEV=y @@ -373,14 +378,13 @@ CONFIG_ARM_THUMB=y CONFIG_ARM_VIRT_EXT=y CONFIG_SWP_EMULATE=y # CONFIG_CPU_ICACHE_DISABLE is not set -# CONFIG_CPU_DCACHE_DISABLE is not set # CONFIG_CPU_BPREDICT_DISABLE is not set CONFIG_KUSER_HELPERS=y +CONFIG_VDSO=y CONFIG_OUTER_CACHE=y CONFIG_OUTER_CACHE_SYNC=y CONFIG_MIGHT_HAVE_CACHE_L2X0=y CONFIG_CACHE_L2X0=y -CONFIG_CACHE_PL310=y # CONFIG_PL310_ERRATA_588369 is not set # CONFIG_PL310_ERRATA_727915 is not set # CONFIG_PL310_ERRATA_753970 is not set @@ -389,6 +393,7 @@ CONFIG_ARM_L1_CACHE_SHIFT_6=y CONFIG_ARM_L1_CACHE_SHIFT=6 CONFIG_ARM_DMA_MEM_BUFFERABLE=y CONFIG_ARCH_HAS_BARRIERS=y +# CONFIG_ARM_KERNMEM_PERMS is not set # CONFIG_ARM_ERRATA_430973 is not set # CONFIG_ARM_ERRATA_458693 is not set # CONFIG_ARM_ERRATA_460075 is not set @@ -408,7 +413,7 @@ CONFIG_ARCH_HAS_BARRIERS=y # # Bus support # -CONFIG_ARM_AMBA=y +# CONFIG_PCI_DOMAINS_GENERIC is not set # CONFIG_PCI_SYSCALL is not set # CONFIG_PCCARD is not set @@ -472,6 +477,7 @@ CONFIG_CLEANCACHE=y CONFIG_FRONTSWAP=y CONFIG_CMA=y # CONFIG_CMA_DEBUG is not set +# CONFIG_CMA_DEBUGFS is not set CONFIG_CMA_AREAS=7 # CONFIG_ZSWAP is not set # CONFIG_ZPOOL is not set @@ -525,13 +531,13 @@ 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 is not set # -# ARM CPU frequency scaling drivers +# CPU frequency scaling drivers # +# CONFIG_CPUFREQ_DT is not set # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set -CONFIG_ARM_BCM2835_CPUFREQ=y +# CONFIG_QORIQ_CPUFREQ is not set # # CPU Idle @@ -543,6 +549,7 @@ CONFIG_CPU_IDLE_GOV_MENU=y # # ARM CPU Idle Drivers # +# CONFIG_ARM_CPUIDLE is not set # CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set # @@ -561,7 +568,6 @@ CONFIG_KERNEL_MODE_NEON=y # Userspace binary formats # CONFIG_BINFMT_ELF=y -CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y CONFIG_BINFMT_SCRIPT=y # CONFIG_HAVE_AOUT is not set @@ -578,7 +584,6 @@ CONFIG_PM_SLEEP=y CONFIG_PM_SLEEP_SMP=y # CONFIG_PM_AUTOSLEEP is not set # CONFIG_PM_WAKELOCKS is not set -# CONFIG_PM_RUNTIME is not set CONFIG_PM=y # CONFIG_PM_DEBUG is not set # CONFIG_APM_EMULATION is not set @@ -631,6 +636,7 @@ CONFIG_SYN_COOKIES=y # CONFIG_NET_IPVTI is not set CONFIG_NET_UDP_TUNNEL=m # CONFIG_NET_FOU is not set +# CONFIG_NET_FOU_IP_TUNNELS is not set # CONFIG_GENEVE is not set CONFIG_INET_AH=m CONFIG_INET_ESP=m @@ -724,6 +730,7 @@ CONFIG_NF_NAT_FTP=m CONFIG_NF_NAT_IRC=m CONFIG_NF_NAT_SIP=m CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_REDIRECT=m # CONFIG_NF_TABLES is not set CONFIG_NETFILTER_XTABLES=m @@ -1057,6 +1064,9 @@ CONFIG_NET_ACT_PEDIT=m CONFIG_NET_ACT_SIMP=m CONFIG_NET_ACT_SKBEDIT=m CONFIG_NET_ACT_CSUM=m +# CONFIG_NET_ACT_VLAN is not set +CONFIG_NET_ACT_BPF=m +CONFIG_NET_ACT_CONNMARK=m # CONFIG_NET_CLS_IND is not set CONFIG_NET_SCH_FIFO=y # CONFIG_DCB is not set @@ -1068,12 +1078,15 @@ CONFIG_BATMAN_ADV_BLA=y # CONFIG_BATMAN_ADV_MCAST is not set # CONFIG_BATMAN_ADV_DEBUG is not set CONFIG_OPENVSWITCH=m -CONFIG_OPENVSWITCH_GRE=y +CONFIG_OPENVSWITCH_GRE=m # CONFIG_VSOCKETS is not set # CONFIG_NETLINK_MMAP is not set # CONFIG_NETLINK_DIAG is not set -# CONFIG_NET_MPLS_GSO is not set +CONFIG_MPLS=y +CONFIG_NET_MPLS_GSO=m +# CONFIG_MPLS_ROUTING is not set # CONFIG_HSR is not set +# CONFIG_NET_SWITCHDEV is not set CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_XPS=y @@ -1132,17 +1145,24 @@ CONFIG_USB_IRDA=m CONFIG_SIGMATEL_FIR=m CONFIG_MCS_FIR=m CONFIG_BT=m +CONFIG_BT_BREDR=y CONFIG_BT_RFCOMM=m CONFIG_BT_RFCOMM_TTY=y CONFIG_BT_BNEP=m CONFIG_BT_BNEP_MC_FILTER=y CONFIG_BT_BNEP_PROTO_FILTER=y CONFIG_BT_HIDP=m +CONFIG_BT_LE=y +# CONFIG_BT_SELFTEST is not set +# CONFIG_BT_DEBUGFS is not set # # Bluetooth device drivers # +CONFIG_BT_INTEL=m +CONFIG_BT_BCM=m CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIBTUSB_BCM=y # CONFIG_BT_HCIBTSDIO is not set # CONFIG_BT_HCIUART is not set CONFIG_BT_HCIBCM203X=m @@ -1179,6 +1199,7 @@ CONFIG_MAC80211=m CONFIG_MAC80211_HAS_RC=y CONFIG_MAC80211_RC_MINSTREL=y CONFIG_MAC80211_RC_MINSTREL_HT=y +# CONFIG_MAC80211_RC_MINSTREL_VHT is not set CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" CONFIG_MAC80211_MESH=y @@ -1191,6 +1212,7 @@ CONFIG_WIMAX_DEBUG_LEVEL=8 CONFIG_RFKILL=m CONFIG_RFKILL_LEDS=y CONFIG_RFKILL_INPUT=y +# CONFIG_RFKILL_REGULATOR is not set # CONFIG_RFKILL_GPIO is not set CONFIG_NET_9P=m # CONFIG_NET_9P_DEBUG is not set @@ -1211,6 +1233,8 @@ CONFIG_HAVE_BPF_JIT=y # # Device Drivers # +CONFIG_ARM_AMBA=y +# CONFIG_TEGRA_AHB is not set # # Generic Driver Options @@ -1226,7 +1250,9 @@ CONFIG_FIRMWARE_IN_KERNEL=y CONFIG_EXTRA_FIRMWARE="" CONFIG_FW_LOADER_USER_HELPER=y CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y +CONFIG_WANT_DEV_COREDUMP=y CONFIG_ALLOW_DEV_COREDUMP=y +CONFIG_DEV_COREDUMP=y # CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_DEVRES is not set # CONFIG_SYS_HYPERVISOR is not set @@ -1253,9 +1279,11 @@ CONFIG_CMA_ALIGNMENT=8 # # Bus devices # -# CONFIG_BRCMSTB_GISB_ARB is not set -# CONFIG_ARM_CCI is not set +CONFIG_ARM_CCI=y +CONFIG_ARM_CCI400_COMMON=y +CONFIG_ARM_CCI400_PMU=y # CONFIG_ARM_CCN is not set +# CONFIG_BRCMSTB_GISB_ARB is not set # CONFIG_VEXPRESS_CONFIG is not set CONFIG_CONNECTOR=m # CONFIG_MTD is not set @@ -1265,14 +1293,17 @@ CONFIG_OF=y # # Device Tree and Open Firmware support # -# CONFIG_OF_SELFTEST is not set +# CONFIG_OF_UNITTEST is not set CONFIG_OF_FLATTREE=y CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_DYNAMIC=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y CONFIG_OF_NET=y CONFIG_OF_MDIO=m CONFIG_OF_RESERVED_MEM=y +CONFIG_OF_RESOLVE=y +CONFIG_OF_OVERLAY=y CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_PARPORT is not set CONFIG_BLK_DEV=y @@ -1287,7 +1318,7 @@ CONFIG_BLK_DEV_NBD=m CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_XIP is not set +# CONFIG_BLK_DEV_PMEM is not set CONFIG_CDROM_PKTCDVD=m CONFIG_CDROM_PKTCDVD_BUFFERS=8 # CONFIG_CDROM_PKTCDVD_WCACHE is not set @@ -1299,6 +1330,7 @@ CONFIG_CDROM_PKTCDVD_BUFFERS=8 # Misc devices # # CONFIG_SENSORS_LIS3LV02D is not set +CONFIG_BCM2835_SMI=m # CONFIG_AD525X_DPOT is not set # CONFIG_DUMMY_IRQ is not set # CONFIG_ICS932S401 is not set @@ -1341,7 +1373,6 @@ CONFIG_TI_ST=m # Altera FPGA firmware download module # # CONFIG_ALTERA_STAPL is not set -CONFIG_BCM2708_VCHIQ=y # # Intel MIC Bus Driver @@ -1408,9 +1439,11 @@ CONFIG_MD_RAID10=m CONFIG_MD_RAID456=m # CONFIG_MD_MULTIPATH is not set # CONFIG_MD_FAULTY is not set +# CONFIG_MD_CLUSTER is not set # CONFIG_BCACHE is not set CONFIG_BLK_DEV_DM_BUILTIN=y CONFIG_BLK_DEV_DM=m +# CONFIG_DM_MQ_DEFAULT is not set # CONFIG_DM_DEBUG is not set CONFIG_DM_BUFIO=m CONFIG_DM_CRYPT=m @@ -1428,6 +1461,7 @@ CONFIG_DM_DELAY=m # CONFIG_DM_FLAKEY is not set # CONFIG_DM_VERITY is not set # CONFIG_DM_SWITCH is not set +# CONFIG_DM_LOG_WRITES is not set # CONFIG_TARGET_CORE is not set CONFIG_NETDEVICES=y CONFIG_MII=y @@ -1439,6 +1473,7 @@ CONFIG_IFB=m # CONFIG_NET_TEAM is not set CONFIG_MACVLAN=m # CONFIG_MACVTAP is not set +# CONFIG_IPVLAN is not set # CONFIG_VXLAN is not set CONFIG_NETCONSOLE=m # CONFIG_NETCONSOLE_DYNAMIC is not set @@ -1456,18 +1491,14 @@ CONFIG_VETH=m # Distributed Switch Architecture drivers # # CONFIG_NET_DSA_MV88E6XXX is not set -# CONFIG_NET_DSA_MV88E6060 is not set # CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set -# CONFIG_NET_DSA_MV88E6131 is not set -# CONFIG_NET_DSA_MV88E6123_61_65 is not set -# CONFIG_NET_DSA_MV88E6171 is not set -# CONFIG_NET_DSA_BCM_SF2 is not set CONFIG_ETHERNET=y # CONFIG_ALTERA_TSE is not set -# CONFIG_NET_XGENE is not set CONFIG_NET_VENDOR_ARC=y # CONFIG_ARC_EMAC is not set +# CONFIG_EMAC_ROCKCHIP is not set CONFIG_NET_CADENCE=y +# CONFIG_MACB is not set CONFIG_NET_VENDOR_BROADCOM=y # CONFIG_B44 is not set # CONFIG_BCMGENET is not set @@ -1496,6 +1527,7 @@ CONFIG_NET_VENDOR_8390=y # CONFIG_AX88796 is not set # CONFIG_ETHOC is not set # CONFIG_NET_VENDOR_QUALCOMM is not set +CONFIG_NET_VENDOR_ROCKER=y # CONFIG_NET_VENDOR_SAMSUNG is not set CONFIG_NET_VENDOR_SEEQ=y CONFIG_NET_VENDOR_SMSC=y @@ -1517,7 +1549,6 @@ CONFIG_PHYLIB=m # # CONFIG_AT803X_PHY is not set # CONFIG_AMD_PHY is not set -# CONFIG_AMD_XGBE_PHY is not set # CONFIG_MARVELL_PHY is not set # CONFIG_DAVICOM_PHY is not set # CONFIG_QSEMI_PHY is not set @@ -1534,6 +1565,7 @@ CONFIG_PHYLIB=m # CONFIG_STE10XP is not set # CONFIG_LSI_ET1011C_PHY is not set # CONFIG_MICREL_PHY is not set +# CONFIG_FIXED_PHY is not set CONFIG_MDIO_BITBANG=m # CONFIG_MDIO_GPIO is not set # CONFIG_MDIO_BUS_MUX_GPIO is not set @@ -1619,6 +1651,7 @@ CONFIG_ATH9K=m # CONFIG_ATH9K_WOW is not set CONFIG_ATH9K_RFKILL=y # CONFIG_ATH9K_CHANNEL_CONTEXT is not set +CONFIG_ATH9K_PCOEM=y CONFIG_ATH9K_HTC=m # CONFIG_ATH9K_HTC_DEBUGFS is not set CONFIG_CARL9170=m @@ -1694,6 +1727,7 @@ CONFIG_RT2X00_LIB_FIRMWARE=y CONFIG_RT2X00_LIB_CRYPTO=y CONFIG_RT2X00_LIB_LEDS=y # CONFIG_RT2X00_DEBUG is not set +# CONFIG_WL_MEDIATEK is not set CONFIG_RTL8192CU=m # CONFIG_WL_TI is not set CONFIG_ZD1211RW=m @@ -1765,6 +1799,7 @@ CONFIG_JOYSTICK_IFORCE_USB=y CONFIG_JOYSTICK_XPAD=m CONFIG_JOYSTICK_XPAD_FF=y # CONFIG_JOYSTICK_XPAD_LEDS is not set +CONFIG_JOYSTICK_RPISENSE=m # CONFIG_INPUT_TABLET is not set CONFIG_INPUT_TOUCHSCREEN=y CONFIG_OF_TOUCHSCREEN=y @@ -1775,6 +1810,7 @@ CONFIG_TOUCHSCREEN_ADS7846=m # CONFIG_TOUCHSCREEN_ATMEL_MXT is not set # CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set # CONFIG_TOUCHSCREEN_BU21013 is not set +# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set # CONFIG_TOUCHSCREEN_CY8CTMG110 is not set # CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set # CONFIG_TOUCHSCREEN_CYTTSP4_CORE is not set @@ -1783,8 +1819,10 @@ CONFIG_TOUCHSCREEN_ADS7846=m # CONFIG_TOUCHSCREEN_EETI is not set # CONFIG_TOUCHSCREEN_EGALAX is not set # CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GOODIX is not set # CONFIG_TOUCHSCREEN_ILI210X is not set # CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELAN is not set # CONFIG_TOUCHSCREEN_ELO is not set # CONFIG_TOUCHSCREEN_WACOM_W8001 is not set # CONFIG_TOUCHSCREEN_WACOM_I2C is not set @@ -1807,6 +1845,7 @@ CONFIG_TOUCHSCREEN_ADS7846=m # CONFIG_TOUCHSCREEN_ST1232 is not set CONFIG_TOUCHSCREEN_STMPE=m # CONFIG_TOUCHSCREEN_SUR40 is not set +# CONFIG_TOUCHSCREEN_SX8654 is not set # CONFIG_TOUCHSCREEN_TPS6507X is not set # CONFIG_TOUCHSCREEN_ZFORCE is not set CONFIG_INPUT_MISC=y @@ -1815,6 +1854,7 @@ CONFIG_INPUT_AD714X_I2C=m CONFIG_INPUT_AD714X_SPI=m # CONFIG_INPUT_ARIZONA_HAPTICS is not set # CONFIG_INPUT_BMA150 is not set +# CONFIG_INPUT_E3X0_BUTTON is not set # CONFIG_INPUT_MMA8450 is not set # CONFIG_INPUT_MPU3050 is not set # CONFIG_INPUT_GP2A is not set @@ -1826,6 +1866,7 @@ CONFIG_INPUT_KEYSPAN_REMOTE=m CONFIG_INPUT_POWERMATE=m CONFIG_INPUT_YEALINK=m CONFIG_INPUT_CM109=m +# CONFIG_INPUT_REGULATOR_HAPTIC is not set CONFIG_INPUT_UINPUT=m # CONFIG_INPUT_PCF8574 is not set CONFIG_INPUT_GPIO_ROTARY_ENCODER=m @@ -1870,6 +1911,7 @@ CONFIG_DEVPTS_MULTIPLE_INSTANCES=y # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_N_GSM is not set # CONFIG_TRACE_SINK is not set +CONFIG_DEVMEM=y # CONFIG_DEVKMEM is not set # @@ -1893,26 +1935,30 @@ CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_CONSOLE_POLL=y # CONFIG_SERIAL_SCCNXP is not set # CONFIG_SERIAL_SC16IS7XX is not set +CONFIG_SERIAL_BCM63XX=m # CONFIG_SERIAL_ALTERA_JTAGUART is not set # CONFIG_SERIAL_ALTERA_UART is not set # CONFIG_SERIAL_IFX6X60 is not set # CONFIG_SERIAL_XILINX_PS_UART is not set # CONFIG_SERIAL_ARC is not set # CONFIG_SERIAL_FSL_LPUART is not set +# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set # CONFIG_SERIAL_ST_ASC is not set CONFIG_TTY_PRINTK=y # CONFIG_HVC_DCC is not set # CONFIG_IPMI_HANDLER is not set CONFIG_HW_RANDOM=y # CONFIG_HW_RANDOM_TIMERIOMEM is not set +CONFIG_HW_RANDOM_BCM2835=y CONFIG_HW_RANDOM_BCM2708=m # CONFIG_R3964 is not set CONFIG_RAW_DRIVER=y CONFIG_MAX_RAW_DEVS=256 # CONFIG_TCG_TPM is not set CONFIG_BRCM_CHAR_DRIVERS=y -CONFIG_BCM_VC_CMA=y -CONFIG_BCM_VC_SM=y +CONFIG_BCM2708_VCMEM=y +CONFIG_BCM2835_DEVGPIOMEM=y +CONFIG_BCM2835_SMI_DEV=m # CONFIG_XILLYBUS is not set # @@ -1938,13 +1984,13 @@ CONFIG_I2C_ALGOBIT=m # # I2C Hardware Bus support # +CONFIG_I2C_BCM2708=m +CONFIG_I2C_BCM2708_BAUDRATE=100000 # # I2C system bus drivers (mostly embedded / system-on-chip) # CONFIG_I2C_BCM2835=m -CONFIG_I2C_BCM2708=m -CONFIG_I2C_BCM2708_BAUDRATE=100000 # CONFIG_I2C_CBUS_GPIO is not set # CONFIG_I2C_DESIGNWARE_PLATFORM is not set # CONFIG_I2C_GPIO is not set @@ -1969,6 +2015,7 @@ CONFIG_I2C_BCM2708_BAUDRATE=100000 # Other I2C/SMBus bus drivers # # CONFIG_I2C_STUB is not set +# CONFIG_I2C_SLAVE is not set # CONFIG_I2C_DEBUG_CORE is not set # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set @@ -2036,8 +2083,9 @@ CONFIG_PINCTRL=y CONFIG_PINMUX=y CONFIG_PINCONF=y # CONFIG_DEBUG_PINCTRL is not set -CONFIG_PINCTRL_BCM2835=y +# CONFIG_PINCTRL_AMD is not set # CONFIG_PINCTRL_SINGLE is not set +CONFIG_PINCTRL_BCM2835=y CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y CONFIG_ARCH_REQUIRE_GPIOLIB=y CONFIG_GPIOLIB=y @@ -2048,55 +2096,45 @@ CONFIG_GPIOLIB_IRQCHIP=y CONFIG_GPIO_SYSFS=y # -# Memory mapped GPIO drivers: +# Memory mapped GPIO drivers # -# CONFIG_GPIO_GENERIC_PLATFORM is not set +# CONFIG_GPIO_74XX_MMIO is not set +# CONFIG_GPIO_ALTERA is not set # CONFIG_GPIO_DWAPB is not set # CONFIG_GPIO_EM is not set -# CONFIG_GPIO_ZEVIO is not set +# CONFIG_GPIO_GENERIC_PLATFORM is not set +# CONFIG_GPIO_GRGPIO is not set # CONFIG_GPIO_PL061 is not set # CONFIG_GPIO_SCH311X is not set -# CONFIG_GPIO_GRGPIO is not set +# CONFIG_GPIO_ZEVIO is not set # -# I2C GPIO expanders: +# I2C GPIO expanders # -CONFIG_GPIO_ARIZONA=m +# CONFIG_GPIO_ADP5588 is not set +# CONFIG_GPIO_ADNP is not set # CONFIG_GPIO_MAX7300 is not set # CONFIG_GPIO_MAX732X is not set # CONFIG_GPIO_PCA953X is not set # CONFIG_GPIO_PCF857X is not set # CONFIG_GPIO_SX150X is not set -CONFIG_GPIO_STMPE=y -# CONFIG_GPIO_ADP5588 is not set -# CONFIG_GPIO_ADNP is not set # -# PCI GPIO expanders: +# MFD GPIO expanders # +CONFIG_GPIO_ARIZONA=m +CONFIG_GPIO_STMPE=y # -# SPI GPIO expanders: +# SPI GPIO expanders # +# CONFIG_GPIO_74X164 is not set # CONFIG_GPIO_MAX7301 is not set # CONFIG_GPIO_MCP23S08 is not set # CONFIG_GPIO_MC33880 is not set -# CONFIG_GPIO_74X164 is not set - -# -# AC97 GPIO expanders: -# - -# -# LPC GPIO expanders: -# - -# -# MODULbus GPIO expanders: -# # -# USB GPIO expanders: +# USB GPIO expanders # CONFIG_W1=m CONFIG_W1_CON=y @@ -2117,7 +2155,7 @@ CONFIG_W1_SLAVE_SMEM=m CONFIG_W1_SLAVE_DS2408=m CONFIG_W1_SLAVE_DS2408_READBACK=y CONFIG_W1_SLAVE_DS2413=m -CONFIG_W1_SLAVE_DS2406=m +# CONFIG_W1_SLAVE_DS2406 is not set CONFIG_W1_SLAVE_DS2423=m CONFIG_W1_SLAVE_DS2431=m CONFIG_W1_SLAVE_DS2433=m @@ -2142,10 +2180,12 @@ CONFIG_BATTERY_DS2760=m # CONFIG_CHARGER_MAX8903 is not set # CONFIG_CHARGER_LP8727 is not set # CONFIG_CHARGER_GPIO is not set +# CONFIG_CHARGER_MANAGER is not set # CONFIG_CHARGER_BQ2415X is not set # CONFIG_CHARGER_BQ24190 is not set # CONFIG_CHARGER_BQ24735 is not set # CONFIG_CHARGER_SMB347 is not set +# CONFIG_BATTERY_GAUGE_LTC2941 is not set # CONFIG_POWER_RESET is not set # CONFIG_POWER_AVS is not set # CONFIG_HWMON is not set @@ -2160,13 +2200,12 @@ CONFIG_THERMAL_GOV_STEP_WISE=y # CONFIG_THERMAL_GOV_USER_SPACE is not set # CONFIG_CPU_THERMAL is not set # CONFIG_THERMAL_EMULATION is not set -CONFIG_THERMAL_BCM2835=y # # Texas Instruments thermal drivers # CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_CORE is not set +CONFIG_WATCHDOG_CORE=y # CONFIG_WATCHDOG_NOWAYOUT is not set # @@ -2180,6 +2219,7 @@ CONFIG_WATCHDOG=y # CONFIG_DW_WATCHDOG is not set # CONFIG_MAX63XX_WATCHDOG is not set CONFIG_BCM2708_WDT=m +CONFIG_BCM2835_WDT=m # CONFIG_MEN_A21_WDT is not set # @@ -2214,10 +2254,12 @@ CONFIG_BCMA_BLOCKIO=y # Multifunction device drivers # CONFIG_MFD_CORE=y +CONFIG_MFD_RPISENSE_CORE=m # CONFIG_MFD_AS3711 is not set # CONFIG_MFD_AS3722 is not set # CONFIG_PMIC_ADP5520 is not set # CONFIG_MFD_AAT2870_CORE is not set +# CONFIG_MFD_ATMEL_HLCDC is not set # CONFIG_MFD_BCM590XX is not set # CONFIG_MFD_AXP20X is not set # CONFIG_MFD_CROS_EC is not set @@ -2227,6 +2269,8 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9055 is not set # CONFIG_MFD_DA9063 is not set +# CONFIG_MFD_DA9150 is not set +# CONFIG_MFD_DLN2 is not set # CONFIG_MFD_MC13XXX_SPI is not set # CONFIG_MFD_MC13XXX_I2C is not set # CONFIG_MFD_HI6421_PMIC is not set @@ -2241,16 +2285,19 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_MAX14577 is not set # CONFIG_MFD_MAX77686 is not set # CONFIG_MFD_MAX77693 is not set +# CONFIG_MFD_MAX77843 is not set # CONFIG_MFD_MAX8907 is not set # CONFIG_MFD_MAX8925 is not set # CONFIG_MFD_MAX8997 is not set # CONFIG_MFD_MAX8998 is not set +# CONFIG_MFD_MT6397 is not set # CONFIG_MFD_MENF21BMC is not set # CONFIG_EZX_PCAP is not set # CONFIG_MFD_VIPERBOARD is not set # CONFIG_MFD_RETU is not set # CONFIG_MFD_PCF50633 is not set # CONFIG_MFD_PM8921_CORE is not set +# CONFIG_MFD_RT5033 is not set # CONFIG_MFD_RTSX_USB is not set # CONFIG_MFD_RC5T583 is not set # CONFIG_MFD_RK808 is not set @@ -2258,6 +2305,7 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_SEC_CORE is not set # CONFIG_MFD_SI476X_CORE is not set # CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SKY81452 is not set # CONFIG_MFD_SMSC is not set # CONFIG_ABX500_CORE is not set CONFIG_MFD_STMPE=y @@ -2304,7 +2352,36 @@ CONFIG_MFD_WM5102=y # CONFIG_MFD_WM831X_SPI is not set # CONFIG_MFD_WM8350_I2C is not set # CONFIG_MFD_WM8994 is not set -# CONFIG_REGULATOR is not set +CONFIG_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_REGULATOR_FIXED_VOLTAGE=m +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set +# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set +# CONFIG_REGULATOR_ACT8865 is not set +# CONFIG_REGULATOR_AD5398 is not set +CONFIG_REGULATOR_ARIZONA=m +# CONFIG_REGULATOR_DA9210 is not set +# CONFIG_REGULATOR_DA9211 is not set +# CONFIG_REGULATOR_FAN53555 is not set +# CONFIG_REGULATOR_GPIO is not set +# CONFIG_REGULATOR_ISL9305 is not set +# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_LP872X is not set +# CONFIG_REGULATOR_LP8755 is not set +# CONFIG_REGULATOR_LTC3589 is not set +# CONFIG_REGULATOR_MAX1586 is not set +# CONFIG_REGULATOR_MAX8649 is not set +# CONFIG_REGULATOR_MAX8660 is not set +# CONFIG_REGULATOR_MAX8952 is not set +# CONFIG_REGULATOR_MAX8973 is not set +# CONFIG_REGULATOR_PFUZE100 is not set +# CONFIG_REGULATOR_TPS51632 is not set +# CONFIG_REGULATOR_TPS62360 is not set +# CONFIG_REGULATOR_TPS65023 is not set +# CONFIG_REGULATOR_TPS6507X is not set +# CONFIG_REGULATOR_TPS6524X is not set CONFIG_MEDIA_SUPPORT=m # @@ -2359,9 +2436,9 @@ CONFIG_IR_IMON=m CONFIG_IR_MCEUSB=m CONFIG_IR_REDRAT3=m CONFIG_IR_STREAMZAP=m +# CONFIG_IR_IGORPLUGUSB is not set CONFIG_IR_IGUANA=m CONFIG_IR_TTUSBIR=m -# CONFIG_IR_IMG is not set CONFIG_RC_LOOPBACK=m CONFIG_IR_GPIO_CIR=m CONFIG_MEDIA_USB_SUPPORT=y @@ -2415,6 +2492,7 @@ CONFIG_USB_GSPCA_STV0680=m CONFIG_USB_GSPCA_SUNPLUS=m CONFIG_USB_GSPCA_T613=m CONFIG_USB_GSPCA_TOPRO=m +# CONFIG_USB_GSPCA_TOUPTEK is not set CONFIG_USB_GSPCA_TV8532=m CONFIG_USB_GSPCA_VC032X=m CONFIG_USB_GSPCA_VICAM=m @@ -2437,7 +2515,6 @@ CONFIG_VIDEO_PVRUSB2_SYSFS=y CONFIG_VIDEO_PVRUSB2_DVB=y # CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set CONFIG_VIDEO_HDPVR=m -CONFIG_VIDEO_TLG2300=m CONFIG_VIDEO_USBVISION=m # CONFIG_VIDEO_STK1160_COMMON is not set # CONFIG_VIDEO_GO7007 is not set @@ -2513,9 +2590,8 @@ CONFIG_VIDEO_EM28XX_ALSA=m CONFIG_VIDEO_EM28XX_DVB=m CONFIG_VIDEO_EM28XX_RC=m CONFIG_V4L_PLATFORM_DRIVERS=y -# CONFIG_SOC_CAMERA is not set CONFIG_VIDEO_BCM2835=y -CONFIG_VIDEO_BCM2835_MMAL=m +# CONFIG_SOC_CAMERA is not set # CONFIG_V4L_MEM2MEM_DRIVERS is not set # CONFIG_V4L_TEST_DRIVERS is not set @@ -2642,7 +2718,6 @@ CONFIG_MEDIA_TUNER_FC0013=m CONFIG_MEDIA_TUNER_TDA18212=m CONFIG_MEDIA_TUNER_E4000=m CONFIG_MEDIA_TUNER_FC2580=m -CONFIG_MEDIA_TUNER_M88TS2022=m CONFIG_MEDIA_TUNER_TUA9001=m CONFIG_MEDIA_TUNER_SI2157=m CONFIG_MEDIA_TUNER_IT913X=m @@ -2721,6 +2796,7 @@ CONFIG_DVB_NXT200X=m CONFIG_DVB_BCM3510=m CONFIG_DVB_LGDT330X=m CONFIG_DVB_LGDT3305=m +CONFIG_DVB_LGDT3306A=m CONFIG_DVB_LG2160=m CONFIG_DVB_S5H1409=m CONFIG_DVB_AU8522=m @@ -2735,6 +2811,10 @@ CONFIG_DVB_S921=m CONFIG_DVB_DIB8000=m CONFIG_DVB_MB86A20S=m +# +# ISDB-S (satellite) & ISDB-T (terrestrial) frontends +# + # # Digital terrestrial only tuners/PLL # @@ -2779,9 +2859,9 @@ CONFIG_FB=y CONFIG_FB_CMDLINE=y # CONFIG_FB_DDC is not set # CONFIG_FB_BOOT_VESA_SUPPORT is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_FILLRECT is not set +# CONFIG_FB_CFB_COPYAREA is not set +# CONFIG_FB_CFB_IMAGEBLIT is not set # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set CONFIG_FB_SYS_FILLRECT=m CONFIG_FB_SYS_COPYAREA=m @@ -2798,7 +2878,6 @@ CONFIG_FB_BACKLIGHT=y # # Frame buffer hardware drivers # -CONFIG_FB_BCM2708=y # CONFIG_FB_ARMCLCD is not set # CONFIG_FB_UVESA is not set # CONFIG_FB_OPENCORES is not set @@ -2811,6 +2890,7 @@ CONFIG_FB_BCM2708=y # CONFIG_FB_AUO_K190X is not set # CONFIG_FB_SIMPLE is not set # CONFIG_FB_SSD1307 is not set +CONFIG_FB_RPISENSE=m CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_LCD_CLASS_DEVICE=m # CONFIG_LCD_L4F00242T03 is not set @@ -2889,7 +2969,6 @@ CONFIG_SND_MPU401=m # CONFIG_SND_ARM=y # CONFIG_SND_ARMAACI is not set -CONFIG_SND_BCM2835=m CONFIG_SND_SPI=y CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=m @@ -2899,6 +2978,10 @@ CONFIG_SND_USB_CAIAQ_INPUT=y CONFIG_SND_USB_6FIRE=m # CONFIG_SND_USB_HIFACE is not set # CONFIG_SND_BCD2000 is not set +# CONFIG_SND_USB_POD is not set +# CONFIG_SND_USB_PODHD is not set +# CONFIG_SND_USB_TONEPORT is not set +# CONFIG_SND_USB_VARIAX is not set CONFIG_SND_SOC=m CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_ATMEL_SOC is not set @@ -2910,6 +2993,9 @@ CONFIG_SND_BCM2708_SOC_HIFIBERRY_AMP=m CONFIG_SND_BCM2708_SOC_RPI_DAC=m CONFIG_SND_BCM2708_SOC_RPI_PROTO=m CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC=m +CONFIG_SND_BCM2708_SOC_RASPIDAC3=m +CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP_PREINIT=m +CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP=m # CONFIG_SND_DESIGNWARE_I2S is not set # @@ -2925,11 +3011,15 @@ CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC=m # CONFIG_SND_SOC_FSL_SPDIF is not set # CONFIG_SND_SOC_FSL_ESAI is not set # CONFIG_SND_SOC_IMX_AUDMUX is not set +# CONFIG_SND_SOC_QCOM is not set +# CONFIG_SND_SOC_XTFPGA_I2S is not set CONFIG_SND_SOC_I2C_AND_SPI=m # # CODEC drivers # +CONFIG_SND_SOC_ARIZONA=m +CONFIG_SND_SOC_WM_ADSP=m # CONFIG_SND_SOC_ADAU1701 is not set # CONFIG_SND_SOC_AK4104 is not set # CONFIG_SND_SOC_AK4554 is not set @@ -2937,12 +3027,14 @@ CONFIG_SND_SOC_I2C_AND_SPI=m # CONFIG_SND_SOC_AK5386 is not set # CONFIG_SND_SOC_ALC5623 is not set # CONFIG_SND_SOC_CS35L32 is not set +# CONFIG_SND_SOC_CS42L51_I2C is not set # CONFIG_SND_SOC_CS42L52 is not set # CONFIG_SND_SOC_CS42L56 is not set # CONFIG_SND_SOC_CS42L73 is not set # CONFIG_SND_SOC_CS4265 is not set # CONFIG_SND_SOC_CS4270 is not set -# CONFIG_SND_SOC_CS4271 is not set +# CONFIG_SND_SOC_CS4271_I2C is not set +# CONFIG_SND_SOC_CS4271_SPI is not set # CONFIG_SND_SOC_CS42XX8_I2C is not set # CONFIG_SND_SOC_HDMI_CODEC is not set # CONFIG_SND_SOC_ES8328 is not set @@ -2953,18 +3045,26 @@ CONFIG_SND_SOC_PCM512x_I2C=m # CONFIG_SND_SOC_PCM512x_SPI is not set CONFIG_SND_SOC_PCM1794A=m CONFIG_SND_SOC_PCM5102A=m +# CONFIG_SND_SOC_RT5631 is not set +# CONFIG_SND_SOC_RT5677_SPI is not set # CONFIG_SND_SOC_SGTL5000 is not set # CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set # CONFIG_SND_SOC_SPDIF is not set # CONFIG_SND_SOC_SSM2602_SPI is not set # CONFIG_SND_SOC_SSM2602_I2C is not set # CONFIG_SND_SOC_SSM4567 is not set +# CONFIG_SND_SOC_STA32X is not set # CONFIG_SND_SOC_STA350 is not set # CONFIG_SND_SOC_TAS2552 is not set # CONFIG_SND_SOC_TAS5086 is not set +# CONFIG_SND_SOC_TFA9879 is not set CONFIG_SND_SOC_TAS5713=m +# CONFIG_SND_SOC_TLV320AIC23_I2C is not set +# CONFIG_SND_SOC_TLV320AIC23_SPI is not set # CONFIG_SND_SOC_TLV320AIC31XX is not set # CONFIG_SND_SOC_TLV320AIC3X is not set +# CONFIG_SND_SOC_TS3A227E is not set +CONFIG_SND_SOC_WM5102=m # CONFIG_SND_SOC_WM8510 is not set # CONFIG_SND_SOC_WM8523 is not set # CONFIG_SND_SOC_WM8580 is not set @@ -2978,10 +3078,12 @@ CONFIG_SND_SOC_WM8731=m # CONFIG_SND_SOC_WM8770 is not set # CONFIG_SND_SOC_WM8776 is not set CONFIG_SND_SOC_WM8804=m +CONFIG_SND_SOC_WM8804_I2C=m +# CONFIG_SND_SOC_WM8804_SPI is not set # CONFIG_SND_SOC_WM8903 is not set # CONFIG_SND_SOC_WM8962 is not set # CONFIG_SND_SOC_WM8978 is not set -# CONFIG_SND_SOC_TPA6130A2 is not set +CONFIG_SND_SOC_TPA6130A2=m CONFIG_SND_SIMPLE_CARD=m CONFIG_SOUND_PRIME=m @@ -3004,6 +3106,7 @@ CONFIG_HID_APPLE=m # CONFIG_HID_APPLEIR is not set # CONFIG_HID_AUREAL is not set CONFIG_HID_BELKIN=m +# CONFIG_HID_BETOP_FF is not set CONFIG_HID_CHERRY=m CONFIG_HID_CHICONY=m # CONFIG_HID_PRODIKEYS is not set @@ -3013,12 +3116,11 @@ CONFIG_HID_DRAGONRISE=m # CONFIG_DRAGONRISE_FF is not set CONFIG_HID_EMS_FF=m CONFIG_HID_ELECOM=m -# CONFIG_HID_ELO is not set +CONFIG_HID_ELO=m CONFIG_HID_EZKEY=m CONFIG_HID_HOLTEK=m # CONFIG_HOLTEK_FF is not set # CONFIG_HID_GT683R is not set -# CONFIG_HID_HUION is not set CONFIG_HID_KEYTOUCH=m CONFIG_HID_KYE=m CONFIG_HID_UCLOGIC=m @@ -3052,6 +3154,7 @@ CONFIG_HID_PICOLCD=m # CONFIG_HID_PICOLCD_LCD is not set # CONFIG_HID_PICOLCD_LEDS is not set # CONFIG_HID_PICOLCD_CIR is not set +# CONFIG_HID_PLANTRONICS is not set # CONFIG_HID_PRIMAX is not set CONFIG_HID_ROCCAT=m # CONFIG_HID_SAITEK is not set @@ -3073,7 +3176,7 @@ CONFIG_HID_THRUSTMASTER=m # CONFIG_THRUSTMASTER_FF is not set CONFIG_HID_WACOM=m CONFIG_HID_WIIMOTE=m -# CONFIG_HID_XINMO is not set +CONFIG_HID_XINMO=m CONFIG_HID_ZEROPLUS=m # CONFIG_ZEROPLUS_FF is not set CONFIG_HID_ZYDACRON=m @@ -3102,6 +3205,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y # CONFIG_USB_DEFAULT_PERSIST=y # CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG is not set # CONFIG_USB_OTG_WHITELIST is not set # CONFIG_USB_OTG_BLACKLIST_HUB is not set # CONFIG_USB_OTG_FSM is not set @@ -3116,7 +3220,6 @@ CONFIG_USB_MON=m # CONFIG_USB_EHCI_HCD is not set # CONFIG_USB_OXU210HP_HCD is not set # CONFIG_USB_ISP116X_HCD is not set -# CONFIG_USB_ISP1760_HCD is not set # CONFIG_USB_ISP1362_HCD is not set # CONFIG_USB_FUSBH200_HCD is not set # CONFIG_USB_FOTG210_HCD is not set @@ -3148,6 +3251,7 @@ CONFIG_USB_WDM=m CONFIG_USB_STORAGE=y # CONFIG_USB_STORAGE_DEBUG is not set CONFIG_USB_STORAGE_REALTEK=m +CONFIG_REALTEK_AUTOPM=y CONFIG_USB_STORAGE_DATAFAB=m CONFIG_USB_STORAGE_FREECOM=m CONFIG_USB_STORAGE_ISD200=m @@ -3174,6 +3278,7 @@ CONFIG_USBIP_HOST=m # CONFIG_USB_MUSB_HDRC is not set # CONFIG_USB_DWC3 is not set # CONFIG_USB_DWC2 is not set +# CONFIG_USB_ISP1760 is not set # # USB port drivers @@ -3270,6 +3375,7 @@ CONFIG_USB_YUREX=m CONFIG_USB_EZUSB_FX2=m # CONFIG_USB_HSIC_USB3503 is not set # CONFIG_USB_LINK_LAYER_TEST is not set +# CONFIG_USB_CHAOSKEY is not set # # USB Physical Layer drivers @@ -3307,8 +3413,7 @@ CONFIG_MMC_BCM2835_SDHOST=y CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_PLTFM=y # CONFIG_MMC_SDHCI_OF_ARASAN is not set -# CONFIG_MMC_SDHCI_PXAV3 is not set -# CONFIG_MMC_SDHCI_PXAV2 is not set +# CONFIG_MMC_SDHCI_F_SDH30 is not set CONFIG_MMC_SPI=m # CONFIG_MMC_DW is not set # CONFIG_MMC_VUB300 is not set @@ -3317,6 +3422,7 @@ CONFIG_MMC_SPI=m # CONFIG_MEMSTICK is not set CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y +CONFIG_LEDS_CLASS_FLASH=m # # LED drivers @@ -3330,9 +3436,11 @@ CONFIG_LEDS_GPIO=y # CONFIG_LEDS_LP5523 is not set # CONFIG_LEDS_LP5562 is not set # CONFIG_LEDS_LP8501 is not set +# CONFIG_LEDS_LP8860 is not set # CONFIG_LEDS_PCA955X is not set # CONFIG_LEDS_PCA963X is not set # CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_REGULATOR is not set # CONFIG_LEDS_BD2802 is not set # CONFIG_LEDS_LT3593 is not set # CONFIG_LEDS_TCA6507 is not set @@ -3342,6 +3450,7 @@ CONFIG_LEDS_GPIO=y # LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) # # CONFIG_LEDS_BLINKM is not set +# CONFIG_LEDS_PM8941_WLED is not set # # LED Triggers @@ -3382,8 +3491,11 @@ CONFIG_RTC_INTF_DEV=y # # I2C RTC drivers # +# CONFIG_RTC_DRV_ABB5ZES3 is not set +# CONFIG_RTC_DRV_ABX80X is not set CONFIG_RTC_DRV_DS1307=m CONFIG_RTC_DRV_DS1374=m +# CONFIG_RTC_DRV_DS1374_WDT is not set CONFIG_RTC_DRV_DS1672=m CONFIG_RTC_DRV_DS3232=m # CONFIG_RTC_DRV_HYM8563 is not set @@ -3432,6 +3544,7 @@ CONFIG_RTC_DRV_RX4581=m # CONFIG_RTC_DRV_DS1286 is not set # CONFIG_RTC_DRV_DS1511 is not set # CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1685_FAMILY is not set # CONFIG_RTC_DRV_DS1742 is not set # CONFIG_RTC_DRV_DS2404 is not set # CONFIG_RTC_DRV_STK17TA8 is not set @@ -3462,10 +3575,10 @@ CONFIG_DMADEVICES=y # DMA Devices # # CONFIG_AMBA_PL08X is not set -# CONFIG_DW_DMAC_CORE is not set # CONFIG_DW_DMAC is not set # CONFIG_PL330_DMA is not set CONFIG_DMA_BCM2708=y +CONFIG_DMA_BCM2708_LEGACY=y # CONFIG_FSL_EDMA is not set # CONFIG_NBPFAXI_DMA is not set CONFIG_DMA_ENGINE=y @@ -3501,9 +3614,7 @@ CONFIG_88EU_AP_MODE=y CONFIG_R8723AU=m CONFIG_8723AU_AP_MODE=y CONFIG_8723AU_BT_COEXIST=y -# CONFIG_LINE6_USB is not set CONFIG_VT6656=m -# CONFIG_BCM_WIMAX is not set # CONFIG_FT1000 is not set # @@ -3521,13 +3632,12 @@ CONFIG_SPEAKUP_SYNTH_SOFT=m # CONFIG_SPEAKUP_SYNTH_SPKOUT is not set # CONFIG_SPEAKUP_SYNTH_TXPRT is not set # CONFIG_SPEAKUP_SYNTH_DUMMY is not set -# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set # CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set CONFIG_STAGING_MEDIA=y # CONFIG_I2C_BCM2048 is not set -# CONFIG_VIDEO_TCM825X is not set +# CONFIG_DVB_MN88472 is not set +# CONFIG_DVB_MN88473 is not set CONFIG_LIRC_STAGING=y -CONFIG_LIRC_IGORPLUGUSB=m CONFIG_LIRC_IMON=m CONFIG_LIRC_RPI=m CONFIG_LIRC_SASEM=m @@ -3539,19 +3649,20 @@ CONFIG_LIRC_SERIAL_TRANSMITTER=y # # Android # -# CONFIG_ANDROID is not set # CONFIG_USB_WPAN_HCD is not set # CONFIG_WIMAX_GDM72XX is not set # CONFIG_LTE_GDM724X is not set # CONFIG_LUSTRE_FS is not set # CONFIG_DGAP is not set # CONFIG_GS_FPGABOOT is not set +# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set CONFIG_FB_TFT=m CONFIG_FB_TFT_AGM1264K_FL=m CONFIG_FB_TFT_BD663474=m CONFIG_FB_TFT_HX8340BN=m CONFIG_FB_TFT_HX8347D=m CONFIG_FB_TFT_HX8353D=m +CONFIG_FB_TFT_ILI9163=m CONFIG_FB_TFT_ILI9320=m CONFIG_FB_TFT_ILI9325=m CONFIG_FB_TFT_ILI9340=m @@ -3574,11 +3685,7 @@ CONFIG_FB_TFT_UPD161704=m CONFIG_FB_TFT_WATTEROTT=m CONFIG_FB_FLEX=m CONFIG_FB_TFT_FBTFT_DEVICE=m - -# -# SOC (System On Chip) specific Drivers -# -# CONFIG_SOC_TI is not set +# CONFIG_CHROME_PLATFORMS is not set CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_COMMON_CLK=y @@ -3588,8 +3695,9 @@ CONFIG_COMMON_CLK=y # # CONFIG_COMMON_CLK_SI5351 is not set # CONFIG_COMMON_CLK_SI570 is not set +# CONFIG_CLK_QORIQ is not set # CONFIG_COMMON_CLK_PXA is not set -# CONFIG_COMMON_CLK_QCOM is not set +# CONFIG_COMMON_CLK_CDCE706 is not set # # Hardware Spinlock drivers @@ -3606,7 +3714,6 @@ CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y # CONFIG_SH_TIMER_MTU2 is not set # CONFIG_SH_TIMER_TMU is not set # CONFIG_EM_TIMER_STI is not set -# CONFIG_CLKSRC_VERSATILE is not set # CONFIG_MAILBOX is not set # CONFIG_IOMMU_SUPPORT is not set @@ -3622,6 +3729,7 @@ CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y # # SOC (System On Chip) specific Drivers # +# CONFIG_SOC_TI is not set # CONFIG_PM_DEVFREQ is not set CONFIG_EXTCON=m @@ -3632,6 +3740,7 @@ CONFIG_EXTCON_ARIZONA=m # CONFIG_EXTCON_GPIO is not set # CONFIG_EXTCON_RT8973A is not set # CONFIG_EXTCON_SM5502 is not set +# CONFIG_EXTCON_USB_GPIO is not set # CONFIG_MEMORY is not set # CONFIG_IIO is not set # CONFIG_PWM is not set @@ -3648,6 +3757,16 @@ CONFIG_IRQCHIP=y # CONFIG_POWERCAP is not set # CONFIG_MCB is not set +# +# Android +# +# CONFIG_ANDROID is not set + +# +# Firmware Drivers +# +# CONFIG_FIRMWARE_MEMMAP is not set + # # File systems # @@ -3658,6 +3777,7 @@ CONFIG_EXT4_FS=y CONFIG_EXT4_USE_FOR_EXT23=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_ENCRYPTION is not set # CONFIG_EXT4_DEBUG is not set CONFIG_JBD2=y # CONFIG_JBD2_DEBUG is not set @@ -3694,6 +3814,12 @@ CONFIG_BTRFS_FS_POSIX_ACL=y # CONFIG_BTRFS_DEBUG is not set # CONFIG_BTRFS_ASSERT is not set CONFIG_NILFS2_FS=m +CONFIG_F2FS_FS=y +CONFIG_F2FS_STAT_FS=y +CONFIG_F2FS_FS_XATTR=y +CONFIG_F2FS_FS_POSIX_ACL=y +# CONFIG_F2FS_FS_SECURITY is not set +# CONFIG_F2FS_CHECK_FS is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y CONFIG_FILE_LOCKING=y @@ -3712,7 +3838,7 @@ CONFIG_QUOTACTL=y CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m CONFIG_CUSE=m -# CONFIG_OVERLAY_FS is not set +CONFIG_OVERLAY_FS=m # # Caches @@ -3781,6 +3907,7 @@ CONFIG_SQUASHFS_DECOMP_SINGLE=y # CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set CONFIG_SQUASHFS_XATTR=y CONFIG_SQUASHFS_ZLIB=y +CONFIG_SQUASHFS_LZ4=y CONFIG_SQUASHFS_LZO=y CONFIG_SQUASHFS_XZ=y # CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set @@ -3796,12 +3923,6 @@ CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 # CONFIG_PSTORE is not set # CONFIG_SYSV_FS is not set # CONFIG_UFS_FS is not set -CONFIG_F2FS_FS=y -CONFIG_F2FS_STAT_FS=y -CONFIG_F2FS_FS_XATTR=y -CONFIG_F2FS_FS_POSIX_ACL=y -# CONFIG_F2FS_FS_SECURITY is not set -# CONFIG_F2FS_CHECK_FS is not set CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y CONFIG_NFS_V2=y @@ -3819,6 +3940,7 @@ CONFIG_NFSD_V2_ACL=y CONFIG_NFSD_V3=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y +CONFIG_NFSD_PNFS=y # CONFIG_NFSD_FAULT_INJECTION is not set CONFIG_GRACE_PERIOD=y CONFIG_LOCKD=y @@ -3924,6 +4046,7 @@ CONFIG_FRAME_WARN=1024 # CONFIG_STRIP_ASM_SYMS is not set # CONFIG_READABLE_ASM is not set # CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_PAGE_OWNER is not set CONFIG_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set # CONFIG_DEBUG_SECTION_MISMATCH is not set @@ -3935,6 +4058,7 @@ CONFIG_DEBUG_KERNEL=y # # Memory Debugging # +# CONFIG_PAGE_EXTENSION is not set # CONFIG_DEBUG_PAGEALLOC is not set # CONFIG_DEBUG_OBJECTS is not set # CONFIG_SLUB_DEBUG_ON is not set @@ -3961,6 +4085,7 @@ CONFIG_PANIC_TIMEOUT=0 CONFIG_SCHED_DEBUG=y CONFIG_SCHEDSTATS=y # CONFIG_SCHED_STACK_END_CHECK is not set +# CONFIG_DEBUG_TIMEKEEPING is not set CONFIG_TIMER_STATS=y # CONFIG_DEBUG_PREEMPT is not set @@ -3989,11 +4114,11 @@ CONFIG_DEBUG_BUGVERBOSE=y # # RCU Debugging # +# CONFIG_PROVE_RCU is not set # CONFIG_SPARSE_RCU_POINTER is not set # CONFIG_TORTURE_TEST is not set # CONFIG_RCU_TORTURE_TEST is not set CONFIG_RCU_CPU_STALL_TIMEOUT=21 -CONFIG_RCU_CPU_STALL_VERBOSE=y # CONFIG_RCU_CPU_STALL_INFO is not set # CONFIG_RCU_TRACE is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set @@ -4041,6 +4166,7 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_PERCPU_TEST is not set # CONFIG_ATOMIC64_SELFTEST is not set # CONFIG_ASYNC_RAID6_TEST is not set +# CONFIG_TEST_HEXDUMP is not set # CONFIG_TEST_STRING_HELPERS is not set # CONFIG_TEST_KSTRTOX is not set # CONFIG_TEST_RHASHTABLE is not set @@ -4050,12 +4176,14 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_TEST_BPF is not set # CONFIG_TEST_FIRMWARE is not set # CONFIG_TEST_UDELAY is not set +# CONFIG_MEMTEST is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y CONFIG_KGDB=y CONFIG_KGDB_SERIAL_CONSOLE=y # CONFIG_KGDB_TESTS is not set CONFIG_KGDB_KDB=y +CONFIG_KDB_DEFAULT_ENABLE=0x1 CONFIG_KDB_KEYBOARD=y CONFIG_KDB_CONTINUE_CATASTROPHIC=0 # CONFIG_ARM_PTDUMP is not set @@ -4064,14 +4192,13 @@ CONFIG_ARM_UNWIND=y # CONFIG_DEBUG_USER is not set # CONFIG_DEBUG_LL is not set CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" -# CONFIG_DEBUG_UART_PL01X is not set # CONFIG_DEBUG_UART_8250 is not set # CONFIG_DEBUG_UART_BCM63XX is not set CONFIG_UNCOMPRESS_INCLUDE="mach/uncompress.h" -# CONFIG_OC_ETM is not set # CONFIG_ARM_KPROBES_TEST is not set # CONFIG_PID_IN_CONTEXTIDR is not set # CONFIG_DEBUG_SET_MODULE_RONX is not set +# CONFIG_CORESIGHT is not set # # Security options @@ -4080,7 +4207,6 @@ CONFIG_KEYS=y # CONFIG_PERSISTENT_KEYRINGS is not set # CONFIG_BIG_KEYS is not set # CONFIG_ENCRYPTED_KEYS is not set -# CONFIG_KEYS_DEBUG_PROC_KEYS is not set # CONFIG_SECURITY_DMESG_RESTRICT is not set # CONFIG_SECURITY is not set # CONFIG_SECURITYFS is not set @@ -4126,7 +4252,7 @@ CONFIG_CRYPTO_ABLK_HELPER=m # Authenticated Encryption with Associated Data # CONFIG_CRYPTO_CCM=m -# CONFIG_CRYPTO_GCM is not set +CONFIG_CRYPTO_GCM=m CONFIG_CRYPTO_SEQIV=m # @@ -4154,7 +4280,7 @@ CONFIG_CRYPTO_XCBC=m CONFIG_CRYPTO_CRC32C=y # CONFIG_CRYPTO_CRC32 is not set # CONFIG_CRYPTO_CRCT10DIF is not set -# CONFIG_CRYPTO_GHASH is not set +CONFIG_CRYPTO_GHASH=m CONFIG_CRYPTO_MD4=m CONFIG_CRYPTO_MD5=m CONFIG_CRYPTO_MICHAEL_MIC=m @@ -4163,11 +4289,8 @@ CONFIG_CRYPTO_MICHAEL_MIC=m # CONFIG_CRYPTO_RMD256 is not set # CONFIG_CRYPTO_RMD320 is not set CONFIG_CRYPTO_SHA1=m -CONFIG_CRYPTO_SHA1_ARM=m -CONFIG_CRYPTO_SHA1_ARM_NEON=m CONFIG_CRYPTO_SHA256=m CONFIG_CRYPTO_SHA512=m -CONFIG_CRYPTO_SHA512_ARM_NEON=m CONFIG_CRYPTO_TGR192=m CONFIG_CRYPTO_WP512=m @@ -4175,8 +4298,6 @@ CONFIG_CRYPTO_WP512=m # Ciphers # CONFIG_CRYPTO_AES=y -CONFIG_CRYPTO_AES_ARM=m -CONFIG_CRYPTO_AES_ARM_BS=m # CONFIG_CRYPTO_ANUBIS is not set CONFIG_CRYPTO_ARC4=m # CONFIG_CRYPTO_BLOWFISH is not set @@ -4209,8 +4330,20 @@ CONFIG_CRYPTO_DEFLATE=m # CONFIG_CRYPTO_DRBG_MENU is not set # CONFIG_CRYPTO_USER_API_HASH is not set # CONFIG_CRYPTO_USER_API_SKCIPHER is not set +# CONFIG_CRYPTO_USER_API_RNG is not set # CONFIG_CRYPTO_HW is not set # CONFIG_ASYMMETRIC_KEY_TYPE is not set +CONFIG_ARM_CRYPTO=y +CONFIG_CRYPTO_SHA1_ARM=m +CONFIG_CRYPTO_SHA1_ARM_NEON=m +# CONFIG_CRYPTO_SHA1_ARM_CE is not set +# CONFIG_CRYPTO_SHA2_ARM_CE is not set +CONFIG_CRYPTO_SHA256_ARM=m +CONFIG_CRYPTO_SHA512_ARM_NEON=m +CONFIG_CRYPTO_AES_ARM=m +CONFIG_CRYPTO_AES_ARM_BS=m +# CONFIG_CRYPTO_AES_ARM_CE is not set +# CONFIG_CRYPTO_GHASH_ARM_CE is not set # CONFIG_BINARY_PRINTF is not set # @@ -4218,6 +4351,7 @@ CONFIG_CRYPTO_DEFLATE=m # CONFIG_RAID6_PQ=m CONFIG_BITREVERSE=y +CONFIG_HAVE_ARCH_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_NET_UTILS=y @@ -4244,6 +4378,7 @@ CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=m CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_DECOMPRESS=m CONFIG_XZ_DEC=m # CONFIG_XZ_DEC_X86 is not set # CONFIG_XZ_DEC_POWERPC is not set diff --git a/main/linux-rpi/rpi-cirrus-4.1.x-20151006.patch b/main/linux-rpi/rpi-cirrus-4.1.x-20151006.patch new file mode 100644 index 0000000000..c9c5b8dce3 --- /dev/null +++ b/main/linux-rpi/rpi-cirrus-4.1.x-20151006.patch @@ -0,0 +1,2046 @@ +https://github.com/HiassofT/rpi-linux/commits/cirrus-4.1.y + +diff --git a/Documentation/devicetree/bindings/mfd/arizona.txt b/Documentation/devicetree/bindings/mfd/arizona.txt +index 7665aa9..ec7979e 100644 +--- a/Documentation/devicetree/bindings/mfd/arizona.txt ++++ b/Documentation/devicetree/bindings/mfd/arizona.txt +@@ -42,6 +42,23 @@ Optional properties: + + - wlf,reset : GPIO specifier for the GPIO controlling /RESET + - wlf,ldoena : GPIO specifier for the GPIO controlling LDOENA ++ - wlf,clk32k-src : set input source for codec 32kHz clock. ++ 0 = default, 1 = MCLK1, 2 = MCLK2, 3 = None ++ ++ - wlf,micd-ranges : Microphone detection level and key configuration, this ++ field can be of variable length but should always be a multiple of 2 cells ++ long, each two cell group represents one button configuration ++ The first cell is the maximum impedance for this button in ohms ++ The second cell the key that should be reported to the input layer ++ - wlf,micd-configs : Headset polarity configurations, the field can be of ++ variable length but should always be a multiple of 3 cells long, each two ++ cell group represents one polarity configration ++ The first cell is the accessory detection source as per the ACCDET_SRC bits ++ in the ACCESSORY_DETECT_MODE_1 register ++ The second cell represents the MICBIAS to be used as per the MICD_BIAS_SRC ++ bits in the MIC_DETECT_1 register ++ The third cell represents the value of the micd-pol-gpio pin, a non-zero ++ value indicates this should be on + + - wlf,gpio-defaults : A list of GPIO configuration register values. Defines + for the appropriate values can found in . If +@@ -49,6 +66,10 @@ Optional properties: + a value that is out of range for a 16 bit register then the chip default + will be used. If present exactly five values must be specified. + ++ - wlf,dmic-ref : DMIC reference for each input, must contain four cells if ++ specified. 0 indicates MICVDD and is the default, 1,2,3 indicate the ++ respective MICBIAS. ++ + - wlf,inmode : A list of INn_MODE register values, where n is the number + of input signals. Valid values are 0 (Differential), 1 (Single-ended) and + 2 (Digital Microphone). If absent, INn_MODE registers set to 0 by default. +@@ -85,6 +106,19 @@ codec: wm5102@1a { + gpio-controller; + #gpio-cells = <2>; + ++ wlf,micd-ranges = < ++ 11 0x100 ++ 28 0x101 ++ 54 0x102 ++ 100 0x103 ++ 186 0x104 ++ 430 0x105 ++ >; ++ wlf,micd-configs = < ++ 0x1 1 0 ++ 0x0 2 1 ++ >; ++ + wlf,gpio-defaults = < + ARIZONA_GP_FN_TXLRCLK + ARIZONA_GP_DEFAULT +@@ -92,4 +126,6 @@ codec: wm5102@1a { + ARIZONA_GP_DEFAULT + ARIZONA_GP_DEFAULT + >; ++ ++ wlf,dmic-ref = <0 0 1 0>; + }; +diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile +index 192bda7..6046f13 100644 +--- a/arch/arm/boot/dts/overlays/Makefile ++++ b/arch/arm/boot/dts/overlays/Makefile +@@ -38,6 +38,7 @@ dtb-$(RPI_DT_OVERLAYS) += pps-gpio-overlay.dtb + dtb-$(RPI_DT_OVERLAYS) += pwm-overlay.dtb + dtb-$(RPI_DT_OVERLAYS) += pwm-2chan-overlay.dtb + dtb-$(RPI_DT_OVERLAYS) += raspidac3-overlay.dtb ++dtb-$(RPI_DT_OVERLAYS) += rpi-cirrus-wm5102-overlay.dtb + dtb-$(RPI_DT_OVERLAYS) += rpi-dac-overlay.dtb + dtb-$(RPI_DT_OVERLAYS) += rpi-display-overlay.dtb + dtb-$(RPI_DT_OVERLAYS) += rpi-ft5406-overlay.dtb +diff --git a/arch/arm/boot/dts/overlays/rpi-cirrus-wm5102-overlay.dts b/arch/arm/boot/dts/overlays/rpi-cirrus-wm5102-overlay.dts +new file mode 100644 +index 0000000..85b3d15 +--- /dev/null ++++ b/arch/arm/boot/dts/overlays/rpi-cirrus-wm5102-overlay.dts +@@ -0,0 +1,141 @@ ++// Definitions for Cirrus audio card ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "brcm,bcm2708"; ++ ++ fragment@0 { ++ target-path = "/"; ++ __overlay__ { ++ aliases { ++ ldo0 = &ldo0; ++ ldo1 = &ldo1; ++ }; ++ }; ++ }; ++ ++ fragment@1 { ++ target = <&sound>; ++ __overlay__ { ++ compatible = "wlf,rpi-wm5102"; ++ i2s-controller = <&i2s>; ++ status = "okay"; ++ }; ++ }; ++ ++ fragment@2 { ++ target = <&i2s>; ++ __overlay__ { ++ status = "okay"; ++ }; ++ }; ++ ++ fragment@3 { ++ target = <&gpio>; ++ __overlay__ { ++ wlf_pins: wlf_pins { ++ brcm,pins = <17 22 27>; ++ brcm,function = <1 1 0>; ++ }; ++ }; ++ }; ++ ++ fragment@4 { ++ target-path = "/soc"; ++ __overlay__ { ++ ++ ldo1: ldo1 { ++ compatible = "regulator-fixed"; ++ regulator-name = "DC_5V"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ enable-active-high; ++ regulator-always-on; ++ }; ++ ++ ldo0: ldo0 { ++ compatible = "regulator-fixed"; ++ regulator-name = "DC_1V8"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ enable-active-high; ++ regulator-always-on; ++ }; ++ ++ wsp_preinit: wsp_preinit { ++ compatible = "wlf,rpi-wm5102-preinit"; ++ }; ++ }; ++ }; ++ ++ fragment@5 { ++ target = <&spi0>; ++ __overlay__ { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "okay"; ++ ++ spidev@0{ ++ status = "disabled"; ++ }; ++ ++ spidev@1{ ++ status = "disabled"; ++ }; ++ ++ wm5102@1{ ++ compatible = "wlf,wm5102"; ++ reg = <1>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ spi-max-frequency = <500000>; ++ ++ interrupt-parent = <&gpio>; ++ interrupts = <27 8>; ++ ++ LDOVDD-supply = <&ldo0>; ++ AVDD-supply = <&ldo0>; ++ DBVDD1-supply = <&ldo0>; ++ DBVDD2-supply = <&ldo0>; ++ DBVDD3-supply = <&ldo0>; ++ CPVDD-supply = <&ldo0>; ++ SPKVDDL-supply = <&ldo1>; ++ SPKVDDR-supply = <&ldo1>; ++ ++ wlf,reset = <&gpio 17 0>; ++ wlf,ldoena = <&gpio 22 0>; ++ wlf,gpio-defaults = < ++ 0x000fffff ++ 0x000fffff ++ 0x000fffff ++ 0x000fffff ++ 0x000fffff ++ >; ++ wlf,micd-configs = <0 1 0>; ++ wlf,dmic-ref = <0 2 0 0>; ++ wlf,clk32k-src = <3>; ++ wlf,inmode = <0 2 1 0>; ++ status = "okay"; ++ }; ++ }; ++ }; ++ ++ fragment@6 { ++ target = <&i2c1>; ++ __overlay__ { ++ status = "okay"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ wm8804@3a { ++ #sound-dai-cells = <0>; ++ compatible = "wlf,wm8804"; ++ reg = <0x3a>; ++ status = "okay"; ++ PVDD-supply = <&ldo0>; ++ DVDD-supply = <&ldo0>; ++ }; ++ }; ++ }; ++}; +diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig +index 630da1b..b4e2906 100644 +--- a/arch/arm/configs/bcm2709_defconfig ++++ b/arch/arm/configs/bcm2709_defconfig +@@ -639,6 +639,9 @@ CONFIG_STMPE_SPI=y + CONFIG_MFD_ARIZONA_I2C=m + CONFIG_MFD_ARIZONA_SPI=m + CONFIG_MFD_WM5102=y ++CONFIG_REGULATOR=y ++CONFIG_REGULATOR_FIXED_VOLTAGE=m ++CONFIG_REGULATOR_ARIZONA=m + CONFIG_MEDIA_SUPPORT=m + CONFIG_MEDIA_CAMERA_SUPPORT=y + CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +@@ -843,6 +846,7 @@ CONFIG_SND_BCM2708_SOC_RPI_DAC=m + CONFIG_SND_BCM2708_SOC_RPI_PROTO=m + CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC=m + CONFIG_SND_BCM2708_SOC_RASPIDAC3=m ++CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP=m + CONFIG_SND_SOC_ADAU1701=m + CONFIG_SND_SOC_WM8804_I2C=m + CONFIG_SND_SIMPLE_CARD=m +diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig +index df4cebc..bfe13a3 100644 +--- a/arch/arm/configs/bcmrpi_defconfig ++++ b/arch/arm/configs/bcmrpi_defconfig +@@ -632,6 +632,9 @@ CONFIG_STMPE_SPI=y + CONFIG_MFD_ARIZONA_I2C=m + CONFIG_MFD_ARIZONA_SPI=m + CONFIG_MFD_WM5102=y ++CONFIG_REGULATOR=y ++CONFIG_REGULATOR_FIXED_VOLTAGE=m ++CONFIG_REGULATOR_ARIZONA=m + CONFIG_MEDIA_SUPPORT=m + CONFIG_MEDIA_CAMERA_SUPPORT=y + CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +@@ -836,6 +839,7 @@ CONFIG_SND_BCM2708_SOC_RPI_DAC=m + CONFIG_SND_BCM2708_SOC_RPI_PROTO=m + CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC=m + CONFIG_SND_BCM2708_SOC_RASPIDAC3=m ++CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP=m + CONFIG_SND_SOC_ADAU1701=m + CONFIG_SND_SOC_WM8804_I2C=m + CONFIG_SND_SIMPLE_CARD=m +diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c +index 1b9c3be..39b6698 100644 +--- a/arch/arm/mach-bcm2708/bcm2708.c ++++ b/arch/arm/mach-bcm2708/bcm2708.c +@@ -62,10 +62,17 @@ + #include "bcm2708.h" + #include "armctrl.h" + ++#include ++#include ++#include ++ + #ifdef CONFIG_BCM_VC_CMA + #include + #endif + ++#define GPIO_WM5102_IRQ 27 ++#define GPIO_WM5102_RST 17 ++#define GPIO_WM5102_LDOEN 22 + + /* Effectively we have an IOMMU (ARM<->VideoCore map) that is set up to + * give us IO access only to 64Mbytes of physical memory (26 bits). We could +@@ -587,7 +594,9 @@ static struct spi_board_info bcm2708_spi_devices[] = { + .bus_num = 0, + .chip_select = 0, + .mode = SPI_MODE_0, +- }, { ++ }, ++#if !defined (CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP_MODULE) && !defined (CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP) ++ { + .modalias = "spidev", + .max_speed_hz = 500000, + .bus_num = 0, +@@ -595,6 +604,7 @@ static struct spi_board_info bcm2708_spi_devices[] = { + .mode = SPI_MODE_0, + } + #endif ++#endif + }; + #endif + +@@ -663,6 +673,123 @@ static struct platform_device bcm2708_i2s_device = { + }; + #endif + ++#if defined(CONFIG_REGULATOR_FIXED_VOLTAGE_MODULE) || defined(CONFIG_REGULATOR_FIXED_VOLTAGE) ++static struct regulator_consumer_supply dc1v8_consumers[] = { ++ REGULATOR_SUPPLY("LDOVDD", "spi0.1"), ++ REGULATOR_SUPPLY("AVDD", "spi0.1"), ++ REGULATOR_SUPPLY("DBVDD1", "spi0.1"), ++ REGULATOR_SUPPLY("CPVDD", "spi0.1"), ++ REGULATOR_SUPPLY("DBVDD2", "spi0.1"), ++ REGULATOR_SUPPLY("DBVDD3", "spi0.1"), ++ REGULATOR_SUPPLY("PVDD", "1-003a"), ++ REGULATOR_SUPPLY("DVDD", "1-003a"), ++}; ++ ++static struct regulator_init_data dc1v8_data = { ++ .constraints = { ++ .always_on = 1, ++ }, ++ .num_consumer_supplies = ARRAY_SIZE(dc1v8_consumers), ++ .consumer_supplies = dc1v8_consumers, ++}; ++ ++static struct fixed_voltage_config dc1v8vdd_pdata = { ++ .supply_name = "DC_1V8", ++ .microvolts = 1800000, ++ .init_data = &dc1v8_data, ++ .gpio = -1, ++}; ++ ++static struct platform_device dc1v8_device = { ++ .name = "reg-fixed-voltage", ++ .id = 0, ++ .dev = { ++ .platform_data = &dc1v8vdd_pdata, ++ }, ++}; ++ ++static struct regulator_consumer_supply dc5v_consumers[] = { ++ REGULATOR_SUPPLY("SPKVDDL", "spi0.1"), ++ REGULATOR_SUPPLY("SPKVDDR", "spi0.1"), ++}; ++ ++static struct regulator_init_data dc5v_data = { ++ .constraints = { ++ .always_on = 1, ++ }, ++ .num_consumer_supplies = ARRAY_SIZE(dc5v_consumers), ++ .consumer_supplies = dc5v_consumers, ++}; ++ ++static struct fixed_voltage_config dc5vvdd_pdata = { ++ .supply_name = "DC_5V", ++ .microvolts = 5000000, ++ .init_data = &dc5v_data, ++ .gpio = -1, ++}; ++ ++static struct platform_device dc5v_device = { ++ .name = "reg-fixed-voltage", ++ .id = 1, ++ .dev = { ++ .platform_data = &dc5vvdd_pdata, ++ }, ++}; ++#endif ++ ++#if defined(CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP_MODULE) || defined(CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP) ++#include ++ ++static struct platform_device snd_rpi_wsp_device = { ++ .name = "snd-rpi-wsp", ++ .id = 0, ++ .num_resources = 0, ++}; ++ ++static struct arizona_micd_config wm5102_micd[] = { ++ { 0, 1, 0 }, ++}; ++ ++static struct arizona_pdata snd_rpi_wsp_spi_platform_data = { ++ .reset = GPIO_WM5102_RST, ++ .ldoena = GPIO_WM5102_LDOEN, ++ .irq_flags = IRQF_TRIGGER_RISING, ++ .gpio_defaults = { ++ [2] = 0x04, /* OPCLK */ ++ [3] = 0x3d, /* ASYNC OPCLK */ ++ }, ++ .micd_configs = wm5102_micd, ++ .num_micd_configs = ARRAY_SIZE(wm5102_micd), ++ .dmic_ref = { ++ [1] = ARIZONA_DMIC_MICBIAS2, ++ }, ++ .inmode = { ++ [1] = ARIZONA_INMODE_DMIC, ++ [2] = ARIZONA_INMODE_SE, ++ }, ++ .clk32k_src = ARIZONA_32KZ_NONE, ++ .irq_gpio = GPIO_WM5102_IRQ, ++}; ++ ++static struct spi_board_info __initdata snd_rpi_wsp_spi_devices[] = { ++ { ++ .modalias = "wm5102", ++ .platform_data = &snd_rpi_wsp_spi_platform_data, ++ .max_speed_hz = 500000, ++ .bus_num = 0, ++ .chip_select = 1, ++ .mode = SPI_MODE_0, ++ } ++}; ++ ++static struct i2c_board_info __initdata snd_rpi_wsp_i2c_devices[] = { ++ { ++ I2C_BOARD_INFO("wm8804", 0x3A), ++ }, ++}; ++ ++#endif ++ + #if defined(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC) || defined(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC_MODULE) + static struct platform_device snd_hifiberry_dac_device = { + .name = "snd-hifiberry-dac", +@@ -772,6 +899,9 @@ int __init bcm_register_device(struct platform_device *pdev) + #define i2c_register_board_info_dt(busnum, info, n) \ + if (!use_dt) i2c_register_board_info(busnum, info, n) + ++#define spi_register_board_info_dt(info, n) \ ++ if (!use_dt) spi_register_board_info(info, n) ++ + int calc_rsts(int partition) + { + return PM_PASSWORD | +@@ -965,6 +1095,18 @@ void __init bcm2708_init(void) + i2c_register_board_info_dt(1, snd_pcm512x_i2c_devices, ARRAY_SIZE(snd_pcm512x_i2c_devices)); + #endif + ++#if defined(CONFIG_REGULATOR_FIXED_VOLTAGE_MODULE) || defined(CONFIG_REGULATOR_FIXED_VOLTAGE) ++ bcm_register_device_dt(&dc1v8_device); ++ bcm_register_device_dt(&dc5v_device); ++#endif ++ ++#if defined(CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP_MODULE) || defined(CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP) ++ bcm_register_device_dt(&snd_rpi_wsp_device); ++ spi_register_board_info_dt(snd_rpi_wsp_spi_devices, ARRAY_SIZE(snd_rpi_wsp_spi_devices)); ++ i2c_register_board_info_dt(1, snd_rpi_wsp_i2c_devices, ++ ARRAY_SIZE(snd_rpi_wsp_i2c_devices)); ++#endif ++ + if (!use_dt) { + for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { + struct amba_device *d = amba_devs[i]; +diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c +index 6523903..4211644 100644 +--- a/drivers/mfd/arizona-core.c ++++ b/drivers/mfd/arizona-core.c +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -94,6 +95,91 @@ int arizona_clk32k_disable(struct arizona *arizona) + } + EXPORT_SYMBOL_GPL(arizona_clk32k_disable); + ++int arizona_dvfs_up(struct arizona *arizona, unsigned int flags) ++{ ++ unsigned int new_flags; ++ int ret = 0; ++ ++ mutex_lock(&arizona->subsys_max_lock); ++ ++ new_flags = arizona->subsys_max_rq | flags; ++ ++ if (arizona->subsys_max_rq != new_flags) { ++ switch (arizona->type) { ++ case WM5102: ++ case WM8997: ++ ret = regulator_set_voltage(arizona->dcvdd, ++ 1800000, 1800000); ++ if (ret != 0) { ++ dev_err(arizona->dev, ++ "Failed to set DCVDD (DVFS up): %d\n", ++ ret); ++ goto err; ++ } ++ ++ ret = regmap_update_bits(arizona->regmap, ++ ARIZONA_DYNAMIC_FREQUENCY_SCALING_1, ++ ARIZONA_SUBSYS_MAX_FREQ, 1); ++ if (ret != 0) { ++ dev_err(arizona->dev, ++ "Failed to enable subsys max: %d\n", ++ ret); ++ regulator_set_voltage(arizona->dcvdd, ++ 1200000, 1800000); ++ goto err; ++ } ++ break; ++ ++ default: ++ break; ++ } ++ ++ arizona->subsys_max_rq = new_flags; ++ } ++err: ++ mutex_unlock(&arizona->subsys_max_lock); ++ return ret; ++} ++EXPORT_SYMBOL_GPL(arizona_dvfs_up); ++ ++int arizona_dvfs_down(struct arizona *arizona, unsigned int flags) ++{ ++ int ret = 0; ++ ++ mutex_lock(&arizona->subsys_max_lock); ++ ++ arizona->subsys_max_rq &= ~flags; ++ ++ if (arizona->subsys_max_rq == 0) { ++ switch (arizona->type) { ++ case WM5102: ++ case WM8997: ++ ret = regmap_update_bits(arizona->regmap, ++ ARIZONA_DYNAMIC_FREQUENCY_SCALING_1, ++ ARIZONA_SUBSYS_MAX_FREQ, 0); ++ if (ret != 0) ++ dev_err(arizona->dev, ++ "Failed to disable subsys max: %d\n", ++ ret); ++ ++ ret = regulator_set_voltage(arizona->dcvdd, ++ 1200000, 1800000); ++ if (ret != 0) ++ dev_err(arizona->dev, ++ "Failed to set DCVDD (DVFS down): %d\n", ++ ret); ++ break; ++ ++ default: ++ break; ++ } ++ } ++ ++ mutex_unlock(&arizona->subsys_max_lock); ++ return ret; ++} ++EXPORT_SYMBOL_GPL(arizona_dvfs_down); ++ + static irqreturn_t arizona_clkgen_err(int irq, void *data) + { + struct arizona *arizona = data; +@@ -330,6 +416,20 @@ err_fll: + return err; + } + ++static int arizona_dcvdd_notify(struct notifier_block *nb, ++ unsigned long action, void *data) ++{ ++ struct arizona *arizona = container_of(nb, struct arizona, ++ dcvdd_notifier); ++ ++ dev_dbg(arizona->dev, "DCVDD notify %lx\n", action); ++ ++ if (action & REGULATOR_EVENT_DISABLE) ++ msleep(20); ++ ++ return NOTIFY_DONE; ++} ++ + #ifdef CONFIG_PM + static int arizona_runtime_resume(struct device *dev) + { +@@ -519,6 +619,154 @@ int arizona_of_get_named_gpio(struct arizona *arizona, const char *prop, + } + EXPORT_SYMBOL_GPL(arizona_of_get_named_gpio); + ++static int arizona_of_get_u32_num_groups(struct arizona *arizona, ++ const char *prop, ++ int group_size) ++{ ++ int len_prop; ++ int num_groups; ++ ++ if (!of_get_property(arizona->dev->of_node, prop, &len_prop)) ++ return -EINVAL; ++ ++ num_groups = len_prop / (group_size * sizeof(u32)); ++ ++ if (num_groups * group_size * sizeof(u32) != len_prop) { ++ dev_err(arizona->dev, ++ "DT property %s is malformed: %d\n", ++ prop, -EOVERFLOW); ++ return -EOVERFLOW; ++ } ++ ++ return num_groups; ++} ++ ++static int arizona_of_get_micd_ranges(struct arizona *arizona, ++ const char *prop) ++{ ++ int nranges; ++ int i, j; ++ int ret = 0; ++ u32 value; ++ struct arizona_micd_range *micd_ranges; ++ ++ nranges = arizona_of_get_u32_num_groups(arizona, prop, 2); ++ if (nranges < 0) ++ return nranges; ++ ++ micd_ranges = devm_kzalloc(arizona->dev, ++ nranges * sizeof(struct arizona_micd_range), ++ GFP_KERNEL); ++ ++ for (i = 0, j = 0; i < nranges; ++i) { ++ ret = of_property_read_u32_index(arizona->dev->of_node, ++ prop, j++, &value); ++ if (ret < 0) ++ goto error; ++ micd_ranges[i].max = value; ++ ++ ret = of_property_read_u32_index(arizona->dev->of_node, ++ prop, j++, &value); ++ if (ret < 0) ++ goto error; ++ micd_ranges[i].key = value; ++ } ++ ++ arizona->pdata.micd_ranges = micd_ranges; ++ arizona->pdata.num_micd_ranges = nranges; ++ ++ return ret; ++ ++error: ++ devm_kfree(arizona->dev, micd_ranges); ++ dev_err(arizona->dev, "DT property %s is malformed: %d\n", prop, ret); ++ return ret; ++} ++ ++static int arizona_of_get_micd_configs(struct arizona *arizona, ++ const char *prop) ++{ ++ int nconfigs; ++ int i, j; ++ int ret = 0; ++ u32 value; ++ struct arizona_micd_config *micd_configs; ++ ++ nconfigs = arizona_of_get_u32_num_groups(arizona, prop, 3); ++ if (nconfigs < 0) ++ return nconfigs; ++ ++ micd_configs = devm_kzalloc(arizona->dev, ++ nconfigs * ++ sizeof(struct arizona_micd_config), ++ GFP_KERNEL); ++ ++ for (i = 0, j = 0; i < nconfigs; ++i) { ++ ret = of_property_read_u32_index(arizona->dev->of_node, ++ prop, j++, &value); ++ if (ret < 0) ++ goto error; ++ micd_configs[i].src = value; ++ ++ ret = of_property_read_u32_index(arizona->dev->of_node, ++ prop, j++, &value); ++ if (ret < 0) ++ goto error; ++ micd_configs[i].bias = value; ++ ++ ret = of_property_read_u32_index(arizona->dev->of_node, ++ prop, j++, &value); ++ if (ret < 0) ++ goto error; ++ micd_configs[i].gpio = value; ++ } ++ ++ arizona->pdata.micd_configs = micd_configs; ++ arizona->pdata.num_micd_configs = nconfigs; ++ ++ return ret; ++ ++error: ++ devm_kfree(arizona->dev, micd_configs); ++ dev_err(arizona->dev, "DT property %s is malformed: %d\n", prop, ret); ++ return ret; ++} ++ ++static int arizona_of_read_u32_array(struct arizona *arizona, ++ const char *prop, bool mandatory, ++ u32 *data, size_t num) ++{ ++ int ret; ++ ++ ret = of_property_read_u32_array(arizona->dev->of_node, prop, ++ data, num); ++ ++ if (ret >= 0) ++ return 0; ++ ++ switch (ret) { ++ case -EINVAL: ++ if (mandatory) ++ dev_err(arizona->dev, ++ "Mandatory DT property %s is missing\n", ++ prop); ++ break; ++ default: ++ dev_err(arizona->dev, ++ "DT property %s is malformed: %d\n", ++ prop, ret); ++ } ++ ++ return ret; ++} ++ ++static int arizona_of_read_u32(struct arizona *arizona, ++ const char* prop, bool mandatory, ++ u32 *data) ++{ ++ return arizona_of_read_u32_array(arizona, prop, mandatory, data, 1); ++} ++ + static int arizona_of_get_core_pdata(struct arizona *arizona) + { + struct arizona_pdata *pdata = &arizona->pdata; +@@ -552,6 +800,15 @@ static int arizona_of_get_core_pdata(struct arizona *arizona) + ret); + } + ++ arizona_of_read_u32(arizona, "wlf,clk32k-src", false, ++ &pdata->clk32k_src); ++ ++ arizona_of_get_micd_ranges(arizona, "wlf,micd-ranges"); ++ arizona_of_get_micd_configs(arizona, "wlf,micd-configs"); ++ ++ arizona_of_read_u32_array(arizona, "wlf,dmic-ref", false, ++ pdata->dmic_ref, ARRAY_SIZE(pdata->dmic_ref)); ++ + of_property_for_each_u32(arizona->dev->of_node, "wlf,inmode", prop, + cur, val) { + if (count == ARRAY_SIZE(arizona->pdata.inmode)) +@@ -571,6 +828,9 @@ static int arizona_of_get_core_pdata(struct arizona *arizona) + count++; + } + ++ arizona_of_read_u32(arizona, "wlf,irq_gpio", false, ++ &pdata->irq_gpio); ++ + return 0; + } + +@@ -670,6 +930,7 @@ int arizona_dev_init(struct arizona *arizona) + + dev_set_drvdata(arizona->dev, arizona); + mutex_init(&arizona->clk_lock); ++ mutex_init(&arizona->subsys_max_lock); + + if (dev_get_platdata(arizona->dev)) + memcpy(&arizona->pdata, dev_get_platdata(arizona->dev), +@@ -726,6 +987,14 @@ int arizona_dev_init(struct arizona *arizona) + goto err_early; + } + ++ arizona->dcvdd_notifier.notifier_call = arizona_dcvdd_notify; ++ ret = regulator_register_notifier(arizona->dcvdd, ++ &arizona->dcvdd_notifier); ++ if (ret < 0) { ++ dev_err(dev, "Failed to register DCVDD notifier %d\n", ret); ++ goto err_dcvdd; ++ } ++ + if (arizona->pdata.reset) { + /* Start out with /RESET low to put the chip into reset */ + ret = gpio_request_one(arizona->pdata.reset, +@@ -733,16 +1002,19 @@ int arizona_dev_init(struct arizona *arizona) + "arizona /RESET"); + if (ret != 0) { + dev_err(dev, "Failed to request /RESET: %d\n", ret); +- goto err_dcvdd; ++ goto err_notifier; + } + } + ++ /* Ensure period of reset asserted before we apply the supplies */ ++ msleep(20); ++ + ret = regulator_bulk_enable(arizona->num_core_supplies, + arizona->core_supplies); + if (ret != 0) { + dev_err(dev, "Failed to enable core supplies: %d\n", + ret); +- goto err_dcvdd; ++ goto err_notifier; + } + + ret = regulator_enable(arizona->dcvdd); +@@ -1060,6 +1332,8 @@ err_reset: + err_enable: + regulator_bulk_disable(arizona->num_core_supplies, + arizona->core_supplies); ++err_notifier: ++ regulator_unregister_notifier(arizona->dcvdd, &arizona->dcvdd_notifier); + err_dcvdd: + regulator_put(arizona->dcvdd); + err_early: +@@ -1073,6 +1347,7 @@ int arizona_dev_exit(struct arizona *arizona) + pm_runtime_disable(arizona->dev); + + regulator_disable(arizona->dcvdd); ++ regulator_unregister_notifier(arizona->dcvdd, &arizona->dcvdd_notifier); + regulator_put(arizona->dcvdd); + + mfd_remove_devices(arizona->dev); +diff --git a/drivers/regulator/arizona-ldo1.c b/drivers/regulator/arizona-ldo1.c +index a1d07d3..353b930 100644 +--- a/drivers/regulator/arizona-ldo1.c ++++ b/drivers/regulator/arizona-ldo1.c +@@ -78,11 +78,6 @@ static int arizona_ldo1_hc_set_voltage_sel(struct regulator_dev *rdev, + if (ret != 0) + return ret; + +- ret = regmap_update_bits(regmap, ARIZONA_DYNAMIC_FREQUENCY_SCALING_1, +- ARIZONA_SUBSYS_MAX_FREQ, val); +- if (ret != 0) +- return ret; +- + if (val) + return 0; + +@@ -268,6 +263,7 @@ static int arizona_ldo1_probe(struct platform_device *pdev) + } + + config.ena_gpio = arizona->pdata.ldoena; ++ config.ena_gpio_flags = GPIOF_OUT_INIT_LOW; + + if (arizona->pdata.ldo1) + config.init_data = arizona->pdata.ldo1; +diff --git a/include/linux/mfd/arizona/core.h b/include/linux/mfd/arizona/core.h +index 16a498f..e54676c 100644 +--- a/include/linux/mfd/arizona/core.h ++++ b/include/linux/mfd/arizona/core.h +@@ -117,6 +117,7 @@ struct arizona { + int num_core_supplies; + struct regulator_bulk_data core_supplies[ARIZONA_MAX_CORE_SUPPLIES]; + struct regulator *dcvdd; ++ struct notifier_block dcvdd_notifier; + + struct arizona_pdata pdata; + +@@ -135,6 +136,9 @@ struct arizona { + + bool ctrlif_error; + ++ struct mutex subsys_max_lock; ++ unsigned int subsys_max_rq; ++ + struct snd_soc_dapm_context *dapm; + + int tdm_width[ARIZONA_MAX_AIF]; +@@ -145,8 +149,17 @@ struct arizona { + struct mutex dac_comp_lock; + }; + ++#define ARIZONA_DVFS_SR1_RQ 0x00000001 ++#define ARIZONA_DVFS_SR2_RQ 0x00000002 ++#define ARIZONA_DVFS_SR3_RQ 0x00000004 ++#define ARIZONA_DVFS_ASR1_RQ 0x00000010 ++#define ARIZONA_DVFS_ASR2_RQ 0x00000020 ++#define ARIZONA_DVFS_ADSP1_RQ 0x00010000 ++ + int arizona_clk32k_enable(struct arizona *arizona); + int arizona_clk32k_disable(struct arizona *arizona); ++int arizona_dvfs_up(struct arizona *arizona, unsigned int mask); ++int arizona_dvfs_down(struct arizona *arizona, unsigned int mask); + + int arizona_request_irq(struct arizona *arizona, int irq, char *name, + irq_handler_t handler, void *data); +diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h +index 1065095..edd011a 100644 +--- a/include/sound/soc-dapm.h ++++ b/include/sound/soc-dapm.h +@@ -377,10 +377,11 @@ int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm, + int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card); + void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card); + int snd_soc_dapm_new_pcm(struct snd_soc_card *card, +- const struct snd_soc_pcm_stream *params, ++ struct snd_soc_pcm_stream *params, + unsigned int num_params, + struct snd_soc_dapm_widget *source, +- struct snd_soc_dapm_widget *sink); ++ struct snd_soc_dapm_widget *sink, ++ void *priv); + + /* dapm path setup */ + int snd_soc_dapm_new_widgets(struct snd_soc_card *card); +@@ -530,7 +531,7 @@ struct snd_soc_dapm_widget { + + void *priv; /* widget specific data */ + struct regulator *regulator; /* attached regulator */ +- const struct snd_soc_pcm_stream *params; /* params for dai links */ ++ struct snd_soc_pcm_stream *params; /* params for dai links */ + unsigned int num_params; /* number of params for dai links */ + unsigned int params_select; /* currently selected param for dai link */ + +diff --git a/include/sound/soc.h b/include/sound/soc.h +index f6226914..a9389cf 100644 +--- a/include/sound/soc.h ++++ b/include/sound/soc.h +@@ -954,7 +954,9 @@ struct snd_soc_dai_link { + struct device_node *platform_of_node; + int be_id; /* optional ID for machine driver BE identification */ + +- const struct snd_soc_pcm_stream *params; ++ struct snd_soc_pcm_stream *params; ++ /* optional params re-writing for dai links */ ++ int (*params_fixup)(struct snd_soc_dapm_widget *w, int event); + unsigned int num_params; + + unsigned int dai_fmt; /* format to set on init */ +diff --git a/sound/soc/bcm/Kconfig b/sound/soc/bcm/Kconfig +index 3db2852..7c5699a 100644 +--- a/sound/soc/bcm/Kconfig ++++ b/sound/soc/bcm/Kconfig +@@ -75,3 +75,15 @@ config SND_BCM2708_SOC_RASPIDAC3 + select SND_SOC_TPA6130A2 + help + Say Y or M if you want to add support for RaspiDAC Rev.3x. ++ ++config SND_BCM2708_SOC_RPI_CODEC_WSP_PREINIT ++ tristate ++ ++config SND_BCM2708_SOC_RPI_CODEC_WSP ++ tristate "Support for Cirrus sound pi" ++ depends on SND_BCM2708_SOC_I2S ++ select SND_SOC_WM5102 ++ select SND_SOC_WM8804 ++ select SND_BCM2708_SOC_RPI_CODEC_WSP_PREINIT ++ help ++ Say Y or M if you want to add support for Cirrus sound pi +diff --git a/sound/soc/bcm/Makefile b/sound/soc/bcm/Makefile +index 621358b..65e120d 100644 +--- a/sound/soc/bcm/Makefile ++++ b/sound/soc/bcm/Makefile +@@ -17,6 +17,8 @@ snd-soc-rpi-dac-objs := rpi-dac.o + snd-soc-rpi-proto-objs := rpi-proto.o + snd-soc-iqaudio-dac-objs := iqaudio-dac.o + snd-soc-raspidac3-objs := raspidac3.o ++snd-soc-rpi-wsp-objs := rpi-cirrus-sound-pi.o ++snd-soc-rpi-wsp-preinit-objs := rpi-cirrus-sound-pi-preinit.o + + obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC) += snd-soc-hifiberry-dac.o + obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DACPLUS) += snd-soc-hifiberry-dacplus.o +@@ -26,3 +28,5 @@ obj-$(CONFIG_SND_BCM2708_SOC_RPI_DAC) += snd-soc-rpi-dac.o + obj-$(CONFIG_SND_BCM2708_SOC_RPI_PROTO) += snd-soc-rpi-proto.o + obj-$(CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC) += snd-soc-iqaudio-dac.o + obj-$(CONFIG_SND_BCM2708_SOC_RASPIDAC3) += snd-soc-raspidac3.o ++obj-$(CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP) += snd-soc-rpi-wsp.o ++obj-$(CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP_PREINIT) += snd-soc-rpi-wsp-preinit.o +diff --git a/sound/soc/bcm/rpi-cirrus-sound-pi-preinit.c b/sound/soc/bcm/rpi-cirrus-sound-pi-preinit.c +new file mode 100644 +index 0000000..a2f17e4 +--- /dev/null ++++ b/sound/soc/bcm/rpi-cirrus-sound-pi-preinit.c +@@ -0,0 +1,188 @@ ++/* ++ * Cirrus Audio Card wm8804 preinit code ++ * ++ * Refactored out of the Cirrus Audio Card code to work around ++ * init dependecy issues. ++ * ++ * Copyright 2015 Cirrus Logic Inc. ++ * ++ * Author: Nikesh Oswal, ++ * Author: Matthias Reichl, ++ * Partly based on sound/soc/bcm/iqaudio-dac.c ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++/*TODO: Shift this to platform data*/ ++#define GPIO_WM8804_RST 8 ++#define GPIO_WM8804_MODE 2 ++#define GPIO_WM8804_SW_MODE 23 ++#define GPIO_WM8804_I2C_ADDR_B 18 ++#define GPIO_WM8804_I2C_ADDR_B_PLUS 13 ++ ++static void bcm2708_set_gpio_alt(int pin, int alt) ++{ ++ /* ++ * This is the common way to handle the GPIO pins for ++ * the Raspberry Pi. ++ * TODO This is a hack. Use pinmux / pinctrl. ++ */ ++#define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3)) ++#define SET_GPIO_ALT(g,a) *(gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3)) ++ unsigned int *gpio; ++ gpio = ioremap(GPIO_BASE, SZ_16K); ++ INP_GPIO(pin); ++ SET_GPIO_ALT(pin, alt); ++ iounmap(gpio); ++#undef INP_GPIO ++#undef SET_GPIO_ALT ++} ++ ++static int wm8804_reset(void) ++ { ++ int ret; ++ unsigned int gpio_wm8804_i2c_addr; ++ ++ if ((system_rev & 0xffffff) >= 0x10) { ++ /* Model B+ or later */ ++ gpio_wm8804_i2c_addr = GPIO_WM8804_I2C_ADDR_B_PLUS; ++ } else { ++ gpio_wm8804_i2c_addr = GPIO_WM8804_I2C_ADDR_B; ++ } ++ ++ if (!gpio_is_valid(GPIO_WM8804_RST)) { ++ pr_err("Skipping unavailable gpio %d (%s)\n", GPIO_WM8804_RST, "wm8804_rst"); ++ return -ENOMEM; ++ } ++ ++ if (!gpio_is_valid(GPIO_WM8804_MODE)) { ++ pr_err("Skipping unavailable gpio %d (%s)\n", GPIO_WM8804_MODE, "wm8804_mode"); ++ return -ENOMEM; ++ } ++ ++ if (!gpio_is_valid(GPIO_WM8804_SW_MODE)) { ++ pr_err("Skipping unavailable gpio %d (%s)\n", GPIO_WM8804_SW_MODE, "wm8804_sw_mode"); ++ return -ENOMEM; ++ } ++ ++ if (!gpio_is_valid(gpio_wm8804_i2c_addr)) { ++ pr_err("Skipping unavailable gpio %d (%s)\n", gpio_wm8804_i2c_addr, "wm8804_i2c_addr"); ++ return -ENOMEM; ++ } ++ ++ ret = gpio_request(GPIO_WM8804_RST, "wm8804_rst"); ++ if (ret < 0) { ++ pr_err("gpio_request wm8804_rst failed\n"); ++ return ret; ++ } ++ ++ ret = gpio_request(GPIO_WM8804_MODE, "wm8804_mode"); ++ if (ret < 0) { ++ pr_err("gpio_request wm8804_mode failed\n"); ++ return ret; ++ } ++ ++ ret = gpio_request(GPIO_WM8804_SW_MODE, "wm8804_sw_mode"); ++ if (ret < 0) { ++ pr_err("gpio_request wm8804_sw_mode failed\n"); ++ return ret; ++ } ++ ++ ret = gpio_request(gpio_wm8804_i2c_addr, "wm8804_i2c_addr"); ++ if (ret < 0) { ++ pr_err("gpio_request wm8804_i2c_addr failed\n"); ++ return ret; ++ } ++ ++ /*GPIO2 is used for SW/HW Mode Select and after Reset the same pin is used as ++ I2C data line, so initially it is configured as GPIO OUT from BCM perspective*/ ++ /*Set SW Mode*/ ++ ret = gpio_direction_output(GPIO_WM8804_MODE, 1); ++ if (ret < 0) { ++ pr_err("gpio_direction_output wm8804_mode failed\n"); ++ } ++ ++ /*Set 2 Wire (I2C) Mode*/ ++ ret = gpio_direction_output(GPIO_WM8804_SW_MODE, 0); ++ if (ret < 0) { ++ pr_err("gpio_direction_output wm8804_sw_mode failed\n"); ++ } ++ ++ /*Set 2 Wire (I2C) Addr to 0x3A, writing 1 will make the Addr as 0x3B*/ ++ ret = gpio_direction_output(gpio_wm8804_i2c_addr, 0); ++ if (ret < 0) { ++ pr_err("gpio_direction_output wm8804_i2c_addr failed\n"); ++ } ++ ++ /*Take WM8804 out of reset*/ ++ ret = gpio_direction_output(GPIO_WM8804_RST, 1); ++ if (ret < 0) { ++ pr_err("gpio_direction_output wm8804_rst failed\n"); ++ } ++ ++ /*Put WM8804 in reset*/ ++ gpio_set_value(GPIO_WM8804_RST, 0); ++ mdelay(500); ++ /*Take WM8804 out of reset*/ ++ gpio_set_value(GPIO_WM8804_RST, 1); ++ mdelay(500); ++ ++ gpio_free(GPIO_WM8804_RST); ++ gpio_free(GPIO_WM8804_MODE); ++ gpio_free(GPIO_WM8804_SW_MODE); ++ gpio_free(gpio_wm8804_i2c_addr); ++ ++ /*GPIO2 is used for SW/HW Mode Select and after Reset the same pin is used as ++ I2C data line, so after reset it is configured as I2C data line i.e ALT0 function*/ ++ bcm2708_set_gpio_alt(GPIO_WM8804_MODE, 0); ++ ++ return ret; ++} ++ ++static int snd_rpi_wsp_preinit_probe(struct platform_device *pdev) ++{ ++ int ret; ++ struct device *dev = &pdev->dev; ++ ++ dev_info(dev, "initializing wm8804 on Cirrus audio card\n"); ++ ret = wm8804_reset(); ++ if (ret) ++ dev_err(dev, "wm8804_reset returned %d\n", ret); ++ ++ return ret; ++} ++ ++#ifdef CONFIG_OF ++static const struct of_device_id snd_rpi_wsp_preinit_of_match[] = { ++ { .compatible = "wlf,rpi-wm5102-preinit", }, ++ {}, ++}; ++MODULE_DEVICE_TABLE(of, snd_rpi_wsp_preinit_of_match); ++#endif /* CONFIG_OF */ ++ ++static struct platform_driver snd_rpi_wsp_preinit_driver = { ++ .driver = { ++ .name = "snd-rpi-wsp-preinit", ++ .owner = THIS_MODULE, ++ .of_match_table = of_match_ptr(snd_rpi_wsp_preinit_of_match), ++ }, ++ .probe = snd_rpi_wsp_preinit_probe, ++}; ++ ++module_platform_driver(snd_rpi_wsp_preinit_driver); ++ ++MODULE_AUTHOR("Nikesh Oswal"); ++MODULE_AUTHOR("Liu Xin"); ++MODULE_AUTHOR("Matthias Reichl"); ++MODULE_DESCRIPTION("Cirrus sound pi wm8804 one-time initialisation code"); ++MODULE_LICENSE("GPL"); +diff --git a/sound/soc/bcm/rpi-cirrus-sound-pi.c b/sound/soc/bcm/rpi-cirrus-sound-pi.c +new file mode 100644 +index 0000000..f7b8839 +--- /dev/null ++++ b/sound/soc/bcm/rpi-cirrus-sound-pi.c +@@ -0,0 +1,530 @@ ++/* ++ * ASoC machine driver for Cirrus Audio Card (with a WM5102 and WM8804 codecs ) ++ * connected to a Raspberry Pi ++ * ++ * Copyright 2015 Cirrus Logic Inc. ++ * ++ * Author: Nikesh Oswal, ++ * Partly based on sound/soc/bcm/iqaudio-dac.c ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++ ++#include "../codecs/wm5102.h" ++#include "../codecs/wm8804.h" ++ ++#define WM8804_CLKOUT_HZ 12000000 ++ ++#define RPI_WLF_SR 44100 ++#define WM5102_MAX_SYSCLK_1 49152000 /*max sysclk for 4K family*/ ++#define WM5102_MAX_SYSCLK_2 45158400 /*max sysclk for 11.025K family*/ ++ ++static struct snd_soc_card snd_rpi_wsp; ++ ++struct wm5102_machine_priv { ++ int wm8804_sr; ++ int wm5102_sr; ++ int sync_path_enable; ++}; ++ ++enum { ++ GPIO_FSEL_INPUT, GPIO_FSEL_OUTPUT, ++ GPIO_FSEL_ALT5, GPIO_FSEL_ALT_4, ++ GPIO_FSEL_ALT0, GPIO_FSEL_ALT1, ++ GPIO_FSEL_ALT2, GPIO_FSEL_ALT3, ++}; ++ ++int spdif_rx_enable_event(struct snd_soc_dapm_widget *w, ++ struct snd_kcontrol *kcontrol, int event) ++{ ++ struct snd_soc_card *card = &snd_rpi_wsp; ++ struct wm5102_machine_priv *priv = snd_soc_card_get_drvdata(card); ++ struct snd_soc_codec *wm5102_codec = card->rtd[0].codec; ++ int ret = 0; ++ int clk_freq; ++ int sr = priv->wm8804_sr; ++ ++ switch (event) { ++ case SND_SOC_DAPM_POST_PMU: ++ /* Enable sync path in case of SPDIF capture use case */ ++ clk_freq = (sr % 4000 == 0) ? WM5102_MAX_SYSCLK_1 : WM5102_MAX_SYSCLK_2; ++ ++ /*reset FLL1*/ ++ snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1_REFCLK, ++ ARIZONA_FLL_SRC_NONE, 0, 0); ++ snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, ++ ARIZONA_FLL_SRC_NONE, 0, 0); ++ ++ ret = snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1_REFCLK, ++ ARIZONA_CLK_SRC_MCLK1, ++ WM8804_CLKOUT_HZ, ++ clk_freq); ++ if (ret != 0) { ++ dev_err(wm5102_codec->dev, "Failed to enable FLL1 with Ref Clock Loop: %d\n", ret); ++ return ret; ++ } ++ ++ ret = snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, ++ ARIZONA_CLK_SRC_AIF2BCLK, ++ sr * 64, clk_freq); ++ if (ret != 0) { ++ dev_err(wm5102_codec->dev, "Failed to enable FLL1 Sync Clock Loop: %d\n", ret); ++ return ret; ++ } ++ priv->sync_path_enable = 1; ++ break; ++ case SND_SOC_DAPM_POST_PMD: ++ priv->sync_path_enable = 0; ++ break; ++ } ++ ++ return ret; ++} ++ ++static const struct snd_kcontrol_new rpi_wsp_controls[] = { ++ SOC_DAPM_PIN_SWITCH("DMIC"), ++ SOC_DAPM_PIN_SWITCH("Headset Mic"), ++ SOC_DAPM_PIN_SWITCH("SPDIF Out"), ++ SOC_DAPM_PIN_SWITCH("SPDIF In"), ++ SOC_DAPM_PIN_SWITCH("Line Input"), ++}; ++ ++const struct snd_soc_dapm_widget rpi_wsp_dapm_widgets[] = { ++ SND_SOC_DAPM_MIC("DMIC", NULL), ++ SND_SOC_DAPM_MIC("Headset Mic", NULL), ++ SND_SOC_DAPM_MIC("Line Input", NULL), ++ SND_SOC_DAPM_INPUT("dummy SPDIF in"), ++ SND_SOC_DAPM_PGA_E("dummy SPDIFRX", SND_SOC_NOPM, 0, 0,NULL, 0, ++ spdif_rx_enable_event, ++ SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), ++}; ++ ++const struct snd_soc_dapm_route rpi_wsp_dapm_routes[] = { ++ { "IN1L", NULL, "Headset Mic" }, ++ { "IN1R", NULL, "Headset Mic" }, ++ { "Headset Mic", NULL, "MICBIAS1" }, ++ ++ { "IN2L", NULL, "DMIC" }, ++ { "IN2R", NULL, "DMIC" }, ++ { "DMIC", NULL, "MICBIAS2" }, ++ ++ { "IN3L", NULL, "Line Input" }, ++ { "IN3R", NULL, "Line Input" }, ++ { "Line Input", NULL, "MICBIAS3" }, ++ ++ /* Dummy routes to check whether SPDIF RX is enabled or not */ ++ {"dummy SPDIFRX", NULL, "dummy SPDIF in"}, ++ {"AIFTX", NULL, "dummy SPDIFRX"}, ++}; ++ ++static int rpi_set_bias_level(struct snd_soc_card *card, ++ struct snd_soc_dapm_context *dapm, ++ enum snd_soc_bias_level level) ++{ ++ struct snd_soc_codec *wm5102_codec = card->rtd[0].codec; ++ struct wm5102_machine_priv *priv = snd_soc_card_get_drvdata(card); ++ ++ int ret; ++ int sr = priv->wm5102_sr; ++ int clk_freq = (sr % 4000 == 0) ? WM5102_MAX_SYSCLK_1 : WM5102_MAX_SYSCLK_2; ++ ++ switch (level) { ++ case SND_SOC_BIAS_OFF: ++ break; ++ case SND_SOC_BIAS_ON: ++ if (!priv->sync_path_enable) { ++ ret = snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, ++ ARIZONA_CLK_SRC_MCLK1, ++ WM8804_CLKOUT_HZ, ++ clk_freq); ++ if (ret != 0) { ++ dev_err(wm5102_codec->dev, "Failed to enable FLL1 with Ref Clock Loop: %d\n", ret); ++ return ret; ++ } ++ } ++ break; ++ default: ++ break; ++ } ++ ++ dapm->bias_level = level; ++ ++ return 0; ++} ++ ++static int rpi_set_bias_level_post(struct snd_soc_card *card, ++ struct snd_soc_dapm_context *dapm, ++ enum snd_soc_bias_level level) ++{ ++ struct snd_soc_codec *wm5102_codec = card->rtd[0].codec; ++ ++ switch (level) { ++ case SND_SOC_BIAS_STANDBY: ++ snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, ++ ARIZONA_FLL_SRC_NONE, 0, 0); ++ snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1_REFCLK, ++ ARIZONA_FLL_SRC_NONE, 0, 0); ++ break; ++ default: ++ break; ++ } ++ ++ dapm->bias_level = level; ++ ++ return 0; ++} ++ ++static int snd_rpi_wsp_config_5102_clks(struct snd_soc_codec *wm5102_codec, int sr) ++{ ++ int ret; ++ int clk_freq = (sr % 4000 == 0) ? WM5102_MAX_SYSCLK_1 : WM5102_MAX_SYSCLK_2; ++ ++ /*reset FLL1*/ ++ snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, ++ ARIZONA_FLL_SRC_NONE, 0, 0); ++ ++ ret = snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, ++ ARIZONA_CLK_SRC_MCLK1, ++ WM8804_CLKOUT_HZ, ++ clk_freq); ++ ++ if (ret != 0) { ++ dev_err(wm5102_codec->dev, "Failed to set FLL1: %d\n", ret); ++ return ret; ++ } ++ ++ ret = snd_soc_codec_set_sysclk(wm5102_codec, ++ ARIZONA_CLK_SYSCLK, ++ ARIZONA_CLK_SRC_FLL1, ++ clk_freq, ++ SND_SOC_CLOCK_IN); ++ if (ret != 0) { ++ dev_err(wm5102_codec->dev, "Failed to set AYNCCLK: %d\n", ret); ++ return ret; ++ } ++ ++ return 0; ++ } ++ ++static int snd_rpi_wsp_config_8804_clks(struct snd_soc_codec *wm8804_codec, ++ struct snd_soc_dai *wm8804_dai, int sr) ++ { ++ int ret; ++ ++ /*Set OSC(12MHz) to CLK2 freq*/ ++ /*Based on MCLKDIV it will be 128fs (MCLKDIV=1) or 256fs mode (MCLKDIV=0)*/ ++ /*BCLK will be MCLK/2 (MCLKDIV=1) or MCLK/4 (MCLKDIV=0) so BCLK is 64fs always*/ ++ ret = snd_soc_dai_set_pll(wm8804_dai, 0, 0, WM8804_CLKOUT_HZ, sr * 256); ++ if (ret != 0) { ++ dev_err(wm8804_codec->dev, "Failed to set OSC to CLK2 frequency: %d\n", ret); ++ return ret; ++ } ++ ++ /*Set MCLK as PLL Output*/ ++ ret = snd_soc_dai_set_sysclk(wm8804_dai, WM8804_TX_CLKSRC_PLL, sr * 256, 0); ++ if (ret != 0) { ++ dev_err(wm8804_codec->dev, "Failed to set MCLK as PLL Output: %d\n", ret); ++ return ret; ++ } ++ ++ /*Fix MCLKDIV=0 for 256fs to avoid any issues switching between TX and RX. RX always expects 256fs*/ ++ ret = snd_soc_dai_set_clkdiv(wm8804_dai, WM8804_MCLK_DIV, 0 ); ++ if (ret != 0) { ++ dev_err(wm8804_codec->dev, "Failed to set MCLK_DIV to 256fs: %d\n", ret); ++ return ret; ++ } ++ ++ /*Set CLKOUT as OSC Frequency*/ ++ ret = snd_soc_dai_set_sysclk(wm8804_dai, WM8804_CLKOUT_SRC_OSCCLK, WM8804_CLKOUT_HZ, 0); ++ if (ret != 0) { ++ dev_err(wm8804_codec->dev, "Failed to set CLKOUT as OSC Frequency: %d\n", ret); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static int snd_rpi_wsp_hw_params(struct snd_pcm_substream *substream, ++ struct snd_pcm_hw_params *params) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_card *card = rtd->card; ++ struct snd_soc_codec *wm5102_codec = rtd->codec; ++ struct snd_soc_dai *bcm_i2s_dai = rtd->cpu_dai; ++ struct snd_soc_codec *wm8804_codec = card->rtd[1].codec; ++ struct snd_soc_dai *wm8804_codec_dai = card->rtd[1].codec_dai; ++ struct wm5102_machine_priv *priv = snd_soc_card_get_drvdata(card); ++ int ret, capture_stream_opened,playback_stream_opened; ++ unsigned int bclkratio, tx_mask, rx_mask; ++ int width, num_slots=1; ++ ++ bclkratio = 2 * snd_pcm_format_physical_width(params_format(params)); ++ ++ ret = snd_soc_dai_set_bclk_ratio(bcm_i2s_dai, bclkratio); ++ if (ret < 0) { ++ dev_err(wm5102_codec->dev, "set_bclk_ratio failed: %d\n", ret); ++ return ret; ++ } ++ ++ /*8804 supports sample rates from 32k only*/ ++ /*Setting <32k raises error from 8804 driver while setting the clock*/ ++ if(params_rate(params) >= 32000) ++ { ++ ret = snd_rpi_wsp_config_8804_clks(wm8804_codec, wm8804_codec_dai, ++ params_rate(params)); ++ ++ if (ret != 0) { ++ dev_err(wm8804_codec->dev, "snd_rpi_wsp_config_8804_clks failed: %d\n", ++ ret); ++ return ret; ++ } ++ } ++ ++ capture_stream_opened = ++ substream->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream_opened; ++ playback_stream_opened = ++ substream->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream_opened; ++ ++ priv->wm5102_sr = params_rate(params); ++ ++ ret = snd_rpi_wsp_config_5102_clks(wm5102_codec, params_rate(params)); ++ if (ret != 0) { ++ dev_err(wm5102_codec->dev, "snd_rpi_wsp_config_5102_clks failed: %d\n", ret); ++ return ret; ++ } ++ ++ width = snd_pcm_format_physical_width(params_format(params)); ++ ++ if (capture_stream_opened) { ++ tx_mask = 0; ++ rx_mask = 1; ++ } ++ if (playback_stream_opened) { ++ tx_mask = 1; ++ rx_mask = 0; ++ } ++ ret = snd_soc_dai_set_tdm_slot(rtd->codec_dai, tx_mask, rx_mask, num_slots, width); ++ if (ret < 0) ++ return ret; ++ ++ priv->wm8804_sr = params_rate(params); ++ ++ return 0; ++} ++ ++static int dai_link2_params_fixup(struct snd_soc_dapm_widget *w, int event) ++{ ++ struct snd_soc_card *card = &snd_rpi_wsp; ++ struct wm5102_machine_priv *priv = snd_soc_card_get_drvdata(card); ++ struct snd_soc_pcm_stream *config = w->params; ++ ++ if (event == SND_SOC_DAPM_PRE_PMU) { ++ config->rate_min = priv->wm8804_sr; ++ config->rate_max = priv->wm8804_sr; ++ } else if (event == SND_SOC_DAPM_PRE_PMD) { ++ config->rate_min = RPI_WLF_SR; ++ config->rate_max = RPI_WLF_SR; ++ } ++ ++ return 0; ++} ++ ++static int snd_rpi_wsp_hw_free(struct snd_pcm_substream *substream) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_codec *wm5102_codec = rtd->codec; ++ int ret,playback_stream_opened,capture_stream_opened; ++ ++ playback_stream_opened = substream->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream_opened; ++ ++ capture_stream_opened = substream->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream_opened; ++ ++ if((playback_stream_opened + capture_stream_opened) == 1){ ++ ++ ret = snd_soc_codec_set_sysclk(wm5102_codec, ++ ARIZONA_CLK_SYSCLK, ++ ARIZONA_CLK_SRC_FLL1, ++ 0, ++ SND_SOC_CLOCK_IN); ++ ++ if (ret != 0) { ++ dev_err(wm5102_codec->dev, "Failed to set SYSCLK to Zero: %d\n", ret); ++ return ret; ++ } ++ } ++ ++ return 0; ++} ++ ++static struct snd_soc_ops snd_rpi_wsp_ops = { ++ .hw_params = snd_rpi_wsp_hw_params, ++ .hw_free = snd_rpi_wsp_hw_free, ++}; ++ ++static struct snd_soc_pcm_stream dai_link2_params = { ++ .formats = SNDRV_PCM_FMTBIT_S24_LE, ++ .rate_min = RPI_WLF_SR, ++ .rate_max = RPI_WLF_SR, ++ .channels_min = 2, ++ .channels_max = 2, ++}; ++ ++static struct snd_soc_dai_link snd_rpi_wsp_dai[] = { ++ { ++ .name = "WM5102", ++ .stream_name = "WM5102 AiFi", ++ .cpu_dai_name = "bcm2708-i2s.0", ++ .codec_dai_name = "wm5102-aif1", ++ .platform_name = "bcm2708-i2s.0", ++ .codec_name = "wm5102-codec", ++ .dai_fmt = SND_SOC_DAIFMT_I2S ++ | SND_SOC_DAIFMT_NB_NF ++ | SND_SOC_DAIFMT_CBM_CFM, ++ .ops = &snd_rpi_wsp_ops, ++ }, ++ { ++ .name = "WM5102 SPDIF", ++ .stream_name = "SPDIF Tx/Rx", ++ .cpu_dai_name = "wm5102-aif2", ++ .codec_dai_name = "wm8804-spdif", ++ .codec_name = "wm8804.1-003a", ++ .dai_fmt = SND_SOC_DAIFMT_I2S ++ | SND_SOC_DAIFMT_NB_NF ++ | SND_SOC_DAIFMT_CBM_CFM, ++ .ignore_suspend = 1, ++ .params = &dai_link2_params, ++ .params_fixup = dai_link2_params_fixup, ++ }, ++}; ++ ++static int snd_rpi_wsp_late_probe(struct snd_soc_card *card) ++{ ++ struct wm5102_machine_priv *priv = snd_soc_card_get_drvdata(card); ++ int ret; ++ ++ priv->wm8804_sr = RPI_WLF_SR; ++ priv->wm5102_sr = RPI_WLF_SR; ++ priv->sync_path_enable = 0; ++ ++ ret = snd_soc_codec_set_sysclk(card->rtd[0].codec, ARIZONA_CLK_SYSCLK, ARIZONA_CLK_SRC_FLL1, ++ 0, SND_SOC_CLOCK_IN); ++ if (ret != 0) { ++ dev_err(card->rtd[0].codec->dev, "Failed to set SYSCLK to Zero: %d\n", ret); ++ return ret; ++ } ++ ++ ret = snd_rpi_wsp_config_8804_clks(card->rtd[1].codec, card->rtd[1].codec_dai, RPI_WLF_SR); ++ ++ if (ret != 0) { ++ dev_err(card->rtd[1].codec->dev, "snd_rpi_wsp_config_8804_clks failed: %d\n", ret); ++ return ret; ++ } ++ ++ ret = snd_soc_dai_set_sysclk(card->rtd[0].codec_dai, ARIZONA_CLK_SYSCLK, 0, 0); ++ if (ret != 0) { ++ dev_err(card->rtd[0].codec->dev, "Failed to set codec dai clk domain: %d\n", ret); ++ return ret; ++ } ++ ++ ret = snd_soc_dai_set_sysclk(card->rtd[1].cpu_dai, ARIZONA_CLK_SYSCLK, 0, 0); ++ if (ret != 0) { ++ dev_err(card->rtd[0].codec->dev, "Failed to set codec dai clk domain: %d\n", ret); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++/* audio machine driver */ ++static struct snd_soc_card snd_rpi_wsp = { ++ .name = "snd_rpi_wsp", ++ .dai_link = snd_rpi_wsp_dai, ++ .num_links = ARRAY_SIZE(snd_rpi_wsp_dai), ++ .late_probe = snd_rpi_wsp_late_probe, ++ .controls = rpi_wsp_controls, ++ .num_controls = ARRAY_SIZE(rpi_wsp_controls), ++ .dapm_widgets = rpi_wsp_dapm_widgets, ++ .num_dapm_widgets = ARRAY_SIZE(rpi_wsp_dapm_widgets), ++ .dapm_routes = rpi_wsp_dapm_routes, ++ .num_dapm_routes = ARRAY_SIZE(rpi_wsp_dapm_routes), ++ .set_bias_level = rpi_set_bias_level, ++ .set_bias_level_post = rpi_set_bias_level_post, ++}; ++ ++static int snd_rpi_wsp_probe(struct platform_device *pdev) ++{ ++ int ret = 0; ++ struct wm5102_machine_priv *wm5102; ++ ++ wm5102 = kzalloc(sizeof *wm5102, GFP_KERNEL); ++ if (!wm5102) ++ return -ENOMEM; ++ ++ snd_soc_card_set_drvdata(&snd_rpi_wsp, wm5102); ++ ++ if (pdev->dev.of_node) { ++ struct device_node *i2s_node; ++ struct snd_soc_dai_link *dai = &snd_rpi_wsp_dai[0]; ++ i2s_node = of_parse_phandle(pdev->dev.of_node, ++ "i2s-controller", 0); ++ ++ if (i2s_node) { ++ dai->cpu_dai_name = NULL; ++ dai->cpu_of_node = i2s_node; ++ dai->platform_name = NULL; ++ dai->platform_of_node = i2s_node; ++ } ++ } ++ ++ snd_rpi_wsp.dev = &pdev->dev; ++ ret = snd_soc_register_card(&snd_rpi_wsp); ++ if (ret) { ++ dev_err(&pdev->dev, "Failed to register card: %d\n", ret); ++ kfree(wm5102); ++ } ++ ++ return ret; ++} ++ ++static int snd_rpi_wsp_remove(struct platform_device *pdev) ++{ ++ struct snd_soc_card *card = &snd_rpi_wsp; ++ struct wm5102_machine_priv *wm5102 = snd_soc_card_get_drvdata(card); ++ ++ snd_soc_unregister_card(&snd_rpi_wsp); ++ kfree(wm5102); ++ ++ return 0; ++} ++ ++#ifdef CONFIG_OF ++static const struct of_device_id snd_rpi_wsp_of_match[] = { ++ { .compatible = "wlf,rpi-wm5102", }, ++ {}, ++}; ++MODULE_DEVICE_TABLE(of, snd_rpi_wsp_of_match); ++#endif /* CONFIG_OF */ ++ ++static struct platform_driver snd_rpi_wsp_driver = { ++ .driver = { ++ .name = "snd-rpi-wsp", ++ .owner = THIS_MODULE, ++ .of_match_table = of_match_ptr(snd_rpi_wsp_of_match), ++ }, ++ .probe = snd_rpi_wsp_probe, ++ .remove = snd_rpi_wsp_remove, ++}; ++ ++module_platform_driver(snd_rpi_wsp_driver); ++ ++MODULE_SOFTDEP("pre: snd_soc_wm8804_i2c"); ++MODULE_AUTHOR("Nikesh Oswal"); ++MODULE_AUTHOR("Liu Xin"); ++MODULE_DESCRIPTION("ASoC Driver for Raspberry Pi connected to Cirrus sound pi"); ++MODULE_LICENSE("GPL"); +diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c +index ee91edc..6f19255 100644 +--- a/sound/soc/codecs/arizona.c ++++ b/sound/soc/codecs/arizona.c +@@ -1266,7 +1266,7 @@ static int arizona_hw_params_rate(struct snd_pcm_substream *substream, + struct arizona_priv *priv = snd_soc_codec_get_drvdata(codec); + struct arizona_dai_priv *dai_priv = &priv->dai[dai->id - 1]; + int base = dai->driver->base; +- int i, sr_val; ++ int i, sr_val, ret; + + /* + * We will need to be more flexible than this in future, +@@ -1282,6 +1282,26 @@ static int arizona_hw_params_rate(struct snd_pcm_substream *substream, + } + sr_val = i; + ++ switch (priv->arizona->type) { ++ case WM5102: ++ case WM8997: ++ if (arizona_sr_vals[sr_val] >= 88200) ++ ret = arizona_dvfs_up(priv->arizona, ++ ARIZONA_DVFS_SR1_RQ); ++ else ++ ret = arizona_dvfs_down(priv->arizona, ++ ARIZONA_DVFS_SR1_RQ); ++ ++ if (ret != 0) { ++ arizona_aif_err(dai, "Failed to change DVFS %d\n", ret); ++ return ret; ++ } ++ break; ++ ++ default: ++ break; ++ } ++ + switch (dai_priv->clk) { + case ARIZONA_CLK_SYSCLK: + switch (priv->arizona->type) { +diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c +index d476221..fc50c6d 100644 +--- a/sound/soc/codecs/wm5102.c ++++ b/sound/soc/codecs/wm5102.c +@@ -613,6 +613,49 @@ static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w, + return 0; + } + ++static int wm5102_adsp_power_ev(struct snd_soc_dapm_widget *w, ++ struct snd_kcontrol *kcontrol, int event) ++{ ++ struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); ++ struct arizona *arizona = dev_get_drvdata(codec->dev->parent); ++ unsigned int v; ++ int ret; ++ ++ switch (event) { ++ case SND_SOC_DAPM_PRE_PMU: ++ ret = regmap_read(arizona->regmap, ARIZONA_SYSTEM_CLOCK_1, &v); ++ if (ret != 0) { ++ dev_err(codec->dev, ++ "Failed to read SYSCLK state: %d\n", ret); ++ return -EIO; ++ } ++ ++ v = (v & ARIZONA_SYSCLK_FREQ_MASK) >> ARIZONA_SYSCLK_FREQ_SHIFT; ++ ++ if (v >= 3) { ++ ret = arizona_dvfs_up(arizona, ARIZONA_DVFS_ADSP1_RQ); ++ if (ret != 0) { ++ dev_err(codec->dev, ++ "Failed to raise DVFS: %d\n", ret); ++ return ret; ++ } ++ } ++ break; ++ ++ case SND_SOC_DAPM_POST_PMD: ++ ret = arizona_dvfs_down(arizona, ARIZONA_DVFS_ADSP1_RQ); ++ if (ret != 0) ++ dev_warn(codec->dev, ++ "Failed to lower DVFS: %d\n", ret); ++ break; ++ ++ default: ++ break; ++ } ++ ++ return wm_adsp2_early_event(w, kcontrol, event); ++} ++ + static int wm5102_out_comp_coeff_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) + { +@@ -1367,7 +1410,7 @@ ARIZONA_MUX_WIDGETS(ISRC2DEC2, "ISRC2DEC2"), + ARIZONA_MUX_WIDGETS(ISRC2INT1, "ISRC2INT1"), + ARIZONA_MUX_WIDGETS(ISRC2INT2, "ISRC2INT2"), + +-WM_ADSP2("DSP1", 0), ++WM_ADSP2_E("DSP1", 0, wm5102_adsp_power_ev), + + SND_SOC_DAPM_OUTPUT("HPOUT1L"), + SND_SOC_DAPM_OUTPUT("HPOUT1R"), +@@ -1918,7 +1961,7 @@ static int wm5102_probe(struct platform_device *pdev) + wm5102->core.adsp[0].mem = wm5102_dsp1_regions; + wm5102->core.adsp[0].num_mems = ARRAY_SIZE(wm5102_dsp1_regions); + +- ret = wm_adsp2_init(&wm5102->core.adsp[0], true); ++ ret = wm_adsp2_init(&wm5102->core.adsp[0]); + if (ret != 0) + return ret; + +diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c +index d01c209..bbbc5c2 100644 +--- a/sound/soc/codecs/wm_adsp.c ++++ b/sound/soc/codecs/wm_adsp.c +@@ -1531,35 +1531,6 @@ static void wm_adsp2_boot_work(struct work_struct *work) + return; + } + +- if (dsp->dvfs) { +- ret = regmap_read(dsp->regmap, +- dsp->base + ADSP2_CLOCKING, &val); +- if (ret != 0) { +- adsp_err(dsp, "Failed to read clocking: %d\n", ret); +- return; +- } +- +- if ((val & ADSP2_CLK_SEL_MASK) >= 3) { +- ret = regulator_enable(dsp->dvfs); +- if (ret != 0) { +- adsp_err(dsp, +- "Failed to enable supply: %d\n", +- ret); +- return; +- } +- +- ret = regulator_set_voltage(dsp->dvfs, +- 1800000, +- 1800000); +- if (ret != 0) { +- adsp_err(dsp, +- "Failed to raise supply: %d\n", +- ret); +- return; +- } +- } +- } +- + ret = wm_adsp2_ena(dsp); + if (ret != 0) + return; +@@ -1653,21 +1624,6 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w, + regmap_write(dsp->regmap, dsp->base + ADSP2_WDMA_CONFIG_2, 0); + regmap_write(dsp->regmap, dsp->base + ADSP2_RDMA_CONFIG_1, 0); + +- if (dsp->dvfs) { +- ret = regulator_set_voltage(dsp->dvfs, 1200000, +- 1800000); +- if (ret != 0) +- adsp_warn(dsp, +- "Failed to lower supply: %d\n", +- ret); +- +- ret = regulator_disable(dsp->dvfs); +- if (ret != 0) +- adsp_err(dsp, +- "Failed to enable supply: %d\n", +- ret); +- } +- + list_for_each_entry(ctl, &dsp->ctl_list, list) + ctl->enabled = 0; + +@@ -1694,7 +1650,7 @@ err: + } + EXPORT_SYMBOL_GPL(wm_adsp2_event); + +-int wm_adsp2_init(struct wm_adsp *adsp, bool dvfs) ++int wm_adsp2_init(struct wm_adsp *adsp) + { + int ret; + +@@ -1713,33 +1669,6 @@ int wm_adsp2_init(struct wm_adsp *adsp, bool dvfs) + INIT_LIST_HEAD(&adsp->ctl_list); + INIT_WORK(&adsp->boot_work, wm_adsp2_boot_work); + +- if (dvfs) { +- adsp->dvfs = devm_regulator_get(adsp->dev, "DCVDD"); +- if (IS_ERR(adsp->dvfs)) { +- ret = PTR_ERR(adsp->dvfs); +- adsp_err(adsp, "Failed to get DCVDD: %d\n", ret); +- return ret; +- } +- +- ret = regulator_enable(adsp->dvfs); +- if (ret != 0) { +- adsp_err(adsp, "Failed to enable DCVDD: %d\n", ret); +- return ret; +- } +- +- ret = regulator_set_voltage(adsp->dvfs, 1200000, 1800000); +- if (ret != 0) { +- adsp_err(adsp, "Failed to initialise DVFS: %d\n", ret); +- return ret; +- } +- +- ret = regulator_disable(adsp->dvfs); +- if (ret != 0) { +- adsp_err(adsp, "Failed to disable DCVDD: %d\n", ret); +- return ret; +- } +- } +- + return 0; + } + EXPORT_SYMBOL_GPL(wm_adsp2_init); +diff --git a/sound/soc/codecs/wm_adsp.h b/sound/soc/codecs/wm_adsp.h +index a4f6b64..a86e531 100644 +--- a/sound/soc/codecs/wm_adsp.h ++++ b/sound/soc/codecs/wm_adsp.h +@@ -56,8 +56,6 @@ struct wm_adsp { + int fw; + bool running; + +- struct regulator *dvfs; +- + struct list_head ctl_list; + + struct work_struct boot_work; +@@ -67,19 +65,22 @@ struct wm_adsp { + SND_SOC_DAPM_PGA_E(wname, SND_SOC_NOPM, num, 0, NULL, 0, \ + wm_adsp1_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD) + +-#define WM_ADSP2(wname, num) \ ++#define WM_ADSP2_E(wname, num, event_fn) \ + { .id = snd_soc_dapm_dai_link, .name = wname " Preloader", \ +- .reg = SND_SOC_NOPM, .shift = num, .event = wm_adsp2_early_event, \ +- .event_flags = SND_SOC_DAPM_PRE_PMU }, \ ++ .reg = SND_SOC_NOPM, .shift = num, .event = event_fn, \ ++ .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD }, \ + { .id = snd_soc_dapm_out_drv, .name = wname, \ + .reg = SND_SOC_NOPM, .shift = num, .event = wm_adsp2_event, \ + .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD } + ++#define WM_ADSP2(wname, num) \ ++ WM_ADSP2_E(wname, num, wm_adsp2_early_event) ++ + extern const struct snd_kcontrol_new wm_adsp1_fw_controls[]; + extern const struct snd_kcontrol_new wm_adsp2_fw_controls[]; + + int wm_adsp1_init(struct wm_adsp *adsp); +-int wm_adsp2_init(struct wm_adsp *adsp, bool dvfs); ++int wm_adsp2_init(struct wm_adsp *adsp); + int wm_adsp1_event(struct snd_soc_dapm_widget *w, + struct snd_kcontrol *kcontrol, int event); + int wm_adsp2_early_event(struct snd_soc_dapm_widget *w, +diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c +index 2373252..ee92ec7 100644 +--- a/sound/soc/soc-core.c ++++ b/sound/soc/soc-core.c +@@ -1299,7 +1299,7 @@ static int soc_link_dai_widgets(struct snd_soc_card *card, + if (play_w && capture_w) { + ret = snd_soc_dapm_new_pcm(card, dai_link->params, + dai_link->num_params, capture_w, +- play_w); ++ play_w, dai_link); + if (ret != 0) { + dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n", + play_w->name, capture_w->name, ret); +@@ -1312,7 +1312,7 @@ static int soc_link_dai_widgets(struct snd_soc_card *card, + if (play_w && capture_w) { + ret = snd_soc_dapm_new_pcm(card, dai_link->params, + dai_link->num_params, capture_w, +- play_w); ++ play_w, dai_link); + if (ret != 0) { + dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n", + play_w->name, capture_w->name, ret); +diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c +index b6c12dc..e767365 100644 +--- a/sound/soc/soc-dapm.c ++++ b/sound/soc/soc-dapm.c +@@ -3227,11 +3227,12 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w, + { + struct snd_soc_dapm_path *source_p, *sink_p; + struct snd_soc_dai *source, *sink; +- const struct snd_soc_pcm_stream *config = w->params + w->params_select; ++ struct snd_soc_pcm_stream *config = w->params + w->params_select; ++ struct snd_soc_dai_link *dai_link = w->priv; + struct snd_pcm_substream substream; + struct snd_pcm_hw_params *params = NULL; + u64 fmt; +- int ret; ++ int ret = 0; + + if (WARN_ON(!config) || + WARN_ON(list_empty(&w->sources) || list_empty(&w->sinks))) +@@ -3251,6 +3252,16 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w, + source = source_p->source->priv; + sink = sink_p->sink->priv; + ++ if (dai_link && dai_link->params_fixup) { ++ ret = dai_link->params_fixup(w, event); ++ if (ret < 0) { ++ dev_err(w->dapm->dev, ++ "ASoC: params_fixup for dai link widget failed %d\n", ++ ret); ++ goto out; ++ } ++ } ++ + /* Be a little careful as we don't want to overflow the mask array */ + if (config->formats) { + fmt = ffs(config->formats) - 1; +@@ -3350,10 +3361,11 @@ static int snd_soc_dapm_dai_link_put(struct snd_kcontrol *kcontrol, + } + + int snd_soc_dapm_new_pcm(struct snd_soc_card *card, +- const struct snd_soc_pcm_stream *params, ++ struct snd_soc_pcm_stream *params, + unsigned int num_params, + struct snd_soc_dapm_widget *source, +- struct snd_soc_dapm_widget *sink) ++ struct snd_soc_dapm_widget *sink, ++ void *priv) + { + struct snd_soc_dapm_widget template; + struct snd_soc_dapm_widget *w; +@@ -3455,6 +3467,7 @@ int snd_soc_dapm_new_pcm(struct snd_soc_card *card, + + w->params = params; + w->num_params = num_params; ++ w->priv = priv; + + ret = snd_soc_dapm_add_path(&card->dapm, source, w, NULL, NULL); + if (ret) + -- cgit v1.2.3