aboutsummaryrefslogtreecommitdiffstats
path: root/main/linux-rpi
diff options
context:
space:
mode:
Diffstat (limited to 'main/linux-rpi')
-rw-r--r--main/linux-rpi/0001-inet-fix-potential-deadlock-in-reqsk_queue_unlink.patch40
-rw-r--r--main/linux-rpi/APKBUILD58
-rw-r--r--main/linux-rpi/aslr-pie.patch70
-rw-r--r--main/linux-rpi/config-rpi.armhf369
-rw-r--r--main/linux-rpi/config-rpi2.armhf367
-rw-r--r--main/linux-rpi/rpi-cirrus-4.1.x-20151006.patch2046
6 files changed, 2605 insertions, 345 deletions
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 <edumazet@google.com>
+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 <edumazet@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ 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?= <timo.teras@iki.fi>
-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 <timo.teras@iki.fi>
----
- 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
@@ -2696,6 +2754,10 @@ CONFIG_DVB_DIB8000=m
CONFIG_DVB_MB86A20S=m
#
+# ISDB-S (satellite) & ISDB-T (terrestrial) frontends
+#
+
+#
# Digital terrestrial only tuners/PLL
#
CONFIG_DVB_PLL=m
@@ -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
@@ -3606,6 +3697,16 @@ CONFIG_IRQCHIP=y
# CONFIG_MCB is not set
#
+# Android
+#
+# CONFIG_ANDROID is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_FIRMWARE_MEMMAP is not set
+
+#
# File systems
#
CONFIG_DCACHE_WORD_ACCESS=y
@@ -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
@@ -2736,6 +2812,10 @@ CONFIG_DVB_DIB8000=m
CONFIG_DVB_MB86A20S=m
#
+# ISDB-S (satellite) & ISDB-T (terrestrial) frontends
+#
+
+#
# Digital terrestrial only tuners/PLL
#
CONFIG_DVB_PLL=m
@@ -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
@@ -3649,6 +3758,16 @@ CONFIG_IRQCHIP=y
# CONFIG_MCB is not set
#
+# Android
+#
+# CONFIG_ANDROID is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_FIRMWARE_MEMMAP is not set
+
+#
# File systems
#
CONFIG_DCACHE_WORD_ACCESS=y
@@ -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 <dt-bindings/mfd/arizona.txt>. 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 <linux/mfd/arizona/pdata.h>
++#include <linux/regulator/machine.h>
++#include <linux/regulator/fixed.h>
++
+ #ifdef CONFIG_BCM_VC_CMA
+ #include <linux/broadcom/vc_cma.h>
+ #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 <linux/mfd/arizona/registers.h>
++
++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 <linux/interrupt.h>
+ #include <linux/mfd/core.h>
+ #include <linux/module.h>
++#include <linux/notifier.h>
+ #include <linux/of.h>
+ #include <linux/of_device.h>
+ #include <linux/of_gpio.h>
+@@ -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, <Nikesh.Oswal@wolfsonmicro.com>
++ * Author: Matthias Reichl, <hias@horus.com>
++ * 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 <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/gpio.h>
++#include <linux/delay.h>
++#include <linux/io.h>
++
++#include <asm/system_info.h>
++
++/*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, <Nikesh.Oswal@wolfsonmicro.com>
++ * 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 <linux/module.h>
++#include <linux/slab.h>
++#include <sound/pcm_params.h>
++
++#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)
+