diff --git a/core/linux-sun7i/0001-Backport-BFP-XOR-operation.patch b/core/linux-sun7i/0001-Backport-BFP-XOR-operation.patch
deleted file mode 100644
index da8501b07..000000000
--- a/core/linux-sun7i/0001-Backport-BFP-XOR-operation.patch
+++ /dev/null
@@ -1,228 +0,0 @@
-From 83e230739cb578049f62c626946e04a79b46c85b Mon Sep 17 00:00:00 2001
-From: Kevin Mihelich <kevin@archlinuxarm.org>
-Date: Mon, 29 Sep 2014 12:14:00 -0600
-Subject: [PATCH] Backport BFP XOR operation
-
-Squashed commit of the following:
-
-commit 210b6dd797945571a92ae1f502be6b885cdeae23
-Author: Daniel Borkmann <dxchgb@gmail.com>
-Date:   Mon Sep 24 02:23:59 2012 +0000
-
-    filter: add XOR instruction for use with X/K
-
-    SKF_AD_ALU_XOR_X has been added a while ago, but as an 'ancillary'
-    operation that is invoked through a negative offset in K within BPF
-    load operations. Since BPF_MOD has recently been added, BPF_XOR should
-    also be part of the common ALU operations. Removing SKF_AD_ALU_XOR_X
-    might not be an option since this is exposed to user space.
-
-    Signed-off-by: Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch>
-    Acked-by: Eric Dumazet <edumazet@google.com>
-    Signed-off-by: David S. Miller <davem@davemloft.net>
-
-commit 11acc6e3fc94f8b18483af729760b9025d708409
-Author: Eric Dumazet <edumazet@google.com>
-Date:   Fri Sep 7 22:03:35 2012 +0000
-
-    filter: add MOD operation
-
-    Add a new ALU opcode, to compute a modulus.
-
-    Commit ffe06c17afbbb used an ancillary to implement XOR_X,
-    but here we reserve one of the available ALU opcode to implement both
-    MOD_X and MOD_K
-
-    Signed-off-by: Eric Dumazet <edumazet@google.com>
-    Suggested-by: George Bakos <gbakos@alpinista.org>
-    Cc: Jay Schulist <jschlst@samba.org>
-    Cc: Jiri Pirko <jpirko@redhat.com>
-    Cc: Andi Kleen <ak@linux.intel.com>
-    Signed-off-by: David S. Miller <davem@davemloft.net>
-
-commit 3026fca84f0230d96693ba6d3e6089343874ca09
-Author: Daniel Borkmann <dxchgb@gmail.com>
-Date:   Mon Sep 24 07:34:51 2012 +0000
-
-    x86: bpf_jit_comp: add XOR instruction for BPF JIT
-
-    This patch is a follow-up for patch "filter: add XOR instruction for use
-    with X/K" that implements BPF x86 JIT parts for the BPF XOR operation.
-
-    Signed-off-by: Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch>
-    Acked-by: Eric Dumazet <edumazet@google.com>
-    Signed-off-by: David S. Miller <davem@davemloft.net>
-
-commit cf2f055d4abff198aaa0128aa06e458a6ff767d7
-Author: Eric Dumazet <edumazet@google.com>
-Date:   Mon Jun 4 21:26:30 2012 +0000
-
-    x86 bpf_jit: support BPF_S_ANC_ALU_XOR_X instruction
-
-    commit ffe06c17afbb  (filter: add XOR operation) added generic support
-    for XOR operation.
-
-    This patch implements the XOR instruction in x86 jit.
-
-    Signed-off-by: Eric Dumazet <edumazet@google.com>
-    Cc: Jiri Pirko <jpirko@redhat.com>
-    Signed-off-by: David S. Miller <davem@davemloft.net>
-
-commit e0d7a646c8684dac88c6ebbeb155313ad7fc624d
-Author: Jiri Pirko <jpirko@redhat.com>
-Date:   Sat Mar 31 11:01:20 2012 +0000
-
-    filter: add XOR operation
-
-    Add XOR instruction fo BPF machine. Needed for computing packet hashes.
-
-    Signed-off-by: Jiri Pirko <jpirko@redhat.com>
-    Signed-off-by: David S. Miller <davem@davemloft.net>
----
- arch/x86/net/bpf_jit_comp.c | 13 +++++++++++++
- include/linux/filter.h      | 11 ++++++++++-
- net/core/filter.c           | 25 +++++++++++++++++++++++++
- 3 files changed, 48 insertions(+), 1 deletion(-)
-
-diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
-index 0597f95..db99f9a 100644
---- a/arch/x86/net/bpf_jit_comp.c
-+++ b/arch/x86/net/bpf_jit_comp.c
-@@ -309,6 +309,19 @@ void bpf_jit_compile(struct sk_filter *fp)
- 				else
- 					EMIT1_off32(0x0d, K);	/* or imm32,%eax */
- 				break;
-+			case BPF_S_ANC_ALU_XOR_X: /* A ^= X; */
-+			case BPF_S_ALU_XOR_X:
-+				seen |= SEEN_XREG;
-+				EMIT2(0x31, 0xd8);		/* xor %ebx,%eax */
-+				break;
-+			case BPF_S_ALU_XOR_K: /* A ^= K; */
-+				if (K == 0)
-+					break;
-+				if (is_imm8(K))
-+					EMIT3(0x83, 0xf0, K);	/* xor imm8,%eax */
-+				else
-+					EMIT1_off32(0x35, K);	/* xor imm32,%eax */
-+				break;
- 			case BPF_S_ALU_LSH_X: /* A <<= X; */
- 				seen |= SEEN_XREG;
- 				EMIT4(0x89, 0xd9, 0xd3, 0xe0);	/* mov %ebx,%ecx; shl %cl,%eax */
-diff --git a/include/linux/filter.h b/include/linux/filter.h
-index 8eeb205..0031feb 100644
---- a/include/linux/filter.h
-+++ b/include/linux/filter.h
-@@ -73,6 +73,9 @@ struct sock_fprog {	/* Required for SO_ATTACH_FILTER. */
- #define         BPF_LSH         0x60
- #define         BPF_RSH         0x70
- #define         BPF_NEG         0x80
-+#define		BPF_MOD		0x90
-+#define		BPF_XOR		0xa0
-+
- #define         BPF_JA          0x00
- #define         BPF_JEQ         0x10
- #define         BPF_JGT         0x20
-@@ -126,7 +129,8 @@ struct sock_fprog {	/* Required for SO_ATTACH_FILTER. */
- #define SKF_AD_HATYPE	28
- #define SKF_AD_RXHASH	32
- #define SKF_AD_CPU	36
--#define SKF_AD_MAX	40
-+#define SKF_AD_ALU_XOR_X	40
-+#define SKF_AD_MAX	44
- #define SKF_NET_OFF   (-0x100000)
- #define SKF_LL_OFF    (-0x200000)
- 
-@@ -181,10 +185,14 @@ enum {
- 	BPF_S_ALU_MUL_K,
- 	BPF_S_ALU_MUL_X,
- 	BPF_S_ALU_DIV_X,
-+	BPF_S_ALU_MOD_K,
-+	BPF_S_ALU_MOD_X,
- 	BPF_S_ALU_AND_K,
- 	BPF_S_ALU_AND_X,
- 	BPF_S_ALU_OR_K,
- 	BPF_S_ALU_OR_X,
-+	BPF_S_ALU_XOR_K,
-+	BPF_S_ALU_XOR_X,
- 	BPF_S_ALU_LSH_K,
- 	BPF_S_ALU_LSH_X,
- 	BPF_S_ALU_RSH_K,
-@@ -228,6 +236,7 @@ enum {
- 	BPF_S_ANC_HATYPE,
- 	BPF_S_ANC_RXHASH,
- 	BPF_S_ANC_CPU,
-+	BPF_S_ANC_ALU_XOR_X,
- };
- 
- #endif /* __KERNEL__ */
-diff --git a/net/core/filter.c b/net/core/filter.c
-index 3b7398a..26c7bbe 100644
---- a/net/core/filter.c
-+++ b/net/core/filter.c
-@@ -158,6 +158,14 @@ unsigned int sk_run_filter(const struct sk_buff *skb,
- 		case BPF_S_ALU_DIV_K:
- 			A = reciprocal_divide(A, K);
- 			continue;
-+		case BPF_S_ALU_MOD_X:
-+			if (X == 0)
-+				return 0;
-+			A %= X;
-+			continue;
-+		case BPF_S_ALU_MOD_K:
-+			A %= K;
-+			continue;
- 		case BPF_S_ALU_AND_X:
- 			A &= X;
- 			continue;
-@@ -170,6 +178,13 @@ unsigned int sk_run_filter(const struct sk_buff *skb,
- 		case BPF_S_ALU_OR_K:
- 			A |= K;
- 			continue;
-+		case BPF_S_ANC_ALU_XOR_X:
-+		case BPF_S_ALU_XOR_X:
-+			A ^= X;
-+			continue;
-+		case BPF_S_ALU_XOR_K:
-+			A ^= K;
-+			continue;
- 		case BPF_S_ALU_LSH_X:
- 			A <<= X;
- 			continue;
-@@ -456,10 +471,14 @@ int sk_chk_filter(struct sock_filter *filter, unsigned int flen)
- 		[BPF_ALU|BPF_MUL|BPF_K]  = BPF_S_ALU_MUL_K,
- 		[BPF_ALU|BPF_MUL|BPF_X]  = BPF_S_ALU_MUL_X,
- 		[BPF_ALU|BPF_DIV|BPF_X]  = BPF_S_ALU_DIV_X,
-+		[BPF_ALU|BPF_MOD|BPF_K]  = BPF_S_ALU_MOD_K,
-+		[BPF_ALU|BPF_MOD|BPF_X]  = BPF_S_ALU_MOD_X,
- 		[BPF_ALU|BPF_AND|BPF_K]  = BPF_S_ALU_AND_K,
- 		[BPF_ALU|BPF_AND|BPF_X]  = BPF_S_ALU_AND_X,
- 		[BPF_ALU|BPF_OR|BPF_K]   = BPF_S_ALU_OR_K,
- 		[BPF_ALU|BPF_OR|BPF_X]   = BPF_S_ALU_OR_X,
-+		[BPF_ALU|BPF_XOR|BPF_K]  = BPF_S_ALU_XOR_K,
-+		[BPF_ALU|BPF_XOR|BPF_X]  = BPF_S_ALU_XOR_X,
- 		[BPF_ALU|BPF_LSH|BPF_K]  = BPF_S_ALU_LSH_K,
- 		[BPF_ALU|BPF_LSH|BPF_X]  = BPF_S_ALU_LSH_X,
- 		[BPF_ALU|BPF_RSH|BPF_K]  = BPF_S_ALU_RSH_K,
-@@ -518,6 +537,11 @@ int sk_chk_filter(struct sock_filter *filter, unsigned int flen)
- 				return -EINVAL;
- 			ftest->k = reciprocal_value(ftest->k);
- 			break;
-+		case BPF_S_ALU_MOD_K:
-+			/* check for division by zero */
-+			if (ftest->k == 0)
-+				return -EINVAL;
-+			break;
- 		case BPF_S_LD_MEM:
- 		case BPF_S_LDX_MEM:
- 		case BPF_S_ST:
-@@ -565,6 +589,7 @@ int sk_chk_filter(struct sock_filter *filter, unsigned int flen)
- 			ANCILLARY(HATYPE);
- 			ANCILLARY(RXHASH);
- 			ANCILLARY(CPU);
-+			ANCILLARY(ALU_XOR_X);
- 			}
- 		}
- 		ftest->code = code;
--- 
-2.1.1
-
diff --git a/core/linux-sun7i/0001-Backport-firmware-loader.patch b/core/linux-sun7i/0001-Backport-firmware-loader.patch
deleted file mode 100644
index f340ebda7..000000000
--- a/core/linux-sun7i/0001-Backport-firmware-loader.patch
+++ /dev/null
@@ -1,2620 +0,0 @@
-From c1715f7de4f2b7c42f432d4a7eb02f3f954d34ca Mon Sep 17 00:00:00 2001
-From: Kevin Mihelich <kevin@archlinuxarm.org>
-Date: Sat, 6 Dec 2014 10:44:46 -0700
-Subject: [PATCH] Backport firmware loader
-
-commit 390ac45ceb37d70308194820e25b1cb885b67260
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Fri Aug 17 22:06:59 2012 +0800
-
-    PM / Sleep: introduce dpm_for_each_dev
-
-    dpm_list and its pm lock provide a good way to iterate all
-    devices in system. Except this way, there is no other easy
-    way to iterate devices in system.
-
-    firmware loader need to cache firmware images for devices
-    before system sleep, so introduce the function to meet its
-    demand.
-
-    Reported-by: Fengguang Wu <fengguang.wu@intel.com>
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 1dc17a9704a49c008a8d4cd8bdf03eccc54bcf84
-Author: Kevin Mihelich <kevin@archlinuxarm.org>
-Date:   Wed Nov 26 13:03:08 2014 -0700
-
-    Revert "firmware loader: sync firmware cache by async_synchronize_full_domain"
-
-    This reverts commit d28d3882bd1fdb88ae4e02f11b091a92b0e5068b.
-
-commit 6cf1b1b3016fb279d6a866151e75c94986be032b
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:26 2012 +0800
-
-    driver core: devres: introduce devres_for_each_res
-
-    This patch introduces one devres API of devres_for_each_res
-    so that the device's driver can iterate each resource it has
-    interest in.
-
-    The firmware loader will use the API to get each firmware name
-    from the device instance.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 9373da78351d15876f7508734147c25fa018f512
-Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
-Date:   Thu May 3 18:15:13 2012 +0100
-
-    devres: Add devres_release()
-
-    APIs using devres frequently want to implement a "remove and free the
-    resource" operation so it seems sensible that they should be able to
-    just have devres do the freeing for them since that's a big part of what
-    devres is all about.
-
-    Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 6183261d20682701b6ddd189060da4f8325e775c
-Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
-Date:   Thu May 3 18:15:12 2012 +0100
-
-    devres: Clarify documentation for devres_destroy()
-
-    It's not massively obvious (at least to me) that removing and freeing a
-    resource does not involve calling the release function for the resource
-    but rather only removes the management of it. Make the documentation more
-    explicit.
-
-    Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit bf4725b4926af17c246faf3b6dda250890b3e1ae
-Author: Takashi Iwai <tiwai@suse.de>
-Date:   Thu Jan 31 11:13:57 2013 +0100
-
-    firmware: Ignore abort check when no user-helper is used
-
-    FW_STATUS_ABORT can be set only during the user-helper invocation,
-    thus we can ignore the check when CONFIG_HW_LOADER_USER_HELPER is
-    disabled.
-
-    Acked-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Takashi Iwai <tiwai@suse.de>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 5d5c8b23919037f575fb6370d87b875c86793834
-Author: Takashi Iwai <tiwai@suse.de>
-Date:   Thu Jan 31 11:13:56 2013 +0100
-
-    firmware: Reduce ifdef CONFIG_FW_LOADER_USER_HELPER
-
-    By shuffling the code, reduce a few ifdefs in firmware_class.c.
-    Also, firmware_buf fmt field is changed to is_pages_buf boolean for
-    simplification.
-
-    Acked-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Takashi Iwai <tiwai@suse.de>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 861d2fc3539af167b5c4c9e81b5bf67300465cef
-Author: Takashi Iwai <tiwai@suse.de>
-Date:   Thu Jan 31 11:13:55 2013 +0100
-
-    firmware: Make user-mode helper optional
-
-    This patch adds a new kconfig, CONFIG_FW_LOADER_USER_HELPER, and
-    guards the user-helper codes in firmware_class.c with ifdefs.
-
-    Yeah, yeah, there are lots of ifdefs in this patch.  The further
-    clean-up with code shuffling follows in the next.
-
-    Acked-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Takashi Iwai <tiwai@suse.de>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit eb2e7c184b7e7bf2ae1968bd32c4354d28c75e69
-Author: Takashi Iwai <tiwai@suse.de>
-Date:   Thu Jan 31 11:13:54 2013 +0100
-
-    firmware: Refactoring for splitting user-mode helper code
-
-    Since 3.7 kernel, the firmware loader can read the firmware files
-    directly, and the traditional user-mode helper is invoked only as a
-    fallback.  This seems working pretty well, and the next step would be
-    to reduce the redundant user-mode helper stuff in future.
-
-    This patch is a preparation for that: refactor the code for splitting
-    user-mode helper stuff more easily.  No functional change.
-
-    Acked-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Takashi Iwai <tiwai@suse.de>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 542061e36122107363fcf7c9aeffa957dee8bffc
-Author: Luciano Coelho <coelho@ti.com>
-Date:   Tue Jan 15 10:43:43 2013 +0200
-
-    firmware: make sure the fw file size is not 0
-
-    If the requested firmware file size is 0 bytes in the filesytem, we
-    will try to vmalloc(0), which causes a warning:
-
-      vmalloc: allocation failure: 0 bytes
-      kworker/1:1: page allocation failure: order:0, mode:0xd2
-        __vmalloc_node_range+0x164/0x208
-        __vmalloc_node+0x4c/0x58
-        vmalloc+0x38/0x44
-        _request_firmware_load+0x220/0x6b0
-        request_firmware+0x64/0xc8
-        wl18xx_setup+0xb4/0x570 [wl18xx]
-        wlcore_nvs_cb+0x64/0x9f8 [wlcore]
-        request_firmware_work_func+0x94/0x100
-        process_one_work+0x1d0/0x750
-        worker_thread+0x184/0x4ac
-        kthread+0xb4/0xc0
-
-    To fix this, check whether the file size is less than or equal to zero
-    in fw_read_file_contents().
-
-    Cc: stable <stable@vger.kernel.org> [3.7]
-    Signed-off-by: Luciano Coelho <coelho@ti.com>
-    Acked-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-
-commit 906aa734d888dfeb855d50ebdaa1abafb4e16880
-Author: Ming Lei <tom.leiming@gmail.com>
-Date:   Sat Nov 3 17:48:16 2012 +0800
-
-    firmware loader: document firmware cache mechanism
-
-    This patch documents the firmware cache mechanism so that
-    users of request_firmware() know that it can be called
-    safely inside device's suspend and resume callback, and
-    the device's firmware needn't be cached any more by individual
-    driver itself to deal with firmware loss during system resume.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 2a2f0be2bb74403c0079a823271e6ff7c2434735
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Nov 3 17:47:58 2012 +0800
-
-    firmware loader: introduce module parameter to customize(v4) fw search path
-
-    This patch introduces one module parameter of 'path' in firmware_class
-    to support customizing firmware image search path, so that people can
-    use its own firmware path if the default built-in paths can't meet their
-    demand[1], and the typical usage is passing the below from kernel command
-    parameter when 'firmware_class' is built in kernel:
-
-    	firmware_class.path=$CUSTOMIZED_PATH
-
-    [1], https://lkml.org/lkml/2012/10/11/337
-
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-    Conflicts:
-    	Documentation/firmware_class/README
-
-commit d6c6925a1c5091163df48d68ba38d2ec2003302e
-Author: Cesar Eduardo Barros <cesarb@cesarb.net>
-Date:   Sat Oct 27 20:37:10 2012 -0200
-
-    firmware: use noinline_for_stack
-
-    The comment above fw_file_size() suggests it is noinline for stack size
-    reasons. Use noinline_for_stack to make this more clear.
-
-    Signed-off-by: Cesar Eduardo Barros <cesarb@cesarb.net>
-    Acked-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit f0d798c22f43f008b0b86ff58f2c68b522f1be90
-Author: Chuansheng Liu <chuansheng.liu@intel.com>
-Date:   Sat Nov 10 01:27:22 2012 +0800
-
-    firmware loader: Fix the concurrent request_firmware() race for kref_get/put
-
-    There is one race that both request_firmware() with the same
-    firmware name.
-
-    The race scenerio is as below:
-    CPU1                                                  CPU2
-    request_firmware() -->
-    _request_firmware_load() return err                   another request_firmware() is coming -->
-    _request_firmware_cleanup is called -->               _request_firmware_prepare -->
-    release_firmware --->                                 fw_lookup_and_allocate_buf -->
-                                                          spin_lock(&fwc->lock)
-    ...                                                   __fw_lookup_buf() return true
-    fw_free_buf() will be called -->                      ...
-    kref_put -->
-    decrease the refcount to 0
-                                                          kref_get(&tmp->ref) ==> it will trigger warning
-                                                                                  due to refcount == 0
-    __fw_free_buf() -->
-    ...                                                   spin_unlock(&fwc->lock)
-    spin_lock(&fwc->lock)
-    list_del(&buf->list)
-    spin_unlock(&fwc->lock)
-    kfree(buf)
-                                                          After that, the freed buf will be used.
-
-    The key race is decreasing refcount to 0 and list_del is not protected together by
-    fwc->lock, and it is possible another thread try to get it between refcount==0
-    and list_del.
-
-    Fix it here to protect it together.
-
-    Acked-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: liu chuansheng <chuansheng.liu@intel.com>
-    Cc: stable <stable@vger.kernel.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 58af61921c9d1f6a8ffa097043bf78a2ff0bc44e
-Author: Chuansheng Liu <chuansheng.liu@intel.com>
-Date:   Thu Nov 8 19:14:40 2012 +0800
-
-    firmware loader: Fix the race FW_STATUS_DONE is followed by class_timeout
-
-    There is a race as below when calling request_firmware():
-    CPU1                                   CPU2
-    write 0 > loading
-    mutex_lock(&fw_lock)
-    ...
-    set_bit FW_STATUS_DONE                 class_timeout is coming
-                                           set_bit FW_STATUS_ABORT
-    complete_all &completion
-    ...
-    mutex_unlock(&fw_lock)
-
-    In this time, the bit FW_STATUS_DONE and FW_STATUS_ABORT are set,
-    and request_firmware() will return failure due to condition in
-    _request_firmware_load():
-    	if (!buf->size || test_bit(FW_STATUS_ABORT, &buf->status))
-    		retval = -ENOENT;
-
-    But from the above scenerio, it should be a successful requesting.
-    So we need judge if the bit FW_STATUS_DONE is already set before
-    calling fw_load_abort() in timeout function.
-
-    As Ming's proposal, we need change the timer into sched_work to
-    benefit from using &fw_lock mutex also.
-
-    Signed-off-by: liu chuansheng <chuansheng.liu@intel.com>
-    Acked-by: Ming Lei <ming.lei@canonical.com>
-    Cc: stable <stable@vger.kernel.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit c6a3b74d6c42ca8aead23788768cdd358f672ed3
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Tue Oct 9 12:01:04 2012 +0800
-
-    firmware loader: sync firmware cache by async_synchronize_full_domain
-
-    async.c has provided synchronization mechanism on async_schedule_*,
-    so use async_synchronize_full_domain to sync caching firmware instead
-    of reinventing the wheel.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 9a27bd527d58a887a65bad24fd864122f860ef79
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Tue Oct 9 12:01:03 2012 +0800
-
-    firmware loader: let direct loading back on 'firmware_buf'
-
-    Firstly 'firmware_buf' is introduced to make all loading requests
-    to share one firmware kernel buffer, so firmware_buf should
-    be used in direct loading for saving memory and speedup firmware
-    loading.
-
-    Secondly, the commit below
-
-    	abb139e75c2cdbb955e840d6331cb5863e409d0e(firmware:teach
-    	the kernel to load firmware files directly from the filesystem)
-
-    introduces direct loading for fixing udev regression, but it
-    bypasses the firmware cache meachnism, so this patch enables
-    caching firmware for direct loading case since it is still needed
-    to solve drivers' dependency during system resume.
-
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 451768e107b4bd2beb054f3ec44b666910a8f6ce
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Tue Oct 9 12:01:02 2012 +0800
-
-    firmware loader: fix one reqeust_firmware race
-
-    Several loading requests may be pending on one same
-    firmware buf, and this patch moves fw_map_pages_buf()
-    before complete_all(&fw_buf->completion) and let all
-    requests see the mapped 'buf->data' once the loading
-    is completed.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 31159a04875c46fe2f8634479f5c2c07b3ebd6aa
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Tue Oct 9 12:01:01 2012 +0800
-
-    firmware loader: cancel uncache work before caching firmware
-
-    Under 'Opportunistic sleep' situation, system sleep might be
-    triggered very frequently, so the uncahce work may not be completed
-    before caching firmware during next suspend.
-
-    This patch cancels the uncache work before caching firmware to
-    fix the problem above.
-
-    Also this patch optimizes the cacheing firmware mechanism a bit by
-    only storing one firmware cache entry for one firmware image.
-
-    So if the firmware is still cached during suspend, it doesn't need
-    to be loaded from user space any more.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 4c7559d930c34c76a33b51f413c13f27367e95ff
-Author: Linus Torvalds <torvalds@linux-foundation.org>
-Date:   Thu Oct 4 09:19:02 2012 -0700
-
-    firmware: use 'kernel_read()' to read firmware into kernel buffer
-
-    Fengguang correctly points out that the firmware reading should not use
-    vfs_read(), since the buffer is in kernel space.
-
-    The vfs_read() just happened to work for kernel threads, but sparse
-    warns about the incorrect address spaces, and it's definitely incorrect
-    and could fail for other users of the firmware loading.
-
-    Reported-by: Fengguang Wu <fengguang.wu@intel.com>
-    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-
-commit 2047dd6d95ac6066e518c26cb5133f4787aefb52
-Author: Linus Torvalds <torvalds@linux-foundation.org>
-Date:   Wed Oct 3 15:58:32 2012 -0700
-
-    firmware: teach the kernel to load firmware files directly from the filesystem
-
-    This is a first step in allowing people to by-pass udev for loading
-    device firmware.  Current versions of udev will deadlock (causing us to
-    block for the 30 second timeout) under some circumstances if the
-    firmware is loaded as part of the module initialization path, and this
-    is causing problems for media drivers in particular.
-
-    The current patch hardcodes the firmware path that udev uses by default,
-    and will fall back to the legacy udev mode if the firmware cannot be
-    found there.  We'd like to add support for both configuring the paths
-    and the fallback behaviour, but in the meantime this hopefully fixes the
-    immediate problem, while also giving us a way forward.
-
-    [ v2: Some VFS layer interface cleanups suggested by Al Viro ]
-    [ v3: use the default udev paths suggested by Kay Sievers ]
-
-    Suggested-by: Ivan Kalvachev <ikalvachev@gmail.com>
-    Acked-by: Greg KH <gregkh@linuxfoundation.org>
-    Acked-by: Al Viro <viro@zeniv.linux.org.uk>
-    Cc: Mauro Carvalho Chehab <mchehab@redhat.com>
-    Cc: Kay Sievers <kay@redhat.com>
-    Cc: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-
-commit 7dc9f6ac529be96085a096c440823fe49f95f1cd
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Sep 8 17:32:30 2012 +0800
-
-    firmware loader: fix compile warning when CONFIG_PM=n
-
-    This patch replaces the previous macro of CONFIG_PM with
-    CONFIG_PM_SLEEP becasue firmware cache is only used in
-    system sleep situations.
-
-    Also this patch fixes the below compile warning when
-    CONFIG_PM=n:
-
-    	drivers/base/firmware_class.c:1147: warning: 'device_cache_fw_images'
-    	defined but not used
-    	drivers/base/firmware_class.c:1212: warning:
-    	'device_uncache_fw_images_delay' defined but not used
-
-    Reported-by: Andrew Morton <akpm@linux-foundation.org>
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit d4da2957c44390959fea1003188f449b3f38aba3
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Mon Aug 20 19:04:16 2012 +0800
-
-    firmware loader: let caching firmware piggyback on loading firmware
-
-    After starting caching firmware, there is still some time left
-    before devices are suspended, during the period, request_firmware
-    or its nowait version may still be triggered by the below situations
-    to load firmware images which can't be cached during suspend/resume
-    cycle.
-
-    	- new devices added
-    	- driver bind
-    	- or device open kind of things
-
-    This patch utilizes the piggyback trick to cache firmware for
-    this kind of situation: just increase the firmware buf's reference
-    count and add the fw name entry into cache entry list after starting
-    caching firmware and before syscore_suspend() is called.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 580eb13b0fb703c49e729d42c313dc901145c278
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Mon Aug 20 19:04:15 2012 +0800
-
-    firmware loader: fix firmware -ENOENT situations
-
-    If the requested firmware image doesn't exist, firmware->priv
-    should be set for the later concurrent requests, otherwise
-    warning and oops will be triggered inside firmware_free_data().
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 529f2b00940c82abdf17bdc902e2b02d1904a789
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Fri Aug 17 22:07:00 2012 +0800
-
-    firmware loader: fix build failure if FW_LOADER is m
-
-    device_cache_fw_images need to iterate devices in system,
-    so this patch applies the introduced dpm_for_each_dev to
-    avoid link failure if CONFIG_FW_LOADER is m.
-
-    Reported-by: Fengguang Wu <fengguang.wu@intel.com>
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit e51f2ca3d0d22b9cd08b6262d6e8423888a339e6
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Fri Aug 17 22:06:58 2012 +0800
-
-    firmware loader: fix compile failure if !PM
-
-    'return 0' should be added to fw_pm_notify if !PM because
-    return value of the funcion is defined as 'int'.
-
-    Reported-by: Fengguang Wu <fengguang.wu@intel.com>
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 402bbcd0a468c1388fe9fd98a6bd0d4d57f1f5e4
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:29 2012 +0800
-
-    firmware loader: cache devices firmware during suspend/resume cycle
-
-    This patch implements caching devices' firmware automatically
-    during system syspend/resume cycle, so any device drivers can
-    call request_firmware or request_firmware_nowait inside resume
-    path to get the cached firmware if they have loaded firmwares
-    successfully at least once before entering suspend.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 6b5ef252737d7e46cee1471de1f8f778816ed432
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:28 2012 +0800
-
-    firmware loader: use small timeout for cache device firmware
-
-    Because device_cache_fw_images only cache the firmware which has been
-    loaded sucessfully at leat once, using a small loading timeout should
-    be reasonable.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 3a78247eb488608da2dbf2c0b5f312abc7fb36bf
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:27 2012 +0800
-
-    firmware: introduce device_cache/uncache_fw_images
-
-    This patch introduces the three helpers below:
-
-    	void device_cache_fw_images(void)
-    	void device_uncache_fw_images(void)
-    	void device_uncache_fw_images_delay(unsigned long)
-
-    so we can use device_cache_fw_images() to cache firmware for
-    all devices which need firmware to work, and the device driver
-    can get the firmware easily from kernel memory when system isn't
-    ready for completing requests of loading firmware.
-
-    After system is ready for completing firmware loading, driver core
-    will call device_uncache_fw_images() or its delay version to free
-    the cached firmware.
-
-    The above helpers will be used to cache device firmware during
-    system suspend/resume cycle in the following patches.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit fec2fa2ad35e9b5ac3b556b57f2ce0d93d88dad3
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:25 2012 +0800
-
-    firmware loader: store firmware name into devres list
-
-    This patch will store firmware name into devres list of the device
-    which is requesting firmware loading, so that we can implement
-    auto cache and uncache firmware for devices in need.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 82502e82fdb519661d280f9a2ff7888a7e11719d
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:24 2012 +0800
-
-    firmware loader: fix comments on request_firmware_nowait
-
-    request_firmware_nowait is allowed to be called in atomic
-    context now if @gfp is GFP_ATOMIC, so fix the obsolete
-    comments and states which situations are suitable for using
-    it.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 885f2a4d3e79590a5ac56c600ef21c7f33edf1ff
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:23 2012 +0800
-
-    firmware loader: fix device lifetime
-
-    Callers of request_firmware* must hold the reference count of
-    @device, otherwise it is easy to trigger oops since the firmware
-    loader device is the child of @device.
-
-    This patch adds comments about the usage. In fact, most of drivers
-    call request_firmware* in its probe() or open(), so the constraint
-    should be reasonable and can be satisfied.
-
-    Also this patch holds the reference count of @device before
-    schedule_work() in request_firmware_nowait() to avoid that
-    the @device is released after request_firmware_nowait returns
-    and before the worker function is scheduled.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit f8c40c19896e07c5e24596d1c73e0004b83bf564
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:22 2012 +0800
-
-    firmware loader: introduce cache_firmware and uncache_firmware
-
-    This patches introduce two kernel APIs of cache_firmware and
-    uncache_firmware, both of which take the firmware file name
-    as the only parameter.
-
-    So any drivers can call cache_firmware to cache the specified
-    firmware file into kernel memory, and can use the cached firmware
-    in situations which can't request firmware from user space.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 33f7f4606f2add663f0f055d9e22224b2ed927e6
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:21 2012 +0800
-
-    firmware loader: always let firmware_buf own the pages buffer
-
-    This patch always let firmware_buf own the pages buffer allocated
-    inside firmware_data_write, and add all instances of firmware_buf
-    into the firmware cache global list. Also introduce one private field
-    in 'struct firmware', so release_firmware will see the instance of
-    firmware_buf associated with the current firmware instance, then just
-    'free' the instance of firmware_buf.
-
-    The firmware_buf instance represents one pages buffer for one
-    firmware image, so lots of firmware loading requests can share
-    the same firmware_buf instance if they request the same firmware
-    image file.
-
-    This patch will make implementation of the following cache_firmware/
-    uncache_firmware very easy and simple.
-
-    In fact, the patch improves request_formware/release_firmware:
-
-            - only request userspace to write firmware image once if
-    	several devices share one same firmware image and its drivers
-    	call request_firmware concurrently.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 23f444643c50ab3dc66e2cd699ef03d90dbdccc8
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:20 2012 +0800
-
-    firmware loader: introduce firmware_buf
-
-    This patch introduces struct firmware_buf to describe the buffer
-    which holds the firmware data, which will make the following
-    cache_firmware/uncache_firmware implemented easily.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit c341f46309619686830be4b608c9db06b68bafc1
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:19 2012 +0800
-
-    firmware loader: fix creation failure of fw loader device
-
-    If one device driver calls request_firmware_nowait() to request
-    several different firmwares' loading, device_add() will return
-    failure since all firmware loader device use same name of the
-    device who is requesting firmware.
-
-    This patch always use the name of firmware image as the firmware
-    loader device name to fix the problem since the following patches
-    for caching firmware will make sure only one loading for same
-    firmware is alllowd at the same time.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit fca2060e5dac12511c0860878e89e0e5ad8e7a3e
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:18 2012 +0800
-
-    firmware loader: remove unnecessary wmb()
-
-    The wmb() inside fw_load_abort is not necessary, since
-    complete() and wait_on_completion() has implied one pair
-    of memory barrier.
-
-    Also wmb() isn't a correct usage, so just remove it.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit 4eaaa8782ff182e0de3ac050aeb0305879dc89eb
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:17 2012 +0800
-
-    firmware loader: fix races during loading firmware
-
-    This patch fixes two races in loading firmware:
-
-    1, FW_STATUS_DONE should be set before waking up the task waitting
-    on _request_firmware_load, otherwise FW_STATUS_ABORT may be
-    thought as DONE mistakenly.
-
-    2, Inside _request_firmware_load(), there is a small window between
-    wait_for_completion() and mutex_lock(&fw_lock), and 'echo 1 > loading'
-    still may happen during the period, so this patch checks FW_STATUS_DONE
-    to prevent pages' buffer completed from being freed in firmware_loading_store.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit dc3ca115481cc50a7d4aa866f607b470280b1e5e
-Author: Ming Lei <ming.lei@canonical.com>
-Date:   Sat Aug 4 12:01:16 2012 +0800
-
-    firmware loader: simplify pages ownership transfer
-
-    This patch doesn't transfer ownership of pages' buffer to the
-    instance of firmware until the firmware loading is completed,
-    which will simplify firmware_loading_store a lot, so help
-    to introduce the following cache_firmware and uncache_firmware
-    mechanism during system suspend-resume cycle.
-
-    In fact, this patch fixes one bug: if writing data into
-    firmware loader device is bypassed between writting 1 and 0 to
-    'loading', OOPS will be triggered without the patch.
-
-    Also handle the vmap failure case, and add some comments to make
-    code more readable.
-
-    Signed-off-by: Ming Lei <ming.lei@canonical.com>
-    Cc: Linus Torvalds <torvalds@linux-foundation.org>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
-commit e728c819e3666bb37e08a49255b24e6933bb72e5
-Author: Lars-Peter Clausen <lars@metafoo.de>
-Date:   Tue Jul 3 18:49:36 2012 +0200
-
-    driver-core: Use kobj_to_dev instead of re-implementing it
-
-    Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
-    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- Documentation/firmware_class/README |    7 +
- drivers/base/Kconfig                |   11 +
- drivers/base/core.c                 |   17 +-
- drivers/base/devres.c               |   77 +++
- drivers/base/firmware_class.c       | 1216 +++++++++++++++++++++++++++++------
- drivers/base/power/main.c           |   22 +
- include/linux/device.h              |    6 +
- include/linux/firmware.h            |   15 +
- include/linux/pm.h                  |    5 +
- 9 files changed, 1177 insertions(+), 199 deletions(-)
-
-diff --git a/Documentation/firmware_class/README b/Documentation/firmware_class/README
-index 7eceaff..5fde1ef 100644
---- a/Documentation/firmware_class/README
-+++ b/Documentation/firmware_class/README
-@@ -106,3 +106,10 @@
-    on the setup, so I think that the choice on what firmware to make
-    persistent should be left to userspace.
- 
-+ about firmware cache:
-+ --------------------
-+ After firmware cache mechanism is introduced during system sleep,
-+ request_firmware can be called safely inside device's suspend and
-+ resume callback, and callers need't cache the firmware by
-+ themselves any more for dealing with firmware loss during system
-+ resume.
-diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
-index 7c96a3a..b7af956 100644
---- a/drivers/base/Kconfig
-+++ b/drivers/base/Kconfig
-@@ -145,6 +145,17 @@ config EXTRA_FIRMWARE_DIR
- 	  this option you can point it elsewhere, such as /lib/firmware/ or
- 	  some other directory containing the firmware files.
- 
-+config FW_LOADER_USER_HELPER
-+	bool "Fallback user-helper invocation for firmware loading"
-+	depends on FW_LOADER
-+	default y
-+	help
-+	  This option enables / disables the invocation of user-helper
-+	  (e.g. udev) for loading firmware files as a fallback after the
-+	  direct file loading in kernel fails.  The user-mode helper is
-+	  no longer required unless you have a special firmware file that
-+	  resides in a non-standard path.
-+
- config DEBUG_DRIVER
- 	bool "Driver Core verbose debug messages"
- 	depends on DEBUG_KERNEL
-diff --git a/drivers/base/core.c b/drivers/base/core.c
-index f428321..c360a22 100644
---- a/drivers/base/core.c
-+++ b/drivers/base/core.c
-@@ -84,14 +84,13 @@ const char *dev_driver_string(const struct device *dev)
- }
- EXPORT_SYMBOL(dev_driver_string);
- 
--#define to_dev(obj) container_of(obj, struct device, kobj)
- #define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr)
- 
- static ssize_t dev_attr_show(struct kobject *kobj, struct attribute *attr,
- 			     char *buf)
- {
- 	struct device_attribute *dev_attr = to_dev_attr(attr);
--	struct device *dev = to_dev(kobj);
-+	struct device *dev = kobj_to_dev(kobj);
- 	ssize_t ret = -EIO;
- 
- 	if (dev_attr->show)
-@@ -107,7 +106,7 @@ static ssize_t dev_attr_store(struct kobject *kobj, struct attribute *attr,
- 			      const char *buf, size_t count)
- {
- 	struct device_attribute *dev_attr = to_dev_attr(attr);
--	struct device *dev = to_dev(kobj);
-+	struct device *dev = kobj_to_dev(kobj);
- 	ssize_t ret = -EIO;
- 
- 	if (dev_attr->store)
-@@ -181,7 +180,7 @@ EXPORT_SYMBOL_GPL(device_show_int);
-  */
- static void device_release(struct kobject *kobj)
- {
--	struct device *dev = to_dev(kobj);
-+	struct device *dev = kobj_to_dev(kobj);
- 	struct device_private *p = dev->p;
- 
- 	if (dev->release)
-@@ -199,7 +198,7 @@ static void device_release(struct kobject *kobj)
- 
- static const void *device_namespace(struct kobject *kobj)
- {
--	struct device *dev = to_dev(kobj);
-+	struct device *dev = kobj_to_dev(kobj);
- 	const void *ns = NULL;
- 
- 	if (dev->class && dev->class->ns_type)
-@@ -220,7 +219,7 @@ static int dev_uevent_filter(struct kset *kset, struct kobject *kobj)
- 	struct kobj_type *ktype = get_ktype(kobj);
- 
- 	if (ktype == &device_ktype) {
--		struct device *dev = to_dev(kobj);
-+		struct device *dev = kobj_to_dev(kobj);
- 		if (dev->bus)
- 			return 1;
- 		if (dev->class)
-@@ -231,7 +230,7 @@ static int dev_uevent_filter(struct kset *kset, struct kobject *kobj)
- 
- static const char *dev_uevent_name(struct kset *kset, struct kobject *kobj)
- {
--	struct device *dev = to_dev(kobj);
-+	struct device *dev = kobj_to_dev(kobj);
- 
- 	if (dev->bus)
- 		return dev->bus->name;
-@@ -243,7 +242,7 @@ static const char *dev_uevent_name(struct kset *kset, struct kobject *kobj)
- static int dev_uevent(struct kset *kset, struct kobject *kobj,
- 		      struct kobj_uevent_env *env)
- {
--	struct device *dev = to_dev(kobj);
-+	struct device *dev = kobj_to_dev(kobj);
- 	int retval = 0;
- 
- 	/* add device node properties if present */
-@@ -1131,7 +1130,7 @@ int device_register(struct device *dev)
-  */
- struct device *get_device(struct device *dev)
- {
--	return dev ? to_dev(kobject_get(&dev->kobj)) : NULL;
-+	return dev ? kobj_to_dev(kobject_get(&dev->kobj)) : NULL;
- }
- 
- /**
-diff --git a/drivers/base/devres.c b/drivers/base/devres.c
-index 524bf96..8731979 100644
---- a/drivers/base/devres.c
-+++ b/drivers/base/devres.c
-@@ -144,6 +144,48 @@ EXPORT_SYMBOL_GPL(devres_alloc);
- #endif
- 
- /**
-+ * devres_for_each_res - Resource iterator
-+ * @dev: Device to iterate resource from
-+ * @release: Look for resources associated with this release function
-+ * @match: Match function (optional)
-+ * @match_data: Data for the match function
-+ * @fn: Function to be called for each matched resource.
-+ * @data: Data for @fn, the 3rd parameter of @fn
-+ *
-+ * Call @fn for each devres of @dev which is associated with @release
-+ * and for which @match returns 1.
-+ *
-+ * RETURNS:
-+ * 	void
-+ */
-+void devres_for_each_res(struct device *dev, dr_release_t release,
-+			dr_match_t match, void *match_data,
-+			void (*fn)(struct device *, void *, void *),
-+			void *data)
-+{
-+	struct devres_node *node;
-+	struct devres_node *tmp;
-+	unsigned long flags;
-+
-+	if (!fn)
-+		return;
-+
-+	spin_lock_irqsave(&dev->devres_lock, flags);
-+	list_for_each_entry_safe_reverse(node, tmp,
-+			&dev->devres_head, entry) {
-+		struct devres *dr = container_of(node, struct devres, node);
-+
-+		if (node->release != release)
-+			continue;
-+		if (match && !match(dev, dr->data, match_data))
-+			continue;
-+		fn(dev, dr->data, data);
-+	}
-+	spin_unlock_irqrestore(&dev->devres_lock, flags);
-+}
-+EXPORT_SYMBOL_GPL(devres_for_each_res);
-+
-+/**
-  * devres_free - Free device resource data
-  * @res: Pointer to devres data to free
-  *
-@@ -309,6 +351,10 @@ EXPORT_SYMBOL_GPL(devres_remove);
-  * which @match returns 1.  If @match is NULL, it's considered to
-  * match all.  If found, the resource is removed atomically and freed.
-  *
-+ * Note that the release function for the resource will not be called,
-+ * only the devres-allocated data will be freed.  The caller becomes
-+ * responsible for freeing any other data.
-+ *
-  * RETURNS:
-  * 0 if devres is found and freed, -ENOENT if not found.
-  */
-@@ -326,6 +372,37 @@ int devres_destroy(struct device *dev, dr_release_t release,
- }
- EXPORT_SYMBOL_GPL(devres_destroy);
- 
-+
-+/**
-+ * devres_release - Find a device resource and destroy it, calling release
-+ * @dev: Device to find resource from
-+ * @release: Look for resources associated with this release function
-+ * @match: Match function (optional)
-+ * @match_data: Data for the match function
-+ *
-+ * Find the latest devres of @dev associated with @release and for
-+ * which @match returns 1.  If @match is NULL, it's considered to
-+ * match all.  If found, the resource is removed atomically, the
-+ * release function called and the resource freed.
-+ *
-+ * RETURNS:
-+ * 0 if devres is found and freed, -ENOENT if not found.
-+ */
-+int devres_release(struct device *dev, dr_release_t release,
-+		   dr_match_t match, void *match_data)
-+{
-+	void *res;
-+
-+	res = devres_remove(dev, release, match, match_data);
-+	if (unlikely(!res))
-+		return -ENOENT;
-+
-+	(*release)(dev, res);
-+	devres_free(res);
-+	return 0;
-+}
-+EXPORT_SYMBOL_GPL(devres_release);
-+
- static int remove_nodes(struct device *dev,
- 			struct list_head *first, struct list_head *end,
- 			struct list_head *todo)
-diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
-index 5401814..15b36b7 100644
---- a/drivers/base/firmware_class.c
-+++ b/drivers/base/firmware_class.c
-@@ -21,8 +21,16 @@
- #include <linux/firmware.h>
- #include <linux/slab.h>
- #include <linux/sched.h>
-+#include <linux/file.h>
-+#include <linux/list.h>
-+#include <linux/async.h>
-+#include <linux/pm.h>
-+#include <linux/suspend.h>
-+#include <linux/syscore_ops.h>
- 
--#define to_dev(obj) container_of(obj, struct device, kobj)
-+#include <generated/utsrelease.h>
-+
-+#include "base.h"
- 
- MODULE_AUTHOR("Manuel Estrada Sainz");
- MODULE_DESCRIPTION("Multi purpose firmware loading support");
-@@ -87,23 +95,354 @@ static inline long firmware_loading_timeout(void)
- 	return loading_timeout > 0 ? loading_timeout * HZ : MAX_SCHEDULE_TIMEOUT;
- }
- 
--/* fw_lock could be moved to 'struct firmware_priv' but since it is just
-- * guarding for corner cases a global lock should be OK */
--static DEFINE_MUTEX(fw_lock);
-+struct firmware_cache {
-+	/* firmware_buf instance will be added into the below list */
-+	spinlock_t lock;
-+	struct list_head head;
-+	int state;
-+
-+#ifdef CONFIG_PM_SLEEP
-+	/*
-+	 * Names of firmware images which have been cached successfully
-+	 * will be added into the below list so that device uncache
-+	 * helper can trace which firmware images have been cached
-+	 * before.
-+	 */
-+	spinlock_t name_lock;
-+	struct list_head fw_names;
-+
-+	wait_queue_head_t wait_queue;
-+	int cnt;
-+	struct delayed_work work;
-+
-+	struct notifier_block   pm_notify;
-+#endif
-+};
- 
--struct firmware_priv {
-+struct firmware_buf {
-+	struct kref ref;
-+	struct list_head list;
- 	struct completion completion;
--	struct firmware *fw;
-+	struct firmware_cache *fwc;
- 	unsigned long status;
-+	void *data;
-+	size_t size;
-+#ifdef CONFIG_FW_LOADER_USER_HELPER
-+	bool is_paged_buf;
- 	struct page **pages;
- 	int nr_pages;
- 	int page_array_size;
--	struct timer_list timeout;
--	struct device dev;
--	bool nowait;
-+#endif
- 	char fw_id[];
- };
- 
-+struct fw_cache_entry {
-+	struct list_head list;
-+	char name[];
-+};
-+
-+struct fw_name_devm {
-+	unsigned long magic;
-+	char name[];
-+};
-+
-+#define to_fwbuf(d) container_of(d, struct firmware_buf, ref)
-+
-+#define	FW_LOADER_NO_CACHE	0
-+#define	FW_LOADER_START_CACHE	1
-+
-+static int fw_cache_piggyback_on_request(const char *name);
-+
-+/* fw_lock could be moved to 'struct firmware_priv' but since it is just
-+ * guarding for corner cases a global lock should be OK */
-+static DEFINE_MUTEX(fw_lock);
-+
-+static struct firmware_cache fw_cache;
-+
-+static struct firmware_buf *__allocate_fw_buf(const char *fw_name,
-+					      struct firmware_cache *fwc)
-+{
-+	struct firmware_buf *buf;
-+
-+	buf = kzalloc(sizeof(*buf) + strlen(fw_name) + 1 , GFP_ATOMIC);
-+
-+	if (!buf)
-+		return buf;
-+
-+	kref_init(&buf->ref);
-+	strcpy(buf->fw_id, fw_name);
-+	buf->fwc = fwc;
-+	init_completion(&buf->completion);
-+
-+	pr_debug("%s: fw-%s buf=%p\n", __func__, fw_name, buf);
-+
-+	return buf;
-+}
-+
-+static struct firmware_buf *__fw_lookup_buf(const char *fw_name)
-+{
-+	struct firmware_buf *tmp;
-+	struct firmware_cache *fwc = &fw_cache;
-+
-+	list_for_each_entry(tmp, &fwc->head, list)
-+		if (!strcmp(tmp->fw_id, fw_name))
-+			return tmp;
-+	return NULL;
-+}
-+
-+static int fw_lookup_and_allocate_buf(const char *fw_name,
-+				      struct firmware_cache *fwc,
-+				      struct firmware_buf **buf)
-+{
-+	struct firmware_buf *tmp;
-+
-+	spin_lock(&fwc->lock);
-+	tmp = __fw_lookup_buf(fw_name);
-+	if (tmp) {
-+		kref_get(&tmp->ref);
-+		spin_unlock(&fwc->lock);
-+		*buf = tmp;
-+		return 1;
-+	}
-+	tmp = __allocate_fw_buf(fw_name, fwc);
-+	if (tmp)
-+		list_add(&tmp->list, &fwc->head);
-+	spin_unlock(&fwc->lock);
-+
-+	*buf = tmp;
-+
-+	return tmp ? 0 : -ENOMEM;
-+}
-+
-+static struct firmware_buf *fw_lookup_buf(const char *fw_name)
-+{
-+	struct firmware_buf *tmp;
-+	struct firmware_cache *fwc = &fw_cache;
-+
-+	spin_lock(&fwc->lock);
-+	tmp = __fw_lookup_buf(fw_name);
-+	spin_unlock(&fwc->lock);
-+
-+	return tmp;
-+}
-+
-+static void __fw_free_buf(struct kref *ref)
-+{
-+	struct firmware_buf *buf = to_fwbuf(ref);
-+	struct firmware_cache *fwc = buf->fwc;
-+
-+	pr_debug("%s: fw-%s buf=%p data=%p size=%u\n",
-+		 __func__, buf->fw_id, buf, buf->data,
-+		 (unsigned int)buf->size);
-+
-+	list_del(&buf->list);
-+	spin_unlock(&fwc->lock);
-+
-+#ifdef CONFIG_FW_LOADER_USER_HELPER
-+	if (buf->is_paged_buf) {
-+		int i;
-+		vunmap(buf->data);
-+		for (i = 0; i < buf->nr_pages; i++)
-+			__free_page(buf->pages[i]);
-+		kfree(buf->pages);
-+	} else
-+#endif
-+		vfree(buf->data);
-+	kfree(buf);
-+}
-+
-+static void fw_free_buf(struct firmware_buf *buf)
-+{
-+	struct firmware_cache *fwc = buf->fwc;
-+	spin_lock(&fwc->lock);
-+	if (!kref_put(&buf->ref, __fw_free_buf))
-+		spin_unlock(&fwc->lock);
-+}
-+
-+/* direct firmware loading support */
-+static char fw_path_para[256];
-+static const char * const fw_path[] = {
-+	fw_path_para,
-+	"/lib/firmware/updates/" UTS_RELEASE,
-+	"/lib/firmware/updates",
-+	"/lib/firmware/" UTS_RELEASE,
-+	"/lib/firmware"
-+};
-+
-+/*
-+ * Typical usage is that passing 'firmware_class.path=$CUSTOMIZED_PATH'
-+ * from kernel command line because firmware_class is generally built in
-+ * kernel instead of module.
-+ */
-+module_param_string(path, fw_path_para, sizeof(fw_path_para), 0644);
-+MODULE_PARM_DESC(path, "customized firmware image search path with a higher priority than default path");
-+
-+/* Don't inline this: 'struct kstat' is biggish */
-+static noinline_for_stack long fw_file_size(struct file *file)
-+{
-+	struct kstat st;
-+	if (vfs_getattr(file->f_path.mnt, file->f_path.dentry, &st))
-+		return -1;
-+	if (!S_ISREG(st.mode))
-+		return -1;
-+	if (st.size != (long)st.size)
-+		return -1;
-+	return st.size;
-+}
-+
-+static bool fw_read_file_contents(struct file *file, struct firmware_buf *fw_buf)
-+{
-+	long size;
-+	char *buf;
-+
-+	size = fw_file_size(file);
-+	if (size <= 0)
-+		return false;
-+	buf = vmalloc(size);
-+	if (!buf)
-+		return false;
-+	if (kernel_read(file, 0, buf, size) != size) {
-+		vfree(buf);
-+		return false;
-+	}
-+	fw_buf->data = buf;
-+	fw_buf->size = size;
-+	return true;
-+}
-+
-+static bool fw_get_filesystem_firmware(struct device *device,
-+				       struct firmware_buf *buf)
-+{
-+	int i;
-+	bool success = false;
-+	char *path = __getname();
-+
-+	for (i = 0; i < ARRAY_SIZE(fw_path); i++) {
-+		struct file *file;
-+
-+		/* skip the unset customized path */
-+		if (!fw_path[i][0])
-+			continue;
-+
-+		snprintf(path, PATH_MAX, "%s/%s", fw_path[i], buf->fw_id);
-+
-+		file = filp_open(path, O_RDONLY, 0);
-+		if (IS_ERR(file))
-+			continue;
-+		success = fw_read_file_contents(file, buf);
-+		fput(file);
-+		if (success)
-+			break;
-+	}
-+	__putname(path);
-+
-+	if (success) {
-+		dev_dbg(device, "firmware: direct-loading firmware %s\n",
-+			buf->fw_id);
-+		mutex_lock(&fw_lock);
-+		set_bit(FW_STATUS_DONE, &buf->status);
-+		complete_all(&buf->completion);
-+		mutex_unlock(&fw_lock);
-+	}
-+
-+	return success;
-+}
-+
-+/* firmware holds the ownership of pages */
-+static void firmware_free_data(const struct firmware *fw)
-+{
-+	/* Loaded directly? */
-+	if (!fw->priv) {
-+		vfree(fw->data);
-+		return;
-+	}
-+	fw_free_buf(fw->priv);
-+}
-+
-+/* store the pages buffer info firmware from buf */
-+static void fw_set_page_data(struct firmware_buf *buf, struct firmware *fw)
-+{
-+	fw->priv = buf;
-+#ifdef CONFIG_FW_LOADER_USER_HELPER
-+	fw->pages = buf->pages;
-+#endif
-+	fw->size = buf->size;
-+	fw->data = buf->data;
-+
-+	pr_debug("%s: fw-%s buf=%p data=%p size=%u\n",
-+		 __func__, buf->fw_id, buf, buf->data,
-+		 (unsigned int)buf->size);
-+}
-+
-+#ifdef CONFIG_PM_SLEEP
-+static void fw_name_devm_release(struct device *dev, void *res)
-+{
-+	struct fw_name_devm *fwn = res;
-+
-+	if (fwn->magic == (unsigned long)&fw_cache)
-+		pr_debug("%s: fw_name-%s devm-%p released\n",
-+				__func__, fwn->name, res);
-+}
-+
-+static int fw_devm_match(struct device *dev, void *res,
-+		void *match_data)
-+{
-+	struct fw_name_devm *fwn = res;
-+
-+	return (fwn->magic == (unsigned long)&fw_cache) &&
-+		!strcmp(fwn->name, match_data);
-+}
-+
-+static struct fw_name_devm *fw_find_devm_name(struct device *dev,
-+		const char *name)
-+{
-+	struct fw_name_devm *fwn;
-+
-+	fwn = devres_find(dev, fw_name_devm_release,
-+			  fw_devm_match, (void *)name);
-+	return fwn;
-+}
-+
-+/* add firmware name into devres list */
-+static int fw_add_devm_name(struct device *dev, const char *name)
-+{
-+	struct fw_name_devm *fwn;
-+
-+	fwn = fw_find_devm_name(dev, name);
-+	if (fwn)
-+		return 1;
-+
-+	fwn = devres_alloc(fw_name_devm_release, sizeof(struct fw_name_devm) +
-+			   strlen(name) + 1, GFP_KERNEL);
-+	if (!fwn)
-+		return -ENOMEM;
-+
-+	fwn->magic = (unsigned long)&fw_cache;
-+	strcpy(fwn->name, name);
-+	devres_add(dev, fwn);
-+
-+	return 0;
-+}
-+#else
-+static int fw_add_devm_name(struct device *dev, const char *name)
-+{
-+	return 0;
-+}
-+#endif
-+
-+
-+/*
-+ * user-mode helper code
-+ */
-+#ifdef CONFIG_FW_LOADER_USER_HELPER
-+struct firmware_priv {
-+	struct delayed_work timeout_work;
-+	bool nowait;
-+	struct device dev;
-+	struct firmware_buf *buf;
-+	struct firmware *fw;
-+};
-+
- static struct firmware_priv *to_firmware_priv(struct device *dev)
- {
- 	return container_of(dev, struct firmware_priv, dev);
-@@ -111,11 +450,15 @@ static struct firmware_priv *to_firmware_priv(struct device *dev)
- 
- static void fw_load_abort(struct firmware_priv *fw_priv)
- {
--	set_bit(FW_STATUS_ABORT, &fw_priv->status);
--	wmb();
--	complete(&fw_priv->completion);
-+	struct firmware_buf *buf = fw_priv->buf;
-+
-+	set_bit(FW_STATUS_ABORT, &buf->status);
-+	complete_all(&buf->completion);
- }
- 
-+#define is_fw_load_aborted(buf)	\
-+	test_bit(FW_STATUS_ABORT, &(buf)->status)
-+
- static ssize_t firmware_timeout_show(struct class *class,
- 				     struct class_attribute *attr,
- 				     char *buf)
-@@ -156,11 +499,7 @@ static struct class_attribute firmware_class_attrs[] = {
- static void fw_dev_release(struct device *dev)
- {
- 	struct firmware_priv *fw_priv = to_firmware_priv(dev);
--	int i;
- 
--	for (i = 0; i < fw_priv->nr_pages; i++)
--		__free_page(fw_priv->pages[i]);
--	kfree(fw_priv->pages);
- 	kfree(fw_priv);
- 
- 	module_put(THIS_MODULE);
-@@ -170,7 +509,7 @@ static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
- {
- 	struct firmware_priv *fw_priv = to_firmware_priv(dev);
- 
--	if (add_uevent_var(env, "FIRMWARE=%s", fw_priv->fw_id))
-+	if (add_uevent_var(env, "FIRMWARE=%s", fw_priv->buf->fw_id))
- 		return -ENOMEM;
- 	if (add_uevent_var(env, "TIMEOUT=%i", loading_timeout))
- 		return -ENOMEM;
-@@ -191,26 +530,30 @@ static ssize_t firmware_loading_show(struct device *dev,
- 				     struct device_attribute *attr, char *buf)
- {
- 	struct firmware_priv *fw_priv = to_firmware_priv(dev);
--	int loading = test_bit(FW_STATUS_LOADING, &fw_priv->status);
-+	int loading = test_bit(FW_STATUS_LOADING, &fw_priv->buf->status);
- 
- 	return sprintf(buf, "%d\n", loading);
- }
- 
--static void firmware_free_data(const struct firmware *fw)
--{
--	int i;
--	vunmap(fw->data);
--	if (fw->pages) {
--		for (i = 0; i < PFN_UP(fw->size); i++)
--			__free_page(fw->pages[i]);
--		kfree(fw->pages);
--	}
--}
--
- /* Some architectures don't have PAGE_KERNEL_RO */
- #ifndef PAGE_KERNEL_RO
- #define PAGE_KERNEL_RO PAGE_KERNEL
- #endif
-+
-+/* one pages buffer should be mapped/unmapped only once */
-+static int fw_map_pages_buf(struct firmware_buf *buf)
-+{
-+	if (!buf->is_paged_buf)
-+		return 0;
-+
-+	if (buf->data)
-+		vunmap(buf->data);
-+	buf->data = vmap(buf->pages, buf->nr_pages, 0, PAGE_KERNEL_RO);
-+	if (!buf->data)
-+		return -ENOMEM;
-+	return 0;
-+}
-+
- /**
-  * firmware_loading_store - set value in the 'loading' control file
-  * @dev: device pointer
-@@ -229,45 +572,41 @@ static ssize_t firmware_loading_store(struct device *dev,
- 				      const char *buf, size_t count)
- {
- 	struct firmware_priv *fw_priv = to_firmware_priv(dev);
-+	struct firmware_buf *fw_buf = fw_priv->buf;
- 	int loading = simple_strtol(buf, NULL, 10);
- 	int i;
- 
- 	mutex_lock(&fw_lock);
- 
--	if (!fw_priv->fw)
-+	if (!fw_buf)
- 		goto out;
- 
- 	switch (loading) {
- 	case 1:
--		firmware_free_data(fw_priv->fw);
--		memset(fw_priv->fw, 0, sizeof(struct firmware));
--		/* If the pages are not owned by 'struct firmware' */
--		for (i = 0; i < fw_priv->nr_pages; i++)
--			__free_page(fw_priv->pages[i]);
--		kfree(fw_priv->pages);
--		fw_priv->pages = NULL;
--		fw_priv->page_array_size = 0;
--		fw_priv->nr_pages = 0;
--		set_bit(FW_STATUS_LOADING, &fw_priv->status);
-+		/* discarding any previous partial load */
-+		if (!test_bit(FW_STATUS_DONE, &fw_buf->status)) {
-+			for (i = 0; i < fw_buf->nr_pages; i++)
-+				__free_page(fw_buf->pages[i]);
-+			kfree(fw_buf->pages);
-+			fw_buf->pages = NULL;
-+			fw_buf->page_array_size = 0;
-+			fw_buf->nr_pages = 0;
-+			set_bit(FW_STATUS_LOADING, &fw_buf->status);
-+		}
- 		break;
- 	case 0:
--		if (test_bit(FW_STATUS_LOADING, &fw_priv->status)) {
--			vunmap(fw_priv->fw->data);
--			fw_priv->fw->data = vmap(fw_priv->pages,
--						 fw_priv->nr_pages,
--						 0, PAGE_KERNEL_RO);
--			if (!fw_priv->fw->data) {
--				dev_err(dev, "%s: vmap() failed\n", __func__);
--				goto err;
--			}
--			/* Pages are now owned by 'struct firmware' */
--			fw_priv->fw->pages = fw_priv->pages;
--			fw_priv->pages = NULL;
--
--			fw_priv->page_array_size = 0;
--			fw_priv->nr_pages = 0;
--			complete(&fw_priv->completion);
--			clear_bit(FW_STATUS_LOADING, &fw_priv->status);
-+		if (test_bit(FW_STATUS_LOADING, &fw_buf->status)) {
-+			set_bit(FW_STATUS_DONE, &fw_buf->status);
-+			clear_bit(FW_STATUS_LOADING, &fw_buf->status);
-+
-+			/*
-+			 * Several loading requests may be pending on
-+			 * one same firmware buf, so let all requests
-+			 * see the mapped 'buf->data' once the loading
-+			 * is completed.
-+			 * */
-+			fw_map_pages_buf(fw_buf);
-+			complete_all(&fw_buf->completion);
- 			break;
- 		}
- 		/* fallthrough */
-@@ -275,7 +614,6 @@ static ssize_t firmware_loading_store(struct device *dev,
- 		dev_err(dev, "%s: unexpected value (%d)\n", __func__, loading);
- 		/* fallthrough */
- 	case -1:
--	err:
- 		fw_load_abort(fw_priv);
- 		break;
- 	}
-@@ -290,23 +628,23 @@ static ssize_t firmware_data_read(struct file *filp, struct kobject *kobj,
- 				  struct bin_attribute *bin_attr,
- 				  char *buffer, loff_t offset, size_t count)
- {
--	struct device *dev = to_dev(kobj);
-+	struct device *dev = kobj_to_dev(kobj);
- 	struct firmware_priv *fw_priv = to_firmware_priv(dev);
--	struct firmware *fw;
-+	struct firmware_buf *buf;
- 	ssize_t ret_count;
- 
- 	mutex_lock(&fw_lock);
--	fw = fw_priv->fw;
--	if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) {
-+	buf = fw_priv->buf;
-+	if (!buf || test_bit(FW_STATUS_DONE, &buf->status)) {
- 		ret_count = -ENODEV;
- 		goto out;
- 	}
--	if (offset > fw->size) {
-+	if (offset > buf->size) {
- 		ret_count = 0;
- 		goto out;
- 	}
--	if (count > fw->size - offset)
--		count = fw->size - offset;
-+	if (count > buf->size - offset)
-+		count = buf->size - offset;
- 
- 	ret_count = count;
- 
-@@ -316,11 +654,11 @@ static ssize_t firmware_data_read(struct file *filp, struct kobject *kobj,
- 		int page_ofs = offset & (PAGE_SIZE-1);
- 		int page_cnt = min_t(size_t, PAGE_SIZE - page_ofs, count);
- 
--		page_data = kmap(fw_priv->pages[page_nr]);
-+		page_data = kmap(buf->pages[page_nr]);
- 
- 		memcpy(buffer, page_data + page_ofs, page_cnt);
- 
--		kunmap(fw_priv->pages[page_nr]);
-+		kunmap(buf->pages[page_nr]);
- 		buffer += page_cnt;
- 		offset += page_cnt;
- 		count -= page_cnt;
-@@ -332,12 +670,13 @@ out:
- 
- static int fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size)
- {
-+	struct firmware_buf *buf = fw_priv->buf;
- 	int pages_needed = ALIGN(min_size, PAGE_SIZE) >> PAGE_SHIFT;
- 
- 	/* If the array of pages is too small, grow it... */
--	if (fw_priv->page_array_size < pages_needed) {
-+	if (buf->page_array_size < pages_needed) {
- 		int new_array_size = max(pages_needed,
--					 fw_priv->page_array_size * 2);
-+					 buf->page_array_size * 2);
- 		struct page **new_pages;
- 
- 		new_pages = kmalloc(new_array_size * sizeof(void *),
-@@ -346,24 +685,24 @@ static int fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size)
- 			fw_load_abort(fw_priv);
- 			return -ENOMEM;
- 		}
--		memcpy(new_pages, fw_priv->pages,
--		       fw_priv->page_array_size * sizeof(void *));
--		memset(&new_pages[fw_priv->page_array_size], 0, sizeof(void *) *
--		       (new_array_size - fw_priv->page_array_size));
--		kfree(fw_priv->pages);
--		fw_priv->pages = new_pages;
--		fw_priv->page_array_size = new_array_size;
-+		memcpy(new_pages, buf->pages,
-+		       buf->page_array_size * sizeof(void *));
-+		memset(&new_pages[buf->page_array_size], 0, sizeof(void *) *
-+		       (new_array_size - buf->page_array_size));
-+		kfree(buf->pages);
-+		buf->pages = new_pages;
-+		buf->page_array_size = new_array_size;
- 	}
- 
--	while (fw_priv->nr_pages < pages_needed) {
--		fw_priv->pages[fw_priv->nr_pages] =
-+	while (buf->nr_pages < pages_needed) {
-+		buf->pages[buf->nr_pages] =
- 			alloc_page(GFP_KERNEL | __GFP_HIGHMEM);
- 
--		if (!fw_priv->pages[fw_priv->nr_pages]) {
-+		if (!buf->pages[buf->nr_pages]) {
- 			fw_load_abort(fw_priv);
- 			return -ENOMEM;
- 		}
--		fw_priv->nr_pages++;
-+		buf->nr_pages++;
- 	}
- 	return 0;
- }
-@@ -384,20 +723,21 @@ static ssize_t firmware_data_write(struct file *filp, struct kobject *kobj,
- 				   struct bin_attribute *bin_attr,
- 				   char *buffer, loff_t offset, size_t count)
- {
--	struct device *dev = to_dev(kobj);
-+	struct device *dev = kobj_to_dev(kobj);
- 	struct firmware_priv *fw_priv = to_firmware_priv(dev);
--	struct firmware *fw;
-+	struct firmware_buf *buf;
- 	ssize_t retval;
- 
- 	if (!capable(CAP_SYS_RAWIO))
- 		return -EPERM;
- 
- 	mutex_lock(&fw_lock);
--	fw = fw_priv->fw;
--	if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) {
-+	buf = fw_priv->buf;
-+	if (!buf || test_bit(FW_STATUS_DONE, &buf->status)) {
- 		retval = -ENODEV;
- 		goto out;
- 	}
-+
- 	retval = fw_realloc_buffer(fw_priv, offset + count);
- 	if (retval)
- 		goto out;
-@@ -410,17 +750,17 @@ static ssize_t firmware_data_write(struct file *filp, struct kobject *kobj,
- 		int page_ofs = offset & (PAGE_SIZE - 1);
- 		int page_cnt = min_t(size_t, PAGE_SIZE - page_ofs, count);
- 
--		page_data = kmap(fw_priv->pages[page_nr]);
-+		page_data = kmap(buf->pages[page_nr]);
- 
- 		memcpy(page_data + page_ofs, buffer, page_cnt);
- 
--		kunmap(fw_priv->pages[page_nr]);
-+		kunmap(buf->pages[page_nr]);
- 		buffer += page_cnt;
- 		offset += page_cnt;
- 		count -= page_cnt;
- 	}
- 
--	fw->size = max_t(size_t, offset, fw->size);
-+	buf->size = max_t(size_t, offset, buf->size);
- out:
- 	mutex_unlock(&fw_lock);
- 	return retval;
-@@ -433,11 +773,18 @@ static struct bin_attribute firmware_attr_data = {
- 	.write = firmware_data_write,
- };
- 
--static void firmware_class_timeout(u_long data)
-+static void firmware_class_timeout_work(struct work_struct *work)
- {
--	struct firmware_priv *fw_priv = (struct firmware_priv *) data;
-+	struct firmware_priv *fw_priv = container_of(work,
-+			struct firmware_priv, timeout_work.work);
- 
-+	mutex_lock(&fw_lock);
-+	if (test_bit(FW_STATUS_DONE, &(fw_priv->buf->status))) {
-+		mutex_unlock(&fw_lock);
-+		return;
-+	}
- 	fw_load_abort(fw_priv);
-+	mutex_unlock(&fw_lock);
- }
- 
- static struct firmware_priv *
-@@ -447,70 +794,38 @@ fw_create_instance(struct firmware *firmware, const char *fw_name,
- 	struct firmware_priv *fw_priv;
- 	struct device *f_dev;
- 
--	fw_priv = kzalloc(sizeof(*fw_priv) + strlen(fw_name) + 1 , GFP_KERNEL);
-+	fw_priv = kzalloc(sizeof(*fw_priv), GFP_KERNEL);
- 	if (!fw_priv) {
- 		dev_err(device, "%s: kmalloc failed\n", __func__);
--		return ERR_PTR(-ENOMEM);
-+		fw_priv = ERR_PTR(-ENOMEM);
-+		goto exit;
- 	}
- 
--	fw_priv->fw = firmware;
- 	fw_priv->nowait = nowait;
--	strcpy(fw_priv->fw_id, fw_name);
--	init_completion(&fw_priv->completion);
--	setup_timer(&fw_priv->timeout,
--		    firmware_class_timeout, (u_long) fw_priv);
-+	fw_priv->fw = firmware;
-+	INIT_DELAYED_WORK(&fw_priv->timeout_work,
-+		firmware_class_timeout_work);
- 
- 	f_dev = &fw_priv->dev;
- 
- 	device_initialize(f_dev);
--	dev_set_name(f_dev, "%s", dev_name(device));
-+	dev_set_name(f_dev, "%s", fw_name);
- 	f_dev->parent = device;
- 	f_dev->class = &firmware_class;
--
-+exit:
- 	return fw_priv;
- }
- 
--static struct firmware_priv *
--_request_firmware_prepare(const struct firmware **firmware_p, const char *name,
--			  struct device *device, bool uevent, bool nowait)
--{
--	struct firmware *firmware;
--	struct firmware_priv *fw_priv;
--
--	if (!firmware_p)
--		return ERR_PTR(-EINVAL);
--
--	*firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
--	if (!firmware) {
--		dev_err(device, "%s: kmalloc(struct firmware) failed\n",
--			__func__);
--		return ERR_PTR(-ENOMEM);
--	}
--
--	if (fw_get_builtin_firmware(firmware, name)) {
--		dev_dbg(device, "firmware: using built-in firmware %s\n", name);
--		return NULL;
--	}
--
--	fw_priv = fw_create_instance(firmware, name, device, uevent, nowait);
--	if (IS_ERR(fw_priv)) {
--		release_firmware(firmware);
--		*firmware_p = NULL;
--	}
--	return fw_priv;
--}
--
--static void _request_firmware_cleanup(const struct firmware **firmware_p)
--{
--	release_firmware(*firmware_p);
--	*firmware_p = NULL;
--}
--
-+/* load a firmware via user helper */
- static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent,
- 				  long timeout)
- {
- 	int retval = 0;
- 	struct device *f_dev = &fw_priv->dev;
-+	struct firmware_buf *buf = fw_priv->buf;
-+
-+	/* fall back on userspace loading */
-+	buf->is_paged_buf = true;
- 
- 	dev_set_uevent_suppress(f_dev, true);
- 
-@@ -537,24 +852,18 @@ static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent,
- 
- 	if (uevent) {
- 		dev_set_uevent_suppress(f_dev, false);
--		dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_id);
-+		dev_dbg(f_dev, "firmware: requesting %s\n", buf->fw_id);
- 		if (timeout != MAX_SCHEDULE_TIMEOUT)
--			mod_timer(&fw_priv->timeout,
--				  round_jiffies_up(jiffies + timeout));
-+			schedule_delayed_work(&fw_priv->timeout_work, timeout);
- 
- 		kobject_uevent(&fw_priv->dev.kobj, KOBJ_ADD);
- 	}
- 
--	wait_for_completion(&fw_priv->completion);
-+	wait_for_completion(&buf->completion);
- 
--	set_bit(FW_STATUS_DONE, &fw_priv->status);
--	del_timer_sync(&fw_priv->timeout);
-+	cancel_delayed_work_sync(&fw_priv->timeout_work);
- 
--	mutex_lock(&fw_lock);
--	if (!fw_priv->fw->size || test_bit(FW_STATUS_ABORT, &fw_priv->status))
--		retval = -ENOENT;
--	fw_priv->fw = NULL;
--	mutex_unlock(&fw_lock);
-+	fw_priv->buf = NULL;
- 
- 	device_remove_file(f_dev, &dev_attr_loading);
- err_del_bin_attr:
-@@ -566,6 +875,186 @@ err_put_dev:
- 	return retval;
- }
- 
-+static int fw_load_from_user_helper(struct firmware *firmware,
-+				    const char *name, struct device *device,
-+				    bool uevent, bool nowait, long timeout)
-+{
-+	struct firmware_priv *fw_priv;
-+
-+	fw_priv = fw_create_instance(firmware, name, device, uevent, nowait);
-+	if (IS_ERR(fw_priv))
-+		return PTR_ERR(fw_priv);
-+
-+	fw_priv->buf = firmware->priv;
-+	return _request_firmware_load(fw_priv, uevent, timeout);
-+}
-+#else /* CONFIG_FW_LOADER_USER_HELPER */
-+static inline int
-+fw_load_from_user_helper(struct firmware *firmware, const char *name,
-+			 struct device *device, bool uevent, bool nowait,
-+			 long timeout)
-+{
-+	return -ENOENT;
-+}
-+
-+/* No abort during direct loading */
-+#define is_fw_load_aborted(buf) false
-+
-+#endif /* CONFIG_FW_LOADER_USER_HELPER */
-+
-+
-+/* wait until the shared firmware_buf becomes ready (or error) */
-+static int sync_cached_firmware_buf(struct firmware_buf *buf)
-+{
-+	int ret = 0;
-+
-+	mutex_lock(&fw_lock);
-+	while (!test_bit(FW_STATUS_DONE, &buf->status)) {
-+		if (is_fw_load_aborted(buf)) {
-+			ret = -ENOENT;
-+			break;
-+		}
-+		mutex_unlock(&fw_lock);
-+		wait_for_completion(&buf->completion);
-+		mutex_lock(&fw_lock);
-+	}
-+	mutex_unlock(&fw_lock);
-+	return ret;
-+}
-+
-+/* prepare firmware and firmware_buf structs;
-+ * return 0 if a firmware is already assigned, 1 if need to load one,
-+ * or a negative error code
-+ */
-+static int
-+_request_firmware_prepare(struct firmware **firmware_p, const char *name,
-+			  struct device *device)
-+{
-+	struct firmware *firmware;
-+	struct firmware_buf *buf;
-+	int ret;
-+
-+	*firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
-+	if (!firmware) {
-+		dev_err(device, "%s: kmalloc(struct firmware) failed\n",
-+			__func__);
-+		return -ENOMEM;
-+	}
-+
-+	if (fw_get_builtin_firmware(firmware, name)) {
-+		dev_dbg(device, "firmware: using built-in firmware %s\n", name);
-+		return 0; /* assigned */
-+	}
-+
-+	ret = fw_lookup_and_allocate_buf(name, &fw_cache, &buf);
-+
-+	/*
-+	 * bind with 'buf' now to avoid warning in failure path
-+	 * of requesting firmware.
-+	 */
-+	firmware->priv = buf;
-+
-+	if (ret > 0) {
-+		ret = sync_cached_firmware_buf(buf);
-+		if (!ret) {
-+			fw_set_page_data(buf, firmware);
-+			return 0; /* assigned */
-+		}
-+	}
-+
-+	if (ret < 0)
-+		return ret;
-+	return 1; /* need to load */
-+}
-+
-+static int assign_firmware_buf(struct firmware *fw, struct device *device)
-+{
-+	struct firmware_buf *buf = fw->priv;
-+
-+	mutex_lock(&fw_lock);
-+	if (!buf->size || is_fw_load_aborted(buf)) {
-+		mutex_unlock(&fw_lock);
-+		return -ENOENT;
-+	}
-+
-+	/*
-+	 * add firmware name into devres list so that we can auto cache
-+	 * and uncache firmware for device.
-+	 *
-+	 * device may has been deleted already, but the problem
-+	 * should be fixed in devres or driver core.
-+	 */
-+	if (device)
-+		fw_add_devm_name(device, buf->fw_id);
-+
-+	/*
-+	 * After caching firmware image is started, let it piggyback
-+	 * on request firmware.
-+	 */
-+	if (buf->fwc->state == FW_LOADER_START_CACHE) {
-+		if (fw_cache_piggyback_on_request(buf->fw_id))
-+			kref_get(&buf->ref);
-+	}
-+
-+	/* pass the pages buffer to driver at the last minute */
-+	fw_set_page_data(buf, fw);
-+	mutex_unlock(&fw_lock);
-+	return 0;
-+}
-+
-+/* called from request_firmware() and request_firmware_work_func() */
-+static int
-+_request_firmware(const struct firmware **firmware_p, const char *name,
-+		  struct device *device, bool uevent, bool nowait)
-+{
-+	struct firmware *fw;
-+	long timeout;
-+	int ret;
-+
-+	if (!firmware_p)
-+		return -EINVAL;
-+
-+	ret = _request_firmware_prepare(&fw, name, device);
-+	if (ret <= 0) /* error or already assigned */
-+		goto out;
-+
-+	ret = 0;
-+	timeout = firmware_loading_timeout();
-+	if (nowait) {
-+		timeout = usermodehelper_read_lock_wait(timeout);
-+		if (!timeout) {
-+			dev_dbg(device, "firmware: %s loading timed out\n",
-+				name);
-+			ret = -EBUSY;
-+			goto out;
-+		}
-+	} else {
-+		ret = usermodehelper_read_trylock();
-+		if (WARN_ON(ret)) {
-+			dev_err(device, "firmware: %s will not be loaded\n",
-+				name);
-+			goto out;
-+		}
-+	}
-+
-+	if (!fw_get_filesystem_firmware(device, fw->priv))
-+		ret = fw_load_from_user_helper(fw, name, device,
-+					       uevent, nowait, timeout);
-+	if (!ret)
-+		ret = assign_firmware_buf(fw, device);
-+
-+	usermodehelper_read_unlock();
-+
-+ out:
-+	if (ret < 0) {
-+		release_firmware(fw);
-+		fw = NULL;
-+	}
-+
-+	*firmware_p = fw;
-+	return ret;
-+}
-+
- /**
-  * request_firmware: - send firmware request and wait for it
-  * @firmware_p: pointer to firmware image
-@@ -580,31 +1069,17 @@ err_put_dev:
-  *      @name will be used as $FIRMWARE in the uevent environment and
-  *      should be distinctive enough not to be confused with any other
-  *      firmware image for this or any other device.
-+ *
-+ *	Caller must hold the reference count of @device.
-+ *
-+ *	The function can be called safely inside device's suspend and
-+ *	resume callback.
-  **/
- int
- request_firmware(const struct firmware **firmware_p, const char *name,
-                  struct device *device)
- {
--	struct firmware_priv *fw_priv;
--	int ret;
--
--	fw_priv = _request_firmware_prepare(firmware_p, name, device, true,
--					    false);
--	if (IS_ERR_OR_NULL(fw_priv))
--		return PTR_RET(fw_priv);
--
--	ret = usermodehelper_read_trylock();
--	if (WARN_ON(ret)) {
--		dev_err(device, "firmware: %s will not be loaded\n", name);
--	} else {
--		ret = _request_firmware_load(fw_priv, true,
--					firmware_loading_timeout());
--		usermodehelper_read_unlock();
--	}
--	if (ret)
--		_request_firmware_cleanup(firmware_p);
--
--	return ret;
-+	return _request_firmware(firmware_p, name, device, true, false);
- }
- 
- /**
-@@ -635,32 +1110,13 @@ static void request_firmware_work_func(struct work_struct *work)
- {
- 	struct firmware_work *fw_work;
- 	const struct firmware *fw;
--	struct firmware_priv *fw_priv;
--	long timeout;
--	int ret;
- 
- 	fw_work = container_of(work, struct firmware_work, work);
--	fw_priv = _request_firmware_prepare(&fw, fw_work->name, fw_work->device,
--			fw_work->uevent, true);
--	if (IS_ERR_OR_NULL(fw_priv)) {
--		ret = PTR_RET(fw_priv);
--		goto out;
--	}
--
--	timeout = usermodehelper_read_lock_wait(firmware_loading_timeout());
--	if (timeout) {
--		ret = _request_firmware_load(fw_priv, fw_work->uevent, timeout);
--		usermodehelper_read_unlock();
--	} else {
--		dev_dbg(fw_work->device, "firmware: %s loading timed out\n",
--			fw_work->name);
--		ret = -EAGAIN;
--	}
--	if (ret)
--		_request_firmware_cleanup(&fw);
- 
-- out:
-+	_request_firmware(&fw, fw_work->name, fw_work->device,
-+			  fw_work->uevent, true);
- 	fw_work->cont(fw, fw_work->context);
-+	put_device(fw_work->device); /* taken in request_firmware_nowait() */
- 
- 	module_put(fw_work->module);
- 	kfree(fw_work);
-@@ -679,9 +1135,15 @@ static void request_firmware_work_func(struct work_struct *work)
-  * @cont: function will be called asynchronously when the firmware
-  *	request is over.
-  *
-- *	Asynchronous variant of request_firmware() for user contexts where
-- *	it is not possible to sleep for long time. It can't be called
-- *	in atomic contexts.
-+ *	Caller must hold the reference count of @device.
-+ *
-+ *	Asynchronous variant of request_firmware() for user contexts:
-+ *		- sleep for as small periods as possible since it may
-+ *		increase kernel boot time of built-in device drivers
-+ *		requesting firmware in their ->probe() methods, if
-+ *		@gfp is GFP_KERNEL.
-+ *
-+ *		- can't sleep at all if @gfp is GFP_ATOMIC.
-  **/
- int
- request_firmware_nowait(
-@@ -707,19 +1169,391 @@ request_firmware_nowait(
- 		return -EFAULT;
- 	}
- 
-+	get_device(fw_work->device);
- 	INIT_WORK(&fw_work->work, request_firmware_work_func);
- 	schedule_work(&fw_work->work);
- 	return 0;
- }
- 
-+/**
-+ * cache_firmware - cache one firmware image in kernel memory space
-+ * @fw_name: the firmware image name
-+ *
-+ * Cache firmware in kernel memory so that drivers can use it when
-+ * system isn't ready for them to request firmware image from userspace.
-+ * Once it returns successfully, driver can use request_firmware or its
-+ * nowait version to get the cached firmware without any interacting
-+ * with userspace
-+ *
-+ * Return 0 if the firmware image has been cached successfully
-+ * Return !0 otherwise
-+ *
-+ */
-+int cache_firmware(const char *fw_name)
-+{
-+	int ret;
-+	const struct firmware *fw;
-+
-+	pr_debug("%s: %s\n", __func__, fw_name);
-+
-+	ret = request_firmware(&fw, fw_name, NULL);
-+	if (!ret)
-+		kfree(fw);
-+
-+	pr_debug("%s: %s ret=%d\n", __func__, fw_name, ret);
-+
-+	return ret;
-+}
-+
-+/**
-+ * uncache_firmware - remove one cached firmware image
-+ * @fw_name: the firmware image name
-+ *
-+ * Uncache one firmware image which has been cached successfully
-+ * before.
-+ *
-+ * Return 0 if the firmware cache has been removed successfully
-+ * Return !0 otherwise
-+ *
-+ */
-+int uncache_firmware(const char *fw_name)
-+{
-+	struct firmware_buf *buf;
-+	struct firmware fw;
-+
-+	pr_debug("%s: %s\n", __func__, fw_name);
-+
-+	if (fw_get_builtin_firmware(&fw, fw_name))
-+		return 0;
-+
-+	buf = fw_lookup_buf(fw_name);
-+	if (buf) {
-+		fw_free_buf(buf);
-+		return 0;
-+	}
-+
-+	return -EINVAL;
-+}
-+
-+#ifdef CONFIG_PM_SLEEP
-+static struct fw_cache_entry *alloc_fw_cache_entry(const char *name)
-+{
-+	struct fw_cache_entry *fce;
-+
-+	fce = kzalloc(sizeof(*fce) + strlen(name) + 1, GFP_ATOMIC);
-+	if (!fce)
-+		goto exit;
-+
-+	strcpy(fce->name, name);
-+exit:
-+	return fce;
-+}
-+
-+static int __fw_entry_found(const char *name)
-+{
-+	struct firmware_cache *fwc = &fw_cache;
-+	struct fw_cache_entry *fce;
-+
-+	list_for_each_entry(fce, &fwc->fw_names, list) {
-+		if (!strcmp(fce->name, name))
-+			return 1;
-+	}
-+	return 0;
-+}
-+
-+static int fw_cache_piggyback_on_request(const char *name)
-+{
-+	struct firmware_cache *fwc = &fw_cache;
-+	struct fw_cache_entry *fce;
-+	int ret = 0;
-+
-+	spin_lock(&fwc->name_lock);
-+	if (__fw_entry_found(name))
-+		goto found;
-+
-+	fce = alloc_fw_cache_entry(name);
-+	if (fce) {
-+		ret = 1;
-+		list_add(&fce->list, &fwc->fw_names);
-+		pr_debug("%s: fw: %s\n", __func__, name);
-+	}
-+found:
-+	spin_unlock(&fwc->name_lock);
-+	return ret;
-+}
-+
-+static void free_fw_cache_entry(struct fw_cache_entry *fce)
-+{
-+	kfree(fce);
-+}
-+
-+static void __async_dev_cache_fw_image(void *fw_entry,
-+				       async_cookie_t cookie)
-+{
-+	struct fw_cache_entry *fce = fw_entry;
-+	struct firmware_cache *fwc = &fw_cache;
-+	int ret;
-+
-+	ret = cache_firmware(fce->name);
-+	if (ret) {
-+		spin_lock(&fwc->name_lock);
-+		list_del(&fce->list);
-+		spin_unlock(&fwc->name_lock);
-+
-+		free_fw_cache_entry(fce);
-+	}
-+
-+	spin_lock(&fwc->name_lock);
-+	fwc->cnt--;
-+	spin_unlock(&fwc->name_lock);
-+
-+	wake_up(&fwc->wait_queue);
-+}
-+
-+/* called with dev->devres_lock held */
-+static void dev_create_fw_entry(struct device *dev, void *res,
-+				void *data)
-+{
-+	struct fw_name_devm *fwn = res;
-+	const char *fw_name = fwn->name;
-+	struct list_head *head = data;
-+	struct fw_cache_entry *fce;
-+
-+	fce = alloc_fw_cache_entry(fw_name);
-+	if (fce)
-+		list_add(&fce->list, head);
-+}
-+
-+static int devm_name_match(struct device *dev, void *res,
-+			   void *match_data)
-+{
-+	struct fw_name_devm *fwn = res;
-+	return (fwn->magic == (unsigned long)match_data);
-+}
-+
-+static void dev_cache_fw_image(struct device *dev, void *data)
-+{
-+	LIST_HEAD(todo);
-+	struct fw_cache_entry *fce;
-+	struct fw_cache_entry *fce_next;
-+	struct firmware_cache *fwc = &fw_cache;
-+
-+	devres_for_each_res(dev, fw_name_devm_release,
-+			    devm_name_match, &fw_cache,
-+			    dev_create_fw_entry, &todo);
-+
-+	list_for_each_entry_safe(fce, fce_next, &todo, list) {
-+		list_del(&fce->list);
-+
-+		spin_lock(&fwc->name_lock);
-+		/* only one cache entry for one firmware */
-+		if (!__fw_entry_found(fce->name)) {
-+			fwc->cnt++;
-+			list_add(&fce->list, &fwc->fw_names);
-+		} else {
-+			free_fw_cache_entry(fce);
-+			fce = NULL;
-+		}
-+		spin_unlock(&fwc->name_lock);
-+
-+		if (fce)
-+			async_schedule(__async_dev_cache_fw_image,
-+				       (void *)fce);
-+	}
-+}
-+
-+static void __device_uncache_fw_images(void)
-+{
-+	struct firmware_cache *fwc = &fw_cache;
-+	struct fw_cache_entry *fce;
-+
-+	spin_lock(&fwc->name_lock);
-+	while (!list_empty(&fwc->fw_names)) {
-+		fce = list_entry(fwc->fw_names.next,
-+				struct fw_cache_entry, list);
-+		list_del(&fce->list);
-+		spin_unlock(&fwc->name_lock);
-+
-+		uncache_firmware(fce->name);
-+		free_fw_cache_entry(fce);
-+
-+		spin_lock(&fwc->name_lock);
-+	}
-+	spin_unlock(&fwc->name_lock);
-+}
-+
-+/**
-+ * device_cache_fw_images - cache devices' firmware
-+ *
-+ * If one device called request_firmware or its nowait version
-+ * successfully before, the firmware names are recored into the
-+ * device's devres link list, so device_cache_fw_images can call
-+ * cache_firmware() to cache these firmwares for the device,
-+ * then the device driver can load its firmwares easily at
-+ * time when system is not ready to complete loading firmware.
-+ */
-+static void device_cache_fw_images(void)
-+{
-+	struct firmware_cache *fwc = &fw_cache;
-+	int old_timeout;
-+	DEFINE_WAIT(wait);
-+
-+	pr_debug("%s\n", __func__);
-+
-+	/* cancel uncache work */
-+	cancel_delayed_work_sync(&fwc->work);
-+
-+	/*
-+	 * use small loading timeout for caching devices' firmware
-+	 * because all these firmware images have been loaded
-+	 * successfully at lease once, also system is ready for
-+	 * completing firmware loading now. The maximum size of
-+	 * firmware in current distributions is about 2M bytes,
-+	 * so 10 secs should be enough.
-+	 */
-+	old_timeout = loading_timeout;
-+	loading_timeout = 10;
-+
-+	mutex_lock(&fw_lock);
-+	fwc->state = FW_LOADER_START_CACHE;
-+	dpm_for_each_dev(NULL, dev_cache_fw_image);
-+	mutex_unlock(&fw_lock);
-+
-+	/* wait for completion of caching firmware for all devices */
-+	spin_lock(&fwc->name_lock);
-+	for (;;) {
-+		prepare_to_wait(&fwc->wait_queue, &wait,
-+				TASK_UNINTERRUPTIBLE);
-+		if (!fwc->cnt)
-+			break;
-+
-+		spin_unlock(&fwc->name_lock);
-+
-+		schedule();
-+
-+		spin_lock(&fwc->name_lock);
-+	}
-+	spin_unlock(&fwc->name_lock);
-+	finish_wait(&fwc->wait_queue, &wait);
-+
-+	loading_timeout = old_timeout;
-+}
-+
-+/**
-+ * device_uncache_fw_images - uncache devices' firmware
-+ *
-+ * uncache all firmwares which have been cached successfully
-+ * by device_uncache_fw_images earlier
-+ */
-+static void device_uncache_fw_images(void)
-+{
-+	pr_debug("%s\n", __func__);
-+	__device_uncache_fw_images();
-+}
-+
-+static void device_uncache_fw_images_work(struct work_struct *work)
-+{
-+	device_uncache_fw_images();
-+}
-+
-+/**
-+ * device_uncache_fw_images_delay - uncache devices firmwares
-+ * @delay: number of milliseconds to delay uncache device firmwares
-+ *
-+ * uncache all devices's firmwares which has been cached successfully
-+ * by device_cache_fw_images after @delay milliseconds.
-+ */
-+static void device_uncache_fw_images_delay(unsigned long delay)
-+{
-+	schedule_delayed_work(&fw_cache.work,
-+			msecs_to_jiffies(delay));
-+}
-+
-+static int fw_pm_notify(struct notifier_block *notify_block,
-+			unsigned long mode, void *unused)
-+{
-+	switch (mode) {
-+	case PM_HIBERNATION_PREPARE:
-+	case PM_SUSPEND_PREPARE:
-+		device_cache_fw_images();
-+		break;
-+
-+	case PM_POST_SUSPEND:
-+	case PM_POST_HIBERNATION:
-+	case PM_POST_RESTORE:
-+		/*
-+		 * In case that system sleep failed and syscore_suspend is
-+		 * not called.
-+		 */
-+		mutex_lock(&fw_lock);
-+		fw_cache.state = FW_LOADER_NO_CACHE;
-+		mutex_unlock(&fw_lock);
-+
-+		device_uncache_fw_images_delay(10 * MSEC_PER_SEC);
-+		break;
-+	}
-+
-+	return 0;
-+}
-+
-+/* stop caching firmware once syscore_suspend is reached */
-+static int fw_suspend(void)
-+{
-+	fw_cache.state = FW_LOADER_NO_CACHE;
-+	return 0;
-+}
-+
-+static struct syscore_ops fw_syscore_ops = {
-+	.suspend = fw_suspend,
-+};
-+#else
-+static int fw_cache_piggyback_on_request(const char *name)
-+{
-+	return 0;
-+}
-+#endif
-+
-+static void __init fw_cache_init(void)
-+{
-+	spin_lock_init(&fw_cache.lock);
-+	INIT_LIST_HEAD(&fw_cache.head);
-+	fw_cache.state = FW_LOADER_NO_CACHE;
-+
-+#ifdef CONFIG_PM_SLEEP
-+	spin_lock_init(&fw_cache.name_lock);
-+	INIT_LIST_HEAD(&fw_cache.fw_names);
-+	fw_cache.cnt = 0;
-+
-+	init_waitqueue_head(&fw_cache.wait_queue);
-+	INIT_DELAYED_WORK(&fw_cache.work,
-+			  device_uncache_fw_images_work);
-+
-+	fw_cache.pm_notify.notifier_call = fw_pm_notify;
-+	register_pm_notifier(&fw_cache.pm_notify);
-+
-+	register_syscore_ops(&fw_syscore_ops);
-+#endif
-+}
-+
- static int __init firmware_class_init(void)
- {
-+	fw_cache_init();
-+#ifdef CONFIG_FW_LOADER_USER_HELPER
- 	return class_register(&firmware_class);
-+#else
-+	return 0;
-+#endif
- }
- 
- static void __exit firmware_class_exit(void)
- {
-+#ifdef CONFIG_PM_SLEEP
-+	unregister_syscore_ops(&fw_syscore_ops);
-+	unregister_pm_notifier(&fw_cache.pm_notify);
-+#endif
-+#ifdef CONFIG_FW_LOADER_USER_HELPER
- 	class_unregister(&firmware_class);
-+#endif
- }
- 
- fs_initcall(firmware_class_init);
-@@ -728,3 +1562,5 @@ module_exit(firmware_class_exit);
- EXPORT_SYMBOL(release_firmware);
- EXPORT_SYMBOL(request_firmware);
- EXPORT_SYMBOL(request_firmware_nowait);
-+EXPORT_SYMBOL_GPL(cache_firmware);
-+EXPORT_SYMBOL_GPL(uncache_firmware);
-diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
-index 77e3b97..8bde48f 100644
---- a/drivers/base/power/main.c
-+++ b/drivers/base/power/main.c
-@@ -1387,3 +1387,25 @@ int device_pm_wait_for_dev(struct device *subordinate, struct device *dev)
- 	return async_error;
- }
- EXPORT_SYMBOL_GPL(device_pm_wait_for_dev);
-+
-+/**
-+ * dpm_for_each_dev - device iterator.
-+ * @data: data for the callback.
-+ * @fn: function to be called for each device.
-+ *
-+ * Iterate over devices in dpm_list, and call @fn for each device,
-+ * passing it @data.
-+ */
-+void dpm_for_each_dev(void *data, void (*fn)(struct device *, void *))
-+{
-+	struct device *dev;
-+
-+	if (!fn)
-+		return;
-+
-+	device_pm_lock();
-+	list_for_each_entry(dev, &dpm_list, power.entry)
-+		fn(dev, data);
-+	device_pm_unlock();
-+}
-+EXPORT_SYMBOL_GPL(dpm_for_each_dev);
-diff --git a/include/linux/device.h b/include/linux/device.h
-index 5ad17cc..ad8904d 100644
---- a/include/linux/device.h
-+++ b/include/linux/device.h
-@@ -531,6 +531,10 @@ extern void *__devres_alloc(dr_release_t release, size_t size, gfp_t gfp,
- #else
- extern void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp);
- #endif
-+extern void devres_for_each_res(struct device *dev, dr_release_t release,
-+				dr_match_t match, void *match_data,
-+				void (*fn)(struct device *, void *, void *),
-+				void *data);
- extern void devres_free(void *res);
- extern void devres_add(struct device *dev, void *res);
- extern void *devres_find(struct device *dev, dr_release_t release,
-@@ -541,6 +545,8 @@ extern void *devres_remove(struct device *dev, dr_release_t release,
- 			   dr_match_t match, void *match_data);
- extern int devres_destroy(struct device *dev, dr_release_t release,
- 			  dr_match_t match, void *match_data);
-+extern int devres_release(struct device *dev, dr_release_t release,
-+			  dr_match_t match, void *match_data);
- 
- /* devres group */
- extern void * __must_check devres_open_group(struct device *dev, void *id,
-diff --git a/include/linux/firmware.h b/include/linux/firmware.h
-index 1e7c011..e4279fe 100644
---- a/include/linux/firmware.h
-+++ b/include/linux/firmware.h
-@@ -12,6 +12,9 @@ struct firmware {
- 	size_t size;
- 	const u8 *data;
- 	struct page **pages;
-+
-+	/* firmware loader private fields */
-+	void *priv;
- };
- 
- struct module;
-@@ -44,6 +47,8 @@ int request_firmware_nowait(
- 	void (*cont)(const struct firmware *fw, void *context));
- 
- void release_firmware(const struct firmware *fw);
-+int cache_firmware(const char *name);
-+int uncache_firmware(const char *name);
- #else
- static inline int request_firmware(const struct firmware **fw,
- 				   const char *name,
-@@ -62,6 +67,16 @@ static inline int request_firmware_nowait(
- static inline void release_firmware(const struct firmware *fw)
- {
- }
-+
-+static inline int cache_firmware(const char *name)
-+{
-+	return -ENOENT;
-+}
-+
-+static inline int uncache_firmware(const char *name)
-+{
-+	return -EINVAL;
-+}
- #endif
- 
- #endif
-diff --git a/include/linux/pm.h b/include/linux/pm.h
-index f067e60..88f034a 100644
---- a/include/linux/pm.h
-+++ b/include/linux/pm.h
-@@ -638,6 +638,7 @@ extern void __suspend_report_result(const char *function, void *fn, int ret);
- 	} while (0)
- 
- extern int device_pm_wait_for_dev(struct device *sub, struct device *dev);
-+extern void dpm_for_each_dev(void *data, void (*fn)(struct device *, void *));
- 
- extern int pm_generic_prepare(struct device *dev);
- extern int pm_generic_suspend_late(struct device *dev);
-@@ -677,6 +678,10 @@ static inline int device_pm_wait_for_dev(struct device *a, struct device *b)
- 	return 0;
- }
- 
-+static inline void dpm_for_each_dev(void *data, void (*fn)(struct device *, void *))
-+{
-+}
-+
- #define pm_generic_prepare	NULL
- #define pm_generic_suspend	NULL
- #define pm_generic_resume	NULL
--- 
-2.1.3
-
diff --git a/core/linux-sun7i/0001-Backport-msdos-partition-UUIDs.patch b/core/linux-sun7i/0001-Backport-msdos-partition-UUIDs.patch
deleted file mode 100644
index 13a78d344..000000000
--- a/core/linux-sun7i/0001-Backport-msdos-partition-UUIDs.patch
+++ /dev/null
@@ -1,632 +0,0 @@
-From dbef9fc3e1410edcd553989a3ddc1120609a5ad3 Mon Sep 17 00:00:00 2001
-From: Kevin Mihelich <kevin@archlinuxarm.org>
-Date: Fri, 2 Jan 2015 19:50:37 -0700
-Subject: [PATCH] Backport msdos partition UUIDs
-
-Squashed commit of the following:
-
-commit 2819ae1987539215d1ce91d80d831e0350107e1e
-Author: Stephen Warren <swarren@nvidia.com>
-Date:   Thu Nov 8 16:12:28 2012 -0800
-
-    block: partition: msdos: provide UUIDs for partitions
-
-    The MSDOS/MBR partition table includes a 32-bit unique ID, often referred
-    to as the NT disk signature.  When combined with a partition number within
-    the table, this can form a unique ID similar in concept to EFI/GPT's
-    partition UUID.  Constructing and recording this value in struct
-    partition_meta_info allows MSDOS partitions to be referred to on the
-    kernel command-line using the following syntax:
-
-    root=PARTUUID=0002dd75-01
-
-    Signed-off-by: Stephen Warren <swarren@nvidia.com>
-    Cc: Tejun Heo <tj@kernel.org>
-    Cc: Will Drewry <wad@chromium.org>
-    Cc: Kay Sievers <kay.sievers@vrfy.org>
-    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-    Signed-off-by: Jens Axboe <axboe@kernel.dk>
-
-commit a4f7d3032fb20f11722d266f678a004ec0f9f0b1
-Author: Stephen Warren <swarren@nvidia.com>
-Date:   Thu Nov 8 16:12:27 2012 -0800
-
-    init: reduce PARTUUID min length to 1 from 36
-
-    Reduce the minimum length for a root=PARTUUID= parameter to be considered
-    valid from 36 to 1.  EFI/GPT partition UUIDs are always exactly 36
-    characters long, hence the previous limit.  However, the next patch will
-    support DOS/MBR UUIDs too, which have a different, shorter, format.
-    Instead of validating any particular length, just ensure that at least
-    some non-empty value was given by the user.
-
-    Also, consider a missing UUID value to be a parsing error, in the same
-    vein as if /PARTNROFF exists and can't be parsed.  As such, make both
-    error cases print a message and disable rootwait.  Convert to pr_err while
-    we're at it.
-
-    Signed-off-by: Stephen Warren <swarren@nvidia.com>
-    Cc: Tejun Heo <tj@kernel.org>
-    Cc: Will Drewry <wad@chromium.org>
-    Cc: Kay Sievers <kay.sievers@vrfy.org>
-    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-    Signed-off-by: Jens Axboe <axboe@kernel.dk>
-
-commit 0422f1d96772bf35a14bc87f3bb603b9ff825799
-Author: Stephen Warren <swarren@nvidia.com>
-Date:   Thu Nov 8 16:12:25 2012 -0800
-
-    block: store partition_meta_info.uuid as a string
-
-    This will allow other types of UUID to be stored here, aside from true
-    UUIDs.  This also simplifies code that uses this field, since it's usually
-    constructed from a, used as a, or compared to other, strings.
-
-    Note: A simplistic approach here would be to set uuid_str[36]=0 whenever a
-    /PARTNROFF option was found to be present.  However, this modifies the
-    input string, and causes subsequent calls to devt_from_partuuid() not to
-    see the /PARTNROFF option, which causes different results.  In order to
-    avoid misleading future maintainers, this parameter is marked const.
-
-    Signed-off-by: Stephen Warren <swarren@nvidia.com>
-    Cc: Tejun Heo <tj@kernel.org>
-    Cc: Will Drewry <wad@chromium.org>
-    Cc: Kay Sievers <kay.sievers@vrfy.org>
-    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-    Signed-off-by: Jens Axboe <axboe@kernel.dk>
-
-commit 152f0b9a9d1d0ee8c01eaa1dda689bd5d0f9d512
-Author: Vivek Goyal <vgoyal@redhat.com>
-Date:   Wed Aug 1 12:24:18 2012 +0200
-
-    block: add partition resize function to blkpg ioctl
-
-    Add a new operation code (BLKPG_RESIZE_PARTITION) to the BLKPG ioctl that
-    allows altering the size of an existing partition, even if it is currently
-    in use.
-
-    This patch converts hd_struct->nr_sects into sequence counter because
-    One might extend a partition while IO is happening to it and update of
-    nr_sects can be non-atomic on 32bit machines with 64bit sector_t. This
-    can lead to issues like reading inconsistent size of a partition. Sequence
-    counter have been used so that readers don't have to take bdev mutex lock
-    as we call sector_in_part() very frequently.
-
-    Now all the access to hd_struct->nr_sects should happen using sequence
-    counter read/update helper functions part_nr_sects_read/part_nr_sects_write.
-    There is one exception though, set_capacity()/get_capacity(). I think
-    theoritically race should exist there too but this patch does not
-    modify set_capacity()/get_capacity() due to sheer number of call sites
-    and I am afraid that change might break something. I have left that as a
-    TODO item. We can handle it later if need be. This patch does not introduce
-    any new races as such w.r.t set_capacity()/get_capacity().
-
-    v2: Add CONFIG_LBDAF test to UP preempt case as suggested by Phillip.
-
-    Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
-    Signed-off-by: Phillip Susi <psusi@ubuntu.com>
-    Signed-off-by: Jens Axboe <axboe@kernel.dk>
----
- block/genhd.c             | 28 +++++++++++---------
- block/ioctl.c             | 59 +++++++++++++++++++++++++++++++++++++++---
- block/partition-generic.c |  4 ++-
- block/partitions/efi.c    |  7 +----
- block/partitions/msdos.c  | 21 +++++++++++++--
- include/linux/blkpg.h     |  1 +
- include/linux/genhd.h     | 65 +++++++++++++++++++++++++++++++++++++++++++++--
- init/do_mounts.c          | 61 +++++++++++++++++++++++++++++---------------
- 8 files changed, 199 insertions(+), 47 deletions(-)
-
-diff --git a/block/genhd.c b/block/genhd.c
-index dd44885..3d9d3f59 100644
---- a/block/genhd.c
-+++ b/block/genhd.c
-@@ -154,7 +154,7 @@ struct hd_struct *disk_part_iter_next(struct disk_part_iter *piter)
- 		part = rcu_dereference(ptbl->part[piter->idx]);
- 		if (!part)
- 			continue;
--		if (!part->nr_sects &&
-+		if (!part_nr_sects_read(part) &&
- 		    !(piter->flags & DISK_PITER_INCL_EMPTY) &&
- 		    !(piter->flags & DISK_PITER_INCL_EMPTY_PART0 &&
- 		      piter->idx == 0))
-@@ -191,7 +191,7 @@ EXPORT_SYMBOL_GPL(disk_part_iter_exit);
- static inline int sector_in_part(struct hd_struct *part, sector_t sector)
- {
- 	return part->start_sect <= sector &&
--		sector < part->start_sect + part->nr_sects;
-+		sector < part->start_sect + part_nr_sects_read(part);
- }
- 
- /**
-@@ -744,7 +744,6 @@ void __init printk_all_partitions(void)
- 		struct hd_struct *part;
- 		char name_buf[BDEVNAME_SIZE];
- 		char devt_buf[BDEVT_SIZE];
--		char uuid_buf[PARTITION_META_INFO_UUIDLTH * 2 + 5];
- 
- 		/*
- 		 * Don't show empty devices or things that have been
-@@ -763,16 +762,11 @@ void __init printk_all_partitions(void)
- 		while ((part = disk_part_iter_next(&piter))) {
- 			bool is_part0 = part == &disk->part0;
- 
--			uuid_buf[0] = '\0';
--			if (part->info)
--				snprintf(uuid_buf, sizeof(uuid_buf), "%pU",
--					 part->info->uuid);
--
- 			printk("%s%s %10llu %s %s", is_part0 ? "" : "  ",
- 			       bdevt_str(part_devt(part), devt_buf),
--			       (unsigned long long)part->nr_sects >> 1,
--			       disk_name(disk, part->partno, name_buf),
--			       uuid_buf);
-+			       (unsigned long long)part_nr_sects_read(part) >> 1
-+			       , disk_name(disk, part->partno, name_buf),
-+			       part->info ? part->info->uuid : "");
- 			if (is_part0) {
- 				if (disk->driverfs_dev != NULL &&
- 				    disk->driverfs_dev->driver != NULL)
-@@ -863,7 +857,7 @@ static int show_partition(struct seq_file *seqf, void *v)
- 	while ((part = disk_part_iter_next(&piter)))
- 		seq_printf(seqf, "%4d  %7d %10llu %s\n",
- 			   MAJOR(part_devt(part)), MINOR(part_devt(part)),
--			   (unsigned long long)part->nr_sects >> 1,
-+			   (unsigned long long)part_nr_sects_read(part) >> 1,
- 			   disk_name(sgp, part->partno, buf));
- 	disk_part_iter_exit(&piter);
- 
-@@ -1286,6 +1280,16 @@ struct gendisk *alloc_disk_node(int minors, int node_id)
- 		}
- 		disk->part_tbl->part[0] = &disk->part0;
- 
-+		/*
-+		 * set_capacity() and get_capacity() currently don't use
-+		 * seqcounter to read/update the part0->nr_sects. Still init
-+		 * the counter as we can read the sectors in IO submission
-+		 * patch using seqence counters.
-+		 *
-+		 * TODO: Ideally set_capacity() and get_capacity() should be
-+		 * converted to make use of bd_mutex and sequence counters.
-+		 */
-+		seqcount_init(&disk->part0.nr_sects_seq);
- 		hd_ref_init(&disk->part0);
- 
- 		disk->minors = minors;
-diff --git a/block/ioctl.c b/block/ioctl.c
-index ba15b2d..4476e0e8 100644
---- a/block/ioctl.c
-+++ b/block/ioctl.c
-@@ -13,7 +13,7 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg __user
- {
- 	struct block_device *bdevp;
- 	struct gendisk *disk;
--	struct hd_struct *part;
-+	struct hd_struct *part, *lpart;
- 	struct blkpg_ioctl_arg a;
- 	struct blkpg_partition p;
- 	struct disk_part_iter piter;
-@@ -36,8 +36,8 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg __user
- 		case BLKPG_ADD_PARTITION:
- 			start = p.start >> 9;
- 			length = p.length >> 9;
--			/* check for fit in a hd_struct */ 
--			if (sizeof(sector_t) == sizeof(long) && 
-+			/* check for fit in a hd_struct */
-+			if (sizeof(sector_t) == sizeof(long) &&
- 			    sizeof(long long) > sizeof(long)) {
- 				long pstart = start, plength = length;
- 				if (pstart != start || plength != length
-@@ -92,6 +92,59 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg __user
- 			bdput(bdevp);
- 
- 			return 0;
-+		case BLKPG_RESIZE_PARTITION:
-+			start = p.start >> 9;
-+			/* new length of partition in bytes */
-+			length = p.length >> 9;
-+			/* check for fit in a hd_struct */
-+			if (sizeof(sector_t) == sizeof(long) &&
-+			    sizeof(long long) > sizeof(long)) {
-+				long pstart = start, plength = length;
-+				if (pstart != start || plength != length
-+				    || pstart < 0 || plength < 0)
-+					return -EINVAL;
-+			}
-+			part = disk_get_part(disk, partno);
-+			if (!part)
-+				return -ENXIO;
-+			bdevp = bdget(part_devt(part));
-+			if (!bdevp) {
-+				disk_put_part(part);
-+				return -ENOMEM;
-+			}
-+			mutex_lock(&bdevp->bd_mutex);
-+			mutex_lock_nested(&bdev->bd_mutex, 1);
-+			if (start != part->start_sect) {
-+				mutex_unlock(&bdevp->bd_mutex);
-+				mutex_unlock(&bdev->bd_mutex);
-+				bdput(bdevp);
-+				disk_put_part(part);
-+				return -EINVAL;
-+			}
-+			/* overlap? */
-+			disk_part_iter_init(&piter, disk,
-+					    DISK_PITER_INCL_EMPTY);
-+			while ((lpart = disk_part_iter_next(&piter))) {
-+				if (lpart->partno != partno &&
-+				   !(start + length <= lpart->start_sect ||
-+				   start >= lpart->start_sect + lpart->nr_sects)
-+				   ) {
-+					disk_part_iter_exit(&piter);
-+					mutex_unlock(&bdevp->bd_mutex);
-+					mutex_unlock(&bdev->bd_mutex);
-+					bdput(bdevp);
-+					disk_put_part(part);
-+					return -EBUSY;
-+				}
-+			}
-+			disk_part_iter_exit(&piter);
-+			part_nr_sects_write(part, (sector_t)length);
-+			i_size_write(bdevp->bd_inode, p.length);
-+			mutex_unlock(&bdevp->bd_mutex);
-+			mutex_unlock(&bdev->bd_mutex);
-+			bdput(bdevp);
-+			disk_put_part(part);
-+			return 0;
- 		default:
- 			return -EINVAL;
- 	}
-diff --git a/block/partition-generic.c b/block/partition-generic.c
-index 8d9281d..d5f9306 100644
---- a/block/partition-generic.c
-+++ b/block/partition-generic.c
-@@ -89,7 +89,7 @@ ssize_t part_size_show(struct device *dev,
- 		       struct device_attribute *attr, char *buf)
- {
- 	struct hd_struct *p = dev_to_part(dev);
--	return sprintf(buf, "%llu\n",(unsigned long long)p->nr_sects);
-+	return sprintf(buf, "%llu\n",(unsigned long long)part_nr_sects_read(p));
- }
- 
- static ssize_t part_ro_show(struct device *dev,
-@@ -310,6 +310,8 @@ struct hd_struct *add_partition(struct gendisk *disk, int partno,
- 		err = -ENOMEM;
- 		goto out_free;
- 	}
-+
-+	seqcount_init(&p->nr_sects_seq);
- 	pdev = part_to_dev(p);
- 
- 	p->start_sect = start;
-diff --git a/block/partitions/efi.c b/block/partitions/efi.c
-index 6296b40..b62fb88 100644
---- a/block/partitions/efi.c
-+++ b/block/partitions/efi.c
-@@ -620,7 +620,6 @@ int efi_partition(struct parsed_partitions *state)
- 	gpt_entry *ptes = NULL;
- 	u32 i;
- 	unsigned ssz = bdev_logical_block_size(state->bdev) / 512;
--	u8 unparsed_guid[37];
- 
- 	if (!find_valid_gpt(state, &gpt, &ptes) || !gpt || !ptes) {
- 		kfree(gpt);
-@@ -649,11 +648,7 @@ int efi_partition(struct parsed_partitions *state)
- 			state->parts[i + 1].flags = ADDPART_FLAG_RAID;
- 
- 		info = &state->parts[i + 1].info;
--		/* Instead of doing a manual swap to big endian, reuse the
--		 * common ASCII hex format as the interim.
--		 */
--		efi_guid_unparse(&ptes[i].unique_partition_guid, unparsed_guid);
--		part_pack_uuid(unparsed_guid, info->uuid);
-+		efi_guid_unparse(&ptes[i].unique_partition_guid, info->uuid);
- 
- 		/* Naively convert UTF16-LE to 7 bits. */
- 		label_max = min(sizeof(info->volname) - 1,
-diff --git a/block/partitions/msdos.c b/block/partitions/msdos.c
-index 5f79a66..8752a5d 100644
---- a/block/partitions/msdos.c
-+++ b/block/partitions/msdos.c
-@@ -94,6 +94,17 @@ static int aix_magic_present(struct parsed_partitions *state, unsigned char *p)
- 	return ret;
- }
- 
-+static void set_info(struct parsed_partitions *state, int slot,
-+		     u32 disksig)
-+{
-+	struct partition_meta_info *info = &state->parts[slot].info;
-+
-+	snprintf(info->uuid, sizeof(info->uuid), "%08x-%02x", disksig,
-+		 slot);
-+	info->volname[0] = 0;
-+	state->parts[slot].has_info = true;
-+}
-+
- /*
-  * Create devices for each logical partition in an extended partition.
-  * The logical partitions form a linked list, with each entry being
-@@ -106,7 +117,8 @@ static int aix_magic_present(struct parsed_partitions *state, unsigned char *p)
-  */
- 
- static void parse_extended(struct parsed_partitions *state,
--			   sector_t first_sector, sector_t first_size)
-+			   sector_t first_sector, sector_t first_size,
-+			   u32 disksig)
- {
- 	struct partition *p;
- 	Sector sect;
-@@ -166,6 +178,7 @@ static void parse_extended(struct parsed_partitions *state,
- 			}
- 
- 			put_partition(state, state->next, next, size);
-+			set_info(state, state->next, disksig);
- 			if (SYS_IND(p) == LINUX_RAID_PARTITION)
- 				state->parts[state->next].flags = ADDPART_FLAG_RAID;
- 			loopct = 0;
-@@ -437,6 +450,7 @@ int msdos_partition(struct parsed_partitions *state)
- 	struct partition *p;
- 	struct fat_boot_sector *fb;
- 	int slot;
-+	u32 disksig;
- 
- 	data = read_part_sector(state, 0, &sect);
- 	if (!data)
-@@ -491,6 +505,8 @@ int msdos_partition(struct parsed_partitions *state)
- #endif
- 	p = (struct partition *) (data + 0x1be);
- 
-+	disksig = le32_to_cpup((__le32 *)(data + 0x1b8));
-+
- 	/*
- 	 * Look for partitions in two passes:
- 	 * First find the primary and DOS-type extended partitions.
-@@ -515,11 +531,12 @@ int msdos_partition(struct parsed_partitions *state)
- 			put_partition(state, slot, start, n);
- 
- 			strlcat(state->pp_buf, " <", PAGE_SIZE);
--			parse_extended(state, start, size);
-+			parse_extended(state, start, size, disksig);
- 			strlcat(state->pp_buf, " >", PAGE_SIZE);
- 			continue;
- 		}
- 		put_partition(state, slot, start, size);
-+		set_info(state, slot, disksig);
- 		if (SYS_IND(p) == LINUX_RAID_PARTITION)
- 			state->parts[slot].flags = ADDPART_FLAG_RAID;
- 		if (SYS_IND(p) == DM6_PARTITION)
-diff --git a/include/linux/blkpg.h b/include/linux/blkpg.h
-index faf8a45..a851944 100644
---- a/include/linux/blkpg.h
-+++ b/include/linux/blkpg.h
-@@ -40,6 +40,7 @@ struct blkpg_ioctl_arg {
- /* The subfunctions (for the op field) */
- #define BLKPG_ADD_PARTITION	1
- #define BLKPG_DEL_PARTITION	2
-+#define BLKPG_RESIZE_PARTITION	3
- 
- /* Sizes of name fields. Unused at present. */
- #define BLKPG_DEVNAMELTH	64
-diff --git a/include/linux/genhd.h b/include/linux/genhd.h
-index 017a7fb..9747efc 100644
---- a/include/linux/genhd.h
-+++ b/include/linux/genhd.h
-@@ -89,16 +89,26 @@ struct disk_stats {
- };
- 
- #define PARTITION_META_INFO_VOLNAMELTH	64
--#define PARTITION_META_INFO_UUIDLTH	16
-+/*
-+ * Enough for the string representation of any kind of UUID plus NULL.
-+ * EFI UUID is 36 characters. MSDOS UUID is 11 characters.
-+ */
-+#define PARTITION_META_INFO_UUIDLTH	37
- 
- struct partition_meta_info {
--	u8 uuid[PARTITION_META_INFO_UUIDLTH];	/* always big endian */
-+	char uuid[PARTITION_META_INFO_UUIDLTH];
- 	u8 volname[PARTITION_META_INFO_VOLNAMELTH];
- };
- 
- struct hd_struct {
- 	sector_t start_sect;
-+	/*
-+	 * nr_sects is protected by sequence counter. One might extend a
-+	 * partition while IO is happening to it and update of nr_sects
-+	 * can be non-atomic on 32bit machines with 64bit sector_t.
-+	 */
- 	sector_t nr_sects;
-+	seqcount_t nr_sects_seq;
- 	sector_t alignment_offset;
- 	unsigned int discard_alignment;
- 	struct device __dev;
-@@ -648,6 +658,57 @@ static inline void hd_struct_put(struct hd_struct *part)
- 		__delete_partition(part);
- }
- 
-+/*
-+ * Any access of part->nr_sects which is not protected by partition
-+ * bd_mutex or gendisk bdev bd_mutex, should be done using this
-+ * accessor function.
-+ *
-+ * Code written along the lines of i_size_read() and i_size_write().
-+ * CONFIG_PREEMPT case optimizes the case of UP kernel with preemption
-+ * on.
-+ */
-+static inline sector_t part_nr_sects_read(struct hd_struct *part)
-+{
-+#if BITS_PER_LONG==32 && defined(CONFIG_LBDAF) && defined(CONFIG_SMP)
-+	sector_t nr_sects;
-+	unsigned seq;
-+	do {
-+		seq = read_seqcount_begin(&part->nr_sects_seq);
-+		nr_sects = part->nr_sects;
-+	} while (read_seqcount_retry(&part->nr_sects_seq, seq));
-+	return nr_sects;
-+#elif BITS_PER_LONG==32 && defined(CONFIG_LBDAF) && defined(CONFIG_PREEMPT)
-+	sector_t nr_sects;
-+
-+	preempt_disable();
-+	nr_sects = part->nr_sects;
-+	preempt_enable();
-+	return nr_sects;
-+#else
-+	return part->nr_sects;
-+#endif
-+}
-+
-+/*
-+ * Should be called with mutex lock held (typically bd_mutex) of partition
-+ * to provide mutual exlusion among writers otherwise seqcount might be
-+ * left in wrong state leaving the readers spinning infinitely.
-+ */
-+static inline void part_nr_sects_write(struct hd_struct *part, sector_t size)
-+{
-+#if BITS_PER_LONG==32 && defined(CONFIG_LBDAF) && defined(CONFIG_SMP)
-+	write_seqcount_begin(&part->nr_sects_seq);
-+	part->nr_sects = size;
-+	write_seqcount_end(&part->nr_sects_seq);
-+#elif BITS_PER_LONG==32 && defined(CONFIG_LBDAF) && defined(CONFIG_PREEMPT)
-+	preempt_disable();
-+	part->nr_sects = size;
-+	preempt_enable();
-+#else
-+	part->nr_sects = size;
-+#endif
-+}
-+
- #else /* CONFIG_BLOCK */
- 
- static inline void printk_all_partitions(void) { }
-diff --git a/init/do_mounts.c b/init/do_mounts.c
-index 7b81405..97fb6f0 100644
---- a/init/do_mounts.c
-+++ b/init/do_mounts.c
-@@ -59,23 +59,28 @@ __setup("ro", readonly);
- __setup("rw", readwrite);
- 
- #ifdef CONFIG_BLOCK
-+struct uuidcmp {
-+	const char *uuid;
-+	int len;
-+};
-+
- /**
-  * match_dev_by_uuid - callback for finding a partition using its uuid
-  * @dev:	device passed in by the caller
-- * @data:	opaque pointer to a 36 byte char array with a UUID
-+ * @data:	opaque pointer to the desired struct uuidcmp to match
-  *
-  * Returns 1 if the device matches, and 0 otherwise.
-  */
- static int match_dev_by_uuid(struct device *dev, void *data)
- {
--	u8 *uuid = data;
-+	struct uuidcmp *cmp = data;
- 	struct hd_struct *part = dev_to_part(dev);
- 
- 	if (!part->info)
- 		goto no_match;
- 
--	if (memcmp(uuid, part->info->uuid, sizeof(part->info->uuid)))
--			goto no_match;
-+	if (strncasecmp(cmp->uuid, part->info->uuid, cmp->len))
-+		goto no_match;
- 
- 	return 1;
- no_match:
-@@ -85,7 +90,7 @@ no_match:
- 
- /**
-  * devt_from_partuuid - looks up the dev_t of a partition by its UUID
-- * @uuid:	min 36 byte char array containing a hex ascii UUID
-+ * @uuid:	char array containing ascii UUID
-  *
-  * The function will return the first partition which contains a matching
-  * UUID value in its partition_meta_info struct.  This does not search
-@@ -96,38 +101,41 @@ no_match:
-  *
-  * Returns the matching dev_t on success or 0 on failure.
-  */
--static dev_t devt_from_partuuid(char *uuid_str)
-+static dev_t devt_from_partuuid(const char *uuid_str)
- {
- 	dev_t res = 0;
-+	struct uuidcmp cmp;
- 	struct device *dev = NULL;
--	u8 uuid[16];
- 	struct gendisk *disk;
- 	struct hd_struct *part;
- 	int offset = 0;
-+	bool clear_root_wait = false;
-+	char *slash;
- 
--	if (strlen(uuid_str) < 36)
--		goto done;
-+	cmp.uuid = uuid_str;
- 
-+	slash = strchr(uuid_str, '/');
- 	/* Check for optional partition number offset attributes. */
--	if (uuid_str[36]) {
-+	if (slash) {
- 		char c = 0;
- 		/* Explicitly fail on poor PARTUUID syntax. */
--		if (sscanf(&uuid_str[36],
--			   "/PARTNROFF=%d%c", &offset, &c) != 1) {
--			printk(KERN_ERR "VFS: PARTUUID= is invalid.\n"
--			 "Expected PARTUUID=<valid-uuid-id>[/PARTNROFF=%%d]\n");
--			if (root_wait)
--				printk(KERN_ERR
--				     "Disabling rootwait; root= is invalid.\n");
--			root_wait = 0;
-+		if (sscanf(slash + 1,
-+			   "PARTNROFF=%d%c", &offset, &c) != 1) {
-+			clear_root_wait = true;
- 			goto done;
- 		}
-+		cmp.len = slash - uuid_str;
-+	} else {
-+		cmp.len = strlen(uuid_str);
- 	}
- 
--	/* Pack the requested UUID in the expected format. */
--	part_pack_uuid(uuid_str, uuid);
-+	if (!cmp.len) {
-+		clear_root_wait = true;
-+		goto done;
-+	}
- 
--	dev = class_find_device(&block_class, NULL, uuid, &match_dev_by_uuid);
-+	dev = class_find_device(&block_class, NULL, &cmp,
-+				&match_dev_by_uuid);
- 	if (!dev)
- 		goto done;
- 
-@@ -148,6 +156,13 @@ static dev_t devt_from_partuuid(char *uuid_str)
- no_offset:
- 	put_device(dev);
- done:
-+	if (clear_root_wait) {
-+		pr_err("VFS: PARTUUID= is invalid.\n"
-+		       "Expected PARTUUID=<valid-uuid-id>[/PARTNROFF=%%d]\n");
-+		if (root_wait)
-+			pr_err("Disabling rootwait; root= is invalid.\n");
-+		root_wait = 0;
-+	}
- 	return res;
- }
- #endif
-@@ -164,6 +179,10 @@ done:
-  *	   used when disk name of partitioned disk ends on a digit.
-  *	6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the
-  *	   unique id of a partition if the partition table provides it.
-+ *	   The UUID may be either an EFI/GPT UUID, or refer to an MSDOS
-+ *	   partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero-
-+ *	   filled hex representation of the 32-bit "NT disk signature", and PP
-+ *	   is a zero-filled hex representation of the 1-based partition number.
-  *	7) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation to
-  *	   a partition with a known unique id.
-  *
--- 
-2.2.1
-
diff --git a/core/linux-sun7i/PKGBUILD b/core/linux-sun7i/PKGBUILD
deleted file mode 100644
index ed5e9bafa..000000000
--- a/core/linux-sun7i/PKGBUILD
+++ /dev/null
@@ -1,266 +0,0 @@
-# sun7i
-# Maintainer: Kevin Mihelich <kevin@archlinuxarm.org>
-
-buildarch=4
-
-pkgbase=linux-sun7i
-_commit=9a1cd034181af628d4145202289e1993c1687db6
-_srcname=linux-sunxi-${_commit}
-_kernelname=${pkgbase#linux}
-_desc="sun7i"
-pkgver=3.4.103
-pkgrel=5
-arch=('armv7h')
-url="https://github.com/linux-sunxi/linux-sunxi/"
-license=('GPL2')
-makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc' 'uboot-tools' 'git')
-options=('!strip')
-source=("https://github.com/linux-sunxi/linux-sunxi/archive/${_commit}.tar.gz"
-        "https://raw.githubusercontent.com/EddyBeaupre/ap6210/master/ap6210_module.patch"
-        'config'
-        '0001-Backport-BFP-XOR-operation.patch'
-        '0001-Backport-firmware-loader.patch'
-        '0001-Backport-msdos-partition-UUIDs.patch')
-md5sums=('6cdd44f9131a854cdbf5ddad86187c57'
-         'f74bbefcd84c7d6626e2a763c6791556'
-         '3d3914c6b3e80956ccc04112edc283fa'
-         'ca5b466850782493b99e824d6efbea4d'
-         '520bde63dd6803f3332e9b26cb34cff9'
-         '743724d560cf34dadefb8e976a31319c')
-
-prepare() {
-  cd "${srcdir}/${_srcname}"
-
-  cat "${srcdir}/config" > ./.config
-
-  git apply ../0001-Backport-BFP-XOR-operation.patch
-  git apply ../0001-Backport-firmware-loader.patch
-  git apply ../0001-Backport-msdos-partition-UUIDs.patch
-  patch -p1 < ${srcdir}/ap6210_module.patch
-
-  # add pkgrel to extraversion
-  sed -ri "s|^(EXTRAVERSION =)(.*)|\1 \2-${pkgrel}|" Makefile
-
-  # don't run depmod on 'make install'. We'll do this ourselves in packaging
-  sed -i '2iexit 0' scripts/depmod.sh
-}
-
-build() {
-  cd "${srcdir}/${_srcname}"
-
-  LDFLAGS=""
-
-  # get kernel version
-  make prepare
-
-  # load configuration
-  # Configure the kernel. Replace the line below with one of your choice.
-  #make menuconfig # CLI menu for configuration
-  #make nconfig # new CLI menu for configuration
-  #make xconfig # X-based configuration
-  #make oldconfig # using old config from previous kernel version
-  # ... or manually edit .config
-
-  # Copy back our configuration (use with new kernel version)
-  #cp ./.config ../${pkgbase}.config
-
-  ####################
-  # stop here
-  # this is useful to configure the kernel
-  #msg "Stopping build"
-  #return 1
-  ####################
-
-  #yes "" | make config
-
-  # build!
-  make ${MAKEFLAGS} uImage modules
-}
-
-_package() {
-  pkgdesc="The Linux Kernel and modules - ${_desc}"
-  depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7')
-  optdepends=('crda: to set the correct wireless channels of your country')
-  provides=('kernel26' "linux=${pkgver}" 'aufs_friendly')
-  conflicts=('linux-omap' 'linux-imx6' 'linux-armada370')
-  install=${pkgname}.install
-
-  cd "${srcdir}/${_srcname}"
-
-  KARCH=arm
-
-  # get kernel version
-  _kernver="$(make kernelrelease)"
-  _basekernel=${_kernver%%-*}
-  _basekernel=${_basekernel%.*}
-
-  mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot}
-  make INSTALL_MOD_PATH="${pkgdir}" modules_install
-  cp arch/$KARCH/boot/uImage "${pkgdir}/boot/uImage"
-
-  # set correct depmod command for install
-  sed \
-    -e  "s/KERNEL_NAME=.*/KERNEL_NAME=${_kernelname}/g" \
-    -e  "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" \
-    -i "${startdir}/${pkgname}.install"
-
-  # remove build and source links
-  rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build}
-  # remove the firmware
-  rm -rf "${pkgdir}/lib/firmware"
-  # gzip -9 all modules to save 100MB of space
-  find "${pkgdir}" -name '*.ko' |xargs -P 2 -n 1 gzip -9
-  # make room for external modules
-  ln -s "../extramodules-${_basekernel}-${_kernelname:-ARCH}" "${pkgdir}/lib/modules/${_kernver}/extramodules"
-  # add real version for building modules and running depmod from post_install/upgrade
-  mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}-${_kernelname:-ARCH}"
-  echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}-${_kernelname:-ARCH}/version"
-
-  # Now we call depmod...
-  depmod -b "$pkgdir" -F System.map "$_kernver"
-
-  # move module tree /lib -> /usr/lib
-  mkdir -p "${pkgdir}/usr"
-  mv "$pkgdir/lib" "$pkgdir/usr"
-}
-
-_package-headers() {
-  pkgdesc="Header files and scripts for building modules for linux kernel - ${_desc}"
-  provides=("linux-headers=${pkgver}")
-  conflicts=('linux-headers-omap' 'linux-headers-imx6')
-
-  install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}"
-
-  cd "${pkgdir}/usr/lib/modules/${_kernver}"
-  ln -sf ../../../src/linux-${_kernver} build
-
-  cd "${srcdir}/${_srcname}"
-  install -D -m644 Makefile \
-    "${pkgdir}/usr/src/linux-${_kernver}/Makefile"
-  install -D -m644 kernel/Makefile \
-    "${pkgdir}/usr/src/linux-${_kernver}/kernel/Makefile"
-  install -D -m644 .config \
-    "${pkgdir}/usr/src/linux-${_kernver}/.config"
-
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include"
-
-  for i in acpi asm-generic config crypto drm generated linux math-emu \
-    media net pcmcia scsi sound trace video xen; do
-    cp -a include/${i} "${pkgdir}/usr/src/linux-${_kernver}/include/"
-  done
-
-  # copy arch includes for external modules
-  mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH
-  cp -a arch/$KARCH/include ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/
-  mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/mach-sun7i
-  cp -a arch/$KARCH/mach-sun7i/include ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/mach-sun7i/
-  mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/plat-sunxi
-  cp -a arch/$KARCH/plat-sunxi/include ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/plat-sunxi/
-
-  # copy files necessary for later builds, like nvidia and vmware
-  cp Module.symvers "${pkgdir}/usr/src/linux-${_kernver}"
-  cp -a scripts "${pkgdir}/usr/src/linux-${_kernver}"
-
-  # fix permissions on scripts dir
-  chmod og-w -R "${pkgdir}/usr/src/linux-${_kernver}/scripts"
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/.tmp_versions"
-
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/kernel"
-
-  cp arch/${KARCH}/Makefile "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/"
-
-  if [ "${CARCH}" = "i686" ]; then
-    cp arch/${KARCH}/Makefile_32.cpu "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/"
-  fi
-
-  cp arch/${KARCH}/kernel/asm-offsets.s "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/kernel/"
-
-# add headers for lirc package
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video"
-
-  cp drivers/media/video/*.h  "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/"
-
-  for i in bt8xx cpia2 cx25840 cx88 em28xx et61x251 pwc saa7134 sn9c102; do
-    mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}"
-    cp -a drivers/media/video/${i}/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}"
-  done
-
-  # add docbook makefile
-  install -D -m644 Documentation/DocBook/Makefile \
-    "${pkgdir}/usr/src/linux-${_kernver}/Documentation/DocBook/Makefile"
-
-  # add dm headers
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/md"
-  cp drivers/md/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/md"
-
-  # add inotify.h
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include/linux"
-  cp include/linux/inotify.h "${pkgdir}/usr/src/linux-${_kernver}/include/linux/"
-
-  # add wireless headers
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/net/mac80211/"
-  cp net/mac80211/*.h "${pkgdir}/usr/src/linux-${_kernver}/net/mac80211/"
-
-  # add dvb headers for external modules
-  # in reference to:
-  # http://bugs.archlinux.org/task/9912
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core"
-  cp drivers/media/dvb/dvb-core/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core/"
-  # and...
-  # http://bugs.archlinux.org/task/11194
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include/config/dvb/"
-  cp include/config/dvb/*.h "${pkgdir}/usr/src/linux-${_kernver}/include/config/dvb/"
-
-  # add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new
-  # in reference to:
-  # http://bugs.archlinux.org/task/13146
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
-  cp drivers/media/dvb/frontends/lgdt330x.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
-  cp drivers/media/video/msp3400-driver.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
-
-  # add dvb headers
-  # in reference to:
-  # http://bugs.archlinux.org/task/20402
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-usb"
-  cp drivers/media/dvb/dvb-usb/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-usb/"
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends"
-  cp drivers/media/dvb/frontends/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/common/tuners"
-  cp drivers/media/common/tuners/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/common/tuners/"
-
-  # add xfs and shmem for aufs building
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/fs/xfs"
-  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/mm"
-  cp fs/xfs/xfs_sb.h "${pkgdir}/usr/src/linux-${_kernver}/fs/xfs/xfs_sb.h"
-
-  # copy in Kconfig files
-  for i in `find . -name "Kconfig*"`; do
-    mkdir -p "${pkgdir}"/usr/src/linux-${_kernver}/`echo ${i} | sed 's|/Kconfig.*||'`
-    cp ${i} "${pkgdir}/usr/src/linux-${_kernver}/${i}"
-  done
-
-  chown -R root.root "${pkgdir}/usr/src/linux-${_kernver}"
-  find "${pkgdir}/usr/src/linux-${_kernver}" -type d -exec chmod 755 {} \;
-
-  # strip scripts directory
-  find "${pkgdir}/usr/src/linux-${_kernver}/scripts" -type f -perm -u+w 2>/dev/null | while read binary ; do
-    case "$(file -bi "${binary}")" in
-      *application/x-sharedlib*) # Libraries (.so)
-        /usr/bin/strip ${STRIP_SHARED} "${binary}";;
-      *application/x-archive*) # Libraries (.a)
-        /usr/bin/strip ${STRIP_STATIC} "${binary}";;
-      *application/x-executable*) # Binaries
-        /usr/bin/strip ${STRIP_BINARIES} "${binary}";;
-    esac
-  done
-
-  # remove unneeded architectures
-  rm -rf "${pkgdir}"/usr/src/linux-${_kernver}/arch/{alpha,arm26,avr32,blackfin,cris,frv,h8300,ia64,m32r,m68k,m68knommu,mips,microblaze,mn10300,parisc,powerpc,ppc,s390,sh,sh64,sparc,sparc64,um,v850,x86,xtensa}
-}
-
-pkgname=("${pkgbase}" "${pkgbase}-headers")
-for _p in ${pkgname[@]}; do
-  eval "package_${_p}() {
-    _package${_p#${pkgbase}}
-  }"
-done
diff --git a/core/linux-sun7i/config b/core/linux-sun7i/config
deleted file mode 100644
index 787258834..000000000
--- a/core/linux-sun7i/config
+++ /dev/null
@@ -1,3785 +0,0 @@
-#
-# Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.4.103-4 Kernel Configuration
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-# CONFIG_ARCH_USES_GETTIMEOFFSET is not set
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
-CONFIG_KTIME_SCALAR=y
-CONFIG_HAVE_PROC_CPU=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_LOCKBREAK=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_ARCH_HAS_CPUFREQ=y
-CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_NEED_DMA_MAP_STATE=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_ARM_PATCH_PHYS_VIRT=y
-CONFIG_NEED_MACH_IO_H=y
-CONFIG_NEED_MACH_MEMORY_H=y
-CONFIG_GENERIC_BUG=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-CONFIG_HAVE_IRQ_WORK=y
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_CROSS_COMPILE=""
-CONFIG_LOCALVERSION="-ARCH"
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_HAVE_KERNEL_GZIP=y
-CONFIG_HAVE_KERNEL_LZMA=y
-CONFIG_HAVE_KERNEL_XZ=y
-CONFIG_HAVE_KERNEL_LZO=y
-CONFIG_KERNEL_GZIP=y
-# CONFIG_KERNEL_LZMA is not set
-# CONFIG_KERNEL_XZ is not set
-# CONFIG_KERNEL_LZO is not set
-CONFIG_DEFAULT_HOSTNAME="(none)"
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_POSIX_MQUEUE=y
-CONFIG_POSIX_MQUEUE_SYSCTL=y
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_BSD_PROCESS_ACCT_V3=y
-CONFIG_FHANDLE=y
-CONFIG_TASKSTATS=y
-CONFIG_TASK_DELAY_ACCT=y
-CONFIG_TASK_XACCT=y
-CONFIG_TASK_IO_ACCOUNTING=y
-# CONFIG_AUDIT is not set
-CONFIG_HAVE_GENERIC_HARDIRQS=y
-
-#
-# IRQ subsystem
-#
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_SHOW=y
-CONFIG_IRQ_DOMAIN=y
-# CONFIG_IRQ_DOMAIN_DEBUG is not set
-
-#
-# RCU Subsystem
-#
-CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_PREEMPT_RCU=y
-CONFIG_RCU_FANOUT=32
-# 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_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_CGROUPS=y
-# CONFIG_CGROUP_DEBUG is not set
-CONFIG_CGROUP_FREEZER=y
-CONFIG_CGROUP_DEVICE=y
-CONFIG_CPUSETS=y
-CONFIG_PROC_PID_CPUSET=y
-CONFIG_CGROUP_CPUACCT=y
-CONFIG_RESOURCE_COUNTERS=y
-CONFIG_CGROUP_MEM_RES_CTLR=y
-CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y
-CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED=y
-CONFIG_CGROUP_MEM_RES_CTLR_KMEM=y
-CONFIG_CGROUP_SCHED=y
-CONFIG_FAIR_GROUP_SCHED=y
-CONFIG_CFS_BANDWIDTH=y
-CONFIG_RT_GROUP_SCHED=y
-# CONFIG_BLK_CGROUP is not set
-# CONFIG_CHECKPOINT_RESTORE is not set
-CONFIG_NAMESPACES=y
-CONFIG_UTS_NS=y
-CONFIG_IPC_NS=y
-CONFIG_USER_NS=y
-CONFIG_PID_NS=y
-CONFIG_NET_NS=y
-CONFIG_SCHED_AUTOGROUP=y
-CONFIG_MM_OWNER=y
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_RD_GZIP=y
-# CONFIG_RD_BZIP2 is not set
-# CONFIG_RD_LZMA is not set
-# CONFIG_RD_XZ is not set
-# CONFIG_RD_LZO is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_ANON_INODES=y
-CONFIG_PANIC_TIMEOUT=0
-CONFIG_EXPERT=y
-CONFIG_UID16=y
-# CONFIG_SYSCTL_SYSCALL is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_AIO=y
-CONFIG_EMBEDDED=y
-CONFIG_HAVE_PERF_EVENTS=y
-CONFIG_PERF_USE_VMALLOC=y
-
-#
-# Kernel Performance Events And Counters
-#
-# CONFIG_PERF_EVENTS is not set
-# CONFIG_PERF_COUNTERS is not set
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLUB_DEBUG=y
-CONFIG_COMPAT_BRK=y
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-# CONFIG_SLOB is not set
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
-# CONFIG_JUMP_LABEL is not set
-CONFIG_HAVE_KPROBES=y
-CONFIG_HAVE_KRETPROBES=y
-CONFIG_HAVE_DMA_ATTRS=y
-CONFIG_HAVE_DMA_CONTIGUOUS=y
-CONFIG_USE_GENERIC_SMP_HELPERS=y
-CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
-CONFIG_HAVE_CLK=y
-CONFIG_HAVE_DMA_API_DEBUG=y
-CONFIG_HAVE_ARCH_JUMP_LABEL=y
-
-#
-# GCOV-based kernel profiling
-#
-# CONFIG_GCOV_KERNEL is not set
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_STOP_MACHINE=y
-CONFIG_BLOCK=y
-CONFIG_LBDAF=y
-CONFIG_BLK_DEV_BSG=y
-CONFIG_BLK_DEV_BSGLIB=y
-CONFIG_BLK_DEV_INTEGRITY=y
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_BSD_DISKLABEL=y
-CONFIG_MINIX_SUBPARTITION=y
-CONFIG_SOLARIS_X86_PARTITION=y
-CONFIG_UNIXWARE_DISKLABEL=y
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-CONFIG_EFI_PARTITION=y
-# CONFIG_SYSV68_PARTITION is not set
-CONFIG_SUNXI_NAND_PARTITION=y
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_CFQ=y
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
-# CONFIG_INLINE_SPIN_TRYLOCK is not set
-# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK is not set
-# CONFIG_INLINE_SPIN_LOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-CONFIG_UNINLINE_SPIN_UNLOCK=y
-# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_READ_TRYLOCK is not set
-# CONFIG_INLINE_READ_LOCK is not set
-# CONFIG_INLINE_READ_LOCK_BH is not set
-# CONFIG_INLINE_READ_LOCK_IRQ is not set
-# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_UNLOCK is not set
-# CONFIG_INLINE_READ_UNLOCK_BH is not set
-# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
-# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_WRITE_TRYLOCK is not set
-# CONFIG_INLINE_WRITE_LOCK is not set
-# CONFIG_INLINE_WRITE_LOCK_BH is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_UNLOCK is not set
-# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-CONFIG_MUTEX_SPIN_ON_OWNER=y
-CONFIG_FREEZER=y
-
-#
-# System Type
-#
-CONFIG_MMU=y
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_VEXPRESS is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_BCMRING is not set
-# CONFIG_ARCH_HIGHBANK is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CNS3XXX is not set
-# CONFIG_ARCH_GEMINI is not set
-# CONFIG_ARCH_PRIMA2 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_MXS is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_DOVE is not set
-# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_LPC32XX is not set
-# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_ORION5X is not set
-# CONFIG_ARCH_MMP is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_W90X900 is not set
-# CONFIG_ARCH_TEGRA is not set
-# CONFIG_ARCH_PICOXCELL is not set
-# CONFIG_ARCH_SUN4I is not set
-# CONFIG_ARCH_SUN5I is not set
-CONFIG_ARCH_SUN7I=y
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_SHMOBILE 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_S5P64X0 is not set
-# CONFIG_ARCH_S5PC100 is not set
-# CONFIG_ARCH_S5PV210 is not set
-# CONFIG_ARCH_EXYNOS is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_U300 is not set
-# CONFIG_ARCH_U8500 is not set
-# CONFIG_ARCH_NOMADIK is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_PLAT_SPEAR is not set
-# CONFIG_ARCH_VT8500 is not set
-# CONFIG_ARCH_ZYNQ is not set
-# CONFIG_GPIO_PCA953X is not set
-# CONFIG_KEYBOARD_GPIO_POLLED is not set
-
-#
-# System MMU
-#
-
-#
-# Allwinner's sunxi options
-#
-CONFIG_SW_DEBUG_UART=0
-CONFIG_SUNXI_MULTIPLATFORM=y
-CONFIG_SUNXI_SCALING_MIN=720
-CONFIG_PLAT_SUNXI=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_V7=y
-CONFIG_CPU_32v6K=y
-CONFIG_CPU_32v7=y
-CONFIG_CPU_ABRT_EV7=y
-CONFIG_CPU_PABRT_V7=y
-CONFIG_CPU_CACHE_V7=y
-CONFIG_CPU_CACHE_VIPT=y
-CONFIG_CPU_COPY_V6=y
-CONFIG_CPU_TLB_V7=y
-CONFIG_CPU_HAS_ASID=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-# CONFIG_ARM_LPAE is not set
-# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
-CONFIG_ARM_THUMB=y
-CONFIG_ARM_THUMBEE=y
-CONFIG_SWP_EMULATE=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_BPREDICT_DISABLE is not set
-CONFIG_MIGHT_HAVE_CACHE_L2X0=y
-# CONFIG_CACHE_L2X0 is not set
-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_NR_BANKS=8
-CONFIG_CPU_HAS_PMU=y
-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
-# CONFIG_ARM_ERRATA_742230 is not set
-# CONFIG_ARM_ERRATA_742231 is not set
-# CONFIG_ARM_ERRATA_720789 is not set
-# CONFIG_ARM_ERRATA_743622 is not set
-# CONFIG_ARM_ERRATA_751472 is not set
-# CONFIG_ARM_ERRATA_754322 is not set
-# CONFIG_ARM_ERRATA_754327 is not set
-# CONFIG_ARM_ERRATA_764369 is not set
-# CONFIG_ARM_ERRATA_775420 is not set
-CONFIG_ARM_GIC=y
-# CONFIG_FIQ_DEBUGGER is not set
-
-#
-# Bus support
-#
-CONFIG_ARM_AMBA=y
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_HAVE_SMP=y
-CONFIG_SMP=y
-CONFIG_SMP_ON_UP=y
-CONFIG_ARM_CPU_TOPOLOGY=y
-CONFIG_SCHED_MC=y
-CONFIG_SCHED_SMT=y
-CONFIG_HAVE_ARM_SCU=y
-CONFIG_ARM_ARCH_TIMER=y
-CONFIG_HAVE_ARM_TWD=y
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_1G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_NR_CPUS=2
-CONFIG_HOTPLUG_CPU=y
-CONFIG_LOCAL_TIMERS=y
-CONFIG_ARCH_NR_GPIO=0
-# CONFIG_PREEMPT_NONE is not set
-# CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREEMPT=y
-CONFIG_PREEMPT_COUNT=y
-CONFIG_HZ=100
-# CONFIG_THUMB2_KERNEL is not set
-CONFIG_AEABI=y
-# CONFIG_OABI_COMPAT is not set
-# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
-# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
-CONFIG_HAVE_ARCH_PFN_VALID=y
-CONFIG_HIGHMEM=y
-# CONFIG_HIGHPTE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_HAVE_MEMBLOCK=y
-CONFIG_MEMORY_ISOLATION=y
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_COMPACTION is not set
-CONFIG_MIGRATION=y
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-# CONFIG_KSM is not set
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
-# CONFIG_CLEANCACHE is not set
-CONFIG_FORCE_MAX_ZONEORDER=11
-CONFIG_ALIGNMENT_TRAP=y
-# CONFIG_UACCESS_WITH_MEMCPY is not set
-# CONFIG_SECCOMP is not set
-# CONFIG_CC_STACKPROTECTOR is not set
-# CONFIG_DEPRECATED_PARAM_STRUCT is not set
-# CONFIG_ARM_FLUSH_CONSOLE_ON_RESTART is not set
-
-#
-# Boot options
-#
-# CONFIG_USE_OF is not set
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="earlyprintk=ttyS0,115200 loglevel=9 initcall_debug=1 console=ttyS0,115200 ramfs"
-CONFIG_CMDLINE_FROM_BOOTLOADER=y
-# CONFIG_CMDLINE_EXTEND is not set
-# CONFIG_CMDLINE_FORCE is not set
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-# CONFIG_CRASH_DUMP is not set
-# CONFIG_AUTO_ZRELADDR is not set
-
-#
-# CPU Power Management
-#
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_FANTASY is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-# CONFIG_CPU_FREQ_GOV_INTERACTIVE is not set
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-# CONFIG_CPU_FREQ_GOV_FANTASY is not set
-CONFIG_CPU_FREQ_USR_EVNT_NOTIFY=y
-CONFIG_CPU_FREQ_DVFS=y
-
-#
-# ARM CPU frequency scaling drivers
-#
-# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set
-# CONFIG_ARM_EXYNOS4X12_CPUFREQ is not set
-# CONFIG_ARM_EXYNOS5250_CPUFREQ is not set
-# CONFIG_CPU_IDLE is not set
-# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_VFP=y
-CONFIG_VFPv3=y
-CONFIG_NEON=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y
-CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
-# CONFIG_HAVE_AOUT is not set
-CONFIG_BINFMT_MISC=y
-
-#
-# Power management options
-#
-CONFIG_SUSPEND=y
-CONFIG_SUSPEND_FREEZER=y
-CONFIG_HAS_WAKELOCK=y
-CONFIG_WAKELOCK=y
-CONFIG_PM_SLEEP=y
-CONFIG_PM_SLEEP_SMP=y
-# CONFIG_PM_AUTOSLEEP is not set
-# CONFIG_PM_WAKELOCKS is not set
-# CONFIG_PM_RUNTIME is not set
-CONFIG_PM=y
-# CONFIG_PM_DEBUG is not set
-# CONFIG_APM_EMULATION is not set
-CONFIG_PM_CLK=y
-CONFIG_CPU_PM=y
-# CONFIG_SUSPEND_TIME is not set
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ARM_CPU_SUSPEND=y
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_UNIX=y
-# CONFIG_UNIX_DIAG is not set
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-CONFIG_XFRM_SUB_POLICY=y
-CONFIG_XFRM_MIGRATE=y
-CONFIG_XFRM_STATISTICS=y
-CONFIG_XFRM_IPCOMP=y
-CONFIG_NET_KEY=m
-CONFIG_NET_KEY_MIGRATE=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_IP_FIB_TRIE_STATS=y
-CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
-CONFIG_IP_ROUTE_CLASSID=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE_DEMUX=m
-CONFIG_NET_IPGRE=m
-# CONFIG_NET_IPGRE_BROADCAST is not set
-CONFIG_IP_MROUTE=y
-CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
-CONFIG_ARPD=y
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=y
-CONFIG_INET_ESP=y
-CONFIG_INET_IPCOMP=y
-CONFIG_INET_XFRM_TUNNEL=y
-CONFIG_INET_TUNNEL=y
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-# CONFIG_INET_LRO is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_INET_UDP_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-CONFIG_IPV6=y
-CONFIG_IPV6_PRIVACY=y
-CONFIG_IPV6_ROUTER_PREF=y
-CONFIG_IPV6_ROUTE_INFO=y
-CONFIG_IPV6_OPTIMISTIC_DAD=y
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_IPV6_MIP6=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_SIT_6RD=y
-CONFIG_IPV6_NDISC_NODETYPE=y
-CONFIG_IPV6_TUNNEL=m
-CONFIG_IPV6_MULTIPLE_TABLES=y
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_MROUTE=y
-CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
-CONFIG_IPV6_PIMSM_V2=y
-# CONFIG_ANDROID_PARANOID_NETWORK is not set
-# CONFIG_NET_ACTIVITY_STATS is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-CONFIG_BRIDGE_NETFILTER=y
-
-#
-# Core Netfilter Configuration
-#
-CONFIG_NETFILTER_NETLINK=y
-CONFIG_NETFILTER_NETLINK_ACCT=m
-CONFIG_NETFILTER_NETLINK_QUEUE=y
-CONFIG_NETFILTER_NETLINK_LOG=y
-CONFIG_NF_CONNTRACK=m
-CONFIG_NF_CONNTRACK_MARK=y
-CONFIG_NF_CONNTRACK_ZONES=y
-CONFIG_NF_CONNTRACK_PROCFS=y
-CONFIG_NF_CONNTRACK_EVENTS=y
-# CONFIG_NF_CONNTRACK_TIMEOUT is not set
-CONFIG_NF_CONNTRACK_TIMESTAMP=y
-CONFIG_NF_CT_PROTO_DCCP=m
-CONFIG_NF_CT_PROTO_GRE=m
-CONFIG_NF_CT_PROTO_SCTP=m
-CONFIG_NF_CT_PROTO_UDPLITE=m
-CONFIG_NF_CONNTRACK_AMANDA=m
-CONFIG_NF_CONNTRACK_FTP=m
-CONFIG_NF_CONNTRACK_H323=m
-CONFIG_NF_CONNTRACK_IRC=m
-CONFIG_NF_CONNTRACK_BROADCAST=m
-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
-CONFIG_NF_CONNTRACK_SNMP=m
-CONFIG_NF_CONNTRACK_PPTP=m
-CONFIG_NF_CONNTRACK_SANE=m
-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_TPROXY=m
-CONFIG_NETFILTER_XTABLES=y
-
-#
-# Xtables combined modules
-#
-CONFIG_NETFILTER_XT_MARK=y
-CONFIG_NETFILTER_XT_CONNMARK=m
-CONFIG_NETFILTER_XT_SET=m
-
-#
-# Xtables targets
-#
-CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
-CONFIG_NETFILTER_XT_TARGET_CT=m
-CONFIG_NETFILTER_XT_TARGET_DSCP=m
-CONFIG_NETFILTER_XT_TARGET_HL=m
-CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
-CONFIG_NETFILTER_XT_TARGET_LED=m
-# CONFIG_NETFILTER_XT_TARGET_LOG is not set
-CONFIG_NETFILTER_XT_TARGET_MARK=m
-CONFIG_NETFILTER_XT_TARGET_NFLOG=m
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
-CONFIG_NETFILTER_XT_TARGET_RATEEST=m
-CONFIG_NETFILTER_XT_TARGET_TEE=m
-CONFIG_NETFILTER_XT_TARGET_TPROXY=m
-CONFIG_NETFILTER_XT_TARGET_TRACE=m
-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
-CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
-
-#
-# Xtables matches
-#
-CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
-CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_CPU=m
-CONFIG_NETFILTER_XT_MATCH_DCCP=m
-CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
-CONFIG_NETFILTER_XT_MATCH_DSCP=m
-CONFIG_NETFILTER_XT_MATCH_ECN=y
-CONFIG_NETFILTER_XT_MATCH_ESP=m
-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_HL=y
-CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MAC=m
-CONFIG_NETFILTER_XT_MATCH_MARK=m
-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
-CONFIG_NETFILTER_XT_MATCH_NFACCT=m
-CONFIG_NETFILTER_XT_MATCH_OSF=m
-CONFIG_NETFILTER_XT_MATCH_OWNER=m
-CONFIG_NETFILTER_XT_MATCH_POLICY=m
-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-CONFIG_NETFILTER_XT_MATCH_QUOTA=m
-CONFIG_NETFILTER_XT_MATCH_QUOTA2=m
-CONFIG_NETFILTER_XT_MATCH_RATEEST=m
-CONFIG_NETFILTER_XT_MATCH_REALM=m
-CONFIG_NETFILTER_XT_MATCH_RECENT=m
-CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_SOCKET=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
-CONFIG_NETFILTER_XT_MATCH_STRING=m
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
-CONFIG_NETFILTER_XT_MATCH_TIME=m
-CONFIG_NETFILTER_XT_MATCH_U32=m
-CONFIG_IP_SET=m
-CONFIG_IP_SET_MAX=256
-CONFIG_IP_SET_BITMAP_IP=m
-CONFIG_IP_SET_BITMAP_IPMAC=m
-CONFIG_IP_SET_BITMAP_PORT=m
-CONFIG_IP_SET_HASH_IP=m
-CONFIG_IP_SET_HASH_IPPORT=m
-CONFIG_IP_SET_HASH_IPPORTIP=m
-CONFIG_IP_SET_HASH_IPPORTNET=m
-CONFIG_IP_SET_HASH_NET=m
-CONFIG_IP_SET_HASH_NETPORT=m
-CONFIG_IP_SET_HASH_NETIFACE=m
-CONFIG_IP_SET_LIST_SET=m
-# CONFIG_IP_VS is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_NF_DEFRAG_IPV4=m
-CONFIG_NF_CONNTRACK_IPV4=m
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_AH=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_RPFILTER=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_REJECT_SKERR=y
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_NF_NAT=m
-CONFIG_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_NF_NAT_SNMP_BASIC=m
-CONFIG_NF_NAT_PROTO_DCCP=m
-CONFIG_NF_NAT_PROTO_GRE=m
-CONFIG_NF_NAT_PROTO_UDPLITE=m
-CONFIG_NF_NAT_PROTO_SCTP=m
-CONFIG_NF_NAT_FTP=m
-CONFIG_NF_NAT_IRC=m
-CONFIG_NF_NAT_TFTP=m
-CONFIG_NF_NAT_AMANDA=m
-CONFIG_NF_NAT_PPTP=m
-CONFIG_NF_NAT_H323=m
-CONFIG_NF_NAT_SIP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_CLUSTERIP=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration
-#
-CONFIG_NF_DEFRAG_IPV6=m
-CONFIG_NF_CONNTRACK_IPV6=m
-CONFIG_IP6_NF_QUEUE=m
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_AH=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_MH=m
-CONFIG_IP6_NF_MATCH_RPFILTER=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_TARGET_HL=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_TARGET_REJECT_SKERR=y
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_RAW=m
-CONFIG_BRIDGE_NF_EBTABLES=m
-CONFIG_BRIDGE_EBT_BROUTE=m
-CONFIG_BRIDGE_EBT_T_FILTER=m
-CONFIG_BRIDGE_EBT_T_NAT=m
-CONFIG_BRIDGE_EBT_802_3=m
-CONFIG_BRIDGE_EBT_AMONG=m
-CONFIG_BRIDGE_EBT_ARP=m
-CONFIG_BRIDGE_EBT_IP=m
-CONFIG_BRIDGE_EBT_IP6=m
-CONFIG_BRIDGE_EBT_LIMIT=m
-CONFIG_BRIDGE_EBT_MARK=m
-CONFIG_BRIDGE_EBT_PKTTYPE=m
-CONFIG_BRIDGE_EBT_STP=m
-CONFIG_BRIDGE_EBT_VLAN=m
-CONFIG_BRIDGE_EBT_ARPREPLY=m
-CONFIG_BRIDGE_EBT_DNAT=m
-CONFIG_BRIDGE_EBT_MARK_T=m
-CONFIG_BRIDGE_EBT_REDIRECT=m
-CONFIG_BRIDGE_EBT_SNAT=m
-CONFIG_BRIDGE_EBT_LOG=m
-CONFIG_BRIDGE_EBT_ULOG=m
-CONFIG_BRIDGE_EBT_NFLOG=m
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_RDS is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-CONFIG_L2TP=m
-# CONFIG_L2TP_DEBUGFS is not set
-CONFIG_L2TP_V3=y
-CONFIG_L2TP_IP=m
-CONFIG_L2TP_ETH=m
-CONFIG_STP=m
-CONFIG_GARP=m
-CONFIG_BRIDGE=m
-CONFIG_BRIDGE_IGMP_SNOOPING=y
-CONFIG_NET_DSA=m
-# CONFIG_NET_DSA_TAG_DSA is not set
-# CONFIG_NET_DSA_TAG_EDSA is not set
-# CONFIG_NET_DSA_TAG_TRAILER is not set
-CONFIG_VLAN_8021Q=m
-CONFIG_VLAN_8021Q_GVRP=y
-# CONFIG_DECNET is not set
-CONFIG_LLC=m
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_PHONET is not set
-# CONFIG_IEEE802154 is not set
-# CONFIG_NET_SCHED is not set
-# CONFIG_DCB is not set
-CONFIG_DNS_RESOLVER=y
-# CONFIG_BATMAN_ADV is not set
-# CONFIG_OPENVSWITCH is not set
-CONFIG_RPS=y
-CONFIG_RFS_ACCEL=y
-CONFIG_XPS=y
-# CONFIG_NETPRIO_CGROUP is not set
-CONFIG_BQL=y
-CONFIG_HAVE_BPF_JIT=y
-# CONFIG_BPF_JIT is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_CAN is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-CONFIG_DONGLE=y
-CONFIG_ESI_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
-CONFIG_TEKRAM_DONGLE=m
-CONFIG_TOIM3232_DONGLE=m
-CONFIG_LITELINK_DONGLE=m
-CONFIG_MA600_DONGLE=m
-CONFIG_GIRBIL_DONGLE=m
-CONFIG_MCP2120_DONGLE=m
-CONFIG_OLD_BELKIN_DONGLE=m
-CONFIG_ACT200L_DONGLE=m
-CONFIG_KINGSUN_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
-CONFIG_KS959_DONGLE=m
-
-#
-# FIR device drivers
-#
-CONFIG_USB_IRDA=m
-# CONFIG_SIGMATEL_FIR is not set
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIBTUSB=m
-CONFIG_BT_HCIBTSDIO=m
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_ATH3K=y
-CONFIG_BT_HCIUART_LL=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_BT_MRVL=m
-CONFIG_BT_MRVL_SDIO=m
-CONFIG_BT_ATH3K=m
-CONFIG_BT_WILINK=m
-# CONFIG_AF_RXRPC is not set
-CONFIG_FIB_RULES=y
-CONFIG_WIRELESS=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_WEXT_CORE=y
-CONFIG_WEXT_PROC=y
-CONFIG_WEXT_SPY=y
-CONFIG_WEXT_PRIV=y
-CONFIG_CFG80211=m
-CONFIG_NL80211_TESTMODE=y
-# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
-# CONFIG_CFG80211_REG_DEBUG is not set
-CONFIG_CFG80211_DEFAULT_PS=y
-# CONFIG_CFG80211_DEBUGFS is not set
-# CONFIG_CFG80211_INTERNAL_REGDB is not set
-CONFIG_CFG80211_WEXT=y
-CONFIG_WIRELESS_EXT_SYSFS=y
-CONFIG_LIB80211=y
-CONFIG_LIB80211_CRYPT_WEP=m
-CONFIG_LIB80211_CRYPT_CCMP=m
-CONFIG_LIB80211_CRYPT_TKIP=m
-# CONFIG_LIB80211_DEBUG is not set
-CONFIG_CFG80211_ALLOW_RECONNECT=y
-CONFIG_MAC80211=m
-CONFIG_MAC80211_HAS_RC=y
-# CONFIG_MAC80211_RC_PID is not set
-CONFIG_MAC80211_RC_MINSTREL=y
-CONFIG_MAC80211_RC_MINSTREL_HT=y
-CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
-CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
-CONFIG_MAC80211_MESH=y
-CONFIG_MAC80211_LEDS=y
-# CONFIG_MAC80211_DEBUGFS is not set
-# CONFIG_MAC80211_DEBUG_MENU is not set
-CONFIG_WIMAX=m
-CONFIG_WIMAX_DEBUG_LEVEL=8
-CONFIG_RFKILL=y
-CONFIG_RFKILL_PM=y
-CONFIG_RFKILL_LEDS=y
-CONFIG_RFKILL_INPUT=y
-CONFIG_RFKILL_REGULATOR=m
-CONFIG_RFKILL_GPIO=m
-CONFIG_SUNXI_RFKILL=y
-# CONFIG_NET_9P is not set
-# CONFIG_CAIF is not set
-# CONFIG_CEPH_LIB is not set
-# CONFIG_NFC is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH=""
-CONFIG_DEVTMPFS=y
-CONFIG_DEVTMPFS_MOUNT=y
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-CONFIG_FIRMWARE_IN_KERNEL=y
-CONFIG_EXTRA_FIRMWARE=""
-# CONFIG_FW_LOADER_USER_HELPER is not set
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_GENERIC_CPU_DEVICES is not set
-CONFIG_REGMAP=y
-CONFIG_REGMAP_I2C=y
-CONFIG_REGMAP_SPI=y
-CONFIG_DMA_SHARED_BUFFER=y
-CONFIG_SYNC=y
-# CONFIG_SW_SYNC is not set
-CONFIG_CMA=y
-# CONFIG_CMA_DEBUG is not set
-
-#
-# Default contiguous memory area size:
-#
-CONFIG_CMA_SIZE_MBYTES=192
-CONFIG_CMA_SIZE_SEL_MBYTES=y
-# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
-# CONFIG_CMA_SIZE_SEL_MIN is not set
-# CONFIG_CMA_SIZE_SEL_MAX is not set
-CONFIG_CMA_ALIGNMENT=8
-CONFIG_CMA_AREAS=7
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_TESTS is not set
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-# CONFIG_MTD_AR7_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-# CONFIG_MTD_CHAR is not set
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-# CONFIG_SM_FTL is not set
-# CONFIG_MTD_OOPS is not set
-# CONFIG_MTD_SWAP is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SST25L is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOCG3 is not set
-# CONFIG_MTD_NAND_IDS is not set
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# LPDDR flash memory drivers
-#
-# CONFIG_MTD_LPDDR is not set
-CONFIG_MTD_UBI=m
-CONFIG_MTD_UBI_WL_THRESHOLD=4096
-CONFIG_MTD_UBI_BEB_RESERVE=1
-# CONFIG_MTD_UBI_GLUEBI is not set
-# CONFIG_MTD_UBI_DEBUG is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-
-#
-# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
-#
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_MG_DISK is not set
-# CONFIG_BLK_DEV_RBD is not set
-CONFIG_SUNXI_NAND=y
-CONFIG_SUNXI_NAND_COMPAT_DEV=y
-# CONFIG_SUNXI_NAND_TEST is not set
-
-#
-# Misc devices
-#
-# CONFIG_SENSORS_LIS3LV02D is not set
-# CONFIG_AD525X_DPOT is not set
-# CONFIG_SUN4I_VIBRATOR is not set
-CONFIG_SUNXI_DBGREG=m
-# CONFIG_ATMEL_PWM is not set
-CONFIG_SUNXI_PWM=m
-# CONFIG_ICS932S401 is not set
-# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_APDS9802ALS is not set
-# CONFIG_ISL29003 is not set
-# CONFIG_ISL29020 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_SENSORS_BH1780 is not set
-# CONFIG_SENSORS_BH1770 is not set
-# CONFIG_SENSORS_APDS990X is not set
-# CONFIG_HMC6352 is not set
-# CONFIG_SENSORS_AK8975 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_TI_DAC7512 is not set
-# CONFIG_UID_STAT is not set
-# CONFIG_BMP085 is not set
-# CONFIG_USB_SWITCH_FSA9480 is not set
-# CONFIG_WL127X_RFKILL is not set
-# CONFIG_C2PORT is not set
-
-#
-# EEPROM support
-#
-# CONFIG_EEPROM_AT24 is not set
-# CONFIG_EEPROM_AT25 is not set
-# CONFIG_EEPROM_LEGACY is not set
-# CONFIG_EEPROM_MAX6875 is not set
-CONFIG_EEPROM_93CX6=m
-# CONFIG_EEPROM_93XX46 is not set
-CONFIG_IWMC3200TOP=m
-# CONFIG_IWMC3200TOP_DEBUG is not set
-# CONFIG_IWMC3200TOP_DEBUGFS is not set
-
-#
-# Texas Instruments shared transport line discipline
-#
-CONFIG_TI_ST=m
-# CONFIG_SENSORS_LIS3_SPI is not set
-# CONFIG_SENSORS_LIS3_I2C is not set
-
-#
-# Altera FPGA firmware download module
-#
-# CONFIG_ALTERA_STAPL is not set
-
-#
-# SCSI device support
-#
-CONFIG_SCSI_MOD=y
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=y
-CONFIG_BLK_DEV_SR_VENDOR=y
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_ISCSI_BOOT_SYSFS is not set
-# CONFIG_LIBFC is not set
-# CONFIG_LIBFCOE is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_DH is not set
-# CONFIG_SCSI_OSD_INITIATOR is not set
-CONFIG_ATA=y
-# CONFIG_ATA_NONSTANDARD is not set
-CONFIG_ATA_VERBOSE_ERROR=y
-CONFIG_SATA_PMP=y
-
-#
-# Controllers with non-SFF native interface
-#
-CONFIG_SATA_AHCI_PLATFORM=y
-CONFIG_SW_SATA_AHCI_PLATFORM=y
-CONFIG_ATA_SFF=y
-
-#
-# SFF controllers with custom DMA interface
-#
-CONFIG_ATA_BMDMA=y
-
-#
-# SATA SFF controllers with BMDMA
-#
-# CONFIG_SATA_MV is not set
-
-#
-# PATA SFF controllers with BMDMA
-#
-
-#
-# PIO-only SFF controllers
-#
-# CONFIG_PATA_PLATFORM is not set
-
-#
-# Generic fallback / legacy drivers
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_MD=m
-CONFIG_MD_LINEAR=m
-CONFIG_MD_RAID0=m
-CONFIG_MD_RAID1=m
-CONFIG_MD_RAID10=m
-CONFIG_MD_RAID456=m
-# CONFIG_MULTICORE_RAID456 is not set
-CONFIG_MD_MULTIPATH=m
-CONFIG_MD_FAULTY=m
-CONFIG_BLK_DEV_DM_BUILTIN=y
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_BUFIO=m
-CONFIG_DM_PERSISTENT_DATA=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_THIN_PROVISIONING=m
-# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
-# CONFIG_DM_DEBUG_SPACE_MAPS is not set
-CONFIG_DM_MIRROR=m
-CONFIG_DM_RAID=m
-# CONFIG_DM_LOG_USERSPACE is not set
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_QL=m
-CONFIG_DM_MULTIPATH_ST=m
-CONFIG_DM_DELAY=m
-# CONFIG_DM_UEVENT is not set
-CONFIG_DM_FLAKEY=m
-# CONFIG_DM_VERITY is not set
-CONFIG_TARGET_CORE=m
-CONFIG_TCM_IBLOCK=m
-CONFIG_TCM_FILEIO=m
-CONFIG_TCM_PSCSI=m
-CONFIG_LOOPBACK_TARGET=m
-CONFIG_ISCSI_TARGET=m
-CONFIG_NETDEVICES=y
-CONFIG_NET_CORE=y
-# CONFIG_BONDING is not set
-# CONFIG_DUMMY is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_MII=y
-# CONFIG_NET_TEAM is not set
-CONFIG_MACVLAN=m
-# CONFIG_MACVTAP is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-CONFIG_TUN=m
-CONFIG_VETH=m
-
-#
-# CAIF transport drivers
-#
-
-#
-# Distributed Switch Architecture drivers
-#
-# CONFIG_NET_DSA_MV88E6XXX is not set
-# CONFIG_NET_DSA_MV88E6060 is not set
-# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set
-# CONFIG_NET_DSA_MV88E6131 is not set
-# CONFIG_NET_DSA_MV88E6123_61_65 is not set
-CONFIG_ETHERNET=y
-# CONFIG_NET_VENDOR_BROADCOM is not set
-# CONFIG_NET_CALXEDA_XGMAC is not set
-# CONFIG_NET_VENDOR_CHELSIO is not set
-CONFIG_NET_VENDOR_CIRRUS=y
-# CONFIG_CS89x0 is not set
-# CONFIG_DM9000 is not set
-# CONFIG_DNET is not set
-# CONFIG_NET_VENDOR_FARADAY is not set
-# CONFIG_NET_VENDOR_INTEL is not set
-# CONFIG_NET_VENDOR_MARVELL is not set
-# CONFIG_NET_VENDOR_MICREL is not set
-CONFIG_NET_VENDOR_MICROCHIP=y
-# CONFIG_ENC28J60 is not set
-# CONFIG_NET_VENDOR_NATSEMI is not set
-# CONFIG_ETHOC is not set
-# CONFIG_NET_VENDOR_SEEQ is not set
-# CONFIG_NET_VENDOR_SMSC is not set
-# CONFIG_NET_VENDOR_STMICRO is not set
-CONFIG_SUNXI_EMAC=y
-CONFIG_SUNXI_GMAC=m
-CONFIG_GMAC_SCRIPT_SYS=y
-CONFIG_GMAC_CLK_SYS=y
-CONFIG_GMAC_RING=y
-# CONFIG_GMAC_CHAINED is not set
-CONFIG_PHYLIB=y
-
-#
-# MII PHY device drivers
-#
-# CONFIG_AMD_PHY is not set
-# CONFIG_MARVELL_PHY is not set
-# CONFIG_DAVICOM_PHY is not set
-# CONFIG_QSEMI_PHY is not set
-# CONFIG_LXT_PHY is not set
-# CONFIG_CICADA_PHY is not set
-# CONFIG_VITESSE_PHY is not set
-# CONFIG_SMSC_PHY is not set
-# CONFIG_BROADCOM_PHY is not set
-# CONFIG_ICPLUS_PHY is not set
-# CONFIG_REALTEK_PHY is not set
-# CONFIG_NATIONAL_PHY is not set
-# CONFIG_STE10XP is not set
-# CONFIG_LSI_ET1011C_PHY is not set
-# CONFIG_MICREL_PHY is not set
-# CONFIG_FIXED_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-# CONFIG_MICREL_KS8995MA is not set
-CONFIG_PPP=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_MPPE=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPPOE=m
-CONFIG_PPTP=m
-CONFIG_PPPOL2TP=m
-CONFIG_PPPOLAC=m
-CONFIG_PPPOPNS=m
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_SLIP=m
-CONFIG_SLHC=m
-CONFIG_SLIP_COMPRESSED=y
-CONFIG_SLIP_SMART=y
-# CONFIG_SLIP_MODE_SLIP6 is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_QF9700=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_CDC_EEM=m
-CONFIG_USB_NET_CDC_NCM=m
-CONFIG_USB_NET_DM9601=m
-CONFIG_USB_NET_SMSC75XX=m
-CONFIG_USB_NET_SMSC95XX=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-CONFIG_USB_NET_MCS7830=m
-CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_CDC_SUBSET=m
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-CONFIG_USB_EPSON2888=y
-CONFIG_USB_KC2190=y
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_NET_CX82310_ETH=m
-CONFIG_USB_NET_KALMIA=m
-CONFIG_USB_NET_QMI_WWAN=m
-CONFIG_USB_HSO=m
-CONFIG_USB_NET_INT51X1=m
-CONFIG_USB_IPHETH=m
-CONFIG_USB_SIERRA_NET=m
-CONFIG_USB_VL600=m
-CONFIG_WLAN=y
-CONFIG_LIBERTAS_THINFIRM=m
-# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set
-CONFIG_LIBERTAS_THINFIRM_USB=m
-CONFIG_AT76C50X_USB=m
-CONFIG_USB_ZD1201=m
-CONFIG_USB_NET_RNDIS_WLAN=m
-CONFIG_RTL8187=m
-CONFIG_RTL8187_LEDS=y
-# CONFIG_MAC80211_HWSIM is not set
-# CONFIG_WIFI_CONTROL_FUNC is not set
-CONFIG_ATH_COMMON=m
-# CONFIG_ATH_DEBUG is not set
-CONFIG_ATH9K_HW=m
-CONFIG_ATH9K_COMMON=m
-CONFIG_ATH9K_BTCOEX_SUPPORT=y
-CONFIG_ATH9K=m
-# CONFIG_ATH9K_AHB is not set
-# CONFIG_ATH9K_DEBUGFS is not set
-# CONFIG_ATH9K_DFS_CERTIFIED is not set
-# CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set
-CONFIG_ATH9K_HTC=m
-# CONFIG_ATH9K_HTC_DEBUGFS is not set
-# CONFIG_CARL9170 is not set
-CONFIG_ATH6KL=m
-# CONFIG_ATH6KL_SDIO is not set
-# CONFIG_ATH6KL_USB is not set
-# CONFIG_ATH6KL_DEBUG is not set
-# CONFIG_B43 is not set
-# CONFIG_B43LEGACY is not set
-CONFIG_BCMDHD=m
-CONFIG_BCM4339=m
-CONFIG_BCMDHD_FW_PATH="/usr/lib/firmware/ap6210/fw_bcmxxxx.bin"
-CONFIG_BCMDHD_NVRAM_PATH="/usr/lib/firmware/ap6210/nvram_apxxxx.txt"
-# CONFIG_DHD_USE_STATIC_BUF is not set
-# CONFIG_DHD_USE_SCHED_SCAN is not set
-CONFIG_AP6210=m
-CONFIG_AP6210_FW_PATH="/usr/lib/firmware/ap6210/fw_bcmxxxx.bin"
-CONFIG_AP6210_NVRAM_PATH="/usr/lib/firmware/ap6210/nvram_apxxxx.txt"
-CONFIG_AP6210_OOB=y
-# CONFIG_AP6210_SDIO_IRQ is not set
-CONFIG_BRCMUTIL=m
-CONFIG_BRCMFMAC=m
-CONFIG_BRCMFMAC_SDIO=y
-CONFIG_BRCMFMAC_USB=y
-# CONFIG_BRCMDBG is not set
-CONFIG_BCM4330=m
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-CONFIG_HOSTAP_FIRMWARE_NVRAM=y
-# CONFIG_IWM is not set
-CONFIG_LIBERTAS=m
-CONFIG_LIBERTAS_USB=m
-# CONFIG_LIBERTAS_SDIO is not set
-# CONFIG_LIBERTAS_SPI is not set
-# CONFIG_LIBERTAS_DEBUG is not set
-CONFIG_LIBERTAS_MESH=y
-CONFIG_P54_COMMON=m
-CONFIG_P54_USB=m
-# CONFIG_P54_SPI is not set
-CONFIG_P54_LEDS=y
-CONFIG_RT2X00=m
-CONFIG_RT2500USB=m
-CONFIG_RT73USB=m
-CONFIG_RT2800USB=m
-CONFIG_RT2800USB_RT33XX=y
-CONFIG_RT2800USB_RT35XX=y
-CONFIG_RT2800USB_RT53XX=y
-CONFIG_RT2800USB_UNKNOWN=y
-CONFIG_RT2800_LIB=m
-CONFIG_RT2X00_LIB_USB=m
-CONFIG_RT2X00_LIB=m
-CONFIG_RT2X00_LIB_FIRMWARE=y
-CONFIG_RT2X00_LIB_CRYPTO=y
-CONFIG_RT2X00_LIB_LEDS=y
-# CONFIG_RT2X00_DEBUG is not set
-CONFIG_RTL8192CU=m
-CONFIG_RTLWIFI=m
-CONFIG_RTLWIFI_DEBUG=y
-CONFIG_RTL8192C_COMMON=m
-# CONFIG_WL1251 is not set
-# CONFIG_WL12XX_MENU is not set
-CONFIG_ZD1211RW=m
-# CONFIG_ZD1211RW_DEBUG is not set
-CONFIG_MWIFIEX=m
-CONFIG_MWIFIEX_SDIO=m
-CONFIG_RTL8192CU_SW=m
-CONFIG_RTL8188EU=m
-CONFIG_RTL8189ES=m
-CONFIG_RTL8723AS=m
-CONFIG_RTXX7X_SW=m
-
-#
-# WiMAX Wireless Broadband devices
-#
-CONFIG_WIMAX_I2400M=m
-CONFIG_WIMAX_I2400M_USB=m
-# CONFIG_WIMAX_I2400M_SDIO is not set
-CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
-# CONFIG_WAN is not set
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-CONFIG_INPUT_FF_MEMLESS=y
-CONFIG_INPUT_POLLDEV=y
-# CONFIG_INPUT_SPARSEKMAP is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_KEYRESET is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ADP5588 is not set
-# CONFIG_KEYBOARD_ADP5589 is not set
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_QT1070 is not set
-# CONFIG_KEYBOARD_QT2160 is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_GPIO is not set
-# CONFIG_KEYBOARD_TCA6416 is not set
-# CONFIG_KEYBOARD_TCA8418 is not set
-# CONFIG_KEYBOARD_MATRIX is not set
-# CONFIG_KEYBOARD_LM8323 is not set
-# CONFIG_KEYBOARD_MAX7359 is not set
-# CONFIG_KEYBOARD_MCS is not set
-# CONFIG_KEYBOARD_MPR121 is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_OPENCORES is not set
-# CONFIG_KEYBOARD_SAMSUNG is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_OMAP4 is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-CONFIG_KEYBOARD_SUN4IKEYPAD=m
-CONFIG_KEYBOARD_SUN4I_KEYBOARD=m
-CONFIG_KEYBOARD_SUN4I_KEYBOARD_FEX=y
-CONFIG_KEYBOARD_HV2605_KEYBOARD=m
-CONFIG_IR_SUNXI=y
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-CONFIG_MOUSE_PS2_ALPS=y
-CONFIG_MOUSE_PS2_LOGIPS2PP=y
-CONFIG_MOUSE_PS2_SYNAPTICS=y
-CONFIG_MOUSE_PS2_TRACKPOINT=y
-# CONFIG_MOUSE_PS2_ELANTECH is not set
-# CONFIG_MOUSE_PS2_SENTELIC is not set
-# CONFIG_MOUSE_PS2_TOUCHKIT is not set
-CONFIG_MOUSE_SERIAL=y
-CONFIG_MOUSE_APPLETOUCH=m
-CONFIG_MOUSE_BCM5974=m
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_MOUSE_GPIO is not set
-# CONFIG_MOUSE_SYNAPTICS_I2C is not set
-CONFIG_MOUSE_SYNAPTICS_USB=m
-CONFIG_INPUT_JOYSTICK=y
-# CONFIG_JOYSTICK_ANALOG is not set
-# CONFIG_JOYSTICK_A3D is not set
-# CONFIG_JOYSTICK_ADI is not set
-# CONFIG_JOYSTICK_COBRA is not set
-# CONFIG_JOYSTICK_GF2K is not set
-# CONFIG_JOYSTICK_GRIP is not set
-# CONFIG_JOYSTICK_GRIP_MP is not set
-# CONFIG_JOYSTICK_GUILLEMOT is not set
-# CONFIG_JOYSTICK_INTERACT is not set
-# CONFIG_JOYSTICK_SIDEWINDER is not set
-# CONFIG_JOYSTICK_TMDC is not set
-# CONFIG_JOYSTICK_IFORCE is not set
-# CONFIG_JOYSTICK_WARRIOR is not set
-# CONFIG_JOYSTICK_MAGELLAN is not set
-# CONFIG_JOYSTICK_SPACEORB is not set
-# CONFIG_JOYSTICK_SPACEBALL is not set
-# CONFIG_JOYSTICK_STINGER is not set
-# CONFIG_JOYSTICK_TWIDJOY is not set
-# CONFIG_JOYSTICK_ZHENHUA is not set
-# CONFIG_JOYSTICK_AS5011 is not set
-# CONFIG_JOYSTICK_JOYDUMP is not set
-# CONFIG_JOYSTICK_XPAD is not set
-CONFIG_INPUT_TABLET=y
-CONFIG_TABLET_USB_ACECAD=m
-CONFIG_TABLET_USB_AIPTEK=m
-CONFIG_TABLET_USB_GTCO=m
-CONFIG_TABLET_USB_HANWANG=m
-CONFIG_TABLET_USB_KBTAB=m
-CONFIG_TABLET_USB_WACOM=m
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_ADS7846=m
-CONFIG_TOUCHSCREEN_AD7877=m
-CONFIG_TOUCHSCREEN_AD7879=m
-CONFIG_TOUCHSCREEN_AD7879_I2C=m
-CONFIG_TOUCHSCREEN_AD7879_SPI=m
-CONFIG_TOUCHSCREEN_ATMEL_MXT=m
-CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
-CONFIG_TOUCHSCREEN_BU21013=m
-CONFIG_TOUCHSCREEN_CY8CTMG110=m
-CONFIG_TOUCHSCREEN_CYTTSP_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP_I2C=m
-CONFIG_TOUCHSCREEN_CYTTSP_SPI=m
-CONFIG_TOUCHSCREEN_DYNAPRO=m
-CONFIG_TOUCHSCREEN_HAMPSHIRE=m
-CONFIG_TOUCHSCREEN_EETI=m
-# CONFIG_TOUCHSCREEN_EGALAX is not set
-CONFIG_TOUCHSCREEN_FUJITSU=m
-CONFIG_TOUCHSCREEN_ILI210X=m
-CONFIG_TOUCHSCREEN_GUNZE=m
-CONFIG_TOUCHSCREEN_ELO=m
-CONFIG_TOUCHSCREEN_WACOM_W8001=m
-CONFIG_TOUCHSCREEN_MAX11801=m
-CONFIG_TOUCHSCREEN_MCS5000=m
-CONFIG_TOUCHSCREEN_MTOUCH=m
-CONFIG_TOUCHSCREEN_INEXIO=m
-CONFIG_TOUCHSCREEN_MK712=m
-CONFIG_TOUCHSCREEN_PENMOUNT=m
-CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI=m
-CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
-CONFIG_TOUCHSCREEN_TOUCHWIN=m
-CONFIG_TOUCHSCREEN_PIXCIR=m
-CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
-# CONFIG_TOUCHSCREEN_USB_EGALAX is not set
-CONFIG_TOUCHSCREEN_USB_PANJIT=y
-CONFIG_TOUCHSCREEN_USB_3M=y
-CONFIG_TOUCHSCREEN_USB_ITM=y
-CONFIG_TOUCHSCREEN_USB_ETURBO=y
-CONFIG_TOUCHSCREEN_USB_GUNZE=y
-CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
-CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
-CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
-CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
-CONFIG_TOUCHSCREEN_USB_GOTOP=y
-CONFIG_TOUCHSCREEN_USB_JASTEC=y
-CONFIG_TOUCHSCREEN_USB_ELO=y
-CONFIG_TOUCHSCREEN_USB_E2I=y
-CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
-CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
-CONFIG_TOUCHSCREEN_USB_NEXIO=y
-CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y
-CONFIG_TOUCHSCREEN_TOUCHIT213=m
-CONFIG_TOUCHSCREEN_TSC_SERIO=m
-CONFIG_TOUCHSCREEN_TSC2005=m
-CONFIG_TOUCHSCREEN_TSC2007=m
-CONFIG_TOUCHSCREEN_W90X900=m
-CONFIG_TOUCHSCREEN_ST1232=m
-CONFIG_TOUCHSCREEN_TPS6507X=m
-CONFIG_TOUCHSCREEN_GT801=m
-CONFIG_TOUCHSCREEN_GT801_2PLUS1_TS=m
-CONFIG_TOUCHSCREEN_GT811=m
-CONFIG_TOUCHSCREEN_GT818=m
-CONFIG_TOUCHSCREEN_SUN4I_TS=m
-CONFIG_TOUCHSCREEN_FT5X_TS=m
-CONFIG_TOUCHSCREEN_ZT8031=m
-# CONFIG_TOUCHSCREEN_COASIA is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_AD714X is not set
-# CONFIG_INPUT_BMA150 is not set
-# CONFIG_INPUT_MMA8450 is not set
-# CONFIG_INPUT_MPU3050 is not set
-# CONFIG_INPUT_GP2A is not set
-# CONFIG_INPUT_GPIO_TILT_POLLED is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_KEYCHORD is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_KXTJ9 is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_YEALINK is not set
-# CONFIG_INPUT_CM109 is not set
-CONFIG_INPUT_UINPUT=m
-# CONFIG_INPUT_GPIO is not set
-# CONFIG_INPUT_PCF8574 is not set
-# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-# CONFIG_INPUT_ADXL34X is not set
-# CONFIG_INPUT_CMA3000 is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_AMBAKMI is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_SERIO_ALTERA_PS2 is not set
-# CONFIG_SERIO_PS2MULT is not set
-# CONFIG_GAMEPORT is not set
-# CONFIG_GSENSOR is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_CONSOLE_TRANSLATIONS=y
-CONFIG_VT_CONSOLE=y
-CONFIG_VT_CONSOLE_SLEEP=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=16
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_N_GSM is not set
-# CONFIG_TRACE_SINK is not set
-CONFIG_DEVMEM=y
-CONFIG_DEVKMEM=y
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_SUNXI=y
-CONFIG_SERIAL_8250_NR_UARTS=2
-CONFIG_SERIAL_8250_RUNTIME_UARTS=2
-CONFIG_SERIAL_8250_EXTENDED=y
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-# CONFIG_SERIAL_8250_SHARE_IRQ is not set
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-# CONFIG_SERIAL_8250_RSA is not set
-
-#
-# Non-8250 serial port support
-#
-# CONFIG_SERIAL_AMBA_PL010 is not set
-# CONFIG_SERIAL_AMBA_PL011 is not set
-# CONFIG_SERIAL_MAX3100 is not set
-# CONFIG_SERIAL_MAX3107 is not set
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_TIMBERDALE is not set
-# CONFIG_SERIAL_ALTERA_JTAGUART is not set
-# CONFIG_SERIAL_ALTERA_UART is not set
-# CONFIG_SERIAL_IFX6X60 is not set
-# CONFIG_SERIAL_XILINX_PS_UART is not set
-# CONFIG_TTY_PRINTK is not set
-# CONFIG_HVC_DCC is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-# CONFIG_DCC_TTY is not set
-# CONFIG_RAMOOPS is not set
-CONFIG_SUNXI_G2D=y
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_COMPAT=y
-CONFIG_I2C_CHARDEV=y
-# CONFIG_I2C_MUX is not set
-CONFIG_I2C_HELPER_AUTO=y
-CONFIG_I2C_ALGOBIT=y
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C system bus drivers (mostly embedded / system-on-chip)
-#
-# CONFIG_I2C_DESIGNWARE_PLATFORM is not set
-# CONFIG_I2C_GPIO is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PCA_PLATFORM is not set
-# CONFIG_I2C_PXA_PCI is not set
-# CONFIG_I2C_SIMTEC is not set
-CONFIG_I2C_SUNXI=y
-# CONFIG_SUNXI_IIC_PRINT_TRANSFER_INFO is not set
-# CONFIG_I2C_XILINX is not set
-
-#
-# External I2C/SMBus adapter drivers
-#
-CONFIG_I2C_DIOLAN_U2C=m
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_TAOS_EVM is not set
-CONFIG_I2C_TINY_USB=m
-
-#
-# Other I2C/SMBus bus drivers
-#
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-# CONFIG_SPI_ALTERA is not set
-# CONFIG_SPI_BITBANG is not set
-# CONFIG_SPI_GPIO is not set
-# CONFIG_SPI_OC_TINY is not set
-# CONFIG_SPI_PL022 is not set
-# CONFIG_SPI_PXA2XX_PCI is not set
-# CONFIG_SPI_XILINX is not set
-# CONFIG_SPI_DESIGNWARE is not set
-
-#
-# SPI Protocol Masters
-#
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_HSI is not set
-
-#
-# PPS support
-#
-# CONFIG_PPS is not set
-
-#
-# PPS generators support
-#
-
-#
-# PTP clock support
-#
-
-#
-# Enable Device Drivers -> PPS to see the PTP clock options.
-#
-CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
-CONFIG_GPIOLIB=y
-# CONFIG_DEBUG_GPIO is not set
-CONFIG_GPIO_SYSFS=y
-CONFIG_GPIO_GENERIC=y
-
-#
-# Memory mapped GPIO drivers:
-#
-CONFIG_GPIO_GENERIC_PLATFORM=y
-# CONFIG_GPIO_PL061 is not set
-CONFIG_GPIO_SUNXI=y
-
-#
-# I2C GPIO expanders:
-#
-# CONFIG_GPIO_MAX7300 is not set
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_PCF857X is not set
-# CONFIG_GPIO_SX150X is not set
-# CONFIG_GPIO_ADP5588 is not set
-
-#
-# PCI GPIO expanders:
-#
-
-#
-# SPI GPIO expanders:
-#
-# CONFIG_GPIO_MAX7301 is not set
-# CONFIG_GPIO_MCP23S08 is not set
-# CONFIG_GPIO_MC33880 is not set
-# CONFIG_GPIO_74X164 is not set
-
-#
-# AC97 GPIO expanders:
-#
-
-#
-# MODULbus GPIO expanders:
-#
-CONFIG_W1=y
-CONFIG_W1_SUNXI=m
-
-#
-# 1-wire Bus Masters
-#
-CONFIG_W1_MASTER_DS2490=m
-# CONFIG_W1_MASTER_DS2482 is not set
-# CONFIG_W1_MASTER_DS1WM is not set
-CONFIG_W1_MASTER_GPIO=m
-
-#
-# 1-wire Slaves
-#
-CONFIG_W1_SLAVE_THERM=m
-# CONFIG_W1_SLAVE_SMEM is not set
-CONFIG_W1_SLAVE_DS2408=m
-CONFIG_W1_SLAVE_DS2423=m
-# CONFIG_W1_SLAVE_DS2431 is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-# CONFIG_W1_SLAVE_DS2760 is not set
-# CONFIG_W1_SLAVE_DS2780 is not set
-# CONFIG_W1_SLAVE_DS2781 is not set
-# CONFIG_W1_SLAVE_BQ27000 is not set
-CONFIG_POWER_SUPPLY=y
-CONFIG_AW_AXP=y
-# CONFIG_AW_AXP18 is not set
-# CONFIG_AW_AXP19 is not set
-CONFIG_AW_AXP20=y
-CONFIG_AXP_CHARGEINIT=y
-CONFIG_AXP_CHGCHANGE=y
-CONFIG_AXP_HWMON=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-# CONFIG_AXP152 is not set
-# CONFIG_PDA_POWER is not set
-# CONFIG_TEST_POWER is not set
-# CONFIG_BATTERY_DS2780 is not set
-# 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_MAX17040 is not set
-# CONFIG_BATTERY_MAX17042 is not set
-# CONFIG_CHARGER_MAX8903 is not set
-# CONFIG_CHARGER_LP8727 is not set
-# CONFIG_CHARGER_GPIO is not set
-# CONFIG_CHARGER_MANAGER is not set
-# CONFIG_CHARGER_SMB347 is not set
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Native drivers
-#
-CONFIG_SENSORS_MMA7660=m
-# CONFIG_SENSORS_AD7314 is not set
-# CONFIG_SENSORS_AD7414 is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADCXX is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADT7411 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7475 is not set
-# CONFIG_SENSORS_ASC7621 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS620 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_G760A is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_GPIO_FAN is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_JC42 is not set
-# CONFIG_SENSORS_LINEAGE is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM70 is not set
-# CONFIG_SENSORS_LM73 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_LTC4151 is not set
-# CONFIG_SENSORS_LTC4215 is not set
-# CONFIG_SENSORS_LTC4245 is not set
-# CONFIG_SENSORS_LTC4261 is not set
-# CONFIG_SENSORS_LM95241 is not set
-# CONFIG_SENSORS_LM95245 is not set
-# CONFIG_SENSORS_MAX1111 is not set
-# CONFIG_SENSORS_MAX16065 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX1668 is not set
-# CONFIG_SENSORS_MAX6639 is not set
-# CONFIG_SENSORS_MAX6642 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_MCP3021 is not set
-# CONFIG_SENSORS_NTC_THERMISTOR is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_PMBUS is not set
-# CONFIG_SENSORS_SHT15 is not set
-# CONFIG_SENSORS_SHT21 is not set
-# CONFIG_SENSORS_SMM665 is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_EMC1403 is not set
-# CONFIG_SENSORS_EMC2103 is not set
-# CONFIG_SENSORS_EMC6W201 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_SCH56XX_COMMON is not set
-# CONFIG_SENSORS_SCH5627 is not set
-# CONFIG_SENSORS_SCH5636 is not set
-# CONFIG_SENSORS_ADS1015 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_ADS7871 is not set
-# CONFIG_SENSORS_AMC6821 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_TMP102 is not set
-# CONFIG_SENSORS_TMP401 is not set
-# CONFIG_SENSORS_TMP421 is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83795 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_THERMAL is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_CORE is not set
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_ARM_SP805_WATCHDOG is not set
-# CONFIG_DW_WATCHDOG is not set
-# CONFIG_MPCORE_WATCHDOG is not set
-# CONFIG_MAX63XX_WATCHDOG is not set
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB is not set
-CONFIG_BCMA_POSSIBLE=y
-
-#
-# Broadcom specific AMBA
-#
-# CONFIG_BCMA is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_88PM860X is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_ASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_I2CPLD is not set
-# CONFIG_TPS6105X is not set
-# CONFIG_TPS65010 is not set
-# CONFIG_TPS6507X is not set
-# CONFIG_MFD_TPS65217 is not set
-# CONFIG_MFD_TPS6586X is not set
-# CONFIG_MFD_TPS65910 is not set
-# CONFIG_MFD_TPS65912_I2C is not set
-# CONFIG_MFD_TPS65912_SPI is not set
-# CONFIG_TWL4030_CORE is not set
-# CONFIG_TWL6040_CORE is not set
-# CONFIG_MFD_STMPE is not set
-# CONFIG_MFD_TC3589X is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_T7L66XB is not set
-# CONFIG_MFD_TC6387XB is not set
-# CONFIG_MFD_TC6393XB is not set
-# CONFIG_PMIC_DA903X is not set
-# CONFIG_MFD_DA9052_SPI is not set
-# CONFIG_MFD_DA9052_I2C is not set
-# CONFIG_PMIC_ADP5520 is not set
-# CONFIG_MFD_MAX8925 is not set
-# CONFIG_MFD_MAX8997 is not set
-# CONFIG_MFD_MAX8998 is not set
-# CONFIG_MFD_S5M_CORE is not set
-# CONFIG_MFD_WM8400 is not set
-# CONFIG_MFD_WM831X_I2C is not set
-# CONFIG_MFD_WM831X_SPI is not set
-# CONFIG_MFD_WM8350_I2C is not set
-# CONFIG_MFD_WM8994 is not set
-# CONFIG_MFD_PCF50633 is not set
-# CONFIG_MFD_MC13XXX is not set
-# CONFIG_ABX500_CORE is not set
-# CONFIG_EZX_PCAP is not set
-# CONFIG_MFD_WL1273_CORE is not set
-# CONFIG_MFD_TPS65090 is not set
-# CONFIG_MFD_AAT2870_CORE is not set
-# CONFIG_MFD_RC5T583 is not set
-CONFIG_REGULATOR=y
-# CONFIG_REGULATOR_DEBUG is not set
-# CONFIG_REGULATOR_DUMMY is not set
-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
-# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
-# CONFIG_REGULATOR_GPIO is not set
-# CONFIG_REGULATOR_AD5398 is not set
-# CONFIG_REGULATOR_ISL6271A is not set
-# CONFIG_REGULATOR_MAX1586 is not set
-# CONFIG_REGULATOR_MAX8649 is not set
-# CONFIG_REGULATOR_MAX8660 is not set
-# CONFIG_REGULATOR_MAX8952 is not set
-# CONFIG_REGULATOR_LP3971 is not set
-# CONFIG_REGULATOR_LP3972 is not set
-# CONFIG_REGULATOR_TPS62360 is not set
-# CONFIG_REGULATOR_TPS65023 is not set
-# CONFIG_REGULATOR_TPS6507X is not set
-# CONFIG_REGULATOR_TPS6524X is not set
-CONFIG_MEDIA_SUPPORT=y
-
-#
-# Multimedia core support
-#
-CONFIG_MEDIA_CONTROLLER=y
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L2_COMMON=m
-# CONFIG_VIDEO_V4L2_SUBDEV_API is not set
-CONFIG_DVB_CORE=m
-CONFIG_DVB_NET=y
-CONFIG_VIDEO_MEDIA=m
-
-#
-# Multimedia drivers
-#
-CONFIG_RC_CORE=y
-CONFIG_LIRC=y
-CONFIG_RC_MAP=m
-CONFIG_IR_NEC_DECODER=m
-CONFIG_IR_RC5_DECODER=m
-CONFIG_IR_RC6_DECODER=m
-CONFIG_IR_JVC_DECODER=m
-CONFIG_IR_SONY_DECODER=m
-CONFIG_IR_RC5_SZ_DECODER=m
-CONFIG_IR_SANYO_DECODER=m
-CONFIG_IR_MCE_KBD_DECODER=m
-CONFIG_IR_LIRC_CODEC=m
-CONFIG_RC_ATI_REMOTE=m
-CONFIG_IR_IMON=m
-CONFIG_IR_MCEUSB=m
-CONFIG_IR_REDRAT3=m
-CONFIG_IR_STREAMZAP=m
-CONFIG_RC_LOOPBACK=m
-CONFIG_IR_GPIO_CIR=m
-# CONFIG_MEDIA_ATTACH is not set
-CONFIG_MEDIA_TUNER=m
-# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
-CONFIG_MEDIA_TUNER_SIMPLE=m
-CONFIG_MEDIA_TUNER_TDA8290=m
-CONFIG_MEDIA_TUNER_TDA827X=m
-CONFIG_MEDIA_TUNER_TDA18271=m
-CONFIG_MEDIA_TUNER_TDA9887=m
-CONFIG_MEDIA_TUNER_TEA5761=m
-CONFIG_MEDIA_TUNER_TEA5767=m
-CONFIG_MEDIA_TUNER_MT20XX=m
-CONFIG_MEDIA_TUNER_MT2060=m
-CONFIG_MEDIA_TUNER_MT2266=m
-CONFIG_MEDIA_TUNER_QT1010=m
-CONFIG_MEDIA_TUNER_XC2028=m
-CONFIG_MEDIA_TUNER_XC5000=m
-CONFIG_MEDIA_TUNER_XC4000=m
-CONFIG_MEDIA_TUNER_MXL5005S=m
-CONFIG_MEDIA_TUNER_MXL5007T=m
-CONFIG_MEDIA_TUNER_MC44S803=m
-CONFIG_MEDIA_TUNER_MAX2165=m
-CONFIG_MEDIA_TUNER_TDA18218=m
-CONFIG_MEDIA_TUNER_TDA18212=m
-CONFIG_VIDEO_V4L2=m
-CONFIG_VIDEOBUF_GEN=m
-CONFIG_VIDEOBUF_VMALLOC=m
-CONFIG_VIDEOBUF_DVB=m
-CONFIG_VIDEO_TVEEPROM=m
-CONFIG_VIDEO_TUNER=m
-CONFIG_VIDEOBUF2_CORE=m
-CONFIG_VIDEOBUF2_MEMOPS=m
-CONFIG_VIDEOBUF2_VMALLOC=m
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
-# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
-CONFIG_VIDEO_IR_I2C=m
-
-#
-# Encoders, decoders, sensors and other helper chips
-#
-
-#
-# Audio decoders, processors and mixers
-#
-# CONFIG_VIDEO_TVAUDIO is not set
-# CONFIG_VIDEO_TDA7432 is not set
-# CONFIG_VIDEO_TDA9840 is not set
-# CONFIG_VIDEO_TEA6415C is not set
-# CONFIG_VIDEO_TEA6420 is not set
-CONFIG_VIDEO_MSP3400=m
-# CONFIG_VIDEO_CS5345 is not set
-CONFIG_VIDEO_CS53L32A=m
-# CONFIG_VIDEO_TLV320AIC23B is not set
-CONFIG_VIDEO_WM8775=m
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_VP27SMPX is not set
-
-#
-# RDS decoders
-#
-# CONFIG_VIDEO_SAA6588 is not set
-
-#
-# Video decoders
-#
-# CONFIG_VIDEO_ADV7180 is not set
-# CONFIG_VIDEO_ADV7183 is not set
-# CONFIG_VIDEO_BT819 is not set
-# CONFIG_VIDEO_BT856 is not set
-# CONFIG_VIDEO_BT866 is not set
-# CONFIG_VIDEO_KS0127 is not set
-# CONFIG_VIDEO_SAA7110 is not set
-CONFIG_VIDEO_SAA711X=m
-# CONFIG_VIDEO_SAA7191 is not set
-# CONFIG_VIDEO_TVP514X is not set
-# CONFIG_VIDEO_TVP5150 is not set
-# CONFIG_VIDEO_TVP7002 is not set
-# CONFIG_VIDEO_VPX3220 is not set
-
-#
-# Video and audio decoders
-#
-# CONFIG_VIDEO_SAA717X is not set
-CONFIG_VIDEO_CX25840=m
-
-#
-# MPEG video encoders
-#
-CONFIG_VIDEO_CX2341X=m
-
-#
-# Video encoders
-#
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_SAA7185 is not set
-# CONFIG_VIDEO_ADV7170 is not set
-# CONFIG_VIDEO_ADV7175 is not set
-# CONFIG_VIDEO_ADV7343 is not set
-# CONFIG_VIDEO_AK881X is not set
-
-#
-# Camera sensor devices
-#
-# CONFIG_VIDEO_OV7670 is not set
-# CONFIG_VIDEO_VS6624 is not set
-# CONFIG_VIDEO_MT9V011 is not set
-# CONFIG_VIDEO_TCM825X is not set
-# CONFIG_VIDEO_SR030PC30 is not set
-
-#
-# Flash devices
-#
-# CONFIG_VIDEO_ADP1653 is not set
-# CONFIG_VIDEO_AS3645A is not set
-
-#
-# Video improvement chips
-#
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# Miscelaneous helper chips
-#
-# CONFIG_VIDEO_THS7303 is not set
-# CONFIG_VIDEO_M52790 is not set
-# CONFIG_VIDEO_VIVI is not set
-CONFIG_V4L_USB_DRIVERS=y
-CONFIG_USB_VIDEO_CLASS=m
-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
-CONFIG_USB_GSPCA=m
-CONFIG_USB_M5602=m
-CONFIG_USB_STV06XX=m
-CONFIG_USB_GL860=m
-CONFIG_USB_GSPCA_BENQ=m
-CONFIG_USB_GSPCA_CONEX=m
-CONFIG_USB_GSPCA_CPIA1=m
-CONFIG_USB_GSPCA_ETOMS=m
-CONFIG_USB_GSPCA_FINEPIX=m
-CONFIG_USB_GSPCA_JEILINJ=m
-CONFIG_USB_GSPCA_JL2005BCD=m
-CONFIG_USB_GSPCA_KINECT=m
-CONFIG_USB_GSPCA_KONICA=m
-CONFIG_USB_GSPCA_MARS=m
-CONFIG_USB_GSPCA_MR97310A=m
-CONFIG_USB_GSPCA_NW80X=m
-CONFIG_USB_GSPCA_OV519=m
-CONFIG_USB_GSPCA_OV534=m
-CONFIG_USB_GSPCA_OV534_9=m
-CONFIG_USB_GSPCA_PAC207=m
-CONFIG_USB_GSPCA_PAC7302=m
-CONFIG_USB_GSPCA_PAC7311=m
-CONFIG_USB_GSPCA_SE401=m
-CONFIG_USB_GSPCA_SN9C2028=m
-CONFIG_USB_GSPCA_SN9C20X=m
-CONFIG_USB_GSPCA_SONIXB=m
-CONFIG_USB_GSPCA_SONIXJ=m
-CONFIG_USB_GSPCA_SPCA500=m
-CONFIG_USB_GSPCA_SPCA501=m
-CONFIG_USB_GSPCA_SPCA505=m
-CONFIG_USB_GSPCA_SPCA506=m
-CONFIG_USB_GSPCA_SPCA508=m
-CONFIG_USB_GSPCA_SPCA561=m
-CONFIG_USB_GSPCA_SPCA1528=m
-CONFIG_USB_GSPCA_SQ905=m
-CONFIG_USB_GSPCA_SQ905C=m
-CONFIG_USB_GSPCA_SQ930X=m
-CONFIG_USB_GSPCA_STK014=m
-CONFIG_USB_GSPCA_STV0680=m
-CONFIG_USB_GSPCA_SUNPLUS=m
-CONFIG_USB_GSPCA_T613=m
-CONFIG_USB_GSPCA_TOPRO=m
-CONFIG_USB_GSPCA_TV8532=m
-CONFIG_USB_GSPCA_VC032X=m
-CONFIG_USB_GSPCA_VICAM=m
-CONFIG_USB_GSPCA_XIRLINK_CIT=m
-CONFIG_USB_GSPCA_ZC3XX=m
-CONFIG_VIDEO_PVRUSB2=m
-CONFIG_VIDEO_PVRUSB2_SYSFS=y
-CONFIG_VIDEO_PVRUSB2_DVB=y
-# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
-CONFIG_VIDEO_HDPVR=m
-CONFIG_VIDEO_EM28XX=m
-CONFIG_VIDEO_EM28XX_ALSA=m
-CONFIG_VIDEO_EM28XX_DVB=m
-CONFIG_VIDEO_EM28XX_RC=y
-CONFIG_VIDEO_TLG2300=m
-CONFIG_VIDEO_CX231XX=m
-CONFIG_VIDEO_CX231XX_RC=y
-CONFIG_VIDEO_CX231XX_ALSA=m
-CONFIG_VIDEO_CX231XX_DVB=m
-CONFIG_VIDEO_TM6000=m
-CONFIG_VIDEO_TM6000_ALSA=m
-CONFIG_VIDEO_TM6000_DVB=m
-CONFIG_VIDEO_USBVISION=m
-CONFIG_USB_ET61X251=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_PWC=m
-# CONFIG_USB_PWC_DEBUG is not set
-CONFIG_USB_PWC_INPUT_EVDEV=y
-CONFIG_VIDEO_CPIA2=m
-CONFIG_USB_ZR364XX=m
-CONFIG_USB_STKWEBCAM=m
-CONFIG_USB_S2255=m
-# CONFIG_V4L_PLATFORM_DRIVERS is not set
-# CONFIG_V4L_MEM2MEM_DRIVERS is not set
-CONFIG_VIDEO_SUNXI_CEDAR=m
-CONFIG_VIDEO_DECODER_SUNXI=m
-# CONFIG_VIDEO_AVS_COUNTER is not set
-# CONFIG_VIDEO_CSI_SUN4I is not set
-CONFIG_RADIO_ADAPTERS=y
-CONFIG_RADIO_SI470X=y
-CONFIG_USB_SI470X=m
-# CONFIG_I2C_SI470X is not set
-CONFIG_USB_MR800=m
-CONFIG_USB_DSBR=m
-# CONFIG_I2C_SI4713 is not set
-# CONFIG_RADIO_SI4713 is not set
-# CONFIG_USB_KEENE is not set
-# CONFIG_RADIO_TEA5764 is not set
-# CONFIG_RADIO_SAA7706H is not set
-# CONFIG_RADIO_TEF6862 is not set
-# CONFIG_RADIO_WL1273 is not set
-
-#
-# Texas Instruments WL128x FM driver (ST based)
-#
-CONFIG_RADIO_WL128X=m
-CONFIG_AUDIO_ENGINE=y
-CONFIG_ACE_CONFIG=y
-# CONFIG_PA_CONTROL is not set
-CONFIG_DVB_MAX_ADAPTERS=8
-# CONFIG_DVB_DYNAMIC_MINORS is not set
-CONFIG_DVB_CAPTURE_DRIVERS=y
-# CONFIG_TTPCI_EEPROM is not set
-
-#
-# Supported USB Adapters
-#
-CONFIG_DVB_USB=m
-# CONFIG_DVB_USB_DEBUG is not set
-CONFIG_DVB_USB_A800=m
-CONFIG_DVB_USB_DIBUSB_MB=m
-CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
-CONFIG_DVB_USB_DIBUSB_MC=m
-CONFIG_DVB_USB_DIB0700=m
-CONFIG_DVB_USB_UMT_010=m
-CONFIG_DVB_USB_CXUSB=m
-CONFIG_DVB_USB_M920X=m
-CONFIG_DVB_USB_GL861=m
-CONFIG_DVB_USB_AU6610=m
-CONFIG_DVB_USB_DIGITV=m
-CONFIG_DVB_USB_VP7045=m
-CONFIG_DVB_USB_VP702X=m
-CONFIG_DVB_USB_GP8PSK=m
-CONFIG_DVB_USB_NOVA_T_USB2=m
-CONFIG_DVB_USB_TTUSB2=m
-CONFIG_DVB_USB_DTT200U=m
-CONFIG_DVB_USB_OPERA1=m
-CONFIG_DVB_USB_AF9005=m
-CONFIG_DVB_USB_AF9005_REMOTE=m
-# CONFIG_DVB_USB_PCTV452E is not set
-CONFIG_DVB_USB_DW2102=m
-CONFIG_DVB_USB_CINERGY_T2=m
-CONFIG_DVB_USB_ANYSEE=m
-CONFIG_DVB_USB_DTV5100=m
-CONFIG_DVB_USB_AF9015=m
-CONFIG_DVB_USB_CE6230=m
-CONFIG_DVB_USB_FRIIO=m
-CONFIG_DVB_USB_EC168=m
-CONFIG_DVB_USB_AZ6007=m
-CONFIG_DVB_USB_AZ6027=m
-CONFIG_DVB_USB_LME2510=m
-CONFIG_DVB_USB_TECHNISAT_USB2=m
-CONFIG_DVB_USB_IT913X=m
-CONFIG_DVB_USB_MXL111SF=m
-CONFIG_DVB_USB_RTL28XXU=m
-CONFIG_SMS_SIANO_MDTV=m
-
-#
-# Siano module components
-#
-CONFIG_SMS_USB_DRV=m
-# CONFIG_SMS_SDIO_DRV is not set
-
-#
-# Supported FlexCopII (B2C2) Adapters
-#
-CONFIG_DVB_B2C2_FLEXCOP=m
-CONFIG_DVB_B2C2_FLEXCOP_USB=m
-# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
-
-#
-# Supported DVB Frontends
-#
-CONFIG_DVB_FE_CUSTOMISE=y
-
-#
-# Customise DVB Frontends
-#
-
-#
-# Multistandard (satellite) frontends
-#
-CONFIG_DVB_STB0899=m
-CONFIG_DVB_STB6100=m
-CONFIG_DVB_STV090x=m
-CONFIG_DVB_STV6110x=m
-
-#
-# Multistandard (cable + terrestrial) frontends
-#
-CONFIG_DVB_DRXK=m
-CONFIG_DVB_TDA18271C2DD=m
-
-#
-# DVB-S (satellite) frontends
-#
-CONFIG_DVB_CX24110=m
-CONFIG_DVB_CX24123=m
-CONFIG_DVB_MT312=m
-CONFIG_DVB_ZL10036=m
-CONFIG_DVB_ZL10039=m
-CONFIG_DVB_S5H1420=m
-CONFIG_DVB_STV0288=m
-CONFIG_DVB_STB6000=m
-CONFIG_DVB_STV0299=m
-CONFIG_DVB_STV6110=m
-CONFIG_DVB_STV0900=m
-CONFIG_DVB_TDA8083=m
-CONFIG_DVB_TDA10086=m
-CONFIG_DVB_TDA8261=m
-CONFIG_DVB_VES1X93=m
-CONFIG_DVB_TUNER_ITD1000=m
-CONFIG_DVB_TUNER_CX24113=m
-CONFIG_DVB_TDA826X=m
-CONFIG_DVB_TUA6100=m
-CONFIG_DVB_CX24116=m
-CONFIG_DVB_SI21XX=m
-CONFIG_DVB_DS3000=m
-CONFIG_DVB_MB86A16=m
-CONFIG_DVB_TDA10071=m
-
-#
-# DVB-T (terrestrial) frontends
-#
-CONFIG_DVB_SP8870=m
-CONFIG_DVB_SP887X=m
-CONFIG_DVB_CX22700=m
-CONFIG_DVB_CX22702=m
-CONFIG_DVB_S5H1432=m
-CONFIG_DVB_DRXD=m
-CONFIG_DVB_L64781=m
-CONFIG_DVB_TDA1004X=m
-CONFIG_DVB_NXT6000=m
-CONFIG_DVB_MT352=m
-CONFIG_DVB_ZL10353=m
-CONFIG_DVB_DIB3000MB=m
-CONFIG_DVB_DIB3000MC=m
-CONFIG_DVB_DIB7000M=m
-CONFIG_DVB_DIB7000P=m
-CONFIG_DVB_DIB9000=m
-CONFIG_DVB_TDA10048=m
-CONFIG_DVB_AF9013=m
-CONFIG_DVB_EC100=m
-CONFIG_DVB_HD29L2=m
-CONFIG_DVB_STV0367=m
-CONFIG_DVB_CXD2820R=m
-CONFIG_DVB_RTL2830=m
-
-#
-# DVB-C (cable) frontends
-#
-CONFIG_DVB_VES1820=m
-CONFIG_DVB_TDA10021=m
-CONFIG_DVB_TDA10023=m
-CONFIG_DVB_STV0297=m
-
-#
-# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
-#
-CONFIG_DVB_NXT200X=m
-CONFIG_DVB_OR51211=m
-CONFIG_DVB_OR51132=m
-CONFIG_DVB_BCM3510=m
-CONFIG_DVB_LGDT330X=m
-CONFIG_DVB_LGDT3305=m
-CONFIG_DVB_S5H1409=m
-CONFIG_DVB_AU8522=m
-CONFIG_DVB_S5H1411=m
-
-#
-# ISDB-T (terrestrial) frontends
-#
-CONFIG_DVB_S921=m
-CONFIG_DVB_DIB8000=m
-CONFIG_DVB_MB86A20S=m
-
-#
-# Digital terrestrial only tuners/PLL
-#
-CONFIG_DVB_PLL=m
-CONFIG_DVB_TUNER_DIB0070=m
-CONFIG_DVB_TUNER_DIB0090=m
-
-#
-# SEC control devices for DVB-S
-#
-CONFIG_DVB_LNBP21=m
-CONFIG_DVB_LNBP22=m
-CONFIG_DVB_ISL6405=m
-CONFIG_DVB_ISL6421=m
-CONFIG_DVB_ISL6423=m
-CONFIG_DVB_A8293=m
-CONFIG_DVB_LGS8GL5=m
-CONFIG_DVB_LGS8GXX=m
-CONFIG_DVB_ATBM8830=m
-CONFIG_DVB_TDA665x=m
-CONFIG_DVB_IX2505V=m
-CONFIG_DVB_IT913X_FE=m
-CONFIG_DVB_M88RS2000=m
-
-#
-# Tools to develop new frontends
-#
-# CONFIG_DVB_DUMMY_FE is not set
-
-#
-# Graphics support
-#
-CONFIG_DRM=y
-CONFIG_DRM_MALI=m
-# CONFIG_DRM_UDL is not set
-# CONFIG_ION is not set
-CONFIG_MALI=m
-CONFIG_MALI400=m
-# CONFIG_MALI400_DEBUG is not set
-# CONFIG_MALI400_GPU_UTILIZATION is not set
-CONFIG_UMP=m
-# CONFIG_UMP_DEBUG is not set
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
-CONFIG_FB_CFB_FILLRECT=m
-CONFIG_FB_CFB_COPYAREA=m
-CONFIG_FB_CFB_IMAGEBLIT=m
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-CONFIG_FB_SYS_FILLRECT=m
-CONFIG_FB_SYS_COPYAREA=m
-CONFIG_FB_SYS_IMAGEBLIT=m
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-CONFIG_FB_SYS_FOPS=m
-# CONFIG_FB_WMT_GE_ROPS is not set
-CONFIG_FB_DEFERRED_IO=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-CONFIG_FB_SUNXI=m
-CONFIG_FB_SUNXI_RESERVED_MEM=y
-CONFIG_FB_SUNXI_UMP=y
-CONFIG_FB_SUNXI_LCD=m
-CONFIG_FB_SUNXI_HDMI=m
-CONFIG_HDMI_CEC=m
-# CONFIG_FB_ARMCLCD is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_SMSCUFX is not set
-CONFIG_FB_UDL=m
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_BROADSHEET is not set
-# CONFIG_EXYNOS_VIDEO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=m
-# CONFIG_LCD_L4F00242T03 is not set
-# CONFIG_LCD_LMS283GF05 is not set
-# CONFIG_LCD_LTV350QV is not set
-# CONFIG_LCD_TDO24M is not set
-# CONFIG_LCD_VGG2432A4 is not set
-# CONFIG_LCD_PLATFORM is not set
-# CONFIG_LCD_S6E63M0 is not set
-# CONFIG_LCD_LD9040 is not set
-# CONFIG_LCD_AMS369FG06 is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_GENERIC=m
-# CONFIG_BACKLIGHT_ADP8860 is not set
-# CONFIG_BACKLIGHT_ADP8870 is not set
-# CONFIG_BACKLIGHT_LP855X is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_SOUND=y
-CONFIG_SOUND_OSS_CORE=y
-CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_JACK=y
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-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_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-CONFIG_SND_VMASTER=y
-CONFIG_SND_RAWMIDI_SEQ=m
-# CONFIG_SND_OPL3_LIB_SEQ is not set
-# CONFIG_SND_OPL4_LIB_SEQ is not set
-# CONFIG_SND_SBAWE_SEQ is not set
-# CONFIG_SND_EMU10K1_SEQ is not set
-CONFIG_SND_DRIVERS=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_ALOOP is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-CONFIG_SND_ARM=y
-# CONFIG_SND_ARMAACI is not set
-CONFIG_SND_SPI=y
-CONFIG_SND_USB=y
-CONFIG_SND_USB_AUDIO=m
-CONFIG_SND_USB_UA101=m
-CONFIG_SND_USB_CAIAQ=m
-CONFIG_SND_USB_CAIAQ_INPUT=y
-CONFIG_SND_USB_6FIRE=m
-CONFIG_SND_SOC=y
-CONFIG_SOUND_SUNXI=y
-CONFIG_SND_SUNXI_SOC_CODEC=y
-CONFIG_SND_SUNXI_SOC_HDMIAUDIO=y
-CONFIG_SND_SUNXI_SOC_SPDIF=m
-CONFIG_SND_SOC_I2C_AND_SPI=y
-# CONFIG_SND_SOC_ALL_CODECS is not set
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_BATTERY_STRENGTH is not set
-CONFIG_HIDRAW=y
-# CONFIG_UHID is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-CONFIG_HID_PID=y
-CONFIG_USB_HIDDEV=y
-
-#
-# Special HID drivers
-#
-CONFIG_HID_A4TECH=m
-CONFIG_HID_ACRUX=m
-CONFIG_HID_ACRUX_FF=y
-CONFIG_HID_APPLE=m
-CONFIG_HID_BELKIN=m
-CONFIG_HID_CHERRY=m
-CONFIG_HID_CHICONY=m
-CONFIG_HID_PRODIKEYS=m
-CONFIG_HID_CYPRESS=m
-CONFIG_HID_DRAGONRISE=m
-CONFIG_DRAGONRISE_FF=y
-CONFIG_HID_EMS_FF=m
-CONFIG_HID_ELECOM=m
-CONFIG_HID_EZKEY=m
-CONFIG_HID_HOLTEK=m
-CONFIG_HOLTEK_FF=y
-CONFIG_HID_KEYTOUCH=m
-CONFIG_HID_KYE=m
-CONFIG_HID_UCLOGIC=m
-CONFIG_HID_WALTOP=m
-CONFIG_HID_GYRATION=m
-CONFIG_HID_TWINHAN=m
-CONFIG_HID_KENSINGTON=m
-CONFIG_HID_LCPOWER=m
-CONFIG_HID_LOGITECH=m
-CONFIG_HID_LOGITECH_DJ=m
-CONFIG_LOGITECH_FF=y
-CONFIG_LOGIRUMBLEPAD2_FF=y
-CONFIG_LOGIG940_FF=y
-CONFIG_LOGIWHEELS_FF=y
-CONFIG_HID_MAGICMOUSE=m
-CONFIG_HID_MICROSOFT=m
-CONFIG_HID_MONTEREY=m
-CONFIG_HID_MULTITOUCH=m
-CONFIG_HID_NTRIG=m
-CONFIG_HID_ORTEK=m
-CONFIG_HID_PANTHERLORD=m
-CONFIG_PANTHERLORD_FF=y
-CONFIG_HID_PETALYNX=m
-# CONFIG_HID_PICOLCD is not set
-CONFIG_HID_PRIMAX=m
-CONFIG_HID_ROCCAT=m
-CONFIG_HID_SAITEK=m
-CONFIG_HID_SAMSUNG=m
-CONFIG_HID_SONY=m
-CONFIG_HID_SPEEDLINK=m
-CONFIG_HID_SUNPLUS=m
-CONFIG_HID_GREENASIA=m
-CONFIG_GREENASIA_FF=y
-CONFIG_HID_SMARTJOYPLUS=m
-CONFIG_SMARTJOYPLUS_FF=y
-# CONFIG_HID_TIVO is not set
-CONFIG_HID_TOPSEED=m
-CONFIG_HID_THRUSTMASTER=m
-CONFIG_THRUSTMASTER_FF=y
-CONFIG_HID_WACOM=m
-CONFIG_HID_WACOM_POWER_SUPPLY=y
-CONFIG_HID_WIIMOTE=m
-CONFIG_HID_WIIMOTE_EXT=y
-CONFIG_HID_ZEROPLUS=m
-CONFIG_ZEROPLUS_FF=y
-CONFIG_HID_ZYDACRON=m
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-# CONFIG_USB_ARCH_HAS_XHCI is not set
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_COMMON=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-# CONFIG_USB_DWC3 is not set
-# CONFIG_USB_MON is not set
-# CONFIG_USB_WUSB_CBAF is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_C67X00_HCD is not set
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-CONFIG_USB_EHCI_TT_NEWSCHED=y
-# CONFIG_USB_OXU210HP_HCD is not set
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_ISP1760_HCD is not set
-# CONFIG_USB_ISP1362_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_HCD_PLATFORM is not set
-# CONFIG_USB_EHCI_HCD_PLATFORM is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_U132_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-# CONFIG_USB_R8A66597_HCD is not set
-CONFIG_USB_SUNXI_EHCI=y
-CONFIG_USB_SUNXI_OHCI=y
-CONFIG_USB_SUNXI_COMMON=y
-CONFIG_USB_SW_SUNXI_HCD0=y
-# CONFIG_USB_MUSB_HDRC is not set
-# CONFIG_USB_RENESAS_USBHS is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-# CONFIG_USB_PRINTER is not set
-CONFIG_USB_WDM=m
-# CONFIG_USB_TMC is not set
-
-#
-# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
-#
-
-#
-# also be needed; see USB_STORAGE Help for more info
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_REALTEK=m
-CONFIG_USB_STORAGE_DATAFAB=m
-CONFIG_USB_STORAGE_FREECOM=m
-CONFIG_USB_STORAGE_ISD200=m
-CONFIG_USB_STORAGE_USBAT=m
-CONFIG_USB_STORAGE_SDDR09=m
-CONFIG_USB_STORAGE_SDDR55=m
-CONFIG_USB_STORAGE_JUMPSHOT=m
-CONFIG_USB_STORAGE_ALAUDA=m
-CONFIG_USB_STORAGE_ONETOUCH=m
-CONFIG_USB_STORAGE_KARMA=m
-CONFIG_USB_STORAGE_CYPRESS_ATACB=m
-CONFIG_USB_STORAGE_ENE_UB6250=m
-CONFIG_USB_LIBUSUAL=y
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB port drivers
-#
-CONFIG_USB_SERIAL=y
-# CONFIG_USB_SERIAL_CONSOLE is not set
-CONFIG_USB_EZUSB=y
-# CONFIG_USB_SERIAL_GENERIC is not set
-CONFIG_USB_SERIAL_AIRCABLE=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_CH341=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP210X=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_F81232=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_IUU=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_METRO=m
-CONFIG_USB_SERIAL_MOS7720=m
-CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_MOTOROLA=m
-CONFIG_USB_SERIAL_NAVMAN=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_OTI6858=m
-CONFIG_USB_SERIAL_QCAUX=m
-CONFIG_USB_SERIAL_QUALCOMM=m
-CONFIG_USB_SERIAL_SPCP8X5=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-CONFIG_USB_SERIAL_SAFE_PADDED=y
-CONFIG_USB_SERIAL_SIEMENS_MPI=m
-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
-CONFIG_USB_SERIAL_SYMBOL=m
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_WWAN=m
-CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_SERIAL_OPTICON=m
-CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m
-CONFIG_USB_SERIAL_ZIO=m
-CONFIG_USB_SERIAL_SSU100=m
-CONFIG_USB_SERIAL_DEBUG=m
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_ADUTUX=m
-CONFIG_USB_SEVSEG=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYPRESS_CY7C63=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_IDMOUSE=m
-CONFIG_USB_FTDI_ELAN=m
-CONFIG_USB_APPLEDISPLAY=m
-CONFIG_USB_SISUSBVGA=m
-# CONFIG_USB_SISUSBVGA_CON is not set
-CONFIG_USB_LD=m
-CONFIG_USB_TRANCEVIBRATOR=m
-CONFIG_USB_IOWARRIOR=m
-# CONFIG_USB_TEST is not set
-CONFIG_USB_ISIGHTFW=m
-CONFIG_USB_YUREX=m
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_DEBUG_FS is not set
-CONFIG_USB_GADGET_VBUS_DRAW=2
-CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
-# CONFIG_USB_FUSB300 is not set
-# CONFIG_USB_R8A66597 is not set
-# CONFIG_USB_MV_UDC is not set
-# CONFIG_USB_M66592 is not set
-# CONFIG_USB_NET2272 is not set
-CONFIG_USB_SW_SUNXI_UDC0_SELECT=m
-# CONFIG_USB_DUMMY_HCD is not set
-CONFIG_USB_SW_SUNXI_UDC0=y
-CONFIG_USB_GADGET_DUALSPEED=y
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_AUDIO=m
-# CONFIG_GADGET_UAC1 is not set
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_ETH_EEM=y
-CONFIG_USB_G_NCM=m
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FUNCTIONFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-CONFIG_USB_MASS_STORAGE=m
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-CONFIG_USB_G_PRINTER=m
-CONFIG_USB_CDC_COMPOSITE=m
-CONFIG_USB_G_ACM_MS=m
-# CONFIG_USB_G_MULTI is not set
-CONFIG_USB_G_HID=m
-# CONFIG_USB_G_DBGP is not set
-CONFIG_USB_G_WEBCAM=m
-
-#
-# OTG and related infrastructure
-#
-# CONFIG_USB_OTG_WAKELOCK is not set
-# CONFIG_USB_GPIO_VBUS is not set
-# CONFIG_USB_ULPI is not set
-# CONFIG_NOP_USB_XCEIV is not set
-CONFIG_USB_SW_SUNXI_USB=y
-CONFIG_USB_SW_SUNXI_USB_MANAGER=y
-# CONFIG_USB_SW_SUNXI_USB0_HOST_ONLY is not set
-CONFIG_USB_SW_SUNXI_USB0_OTG=y
-# CONFIG_USB_SW_SUNXI_USB0_DEVICE_ONLY is not set
-# CONFIG_USB_SW_SUNXI_USB0_NULL is not set
-CONFIG_USB_SW_SUNXI_USB_DEBUG=y
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-# CONFIG_MMC_CLKGATE is not set
-# CONFIG_MMC_EMBEDDED_SDIO is not set
-CONFIG_MMC_PARANOID_SD_INIT=y
-
-#
-# MMC/SD/SDIO Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_MINORS=16
-# CONFIG_MMC_BLOCK_BOUNCE is not set
-# CONFIG_MMC_BLOCK_DEFERRED_RESUME is not set
-# CONFIG_SDIO_UART is not set
-# CONFIG_MMC_TEST is not set
-
-#
-# MMC/SD/SDIO Host Controller Drivers
-#
-# CONFIG_MMC_ARMMMCI is not set
-# CONFIG_MMC_SDHCI is not set
-# CONFIG_MMC_SDHCI_PXAV3 is not set
-# CONFIG_MMC_SDHCI_PXAV2 is not set
-# CONFIG_MMC_DW is not set
-CONFIG_MMC_SUNXI_NEW=y
-# CONFIG_MMC_DEBUG_SUNXI is not set
-CONFIG_MMC_PRE_DBGLVL_SUNXI=3
-# CONFIG_MMC_VUB300 is not set
-CONFIG_MMC_USHC=m
-
-#
-# MMC/SD/SDIO Card Power Management Drivers
-#
-CONFIG_MMC_SUNXI_POWER_CONTROL=y
-
-#
-# SUNXI MMC/SD/SDIO Host Controller Drivers
-#
-# CONFIG_MEMSTICK is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SUNXI=y
-# CONFIG_LEDS_LM3530 is not set
-# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_GPIO is not set
-# CONFIG_LEDS_LP3944 is not set
-# CONFIG_LEDS_LP5521 is not set
-# CONFIG_LEDS_LP5523 is not set
-# CONFIG_LEDS_PCA955X is not set
-# CONFIG_LEDS_PCA9633 is not set
-# CONFIG_LEDS_DAC124S085 is not set
-# CONFIG_LEDS_REGULATOR is not set
-# CONFIG_LEDS_BD2802 is not set
-# CONFIG_LEDS_LT3593 is not set
-# CONFIG_LEDS_RENESAS_TPU is not set
-# CONFIG_LEDS_TCA6507 is not set
-# CONFIG_LEDS_OT200 is not set
-CONFIG_LEDS_TRIGGERS=y
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-CONFIG_LEDS_TRIGGER_BACKLIGHT=y
-CONFIG_LEDS_TRIGGER_CPU=y
-CONFIG_LEDS_TRIGGER_GPIO=y
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
-
-#
-# iptables trigger is under Netfilter config (LED target)
-#
-# CONFIG_SWITCH is not set
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1374 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS3232 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_ISL12022 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-# CONFIG_RTC_DRV_BQ32K is not set
-# CONFIG_RTC_DRV_S35390A is not set
-# CONFIG_RTC_DRV_FM3130 is not set
-# CONFIG_RTC_DRV_RX8581 is not set
-# CONFIG_RTC_DRV_RX8025 is not set
-# CONFIG_RTC_DRV_EM3027 is not set
-# CONFIG_RTC_DRV_RV3029C2 is not set
-
-#
-# SPI RTC drivers
-#
-# CONFIG_RTC_DRV_M41T93 is not set
-# CONFIG_RTC_DRV_M41T94 is not set
-# CONFIG_RTC_DRV_DS1305 is not set
-# CONFIG_RTC_DRV_DS1390 is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_R9701 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_DS3234 is not set
-# CONFIG_RTC_DRV_PCF2123 is not set
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1286 is not set
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T35 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_MSM6242 is not set
-# CONFIG_RTC_DRV_BQ4802 is not set
-# CONFIG_RTC_DRV_RP5C01 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-# CONFIG_RTC_DRV_PL030 is not set
-# CONFIG_RTC_DRV_PL031 is not set
-CONFIG_RTC_DRV_SUN4I=y
-# CONFIG_DMADEVICES is not set
-CONFIG_AUXDISPLAY=y
-# CONFIG_UIO is not set
-
-#
-# Virtio drivers
-#
-# CONFIG_VIRTIO_BALLOON is not set
-# CONFIG_VIRTIO_MMIO is not set
-
-#
-# Microsoft Hyper-V guest support
-#
-CONFIG_STAGING=y
-CONFIG_USBIP_CORE=m
-CONFIG_USBIP_VHCI_HCD=m
-CONFIG_USBIP_HOST=m
-# CONFIG_USBIP_DEBUG is not set
-# CONFIG_W35UND is not set
-CONFIG_PRISM2_USB=m
-# CONFIG_ECHO is not set
-# CONFIG_ASUS_OLED is not set
-# CONFIG_RTLLIB is not set
-# CONFIG_R8712U is not set
-CONFIG_RTS5139=m
-# CONFIG_RTS5139_DEBUG is not set
-# CONFIG_TRANZPORT is not set
-# CONFIG_LINE6_USB is not set
-# CONFIG_USB_SERIAL_QUATECH2 is not set
-# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
-# CONFIG_VT6656 is not set
-# CONFIG_IIO is not set
-# CONFIG_FB_SM7XX is not set
-# CONFIG_USB_ENESTORAGE is not set
-# CONFIG_BCM_WIMAX is not set
-# CONFIG_FT1000 is not set
-
-#
-# Speakup console speech
-#
-# CONFIG_SPEAKUP is not set
-# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set
-# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set
-CONFIG_STAGING_MEDIA=y
-# CONFIG_DVB_AS102 is not set
-# CONFIG_EASYCAP is not set
-CONFIG_LIRC_STAGING=y
-CONFIG_LIRC_IGORPLUGUSB=m
-CONFIG_LIRC_IMON=m
-CONFIG_LIRC_SASEM=m
-CONFIG_LIRC_SERIAL=m
-CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
-CONFIG_LIRC_TTUSBIR=m
-CONFIG_LIRC_ZILOG=m
-
-#
-# Android
-#
-CONFIG_ANDROID=y
-# CONFIG_ANDROID_BINDER_IPC is not set
-# CONFIG_ASHMEM is not set
-# CONFIG_ANDROID_LOGGER is not set
-# CONFIG_ANDROID_RAM_CONSOLE is not set
-# CONFIG_PERSISTENT_TRACER is not set
-CONFIG_ANDROID_TIMED_OUTPUT=y
-# CONFIG_ANDROID_TIMED_GPIO is not set
-# CONFIG_ANDROID_LOW_MEMORY_KILLER is not set
-CONFIG_ANDROID_SWITCH=y
-CONFIG_ANDROID_SWITCH_GPIO=y
-# CONFIG_ANDROID_INTF_ALARM_DEV is not set
-# CONFIG_PHONE is not set
-# CONFIG_USB_WPAN_HCD is not set
-CONFIG_CLKDEV_LOOKUP=y
-
-#
-# Hardware Spinlock drivers
-#
-# CONFIG_IOMMU_SUPPORT is not set
-
-#
-# Remoteproc drivers (EXPERIMENTAL)
-#
-
-#
-# Rpmsg drivers (EXPERIMENTAL)
-#
-# CONFIG_VIRT_DRIVERS is not set
-# CONFIG_PM_DEVFREQ is not set
-
-#
-# File systems
-#
-# CONFIG_EXT2_FS is not set
-# CONFIG_EXT3_FS is not set
-CONFIG_EXT4_FS=y
-CONFIG_EXT4_USE_FOR_EXT23=y
-CONFIG_EXT4_FS_XATTR=y
-CONFIG_EXT4_FS_POSIX_ACL=y
-CONFIG_EXT4_FS_SECURITY=y
-# CONFIG_EXT4_DEBUG is not set
-CONFIG_JBD2=y
-# CONFIG_JBD2_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_BTRFS_FS is not set
-# CONFIG_NILFS2_FS is not set
-CONFIG_FS_POSIX_ACL=y
-CONFIG_EXPORTFS=y
-CONFIG_FILE_LOCKING=y
-CONFIG_FSNOTIFY=y
-CONFIG_DNOTIFY=y
-CONFIG_INOTIFY_USER=y
-CONFIG_FANOTIFY=y
-CONFIG_QUOTA=y
-# CONFIG_QUOTA_NETLINK_INTERFACE is not set
-CONFIG_PRINT_QUOTA_WARNING=y
-# CONFIG_QUOTA_DEBUG is not set
-CONFIG_QUOTA_TREE=y
-CONFIG_QFMT_V1=y
-CONFIG_QFMT_V2=y
-CONFIG_QUOTACTL=y
-CONFIG_AUTOFS4_FS=y
-CONFIG_FUSE_FS=m
-CONFIG_CUSE=m
-CONFIG_GENERIC_ACL=y
-
-#
-# Caches
-#
-CONFIG_FSCACHE=y
-CONFIG_FSCACHE_STATS=y
-# CONFIG_FSCACHE_HISTOGRAM is not set
-# CONFIG_FSCACHE_DEBUG is not set
-# CONFIG_FSCACHE_OBJECT_LIST is not set
-CONFIG_CACHEFILES=y
-# CONFIG_CACHEFILES_DEBUG is not set
-# CONFIG_CACHEFILES_HISTOGRAM is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=y
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_PROC_PAGE_MONITOR=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-CONFIG_TMPFS_POSIX_ACL=y
-CONFIG_TMPFS_XATTR=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_CONFIGFS_FS=m
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-CONFIG_ECRYPT_FS=m
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_UBIFS_FS is not set
-# CONFIG_LOGFS is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_OMFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX6FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_PSTORE is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-CONFIG_NETWORK_FILESYSTEMS=y
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
-CONFIG_NFS_V4=y
-CONFIG_NFS_V4_1=y
-CONFIG_PNFS_FILE_LAYOUT=y
-CONFIG_PNFS_BLOCK=m
-CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
-CONFIG_ROOT_NFS=y
-CONFIG_NFS_FSCACHE=y
-# CONFIG_NFS_USE_LEGACY_DNS is not set
-CONFIG_NFS_USE_KERNEL_DNS=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V2_ACL=y
-CONFIG_NFSD_V3=y
-CONFIG_NFSD_V3_ACL=y
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_FAULT_INJECTION=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_ACL_SUPPORT=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=y
-CONFIG_SUNRPC_BACKCHANNEL=y
-# CONFIG_SUNRPC_DEBUG is not set
-# CONFIG_CEPH_FS is not set
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-CONFIG_CIFS_WEAK_PW_HASH=y
-CONFIG_CIFS_UPCALL=y
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-# CONFIG_CIFS_DEBUG2 is not set
-CONFIG_CIFS_DFS_UPCALL=y
-CONFIG_CIFS_FSCACHE=y
-CONFIG_CIFS_ACL=y
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-CONFIG_NLS_CODEPAGE_936=y
-CONFIG_NLS_CODEPAGE_950=y
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-CONFIG_NLS_ASCII=y
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-# CONFIG_DLM is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_DEFAULT_MESSAGE_LOGLEVEL=6
-CONFIG_ENABLE_WARN_DEPRECATED=y
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_FRAME_WARN=1024
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_STRIP_ASM_SYMS is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-CONFIG_DEBUG_FS=y
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_SECTION_MISMATCH is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-# CONFIG_LOCKUP_DETECTOR is not set
-# CONFIG_HARDLOCKUP_DETECTOR_NMI is not set
-# CONFIG_HARDLOCKUP_DETECTOR_OTHER_CPU is not set
-# CONFIG_HARDLOCKUP_DETECTOR is not set
-# CONFIG_DETECT_HUNG_TASK is not set
-CONFIG_SCHED_DEBUG=y
-CONFIG_SCHEDSTATS=y
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_SLUB_DEBUG_ON is not set
-# CONFIG_SLUB_STATS is not set
-# CONFIG_DEBUG_KMEMLEAK is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_SPARSE_RCU_POINTER is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_DEBUG_ATOMIC_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-CONFIG_STACKTRACE=y
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_HIGHMEM is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_WRITECOUNT is not set
-# CONFIG_DEBUG_MEMORY_INIT is not set
-CONFIG_DEBUG_LIST=y
-# CONFIG_TEST_LIST_SORT is not set
-# CONFIG_DEBUG_SG is not set
-# CONFIG_DEBUG_NOTIFIERS is not set
-# CONFIG_DEBUG_CREDENTIALS is not set
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-CONFIG_RCU_CPU_STALL_TIMEOUT=60
-CONFIG_RCU_CPU_STALL_VERBOSE=y
-# CONFIG_RCU_CPU_STALL_INFO is not set
-# CONFIG_RCU_TRACE is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
-# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
-# CONFIG_DEBUG_PER_CPU_MAPS is not set
-# CONFIG_LKDTM is not set
-# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_PAGEALLOC=y
-CONFIG_WANT_PAGE_DEBUG_FLAGS=y
-CONFIG_PAGE_POISONING=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_HAVE_C_RECORDMCOUNT=y
-CONFIG_RING_BUFFER=y
-CONFIG_RING_BUFFER_ALLOW_SWAP=y
-CONFIG_TRACING_SUPPORT=y
-# CONFIG_FTRACE is not set
-# CONFIG_DYNAMIC_DEBUG is not set
-# CONFIG_DMA_API_DEBUG is not set
-# CONFIG_ATOMIC64_SELFTEST is not set
-# CONFIG_ASYNC_RAID6_TEST is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_KGDB is not set
-# CONFIG_TEST_KSTRTOX is not set
-# CONFIG_STRICT_DEVMEM is not set
-CONFIG_ARM_UNWIND=y
-CONFIG_DEBUG_USER=y
-# CONFIG_DEBUG_RODATA is not set
-CONFIG_DEBUG_LL=y
-CONFIG_DEBUG_LL_UART_NONE=y
-# CONFIG_DEBUG_ICEDCC is not set
-# CONFIG_DEBUG_SEMIHOSTING is not set
-CONFIG_EARLY_PRINTK=y
-# CONFIG_OC_ETM is not set
-
-#
-# Security options
-#
-CONFIG_KEYS=y
-# CONFIG_ENCRYPTED_KEYS is not set
-# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITYFS is not set
-CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_DEFAULT_SECURITY=""
-CONFIG_XOR_BLOCKS=m
-CONFIG_ASYNC_CORE=m
-CONFIG_ASYNC_MEMCPY=m
-CONFIG_ASYNC_XOR=m
-CONFIG_ASYNC_PQ=m
-CONFIG_ASYNC_RAID6_RECOV=m
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_ALGAPI2=y
-CONFIG_CRYPTO_AEAD=y
-CONFIG_CRYPTO_AEAD2=y
-CONFIG_CRYPTO_BLKCIPHER=y
-CONFIG_CRYPTO_BLKCIPHER2=y
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_HASH2=y
-CONFIG_CRYPTO_RNG=y
-CONFIG_CRYPTO_RNG2=y
-CONFIG_CRYPTO_PCOMP=y
-CONFIG_CRYPTO_PCOMP2=y
-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 is not set
-# CONFIG_CRYPTO_PCRYPT is not set
-CONFIG_CRYPTO_WORKQUEUE=y
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_AUTHENC=y
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-CONFIG_CRYPTO_CBC=y
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-CONFIG_CRYPTO_ECB=y
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_PCBC is not set
-CONFIG_CRYPTO_XTS=m
-
-#
-# Hash modes
-#
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_VMAC is not set
-
-#
-# Digest
-#
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_GHASH is not set
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_MICHAEL_MIC=m
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-CONFIG_CRYPTO_SHA1=y
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-CONFIG_CRYPTO_AES=y
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_ARC4=y
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-CONFIG_CRYPTO_DES=y
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-
-#
-# Compression
-#
-CONFIG_CRYPTO_DEFLATE=y
-CONFIG_CRYPTO_ZLIB=y
-CONFIG_CRYPTO_LZO=y
-
-#
-# Random Number Generation
-#
-CONFIG_CRYPTO_ANSI_CPRNG=y
-CONFIG_CRYPTO_USER_API=m
-CONFIG_CRYPTO_USER_API_HASH=m
-CONFIG_CRYPTO_USER_API_SKCIPHER=m
-# CONFIG_CRYPTO_HW is not set
-# CONFIG_BINARY_PRINTF is not set
-
-#
-# Library routines
-#
-CONFIG_RAID6_PQ=m
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_PCI_IOMAP=y
-CONFIG_GENERIC_IO=y
-CONFIG_CRC_CCITT=y
-CONFIG_CRC16=y
-CONFIG_CRC_T10DIF=y
-CONFIG_CRC_ITU_T=y
-CONFIG_CRC32=y
-# CONFIG_CRC32_SELFTEST is not set
-CONFIG_CRC32_SLICEBY8=y
-# CONFIG_CRC32_SLICEBY4 is not set
-# CONFIG_CRC32_SARWATE is not set
-# CONFIG_CRC32_BIT is not set
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-# CONFIG_CRC8 is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_XZ_DEC=y
-# CONFIG_XZ_DEC_X86 is not set
-# CONFIG_XZ_DEC_POWERPC is not set
-# CONFIG_XZ_DEC_IA64 is not set
-CONFIG_XZ_DEC_ARM=y
-CONFIG_XZ_DEC_ARMTHUMB=y
-# CONFIG_XZ_DEC_SPARC is not set
-CONFIG_XZ_DEC_BCJ=y
-# CONFIG_XZ_DEC_TEST is not set
-CONFIG_DECOMPRESS_GZIP=y
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=m
-CONFIG_TEXTSEARCH_BM=m
-CONFIG_TEXTSEARCH_FSM=m
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
-CONFIG_CPU_RMAP=y
-CONFIG_DQL=y
-CONFIG_NLATTR=y
-CONFIG_AVERAGE=y
-# CONFIG_CORDIC is not set
diff --git a/core/linux-sun7i/linux-sun7i.install b/core/linux-sun7i/linux-sun7i.install
deleted file mode 100644
index b0b4594d1..000000000
--- a/core/linux-sun7i/linux-sun7i.install
+++ /dev/null
@@ -1,17 +0,0 @@
-# arg 1:  the new package version
-# arg 2:  the old package version
-
-KERNEL_NAME=-sun7i
-KERNEL_VERSION=3.4.79-6-ARCH
-
-post_install () {
-  # updating module dependencies
-  echo ">>> Updating module dependencies. Please wait ..."
-  depmod ${KERNEL_VERSION}
-}
-
-post_upgrade() {
-  # updating module dependencies
-  echo ">>> Updating module dependencies. Please wait ..."
-  depmod ${KERNEL_VERSION}
-}