From b928439ad003b436fe746122ed9c553cee8885d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Ter=C3=A4s?= Date: Sun, 27 Mar 2016 18:26:24 +0300 Subject: main/linux-rpi: upgrade to 4.4.6 CONFIG_CPU_SW_DOMAIN_PAN is disabled until upstream is fixed: https://github.com/raspberrypi/linux/issues/1381 rpi2 kernel changed to CONFIG_VMSPLIT_3G_OPT. --- main/linux-rpi/APKBUILD | 48 +- main/linux-rpi/config-rpi.armhf | 333 +++- main/linux-rpi/config-rpi2.armhf | 352 ++++- main/linux-rpi/rotary-encoder-fix.patch | 377 ----- main/linux-rpi/rpi-cirrus-4.1.y-20151218.patch | 1933 ------------------------ main/linux-rpi/rpi-cirrus-4.4.y-20160327.patch | 1533 +++++++++++++++++++ 6 files changed, 2089 insertions(+), 2487 deletions(-) delete mode 100644 main/linux-rpi/rpi-cirrus-4.1.y-20151218.patch create mode 100644 main/linux-rpi/rpi-cirrus-4.4.y-20160327.patch (limited to 'main/linux-rpi') diff --git a/main/linux-rpi/APKBUILD b/main/linux-rpi/APKBUILD index d29228115a..80183d8bb0 100644 --- a/main/linux-rpi/APKBUILD +++ b/main/linux-rpi/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Natanael Copa pkgname=linux-rpi -pkgver=4.1.20 +pkgver=4.4.6 case $pkgver in *.*.*) _kernver=${pkgver%.*};; *.*) _kernver=${pkgver};; @@ -15,8 +15,8 @@ options="!strip" install= 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-20160309.patch - rpi-cirrus-4.1.y-20151218.patch + http://dev.alpinelinux.org/~tteras/rpi/linux-4.4.y-rpi-20160327.patch + rpi-cirrus-4.4.y-20160327.patch gpio-mcp23s08-pullups.patch rotary-encoder-fix.patch issue-4973.patch @@ -195,33 +195,33 @@ for _f in $_flavors; do eval "_${_f}_dev() { _dev $_f; }" done -md5sums="fe9dc0f6729f36400ea81aa41d614c37 linux-4.1.tar.xz -06faf67e8b926915b94970981c3645e3 patch-4.1.20.xz -6c2c853cab58eb1a0d28b0763d45ee7c linux-4.1.y-rpi-20160309.patch -d4b70738cf06dbd70534d5e873442951 rpi-cirrus-4.1.y-20151218.patch +md5sums="9a78fa2eb6c68ca5a40ed5af08142599 linux-4.4.tar.xz +d48f09bf61f2500d70f839e190dc7c5a patch-4.4.6.xz +65535cb30adc5f137de52734d4b401c6 linux-4.4.y-rpi-20160327.patch +f3bc8a24dab2ad72e3f61ad47c30469d rpi-cirrus-4.4.y-20160327.patch b66e8aa4991ca5c2ccd61559ed7e6491 gpio-mcp23s08-pullups.patch -892ab7d20855cef17eb8add060f99c87 rotary-encoder-fix.patch +5508d2b3e5967bd57f92f551d90b3e54 rotary-encoder-fix.patch 29281b74d2cef6965fa4ab6d826a2aa4 issue-4973.patch -b8dcd53eb5044ad5fb62819c31caea2f config-rpi.armhf -22536aa19d1b5cc8e4ab5930baf5f253 config-rpi2.armhf +0036614292182b8e20af4829b29081fc config-rpi.armhf +787c28d583a3c1ecfcd3aac925ca4306 config-rpi2.armhf e587cae1dca2f5992555d9bcf53deecf markdt" -sha256sums="caf51f085aac1e1cea4d00dbbf3093ead07b551fc07b31b2a989c05f8ea72d9f linux-4.1.tar.xz -c9cb7370fe790df645a13967919628e5bcf1ff333f334fedac6a3c474714c45d patch-4.1.20.xz -53583dc93d6d9a3194685e5ea4791833f346aabf6f9eb30af67679c9c27b1f97 linux-4.1.y-rpi-20160309.patch -5aa17a1554598c3b364b7e8aea84bacfc13e8aca9b9101e58d89c211674a3d5a rpi-cirrus-4.1.y-20151218.patch +sha256sums="401d7c8fef594999a460d10c72c5a94e9c2e1022f16795ec51746b0d165418b2 linux-4.4.tar.xz +efea93ff30955d445344a83c36678fa8e64111219eeafea2a41fd4ee11f79d68 patch-4.4.6.xz +d6fb979957ba12c7634846a27824c752493449542439084088daf5b7833e227d linux-4.4.y-rpi-20160327.patch +0b6b1cd22459bf52350fb8952256870642bfeedfa91ee7cda5349d7118b4af77 rpi-cirrus-4.4.y-20160327.patch b389a556bbd98053881b43deef1adf20640f980557c5f37cfd7ece2daeecbda9 gpio-mcp23s08-pullups.patch -aaa1da7d9cac68206a8ddf1e1b8c08bc62696f789468ebfd6894c891d8700533 rotary-encoder-fix.patch +ab6740577fe8c1d71d2c716720ebbbf9a750985963d6938093b4ca9194b6e871 rotary-encoder-fix.patch 3a16e927ce53a8c56e7f1dd86fe8ad08b1c06466f5206c521a7e2de1e4796d6c issue-4973.patch -ed7475d65b121b7d8bfa069e39b8a5c1aed8e535b747cfccd3bd6879b4eed5b7 config-rpi.armhf -46ae33ff3a17860ec2641845323c7c6174ef8de26a320b0b01df49f3bc51a265 config-rpi2.armhf +06583f667b891966239b6dcae1ab7719789b656bde32f3692570d868aabdf765 config-rpi.armhf +c048a90327ffd15d2360d3fd2ead7ffe5b368d006a2d38e2c27cffc4d7aa1ec2 config-rpi2.armhf 0f6681fc5c3590e1dbe13a2bde796403bd1529cf0fe19720899eaa0db79bcb49 markdt" -sha512sums="168ef84a4e67619f9f53f3574e438542a5747f9b43443363cb83597fcdac9f40d201625c66e375a23226745eaada9176eb006ca023613cec089349e91751f3c0 linux-4.1.tar.xz -5c919982d33270c75b49e1deda32a9704ac8c68c4f07595471357c6b98694a4429dbd85bb31f662e63150294c031205b2d31426e117d0197ce7afdfd45f1c313 patch-4.1.20.xz -786b503b799dd14b2ca8b659a01d176600341ba2658a6b330fa2409cac77402d32a04ad5b5d89f2a402da2ca81517311ede7a10ea6f6a40cba53e4db2f47bde0 linux-4.1.y-rpi-20160309.patch -843afc1f2a72fa9618935dd67d4ac33a22ee78f20114af349f8d93e54864375b3ef192c8d8fde814d6685d5fe675c2a850743834ef89640eedce9f4db5ffdb67 rpi-cirrus-4.1.y-20151218.patch +sha512sums="13c8459933a8b80608e226a1398e3d1848352ace84bcfb7e6a4a33cb230bbe1ab719d4b58e067283df91ce5311be6d2d595fc8c19e2ae6ecc652499415614b3e linux-4.4.tar.xz +73da057476eb31d818eed4b66c883f5ceec65f18ec8ea60d64e48334c7681af4ed4cf7eb8684481f705446a59fd124de9449d22e28805bc9617b6608ecec491d patch-4.4.6.xz +7e71b19c945965de3bc0fc6b0f4eb9bb29f9b89d63175a8ef2a58c926d60d2b3ec113f5c6c39e45bb892bcc94de7d00599e377d359edda0b94eb9afa0b10670f linux-4.4.y-rpi-20160327.patch +7b7c2bd82ab32581ebd0382539fece6e9e7789d76b0f6bcc4a132dd9c4374a17175df1482e2ffabe1e9c27a170c179b26b52d4698f7b8f45afb07297b640221c rpi-cirrus-4.4.y-20160327.patch 36724ba56cb8fdf3a3d347cffb67ae1cc3d7b1052d526b6b5134ebf6baae9f9724b586c97833453dc7697ab24699426f0749af78b6a80be36967a80033a0cf40 gpio-mcp23s08-pullups.patch -12794c6e75d6a58253eac8f0778ba8bb6de1dca1541f0bcb58c25f13dab7261f89f2e1b87dacca09b6ed297f2d3e1a159229aab57e7472e041d6aa611b6634fa rotary-encoder-fix.patch +3a711e2cdb6c0ecaceb3755437d38626dec8403e8aa167a6e16f64d8a8b7cc5bdc7e04aa7c05938719ebc90e319ec4124ee2151a7855e7838ee143b62d140ad0 rotary-encoder-fix.patch 501c91bf2538a18102da59bbccc3097f9c3c90079acc0e946ff075074160c09b8a66934e5ce5470e170f0e4f93d114709a95230367426d0bb7ea02c4bdf4cc9b issue-4973.patch -8ae010419fe7b64ec902b9428ef25d2cb8cfc7e8feb7fc19de2f7f2ce8558393f6fa141538fc702f4256cab1f0e51192face1cf9b3a2b536ebd93be49ab78ba3 config-rpi.armhf -7d272461836011344d0939695554dddc7c3e39527f27cc711ac3b793afbdf36338d093a3ec1e7013843072871a68b0eeb71337cc5fa2db192a1782b7a898200b config-rpi2.armhf +c2cc0116361b1d80829e0df002950824be068247542c5828fb62f967d528607b2e98daf82c02d36f057c7154d20fd5d28a01d5f570ec9c9820109493f228aeb6 config-rpi.armhf +283181270437defed765ba454e275e95f9bcc331a254d1ba5ae29eee6cffc2c8c294d2de9dd16029eb8ef12a174b2701f11ddc5b39e128d8cbaa5f054ae8022a config-rpi2.armhf a4ecd1f48db64f9d6a189250d1937d7f2cd3a049a3d24cc527d04d05db06137722f1ba44bcd6033794781c3f2cfe2fbe065410a16de4bfdf4b1cd95d89322a77 markdt" diff --git a/main/linux-rpi/config-rpi.armhf b/main/linux-rpi/config-rpi.armhf index d54a8709ef..34644004c9 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 4.1.19 Kernel Configuration +# Linux/arm 4.4.6 Kernel Configuration # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -10,6 +10,7 @@ CONFIG_HAVE_LATENCYTOP_SUPPORT=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_FIX_EARLYCON_MEM=y CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_NEED_DMA_MAP_STATE=y @@ -69,6 +70,7 @@ CONFIG_IRQ_DOMAIN=y CONFIG_HANDLE_DOMAIN_IRQ=y # CONFIG_IRQ_DOMAIN_DEBUG is not set CONFIG_IRQ_FORCED_THREADING=y +CONFIG_SPARSE_IRQ=y CONFIG_GENERIC_CLOCKEVENTS=y # @@ -98,16 +100,11 @@ CONFIG_TASK_IO_ACCOUNTING=y # RCU Subsystem # CONFIG_PREEMPT_RCU=y +# CONFIG_RCU_EXPERT is not set CONFIG_SRCU=y # CONFIG_TASKS_RCU is not set CONFIG_RCU_STALL_COMMON=y -CONFIG_RCU_FANOUT=32 -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 @@ -117,6 +114,7 @@ CONFIG_GENERIC_SCHED_CLOCK=y CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_PIDS=y CONFIG_CGROUP_DEVICE=y CONFIG_CPUSETS=y CONFIG_PROC_PID_CPUSET=y @@ -132,6 +130,7 @@ CONFIG_FAIR_GROUP_SCHED=y # CONFIG_RT_GROUP_SCHED is not set CONFIG_BLK_CGROUP=y # CONFIG_DEBUG_BLK_CGROUP is not set +CONFIG_CGROUP_WRITEBACK=y # CONFIG_CHECKPOINT_RESTORE is not set CONFIG_NAMESPACES=y CONFIG_UTS_NS=y @@ -176,6 +175,8 @@ CONFIG_EVENTFD=y CONFIG_SHMEM=y CONFIG_AIO=y CONFIG_ADVISE_SYSCALLS=y +# CONFIG_USERFAULTFD is not set +CONFIG_MEMBARRIER=y CONFIG_EMBEDDED=y CONFIG_HAVE_PERF_EVENTS=y CONFIG_PERF_USE_VMALLOC=y @@ -191,12 +192,13 @@ CONFIG_SLUB_DEBUG=y # CONFIG_SLAB is not set CONFIG_SLUB=y # CONFIG_SLOB is not set -# CONFIG_SYSTEM_TRUSTED_KEYRING is not set +# CONFIG_SYSTEM_DATA_VERIFICATION is not set CONFIG_PROFILING=y CONFIG_OPROFILE=m CONFIG_HAVE_OPROFILE=y CONFIG_KPROBES=y CONFIG_JUMP_LABEL=y +# CONFIG_STATIC_KEYS_SELFTEST is not set # CONFIG_UPROBES is not set # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y @@ -252,6 +254,7 @@ CONFIG_MODVERSIONS=y CONFIG_MODULE_SRCVERSION_ALL=y # CONFIG_MODULE_SIG is not set # CONFIG_MODULE_COMPRESS is not set +CONFIG_MODULES_TREE_LOOKUP=y CONFIG_BLOCK=y CONFIG_LBDAF=y CONFIG_BLK_DEV_BSG=y @@ -295,6 +298,7 @@ CONFIG_CFQ_GROUP_IOSCHED=y CONFIG_DEFAULT_CFQ=y # CONFIG_DEFAULT_NOOP is not set CONFIG_DEFAULT_IOSCHED="cfq" +CONFIG_ASN1=m CONFIG_UNINLINE_SPIN_UNLOCK=y CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y CONFIG_FREEZER=y @@ -326,7 +330,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_SHMOBILE_LEGACY is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set # CONFIG_ARCH_S3C24XX is not set @@ -338,10 +341,7 @@ CONFIG_ARCH_BCM2708=y # Broadcom BCM2708 Implementations # CONFIG_MACH_BCM2708=y -CONFIG_BCM2708_DT=y -CONFIG_BCM2708_GPIO=y # CONFIG_BCM2708_NOL2CACHE is not set -CONFIG_BCM2708_SPIDEV=y # # Processor Type @@ -371,6 +371,7 @@ CONFIG_KUSER_HELPERS=y CONFIG_ARM_L1_CACHE_SHIFT=5 CONFIG_ARM_DMA_MEM_BUFFERABLE=y # CONFIG_ARM_KERNMEM_PERMS is not set +CONFIG_MULTI_IRQ_HANDLER=y # CONFIG_ARM_ERRATA_326103 is not set CONFIG_ARM_ERRATA_411920=y # CONFIG_ARM_ERRATA_364296 is not set @@ -386,6 +387,7 @@ CONFIG_ARM_ERRATA_411920=y # Kernel Features # CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_3G_OPT is not set # CONFIG_VMSPLIT_2G is not set # CONFIG_VMSPLIT_1G is not set CONFIG_PAGE_OFFSET=0xC0000000 @@ -409,15 +411,16 @@ CONFIG_AEABI=y # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set CONFIG_HAVE_ARCH_PFN_VALID=y # CONFIG_HIGHMEM is not set +# CONFIG_CPU_SW_DOMAIN_PAN is not set CONFIG_HW_PERF_EVENTS=y CONFIG_ARCH_WANT_GENERAL_HUGETLB=y +# CONFIG_ARM_MODULE_PLTS is not set CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_HAVE_MEMBLOCK=y CONFIG_NO_BOOTMEM=y CONFIG_MEMORY_ISOLATION=y # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set -CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_COMPACTION=y CONFIG_MIGRATION=y @@ -436,6 +439,8 @@ CONFIG_CMA_AREAS=7 # CONFIG_ZPOOL is not set # CONFIG_ZBUD is not set # CONFIG_ZSMALLOC is not set +# CONFIG_IDLE_PAGE_TRACKING is not set +CONFIG_FRAME_VECTOR=y CONFIG_FORCE_MAX_ZONEORDER=11 CONFIG_ALIGNMENT_TRAP=y CONFIG_UACCESS_WITH_MEMCPY=y @@ -528,6 +533,7 @@ CONFIG_COREDUMP=y # CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y +# CONFIG_SUSPEND_SKIP_SYNC is not set # CONFIG_HIBERNATION is not set CONFIG_PM_SLEEP=y # CONFIG_PM_AUTOSLEEP is not set @@ -542,6 +548,7 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y CONFIG_ARM_CPU_SUSPEND=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_NET=y +CONFIG_NET_INGRESS=y # # Networking options @@ -585,7 +592,6 @@ CONFIG_SYN_COOKIES=y 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 CONFIG_INET_IPCOMP=m @@ -609,6 +615,7 @@ CONFIG_INET6_AH=m CONFIG_INET6_ESP=m CONFIG_INET6_IPCOMP=m # CONFIG_IPV6_MIP6 is not set +CONFIG_IPV6_ILA=m CONFIG_INET6_XFRM_TUNNEL=m CONFIG_INET6_TUNNEL=m CONFIG_INET6_XFRM_MODE_TRANSPORT=m @@ -637,6 +644,7 @@ CONFIG_BRIDGE_NETFILTER=m # # Core Netfilter Configuration # +CONFIG_NETFILTER_INGRESS=y CONFIG_NETFILTER_NETLINK=m CONFIG_NETFILTER_NETLINK_ACCT=m CONFIG_NETFILTER_NETLINK_QUEUE=m @@ -667,7 +675,8 @@ CONFIG_NF_CONNTRACK_SIP=m CONFIG_NF_CONNTRACK_TFTP=m CONFIG_NF_CT_NETLINK=m # CONFIG_NF_CT_NETLINK_TIMEOUT is not set -# CONFIG_NETFILTER_NETLINK_QUEUE_CT is not set +CONFIG_NF_CT_NETLINK_HELPER=m +CONFIG_NETFILTER_NETLINK_GLUE_CT=y CONFIG_NF_NAT=m CONFIG_NF_NAT_NEEDED=y CONFIG_NF_NAT_PROTO_DCCP=m @@ -806,6 +815,7 @@ CONFIG_IP_VS_WRR=m CONFIG_IP_VS_LC=m CONFIG_IP_VS_WLC=m CONFIG_IP_VS_FO=m +CONFIG_IP_VS_OVF=m CONFIG_IP_VS_LBLC=m CONFIG_IP_VS_LBLCR=m CONFIG_IP_VS_DH=m @@ -831,6 +841,7 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_CONNTRACK_IPV4=m CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_NF_DUP_IPV4=m CONFIG_NF_LOG_ARP=m CONFIG_NF_LOG_IPV4=m CONFIG_NF_REJECT_IPV4=m @@ -866,6 +877,7 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_DEFRAG_IPV6=m CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m CONFIG_NF_LOG_IPV6=m CONFIG_NF_NAT_IPV6=m @@ -993,6 +1005,7 @@ CONFIG_NET_CLS_RSVP6=m CONFIG_NET_CLS_FLOW=m CONFIG_NET_CLS_CGROUP=m # CONFIG_NET_CLS_BPF is not set +CONFIG_NET_CLS_FLOWER=m CONFIG_NET_EMATCH=y CONFIG_NET_EMATCH_STACK=32 CONFIG_NET_EMATCH_CMP=m @@ -1035,6 +1048,7 @@ CONFIG_NET_MPLS_GSO=m # CONFIG_MPLS_ROUTING is not set # CONFIG_HSR is not set # CONFIG_NET_SWITCHDEV is not set +CONFIG_NET_L3_MASTER_DEV=y # CONFIG_CGROUP_NET_PRIO is not set CONFIG_CGROUP_NET_CLASSID=y CONFIG_NET_RX_BUSY_POLL=y @@ -1096,6 +1110,7 @@ CONFIG_BT_BNEP=m CONFIG_BT_BNEP_MC_FILTER=y CONFIG_BT_BNEP_PROTO_FILTER=y CONFIG_BT_HIDP=m +CONFIG_BT_HS=y CONFIG_BT_LE=y # CONFIG_BT_SELFTEST is not set # CONFIG_BT_DEBUGFS is not set @@ -1105,12 +1120,13 @@ CONFIG_BT_LE=y # CONFIG_BT_INTEL=m CONFIG_BT_BCM=m +CONFIG_BT_RTL=m CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_BCM=y +CONFIG_BT_HCIBTUSB_RTL=y # CONFIG_BT_HCIBTSDIO is not set # CONFIG_BT_HCIUART is not set CONFIG_BT_HCIBCM203X=m -CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBFUSB=m CONFIG_BT_HCIVHCI=m CONFIG_BT_MRVL=m @@ -1133,6 +1149,7 @@ CONFIG_CFG80211=m CONFIG_CFG80211_DEFAULT_PS=y # CONFIG_CFG80211_DEBUGFS is not set # CONFIG_CFG80211_INTERNAL_REGDB is not set +CONFIG_CFG80211_CRDA_SUPPORT=y CONFIG_CFG80211_WEXT=y CONFIG_LIB80211=m CONFIG_LIB80211_CRYPT_WEP=m @@ -1151,6 +1168,7 @@ CONFIG_MAC80211_LEDS=y # CONFIG_MAC80211_DEBUGFS is not set # CONFIG_MAC80211_MESSAGE_TRACING is not set # CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 CONFIG_WIMAX=m CONFIG_WIMAX_DEBUG_LEVEL=8 CONFIG_RFKILL=m @@ -1172,6 +1190,7 @@ CONFIG_NFC=m # CONFIG_NFC_PN533=m # CONFIG_NFC_SIM is not set +CONFIG_LWTUNNEL=y CONFIG_HAVE_BPF_JIT=y # @@ -1223,9 +1242,6 @@ CONFIG_CMA_ALIGNMENT=8 # # Bus devices # -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 @@ -1234,19 +1250,18 @@ CONFIG_PROC_EVENTS=y # CONFIG_MTD is not set CONFIG_DTC=y CONFIG_OF=y - -# -# Device Tree and Open Firmware support -# # 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_OVERLAY is not set +CONFIG_OF_RESOLVE=y +CONFIG_OF_OVERLAY=y +CONFIG_OF_CONFIGFS=y CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_PARPORT is not set CONFIG_BLK_DEV=y @@ -1261,7 +1276,6 @@ 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_PMEM is not set CONFIG_CDROM_PKTCDVD=m CONFIG_CDROM_PKTCDVD_BUFFERS=8 # CONFIG_CDROM_PKTCDVD_WCACHE is not set @@ -1322,6 +1336,10 @@ CONFIG_BCM2708_VCHIQ=y # Intel MIC Bus Driver # +# +# SCIF Bus Driver +# + # # Intel MIC Host Driver # @@ -1329,8 +1347,18 @@ CONFIG_BCM2708_VCHIQ=y # # Intel MIC Card Driver # + +# +# SCIF Driver +# + +# +# Intel MIC Coprocessor State Management (COSM) Drivers +# # CONFIG_ECHO is not set # CONFIG_CXL_BASE is not set +# CONFIG_CXL_KERNEL_API is not set +# CONFIG_CXL_EEH is not set # # SCSI device support @@ -1419,13 +1447,16 @@ CONFIG_MACVLAN=m # CONFIG_MACVTAP is not set # CONFIG_IPVLAN is not set # CONFIG_VXLAN is not set +# CONFIG_GENEVE is not set CONFIG_NETCONSOLE=m # CONFIG_NETCONSOLE_DYNAMIC is not set CONFIG_NETPOLL=y CONFIG_NET_POLL_CONTROLLER=y CONFIG_TUN=m +# CONFIG_TUN_VNET_CROSS_LE is not set CONFIG_VETH=m # CONFIG_NLMON is not set +CONFIG_NET_VRF=m # # CAIF transport drivers @@ -1441,6 +1472,7 @@ CONFIG_ETHERNET=y CONFIG_NET_VENDOR_ARC=y # CONFIG_ARC_EMAC is not set # CONFIG_EMAC_ROCKCHIP is not set +# CONFIG_NET_VENDOR_AURORA is not set CONFIG_NET_CADENCE=y # CONFIG_MACB is not set CONFIG_NET_VENDOR_BROADCOM=y @@ -1451,6 +1483,8 @@ CONFIG_NET_VENDOR_CIRRUS=y # CONFIG_CS89x0 is not set # CONFIG_DM9000 is not set # CONFIG_DNET is not set +CONFIG_NET_VENDOR_EZCHIP=y +# CONFIG_EZCHIP_NPS_MANAGEMENT_ENET is not set CONFIG_NET_VENDOR_FARADAY=y # CONFIG_FTMAC100 is not set # CONFIG_FTGMAC100 is not set @@ -1466,11 +1500,13 @@ CONFIG_NET_VENDOR_MICREL=y CONFIG_NET_VENDOR_MICROCHIP=y CONFIG_ENC28J60=y # CONFIG_ENC28J60_WRITEVERIFY is not set +# CONFIG_ENCX24J600 is not set CONFIG_NET_VENDOR_NATSEMI=y 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_RENESAS=y CONFIG_NET_VENDOR_ROCKER=y # CONFIG_NET_VENDOR_SAMSUNG is not set CONFIG_NET_VENDOR_SEEQ=y @@ -1480,6 +1516,8 @@ CONFIG_NET_VENDOR_SMSC=y # CONFIG_SMSC911X is not set CONFIG_NET_VENDOR_STMICRO=y # CONFIG_STMMAC_ETH is not set +CONFIG_NET_VENDOR_SYNOPSYS=y +# CONFIG_SYNOPSYS_DWC_ETH_QOS is not set CONFIG_NET_VENDOR_VIA=y # CONFIG_VIA_RHINE is not set # CONFIG_VIA_VELOCITY is not set @@ -1491,6 +1529,7 @@ CONFIG_PHYLIB=m # # MII PHY device drivers # +# CONFIG_AQUANTIA_PHY is not set # CONFIG_AT803X_PHY is not set # CONFIG_AMD_PHY is not set # CONFIG_MARVELL_PHY is not set @@ -1499,6 +1538,7 @@ CONFIG_PHYLIB=m # CONFIG_LXT_PHY is not set # CONFIG_CICADA_PHY is not set # CONFIG_VITESSE_PHY is not set +# CONFIG_TERANETICS_PHY is not set # CONFIG_SMSC_PHY is not set # CONFIG_BROADCOM_PHY is not set # CONFIG_BCM7XXX_PHY is not set @@ -1509,6 +1549,9 @@ CONFIG_PHYLIB=m # CONFIG_STE10XP is not set # CONFIG_LSI_ET1011C_PHY is not set # CONFIG_MICREL_PHY is not set +# CONFIG_DP83848_PHY is not set +# CONFIG_DP83867_PHY is not set +# CONFIG_MICROCHIP_PHY is not set # CONFIG_FIXED_PHY is not set CONFIG_MDIO_BITBANG=m # CONFIG_MDIO_GPIO is not set @@ -1538,6 +1581,7 @@ CONFIG_USB_KAWETH=m CONFIG_USB_PEGASUS=m CONFIG_USB_RTL8150=m CONFIG_USB_RTL8152=m +# CONFIG_USB_LAN78XX is not set CONFIG_USB_USBNET=y CONFIG_USB_NET_AX8817X=m CONFIG_USB_NET_AX88179_178A=m @@ -1572,6 +1616,7 @@ CONFIG_USB_NET_INT51X1=m CONFIG_USB_IPHETH=m CONFIG_USB_SIERRA_NET=m CONFIG_USB_VL600=m +# CONFIG_USB_NET_CH9200 is not set CONFIG_WLAN=y CONFIG_LIBERTAS_THINFIRM=m # CONFIG_LIBERTAS_THINFIRM_DEBUG is not set @@ -1673,6 +1718,7 @@ CONFIG_RT2X00_LIB_LEDS=y # CONFIG_RT2X00_DEBUG is not set # CONFIG_WL_MEDIATEK is not set CONFIG_RTL8192CU=m +# CONFIG_RTL8XXXU is not set # CONFIG_WL_TI is not set CONFIG_ZD1211RW=m # CONFIG_ZD1211RW_DEBUG is not set @@ -1690,11 +1736,13 @@ CONFIG_WIMAX_I2400M_USB=m CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8 # CONFIG_WAN is not set # CONFIG_ISDN is not set +# CONFIG_NVM is not set # # Input device support # CONFIG_INPUT=y +CONFIG_INPUT_LEDS=m CONFIG_INPUT_FF_MEMLESS=m CONFIG_INPUT_POLLDEV=m # CONFIG_INPUT_SPARSEKMAP is not set @@ -1782,7 +1830,7 @@ CONFIG_JOYSTICK_XPAD_FF=y CONFIG_JOYSTICK_RPISENSE=m # CONFIG_INPUT_TABLET is not set CONFIG_INPUT_TOUCHSCREEN=y -CONFIG_OF_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_PROPERTIES=y CONFIG_TOUCHSCREEN_ADS7846=m # CONFIG_TOUCHSCREEN_AD7877 is not set # CONFIG_TOUCHSCREEN_AD7879 is not set @@ -1811,6 +1859,7 @@ CONFIG_TOUCHSCREEN_FT6236=m # CONFIG_TOUCHSCREEN_MCS5000 is not set # CONFIG_TOUCHSCREEN_MMS114 is not set # CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set # CONFIG_TOUCHSCREEN_INEXIO is not set # CONFIG_TOUCHSCREEN_MK712 is not set # CONFIG_TOUCHSCREEN_PENMOUNT is not set @@ -1819,9 +1868,11 @@ CONFIG_TOUCHSCREEN_RPI_FT5406=m # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set # CONFIG_TOUCHSCREEN_TOUCHWIN is not set # CONFIG_TOUCHSCREEN_PIXCIR is not set +# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set # CONFIG_TOUCHSCREEN_TOUCHIT213 is not set # CONFIG_TOUCHSCREEN_TSC_SERIO is not set +# CONFIG_TOUCHSCREEN_TSC2004 is not set # CONFIG_TOUCHSCREEN_TSC2005 is not set # CONFIG_TOUCHSCREEN_TSC2007 is not set # CONFIG_TOUCHSCREEN_ST1232 is not set @@ -1830,6 +1881,7 @@ CONFIG_TOUCHSCREEN_STMPE=m # CONFIG_TOUCHSCREEN_SX8654 is not set # CONFIG_TOUCHSCREEN_TPS6507X is not set # CONFIG_TOUCHSCREEN_ZFORCE is not set +# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set CONFIG_INPUT_MISC=y CONFIG_INPUT_AD714X=m CONFIG_INPUT_AD714X_I2C=m @@ -1861,6 +1913,7 @@ CONFIG_INPUT_CMA3000=m # CONFIG_INPUT_CMA3000_I2C is not set # CONFIG_INPUT_SOC_BUTTON_ARRAY is not set # CONFIG_INPUT_DRV260X_HAPTICS is not set +# CONFIG_INPUT_DRV2665_HAPTICS is not set # CONFIG_INPUT_DRV2667_HAPTICS is not set # @@ -1875,6 +1928,7 @@ CONFIG_SERIO_RAW=m # CONFIG_SERIO_PS2MULT is not set # CONFIG_SERIO_ARC_PS2 is not set # CONFIG_SERIO_APBPS2 is not set +# CONFIG_USERIO is not set CONFIG_GAMEPORT=m CONFIG_GAMEPORT_NS558=m CONFIG_GAMEPORT_L4=m @@ -1882,6 +1936,13 @@ CONFIG_GAMEPORT_L4=m # # Character devices # +CONFIG_BRCM_CHAR_DRIVERS=y +CONFIG_BCM_VC_CMA=y +CONFIG_BCM2708_VCMEM=y +CONFIG_BCM_VCIO=y +CONFIG_BCM_VC_SM=y +CONFIG_BCM2835_DEVGPIOMEM=m +CONFIG_BCM2835_SMI_DEV=m CONFIG_TTY=y CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y @@ -1909,8 +1970,11 @@ CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_NR_UARTS=1 CONFIG_SERIAL_8250_RUNTIME_UARTS=0 # CONFIG_SERIAL_8250_EXTENDED is not set +CONFIG_SERIAL_8250_FSL=y # CONFIG_SERIAL_8250_DW is not set # CONFIG_SERIAL_8250_EM is not set +# CONFIG_SERIAL_8250_RT288X is not set +# CONFIG_SERIAL_8250_INGENIC is not set # # Non-8250 serial port support @@ -1922,6 +1986,7 @@ CONFIG_SERIAL_AMBA_PL011_CONSOLE=y # CONFIG_SERIAL_KGDB_NMI is not set # CONFIG_SERIAL_MAX3100 is not set # CONFIG_SERIAL_MAX310X is not set +# CONFIG_SERIAL_UARTLITE is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_CONSOLE_POLL=y @@ -1937,24 +2002,17 @@ CONFIG_SERIAL_OF_PLATFORM=y # CONFIG_SERIAL_FSL_LPUART is not set # CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set # CONFIG_SERIAL_ST_ASC is not set +# CONFIG_SERIAL_STM32 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=m -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_BCM2708_VCMEM=y -CONFIG_BCM_VCIO=y -CONFIG_BCM_VC_SM=y -CONFIG_BCM2835_DEVGPIOMEM=m -CONFIG_BCM2835_SMI_DEV=m # CONFIG_XILLYBUS is not set # @@ -1974,6 +2032,7 @@ CONFIG_I2C_MUX=m # CONFIG_I2C_MUX_PCA9541 is not set # CONFIG_I2C_MUX_PCA954x is not set # CONFIG_I2C_MUX_PINCTRL is not set +# CONFIG_I2C_MUX_REG is not set CONFIG_I2C_HELPER_AUTO=y CONFIG_I2C_ALGOBIT=m @@ -1989,6 +2048,7 @@ CONFIG_I2C_BCM2708_BAUDRATE=100000 CONFIG_I2C_BCM2835=m # CONFIG_I2C_CBUS_GPIO is not set # CONFIG_I2C_DESIGNWARE_PLATFORM is not set +# CONFIG_I2C_EMEV2 is not set CONFIG_I2C_GPIO=m # CONFIG_I2C_NOMADIK is not set # CONFIG_I2C_OCORES is not set @@ -2024,7 +2084,7 @@ CONFIG_SPI_MASTER=y # # CONFIG_SPI_ALTERA is not set CONFIG_SPI_BCM2835=m -CONFIG_SPI_BCM2708=m +CONFIG_SPI_BCM2835AUX=m # CONFIG_SPI_BITBANG is not set # CONFIG_SPI_CADENCE is not set # CONFIG_SPI_GPIO is not set @@ -2036,6 +2096,7 @@ CONFIG_SPI_BCM2708=m # CONFIG_SPI_SC18IS602 is not set # CONFIG_SPI_XCOMM is not set # CONFIG_SPI_XILINX is not set +# CONFIG_SPI_ZYNQMP_GQSPI is not set # CONFIG_SPI_DESIGNWARE is not set # @@ -2103,8 +2164,9 @@ CONFIG_GPIO_BCM_VIRT=y # 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_XILINX is not set # CONFIG_GPIO_ZEVIO is not set +# CONFIG_GPIO_ZX is not set # # I2C GPIO expanders @@ -2128,9 +2190,13 @@ CONFIG_GPIO_STMPE=y # # CONFIG_GPIO_74X164 is not set CONFIG_GPIO_MAX7301=m -CONFIG_GPIO_MCP23S08=m # CONFIG_GPIO_MC33880 is not set +# +# SPI or I2C GPIO expanders +# +CONFIG_GPIO_MCP23S08=m + # # USB GPIO expanders # @@ -2173,7 +2239,7 @@ CONFIG_BATTERY_DS2760=m # CONFIG_BATTERY_DS2781 is not set # CONFIG_BATTERY_DS2782 is not set # CONFIG_BATTERY_SBS is not set -# CONFIG_BATTERY_BQ27x00 is not set +# CONFIG_BATTERY_BQ27XXX is not set # CONFIG_BATTERY_MAX17040 is not set # CONFIG_BATTERY_MAX17042 is not set # CONFIG_CHARGER_MAX8903 is not set @@ -2182,9 +2248,12 @@ CONFIG_BATTERY_DS2760=m # CONFIG_CHARGER_MANAGER is not set # CONFIG_CHARGER_BQ2415X is not set # CONFIG_CHARGER_BQ24190 is not set +# CONFIG_CHARGER_BQ24257 is not set # CONFIG_CHARGER_BQ24735 is not set +# CONFIG_CHARGER_BQ25890 is not set # CONFIG_CHARGER_SMB347 is not set # CONFIG_BATTERY_GAUGE_LTC2941 is not set +# CONFIG_CHARGER_RT9455 is not set CONFIG_POWER_RESET=y CONFIG_POWER_RESET_GPIO=y CONFIG_POWER_RESET_GPIO_RESTART=y @@ -2196,20 +2265,19 @@ CONFIG_POWER_RESET_GPIO_RESTART=y # CONFIG_HWMON is not set CONFIG_THERMAL=y CONFIG_THERMAL_OF=y +# CONFIG_THERMAL_WRITABLE_TRIPS is not set CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set # CONFIG_THERMAL_GOV_FAIR_SHARE is not set CONFIG_THERMAL_GOV_STEP_WISE=y # CONFIG_THERMAL_GOV_BANG_BANG is not set # CONFIG_THERMAL_GOV_USER_SPACE is not set +# CONFIG_THERMAL_GOV_POWER_ALLOCATOR 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=y # CONFIG_WATCHDOG_NOWAYOUT is not set @@ -2224,8 +2292,8 @@ CONFIG_WATCHDOG_CORE=y # CONFIG_CADENCE_WATCHDOG is not set # CONFIG_DW_WATCHDOG is not set # CONFIG_MAX63XX_WATCHDOG is not set -CONFIG_BCM2708_WDT=m CONFIG_BCM2835_WDT=m +# CONFIG_BCM7038_WDT is not set # CONFIG_MEN_A21_WDT is not set # @@ -2241,6 +2309,7 @@ CONFIG_SSB=m CONFIG_SSB_BLOCKIO=y CONFIG_SSB_SDIOHOST_POSSIBLE=y # CONFIG_SSB_SDIOHOST is not set +# CONFIG_SSB_HOST_SOC is not set # CONFIG_SSB_SILENT is not set # CONFIG_SSB_DEBUG is not set # CONFIG_SSB_DRIVER_GPIO is not set @@ -2265,6 +2334,7 @@ CONFIG_MFD_RPISENSE_CORE=m # CONFIG_MFD_AS3722 is not set # CONFIG_PMIC_ADP5520 is not set # CONFIG_MFD_AAT2870_CORE is not set +# CONFIG_MFD_ATMEL_FLEXCOM is not set # CONFIG_MFD_ATMEL_HLCDC is not set # CONFIG_MFD_BCM590XX is not set # CONFIG_MFD_AXP20X is not set @@ -2274,6 +2344,7 @@ CONFIG_MFD_RPISENSE_CORE=m # CONFIG_MFD_DA9052_SPI is not set # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_DA9062 is not set # CONFIG_MFD_DA9063 is not set # CONFIG_MFD_DA9150 is not set # CONFIG_MFD_DLN2 is not set @@ -2353,6 +2424,7 @@ CONFIG_MFD_ARIZONA_SPI=m CONFIG_MFD_WM5102=y # CONFIG_MFD_WM5110 is not set # CONFIG_MFD_WM8997 is not set +# CONFIG_MFD_WM8998 is not set # CONFIG_MFD_WM8400 is not set # CONFIG_MFD_WM831X_I2C is not set # CONFIG_MFD_WM831X_SPI is not set @@ -2382,6 +2454,7 @@ CONFIG_REGULATOR_ARIZONA=m # CONFIG_REGULATOR_MAX8660 is not set # CONFIG_REGULATOR_MAX8952 is not set # CONFIG_REGULATOR_MAX8973 is not set +# CONFIG_REGULATOR_MT6311 is not set # CONFIG_REGULATOR_PFUZE100 is not set # CONFIG_REGULATOR_PWM is not set # CONFIG_REGULATOR_TPS51632 is not set @@ -2602,6 +2675,7 @@ 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 +# CONFIG_DVB_PLATFORM_DRIVERS is not set # # Supported MMC/SDIO adapters @@ -2764,6 +2838,7 @@ CONFIG_DVB_TUNER_ITD1000=m CONFIG_DVB_TUNER_CX24113=m CONFIG_DVB_TDA826X=m CONFIG_DVB_CX24116=m +CONFIG_DVB_CX24120=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m @@ -2853,10 +2928,6 @@ CONFIG_DVB_AF9033=m # # Graphics support # - -# -# Direct Rendering Manager -# # CONFIG_DRM is not set # @@ -2893,6 +2964,7 @@ CONFIG_FB_BCM2708=y # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_SMSCUFX is not set # CONFIG_FB_UDL is not set +# CONFIG_FB_IBM_GXT4500 is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FB_METRONOME is not set # CONFIG_FB_BROADSHEET is not set @@ -2919,6 +2991,7 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y # CONFIG_BACKLIGHT_GENERIC is not set # CONFIG_BACKLIGHT_PWM is not set CONFIG_BACKLIGHT_RPI=m +# CONFIG_BACKLIGHT_PM8941_WLED is not set # CONFIG_BACKLIGHT_ADP8860 is not set # CONFIG_BACKLIGHT_ADP8870 is not set # CONFIG_BACKLIGHT_LM3630A is not set @@ -2946,7 +3019,6 @@ CONFIG_SND_PCM=m CONFIG_SND_DMAENGINE_PCM=m CONFIG_SND_HWDEP=m CONFIG_SND_RAWMIDI=m -CONFIG_SND_COMPRESS_OFFLOAD=m CONFIG_SND_JACK=y CONFIG_SND_SEQUENCER=m CONFIG_SND_SEQ_DUMMY=m @@ -2954,11 +3026,13 @@ CONFIG_SND_OSSEMUL=y CONFIG_SND_MIXER_OSS=m CONFIG_SND_PCM_OSS=m CONFIG_SND_PCM_OSS_PLUGINS=y +CONFIG_SND_PCM_TIMER=y CONFIG_SND_SEQUENCER_OSS=y CONFIG_SND_HRTIMER=m CONFIG_SND_SEQ_HRTIMER_DEFAULT=y # CONFIG_SND_DYNAMIC_MINORS is not set CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_PROC_FS=y CONFIG_SND_VERBOSE_PROCFS=y # CONFIG_SND_VERBOSE_PRINTK is not set # CONFIG_SND_DEBUG is not set @@ -2980,6 +3054,7 @@ CONFIG_SND_MPU401=m # # HD-Audio # +CONFIG_SND_HDA_PREALLOC_SIZE=64 CONFIG_SND_ARM=y # CONFIG_SND_ARMAACI is not set CONFIG_SND_BCM2835=m @@ -2999,7 +3074,7 @@ CONFIG_SND_USB_6FIRE=m CONFIG_SND_SOC=m CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_ATMEL_SOC is not set -CONFIG_SND_BCM2708_SOC_I2S=m +CONFIG_SND_BCM2835_SOC_I2S=m CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC=m CONFIG_SND_BCM2708_SOC_HIFIBERRY_DACPLUS=m CONFIG_SND_BCM2708_SOC_HIFIBERRY_DIGI=m @@ -3024,7 +3099,11 @@ CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP=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 + +# +# Allwinner SoC Audio support +# +# CONFIG_SND_SUN4I_CODEC is not set # CONFIG_SND_SOC_XTFPGA_I2S is not set CONFIG_SND_SOC_I2C_AND_SPI=m @@ -3033,9 +3112,11 @@ CONFIG_SND_SOC_I2C_AND_SPI=m # CONFIG_SND_SOC_ARIZONA=m CONFIG_SND_SOC_WM_ADSP=m +# CONFIG_SND_SOC_AC97_CODEC is not set CONFIG_SND_SOC_ADAU1701=m # CONFIG_SND_SOC_AK4104 is not set # CONFIG_SND_SOC_AK4554 is not set +# CONFIG_SND_SOC_AK4613 is not set # CONFIG_SND_SOC_AK4642 is not set # CONFIG_SND_SOC_AK5386 is not set # CONFIG_SND_SOC_ALC5623 is not set @@ -3049,8 +3130,9 @@ CONFIG_SND_SOC_ADAU1701=m # 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_CS4349 is not set # CONFIG_SND_SOC_ES8328 is not set +# CONFIG_SND_SOC_GTM601 is not set # CONFIG_SND_SOC_PCM1681 is not set # CONFIG_SND_SOC_PCM1792A is not set CONFIG_SND_SOC_PCM512x=m @@ -3070,8 +3152,10 @@ CONFIG_SND_SOC_SIGMADSP_I2C=m # CONFIG_SND_SOC_SSM4567 is not set # CONFIG_SND_SOC_STA32X is not set # CONFIG_SND_SOC_STA350 is not set +# CONFIG_SND_SOC_STI_SAS is not set # CONFIG_SND_SOC_TAS2552 is not set # CONFIG_SND_SOC_TAS5086 is not set +# CONFIG_SND_SOC_TAS571X is not set # CONFIG_SND_SOC_TFA9879 is not set CONFIG_SND_SOC_TAS5713=m # CONFIG_SND_SOC_TLV320AIC23_I2C is not set @@ -3124,6 +3208,7 @@ CONFIG_HID_BELKIN=m # CONFIG_HID_BETOP_FF is not set CONFIG_HID_CHERRY=m CONFIG_HID_CHICONY=m +# CONFIG_HID_CORSAIR is not set # CONFIG_HID_PRODIKEYS is not set # CONFIG_HID_CP2112 is not set CONFIG_HID_CYPRESS=m @@ -3133,6 +3218,8 @@ CONFIG_HID_EMS_FF=m CONFIG_HID_ELECOM=m CONFIG_HID_ELO=m CONFIG_HID_EZKEY=m +# CONFIG_HID_GEMBIRD is not set +# CONFIG_HID_GFRM is not set CONFIG_HID_HOLTEK=m # CONFIG_HOLTEK_FF is not set # CONFIG_HID_GT683R is not set @@ -3223,7 +3310,7 @@ CONFIG_USB_DEFAULT_PERSIST=y # 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 +# CONFIG_USB_ULPI_BUS is not set CONFIG_USB_MON=m # CONFIG_USB_WUSB_CBAF is not set @@ -3236,7 +3323,6 @@ CONFIG_USB_MON=m # CONFIG_USB_OXU210HP_HCD is not set # CONFIG_USB_ISP116X_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 # CONFIG_USB_MAX3421_HCD is not set # CONFIG_USB_OHCI_HCD is not set @@ -3406,7 +3492,6 @@ CONFIG_USB_EZUSB_FX2=m # CONFIG_UWB is not set CONFIG_MMC=y # CONFIG_MMC_DEBUG is not set -# CONFIG_MMC_CLKGATE is not set # # MMC/SD/SDIO Card Drivers @@ -3428,12 +3513,14 @@ 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_OF_AT91 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 # CONFIG_MMC_USHC is not set # CONFIG_MMC_USDHI6ROL0 is not set +# CONFIG_MMC_MTK is not set # CONFIG_MEMSTICK is not set CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y @@ -3442,6 +3529,9 @@ CONFIG_LEDS_CLASS_FLASH=y # # LED drivers # +# CONFIG_LEDS_AAT1290 is not set +# CONFIG_LEDS_BCM6328 is not set +# CONFIG_LEDS_BCM6358 is not set # CONFIG_LEDS_LM3530 is not set # CONFIG_LEDS_LM3642 is not set # CONFIG_LEDS_PCA9532 is not set @@ -3460,13 +3550,14 @@ CONFIG_LEDS_GPIO=y # CONFIG_LEDS_BD2802 is not set # CONFIG_LEDS_LT3593 is not set # CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_TLC591XX is not set # CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_KTD2692 is not set # # 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 @@ -3487,12 +3578,14 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m CONFIG_LEDS_TRIGGER_CAMERA=m CONFIG_LEDS_TRIGGER_INPUT=y # CONFIG_ACCESSIBILITY is not set +CONFIG_EDAC_ATOMIC_SCRUB=y +CONFIG_EDAC_SUPPORT=y # CONFIG_EDAC is not set CONFIG_RTC_LIB=y CONFIG_RTC_CLASS=y # CONFIG_RTC_HCTOSYS is not set CONFIG_RTC_SYSTOHC=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_SYSTOHC_DEVICE="rtc0" # CONFIG_RTC_DEBUG is not set # @@ -3535,6 +3628,7 @@ CONFIG_RTC_DRV_RX8581=m CONFIG_RTC_DRV_RX8025=m CONFIG_RTC_DRV_EM3027=m CONFIG_RTC_DRV_RV3029C2=m +# CONFIG_RTC_DRV_RV8803 is not set # # SPI RTC drivers @@ -3571,6 +3665,7 @@ CONFIG_RTC_DRV_RX4581=m # CONFIG_RTC_DRV_BQ4802 is not set # CONFIG_RTC_DRV_RP5C01 is not set # CONFIG_RTC_DRV_V3020 is not set +# CONFIG_RTC_DRV_ZYNQMP is not set # # on-CPU RTC drivers @@ -3578,7 +3673,6 @@ CONFIG_RTC_DRV_RX4581=m # CONFIG_RTC_DRV_PL030 is not set # CONFIG_RTC_DRV_PL031 is not set # CONFIG_RTC_DRV_SNVS is not set -# CONFIG_RTC_DRV_XGENE is not set # # HID Sensor RTC drivers @@ -3590,16 +3684,17 @@ CONFIG_DMADEVICES=y # # DMA Devices # -# CONFIG_AMBA_PL08X 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 CONFIG_DMA_VIRTUAL_CHANNELS=y CONFIG_DMA_OF=y +# CONFIG_AMBA_PL08X is not set +CONFIG_DMA_BCM2835=y +# CONFIG_FSL_EDMA is not set +# CONFIG_INTEL_IDMA64 is not set +# CONFIG_NBPFAXI_DMA is not set +# CONFIG_PL330_DMA is not set +CONFIG_DMA_BCM2708=y +# CONFIG_DW_DMAC is not set # # DMA Clients @@ -3610,6 +3705,7 @@ CONFIG_DMA_OF=y CONFIG_UIO=m CONFIG_UIO_PDRV_GENIRQ=m # CONFIG_UIO_DMEM_GENIRQ is not set +# CONFIG_UIO_PRUSS is not set # CONFIG_VIRT_DRIVERS is not set # @@ -3719,7 +3815,6 @@ CONFIG_VT6656=m # Triggers - standalone # # CONFIG_IIO_SIMPLE_DUMMY is not set -# CONFIG_FT1000 is not set # # Speakup console speech @@ -3753,7 +3848,7 @@ CONFIG_LIRC_SERIAL_TRANSMITTER=y # # Android # -# CONFIG_USB_WPAN_HCD is not set +# CONFIG_STAGING_BOARD is not set # CONFIG_WIMAX_GDM72XX is not set # CONFIG_LTE_GDM724X is not set # CONFIG_LUSTRE_FS is not set @@ -3766,6 +3861,7 @@ CONFIG_FB_TFT_BD663474=m CONFIG_FB_TFT_HX8340BN=m CONFIG_FB_TFT_HX8347D=m CONFIG_FB_TFT_HX8353D=m +CONFIG_FB_TFT_HX8357D=m CONFIG_FB_TFT_ILI9163=m CONFIG_FB_TFT_ILI9320=m CONFIG_FB_TFT_ILI9325=m @@ -3782,13 +3878,17 @@ CONFIG_FB_TFT_SSD1306=m CONFIG_FB_TFT_SSD1331=m CONFIG_FB_TFT_SSD1351=m CONFIG_FB_TFT_ST7735R=m +CONFIG_FB_TFT_ST7789V=m CONFIG_FB_TFT_TINYLCD=m CONFIG_FB_TFT_TLS8204=m +CONFIG_FB_TFT_UC1611=m CONFIG_FB_TFT_UC1701=m CONFIG_FB_TFT_UPD161704=m CONFIG_FB_TFT_WATTEROTT=m CONFIG_FB_FLEX=m CONFIG_FB_TFT_FBTFT_DEVICE=m +# CONFIG_WILC1000_DRIVER is not set +# CONFIG_MOST is not set # CONFIG_CHROME_PLATFORMS is not set CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y @@ -3798,7 +3898,9 @@ CONFIG_COMMON_CLK=y # Common Clock Framework # # CONFIG_COMMON_CLK_SI5351 is not set +# CONFIG_COMMON_CLK_SI514 is not set # CONFIG_COMMON_CLK_SI570 is not set +# CONFIG_COMMON_CLK_CDCE925 is not set # CONFIG_CLK_QORIQ is not set # CONFIG_COMMON_CLK_PWM is not set # CONFIG_COMMON_CLK_PXA is not set @@ -3811,6 +3913,10 @@ CONFIG_COMMON_CLK=y # # Clock Source drivers # +CONFIG_CLKSRC_OF=y +CONFIG_CLKSRC_PROBE=y +CONFIG_CLKSRC_MMIO=y +# CONFIG_ARM_TIMER_SP804 is not set # CONFIG_ATMEL_PIT is not set # CONFIG_SH_TIMER_CMT is not set # CONFIG_SH_TIMER_MTU2 is not set @@ -3821,6 +3927,7 @@ CONFIG_MAILBOX=y # CONFIG_PL320_MBOX is not set # CONFIG_ALTERA_MBOX is not set CONFIG_BCM2835_MBOX=y +# CONFIG_MAILBOX_TEST is not set # CONFIG_IOMMU_SUPPORT is not set # @@ -3835,6 +3942,8 @@ CONFIG_BCM2835_MBOX=y # # SOC (System On Chip) specific Drivers # +# CONFIG_SOC_BRCMSTB is not set +# CONFIG_SUNXI_SRAM is not set # CONFIG_SOC_TI is not set # CONFIG_PM_DEVFREQ is not set CONFIG_EXTCON=m @@ -3851,7 +3960,7 @@ CONFIG_EXTCON_ARIZONA=m # CONFIG_MEMORY is not set CONFIG_IIO=m CONFIG_IIO_BUFFER=y -CONFIG_IIO_BUFFER_CB=y +CONFIG_IIO_BUFFER_CB=m CONFIG_IIO_KFIFO_BUF=m # CONFIG_IIO_TRIGGER is not set @@ -3862,10 +3971,12 @@ CONFIG_IIO_KFIFO_BUF=m # CONFIG_BMC150_ACCEL is not set # CONFIG_IIO_ST_ACCEL_3AXIS is not set # CONFIG_KXSD9 is not set -# CONFIG_MMA8452 is not set # CONFIG_KXCJK1013 is not set +# CONFIG_MMA8452 is not set # CONFIG_MMA9551 is not set # CONFIG_MMA9553 is not set +# CONFIG_MXC4005 is not set +# CONFIG_STK8312 is not set # # Analog to digital converters @@ -3880,6 +3991,7 @@ CONFIG_IIO_KFIFO_BUF=m # CONFIG_AD7923 is not set # CONFIG_AD799X is not set # CONFIG_CC10001_ADC is not set +# CONFIG_HI8435 is not set # CONFIG_MAX1027 is not set # CONFIG_MAX1363 is not set # CONFIG_MCP320X is not set @@ -3894,6 +4006,11 @@ CONFIG_IIO_KFIFO_BUF=m # # CONFIG_AD8366 is not set +# +# Chemical Sensors +# +# CONFIG_VZ89X is not set + # # Hid Sensor IIO Common # @@ -3919,6 +4036,7 @@ CONFIG_IIO_KFIFO_BUF=m # CONFIG_AD5764 is not set # CONFIG_AD5791 is not set # CONFIG_AD7303 is not set +# CONFIG_M62332 is not set # CONFIG_MAX517 is not set # CONFIG_MAX5821 is not set # CONFIG_MCP4725 is not set @@ -3954,6 +4072,8 @@ CONFIG_IIO_KFIFO_BUF=m # Humidity sensors # CONFIG_DHT11=m +# CONFIG_HDC100X is not set +# CONFIG_HTU21 is not set # CONFIG_SI7005 is not set # CONFIG_SI7020 is not set @@ -3971,6 +4091,8 @@ CONFIG_DHT11=m # CONFIG_ADJD_S311 is not set # CONFIG_AL3320A is not set # CONFIG_APDS9300 is not set +# CONFIG_APDS9960 is not set +# CONFIG_BH1750 is not set # CONFIG_CM32181 is not set # CONFIG_CM3232 is not set # CONFIG_CM3323 is not set @@ -3978,11 +4100,16 @@ CONFIG_DHT11=m # CONFIG_GP2AP020A00F is not set # CONFIG_ISL29125 is not set # CONFIG_JSA1212 is not set +# CONFIG_RPR0521 is not set # CONFIG_LTR501 is not set +# CONFIG_OPT3001 is not set +# CONFIG_PA12203001 is not set +# CONFIG_STK3310 is not set # CONFIG_TCS3414 is not set # CONFIG_TCS3472 is not set # CONFIG_SENSORS_TSL2563 is not set # CONFIG_TSL4531 is not set +# CONFIG_US5182D is not set # CONFIG_VCNL4000 is not set # @@ -3990,13 +4117,20 @@ CONFIG_DHT11=m # # CONFIG_AK8975 is not set # CONFIG_AK09911 is not set +# CONFIG_BMC150_MAGN is not set # CONFIG_MAG3110 is not set +# CONFIG_MMC35240 is not set # CONFIG_IIO_ST_MAGN_3AXIS is not set # # Inclinometer sensors # +# +# Digital potentiometers +# +# CONFIG_MCP4531 is not set + # # Pressure sensors # @@ -4004,6 +4138,7 @@ CONFIG_DHT11=m # CONFIG_MPL115 is not set # CONFIG_MPL3115 is not set # CONFIG_MS5611 is not set +# CONFIG_MS5637 is not set # CONFIG_IIO_ST_PRESS is not set # CONFIG_T5403 is not set @@ -4015,6 +4150,7 @@ CONFIG_DHT11=m # # Proximity sensors # +# CONFIG_LIDAR_LITE_V2 is not set # CONFIG_SX9500 is not set # @@ -4022,6 +4158,8 @@ CONFIG_DHT11=m # # CONFIG_MLX90614 is not set # CONFIG_TMP006 is not set +# CONFIG_TSYS01 is not set +# CONFIG_TSYS02D is not set CONFIG_PWM=y CONFIG_PWM_SYSFS=y CONFIG_PWM_BCM2835=m @@ -4036,14 +4174,32 @@ CONFIG_IRQCHIP=y # PHY Subsystem # # CONFIG_GENERIC_PHY is not set +# CONFIG_PHY_PXA_28NM_HSIC is not set +# CONFIG_PHY_PXA_28NM_USB2 is not set # CONFIG_BCM_KONA_USB2_PHY is not set # CONFIG_POWERCAP is not set # CONFIG_MCB is not set +# +# Performance monitor support +# +CONFIG_ARM_PMU=y +# CONFIG_RAS is not set + # # Android # # CONFIG_ANDROID is not set +# CONFIG_NVMEM is not set +# CONFIG_STM is not set +# CONFIG_STM_DUMMY is not set +# CONFIG_STM_SOURCE_CONSOLE is not set +# CONFIG_INTEL_TH is not set + +# +# FPGA Configuration Support +# +# CONFIG_FPGA is not set # # Firmware Drivers @@ -4058,7 +4214,7 @@ CONFIG_DCACHE_WORD_ACCESS=y # CONFIG_EXT2_FS is not set # CONFIG_EXT3_FS is not set CONFIG_EXT4_FS=y -CONFIG_EXT4_USE_FOR_EXT23=y +CONFIG_EXT4_USE_FOR_EXT2=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y # CONFIG_EXT4_ENCRYPTION is not set @@ -4104,6 +4260,7 @@ 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_F2FS_FS_ENCRYPTION is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y CONFIG_FILE_LOCKING=y @@ -4163,6 +4320,7 @@ CONFIG_NTFS_RW=y CONFIG_PROC_FS=y CONFIG_PROC_SYSCTL=y CONFIG_PROC_PAGE_MONITOR=y +# CONFIG_PROC_CHILDREN is not set CONFIG_KERNFS=y CONFIG_SYSFS=y CONFIG_TMPFS=y @@ -4334,6 +4492,7 @@ CONFIG_FRAME_WARN=1024 CONFIG_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set # CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_SECTION_MISMATCH_WARN_ONLY=y # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 @@ -4366,6 +4525,7 @@ CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 CONFIG_PANIC_ON_OOPS_VALUE=0 CONFIG_PANIC_TIMEOUT=0 CONFIG_SCHED_DEBUG=y +CONFIG_SCHED_INFO=y CONFIG_SCHEDSTATS=y # CONFIG_SCHED_STACK_END_CHECK is not set # CONFIG_DEBUG_TIMEKEEPING is not set @@ -4402,8 +4562,8 @@ CONFIG_DEBUG_BUGVERBOSE=y # CONFIG_TORTURE_TEST is not set # CONFIG_RCU_TORTURE_TEST is not set CONFIG_RCU_CPU_STALL_TIMEOUT=21 -# CONFIG_RCU_CPU_STALL_INFO is not set # CONFIG_RCU_TRACE is not set +# CONFIG_RCU_EQS_DEBUG is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set # CONFIG_NOTIFIER_ERROR_INJECTION is not set # CONFIG_FAULT_INJECTION is not set @@ -4437,6 +4597,7 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_TRACEPOINT_BENCHMARK is not set # CONFIG_RING_BUFFER_BENCHMARK is not set # CONFIG_RING_BUFFER_STARTUP_TEST is not set +CONFIG_TRACING_EVENTS_GPIO=y # # Runtime Testing @@ -4453,6 +4614,7 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_TEST_HEXDUMP is not set # CONFIG_TEST_STRING_HELPERS is not set # CONFIG_TEST_KSTRTOX is not set +# CONFIG_TEST_PRINTF is not set # CONFIG_TEST_RHASHTABLE is not set # CONFIG_DMA_API_DEBUG is not set # CONFIG_TEST_LKM is not set @@ -4461,6 +4623,7 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_TEST_FIRMWARE is not set # CONFIG_TEST_UDELAY is not set # CONFIG_MEMTEST is not set +# CONFIG_TEST_STATIC_KEYS is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y CONFIG_KGDB=y @@ -4516,13 +4679,18 @@ CONFIG_CRYPTO_HASH=y CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_RNG=m CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_RNG_DEFAULT=m CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_AKCIPHER2=y +CONFIG_CRYPTO_AKCIPHER=m +CONFIG_CRYPTO_RSA=m CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y CONFIG_CRYPTO_USER=m CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y CONFIG_CRYPTO_GF128MUL=m CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_NULL2=y CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_CRYPTD=m # CONFIG_CRYPTO_MCRYPTD is not set @@ -4534,7 +4702,9 @@ CONFIG_CRYPTO_AUTHENC=m # CONFIG_CRYPTO_CCM=m CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_CHACHA20POLY1305=m CONFIG_CRYPTO_SEQIV=m +CONFIG_CRYPTO_ECHAINIV=m # # Block modes @@ -4546,6 +4716,7 @@ CONFIG_CRYPTO_ECB=m # CONFIG_CRYPTO_LRW is not set # CONFIG_CRYPTO_PCBC is not set CONFIG_CRYPTO_XTS=m +CONFIG_CRYPTO_KEYWRAP=m # # Hash modes @@ -4562,6 +4733,7 @@ CONFIG_CRYPTO_CRC32C=y # CONFIG_CRYPTO_CRC32 is not set # CONFIG_CRYPTO_CRCT10DIF is not set CONFIG_CRYPTO_GHASH=m +CONFIG_CRYPTO_POLY1305=m CONFIG_CRYPTO_MD4=m CONFIG_CRYPTO_MD5=m CONFIG_CRYPTO_MICHAEL_MIC=m @@ -4590,6 +4762,7 @@ CONFIG_CRYPTO_DES=y # CONFIG_CRYPTO_FCRYPT is not set # CONFIG_CRYPTO_KHAZAD is not set # CONFIG_CRYPTO_SALSA20 is not set +CONFIG_CRYPTO_CHACHA20=m # CONFIG_CRYPTO_SEED is not set # CONFIG_CRYPTO_SERPENT is not set # CONFIG_CRYPTO_TEA is not set @@ -4601,6 +4774,7 @@ CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_DEFLATE=m # CONFIG_CRYPTO_ZLIB is not set # CONFIG_CRYPTO_LZO is not set +# CONFIG_CRYPTO_842 is not set # CONFIG_CRYPTO_LZ4 is not set # CONFIG_CRYPTO_LZ4HC is not set @@ -4608,16 +4782,28 @@ CONFIG_CRYPTO_DEFLATE=m # Random Number Generation # # CONFIG_CRYPTO_ANSI_CPRNG is not set -# CONFIG_CRYPTO_DRBG_MENU is not set +CONFIG_CRYPTO_DRBG_MENU=m +CONFIG_CRYPTO_DRBG_HMAC=y +# CONFIG_CRYPTO_DRBG_HASH is not set +# CONFIG_CRYPTO_DRBG_CTR is not set +CONFIG_CRYPTO_DRBG=m +CONFIG_CRYPTO_JITTERENTROPY=m CONFIG_CRYPTO_USER_API=m CONFIG_CRYPTO_USER_API_HASH=m CONFIG_CRYPTO_USER_API_SKCIPHER=m CONFIG_CRYPTO_USER_API_RNG=m +CONFIG_CRYPTO_USER_API_AEAD=m # CONFIG_CRYPTO_HW is not set # CONFIG_ASYMMETRIC_KEY_TYPE is not set + +# +# Certificates for signature checking +# +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_ARM_CRYPTO=y CONFIG_CRYPTO_SHA1_ARM=m CONFIG_CRYPTO_SHA256_ARM=m +CONFIG_CRYPTO_SHA512_ARM=m CONFIG_CRYPTO_AES_ARM=m # CONFIG_BINARY_PRINTF is not set @@ -4627,6 +4813,7 @@ CONFIG_CRYPTO_AES_ARM=m CONFIG_RAID6_PQ=m CONFIG_BITREVERSE=y # CONFIG_HAVE_ARCH_BITREVERSE is not set +CONFIG_RATIONAL=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_NET_UTILS=y @@ -4678,14 +4865,16 @@ CONFIG_NLATTR=y CONFIG_GENERIC_ATOMIC64=y CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y CONFIG_LRU_CACHE=m -CONFIG_AVERAGE=y +CONFIG_CLZ_TAB=y # CONFIG_CORDIC is not set # CONFIG_DDR is not set +CONFIG_MPILIB=m CONFIG_LIBFDT=y CONFIG_OID_REGISTRY=y CONFIG_FONT_SUPPORT=m # CONFIG_FONTS is not set CONFIG_FONT_8x8=y CONFIG_FONT_8x16=y +# CONFIG_SG_SPLIT is not set # CONFIG_ARCH_HAS_SG_CHAIN is not set # CONFIG_VIRTUALIZATION is not set diff --git a/main/linux-rpi/config-rpi2.armhf b/main/linux-rpi/config-rpi2.armhf index 1aae037b4d..53831953ab 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 4.1.20 Kernel Configuration +# Linux/arm 4.4.6 Kernel Configuration # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -9,6 +9,7 @@ CONFIG_STACKTRACE_SUPPORT=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_FIX_EARLYCON_MEM=y CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_NEED_DMA_MAP_STATE=y @@ -67,6 +68,7 @@ CONFIG_IRQ_DOMAIN=y CONFIG_HANDLE_DOMAIN_IRQ=y # CONFIG_IRQ_DOMAIN_DEBUG is not set CONFIG_IRQ_FORCED_THREADING=y +CONFIG_SPARSE_IRQ=y CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_ARCH_HAS_TICK_BROADCAST=y @@ -100,18 +102,11 @@ CONFIG_TASK_IO_ACCOUNTING=y # RCU Subsystem # CONFIG_PREEMPT_RCU=y +# CONFIG_RCU_EXPERT is not set CONFIG_SRCU=y # CONFIG_TASKS_RCU is not set CONFIG_RCU_STALL_COMMON=y -# CONFIG_RCU_USER_QS is not set -CONFIG_RCU_FANOUT=32 -CONFIG_RCU_FANOUT_LEAF=16 -# CONFIG_RCU_FANOUT_EXACT is not set -# 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 @@ -122,6 +117,7 @@ CONFIG_GENERIC_SCHED_CLOCK=y CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_PIDS=y CONFIG_CGROUP_DEVICE=y CONFIG_CPUSETS=y CONFIG_PROC_PID_CPUSET=y @@ -137,6 +133,7 @@ CONFIG_FAIR_GROUP_SCHED=y # CONFIG_RT_GROUP_SCHED is not set CONFIG_BLK_CGROUP=y # CONFIG_DEBUG_BLK_CGROUP is not set +CONFIG_CGROUP_WRITEBACK=y # CONFIG_CHECKPOINT_RESTORE is not set CONFIG_NAMESPACES=y CONFIG_UTS_NS=y @@ -181,6 +178,8 @@ CONFIG_EVENTFD=y CONFIG_SHMEM=y CONFIG_AIO=y CONFIG_ADVISE_SYSCALLS=y +# CONFIG_USERFAULTFD is not set +CONFIG_MEMBARRIER=y CONFIG_EMBEDDED=y CONFIG_HAVE_PERF_EVENTS=y CONFIG_PERF_USE_VMALLOC=y @@ -197,12 +196,13 @@ CONFIG_SLUB_DEBUG=y CONFIG_SLUB=y # CONFIG_SLOB is not set CONFIG_SLUB_CPU_PARTIAL=y -# CONFIG_SYSTEM_TRUSTED_KEYRING is not set +# CONFIG_SYSTEM_DATA_VERIFICATION is not set CONFIG_PROFILING=y CONFIG_OPROFILE=m CONFIG_HAVE_OPROFILE=y CONFIG_KPROBES=y CONFIG_JUMP_LABEL=y +# CONFIG_STATIC_KEYS_SELFTEST is not set # CONFIG_UPROBES is not set # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y @@ -258,7 +258,7 @@ CONFIG_MODVERSIONS=y CONFIG_MODULE_SRCVERSION_ALL=y # CONFIG_MODULE_SIG is not set # CONFIG_MODULE_COMPRESS is not set -CONFIG_STOP_MACHINE=y +CONFIG_MODULES_TREE_LOOKUP=y CONFIG_BLOCK=y CONFIG_LBDAF=y CONFIG_BLK_DEV_BSG=y @@ -302,6 +302,7 @@ CONFIG_CFQ_GROUP_IOSCHED=y CONFIG_DEFAULT_CFQ=y # CONFIG_DEFAULT_NOOP is not set CONFIG_DEFAULT_IOSCHED="cfq" +CONFIG_ASN1=m CONFIG_UNINLINE_SPIN_UNLOCK=y CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y CONFIG_MUTEX_SPIN_ON_OWNER=y @@ -336,22 +337,18 @@ CONFIG_ARCH_BCM2709=y # CONFIG_ARCH_W90X900 is not set # CONFIG_ARCH_LPC32XX is not set # CONFIG_ARCH_PXA is not set -# CONFIG_ARCH_SHMOBILE_LEGACY is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set # CONFIG_ARCH_S3C24XX is not set # CONFIG_ARCH_S3C64XX is not set # CONFIG_ARCH_DAVINCI is not set # CONFIG_ARCH_OMAP1 is not set -CONFIG_BCM2708_GPIO=y CONFIG_BCM2708_NOL2CACHE=y -CONFIG_BCM2708_SPIDEV=y # # Broadcom BCM2709 Implementations # CONFIG_MACH_BCM2709=y -CONFIG_BCM2709_DT=y # # Processor Type @@ -387,8 +384,8 @@ CONFIG_MIGHT_HAVE_CACHE_L2X0=y 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_MULTI_IRQ_HANDLER=y # CONFIG_ARM_ERRATA_430973 is not set # CONFIG_ARM_ERRATA_458693 is not set # CONFIG_ARM_ERRATA_460075 is not set @@ -425,9 +422,10 @@ CONFIG_HAVE_ARM_ARCH_TIMER=y # CONFIG_MCPM is not set # CONFIG_BIG_LITTLE is not set # CONFIG_VMSPLIT_3G is not set -CONFIG_VMSPLIT_2G=y +CONFIG_VMSPLIT_3G_OPT=y +# CONFIG_VMSPLIT_2G is not set # CONFIG_VMSPLIT_1G is not set -CONFIG_PAGE_OFFSET=0x80000000 +CONFIG_PAGE_OFFSET=0xB0000000 CONFIG_NR_CPUS=4 CONFIG_HOTPLUG_CPU=y # CONFIG_ARM_PSCI is not set @@ -452,15 +450,16 @@ CONFIG_AEABI=y # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set CONFIG_HAVE_ARCH_PFN_VALID=y # CONFIG_HIGHMEM is not set +# CONFIG_CPU_SW_DOMAIN_PAN is not set CONFIG_HW_PERF_EVENTS=y CONFIG_ARCH_WANT_GENERAL_HUGETLB=y +# CONFIG_ARM_MODULE_PLTS is not set CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_HAVE_MEMBLOCK=y CONFIG_NO_BOOTMEM=y CONFIG_MEMORY_ISOLATION=y # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set -CONFIG_PAGEFLAGS_EXTENDED=y CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_COMPACTION=y CONFIG_MIGRATION=y @@ -478,6 +477,8 @@ CONFIG_CMA_AREAS=7 # CONFIG_ZPOOL is not set # CONFIG_ZBUD is not set # CONFIG_ZSMALLOC is not set +# CONFIG_IDLE_PAGE_TRACKING is not set +CONFIG_FRAME_VECTOR=y CONFIG_FORCE_MAX_ZONEORDER=11 CONFIG_ALIGNMENT_TRAP=y CONFIG_UACCESS_WITH_MEMCPY=y @@ -530,6 +531,7 @@ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y # CPU frequency scaling drivers # # CONFIG_CPUFREQ_DT is not set +# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set CONFIG_ARM_BCM2835_CPUFREQ=y # CONFIG_QORIQ_CPUFREQ is not set @@ -574,6 +576,7 @@ CONFIG_COREDUMP=y # CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y +# CONFIG_SUSPEND_SKIP_SYNC is not set # CONFIG_HIBERNATION is not set CONFIG_PM_SLEEP=y CONFIG_PM_SLEEP_SMP=y @@ -589,6 +592,7 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y CONFIG_ARM_CPU_SUSPEND=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_NET=y +CONFIG_NET_INGRESS=y # # Networking options @@ -632,7 +636,6 @@ CONFIG_SYN_COOKIES=y 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 CONFIG_INET_IPCOMP=m @@ -656,6 +659,7 @@ CONFIG_INET6_AH=m CONFIG_INET6_ESP=m CONFIG_INET6_IPCOMP=m # CONFIG_IPV6_MIP6 is not set +CONFIG_IPV6_ILA=m CONFIG_INET6_XFRM_TUNNEL=m CONFIG_INET6_TUNNEL=m CONFIG_INET6_XFRM_MODE_TRANSPORT=m @@ -684,6 +688,7 @@ CONFIG_BRIDGE_NETFILTER=m # # Core Netfilter Configuration # +CONFIG_NETFILTER_INGRESS=y CONFIG_NETFILTER_NETLINK=m CONFIG_NETFILTER_NETLINK_ACCT=m CONFIG_NETFILTER_NETLINK_QUEUE=m @@ -714,7 +719,8 @@ CONFIG_NF_CONNTRACK_SIP=m CONFIG_NF_CONNTRACK_TFTP=m CONFIG_NF_CT_NETLINK=m # CONFIG_NF_CT_NETLINK_TIMEOUT is not set -# CONFIG_NETFILTER_NETLINK_QUEUE_CT is not set +CONFIG_NF_CT_NETLINK_HELPER=m +CONFIG_NETFILTER_NETLINK_GLUE_CT=y CONFIG_NF_NAT=m CONFIG_NF_NAT_NEEDED=y CONFIG_NF_NAT_PROTO_DCCP=m @@ -853,6 +859,7 @@ CONFIG_IP_VS_WRR=m CONFIG_IP_VS_LC=m CONFIG_IP_VS_WLC=m CONFIG_IP_VS_FO=m +CONFIG_IP_VS_OVF=m CONFIG_IP_VS_LBLC=m CONFIG_IP_VS_LBLCR=m CONFIG_IP_VS_DH=m @@ -878,6 +885,7 @@ CONFIG_IP_VS_PE_SIP=m CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_CONNTRACK_IPV4=m CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_NF_DUP_IPV4=m CONFIG_NF_LOG_ARP=m CONFIG_NF_LOG_IPV4=m CONFIG_NF_REJECT_IPV4=m @@ -913,6 +921,7 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_DEFRAG_IPV6=m CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m CONFIG_NF_LOG_IPV6=m CONFIG_NF_NAT_IPV6=m @@ -1040,6 +1049,7 @@ CONFIG_NET_CLS_RSVP6=m CONFIG_NET_CLS_FLOW=m CONFIG_NET_CLS_CGROUP=m # CONFIG_NET_CLS_BPF is not set +CONFIG_NET_CLS_FLOWER=m CONFIG_NET_EMATCH=y CONFIG_NET_EMATCH_STACK=32 CONFIG_NET_EMATCH_CMP=m @@ -1082,6 +1092,7 @@ CONFIG_NET_MPLS_GSO=m # CONFIG_MPLS_ROUTING is not set # CONFIG_HSR is not set # CONFIG_NET_SWITCHDEV is not set +CONFIG_NET_L3_MASTER_DEV=y CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_XPS=y @@ -1147,6 +1158,7 @@ CONFIG_BT_BNEP=m CONFIG_BT_BNEP_MC_FILTER=y CONFIG_BT_BNEP_PROTO_FILTER=y CONFIG_BT_HIDP=m +CONFIG_BT_HS=y CONFIG_BT_LE=y # CONFIG_BT_SELFTEST is not set # CONFIG_BT_DEBUGFS is not set @@ -1156,12 +1168,13 @@ CONFIG_BT_LE=y # CONFIG_BT_INTEL=m CONFIG_BT_BCM=m +CONFIG_BT_RTL=m CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_BCM=y +CONFIG_BT_HCIBTUSB_RTL=y # CONFIG_BT_HCIBTSDIO is not set # CONFIG_BT_HCIUART is not set CONFIG_BT_HCIBCM203X=m -CONFIG_BT_HCIBPA10X=m CONFIG_BT_HCIBFUSB=m CONFIG_BT_HCIVHCI=m CONFIG_BT_MRVL=m @@ -1184,6 +1197,7 @@ CONFIG_CFG80211=m CONFIG_CFG80211_DEFAULT_PS=y # CONFIG_CFG80211_DEBUGFS is not set # CONFIG_CFG80211_INTERNAL_REGDB is not set +CONFIG_CFG80211_CRDA_SUPPORT=y CONFIG_CFG80211_WEXT=y CONFIG_LIB80211=m CONFIG_LIB80211_CRYPT_WEP=m @@ -1202,6 +1216,7 @@ CONFIG_MAC80211_LEDS=y # CONFIG_MAC80211_DEBUGFS is not set # CONFIG_MAC80211_MESSAGE_TRACING is not set # CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 CONFIG_WIMAX=m CONFIG_WIMAX_DEBUG_LEVEL=8 CONFIG_RFKILL=m @@ -1223,6 +1238,7 @@ CONFIG_NFC=m # CONFIG_NFC_PN533=m # CONFIG_NFC_SIM is not set +CONFIG_LWTUNNEL=y CONFIG_HAVE_BPF_JIT=y # @@ -1255,7 +1271,7 @@ CONFIG_DEV_COREDUMP=y CONFIG_REGMAP=y CONFIG_REGMAP_I2C=m CONFIG_REGMAP_SPI=m -CONFIG_REGMAP_MMIO=m +CONFIG_REGMAP_MMIO=y CONFIG_REGMAP_IRQ=y CONFIG_DMA_SHARED_BUFFER=y # CONFIG_FENCE_TRACE is not set @@ -1274,9 +1290,8 @@ CONFIG_CMA_ALIGNMENT=8 # # Bus devices # -CONFIG_ARM_CCI=y -CONFIG_ARM_CCI400_COMMON=y -CONFIG_ARM_CCI400_PMU=y +# CONFIG_ARM_CCI400_PMU is not set +# CONFIG_ARM_CCI500_PMU is not set # CONFIG_ARM_CCN is not set # CONFIG_BRCMSTB_GISB_ARB is not set # CONFIG_VEXPRESS_CONFIG is not set @@ -1285,19 +1300,18 @@ CONFIG_PROC_EVENTS=y # CONFIG_MTD is not set CONFIG_DTC=y CONFIG_OF=y - -# -# Device Tree and Open Firmware support -# # 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_OVERLAY is not set +CONFIG_OF_RESOLVE=y +CONFIG_OF_OVERLAY=y +CONFIG_OF_CONFIGFS=y CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_PARPORT is not set CONFIG_BLK_DEV=y @@ -1312,7 +1326,6 @@ 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_PMEM is not set CONFIG_CDROM_PKTCDVD=m CONFIG_CDROM_PKTCDVD_BUFFERS=8 # CONFIG_CDROM_PKTCDVD_WCACHE is not set @@ -1373,6 +1386,10 @@ CONFIG_BCM2708_VCHIQ=y # Intel MIC Bus Driver # +# +# SCIF Bus Driver +# + # # Intel MIC Host Driver # @@ -1380,8 +1397,18 @@ CONFIG_BCM2708_VCHIQ=y # # Intel MIC Card Driver # + +# +# SCIF Driver +# + +# +# Intel MIC Coprocessor State Management (COSM) Drivers +# # CONFIG_ECHO is not set # CONFIG_CXL_BASE is not set +# CONFIG_CXL_KERNEL_API is not set +# CONFIG_CXL_EEH is not set # # SCSI device support @@ -1470,13 +1497,16 @@ CONFIG_MACVLAN=m # CONFIG_MACVTAP is not set # CONFIG_IPVLAN is not set # CONFIG_VXLAN is not set +# CONFIG_GENEVE is not set CONFIG_NETCONSOLE=m # CONFIG_NETCONSOLE_DYNAMIC is not set CONFIG_NETPOLL=y CONFIG_NET_POLL_CONTROLLER=y CONFIG_TUN=m +# CONFIG_TUN_VNET_CROSS_LE is not set CONFIG_VETH=m # CONFIG_NLMON is not set +CONFIG_NET_VRF=m # # CAIF transport drivers @@ -1492,6 +1522,7 @@ CONFIG_ETHERNET=y CONFIG_NET_VENDOR_ARC=y # CONFIG_ARC_EMAC is not set # CONFIG_EMAC_ROCKCHIP is not set +# CONFIG_NET_VENDOR_AURORA is not set CONFIG_NET_CADENCE=y # CONFIG_MACB is not set CONFIG_NET_VENDOR_BROADCOM=y @@ -1502,6 +1533,8 @@ CONFIG_NET_VENDOR_CIRRUS=y # CONFIG_CS89x0 is not set # CONFIG_DM9000 is not set # CONFIG_DNET is not set +CONFIG_NET_VENDOR_EZCHIP=y +# CONFIG_EZCHIP_NPS_MANAGEMENT_ENET is not set CONFIG_NET_VENDOR_FARADAY=y # CONFIG_FTMAC100 is not set # CONFIG_FTGMAC100 is not set @@ -1517,11 +1550,13 @@ CONFIG_NET_VENDOR_MICREL=y CONFIG_NET_VENDOR_MICROCHIP=y CONFIG_ENC28J60=m # CONFIG_ENC28J60_WRITEVERIFY is not set +# CONFIG_ENCX24J600 is not set CONFIG_NET_VENDOR_NATSEMI=y 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_RENESAS=y CONFIG_NET_VENDOR_ROCKER=y # CONFIG_NET_VENDOR_SAMSUNG is not set CONFIG_NET_VENDOR_SEEQ=y @@ -1531,6 +1566,8 @@ CONFIG_NET_VENDOR_SMSC=y # CONFIG_SMSC911X is not set CONFIG_NET_VENDOR_STMICRO=y # CONFIG_STMMAC_ETH is not set +CONFIG_NET_VENDOR_SYNOPSYS=y +# CONFIG_SYNOPSYS_DWC_ETH_QOS is not set CONFIG_NET_VENDOR_VIA=y # CONFIG_VIA_RHINE is not set # CONFIG_VIA_VELOCITY is not set @@ -1542,6 +1579,7 @@ CONFIG_PHYLIB=m # # MII PHY device drivers # +# CONFIG_AQUANTIA_PHY is not set # CONFIG_AT803X_PHY is not set # CONFIG_AMD_PHY is not set # CONFIG_MARVELL_PHY is not set @@ -1550,6 +1588,7 @@ CONFIG_PHYLIB=m # CONFIG_LXT_PHY is not set # CONFIG_CICADA_PHY is not set # CONFIG_VITESSE_PHY is not set +# CONFIG_TERANETICS_PHY is not set # CONFIG_SMSC_PHY is not set # CONFIG_BROADCOM_PHY is not set # CONFIG_BCM7XXX_PHY is not set @@ -1560,6 +1599,9 @@ CONFIG_PHYLIB=m # CONFIG_STE10XP is not set # CONFIG_LSI_ET1011C_PHY is not set # CONFIG_MICREL_PHY is not set +# CONFIG_DP83848_PHY is not set +# CONFIG_DP83867_PHY is not set +# CONFIG_MICROCHIP_PHY is not set # CONFIG_FIXED_PHY is not set CONFIG_MDIO_BITBANG=m # CONFIG_MDIO_GPIO is not set @@ -1589,6 +1631,7 @@ CONFIG_USB_KAWETH=m CONFIG_USB_PEGASUS=m CONFIG_USB_RTL8150=m CONFIG_USB_RTL8152=m +# CONFIG_USB_LAN78XX is not set CONFIG_USB_USBNET=y CONFIG_USB_NET_AX8817X=m CONFIG_USB_NET_AX88179_178A=m @@ -1623,6 +1666,7 @@ CONFIG_USB_NET_INT51X1=m CONFIG_USB_IPHETH=m CONFIG_USB_SIERRA_NET=m CONFIG_USB_VL600=m +# CONFIG_USB_NET_CH9200 is not set CONFIG_WLAN=y CONFIG_LIBERTAS_THINFIRM=m # CONFIG_LIBERTAS_THINFIRM_DEBUG is not set @@ -1724,6 +1768,7 @@ CONFIG_RT2X00_LIB_LEDS=y # CONFIG_RT2X00_DEBUG is not set # CONFIG_WL_MEDIATEK is not set CONFIG_RTL8192CU=m +# CONFIG_RTL8XXXU is not set # CONFIG_WL_TI is not set CONFIG_ZD1211RW=m # CONFIG_ZD1211RW_DEBUG is not set @@ -1741,11 +1786,13 @@ CONFIG_WIMAX_I2400M_USB=m CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8 # CONFIG_WAN is not set # CONFIG_ISDN is not set +# CONFIG_NVM is not set # # Input device support # CONFIG_INPUT=y +CONFIG_INPUT_LEDS=m CONFIG_INPUT_FF_MEMLESS=m CONFIG_INPUT_POLLDEV=m # CONFIG_INPUT_SPARSEKMAP is not set @@ -1833,7 +1880,7 @@ CONFIG_JOYSTICK_XPAD_FF=y CONFIG_JOYSTICK_RPISENSE=m # CONFIG_INPUT_TABLET is not set CONFIG_INPUT_TOUCHSCREEN=y -CONFIG_OF_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_PROPERTIES=y CONFIG_TOUCHSCREEN_ADS7846=m # CONFIG_TOUCHSCREEN_AD7877 is not set # CONFIG_TOUCHSCREEN_AD7879 is not set @@ -1862,6 +1909,7 @@ CONFIG_TOUCHSCREEN_FT6236=m # CONFIG_TOUCHSCREEN_MCS5000 is not set # CONFIG_TOUCHSCREEN_MMS114 is not set # CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set # CONFIG_TOUCHSCREEN_INEXIO is not set # CONFIG_TOUCHSCREEN_MK712 is not set # CONFIG_TOUCHSCREEN_PENMOUNT is not set @@ -1870,9 +1918,11 @@ CONFIG_TOUCHSCREEN_RPI_FT5406=m # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set # CONFIG_TOUCHSCREEN_TOUCHWIN is not set # CONFIG_TOUCHSCREEN_PIXCIR is not set +# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set # CONFIG_TOUCHSCREEN_TOUCHIT213 is not set # CONFIG_TOUCHSCREEN_TSC_SERIO is not set +# CONFIG_TOUCHSCREEN_TSC2004 is not set # CONFIG_TOUCHSCREEN_TSC2005 is not set # CONFIG_TOUCHSCREEN_TSC2007 is not set # CONFIG_TOUCHSCREEN_ST1232 is not set @@ -1881,6 +1931,7 @@ CONFIG_TOUCHSCREEN_STMPE=m # CONFIG_TOUCHSCREEN_SX8654 is not set # CONFIG_TOUCHSCREEN_TPS6507X is not set # CONFIG_TOUCHSCREEN_ZFORCE is not set +# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set CONFIG_INPUT_MISC=y CONFIG_INPUT_AD714X=m CONFIG_INPUT_AD714X_I2C=m @@ -1912,6 +1963,7 @@ CONFIG_INPUT_CMA3000=m # CONFIG_INPUT_CMA3000_I2C is not set # CONFIG_INPUT_SOC_BUTTON_ARRAY is not set # CONFIG_INPUT_DRV260X_HAPTICS is not set +# CONFIG_INPUT_DRV2665_HAPTICS is not set # CONFIG_INPUT_DRV2667_HAPTICS is not set # @@ -1926,6 +1978,7 @@ CONFIG_SERIO_RAW=m # CONFIG_SERIO_PS2MULT is not set # CONFIG_SERIO_ARC_PS2 is not set # CONFIG_SERIO_APBPS2 is not set +# CONFIG_USERIO is not set CONFIG_GAMEPORT=m CONFIG_GAMEPORT_NS558=m CONFIG_GAMEPORT_L4=m @@ -1933,6 +1986,13 @@ CONFIG_GAMEPORT_L4=m # # Character devices # +CONFIG_BRCM_CHAR_DRIVERS=y +CONFIG_BCM_VC_CMA=y +CONFIG_BCM2708_VCMEM=y +CONFIG_BCM_VCIO=y +CONFIG_BCM_VC_SM=y +CONFIG_BCM2835_DEVGPIOMEM=m +CONFIG_BCM2835_SMI_DEV=m CONFIG_TTY=y CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y @@ -1960,8 +2020,11 @@ CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_NR_UARTS=1 CONFIG_SERIAL_8250_RUNTIME_UARTS=0 # CONFIG_SERIAL_8250_EXTENDED is not set +CONFIG_SERIAL_8250_FSL=y # CONFIG_SERIAL_8250_DW is not set # CONFIG_SERIAL_8250_EM is not set +# CONFIG_SERIAL_8250_RT288X is not set +# CONFIG_SERIAL_8250_INGENIC is not set # # Non-8250 serial port support @@ -1973,6 +2036,7 @@ CONFIG_SERIAL_AMBA_PL011_CONSOLE=y # CONFIG_SERIAL_KGDB_NMI is not set # CONFIG_SERIAL_MAX3100 is not set # CONFIG_SERIAL_MAX310X is not set +# CONFIG_SERIAL_UARTLITE is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_CONSOLE_POLL=y @@ -1988,24 +2052,17 @@ CONFIG_SERIAL_OF_PLATFORM=y # CONFIG_SERIAL_FSL_LPUART is not set # CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set # CONFIG_SERIAL_ST_ASC is not set +# CONFIG_SERIAL_STM32 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=m -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_BCM2708_VCMEM=y -CONFIG_BCM_VCIO=y -CONFIG_BCM_VC_SM=y -CONFIG_BCM2835_DEVGPIOMEM=m -CONFIG_BCM2835_SMI_DEV=m # CONFIG_XILLYBUS is not set # @@ -2025,6 +2082,7 @@ CONFIG_I2C_MUX=m # CONFIG_I2C_MUX_PCA9541 is not set # CONFIG_I2C_MUX_PCA954x is not set # CONFIG_I2C_MUX_PINCTRL is not set +# CONFIG_I2C_MUX_REG is not set CONFIG_I2C_HELPER_AUTO=y CONFIG_I2C_ALGOBIT=m @@ -2040,6 +2098,7 @@ CONFIG_I2C_BCM2708_BAUDRATE=100000 CONFIG_I2C_BCM2835=m # CONFIG_I2C_CBUS_GPIO is not set # CONFIG_I2C_DESIGNWARE_PLATFORM is not set +# CONFIG_I2C_EMEV2 is not set CONFIG_I2C_GPIO=m # CONFIG_I2C_NOMADIK is not set # CONFIG_I2C_OCORES is not set @@ -2075,7 +2134,7 @@ CONFIG_SPI_MASTER=y # # CONFIG_SPI_ALTERA is not set CONFIG_SPI_BCM2835=m -CONFIG_SPI_BCM2708=m +CONFIG_SPI_BCM2835AUX=m # CONFIG_SPI_BITBANG is not set # CONFIG_SPI_CADENCE is not set # CONFIG_SPI_GPIO is not set @@ -2087,6 +2146,7 @@ CONFIG_SPI_BCM2708=m # CONFIG_SPI_SC18IS602 is not set # CONFIG_SPI_XCOMM is not set # CONFIG_SPI_XILINX is not set +# CONFIG_SPI_ZYNQMP_GQSPI is not set # CONFIG_SPI_DESIGNWARE is not set # @@ -2154,8 +2214,10 @@ CONFIG_GPIO_BCM_VIRT=y # 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_SYSCON is not set +# CONFIG_GPIO_XILINX is not set # CONFIG_GPIO_ZEVIO is not set +# CONFIG_GPIO_ZX is not set # # I2C GPIO expanders @@ -2179,9 +2241,13 @@ CONFIG_GPIO_STMPE=y # # CONFIG_GPIO_74X164 is not set CONFIG_GPIO_MAX7301=m -CONFIG_GPIO_MCP23S08=m # CONFIG_GPIO_MC33880 is not set +# +# SPI or I2C GPIO expanders +# +CONFIG_GPIO_MCP23S08=m + # # USB GPIO expanders # @@ -2224,7 +2290,7 @@ CONFIG_BATTERY_DS2760=m # CONFIG_BATTERY_DS2781 is not set # CONFIG_BATTERY_DS2782 is not set # CONFIG_BATTERY_SBS is not set -# CONFIG_BATTERY_BQ27x00 is not set +# CONFIG_BATTERY_BQ27XXX is not set # CONFIG_BATTERY_MAX17040 is not set # CONFIG_BATTERY_MAX17042 is not set # CONFIG_CHARGER_MAX8903 is not set @@ -2233,34 +2299,38 @@ CONFIG_BATTERY_DS2760=m # CONFIG_CHARGER_MANAGER is not set # CONFIG_CHARGER_BQ2415X is not set # CONFIG_CHARGER_BQ24190 is not set +# CONFIG_CHARGER_BQ24257 is not set # CONFIG_CHARGER_BQ24735 is not set +# CONFIG_CHARGER_BQ25890 is not set # CONFIG_CHARGER_SMB347 is not set # CONFIG_BATTERY_GAUGE_LTC2941 is not set +# CONFIG_CHARGER_RT9455 is not set CONFIG_POWER_RESET=y +# CONFIG_POWER_RESET_BRCMSTB is not set CONFIG_POWER_RESET_GPIO=y CONFIG_POWER_RESET_GPIO_RESTART=y # CONFIG_POWER_RESET_LTC2952 is not set # CONFIG_POWER_RESET_RESTART is not set +# CONFIG_POWER_RESET_VERSATILE is not set # CONFIG_POWER_RESET_SYSCON is not set # CONFIG_POWER_RESET_SYSCON_POWEROFF is not set # CONFIG_POWER_AVS is not set # CONFIG_HWMON is not set CONFIG_THERMAL=y CONFIG_THERMAL_OF=y +# CONFIG_THERMAL_WRITABLE_TRIPS is not set CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set # CONFIG_THERMAL_GOV_FAIR_SHARE is not set CONFIG_THERMAL_GOV_STEP_WISE=y # CONFIG_THERMAL_GOV_BANG_BANG is not set # CONFIG_THERMAL_GOV_USER_SPACE is not set +# CONFIG_THERMAL_GOV_POWER_ALLOCATOR 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=y # CONFIG_WATCHDOG_NOWAYOUT is not set @@ -2275,8 +2345,8 @@ CONFIG_WATCHDOG_CORE=y # CONFIG_CADENCE_WATCHDOG is not set # CONFIG_DW_WATCHDOG is not set # CONFIG_MAX63XX_WATCHDOG is not set -CONFIG_BCM2708_WDT=m CONFIG_BCM2835_WDT=m +# CONFIG_BCM7038_WDT is not set # CONFIG_MEN_A21_WDT is not set # @@ -2292,6 +2362,7 @@ CONFIG_SSB=m CONFIG_SSB_BLOCKIO=y CONFIG_SSB_SDIOHOST_POSSIBLE=y # CONFIG_SSB_SDIOHOST is not set +# CONFIG_SSB_HOST_SOC is not set # CONFIG_SSB_SILENT is not set # CONFIG_SSB_DEBUG is not set # CONFIG_SSB_DRIVER_GPIO is not set @@ -2316,6 +2387,7 @@ CONFIG_MFD_RPISENSE_CORE=m # CONFIG_MFD_AS3722 is not set # CONFIG_PMIC_ADP5520 is not set # CONFIG_MFD_AAT2870_CORE is not set +# CONFIG_MFD_ATMEL_FLEXCOM is not set # CONFIG_MFD_ATMEL_HLCDC is not set # CONFIG_MFD_BCM590XX is not set # CONFIG_MFD_AXP20X is not set @@ -2325,6 +2397,7 @@ CONFIG_MFD_RPISENSE_CORE=m # CONFIG_MFD_DA9052_SPI is not set # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_DA9062 is not set # CONFIG_MFD_DA9063 is not set # CONFIG_MFD_DA9150 is not set # CONFIG_MFD_DLN2 is not set @@ -2372,7 +2445,7 @@ CONFIG_MFD_STMPE=y # CONFIG_STMPE_I2C=y CONFIG_STMPE_SPI=y -# CONFIG_MFD_SYSCON is not set +CONFIG_MFD_SYSCON=y # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_LP3943 is not set # CONFIG_MFD_LP8788 is not set @@ -2404,6 +2477,7 @@ CONFIG_MFD_ARIZONA_SPI=m CONFIG_MFD_WM5102=y # CONFIG_MFD_WM5110 is not set # CONFIG_MFD_WM8997 is not set +# CONFIG_MFD_WM8998 is not set # CONFIG_MFD_WM8400 is not set # CONFIG_MFD_WM831X_I2C is not set # CONFIG_MFD_WM831X_SPI is not set @@ -2416,6 +2490,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=m # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set # CONFIG_REGULATOR_ACT8865 is not set # CONFIG_REGULATOR_AD5398 is not set +# CONFIG_REGULATOR_ANATOP is not set CONFIG_REGULATOR_ARIZONA=m # CONFIG_REGULATOR_DA9210 is not set # CONFIG_REGULATOR_DA9211 is not set @@ -2433,6 +2508,7 @@ CONFIG_REGULATOR_ARIZONA=m # CONFIG_REGULATOR_MAX8660 is not set # CONFIG_REGULATOR_MAX8952 is not set # CONFIG_REGULATOR_MAX8973 is not set +# CONFIG_REGULATOR_MT6311 is not set # CONFIG_REGULATOR_PFUZE100 is not set # CONFIG_REGULATOR_PWM is not set # CONFIG_REGULATOR_TPS51632 is not set @@ -2653,6 +2729,7 @@ 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 +# CONFIG_DVB_PLATFORM_DRIVERS is not set # # Supported MMC/SDIO adapters @@ -2815,6 +2892,7 @@ CONFIG_DVB_TUNER_ITD1000=m CONFIG_DVB_TUNER_CX24113=m CONFIG_DVB_TDA826X=m CONFIG_DVB_CX24116=m +CONFIG_DVB_CX24120=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m @@ -2904,10 +2982,6 @@ CONFIG_DVB_AF9033=m # # Graphics support # - -# -# Direct Rendering Manager -# # CONFIG_DRM is not set # @@ -2944,6 +3018,7 @@ CONFIG_FB_BCM2708=y # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_SMSCUFX is not set # CONFIG_FB_UDL is not set +# CONFIG_FB_IBM_GXT4500 is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FB_METRONOME is not set # CONFIG_FB_BROADSHEET is not set @@ -2970,6 +3045,7 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y # CONFIG_BACKLIGHT_GENERIC is not set # CONFIG_BACKLIGHT_PWM is not set CONFIG_BACKLIGHT_RPI=m +# CONFIG_BACKLIGHT_PM8941_WLED is not set # CONFIG_BACKLIGHT_ADP8860 is not set # CONFIG_BACKLIGHT_ADP8870 is not set # CONFIG_BACKLIGHT_LM3630A is not set @@ -2997,7 +3073,6 @@ CONFIG_SND_PCM=m CONFIG_SND_DMAENGINE_PCM=m CONFIG_SND_HWDEP=m CONFIG_SND_RAWMIDI=m -CONFIG_SND_COMPRESS_OFFLOAD=m CONFIG_SND_JACK=y CONFIG_SND_SEQUENCER=m CONFIG_SND_SEQ_DUMMY=m @@ -3005,11 +3080,13 @@ CONFIG_SND_OSSEMUL=y CONFIG_SND_MIXER_OSS=m CONFIG_SND_PCM_OSS=m CONFIG_SND_PCM_OSS_PLUGINS=y +CONFIG_SND_PCM_TIMER=y CONFIG_SND_SEQUENCER_OSS=y CONFIG_SND_HRTIMER=m CONFIG_SND_SEQ_HRTIMER_DEFAULT=y # CONFIG_SND_DYNAMIC_MINORS is not set CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_PROC_FS=y CONFIG_SND_VERBOSE_PROCFS=y # CONFIG_SND_VERBOSE_PRINTK is not set # CONFIG_SND_DEBUG is not set @@ -3031,6 +3108,7 @@ CONFIG_SND_MPU401=m # # HD-Audio # +CONFIG_SND_HDA_PREALLOC_SIZE=64 CONFIG_SND_ARM=y # CONFIG_SND_ARMAACI is not set CONFIG_SND_BCM2835=m @@ -3050,7 +3128,7 @@ CONFIG_SND_USB_6FIRE=m CONFIG_SND_SOC=m CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_ATMEL_SOC is not set -CONFIG_SND_BCM2708_SOC_I2S=m +CONFIG_SND_BCM2835_SOC_I2S=m CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC=m CONFIG_SND_BCM2708_SOC_HIFIBERRY_DACPLUS=m CONFIG_SND_BCM2708_SOC_HIFIBERRY_DIGI=m @@ -3075,7 +3153,11 @@ CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP=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 + +# +# Allwinner SoC Audio support +# +# CONFIG_SND_SUN4I_CODEC is not set # CONFIG_SND_SOC_XTFPGA_I2S is not set CONFIG_SND_SOC_I2C_AND_SPI=m @@ -3084,9 +3166,11 @@ CONFIG_SND_SOC_I2C_AND_SPI=m # CONFIG_SND_SOC_ARIZONA=m CONFIG_SND_SOC_WM_ADSP=m +# CONFIG_SND_SOC_AC97_CODEC is not set CONFIG_SND_SOC_ADAU1701=m # CONFIG_SND_SOC_AK4104 is not set # CONFIG_SND_SOC_AK4554 is not set +# CONFIG_SND_SOC_AK4613 is not set # CONFIG_SND_SOC_AK4642 is not set # CONFIG_SND_SOC_AK5386 is not set # CONFIG_SND_SOC_ALC5623 is not set @@ -3100,8 +3184,9 @@ CONFIG_SND_SOC_ADAU1701=m # 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_CS4349 is not set # CONFIG_SND_SOC_ES8328 is not set +# CONFIG_SND_SOC_GTM601 is not set # CONFIG_SND_SOC_PCM1681 is not set # CONFIG_SND_SOC_PCM1792A is not set CONFIG_SND_SOC_PCM512x=m @@ -3121,8 +3206,10 @@ CONFIG_SND_SOC_SIGMADSP_I2C=m # CONFIG_SND_SOC_SSM4567 is not set # CONFIG_SND_SOC_STA32X is not set # CONFIG_SND_SOC_STA350 is not set +# CONFIG_SND_SOC_STI_SAS is not set # CONFIG_SND_SOC_TAS2552 is not set # CONFIG_SND_SOC_TAS5086 is not set +# CONFIG_SND_SOC_TAS571X is not set # CONFIG_SND_SOC_TFA9879 is not set CONFIG_SND_SOC_TAS5713=m # CONFIG_SND_SOC_TLV320AIC23_I2C is not set @@ -3175,6 +3262,7 @@ CONFIG_HID_BELKIN=m # CONFIG_HID_BETOP_FF is not set CONFIG_HID_CHERRY=m CONFIG_HID_CHICONY=m +# CONFIG_HID_CORSAIR is not set # CONFIG_HID_PRODIKEYS is not set # CONFIG_HID_CP2112 is not set CONFIG_HID_CYPRESS=m @@ -3184,6 +3272,8 @@ CONFIG_HID_EMS_FF=m CONFIG_HID_ELECOM=m CONFIG_HID_ELO=m CONFIG_HID_EZKEY=m +# CONFIG_HID_GEMBIRD is not set +# CONFIG_HID_GFRM is not set CONFIG_HID_HOLTEK=m # CONFIG_HOLTEK_FF is not set # CONFIG_HID_GT683R is not set @@ -3274,7 +3364,7 @@ CONFIG_USB_DEFAULT_PERSIST=y # 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 +# CONFIG_USB_ULPI_BUS is not set CONFIG_USB_MON=m # CONFIG_USB_WUSB_CBAF is not set @@ -3287,7 +3377,6 @@ CONFIG_USB_MON=m # CONFIG_USB_OXU210HP_HCD is not set # CONFIG_USB_ISP116X_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 # CONFIG_USB_MAX3421_HCD is not set # CONFIG_USB_OHCI_HCD is not set @@ -3457,7 +3546,6 @@ CONFIG_USB_EZUSB_FX2=m # CONFIG_UWB is not set CONFIG_MMC=y # CONFIG_MMC_DEBUG is not set -# CONFIG_MMC_CLKGATE is not set # # MMC/SD/SDIO Card Drivers @@ -3479,12 +3567,14 @@ 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_OF_AT91 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 # CONFIG_MMC_USHC is not set # CONFIG_MMC_USDHI6ROL0 is not set +# CONFIG_MMC_MTK is not set # CONFIG_MEMSTICK is not set CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y @@ -3493,6 +3583,9 @@ CONFIG_LEDS_CLASS_FLASH=y # # LED drivers # +# CONFIG_LEDS_AAT1290 is not set +# CONFIG_LEDS_BCM6328 is not set +# CONFIG_LEDS_BCM6358 is not set # CONFIG_LEDS_LM3530 is not set # CONFIG_LEDS_LM3642 is not set # CONFIG_LEDS_PCA9532 is not set @@ -3511,13 +3604,15 @@ CONFIG_LEDS_GPIO=y # CONFIG_LEDS_BD2802 is not set # CONFIG_LEDS_LT3593 is not set # CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_TLC591XX is not set # CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_KTD2692 is not set # # 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 +# CONFIG_LEDS_SYSCON is not set # # LED Triggers @@ -3538,12 +3633,14 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=m CONFIG_LEDS_TRIGGER_CAMERA=m CONFIG_LEDS_TRIGGER_INPUT=y # CONFIG_ACCESSIBILITY is not set +CONFIG_EDAC_ATOMIC_SCRUB=y +CONFIG_EDAC_SUPPORT=y # CONFIG_EDAC is not set CONFIG_RTC_LIB=y CONFIG_RTC_CLASS=y # CONFIG_RTC_HCTOSYS is not set CONFIG_RTC_SYSTOHC=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_SYSTOHC_DEVICE="rtc0" # CONFIG_RTC_DEBUG is not set # @@ -3586,6 +3683,7 @@ CONFIG_RTC_DRV_RX8581=m CONFIG_RTC_DRV_RX8025=m CONFIG_RTC_DRV_EM3027=m CONFIG_RTC_DRV_RV3029C2=m +# CONFIG_RTC_DRV_RV8803 is not set # # SPI RTC drivers @@ -3622,6 +3720,7 @@ CONFIG_RTC_DRV_RX4581=m # CONFIG_RTC_DRV_BQ4802 is not set # CONFIG_RTC_DRV_RP5C01 is not set # CONFIG_RTC_DRV_V3020 is not set +# CONFIG_RTC_DRV_ZYNQMP is not set # # on-CPU RTC drivers @@ -3629,7 +3728,6 @@ CONFIG_RTC_DRV_RX4581=m # CONFIG_RTC_DRV_PL030 is not set # CONFIG_RTC_DRV_PL031 is not set # CONFIG_RTC_DRV_SNVS is not set -# CONFIG_RTC_DRV_XGENE is not set # # HID Sensor RTC drivers @@ -3641,16 +3739,17 @@ CONFIG_DMADEVICES=y # # DMA Devices # -# CONFIG_AMBA_PL08X 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 CONFIG_DMA_VIRTUAL_CHANNELS=y CONFIG_DMA_OF=y +# CONFIG_AMBA_PL08X is not set +CONFIG_DMA_BCM2835=y +# CONFIG_FSL_EDMA is not set +# CONFIG_INTEL_IDMA64 is not set +# CONFIG_NBPFAXI_DMA is not set +# CONFIG_PL330_DMA is not set +CONFIG_DMA_BCM2708=y +# CONFIG_DW_DMAC is not set # # DMA Clients @@ -3661,6 +3760,7 @@ CONFIG_DMA_OF=y CONFIG_UIO=m CONFIG_UIO_PDRV_GENIRQ=m # CONFIG_UIO_DMEM_GENIRQ is not set +# CONFIG_UIO_PRUSS is not set # CONFIG_VIRT_DRIVERS is not set # @@ -3770,7 +3870,6 @@ CONFIG_VT6656=m # Triggers - standalone # # CONFIG_IIO_SIMPLE_DUMMY is not set -# CONFIG_FT1000 is not set # # Speakup console speech @@ -3804,7 +3903,7 @@ CONFIG_LIRC_SERIAL_TRANSMITTER=y # # Android # -# CONFIG_USB_WPAN_HCD is not set +# CONFIG_STAGING_BOARD is not set # CONFIG_WIMAX_GDM72XX is not set # CONFIG_LTE_GDM724X is not set # CONFIG_LUSTRE_FS is not set @@ -3817,6 +3916,7 @@ CONFIG_FB_TFT_BD663474=m CONFIG_FB_TFT_HX8340BN=m CONFIG_FB_TFT_HX8347D=m CONFIG_FB_TFT_HX8353D=m +CONFIG_FB_TFT_HX8357D=m CONFIG_FB_TFT_ILI9163=m CONFIG_FB_TFT_ILI9320=m CONFIG_FB_TFT_ILI9325=m @@ -3833,13 +3933,17 @@ CONFIG_FB_TFT_SSD1306=m CONFIG_FB_TFT_SSD1331=m CONFIG_FB_TFT_SSD1351=m CONFIG_FB_TFT_ST7735R=m +CONFIG_FB_TFT_ST7789V=m CONFIG_FB_TFT_TINYLCD=m CONFIG_FB_TFT_TLS8204=m +CONFIG_FB_TFT_UC1611=m CONFIG_FB_TFT_UC1701=m CONFIG_FB_TFT_UPD161704=m CONFIG_FB_TFT_WATTEROTT=m CONFIG_FB_FLEX=m CONFIG_FB_TFT_FBTFT_DEVICE=m +# CONFIG_WILC1000_DRIVER is not set +# CONFIG_MOST is not set # CONFIG_CHROME_PLATFORMS is not set CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y @@ -3849,7 +3953,9 @@ CONFIG_COMMON_CLK=y # Common Clock Framework # # CONFIG_COMMON_CLK_SI5351 is not set +# CONFIG_COMMON_CLK_SI514 is not set # CONFIG_COMMON_CLK_SI570 is not set +# CONFIG_COMMON_CLK_CDCE925 is not set # CONFIG_CLK_QORIQ is not set # CONFIG_COMMON_CLK_PWM is not set # CONFIG_COMMON_CLK_PXA is not set @@ -3863,8 +3969,10 @@ CONFIG_COMMON_CLK=y # Clock Source drivers # CONFIG_CLKSRC_OF=y +CONFIG_CLKSRC_PROBE=y CONFIG_ARM_ARCH_TIMER=y CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y +# CONFIG_ARM_TIMER_SP804 is not set # CONFIG_ATMEL_PIT is not set # CONFIG_SH_TIMER_CMT is not set # CONFIG_SH_TIMER_MTU2 is not set @@ -3875,6 +3983,7 @@ CONFIG_MAILBOX=y # CONFIG_PL320_MBOX is not set # CONFIG_ALTERA_MBOX is not set CONFIG_BCM2835_MBOX=y +# CONFIG_MAILBOX_TEST is not set # CONFIG_IOMMU_SUPPORT is not set # @@ -3889,6 +3998,8 @@ CONFIG_BCM2835_MBOX=y # # SOC (System On Chip) specific Drivers # +# CONFIG_SOC_BRCMSTB is not set +# CONFIG_SUNXI_SRAM is not set # CONFIG_SOC_TI is not set # CONFIG_PM_DEVFREQ is not set CONFIG_EXTCON=m @@ -3905,7 +4016,7 @@ CONFIG_EXTCON_ARIZONA=m # CONFIG_MEMORY is not set CONFIG_IIO=m CONFIG_IIO_BUFFER=y -CONFIG_IIO_BUFFER_CB=y +CONFIG_IIO_BUFFER_CB=m CONFIG_IIO_KFIFO_BUF=m # CONFIG_IIO_TRIGGER is not set @@ -3916,10 +4027,12 @@ CONFIG_IIO_KFIFO_BUF=m # CONFIG_BMC150_ACCEL is not set # CONFIG_IIO_ST_ACCEL_3AXIS is not set # CONFIG_KXSD9 is not set -# CONFIG_MMA8452 is not set # CONFIG_KXCJK1013 is not set +# CONFIG_MMA8452 is not set # CONFIG_MMA9551 is not set # CONFIG_MMA9553 is not set +# CONFIG_MXC4005 is not set +# CONFIG_STK8312 is not set # # Analog to digital converters @@ -3934,6 +4047,7 @@ CONFIG_IIO_KFIFO_BUF=m # CONFIG_AD7923 is not set # CONFIG_AD799X is not set # CONFIG_CC10001_ADC is not set +# CONFIG_HI8435 is not set # CONFIG_MAX1027 is not set # CONFIG_MAX1363 is not set # CONFIG_MCP320X is not set @@ -3948,6 +4062,11 @@ CONFIG_IIO_KFIFO_BUF=m # # CONFIG_AD8366 is not set +# +# Chemical Sensors +# +# CONFIG_VZ89X is not set + # # Hid Sensor IIO Common # @@ -3973,6 +4092,7 @@ CONFIG_IIO_KFIFO_BUF=m # CONFIG_AD5764 is not set # CONFIG_AD5791 is not set # CONFIG_AD7303 is not set +# CONFIG_M62332 is not set # CONFIG_MAX517 is not set # CONFIG_MAX5821 is not set # CONFIG_MCP4725 is not set @@ -4008,6 +4128,8 @@ CONFIG_IIO_KFIFO_BUF=m # Humidity sensors # CONFIG_DHT11=m +# CONFIG_HDC100X is not set +# CONFIG_HTU21 is not set # CONFIG_SI7005 is not set # CONFIG_SI7020 is not set @@ -4025,6 +4147,8 @@ CONFIG_DHT11=m # CONFIG_ADJD_S311 is not set # CONFIG_AL3320A is not set # CONFIG_APDS9300 is not set +# CONFIG_APDS9960 is not set +# CONFIG_BH1750 is not set # CONFIG_CM32181 is not set # CONFIG_CM3232 is not set # CONFIG_CM3323 is not set @@ -4032,11 +4156,16 @@ CONFIG_DHT11=m # CONFIG_GP2AP020A00F is not set # CONFIG_ISL29125 is not set # CONFIG_JSA1212 is not set +# CONFIG_RPR0521 is not set # CONFIG_LTR501 is not set +# CONFIG_OPT3001 is not set +# CONFIG_PA12203001 is not set +# CONFIG_STK3310 is not set # CONFIG_TCS3414 is not set # CONFIG_TCS3472 is not set # CONFIG_SENSORS_TSL2563 is not set # CONFIG_TSL4531 is not set +# CONFIG_US5182D is not set # CONFIG_VCNL4000 is not set # @@ -4044,13 +4173,20 @@ CONFIG_DHT11=m # # CONFIG_AK8975 is not set # CONFIG_AK09911 is not set +# CONFIG_BMC150_MAGN is not set # CONFIG_MAG3110 is not set +# CONFIG_MMC35240 is not set # CONFIG_IIO_ST_MAGN_3AXIS is not set # # Inclinometer sensors # +# +# Digital potentiometers +# +# CONFIG_MCP4531 is not set + # # Pressure sensors # @@ -4058,6 +4194,7 @@ CONFIG_DHT11=m # CONFIG_MPL115 is not set # CONFIG_MPL3115 is not set # CONFIG_MS5611 is not set +# CONFIG_MS5637 is not set # CONFIG_IIO_ST_PRESS is not set # CONFIG_T5403 is not set @@ -4069,6 +4206,7 @@ CONFIG_DHT11=m # # Proximity sensors # +# CONFIG_LIDAR_LITE_V2 is not set # CONFIG_SX9500 is not set # @@ -4076,6 +4214,8 @@ CONFIG_DHT11=m # # CONFIG_MLX90614 is not set # CONFIG_TMP006 is not set +# CONFIG_TSYS01 is not set +# CONFIG_TSYS02D is not set CONFIG_PWM=y CONFIG_PWM_SYSFS=y CONFIG_PWM_BCM2835=m @@ -4090,14 +4230,32 @@ CONFIG_IRQCHIP=y # PHY Subsystem # # CONFIG_GENERIC_PHY is not set +# CONFIG_PHY_PXA_28NM_HSIC is not set +# CONFIG_PHY_PXA_28NM_USB2 is not set # CONFIG_BCM_KONA_USB2_PHY is not set # CONFIG_POWERCAP is not set # CONFIG_MCB is not set +# +# Performance monitor support +# +CONFIG_ARM_PMU=y +# CONFIG_RAS is not set + # # Android # # CONFIG_ANDROID is not set +# CONFIG_NVMEM is not set +# CONFIG_STM is not set +# CONFIG_STM_DUMMY is not set +# CONFIG_STM_SOURCE_CONSOLE is not set +# CONFIG_INTEL_TH is not set + +# +# FPGA Configuration Support +# +# CONFIG_FPGA is not set # # Firmware Drivers @@ -4112,7 +4270,7 @@ CONFIG_DCACHE_WORD_ACCESS=y # CONFIG_EXT2_FS is not set # CONFIG_EXT3_FS is not set CONFIG_EXT4_FS=y -CONFIG_EXT4_USE_FOR_EXT23=y +CONFIG_EXT4_USE_FOR_EXT2=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y # CONFIG_EXT4_ENCRYPTION is not set @@ -4158,6 +4316,7 @@ 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_F2FS_FS_ENCRYPTION is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y CONFIG_FILE_LOCKING=y @@ -4217,6 +4376,7 @@ CONFIG_NTFS_RW=y CONFIG_PROC_FS=y CONFIG_PROC_SYSCTL=y CONFIG_PROC_PAGE_MONITOR=y +# CONFIG_PROC_CHILDREN is not set CONFIG_KERNFS=y CONFIG_SYSFS=y CONFIG_TMPFS=y @@ -4388,6 +4548,7 @@ CONFIG_FRAME_WARN=1024 CONFIG_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set # CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_SECTION_MISMATCH_WARN_ONLY=y # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 @@ -4421,6 +4582,7 @@ CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 CONFIG_PANIC_ON_OOPS_VALUE=0 CONFIG_PANIC_TIMEOUT=0 CONFIG_SCHED_DEBUG=y +CONFIG_SCHED_INFO=y CONFIG_SCHEDSTATS=y # CONFIG_SCHED_STACK_END_CHECK is not set # CONFIG_DEBUG_TIMEKEEPING is not set @@ -4457,8 +4619,8 @@ CONFIG_DEBUG_BUGVERBOSE=y # CONFIG_TORTURE_TEST is not set # CONFIG_RCU_TORTURE_TEST is not set CONFIG_RCU_CPU_STALL_TIMEOUT=21 -# CONFIG_RCU_CPU_STALL_INFO is not set # CONFIG_RCU_TRACE is not set +# CONFIG_RCU_EQS_DEBUG is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set # CONFIG_NOTIFIER_ERROR_INJECTION is not set # CONFIG_FAULT_INJECTION is not set @@ -4491,6 +4653,7 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_TRACEPOINT_BENCHMARK is not set # CONFIG_RING_BUFFER_BENCHMARK is not set # CONFIG_RING_BUFFER_STARTUP_TEST is not set +CONFIG_TRACING_EVENTS_GPIO=y # # Runtime Testing @@ -4507,6 +4670,7 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_TEST_HEXDUMP is not set # CONFIG_TEST_STRING_HELPERS is not set # CONFIG_TEST_KSTRTOX is not set +# CONFIG_TEST_PRINTF is not set # CONFIG_TEST_RHASHTABLE is not set # CONFIG_DMA_API_DEBUG is not set # CONFIG_TEST_LKM is not set @@ -4515,6 +4679,7 @@ CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_TEST_FIRMWARE is not set # CONFIG_TEST_UDELAY is not set # CONFIG_MEMTEST is not set +# CONFIG_TEST_STATIC_KEYS is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y CONFIG_KGDB=y @@ -4570,13 +4735,18 @@ CONFIG_CRYPTO_HASH=y CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_RNG=m CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_RNG_DEFAULT=m CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_AKCIPHER2=y +CONFIG_CRYPTO_AKCIPHER=m +CONFIG_CRYPTO_RSA=m CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y CONFIG_CRYPTO_USER=m CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y CONFIG_CRYPTO_GF128MUL=m CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_NULL2=y # CONFIG_CRYPTO_PCRYPT is not set CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_CRYPTD=m @@ -4590,7 +4760,9 @@ CONFIG_CRYPTO_ABLK_HELPER=m # CONFIG_CRYPTO_CCM=m CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_CHACHA20POLY1305=m CONFIG_CRYPTO_SEQIV=m +CONFIG_CRYPTO_ECHAINIV=m # # Block modes @@ -4602,6 +4774,7 @@ CONFIG_CRYPTO_ECB=m # CONFIG_CRYPTO_LRW is not set # CONFIG_CRYPTO_PCBC is not set CONFIG_CRYPTO_XTS=m +CONFIG_CRYPTO_KEYWRAP=m # # Hash modes @@ -4618,6 +4791,7 @@ CONFIG_CRYPTO_CRC32C=y # CONFIG_CRYPTO_CRC32 is not set # CONFIG_CRYPTO_CRCT10DIF is not set CONFIG_CRYPTO_GHASH=m +CONFIG_CRYPTO_POLY1305=m CONFIG_CRYPTO_MD4=m CONFIG_CRYPTO_MD5=m CONFIG_CRYPTO_MICHAEL_MIC=m @@ -4646,6 +4820,7 @@ CONFIG_CRYPTO_DES=y # CONFIG_CRYPTO_FCRYPT is not set # CONFIG_CRYPTO_KHAZAD is not set # CONFIG_CRYPTO_SALSA20 is not set +CONFIG_CRYPTO_CHACHA20=m # CONFIG_CRYPTO_SEED is not set # CONFIG_CRYPTO_SERPENT is not set # CONFIG_CRYPTO_TEA is not set @@ -4657,6 +4832,7 @@ CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_DEFLATE=m # CONFIG_CRYPTO_ZLIB is not set # CONFIG_CRYPTO_LZO is not set +# CONFIG_CRYPTO_842 is not set # CONFIG_CRYPTO_LZ4 is not set # CONFIG_CRYPTO_LZ4HC is not set @@ -4664,20 +4840,31 @@ CONFIG_CRYPTO_DEFLATE=m # Random Number Generation # # CONFIG_CRYPTO_ANSI_CPRNG is not set -# CONFIG_CRYPTO_DRBG_MENU is not set +CONFIG_CRYPTO_DRBG_MENU=m +CONFIG_CRYPTO_DRBG_HMAC=y +# CONFIG_CRYPTO_DRBG_HASH is not set +# CONFIG_CRYPTO_DRBG_CTR is not set +CONFIG_CRYPTO_DRBG=m +CONFIG_CRYPTO_JITTERENTROPY=m CONFIG_CRYPTO_USER_API=m CONFIG_CRYPTO_USER_API_HASH=m CONFIG_CRYPTO_USER_API_SKCIPHER=m CONFIG_CRYPTO_USER_API_RNG=m +CONFIG_CRYPTO_USER_API_AEAD=m # CONFIG_CRYPTO_HW is not set # CONFIG_ASYMMETRIC_KEY_TYPE is not set + +# +# Certificates for signature checking +# +# CONFIG_SYSTEM_TRUSTED_KEYRING 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_SHA512_ARM=m CONFIG_CRYPTO_AES_ARM=m CONFIG_CRYPTO_AES_ARM_BS=m # CONFIG_CRYPTO_AES_ARM_CE is not set @@ -4690,6 +4877,7 @@ CONFIG_CRYPTO_AES_ARM_BS=m CONFIG_RAID6_PQ=m CONFIG_BITREVERSE=y CONFIG_HAVE_ARCH_BITREVERSE=y +CONFIG_RATIONAL=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_NET_UTILS=y @@ -4741,14 +4929,16 @@ CONFIG_DQL=y CONFIG_NLATTR=y CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y CONFIG_LRU_CACHE=m -CONFIG_AVERAGE=y +CONFIG_CLZ_TAB=y # CONFIG_CORDIC is not set # CONFIG_DDR is not set +CONFIG_MPILIB=m CONFIG_LIBFDT=y CONFIG_OID_REGISTRY=y CONFIG_FONT_SUPPORT=m # CONFIG_FONTS is not set CONFIG_FONT_8x8=y CONFIG_FONT_8x16=y +# CONFIG_SG_SPLIT is not set # CONFIG_ARCH_HAS_SG_CHAIN is not set # CONFIG_VIRTUALIZATION is not set diff --git a/main/linux-rpi/rotary-encoder-fix.patch b/main/linux-rpi/rotary-encoder-fix.patch index 3d599f3d0b..7e08ba6fbe 100644 --- a/main/linux-rpi/rotary-encoder-fix.patch +++ b/main/linux-rpi/rotary-encoder-fix.patch @@ -1,380 +1,3 @@ -commit 47ec6e5a5f57f96d7d382e2d9f8dc5a5bdb45259 -Author: Sylvain Rochet -Date: Tue Oct 13 23:24:36 2015 -0700 - - Input: rotary_encoder - add wake up support - - This patch adds wake up support to GPIO rotary encoders. - - Signed-off-by: Sylvain Rochet - Reviewed-by: Johan Hovold - Signed-off-by: Dmitry Torokhov - -diff --git a/Documentation/devicetree/bindings/input/rotary-encoder.txt b/Documentation/devicetree/bindings/input/rotary-encoder.txt -index 3315495..891ddba 100644 ---- a/Documentation/devicetree/bindings/input/rotary-encoder.txt -+++ b/Documentation/devicetree/bindings/input/rotary-encoder.txt -@@ -15,6 +15,7 @@ Optional properties: - - rotary-encoder,rollover: Automatic rollove when the rotary value becomes - greater than the specified steps or smaller than 0. For absolute axis only. - - rotary-encoder,half-period: Makes the driver work on half-period mode. -+- wakeup-source: Boolean, rotary encoder can wake up the system. - - See Documentation/input/rotary-encoder.txt for more information. - -diff --git a/Documentation/input/rotary-encoder.txt b/Documentation/input/rotary-encoder.txt -index 5737e35..bddbee1 100644 ---- a/Documentation/input/rotary-encoder.txt -+++ b/Documentation/input/rotary-encoder.txt -@@ -109,6 +109,7 @@ static struct rotary_encoder_platform_data my_rotary_encoder_info = { - .inverted_a = 0, - .inverted_b = 0, - .half_period = false, -+ .wakeup_source = false, - }; - - static struct platform_device rotary_encoder_device = { -diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c -index f27f81e..d166554 100644 ---- a/drivers/input/misc/rotary_encoder.c -+++ b/drivers/input/misc/rotary_encoder.c -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - - #define DRV_NAME "rotary-encoder" - -@@ -180,6 +181,8 @@ static struct rotary_encoder_platform_data *rotary_encoder_parse_dt(struct devic - "rotary-encoder,rollover", NULL); - pdata->half_period = !!of_get_property(np, - "rotary-encoder,half-period", NULL); -+ pdata->wakeup_source = !!of_get_property(np, -+ "wakeup-source", NULL); - - return pdata; - } -@@ -280,6 +283,8 @@ static int rotary_encoder_probe(struct platform_device *pdev) - goto exit_free_irq_b; - } - -+ device_init_wakeup(&pdev->dev, pdata->wakeup_source); -+ - platform_set_drvdata(pdev, encoder); - - return 0; -@@ -306,6 +311,8 @@ static int rotary_encoder_remove(struct platform_device *pdev) - struct rotary_encoder *encoder = platform_get_drvdata(pdev); - const struct rotary_encoder_platform_data *pdata = encoder->pdata; - -+ device_init_wakeup(&pdev->dev, false); -+ - free_irq(encoder->irq_a, encoder); - free_irq(encoder->irq_b, encoder); - gpio_free(pdata->gpio_a); -@@ -320,11 +327,41 @@ static int rotary_encoder_remove(struct platform_device *pdev) - return 0; - } - -+#ifdef CONFIG_PM_SLEEP -+static int rotary_encoder_suspend(struct device *dev) -+{ -+ struct rotary_encoder *encoder = dev_get_drvdata(dev); -+ -+ if (device_may_wakeup(dev)) { -+ enable_irq_wake(encoder->irq_a); -+ enable_irq_wake(encoder->irq_b); -+ } -+ -+ return 0; -+} -+ -+static int rotary_encoder_resume(struct device *dev) -+{ -+ struct rotary_encoder *encoder = dev_get_drvdata(dev); -+ -+ if (device_may_wakeup(dev)) { -+ disable_irq_wake(encoder->irq_a); -+ disable_irq_wake(encoder->irq_b); -+ } -+ -+ return 0; -+} -+#endif -+ -+static SIMPLE_DEV_PM_OPS(rotary_encoder_pm_ops, -+ rotary_encoder_suspend, rotary_encoder_resume); -+ - static struct platform_driver rotary_encoder_driver = { - .probe = rotary_encoder_probe, - .remove = rotary_encoder_remove, - .driver = { - .name = DRV_NAME, -+ .pm = &rotary_encoder_pm_ops, - .of_match_table = of_match_ptr(rotary_encoder_of_match), - } - }; -diff --git a/include/linux/rotary_encoder.h b/include/linux/rotary_encoder.h -index 3f594dc..b33f2d2 100644 ---- a/include/linux/rotary_encoder.h -+++ b/include/linux/rotary_encoder.h -@@ -11,6 +11,7 @@ struct rotary_encoder_platform_data { - bool relative_axis; - bool rollover; - bool half_period; -+ bool wakeup_source; - }; - - #endif /* __ROTARY_ENCODER_H__ */ - -commit 648b15cb79e90d80f7b53d0184bdb14132a03754 -Author: Ben Gamari -Date: Tue Oct 13 23:37:28 2015 -0700 - - Input: rotary-encoder - use of_property_read_bool - - This commit makes uses of_property_read_bool() to read - boolean properties. This is just cosmetic cleanup. - - Signed-off-by: Ben Gamari - Signed-off-by: Dmitry Torokhov - -diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c -index d166554..962f9e8 100644 ---- a/drivers/input/misc/rotary_encoder.c -+++ b/drivers/input/misc/rotary_encoder.c -@@ -175,14 +175,12 @@ static struct rotary_encoder_platform_data *rotary_encoder_parse_dt(struct devic - pdata->gpio_b = of_get_gpio_flags(np, 1, &flags); - pdata->inverted_b = flags & OF_GPIO_ACTIVE_LOW; - -- pdata->relative_axis = !!of_get_property(np, -- "rotary-encoder,relative-axis", NULL); -- pdata->rollover = !!of_get_property(np, -- "rotary-encoder,rollover", NULL); -- pdata->half_period = !!of_get_property(np, -- "rotary-encoder,half-period", NULL); -- pdata->wakeup_source = !!of_get_property(np, -- "wakeup-source", NULL); -+ pdata->relative_axis = -+ of_property_read_bool(np, "rotary-encoder,relative-axis"); -+ pdata->rollover = of_property_read_bool(np, "rotary-encoder,rollover"); -+ pdata->half_period = -+ of_property_read_bool(np, "rotary-encoder,half-period"); -+ pdata->wakeup_source = of_property_read_bool(np, "wakeup-source"); - - return pdata; - } - -commit 3a341a4c30d427fd05617087db1564a595f65093 -Author: Ezequiel Garcia -Date: Tue Oct 13 23:39:50 2015 -0700 - - Input: rotary-encoder - add support for quarter-period mode - - Some encoders have both outputs low in stable states, others also have - a stable state with both outputs high (half-period mode) and some have - a stable state in all steps (quarter-period mode). The driver used to - support the former states and with this change it can also support the - later. - - This commit also deprecates the 'half-period' property and introduces - a new property 'steps-per-period'. This property specifies the - number of steps (stable states) produced by the rotary encoder - for each GPIO period. - - Signed-off-by: Guido Martínez - Signed-off-by: Ezequiel Garcia - Acked-by: Rob Herring - Signed-off-by: Dmitry Torokhov - -diff --git a/Documentation/devicetree/bindings/input/rotary-encoder.txt b/Documentation/devicetree/bindings/input/rotary-encoder.txt -index 891ddba..de99cbb 100644 ---- a/Documentation/devicetree/bindings/input/rotary-encoder.txt -+++ b/Documentation/devicetree/bindings/input/rotary-encoder.txt -@@ -14,9 +14,18 @@ Optional properties: - device, hence no steps need to be passed. - - rotary-encoder,rollover: Automatic rollove when the rotary value becomes - greater than the specified steps or smaller than 0. For absolute axis only. --- rotary-encoder,half-period: Makes the driver work on half-period mode. -+- rotary-encoder,steps-per-period: Number of steps (stable states) per period. -+ The values have the following meaning: -+ 1: Full-period mode (default) -+ 2: Half-period mode -+ 4: Quarter-period mode - - wakeup-source: Boolean, rotary encoder can wake up the system. - -+Deprecated properties: -+- rotary-encoder,half-period: Makes the driver work on half-period mode. -+ This property is deprecated. Instead, a 'steps-per-period ' value should -+ be used, such as "rotary-encoder,steps-per-period = <2>". -+ - See Documentation/input/rotary-encoder.txt for more information. - - Example: -diff --git a/Documentation/input/rotary-encoder.txt b/Documentation/input/rotary-encoder.txt -index bddbee1..46a74f0 100644 ---- a/Documentation/input/rotary-encoder.txt -+++ b/Documentation/input/rotary-encoder.txt -@@ -9,8 +9,9 @@ peripherals with two wires. The outputs are phase-shifted by 90 degrees - and by triggering on falling and rising edges, the turn direction can - be determined. - --Some encoders have both outputs low in stable states, whereas others also have --a stable state with both outputs high (half-period mode). -+Some encoders have both outputs low in stable states, others also have -+a stable state with both outputs high (half-period mode) and some have -+a stable state in all steps (quarter-period mode). - - The phase diagram of these two outputs look like this: - -@@ -32,6 +33,9 @@ The phase diagram of these two outputs look like this: - |<-->| - one step (half-period mode) - -+ |<>| -+ one step (quarter-period mode) -+ - For more information, please see - https://en.wikipedia.org/wiki/Rotary_encoder - -diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c -index 962f9e8..8aee719 100644 ---- a/drivers/input/misc/rotary_encoder.c -+++ b/drivers/input/misc/rotary_encoder.c -@@ -143,6 +143,55 @@ static irqreturn_t rotary_encoder_half_period_irq(int irq, void *dev_id) - return IRQ_HANDLED; - } - -+static irqreturn_t rotary_encoder_quarter_period_irq(int irq, void *dev_id) -+{ -+ struct rotary_encoder *encoder = dev_id; -+ unsigned char sum; -+ int state; -+ -+ state = rotary_encoder_get_state(encoder->pdata); -+ -+ /* -+ * We encode the previous and the current state using a byte. -+ * The previous state in the MSB nibble, the current state in the LSB -+ * nibble. Then use a table to decide the direction of the turn. -+ */ -+ sum = (encoder->last_stable << 4) + state; -+ switch (sum) { -+ case 0x31: -+ case 0x10: -+ case 0x02: -+ case 0x23: -+ encoder->dir = 0; /* clockwise */ -+ break; -+ -+ case 0x13: -+ case 0x01: -+ case 0x20: -+ case 0x32: -+ encoder->dir = 1; /* counter-clockwise */ -+ break; -+ -+ default: -+ /* -+ * Ignore all other values. This covers the case when the -+ * state didn't change (a spurious interrupt) and the -+ * cases where the state changed by two steps, making it -+ * impossible to tell the direction. -+ * -+ * In either case, don't report any event and save the -+ * state for later. -+ */ -+ goto out; -+ } -+ -+ rotary_encoder_report_event(encoder); -+ -+out: -+ encoder->last_stable = state; -+ return IRQ_HANDLED; -+} -+ - #ifdef CONFIG_OF - static const struct of_device_id rotary_encoder_of_match[] = { - { .compatible = "rotary-encoder", }, -@@ -157,6 +206,7 @@ static struct rotary_encoder_platform_data *rotary_encoder_parse_dt(struct devic - struct device_node *np = dev->of_node; - struct rotary_encoder_platform_data *pdata; - enum of_gpio_flags flags; -+ int error; - - if (!of_id || !np) - return NULL; -@@ -178,8 +228,23 @@ static struct rotary_encoder_platform_data *rotary_encoder_parse_dt(struct devic - pdata->relative_axis = - of_property_read_bool(np, "rotary-encoder,relative-axis"); - pdata->rollover = of_property_read_bool(np, "rotary-encoder,rollover"); -- pdata->half_period = -- of_property_read_bool(np, "rotary-encoder,half-period"); -+ -+ error = of_property_read_u32(np, "rotary-encoder,steps-per-period", -+ &pdata->steps_per_period); -+ if (error) { -+ /* -+ * The 'half-period' property has been deprecated, you must use -+ * 'steps-per-period' and set an appropriate value, but we still -+ * need to parse it to maintain compatibility. -+ */ -+ if (of_property_read_bool(np, "rotary-encoder,half-period")) { -+ pdata->steps_per_period = 2; -+ } else { -+ /* Fallback to one step per period behavior */ -+ pdata->steps_per_period = 1; -+ } -+ } -+ - pdata->wakeup_source = of_property_read_bool(np, "wakeup-source"); - - return pdata; -@@ -251,12 +316,23 @@ static int rotary_encoder_probe(struct platform_device *pdev) - encoder->irq_a = gpio_to_irq(pdata->gpio_a); - encoder->irq_b = gpio_to_irq(pdata->gpio_b); - -- /* request the IRQs */ -- if (pdata->half_period) { -+ switch (pdata->steps_per_period) { -+ case 4: -+ handler = &rotary_encoder_quarter_period_irq; -+ encoder->last_stable = rotary_encoder_get_state(pdata); -+ break; -+ case 2: - handler = &rotary_encoder_half_period_irq; - encoder->last_stable = rotary_encoder_get_state(pdata); -- } else { -+ break; -+ case 1: - handler = &rotary_encoder_irq; -+ break; -+ default: -+ dev_err(dev, "'%d' is not a valid steps-per-period value\n", -+ pdata->steps_per_period); -+ err = -EINVAL; -+ goto exit_free_gpio_b; - } - - err = request_irq(encoder->irq_a, handler, -diff --git a/include/linux/rotary_encoder.h b/include/linux/rotary_encoder.h -index b33f2d2..fe3dc64 100644 ---- a/include/linux/rotary_encoder.h -+++ b/include/linux/rotary_encoder.h -@@ -8,9 +8,9 @@ struct rotary_encoder_platform_data { - unsigned int gpio_b; - unsigned int inverted_a; - unsigned int inverted_b; -+ unsigned int steps_per_period; - bool relative_axis; - bool rollover; -- bool half_period; - bool wakeup_source; - }; - - commit 0f940be407b87ca629fa2f3085f613483a075b16 Author: Timo Teräs Date: Fri Jan 15 15:24:14 2016 +0200 diff --git a/main/linux-rpi/rpi-cirrus-4.1.y-20151218.patch b/main/linux-rpi/rpi-cirrus-4.1.y-20151218.patch deleted file mode 100644 index 06ab4c3ede..0000000000 --- a/main/linux-rpi/rpi-cirrus-4.1.y-20151218.patch +++ /dev/null @@ -1,1933 +0,0 @@ -diff --git a/Documentation/devicetree/bindings/mfd/arizona.txt b/Documentation/devicetree/bindings/mfd/arizona.txt -index 7665aa9..ec7979e 100644 ---- a/Documentation/devicetree/bindings/mfd/arizona.txt -+++ b/Documentation/devicetree/bindings/mfd/arizona.txt -@@ -42,6 +42,23 @@ Optional properties: - - - wlf,reset : GPIO specifier for the GPIO controlling /RESET - - wlf,ldoena : GPIO specifier for the GPIO controlling LDOENA -+ - wlf,clk32k-src : set input source for codec 32kHz clock. -+ 0 = default, 1 = MCLK1, 2 = MCLK2, 3 = None -+ -+ - wlf,micd-ranges : Microphone detection level and key configuration, this -+ field can be of variable length but should always be a multiple of 2 cells -+ long, each two cell group represents one button configuration -+ The first cell is the maximum impedance for this button in ohms -+ The second cell the key that should be reported to the input layer -+ - wlf,micd-configs : Headset polarity configurations, the field can be of -+ variable length but should always be a multiple of 3 cells long, each two -+ cell group represents one polarity configration -+ The first cell is the accessory detection source as per the ACCDET_SRC bits -+ in the ACCESSORY_DETECT_MODE_1 register -+ The second cell represents the MICBIAS to be used as per the MICD_BIAS_SRC -+ bits in the MIC_DETECT_1 register -+ The third cell represents the value of the micd-pol-gpio pin, a non-zero -+ value indicates this should be on - - - wlf,gpio-defaults : A list of GPIO configuration register values. Defines - for the appropriate values can found in . If -@@ -49,6 +66,10 @@ Optional properties: - a value that is out of range for a 16 bit register then the chip default - will be used. If present exactly five values must be specified. - -+ - wlf,dmic-ref : DMIC reference for each input, must contain four cells if -+ specified. 0 indicates MICVDD and is the default, 1,2,3 indicate the -+ respective MICBIAS. -+ - - wlf,inmode : A list of INn_MODE register values, where n is the number - of input signals. Valid values are 0 (Differential), 1 (Single-ended) and - 2 (Digital Microphone). If absent, INn_MODE registers set to 0 by default. -@@ -85,6 +106,19 @@ codec: wm5102@1a { - gpio-controller; - #gpio-cells = <2>; - -+ wlf,micd-ranges = < -+ 11 0x100 -+ 28 0x101 -+ 54 0x102 -+ 100 0x103 -+ 186 0x104 -+ 430 0x105 -+ >; -+ wlf,micd-configs = < -+ 0x1 1 0 -+ 0x0 2 1 -+ >; -+ - wlf,gpio-defaults = < - ARIZONA_GP_FN_TXLRCLK - ARIZONA_GP_DEFAULT -@@ -92,4 +126,6 @@ codec: wm5102@1a { - ARIZONA_GP_DEFAULT - ARIZONA_GP_DEFAULT - >; -+ -+ wlf,dmic-ref = <0 0 1 0>; - }; -diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile -index 1a60e9c..ab63db7 100644 ---- a/arch/arm/boot/dts/overlays/Makefile -+++ b/arch/arm/boot/dts/overlays/Makefile -@@ -44,6 +44,7 @@ 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-backlight-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..3cb63a5 ---- /dev/null -+++ b/arch/arm/boot/dts/overlays/rpi-cirrus-wm5102-overlay.dts -@@ -0,0 +1,138 @@ -+// 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 8>; -+ brcm,function = <1 1 0 1>; -+ }; -+ }; -+ }; -+ -+ 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; -+ }; -+ }; -+ }; -+ -+ 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@3b { -+ #sound-dai-cells = <0>; -+ compatible = "wlf,wm8804"; -+ reg = <0x3b>; -+ status = "okay"; -+ PVDD-supply = <&ldo0>; -+ DVDD-supply = <&ldo0>; -+ wlf,reset-gpio = <&gpio 8 0>; -+ }; -+ }; -+ }; -+}; -diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig -index d06b9c8..37c18ac 100644 ---- a/arch/arm/configs/bcm2709_defconfig -+++ b/arch/arm/configs/bcm2709_defconfig -@@ -641,6 +641,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 -@@ -847,6 +850,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 e04f122..8c8e512 100644 ---- a/arch/arm/configs/bcmrpi_defconfig -+++ b/arch/arm/configs/bcmrpi_defconfig -@@ -634,6 +634,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 -@@ -840,6 +843,7 @@ CONFIG_SND_BCM2708_SOC_RPI_DAC=m - CONFIG_SND_BCM2708_SOC_RPI_PROTO=m - CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC=m - CONFIG_SND_BCM2708_SOC_RASPIDAC3=m -+CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP=m - CONFIG_SND_SOC_ADAU1701=m - CONFIG_SND_SOC_WM8804_I2C=m - CONFIG_SND_SIMPLE_CARD=m -diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c -index 1b9c3be..39b6698 100644 ---- a/arch/arm/mach-bcm2708/bcm2708.c -+++ b/arch/arm/mach-bcm2708/bcm2708.c -@@ -62,10 +62,17 @@ - #include "bcm2708.h" - #include "armctrl.h" - -+#include -+#include -+#include -+ - #ifdef CONFIG_BCM_VC_CMA - #include - #endif - -+#define GPIO_WM5102_IRQ 27 -+#define GPIO_WM5102_RST 17 -+#define GPIO_WM5102_LDOEN 22 - - /* Effectively we have an IOMMU (ARM<->VideoCore map) that is set up to - * give us IO access only to 64Mbytes of physical memory (26 bits). We could -@@ -587,7 +594,9 @@ static struct spi_board_info bcm2708_spi_devices[] = { - .bus_num = 0, - .chip_select = 0, - .mode = SPI_MODE_0, -- }, { -+ }, -+#if !defined (CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP_MODULE) && !defined (CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP) -+ { - .modalias = "spidev", - .max_speed_hz = 500000, - .bus_num = 0, -@@ -595,6 +604,7 @@ static struct spi_board_info bcm2708_spi_devices[] = { - .mode = SPI_MODE_0, - } - #endif -+#endif - }; - #endif - -@@ -663,6 +673,123 @@ static struct platform_device bcm2708_i2s_device = { - }; - #endif - -+#if defined(CONFIG_REGULATOR_FIXED_VOLTAGE_MODULE) || defined(CONFIG_REGULATOR_FIXED_VOLTAGE) -+static struct regulator_consumer_supply dc1v8_consumers[] = { -+ REGULATOR_SUPPLY("LDOVDD", "spi0.1"), -+ REGULATOR_SUPPLY("AVDD", "spi0.1"), -+ REGULATOR_SUPPLY("DBVDD1", "spi0.1"), -+ REGULATOR_SUPPLY("CPVDD", "spi0.1"), -+ REGULATOR_SUPPLY("DBVDD2", "spi0.1"), -+ REGULATOR_SUPPLY("DBVDD3", "spi0.1"), -+ REGULATOR_SUPPLY("PVDD", "1-003a"), -+ REGULATOR_SUPPLY("DVDD", "1-003a"), -+}; -+ -+static struct regulator_init_data dc1v8_data = { -+ .constraints = { -+ .always_on = 1, -+ }, -+ .num_consumer_supplies = ARRAY_SIZE(dc1v8_consumers), -+ .consumer_supplies = dc1v8_consumers, -+}; -+ -+static struct fixed_voltage_config dc1v8vdd_pdata = { -+ .supply_name = "DC_1V8", -+ .microvolts = 1800000, -+ .init_data = &dc1v8_data, -+ .gpio = -1, -+}; -+ -+static struct platform_device dc1v8_device = { -+ .name = "reg-fixed-voltage", -+ .id = 0, -+ .dev = { -+ .platform_data = &dc1v8vdd_pdata, -+ }, -+}; -+ -+static struct regulator_consumer_supply dc5v_consumers[] = { -+ REGULATOR_SUPPLY("SPKVDDL", "spi0.1"), -+ REGULATOR_SUPPLY("SPKVDDR", "spi0.1"), -+}; -+ -+static struct regulator_init_data dc5v_data = { -+ .constraints = { -+ .always_on = 1, -+ }, -+ .num_consumer_supplies = ARRAY_SIZE(dc5v_consumers), -+ .consumer_supplies = dc5v_consumers, -+}; -+ -+static struct fixed_voltage_config dc5vvdd_pdata = { -+ .supply_name = "DC_5V", -+ .microvolts = 5000000, -+ .init_data = &dc5v_data, -+ .gpio = -1, -+}; -+ -+static struct platform_device dc5v_device = { -+ .name = "reg-fixed-voltage", -+ .id = 1, -+ .dev = { -+ .platform_data = &dc5vvdd_pdata, -+ }, -+}; -+#endif -+ -+#if defined(CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP_MODULE) || defined(CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP) -+#include -+ -+static struct platform_device snd_rpi_wsp_device = { -+ .name = "snd-rpi-wsp", -+ .id = 0, -+ .num_resources = 0, -+}; -+ -+static struct arizona_micd_config wm5102_micd[] = { -+ { 0, 1, 0 }, -+}; -+ -+static struct arizona_pdata snd_rpi_wsp_spi_platform_data = { -+ .reset = GPIO_WM5102_RST, -+ .ldoena = GPIO_WM5102_LDOEN, -+ .irq_flags = IRQF_TRIGGER_RISING, -+ .gpio_defaults = { -+ [2] = 0x04, /* OPCLK */ -+ [3] = 0x3d, /* ASYNC OPCLK */ -+ }, -+ .micd_configs = wm5102_micd, -+ .num_micd_configs = ARRAY_SIZE(wm5102_micd), -+ .dmic_ref = { -+ [1] = ARIZONA_DMIC_MICBIAS2, -+ }, -+ .inmode = { -+ [1] = ARIZONA_INMODE_DMIC, -+ [2] = ARIZONA_INMODE_SE, -+ }, -+ .clk32k_src = ARIZONA_32KZ_NONE, -+ .irq_gpio = GPIO_WM5102_IRQ, -+}; -+ -+static struct spi_board_info __initdata snd_rpi_wsp_spi_devices[] = { -+ { -+ .modalias = "wm5102", -+ .platform_data = &snd_rpi_wsp_spi_platform_data, -+ .max_speed_hz = 500000, -+ .bus_num = 0, -+ .chip_select = 1, -+ .mode = SPI_MODE_0, -+ } -+}; -+ -+static struct i2c_board_info __initdata snd_rpi_wsp_i2c_devices[] = { -+ { -+ I2C_BOARD_INFO("wm8804", 0x3A), -+ }, -+}; -+ -+#endif -+ - #if defined(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC) || defined(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC_MODULE) - static struct platform_device snd_hifiberry_dac_device = { - .name = "snd-hifiberry-dac", -@@ -772,6 +899,9 @@ int __init bcm_register_device(struct platform_device *pdev) - #define i2c_register_board_info_dt(busnum, info, n) \ - if (!use_dt) i2c_register_board_info(busnum, info, n) - -+#define spi_register_board_info_dt(info, n) \ -+ if (!use_dt) spi_register_board_info(info, n) -+ - int calc_rsts(int partition) - { - return PM_PASSWORD | -@@ -965,6 +1095,18 @@ void __init bcm2708_init(void) - i2c_register_board_info_dt(1, snd_pcm512x_i2c_devices, ARRAY_SIZE(snd_pcm512x_i2c_devices)); - #endif - -+#if defined(CONFIG_REGULATOR_FIXED_VOLTAGE_MODULE) || defined(CONFIG_REGULATOR_FIXED_VOLTAGE) -+ bcm_register_device_dt(&dc1v8_device); -+ bcm_register_device_dt(&dc5v_device); -+#endif -+ -+#if defined(CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP_MODULE) || defined(CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP) -+ bcm_register_device_dt(&snd_rpi_wsp_device); -+ spi_register_board_info_dt(snd_rpi_wsp_spi_devices, ARRAY_SIZE(snd_rpi_wsp_spi_devices)); -+ i2c_register_board_info_dt(1, snd_rpi_wsp_i2c_devices, -+ ARRAY_SIZE(snd_rpi_wsp_i2c_devices)); -+#endif -+ - if (!use_dt) { - for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { - struct amba_device *d = amba_devs[i]; -diff --git a/drivers/dma/bcm2708-dmaengine.c b/drivers/dma/bcm2708-dmaengine.c -index 85ce18b..abf8763 100644 ---- a/drivers/dma/bcm2708-dmaengine.c -+++ b/drivers/dma/bcm2708-dmaengine.c -@@ -421,7 +421,12 @@ struct bcm2835_desc { - #define BCM2835_DMA_CHAN(n) ((n) << 8) /* Base address */ - #define BCM2835_DMA_CHANIO(base, n) ((base) + BCM2835_DMA_CHAN(n)) - --#define MAX_LITE_TRANSFER 32768 -+/* -+ * Max length on a Lite channel is 65535 bytes. -+ * DMA handles byte-enables on SDRAM reads and writes even on 128-bit accesses, -+ * but byte-enables don't exist on peripheral addresses, so align to 32-bit. -+ */ -+#define MAX_LITE_TRANSFER (SZ_64K - 4) - #define MAX_NORMAL_TRANSFER 1073741824 - - static inline struct bcm2835_dmadev *to_bcm2835_dma_dev(struct dma_device *d) -@@ -710,7 +715,7 @@ static struct dma_async_tx_descriptor *bcm2835_dma_prep_dma_cyclic( - max_size = MAX_NORMAL_TRANSFER; - period_len = min(period_len, max_size); - -- d->frames = (buf_len-1) / period_len + 1; -+ d->frames = DIV_ROUND_UP(buf_len, period_len); - - /* Allocate memory for control blocks */ - d->control_block_size = d->frames * sizeof(struct bcm2835_dma_cb); -diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c -index 6523903..4211644 100644 ---- a/drivers/mfd/arizona-core.c -+++ b/drivers/mfd/arizona-core.c -@@ -16,6 +16,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -94,6 +95,91 @@ int arizona_clk32k_disable(struct arizona *arizona) - } - EXPORT_SYMBOL_GPL(arizona_clk32k_disable); - -+int arizona_dvfs_up(struct arizona *arizona, unsigned int flags) -+{ -+ unsigned int new_flags; -+ int ret = 0; -+ -+ mutex_lock(&arizona->subsys_max_lock); -+ -+ new_flags = arizona->subsys_max_rq | flags; -+ -+ if (arizona->subsys_max_rq != new_flags) { -+ switch (arizona->type) { -+ case WM5102: -+ case WM8997: -+ ret = regulator_set_voltage(arizona->dcvdd, -+ 1800000, 1800000); -+ if (ret != 0) { -+ dev_err(arizona->dev, -+ "Failed to set DCVDD (DVFS up): %d\n", -+ ret); -+ goto err; -+ } -+ -+ ret = regmap_update_bits(arizona->regmap, -+ ARIZONA_DYNAMIC_FREQUENCY_SCALING_1, -+ ARIZONA_SUBSYS_MAX_FREQ, 1); -+ if (ret != 0) { -+ dev_err(arizona->dev, -+ "Failed to enable subsys max: %d\n", -+ ret); -+ regulator_set_voltage(arizona->dcvdd, -+ 1200000, 1800000); -+ goto err; -+ } -+ break; -+ -+ default: -+ break; -+ } -+ -+ arizona->subsys_max_rq = new_flags; -+ } -+err: -+ mutex_unlock(&arizona->subsys_max_lock); -+ return ret; -+} -+EXPORT_SYMBOL_GPL(arizona_dvfs_up); -+ -+int arizona_dvfs_down(struct arizona *arizona, unsigned int flags) -+{ -+ int ret = 0; -+ -+ mutex_lock(&arizona->subsys_max_lock); -+ -+ arizona->subsys_max_rq &= ~flags; -+ -+ if (arizona->subsys_max_rq == 0) { -+ switch (arizona->type) { -+ case WM5102: -+ case WM8997: -+ ret = regmap_update_bits(arizona->regmap, -+ ARIZONA_DYNAMIC_FREQUENCY_SCALING_1, -+ ARIZONA_SUBSYS_MAX_FREQ, 0); -+ if (ret != 0) -+ dev_err(arizona->dev, -+ "Failed to disable subsys max: %d\n", -+ ret); -+ -+ ret = regulator_set_voltage(arizona->dcvdd, -+ 1200000, 1800000); -+ if (ret != 0) -+ dev_err(arizona->dev, -+ "Failed to set DCVDD (DVFS down): %d\n", -+ ret); -+ break; -+ -+ default: -+ break; -+ } -+ } -+ -+ mutex_unlock(&arizona->subsys_max_lock); -+ return ret; -+} -+EXPORT_SYMBOL_GPL(arizona_dvfs_down); -+ - static irqreturn_t arizona_clkgen_err(int irq, void *data) - { - struct arizona *arizona = data; -@@ -330,6 +416,20 @@ err_fll: - return err; - } - -+static int arizona_dcvdd_notify(struct notifier_block *nb, -+ unsigned long action, void *data) -+{ -+ struct arizona *arizona = container_of(nb, struct arizona, -+ dcvdd_notifier); -+ -+ dev_dbg(arizona->dev, "DCVDD notify %lx\n", action); -+ -+ if (action & REGULATOR_EVENT_DISABLE) -+ msleep(20); -+ -+ return NOTIFY_DONE; -+} -+ - #ifdef CONFIG_PM - static int arizona_runtime_resume(struct device *dev) - { -@@ -519,6 +619,154 @@ int arizona_of_get_named_gpio(struct arizona *arizona, const char *prop, - } - EXPORT_SYMBOL_GPL(arizona_of_get_named_gpio); - -+static int arizona_of_get_u32_num_groups(struct arizona *arizona, -+ const char *prop, -+ int group_size) -+{ -+ int len_prop; -+ int num_groups; -+ -+ if (!of_get_property(arizona->dev->of_node, prop, &len_prop)) -+ return -EINVAL; -+ -+ num_groups = len_prop / (group_size * sizeof(u32)); -+ -+ if (num_groups * group_size * sizeof(u32) != len_prop) { -+ dev_err(arizona->dev, -+ "DT property %s is malformed: %d\n", -+ prop, -EOVERFLOW); -+ return -EOVERFLOW; -+ } -+ -+ return num_groups; -+} -+ -+static int arizona_of_get_micd_ranges(struct arizona *arizona, -+ const char *prop) -+{ -+ int nranges; -+ int i, j; -+ int ret = 0; -+ u32 value; -+ struct arizona_micd_range *micd_ranges; -+ -+ nranges = arizona_of_get_u32_num_groups(arizona, prop, 2); -+ if (nranges < 0) -+ return nranges; -+ -+ micd_ranges = devm_kzalloc(arizona->dev, -+ nranges * sizeof(struct arizona_micd_range), -+ GFP_KERNEL); -+ -+ for (i = 0, j = 0; i < nranges; ++i) { -+ ret = of_property_read_u32_index(arizona->dev->of_node, -+ prop, j++, &value); -+ if (ret < 0) -+ goto error; -+ micd_ranges[i].max = value; -+ -+ ret = of_property_read_u32_index(arizona->dev->of_node, -+ prop, j++, &value); -+ if (ret < 0) -+ goto error; -+ micd_ranges[i].key = value; -+ } -+ -+ arizona->pdata.micd_ranges = micd_ranges; -+ arizona->pdata.num_micd_ranges = nranges; -+ -+ return ret; -+ -+error: -+ devm_kfree(arizona->dev, micd_ranges); -+ dev_err(arizona->dev, "DT property %s is malformed: %d\n", prop, ret); -+ return ret; -+} -+ -+static int arizona_of_get_micd_configs(struct arizona *arizona, -+ const char *prop) -+{ -+ int nconfigs; -+ int i, j; -+ int ret = 0; -+ u32 value; -+ struct arizona_micd_config *micd_configs; -+ -+ nconfigs = arizona_of_get_u32_num_groups(arizona, prop, 3); -+ if (nconfigs < 0) -+ return nconfigs; -+ -+ micd_configs = devm_kzalloc(arizona->dev, -+ nconfigs * -+ sizeof(struct arizona_micd_config), -+ GFP_KERNEL); -+ -+ for (i = 0, j = 0; i < nconfigs; ++i) { -+ ret = of_property_read_u32_index(arizona->dev->of_node, -+ prop, j++, &value); -+ if (ret < 0) -+ goto error; -+ micd_configs[i].src = value; -+ -+ ret = of_property_read_u32_index(arizona->dev->of_node, -+ prop, j++, &value); -+ if (ret < 0) -+ goto error; -+ micd_configs[i].bias = value; -+ -+ ret = of_property_read_u32_index(arizona->dev->of_node, -+ prop, j++, &value); -+ if (ret < 0) -+ goto error; -+ micd_configs[i].gpio = value; -+ } -+ -+ arizona->pdata.micd_configs = micd_configs; -+ arizona->pdata.num_micd_configs = nconfigs; -+ -+ return ret; -+ -+error: -+ devm_kfree(arizona->dev, micd_configs); -+ dev_err(arizona->dev, "DT property %s is malformed: %d\n", prop, ret); -+ return ret; -+} -+ -+static int arizona_of_read_u32_array(struct arizona *arizona, -+ const char *prop, bool mandatory, -+ u32 *data, size_t num) -+{ -+ int ret; -+ -+ ret = of_property_read_u32_array(arizona->dev->of_node, prop, -+ data, num); -+ -+ if (ret >= 0) -+ return 0; -+ -+ switch (ret) { -+ case -EINVAL: -+ if (mandatory) -+ dev_err(arizona->dev, -+ "Mandatory DT property %s is missing\n", -+ prop); -+ break; -+ default: -+ dev_err(arizona->dev, -+ "DT property %s is malformed: %d\n", -+ prop, ret); -+ } -+ -+ return ret; -+} -+ -+static int arizona_of_read_u32(struct arizona *arizona, -+ const char* prop, bool mandatory, -+ u32 *data) -+{ -+ return arizona_of_read_u32_array(arizona, prop, mandatory, data, 1); -+} -+ - static int arizona_of_get_core_pdata(struct arizona *arizona) - { - struct arizona_pdata *pdata = &arizona->pdata; -@@ -552,6 +800,15 @@ static int arizona_of_get_core_pdata(struct arizona *arizona) - ret); - } - -+ arizona_of_read_u32(arizona, "wlf,clk32k-src", false, -+ &pdata->clk32k_src); -+ -+ arizona_of_get_micd_ranges(arizona, "wlf,micd-ranges"); -+ arizona_of_get_micd_configs(arizona, "wlf,micd-configs"); -+ -+ arizona_of_read_u32_array(arizona, "wlf,dmic-ref", false, -+ pdata->dmic_ref, ARRAY_SIZE(pdata->dmic_ref)); -+ - of_property_for_each_u32(arizona->dev->of_node, "wlf,inmode", prop, - cur, val) { - if (count == ARRAY_SIZE(arizona->pdata.inmode)) -@@ -571,6 +828,9 @@ static int arizona_of_get_core_pdata(struct arizona *arizona) - count++; - } - -+ arizona_of_read_u32(arizona, "wlf,irq_gpio", false, -+ &pdata->irq_gpio); -+ - return 0; - } - -@@ -670,6 +930,7 @@ int arizona_dev_init(struct arizona *arizona) - - dev_set_drvdata(arizona->dev, arizona); - mutex_init(&arizona->clk_lock); -+ mutex_init(&arizona->subsys_max_lock); - - if (dev_get_platdata(arizona->dev)) - memcpy(&arizona->pdata, dev_get_platdata(arizona->dev), -@@ -726,6 +987,14 @@ int arizona_dev_init(struct arizona *arizona) - goto err_early; - } - -+ arizona->dcvdd_notifier.notifier_call = arizona_dcvdd_notify; -+ ret = regulator_register_notifier(arizona->dcvdd, -+ &arizona->dcvdd_notifier); -+ if (ret < 0) { -+ dev_err(dev, "Failed to register DCVDD notifier %d\n", ret); -+ goto err_dcvdd; -+ } -+ - if (arizona->pdata.reset) { - /* Start out with /RESET low to put the chip into reset */ - ret = gpio_request_one(arizona->pdata.reset, -@@ -733,16 +1002,19 @@ int arizona_dev_init(struct arizona *arizona) - "arizona /RESET"); - if (ret != 0) { - dev_err(dev, "Failed to request /RESET: %d\n", ret); -- goto err_dcvdd; -+ goto err_notifier; - } - } - -+ /* Ensure period of reset asserted before we apply the supplies */ -+ msleep(20); -+ - ret = regulator_bulk_enable(arizona->num_core_supplies, - arizona->core_supplies); - if (ret != 0) { - dev_err(dev, "Failed to enable core supplies: %d\n", - ret); -- goto err_dcvdd; -+ goto err_notifier; - } - - ret = regulator_enable(arizona->dcvdd); -@@ -1060,6 +1332,8 @@ err_reset: - err_enable: - regulator_bulk_disable(arizona->num_core_supplies, - arizona->core_supplies); -+err_notifier: -+ regulator_unregister_notifier(arizona->dcvdd, &arizona->dcvdd_notifier); - err_dcvdd: - regulator_put(arizona->dcvdd); - err_early: -@@ -1073,6 +1347,7 @@ int arizona_dev_exit(struct arizona *arizona) - pm_runtime_disable(arizona->dev); - - regulator_disable(arizona->dcvdd); -+ regulator_unregister_notifier(arizona->dcvdd, &arizona->dcvdd_notifier); - regulator_put(arizona->dcvdd); - - mfd_remove_devices(arizona->dev); -diff --git a/drivers/regulator/arizona-ldo1.c b/drivers/regulator/arizona-ldo1.c -index a1d07d3..353b930 100644 ---- a/drivers/regulator/arizona-ldo1.c -+++ b/drivers/regulator/arizona-ldo1.c -@@ -78,11 +78,6 @@ static int arizona_ldo1_hc_set_voltage_sel(struct regulator_dev *rdev, - if (ret != 0) - return ret; - -- ret = regmap_update_bits(regmap, ARIZONA_DYNAMIC_FREQUENCY_SCALING_1, -- ARIZONA_SUBSYS_MAX_FREQ, val); -- if (ret != 0) -- return ret; -- - if (val) - return 0; - -@@ -268,6 +263,7 @@ static int arizona_ldo1_probe(struct platform_device *pdev) - } - - config.ena_gpio = arizona->pdata.ldoena; -+ config.ena_gpio_flags = GPIOF_OUT_INIT_LOW; - - if (arizona->pdata.ldo1) - config.init_data = arizona->pdata.ldo1; -diff --git a/include/linux/mfd/arizona/core.h b/include/linux/mfd/arizona/core.h -index 16a498f..e54676c 100644 ---- a/include/linux/mfd/arizona/core.h -+++ b/include/linux/mfd/arizona/core.h -@@ -117,6 +117,7 @@ struct arizona { - int num_core_supplies; - struct regulator_bulk_data core_supplies[ARIZONA_MAX_CORE_SUPPLIES]; - struct regulator *dcvdd; -+ struct notifier_block dcvdd_notifier; - - struct arizona_pdata pdata; - -@@ -135,6 +136,9 @@ struct arizona { - - bool ctrlif_error; - -+ struct mutex subsys_max_lock; -+ unsigned int subsys_max_rq; -+ - struct snd_soc_dapm_context *dapm; - - int tdm_width[ARIZONA_MAX_AIF]; -@@ -145,8 +149,17 @@ struct arizona { - struct mutex dac_comp_lock; - }; - -+#define ARIZONA_DVFS_SR1_RQ 0x00000001 -+#define ARIZONA_DVFS_SR2_RQ 0x00000002 -+#define ARIZONA_DVFS_SR3_RQ 0x00000004 -+#define ARIZONA_DVFS_ASR1_RQ 0x00000010 -+#define ARIZONA_DVFS_ASR2_RQ 0x00000020 -+#define ARIZONA_DVFS_ADSP1_RQ 0x00010000 -+ - int arizona_clk32k_enable(struct arizona *arizona); - int arizona_clk32k_disable(struct arizona *arizona); -+int arizona_dvfs_up(struct arizona *arizona, unsigned int mask); -+int arizona_dvfs_down(struct arizona *arizona, unsigned int mask); - - int arizona_request_irq(struct arizona *arizona, int irq, char *name, - irq_handler_t handler, void *data); -diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h -index 1065095..edd011a 100644 ---- a/include/sound/soc-dapm.h -+++ b/include/sound/soc-dapm.h -@@ -377,10 +377,11 @@ int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm, - int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card); - void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card); - int snd_soc_dapm_new_pcm(struct snd_soc_card *card, -- const struct snd_soc_pcm_stream *params, -+ struct snd_soc_pcm_stream *params, - unsigned int num_params, - struct snd_soc_dapm_widget *source, -- struct snd_soc_dapm_widget *sink); -+ struct snd_soc_dapm_widget *sink, -+ void *priv); - - /* dapm path setup */ - int snd_soc_dapm_new_widgets(struct snd_soc_card *card); -@@ -530,7 +531,7 @@ struct snd_soc_dapm_widget { - - void *priv; /* widget specific data */ - struct regulator *regulator; /* attached regulator */ -- const struct snd_soc_pcm_stream *params; /* params for dai links */ -+ struct snd_soc_pcm_stream *params; /* params for dai links */ - unsigned int num_params; /* number of params for dai links */ - unsigned int params_select; /* currently selected param for dai link */ - -diff --git a/include/sound/soc.h b/include/sound/soc.h -index 8d948aa..e1b47ed 100644 ---- a/include/sound/soc.h -+++ b/include/sound/soc.h -@@ -956,7 +956,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..25793a2 100644 ---- a/sound/soc/bcm/Kconfig -+++ b/sound/soc/bcm/Kconfig -@@ -75,3 +75,11 @@ 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 -+ tristate "Support for Cirrus sound pi" -+ depends on SND_BCM2708_SOC_I2S -+ select SND_SOC_WM5102 -+ select SND_SOC_WM8804 -+ 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..485af3c 100644 ---- a/sound/soc/bcm/Makefile -+++ b/sound/soc/bcm/Makefile -@@ -17,6 +17,7 @@ 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 - - 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 +27,4 @@ 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 -diff --git a/sound/soc/bcm/bcm2708-i2s.c b/sound/soc/bcm/bcm2708-i2s.c -index 5e93cd6..aa8cd0f 100644 ---- a/sound/soc/bcm/bcm2708-i2s.c -+++ b/sound/soc/bcm/bcm2708-i2s.c -@@ -881,7 +881,7 @@ static struct snd_pcm_hardware bcm2708_pcm_hardware = { - SNDRV_PCM_FMTBIT_S24_LE | - SNDRV_PCM_FMTBIT_S32_LE, - .period_bytes_min = 32, -- .period_bytes_max = 64 * PAGE_SIZE, -+ .period_bytes_max = SZ_64K - 4, - .periods_min = 2, - .periods_max = 255, - .buffer_bytes_max = 128 * PAGE_SIZE, -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..bc86996 ---- /dev/null -+++ b/sound/soc/bcm/rpi-cirrus-sound-pi.c -@@ -0,0 +1,529 @@ -+/* -+ * ASoC machine driver for Cirrus Audio Card (with a WM5102 and WM8804 codecs ) -+ * connected to a Raspberry Pi -+ * -+ * Copyright 2015 Cirrus Logic Inc. -+ * -+ * Author: Nikesh Oswal, -+ * Partly based on sound/soc/bcm/iqaudio-dac.c -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include -+#include -+#include -+ -+#include "../codecs/wm5102.h" -+#include "../codecs/wm8804.h" -+ -+#define WM8804_CLKOUT_HZ 12000000 -+ -+#define RPI_WLF_SR 44100 -+#define WM5102_MAX_SYSCLK_1 49152000 /*max sysclk for 4K family*/ -+#define WM5102_MAX_SYSCLK_2 45158400 /*max sysclk for 11.025K family*/ -+ -+static struct snd_soc_card snd_rpi_wsp; -+ -+struct wm5102_machine_priv { -+ int wm8804_sr; -+ int wm5102_sr; -+ int sync_path_enable; -+}; -+ -+enum { -+ GPIO_FSEL_INPUT, GPIO_FSEL_OUTPUT, -+ GPIO_FSEL_ALT5, GPIO_FSEL_ALT_4, -+ GPIO_FSEL_ALT0, GPIO_FSEL_ALT1, -+ GPIO_FSEL_ALT2, GPIO_FSEL_ALT3, -+}; -+ -+int spdif_rx_enable_event(struct snd_soc_dapm_widget *w, -+ struct snd_kcontrol *kcontrol, int event) -+{ -+ struct snd_soc_card *card = &snd_rpi_wsp; -+ struct wm5102_machine_priv *priv = snd_soc_card_get_drvdata(card); -+ struct snd_soc_codec *wm5102_codec = card->rtd[0].codec; -+ int ret = 0; -+ int clk_freq; -+ int sr = priv->wm8804_sr; -+ -+ switch (event) { -+ case SND_SOC_DAPM_POST_PMU: -+ /* Enable sync path in case of SPDIF capture use case */ -+ clk_freq = (sr % 4000 == 0) ? WM5102_MAX_SYSCLK_1 : WM5102_MAX_SYSCLK_2; -+ -+ /*reset FLL1*/ -+ snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1_REFCLK, -+ ARIZONA_FLL_SRC_NONE, 0, 0); -+ snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, -+ ARIZONA_FLL_SRC_NONE, 0, 0); -+ -+ ret = snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1_REFCLK, -+ ARIZONA_CLK_SRC_MCLK1, -+ WM8804_CLKOUT_HZ, -+ clk_freq); -+ if (ret != 0) { -+ dev_err(wm5102_codec->dev, "Failed to enable FLL1 with Ref Clock Loop: %d\n", ret); -+ return ret; -+ } -+ -+ ret = snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, -+ ARIZONA_CLK_SRC_AIF2BCLK, -+ sr * 64, clk_freq); -+ if (ret != 0) { -+ dev_err(wm5102_codec->dev, "Failed to enable FLL1 Sync Clock Loop: %d\n", ret); -+ return ret; -+ } -+ priv->sync_path_enable = 1; -+ break; -+ case SND_SOC_DAPM_POST_PMD: -+ priv->sync_path_enable = 0; -+ break; -+ } -+ -+ return ret; -+} -+ -+static const struct snd_kcontrol_new rpi_wsp_controls[] = { -+ SOC_DAPM_PIN_SWITCH("DMIC"), -+ SOC_DAPM_PIN_SWITCH("Headset Mic"), -+ SOC_DAPM_PIN_SWITCH("SPDIF Out"), -+ SOC_DAPM_PIN_SWITCH("SPDIF In"), -+ SOC_DAPM_PIN_SWITCH("Line Input"), -+}; -+ -+const struct snd_soc_dapm_widget rpi_wsp_dapm_widgets[] = { -+ SND_SOC_DAPM_MIC("DMIC", NULL), -+ SND_SOC_DAPM_MIC("Headset Mic", NULL), -+ SND_SOC_DAPM_MIC("Line Input", NULL), -+ SND_SOC_DAPM_INPUT("dummy SPDIF in"), -+ SND_SOC_DAPM_PGA_E("dummy SPDIFRX", SND_SOC_NOPM, 0, 0,NULL, 0, -+ spdif_rx_enable_event, -+ SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), -+}; -+ -+const struct snd_soc_dapm_route rpi_wsp_dapm_routes[] = { -+ { "IN1L", NULL, "Headset Mic" }, -+ { "IN1R", NULL, "Headset Mic" }, -+ { "Headset Mic", NULL, "MICBIAS1" }, -+ -+ { "IN2L", NULL, "DMIC" }, -+ { "IN2R", NULL, "DMIC" }, -+ { "DMIC", NULL, "MICBIAS2" }, -+ -+ { "IN3L", NULL, "Line Input" }, -+ { "IN3R", NULL, "Line Input" }, -+ { "Line Input", NULL, "MICBIAS3" }, -+ -+ /* Dummy routes to check whether SPDIF RX is enabled or not */ -+ {"dummy SPDIFRX", NULL, "dummy SPDIF in"}, -+ {"AIFTX", NULL, "dummy SPDIFRX"}, -+}; -+ -+static int rpi_set_bias_level(struct snd_soc_card *card, -+ struct snd_soc_dapm_context *dapm, -+ enum snd_soc_bias_level level) -+{ -+ struct snd_soc_codec *wm5102_codec = card->rtd[0].codec; -+ struct wm5102_machine_priv *priv = snd_soc_card_get_drvdata(card); -+ -+ int ret; -+ int sr = priv->wm5102_sr; -+ int clk_freq = (sr % 4000 == 0) ? WM5102_MAX_SYSCLK_1 : WM5102_MAX_SYSCLK_2; -+ -+ switch (level) { -+ case SND_SOC_BIAS_OFF: -+ break; -+ case SND_SOC_BIAS_ON: -+ if (!priv->sync_path_enable) { -+ ret = snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, -+ ARIZONA_CLK_SRC_MCLK1, -+ WM8804_CLKOUT_HZ, -+ clk_freq); -+ if (ret != 0) { -+ dev_err(wm5102_codec->dev, "Failed to enable FLL1 with Ref Clock Loop: %d\n", ret); -+ return ret; -+ } -+ } -+ break; -+ default: -+ break; -+ } -+ -+ dapm->bias_level = level; -+ -+ return 0; -+} -+ -+static int rpi_set_bias_level_post(struct snd_soc_card *card, -+ struct snd_soc_dapm_context *dapm, -+ enum snd_soc_bias_level level) -+{ -+ struct snd_soc_codec *wm5102_codec = card->rtd[0].codec; -+ -+ switch (level) { -+ case SND_SOC_BIAS_STANDBY: -+ snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, -+ ARIZONA_FLL_SRC_NONE, 0, 0); -+ snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1_REFCLK, -+ ARIZONA_FLL_SRC_NONE, 0, 0); -+ break; -+ default: -+ break; -+ } -+ -+ dapm->bias_level = level; -+ -+ return 0; -+} -+ -+static int snd_rpi_wsp_config_5102_clks(struct snd_soc_codec *wm5102_codec, int sr) -+{ -+ int ret; -+ int clk_freq = (sr % 4000 == 0) ? WM5102_MAX_SYSCLK_1 : WM5102_MAX_SYSCLK_2; -+ -+ /*reset FLL1*/ -+ snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, -+ ARIZONA_FLL_SRC_NONE, 0, 0); -+ -+ ret = snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, -+ ARIZONA_CLK_SRC_MCLK1, -+ WM8804_CLKOUT_HZ, -+ clk_freq); -+ -+ if (ret != 0) { -+ dev_err(wm5102_codec->dev, "Failed to set FLL1: %d\n", ret); -+ return ret; -+ } -+ -+ ret = snd_soc_codec_set_sysclk(wm5102_codec, -+ ARIZONA_CLK_SYSCLK, -+ ARIZONA_CLK_SRC_FLL1, -+ clk_freq, -+ SND_SOC_CLOCK_IN); -+ if (ret != 0) { -+ dev_err(wm5102_codec->dev, "Failed to set AYNCCLK: %d\n", ret); -+ return ret; -+ } -+ -+ return 0; -+ } -+ -+static int snd_rpi_wsp_config_8804_clks(struct snd_soc_codec *wm8804_codec, -+ struct snd_soc_dai *wm8804_dai, int sr) -+ { -+ int ret; -+ -+ /*Set OSC(12MHz) to CLK2 freq*/ -+ /*Based on MCLKDIV it will be 128fs (MCLKDIV=1) or 256fs mode (MCLKDIV=0)*/ -+ /*BCLK will be MCLK/2 (MCLKDIV=1) or MCLK/4 (MCLKDIV=0) so BCLK is 64fs always*/ -+ ret = snd_soc_dai_set_pll(wm8804_dai, 0, 0, WM8804_CLKOUT_HZ, sr * 256); -+ if (ret != 0) { -+ dev_err(wm8804_codec->dev, "Failed to set OSC to CLK2 frequency: %d\n", ret); -+ return ret; -+ } -+ -+ /*Set MCLK as PLL Output*/ -+ ret = snd_soc_dai_set_sysclk(wm8804_dai, WM8804_TX_CLKSRC_PLL, sr * 256, 0); -+ if (ret != 0) { -+ dev_err(wm8804_codec->dev, "Failed to set MCLK as PLL Output: %d\n", ret); -+ return ret; -+ } -+ -+ /*Fix MCLKDIV=0 for 256fs to avoid any issues switching between TX and RX. RX always expects 256fs*/ -+ ret = snd_soc_dai_set_clkdiv(wm8804_dai, WM8804_MCLK_DIV, 0 ); -+ if (ret != 0) { -+ dev_err(wm8804_codec->dev, "Failed to set MCLK_DIV to 256fs: %d\n", ret); -+ return ret; -+ } -+ -+ /*Set CLKOUT as OSC Frequency*/ -+ ret = snd_soc_dai_set_sysclk(wm8804_dai, WM8804_CLKOUT_SRC_OSCCLK, WM8804_CLKOUT_HZ, 0); -+ if (ret != 0) { -+ dev_err(wm8804_codec->dev, "Failed to set CLKOUT as OSC Frequency: %d\n", ret); -+ return ret; -+ } -+ -+ return 0; -+} -+ -+static int snd_rpi_wsp_hw_params(struct snd_pcm_substream *substream, -+ struct snd_pcm_hw_params *params) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_card *card = rtd->card; -+ struct snd_soc_codec *wm5102_codec = rtd->codec; -+ struct snd_soc_dai *bcm_i2s_dai = rtd->cpu_dai; -+ struct snd_soc_codec *wm8804_codec = card->rtd[1].codec; -+ struct snd_soc_dai *wm8804_codec_dai = card->rtd[1].codec_dai; -+ struct wm5102_machine_priv *priv = snd_soc_card_get_drvdata(card); -+ int ret, capture_stream_opened,playback_stream_opened; -+ unsigned int bclkratio, tx_mask, rx_mask; -+ int width, num_slots=1; -+ -+ bclkratio = 2 * snd_pcm_format_physical_width(params_format(params)); -+ -+ ret = snd_soc_dai_set_bclk_ratio(bcm_i2s_dai, bclkratio); -+ if (ret < 0) { -+ dev_err(wm5102_codec->dev, "set_bclk_ratio failed: %d\n", ret); -+ return ret; -+ } -+ -+ /*8804 supports sample rates from 32k only*/ -+ /*Setting <32k raises error from 8804 driver while setting the clock*/ -+ if(params_rate(params) >= 32000) -+ { -+ ret = snd_rpi_wsp_config_8804_clks(wm8804_codec, wm8804_codec_dai, -+ params_rate(params)); -+ -+ if (ret != 0) { -+ dev_err(wm8804_codec->dev, "snd_rpi_wsp_config_8804_clks failed: %d\n", -+ ret); -+ return ret; -+ } -+ } -+ -+ capture_stream_opened = -+ substream->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream_opened; -+ playback_stream_opened = -+ substream->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream_opened; -+ -+ priv->wm5102_sr = params_rate(params); -+ -+ ret = snd_rpi_wsp_config_5102_clks(wm5102_codec, params_rate(params)); -+ if (ret != 0) { -+ dev_err(wm5102_codec->dev, "snd_rpi_wsp_config_5102_clks failed: %d\n", ret); -+ return ret; -+ } -+ -+ width = snd_pcm_format_physical_width(params_format(params)); -+ -+ if (capture_stream_opened) { -+ tx_mask = 0; -+ rx_mask = 1; -+ } -+ if (playback_stream_opened) { -+ tx_mask = 1; -+ rx_mask = 0; -+ } -+ ret = snd_soc_dai_set_tdm_slot(rtd->codec_dai, tx_mask, rx_mask, num_slots, width); -+ if (ret < 0) -+ return ret; -+ -+ priv->wm8804_sr = params_rate(params); -+ -+ return 0; -+} -+ -+static int dai_link2_params_fixup(struct snd_soc_dapm_widget *w, int event) -+{ -+ struct snd_soc_card *card = &snd_rpi_wsp; -+ struct wm5102_machine_priv *priv = snd_soc_card_get_drvdata(card); -+ struct snd_soc_pcm_stream *config = w->params; -+ -+ if (event == SND_SOC_DAPM_PRE_PMU) { -+ config->rate_min = priv->wm8804_sr; -+ config->rate_max = priv->wm8804_sr; -+ } else if (event == SND_SOC_DAPM_PRE_PMD) { -+ config->rate_min = RPI_WLF_SR; -+ config->rate_max = RPI_WLF_SR; -+ } -+ -+ return 0; -+} -+ -+static int snd_rpi_wsp_hw_free(struct snd_pcm_substream *substream) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_codec *wm5102_codec = rtd->codec; -+ int ret,playback_stream_opened,capture_stream_opened; -+ -+ playback_stream_opened = substream->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream_opened; -+ -+ capture_stream_opened = substream->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream_opened; -+ -+ if((playback_stream_opened + capture_stream_opened) == 1){ -+ -+ ret = snd_soc_codec_set_sysclk(wm5102_codec, -+ ARIZONA_CLK_SYSCLK, -+ ARIZONA_CLK_SRC_FLL1, -+ 0, -+ SND_SOC_CLOCK_IN); -+ -+ if (ret != 0) { -+ dev_err(wm5102_codec->dev, "Failed to set SYSCLK to Zero: %d\n", ret); -+ return ret; -+ } -+ } -+ -+ return 0; -+} -+ -+static struct snd_soc_ops snd_rpi_wsp_ops = { -+ .hw_params = snd_rpi_wsp_hw_params, -+ .hw_free = snd_rpi_wsp_hw_free, -+}; -+ -+static struct snd_soc_pcm_stream dai_link2_params = { -+ .formats = SNDRV_PCM_FMTBIT_S24_LE, -+ .rate_min = RPI_WLF_SR, -+ .rate_max = RPI_WLF_SR, -+ .channels_min = 2, -+ .channels_max = 2, -+}; -+ -+static struct snd_soc_dai_link snd_rpi_wsp_dai[] = { -+ { -+ .name = "WM5102", -+ .stream_name = "WM5102 AiFi", -+ .cpu_dai_name = "bcm2708-i2s.0", -+ .codec_dai_name = "wm5102-aif1", -+ .platform_name = "bcm2708-i2s.0", -+ .codec_name = "wm5102-codec", -+ .dai_fmt = SND_SOC_DAIFMT_I2S -+ | SND_SOC_DAIFMT_NB_NF -+ | SND_SOC_DAIFMT_CBM_CFM, -+ .ops = &snd_rpi_wsp_ops, -+ }, -+ { -+ .name = "WM5102 SPDIF", -+ .stream_name = "SPDIF Tx/Rx", -+ .cpu_dai_name = "wm5102-aif2", -+ .codec_dai_name = "wm8804-spdif", -+ .codec_name = "wm8804.1-003b", -+ .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_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..b501471 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) { -@@ -1967,19 +1987,15 @@ static int arizona_enable_fll(struct arizona_fll *fll) - - arizona_fll_dbg(fll, "Waiting for FLL lock...\n"); - val = 0; -- for (i = 0; i < 15; i++) { -- if (i < 5) -- usleep_range(200, 400); -- else -- msleep(20); -- -+ for (i = 0; i < 25; i++) { - regmap_read(arizona->regmap, - ARIZONA_INTERRUPT_RAW_STATUS_5, - &val); - if (val & (ARIZONA_FLL1_CLOCK_OK_STS << (fll->id - 1))) - break; -+ msleep(10); - } -- if (i == 15) -+ if (i == 25) - arizona_fll_warn(fll, "Timed out waiting for lock\n"); - else - arizona_fll_dbg(fll, "FLL locked (%d polls)\n", i); -@@ -1991,6 +2007,8 @@ static void arizona_disable_fll(struct arizona_fll *fll) - { - struct arizona *arizona = fll->arizona; - bool change; -+ int i; -+ unsigned int val; - - regmap_update_bits_async(arizona->regmap, fll->base + 1, - ARIZONA_FLL1_FREERUN, ARIZONA_FLL1_FREERUN); -@@ -2001,6 +2019,21 @@ static void arizona_disable_fll(struct arizona_fll *fll) - regmap_update_bits_async(arizona->regmap, fll->base + 1, - ARIZONA_FLL1_FREERUN, 0); - -+ arizona_fll_dbg(fll, "Waiting for FLL disable...\n"); -+ val = 0; -+ for (i = 0; i < 25; i++) { -+ regmap_read(arizona->regmap, -+ ARIZONA_INTERRUPT_RAW_STATUS_5, -+ &val); -+ if (!(val & (ARIZONA_FLL1_CLOCK_OK_STS << (fll->id - 1)))) -+ break; -+ msleep(10); -+ } -+ if (i == 25) -+ arizona_fll_warn(fll, "Timed out waiting for disable\n"); -+ else -+ arizona_fll_dbg(fll, "FLL disabled (%d polls)\n", i); -+ - if (change) - pm_runtime_put_autosuspend(arizona->dev); - } -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) diff --git a/main/linux-rpi/rpi-cirrus-4.4.y-20160327.patch b/main/linux-rpi/rpi-cirrus-4.4.y-20160327.patch new file mode 100644 index 0000000000..d430efa34d --- /dev/null +++ b/main/linux-rpi/rpi-cirrus-4.4.y-20160327.patch @@ -0,0 +1,1533 @@ +diff --git a/Documentation/devicetree/bindings/mfd/arizona.txt b/Documentation/devicetree/bindings/mfd/arizona.txt +index 18be0cb..4b3510a 100644 +--- a/Documentation/devicetree/bindings/mfd/arizona.txt ++++ b/Documentation/devicetree/bindings/mfd/arizona.txt +@@ -44,6 +44,23 @@ Required properties: + Optional properties: + + - wlf,reset : GPIO specifier for the GPIO controlling /RESET ++ - wlf,clk32k-src : set input source for codec 32kHz clock. ++ 0 = default, 1 = MCLK1, 2 = MCLK2, 3 = None ++ ++ - wlf,micd-ranges : Microphone detection level and key configuration, this ++ field can be of variable length but should always be a multiple of 2 cells ++ long, each two cell group represents one button configuration ++ The first cell is the maximum impedance for this button in ohms ++ The second cell the key that should be reported to the input layer ++ - wlf,micd-configs : Headset polarity configurations, the field can be of ++ variable length but should always be a multiple of 3 cells long, each two ++ cell group represents one polarity configration ++ The first cell is the accessory detection source as per the ACCDET_SRC bits ++ in the ACCESSORY_DETECT_MODE_1 register ++ The second cell represents the MICBIAS to be used as per the MICD_BIAS_SRC ++ bits in the MIC_DETECT_1 register ++ The third cell represents the value of the micd-pol-gpio pin, a non-zero ++ value indicates this should be on + + - wlf,gpio-defaults : A list of GPIO configuration register values. Defines + for the appropriate values can found in . If +@@ -51,6 +68,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. +@@ -87,6 +108,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 +@@ -94,4 +128,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 4c3db73..b38e598 100644 +--- a/arch/arm/boot/dts/overlays/Makefile ++++ b/arch/arm/boot/dts/overlays/Makefile +@@ -52,6 +52,7 @@ dtbo-$(RPI_DT_OVERLAYS) += pwm-2chan.dtbo + dtbo-$(RPI_DT_OVERLAYS) += qca7000.dtbo + dtbo-$(RPI_DT_OVERLAYS) += raspidac3.dtbo + dtbo-$(RPI_DT_OVERLAYS) += rpi-backlight.dtbo ++dtbo-$(RPI_DT_OVERLAYS) += rpi-cirrus-wm5102.dtbo + dtbo-$(RPI_DT_OVERLAYS) += rpi-dac.dtbo + dtbo-$(RPI_DT_OVERLAYS) += rpi-display.dtbo + dtbo-$(RPI_DT_OVERLAYS) += rpi-ft5406.dtbo +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..3cb63a5 +--- /dev/null ++++ b/arch/arm/boot/dts/overlays/rpi-cirrus-wm5102-overlay.dts +@@ -0,0 +1,138 @@ ++// 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 8>; ++ brcm,function = <1 1 0 1>; ++ }; ++ }; ++ }; ++ ++ 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; ++ }; ++ }; ++ }; ++ ++ 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@3b { ++ #sound-dai-cells = <0>; ++ compatible = "wlf,wm8804"; ++ reg = <0x3b>; ++ status = "okay"; ++ PVDD-supply = <&ldo0>; ++ DVDD-supply = <&ldo0>; ++ wlf,reset-gpio = <&gpio 8 0>; ++ }; ++ }; ++ }; ++}; +diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig +index b63632d..ee84684 100644 +--- a/arch/arm/configs/bcm2709_defconfig ++++ b/arch/arm/configs/bcm2709_defconfig +@@ -645,6 +645,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 +@@ -853,6 +856,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 e720c74..b7d8ad8 100644 +--- a/arch/arm/configs/bcmrpi_defconfig ++++ b/arch/arm/configs/bcmrpi_defconfig +@@ -637,6 +637,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 +@@ -845,6 +848,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/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c +index 985019b..77be442 100644 +--- a/drivers/dma/bcm2835-dma.c ++++ b/drivers/dma/bcm2835-dma.c +@@ -144,12 +144,6 @@ struct bcm2835_desc { + */ + #define MAX_LITE_TRANSFER (SZ_64K - 4) + +-/* +- * Transfers larger than 32k cause issues with the bcm2708-i2s driver, +- * so limit transfer size to 32k as bcm2708-dmaengine did. +- */ +-#define MAX_CYCLIC_LITE_TRANSFER SZ_32K +- + static inline struct bcm2835_dmadev *to_bcm2835_dma_dev(struct dma_device *d) + { + return container_of(d, struct bcm2835_dmadev, ddev); +@@ -385,6 +379,15 @@ static struct dma_async_tx_descriptor *bcm2835_dma_prep_dma_cyclic( + unsigned int frame, max_size; + int i; + ++ if (!buf_len || !period_len) ++ return NULL; ++ ++ if (buf_len % period_len) { ++ dev_err(chan->device->dev, ++ "Buffer length should be a multiple of period\n"); ++ return NULL; ++ } ++ + /* Grab configuration */ + if (!is_slave_direction(direction)) { + dev_err(chan->device->dev, "%s: bad direction?\n", __func__); +@@ -410,6 +413,18 @@ static struct dma_async_tx_descriptor *bcm2835_dma_prep_dma_cyclic( + return NULL; + } + ++ if (c->ch >= 8) /* LITE channel */ ++ max_size = MAX_LITE_TRANSFER; ++ else ++ max_size = MAX_NORMAL_TRANSFER; ++ ++ if (period_len > max_size) { ++ dev_err(chan->device->dev, ++ "Period length %d larger than maximum %d\n", ++ period_len, max_size); ++ return NULL; ++ } ++ + /* Now allocate and setup the descriptor. */ + d = kzalloc(sizeof(*d), GFP_NOWAIT); + if (!d) +@@ -417,12 +432,8 @@ static struct dma_async_tx_descriptor *bcm2835_dma_prep_dma_cyclic( + + d->c = c; + d->dir = direction; +- if (c->ch >= 8) /* LITE channel */ +- max_size = MAX_CYCLIC_LITE_TRANSFER; +- else +- max_size = MAX_NORMAL_TRANSFER; +- period_len = min(period_len, max_size); +- d->frames = (buf_len - 1) / (period_len + 1); ++ d->frames = buf_len / period_len; ++ d->size = buf_len; + + d->cb_list = kcalloc(d->frames, sizeof(*d->cb_list), GFP_KERNEL); + if (!d->cb_list) { +@@ -470,12 +481,7 @@ static struct dma_async_tx_descriptor *bcm2835_dma_prep_dma_cyclic( + BCM2835_DMA_PER_MAP(c->dreq); + + /* Length of a frame */ +- if (frame != d->frames - 1) +- control_block->length = period_len; +- else +- control_block->length = buf_len - (d->frames - 1) * +- period_len; +- d->size += control_block->length; ++ control_block->length = period_len; + + /* + * Next block is the next frame. +diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c +index d474732..a899b57 100644 +--- a/drivers/mfd/arizona-core.c ++++ b/drivers/mfd/arizona-core.c +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -460,6 +461,20 @@ static int wm5102_clear_write_sequencer(struct arizona *arizona) + return 0; + } + ++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_isolate_dcvdd(struct arizona *arizona) + { +@@ -800,6 +815,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; +@@ -833,6 +996,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(pdata->inmode)) +@@ -852,6 +1024,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; + } + +@@ -1029,6 +1204,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 = devm_gpio_request_one(arizona->dev, arizona->pdata.reset, +@@ -1036,16 +1219,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); +@@ -1420,6 +1606,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: +@@ -1433,6 +1621,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 f7c88ff..19fdcd4 100644 +--- a/drivers/regulator/arizona-ldo1.c ++++ b/drivers/regulator/arizona-ldo1.c +@@ -288,6 +288,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 79e607e..39a23eb 100644 +--- a/include/linux/mfd/arizona/core.h ++++ b/include/linux/mfd/arizona/core.h +@@ -119,6 +119,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; + bool has_fully_powered_off; + + struct arizona_pdata pdata; +diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h +index 95a937e..8262719 100644 +--- a/include/sound/soc-dapm.h ++++ b/include/sound/soc-dapm.h +@@ -383,10 +383,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); +@@ -553,7 +554,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 fb955e6..bbdc05d 100644 +--- a/include/sound/soc.h ++++ b/include/sound/soc.h +@@ -989,7 +989,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 1a3f826..020cfb1 100644 +--- a/sound/soc/bcm/Kconfig ++++ b/sound/soc/bcm/Kconfig +@@ -64,3 +64,11 @@ 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 ++ tristate "Support for Cirrus sound pi" ++ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S ++ select SND_SOC_WM5102 ++ select SND_SOC_WM8804 ++ 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 b21e11e..4cb717f 100644 +--- a/sound/soc/bcm/Makefile ++++ b/sound/soc/bcm/Makefile +@@ -12,6 +12,7 @@ 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 + + obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC) += snd-soc-hifiberry-dac.o + obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DACPLUS) += snd-soc-hifiberry-dacplus.o +@@ -21,3 +22,4 @@ 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 +diff --git a/sound/soc/bcm/bcm2835-i2s.c b/sound/soc/bcm/bcm2835-i2s.c +index 04c1d13..815509b 100644 +--- a/sound/soc/bcm/bcm2835-i2s.c ++++ b/sound/soc/bcm/bcm2835-i2s.c +@@ -806,16 +806,16 @@ static struct snd_pcm_hardware bcm2835_pcm_hardware = { + SNDRV_PCM_FMTBIT_S24_LE | + SNDRV_PCM_FMTBIT_S32_LE, + .period_bytes_min = 32, +- .period_bytes_max = 64 * PAGE_SIZE, ++ .period_bytes_max = SZ_64K - 4, + .periods_min = 2, + .periods_max = 255, +- .buffer_bytes_max = 128 * PAGE_SIZE, ++ .buffer_bytes_max = SZ_512K, + }; + + static const struct snd_dmaengine_pcm_config bcm2835_dmaengine_pcm_config = { + .prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config, + .pcm_hardware = &bcm2835_pcm_hardware, +- .prealloc_buffer_size = 256 * PAGE_SIZE, ++ .prealloc_buffer_size = SZ_1M, + }; + + static int bcm2835_i2s_probe(struct platform_device *pdev) +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..3abfff1 +--- /dev/null ++++ b/sound/soc/bcm/rpi-cirrus-sound-pi.c +@@ -0,0 +1,638 @@ ++/* ++ * ASoC machine driver for Cirrus Audio Card (with a WM5102 and WM8804 codecs ) ++ * connected to a Raspberry Pi ++ * ++ * Copyright 2015 Cirrus Logic Inc. ++ * ++ * Author: Nikesh Oswal, ++ * Partly based on sound/soc/bcm/iqaudio-dac.c ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#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*/ ++ ++#define DAI_WM5102 0 ++#define DAI_WM8804 1 ++ ++static struct snd_soc_card snd_rpi_wsp; ++ ++struct wm5102_machine_priv { ++ int wm8804_sr; ++ int wm5102_sr; ++ int sync_path_enable; ++ int fll1_freq; /* negative means RefClock in spdif rx case */ ++ /* mutex for synchronzing FLL1 access with DAPM */ ++ struct mutex fll1_mutex; ++}; ++ ++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_pcm_runtime *wm5102_rtd; ++ struct snd_soc_codec *wm5102_codec; ++ int ret = 0; ++ int clk_freq; ++ int sr = priv->wm8804_sr; ++ ++ dev_dbg(card->dev, "spdif_rx event %d\n", event); ++ ++ wm5102_rtd = snd_soc_get_pcm_runtime(card, card->dai_link[DAI_WM5102].name); ++ if (!wm5102_rtd) { ++ dev_warn(card->dev, "spdif_rx_enable_event: couldn't get WM5102 rtd\n"); ++ return -EFAULT; ++ } ++ wm5102_codec = wm5102_rtd->codec; ++ ++ switch (event) { ++ case SND_SOC_DAPM_POST_PMU: ++ mutex_lock(&priv->fll1_mutex); ++ ++ dev_dbg(wm5102_codec->dev, ++ "spdif_rx: changing FLL1 to use Ref Clock\n"); ++ ++ /* 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); ++ mutex_unlock(&priv->fll1_mutex); ++ return ret; ++ } ++ ++ ret = snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, ++ ARIZONA_CLK_SRC_AIF2BCLK, ++ sr * 64, clk_freq); ++ if (!ret) ++ /* set to negative to indicate we're doing spdif rx */ ++ priv->fll1_freq = -clk_freq; ++ ++ mutex_unlock(&priv->fll1_mutex); ++ ++ 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_pcm_runtime *wm5102_rtd; ++ struct snd_soc_codec *wm5102_codec; ++ struct snd_soc_dai *wm5102_codec_dai; ++ 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; ++ ++ wm5102_rtd = snd_soc_get_pcm_runtime(card, card->dai_link[DAI_WM5102].name); ++ if (!wm5102_rtd) { ++ dev_warn(card->dev, "rpi_set_bias_level: couldn't get WM5102 rtd\n"); ++ return -EFAULT; ++ } ++ wm5102_codec = wm5102_rtd->codec; ++ wm5102_codec_dai = wm5102_rtd->codec_dai; ++ ++ if (dapm->dev != wm5102_codec_dai->dev) ++ return 0; ++ ++ dev_dbg(wm5102_codec->dev, "change bias level from %d to %d, sync=%d\n", ++ dapm->bias_level, level, priv->sync_path_enable); ++ ++ switch (level) { ++ case SND_SOC_BIAS_ON: ++ /* no need to check current level, it can only be PREPARE */ ++ if (!priv->sync_path_enable) { ++ mutex_lock(&priv->fll1_mutex); ++ ++ dev_dbg(wm5102_codec->dev, ++ "bias_on: changing FLL1 from %d to %d\n", ++ priv->fll1_freq, clk_freq); ++ ++ ret = snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, ++ ARIZONA_CLK_SRC_MCLK1, ++ WM8804_CLKOUT_HZ, ++ clk_freq); ++ if (!ret) ++ priv->fll1_freq = clk_freq; ++ ++ mutex_unlock(&priv->fll1_mutex); ++ ++ if (ret != 0) { ++ dev_err(wm5102_codec->dev, "Failed to enable FLL1: %d\n", ret); ++ return ret; ++ } ++ } ++ break; ++ case SND_SOC_BIAS_STANDBY: ++ if (dapm->bias_level != SND_SOC_BIAS_PREPARE) ++ break; ++ ++ mutex_lock(&priv->fll1_mutex); ++ ++ dev_dbg(wm5102_codec->dev, ++ "bias_standby: changing FLL1 from %d to off\n", ++ priv->fll1_freq); ++ ++ ret = snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1, ++ ARIZONA_FLL_SRC_NONE, 0, 0); ++ if (ret) ++ dev_warn(wm5102_codec->dev, "set_bias_level: Failed to stop FLL1: %d\n", ret); ++ ++ ret = snd_soc_codec_set_pll(wm5102_codec, WM5102_FLL1_REFCLK, ++ ARIZONA_FLL_SRC_NONE, 0, 0); ++ if (ret) ++ dev_warn(wm5102_codec->dev, "set_bias_level: Failed to stop FLL1_REFCLK: %d\n", ret); ++ ++ priv->fll1_freq = 0; ++ ++ mutex_unlock(&priv->fll1_mutex); ++ ++ break; ++ default: ++ break; ++ } ++ ++ return 0; ++} ++ ++static int snd_rpi_wsp_config_5102_clks( ++ struct wm5102_machine_priv *priv, ++ struct snd_soc_codec *wm5102_codec, int sr) ++{ ++ int ret; ++ int clk_freq = (sr % 4000 == 0) ? WM5102_MAX_SYSCLK_1 : WM5102_MAX_SYSCLK_2; ++ ++ /* ++ * Manually set up FLL1 if it's configured to another rate but only ++ * if we are not using spdif rx (fll1_freq negative). ++ * This is necessary if delayed DAPM powerdown hasn't stopped ++ * the FLL before. ++ */ ++ if ((priv->fll1_freq > 0) && (priv->fll1_freq != clk_freq)) { ++ mutex_lock(&priv->fll1_mutex); ++ ++ dev_dbg(wm5102_codec->dev, ++ "config_5102_clks: changing FLL1 from %d to %d\n", ++ priv->fll1_freq, clk_freq); ++ ++ /*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) ++ priv->fll1_freq = clk_freq; ++ ++ mutex_unlock(&priv->fll1_mutex); ++ ++ if (ret) { ++ 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_pcm_runtime *wm5102_rtd, *wm8804_rtd; ++ struct snd_soc_codec *wm5102_codec, *wm8804_codec; ++ struct snd_soc_dai *wm8804_codec_dai, *bcm_i2s_dai = rtd->cpu_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; ++ ++ wm5102_rtd = snd_soc_get_pcm_runtime(card, card->dai_link[DAI_WM5102].name); ++ if (!wm5102_rtd) { ++ dev_warn(card->dev, "snd_rpi_wsp_hw_params: couldn't get WM5102 rtd\n"); ++ return -EFAULT; ++ } ++ wm8804_rtd = snd_soc_get_pcm_runtime(card, card->dai_link[DAI_WM8804].name); ++ if (!wm8804_rtd) { ++ dev_warn(card->dev, "snd_rpi_wsp_hw_params: couldn't get WM8804 rtd\n"); ++ return -EFAULT; ++ } ++ wm5102_codec = wm5102_rtd->codec; ++ wm8804_codec = wm8804_rtd->codec; ++ wm8804_codec_dai = wm8804_rtd->codec_dai; ++ ++ 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(priv, 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-003b", ++ .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); ++ struct snd_soc_pcm_runtime *wm5102_rtd, *wm8804_rtd; ++ struct snd_soc_codec *wm5102_codec, *wm8804_codec; ++ struct snd_soc_dai *wm5102_codec_dai, *wm8804_codec_dai, *wm8804_cpu_dai; ++ int ret; ++ ++ wm5102_rtd = snd_soc_get_pcm_runtime(card, card->dai_link[DAI_WM5102].name); ++ if (!wm5102_rtd) { ++ dev_warn(card->dev, "snd_rpi_wsp_late_probe: couldn't get WM5102 rtd\n"); ++ return -EFAULT; ++ } ++ wm8804_rtd = snd_soc_get_pcm_runtime(card, card->dai_link[DAI_WM8804].name); ++ if (!wm8804_rtd) { ++ dev_warn(card->dev, "snd_rpi_wsp_late_probe: couldn't get WM8804 rtd\n"); ++ return -EFAULT; ++ } ++ wm5102_codec = wm5102_rtd->codec; ++ wm5102_codec_dai = wm5102_rtd->codec_dai; ++ wm8804_codec = wm8804_rtd->codec; ++ wm8804_codec_dai = wm8804_rtd->codec_dai; ++ wm8804_cpu_dai = wm8804_rtd->cpu_dai; ++ ++ priv->wm8804_sr = RPI_WLF_SR; ++ priv->wm5102_sr = RPI_WLF_SR; ++ priv->sync_path_enable = 0; ++ ++ 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; ++ } ++ ++ ret = snd_rpi_wsp_config_8804_clks(wm8804_codec, wm8804_codec_dai, RPI_WLF_SR); ++ ++ if (ret != 0) { ++ dev_err(wm8804_codec->dev, "snd_rpi_wsp_config_8804_clks failed: %d\n", ret); ++ return ret; ++ } ++ ++ ret = snd_soc_dai_set_sysclk(wm5102_codec_dai, ARIZONA_CLK_SYSCLK, 0, 0); ++ if (ret != 0) { ++ dev_err(wm5102_codec_dai->dev, "Failed to set codec dai clk domain: %d\n", ret); ++ return ret; ++ } ++ ++ ret = snd_soc_dai_set_sysclk(wm8804_cpu_dai, ARIZONA_CLK_SYSCLK, 0, 0); ++ if (ret != 0) { ++ dev_err(wm8804_cpu_dai->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", ++ .owner = THIS_MODULE, ++ .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, ++}; ++ ++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; ++ ++ wm5102->fll1_freq = 0; ++ mutex_init(&wm5102->fll1_mutex); ++ ++ 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[DAI_WM5102]; ++ 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) { ++ if (ret == -EPROBE_DEFER) ++ dev_dbg(&pdev->dev, "register card requested probe deferral\n"); ++ else ++ 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_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 93b4008..1be8d2e 100644 +--- a/sound/soc/codecs/arizona.c ++++ b/sound/soc/codecs/arizona.c +@@ -1095,7 +1095,7 @@ int arizona_set_sysclk(struct snd_soc_codec *codec, int clk_id, + unsigned int reg; + unsigned int mask = ARIZONA_SYSCLK_FREQ_MASK | ARIZONA_SYSCLK_SRC_MASK; + unsigned int val = source << ARIZONA_SYSCLK_SRC_SHIFT; +- unsigned int *clk; ++ int *clk; + + switch (clk_id) { + case ARIZONA_CLK_SYSCLK: +@@ -1375,6 +1375,9 @@ static int arizona_startup(struct snd_pcm_substream *substream, + const struct snd_pcm_hw_constraint_list *constraint; + unsigned int base_rate; + ++ if (!substream->runtime) ++ return 0; ++ + switch (dai_priv->clk) { + case ARIZONA_CLK_SYSCLK: + base_rate = priv->sysclk; +@@ -2093,9 +2096,9 @@ static int arizona_enable_fll(struct arizona_fll *fll) + /* Facilitate smooth refclk across the transition */ + regmap_update_bits_async(fll->arizona->regmap, fll->base + 0x9, + ARIZONA_FLL1_GAIN_MASK, 0); +- regmap_update_bits_async(fll->arizona->regmap, fll->base + 1, +- ARIZONA_FLL1_FREERUN, +- ARIZONA_FLL1_FREERUN); ++ regmap_update_bits(fll->arizona->regmap, fll->base + 1, ++ ARIZONA_FLL1_FREERUN, ARIZONA_FLL1_FREERUN); ++ udelay(32); + } + + /* +@@ -2180,6 +2183,8 @@ static void arizona_disable_fll(struct arizona_fll *fll) + { + struct arizona *arizona = fll->arizona; + bool change; ++ int i; ++ unsigned int val; + + regmap_update_bits_async(arizona->regmap, fll->base + 1, + ARIZONA_FLL1_FREERUN, ARIZONA_FLL1_FREERUN); +@@ -2190,6 +2195,25 @@ static void arizona_disable_fll(struct arizona_fll *fll) + regmap_update_bits_async(arizona->regmap, fll->base + 1, + ARIZONA_FLL1_FREERUN, 0); + ++ arizona_fll_dbg(fll, "Waiting for FLL disable...\n"); ++ val = 0; ++ for (i = 0; i < 15; i++) { ++ if (i < 5) ++ usleep_range(200, 400); ++ else ++ msleep(20); ++ ++ regmap_read(arizona->regmap, ++ ARIZONA_INTERRUPT_RAW_STATUS_5, ++ &val); ++ if (!(val & (ARIZONA_FLL1_CLOCK_OK_STS << (fll->id - 1)))) ++ break; ++ } ++ if (i == 15) ++ arizona_fll_warn(fll, "Timed out waiting for disable\n"); ++ else ++ arizona_fll_dbg(fll, "FLL disabled (%d polls)\n", i); ++ + if (change) + pm_runtime_put_autosuspend(arizona->dev); + } +diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c +index a1305f8..31f36e6 100644 +--- a/sound/soc/soc-core.c ++++ b/sound/soc/soc-core.c +@@ -1295,7 +1295,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); +@@ -1308,7 +1308,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 416514f..92832eb 100644 +--- a/sound/soc/soc-dapm.c ++++ b/sound/soc/soc-dapm.c +@@ -3443,11 +3443,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->edges[SND_SOC_DAPM_DIR_OUT]) || +@@ -3465,6 +3466,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; +@@ -3594,10 +3605,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; +@@ -3699,6 +3711,7 @@ int snd_soc_dapm_new_pcm(struct snd_soc_card *card, + + w->params = params; + w->num_params = num_params; ++ w->priv = priv; + + ret = snd_soc_dapm_add_path(&card->dapm, source, w, NULL, NULL); + if (ret) -- cgit v1.2.3