summaryrefslogtreecommitdiff
path: root/libre
diff options
context:
space:
mode:
authorcoadde [Márcio Alexandre Silva Delgado] <coadde@parabola.nu>2014-10-23 17:46:51 -0200
committercoadde [Márcio Alexandre Silva Delgado] <coadde@parabola.nu>2014-10-23 17:46:51 -0200
commit653124cdda8e741e9808c0519be38fa297b1ffbe (patch)
tree097e49a57d54e62db7e15ce6cddc50d8831cc607 /libre
parentf105063feb44f95112c3a341eded6e782260ea80 (diff)
parenteaac0d9a7627f835a4e94914d56f40d2a2fd5ce4 (diff)
Merge branch 'master' of ssh://projects.parabola.nu:1863/~git/abslibre
Diffstat (limited to 'libre')
-rw-r--r--libre/acpi_call/PKGBUILD6
-rw-r--r--libre/bbswitch/PKGBUILD6
-rw-r--r--libre/linux-libre-grsec/3.17-rc6-5358c5e4e5-loongson-community.patch (renamed from libre/linux-libre/3.16-7981337ad0-loongson-community.patch)3174
-rw-r--r--libre/linux-libre-grsec/PKGBUILD30
-rw-r--r--libre/linux-libre-grsec/compal-laptop-hwmon-fix.patch14
-rw-r--r--libre/linux-libre-grsec/config.i686203
-rw-r--r--libre/linux-libre-grsec/config.mips64el174
-rw-r--r--libre/linux-libre-grsec/config.x86_64210
-rw-r--r--libre/linux-libre-lts/PKGBUILD4
-rw-r--r--libre/linux-libre/3.17-rc6-5358c5e4e5-loongson-community.patch (renamed from libre/linux-libre-grsec/3.16-7981337ad0-loongson-community.patch)3174
-rw-r--r--libre/linux-libre/PKGBUILD26
-rw-r--r--libre/linux-libre/compal-laptop-hwmon-fix.patch14
-rw-r--r--libre/linux-libre/config.i686201
-rw-r--r--libre/linux-libre/config.mips64el171
-rw-r--r--libre/linux-libre/config.x86_64208
-rw-r--r--libre/lirc/PKGBUILD4
-rw-r--r--libre/tp_smapi/PKGBUILD6
-rw-r--r--libre/vhba-module/PKGBUILD4
18 files changed, 4413 insertions, 3216 deletions
diff --git a/libre/acpi_call/PKGBUILD b/libre/acpi_call/PKGBUILD
index e0f999d1b..a8f98fc8f 100644
--- a/libre/acpi_call/PKGBUILD
+++ b/libre/acpi_call/PKGBUILD
@@ -8,12 +8,12 @@
_kernelname=
if [[ ${_kernelname} == "" ]]; then
- _basekernel=3.16
- _archrel=13
+ _basekernel=3.17
+ _archrel=14
_parabolarel=1
elif [[ ${_kernelname} == -lts ]]; then
_basekernel=3.14
- _archrel=11
+ _archrel=12
_parabolarel=1
elif [[ ${_kernelname} == -grsec ]]; then
_basekernel=3.16
diff --git a/libre/bbswitch/PKGBUILD b/libre/bbswitch/PKGBUILD
index 65b47a05f..35f586329 100644
--- a/libre/bbswitch/PKGBUILD
+++ b/libre/bbswitch/PKGBUILD
@@ -8,12 +8,12 @@
_kernelname=
if [[ ${_kernelname} == "" ]]; then
- _basekernel=3.16
- _archrel=17
+ _basekernel=3.17
+ _archrel=18
_parabolarel=1
elif [[ ${_kernelname} == -lts ]]; then
_basekernel=3.14
- _archrel=2
+ _archrel=3
_parabolarel=1
elif [[ ${_kernelname} == -grsec ]]; then
_basekernel=3.16
diff --git a/libre/linux-libre/3.16-7981337ad0-loongson-community.patch b/libre/linux-libre-grsec/3.17-rc6-5358c5e4e5-loongson-community.patch
index 0c6be8023..3ab783ef6 100644
--- a/libre/linux-libre/3.16-7981337ad0-loongson-community.patch
+++ b/libre/linux-libre-grsec/3.17-rc6-5358c5e4e5-loongson-community.patch
@@ -1,32 +1,8 @@
-diff --git a/Makefile b/Makefile
-index d0901b4..d6f54c7 100644
---- a/Makefile
-+++ b/Makefile
-@@ -303,8 +303,8 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
-
- HOSTCC = gcc
- HOSTCXX = g++
--HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer
--HOSTCXXFLAGS = -O2
-+HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O3 -fomit-frame-pointer
-+HOSTCXXFLAGS = -O3
-
- ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
- HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \
-@@ -618,7 +618,7 @@ KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,)
- ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
- KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,)
- else
--KBUILD_CFLAGS += -O2
-+KBUILD_CFLAGS += -O3
- endif
-
- ifdef CONFIG_READABLE_ASM
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
-index 4e238e6..4e71740 100644
+index 574c430..4395d8a 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -285,7 +285,7 @@ config LASAT
+@@ -288,7 +288,7 @@ config LASAT
config MACH_LOONGSON
bool "Loongson family of machines"
@@ -35,7 +11,7 @@ index 4e238e6..4e71740 100644
help
This enables the support of Loongson family of machines.
-@@ -919,6 +919,60 @@ config CSRC_IOASIC
+@@ -923,6 +923,60 @@ config CSRC_IOASIC
config CSRC_R4K
bool
@@ -96,7 +72,7 @@ index 4e238e6..4e71740 100644
config CSRC_GIC
select MIPS_CM
bool
-@@ -1557,6 +1611,15 @@ config CPU_LOONGSON2
+@@ -1561,6 +1615,15 @@ config CPU_LOONGSON2
bool
select CPU_SUPPORTS_32BIT_KERNEL
select CPU_SUPPORTS_64BIT_KERNEL
@@ -112,7 +88,7 @@ index 4e238e6..4e71740 100644
select CPU_SUPPORTS_HIGHMEM
select CPU_SUPPORTS_HUGEPAGES
-@@ -2201,7 +2264,7 @@ config CPU_SUPPORTS_MSA
+@@ -2208,7 +2271,7 @@ config CPU_SUPPORTS_MSA
config ARCH_FLATMEM_ENABLE
def_bool y
@@ -189,10 +165,10 @@ index 61af6b6..8598044 100644
-clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec}
+clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec,unsstrip}
diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c
-index c00c4dd..f4a656d 100644
+index 31903cf..14da73c 100644
--- a/arch/mips/boot/compressed/decompress.c
+++ b/arch/mips/boot/compressed/decompress.c
-@@ -27,8 +27,13 @@ unsigned long free_mem_end_ptr;
+@@ -28,8 +28,13 @@ unsigned long free_mem_end_ptr;
extern unsigned char __image_begin, __image_end;
/* debug interfaces */
@@ -287,7 +263,7 @@ index 021d017..50aafca 100644
+
#endif /*!_CS5536_MFGPT_H */
diff --git a/arch/mips/include/asm/mach-loongson/loongson.h b/arch/mips/include/asm/mach-loongson/loongson.h
-index f3fd1eb..3fdfe84 100644
+index 92bf76c..e05a016 100644
--- a/arch/mips/include/asm/mach-loongson/loongson.h
+++ b/arch/mips/include/asm/mach-loongson/loongson.h
@@ -46,6 +46,12 @@ static inline void prom_init_uart_base(void)
@@ -304,7 +280,7 @@ index f3fd1eb..3fdfe84 100644
extern void bonito_irqdispatch(void);
extern void __init bonito_irq_init(void);
diff --git a/arch/mips/include/asm/mach-loongson/machine.h b/arch/mips/include/asm/mach-loongson/machine.h
-index 1b1f592..2f6eb79 100644
+index 228e3784..a2faa87 100644
--- a/arch/mips/include/asm/mach-loongson/machine.h
+++ b/arch/mips/include/asm/mach-loongson/machine.h
@@ -24,6 +24,12 @@
@@ -317,7 +293,7 @@ index 1b1f592..2f6eb79 100644
+
+#endif
+
- #ifdef CONFIG_LEMOTE_MACH3A
+ #ifdef CONFIG_LOONGSON_MACH3X
#define LOONGSON_MACHTYPE MACH_LEMOTE_A1101
diff --git a/arch/mips/include/asm/mach-loongson1/clock.h b/arch/mips/include/asm/mach-loongson1/clock.h
@@ -410,6 +386,23 @@ index 0000000..6d5db23
+#define LS1X_INTC_INTEDGE(n) LS1X_INTC_REG(n, 0x14)
+
+#endif /* __ASM_MACH_LOONGSON1_REGS_INTC_H */
+diff --git a/arch/mips/include/asm/sparsemem.h b/arch/mips/include/asm/sparsemem.h
+index b1071c1..8b8e551 100644
+--- a/arch/mips/include/asm/sparsemem.h
++++ b/arch/mips/include/asm/sparsemem.h
+@@ -11,7 +11,11 @@
+ #else
+ # define SECTION_SIZE_BITS 28
+ #endif
+-#define MAX_PHYSMEM_BITS 48
++#if !defined(CONFIG_MACH_LOONGSON) || !defined(CONFIG_CPU_LOONGSON2) /* Commit c461731836 broke Loongson2. */
++# define MAX_PHYSMEM_BITS 48
++#else
++# define MAX_PHYSMEM_BITS 35
++#endif
+
+ #endif /* CONFIG_SPARSEMEM */
+ #endif /* _MIPS_SPARSEMEM_H */
diff --git a/arch/mips/include/asm/timex.h b/arch/mips/include/asm/timex.h
index b05bb70..44c9a69 100644
--- a/arch/mips/include/asm/timex.h
@@ -458,7 +451,7 @@ index 4bfdb9d..f57d892 100644
msub_s_op = 0x28, msub_d_op = 0x29,
msub_e_op = 0x2a, nmadd_s_op = 0x30,
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
-index f1343cc..1320561 100644
+index 9e10d11..e480102 100644
--- a/arch/mips/kernel/scall64-o32.S
+++ b/arch/mips/kernel/scall64-o32.S
@@ -26,6 +26,18 @@
@@ -517,7 +510,7 @@ index eeddc58..d7bec00 100644
obj-$(CONFIG_PCI) += iomap-pci.o
diff --git a/arch/mips/loongson/Kconfig b/arch/mips/loongson/Kconfig
-index e6a86cc..df57920 100644
+index 1b91fc6a..aa1fd8e 100644
--- a/arch/mips/loongson/Kconfig
+++ b/arch/mips/loongson/Kconfig
@@ -32,12 +32,12 @@ config LEMOTE_FULOONG2E
@@ -581,10 +574,10 @@ index e6a86cc..df57920 100644
+ help
+ Dexxon gdium netbook based on Loongson 2F and SM502.
+
- config LEMOTE_MACH3A
- bool "Lemote Loongson 3A family machines"
+ config LOONGSON_MACH3X
+ bool "Generic Loongson 3 family machines"
select ARCH_SPARSEMEM_ENABLE
-@@ -134,6 +158,24 @@ config LOONGSON_MC146818
+@@ -135,6 +159,24 @@ config LOONGSON_MC146818
bool
default n
@@ -627,7 +620,7 @@ index 7429994..63214c8 100644
#
diff --git a/arch/mips/loongson/Platform b/arch/mips/loongson/Platform
-index 6205372..32dd006 100644
+index 0ac20eb..cd957dd 100644
--- a/arch/mips/loongson/Platform
+++ b/arch/mips/loongson/Platform
@@ -30,4 +30,5 @@ platform-$(CONFIG_MACH_LOONGSON) += loongson/
@@ -635,7 +628,7 @@ index 6205372..32dd006 100644
load-$(CONFIG_LEMOTE_FULOONG2E) += 0xffffffff80100000
load-$(CONFIG_LEMOTE_MACH2F) += 0xffffffff80200000
+load-$(CONFIG_DEXXON_GDIUM) += 0xffffffff80200000
- load-$(CONFIG_CPU_LOONGSON3) += 0xffffffff80200000
+ load-$(CONFIG_LOONGSON_MACH3X) += 0xffffffff80200000
diff --git a/arch/mips/loongson/common/cmdline.c b/arch/mips/loongson/common/cmdline.c
index 72fed00..96d5919 100644
--- a/arch/mips/loongson/common/cmdline.c
@@ -688,6 +681,18 @@ index 72fed00..96d5919 100644
+ /* copy arcs_cmdline into loongson_cmdline */
+ strncpy(loongson_cmdline, arcs_cmdline, COMMAND_LINE_SIZE);
}
+diff --git a/arch/mips/loongson/common/env.c b/arch/mips/loongson/common/env.c
+index f152285..c7671ef 100644
+--- a/arch/mips/loongson/common/env.c
++++ b/arch/mips/loongson/common/env.c
+@@ -28,6 +28,7 @@ struct efi_memory_map_loongson *loongson_memmap;
+ struct loongson_system_configuration loongson_sysconf;
+
+ u64 loongson_chipcfg[MAX_PACKAGES] = {0xffffffffbfc00180};
++EXPORT_SYMBOL_GPL(loongson_chipcfg);
+ u64 loongson_freqctrl[MAX_PACKAGES];
+
+ unsigned long long smp_group[4];
diff --git a/arch/mips/loongson/gdium/Makefile b/arch/mips/loongson/gdium/Makefile
new file mode 100644
index 0000000..f3f4f51
@@ -1654,6 +1659,30 @@ index 4f9eaa3..f945bd7a 100644
#
# Suspend Support
+diff --git a/arch/mips/loongson/lemote-2f/clock.c b/arch/mips/loongson/lemote-2f/clock.c
+index a217061..462e34d 100644
+--- a/arch/mips/loongson/lemote-2f/clock.c
++++ b/arch/mips/loongson/lemote-2f/clock.c
+@@ -91,6 +91,7 @@ EXPORT_SYMBOL(clk_put);
+
+ int clk_set_rate(struct clk *clk, unsigned long rate)
+ {
++ unsigned int rate_khz = rate / 1000;
+ struct cpufreq_frequency_table *pos;
+ int ret = 0;
+ int regval;
+@@ -107,9 +108,9 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
+ propagate_rate(clk);
+
+ cpufreq_for_each_valid_entry(pos, loongson2_clockmod_table)
+- if (rate == pos->frequency)
++ if (rate_khz == pos->frequency)
+ break;
+- if (rate != pos->frequency)
++ if (rate_khz != pos->frequency)
+ return -ENOTSUPP;
+
+ clk->rate = rate;
diff --git a/arch/mips/loongson/lemote-2f/platform.c b/arch/mips/loongson/lemote-2f/platform.c
new file mode 100644
index 0000000..5316360
@@ -1709,7 +1738,7 @@ index 0000000..5316360
+
+arch_initcall(lemote2f_platform_init);
diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c
-index 736c17a..d6b6cac 100644
+index bf0fc6b..c9f2838 100644
--- a/arch/mips/math-emu/cp1emu.c
+++ b/arch/mips/math-emu/cp1emu.c
@@ -7,6 +7,9 @@
@@ -2098,7 +2127,7 @@ index 736c17a..d6b6cac 100644
return SIGILL;
}
diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile
-index ff8a553..a747755 100644
+index 6523d55..094f034 100644
--- a/arch/mips/pci/Makefile
+++ b/arch/mips/pci/Makefile
@@ -29,6 +29,7 @@ obj-$(CONFIG_LASAT) += pci-lasat.o
@@ -2106,7 +2135,7 @@ index ff8a553..a747755 100644
obj-$(CONFIG_LEMOTE_FULOONG2E) += fixup-fuloong2e.o ops-loongson2.o
obj-$(CONFIG_LEMOTE_MACH2F) += fixup-lemote2f.o ops-loongson2.o
+obj-$(CONFIG_DEXXON_GDIUM) += fixup-gdium.o ops-loongson2.o
- obj-$(CONFIG_LEMOTE_MACH3A) += fixup-loongson3.o ops-loongson3.o
+ obj-$(CONFIG_LOONGSON_MACH3X) += fixup-loongson3.o ops-loongson3.o
obj-$(CONFIG_MIPS_MALTA) += fixup-malta.o pci-malta.o
obj-$(CONFIG_PMC_MSP7120_GW) += fixup-pmcmsp.o ops-pmcmsp.o
diff --git a/arch/mips/pci/fixup-gdium.c b/arch/mips/pci/fixup-gdium.c
@@ -2206,22 +2235,65 @@ index 0000000..b296220
+ gdium_usb_host_fixup);
+#endif
diff --git a/arch/mips/power/hibernate.S b/arch/mips/power/hibernate.S
-index 32a7c82..7e0277a 100644
+index 32a7c82..3a89502 100644
--- a/arch/mips/power/hibernate.S
+++ b/arch/mips/power/hibernate.S
-@@ -43,7 +43,6 @@ LEAF(swsusp_arch_resume)
+@@ -43,7 +43,9 @@ LEAF(swsusp_arch_resume)
bne t1, t3, 1b
PTR_L t0, PBE_NEXT(t0)
bnez t0, 0b
-- jal local_flush_tlb_all /* Avoid TLB mismatch after kernel resume */
++#if !defined(CONFIG_MACH_LOONGSON) || !defined(CONFIG_CPU_LOONGSON2) /* Commit 771004298d broke Loongson2. */
+ jal local_flush_tlb_all /* Avoid TLB mismatch after kernel resume */
++#endif
PTR_LA t0, saved_regs
PTR_L ra, PT_R31(t0)
PTR_L sp, PT_R29(t0)
+diff --git a/drivers/cpufreq/loongson2_cpufreq.c b/drivers/cpufreq/loongson2_cpufreq.c
+index 9fa1772..b17bbe3 100644
+--- a/drivers/cpufreq/loongson2_cpufreq.c
++++ b/drivers/cpufreq/loongson2_cpufreq.c
+@@ -162,20 +162,32 @@ static int __init cpufreq_init(void)
+ /* Register platform stuff */
+ ret = platform_driver_register(&platform_driver);
+ if (ret)
+- return ret;
++ goto err_return;
+
+ pr_info("cpufreq: Loongson-2F CPU frequency driver.\n");
+
+- cpufreq_register_notifier(&loongson2_cpufreq_notifier_block,
+- CPUFREQ_TRANSITION_NOTIFIER);
++ ret = cpufreq_register_notifier(&loongson2_cpufreq_notifier_block,
++ CPUFREQ_TRANSITION_NOTIFIER);
++ if (ret)
++ goto err_platform_driver_unregister;
+
+ ret = cpufreq_register_driver(&loongson2_cpufreq_driver);
++ if (ret)
++ goto err_cpufreq_unregister_notifier;
+
+- if (!ret && !nowait) {
++ if (!nowait) {
+ saved_cpu_wait = cpu_wait;
+ cpu_wait = loongson2_cpu_wait;
+ }
+
++ return 0;
++
++ err_cpufreq_unregister_notifier:
++ cpufreq_unregister_notifier(&loongson2_cpufreq_notifier_block,
++ CPUFREQ_TRANSITION_NOTIFIER);
++ err_platform_driver_unregister:
++ platform_driver_unregister(&platform_driver);
++ err_return:
+ return ret;
+ }
+
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index 5e79c6a..3f08f0d 100644
+index c18d5d7..453e0db 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
-@@ -808,6 +808,13 @@ config HID_ZYDACRON
+@@ -829,6 +829,13 @@ config HID_ZYDACRON
---help---
Support for Zydacron remote control.
@@ -2236,12 +2308,12 @@ index 5e79c6a..3f08f0d 100644
tristate "HID Sensors framework support"
depends on HID && HAS_IOMEM
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
-index a6fa6ba..cf8793ef 100644
+index 4dbac7f..2f79455 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
-@@ -117,6 +117,7 @@ obj-$(CONFIG_HID_ZEROPLUS) += hid-zpff.o
- obj-$(CONFIG_HID_ZYDACRON) += hid-zydacron.o
- obj-$(CONFIG_HID_WACOM) += hid-wacom.o
+@@ -120,6 +120,7 @@ obj-$(CONFIG_HID_ZYDACRON) += hid-zydacron.o
+ wacom-objs := wacom_wac.o wacom_sys.o
+ obj-$(CONFIG_HID_WACOM) += wacom.o
obj-$(CONFIG_HID_WALTOP) += hid-waltop.o
+obj-$(CONFIG_HID_GDIUM) += hid-gdium.o
obj-$(CONFIG_HID_WIIMOTE) += hid-wiimote.o
@@ -2464,10 +2536,10 @@ index 0000000..67cc095
+MODULE_LICENSE("GPL");
+
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
-index 48b66bb..f5b5e46 100644
+index 25cd674..41f58f7 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
-@@ -980,6 +980,9 @@
+@@ -984,6 +984,9 @@
#define USB_VENDOR_ID_ZYTRONIC 0x14c8
#define USB_DEVICE_ID_ZYTRONIC_ZXY100 0x0005
@@ -9284,10 +9356,10 @@ index 0000000..c285a67
+MODULE_DESCRIPTION("YeeLoong laptop driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
-index 0754f5c7..ff7475d 100644
+index a168e96..5e820df5 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
-@@ -680,6 +680,7 @@ comment "Platform RTC drivers"
+@@ -688,6 +688,7 @@ comment "Platform RTC drivers"
config RTC_DRV_CMOS
tristate "PC-style 'CMOS'"
depends on X86 || ARM || M32R || PPC || MIPS || SPARC64
@@ -9295,175 +9367,1742 @@ index 0754f5c7..ff7475d 100644
default y if X86
help
Say "yes" here to get direct support for the real time clock
-diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
-index 4f38fc0..f57367c 100644
---- a/drivers/staging/Kconfig
-+++ b/drivers/staging/Kconfig
-@@ -80,6 +80,8 @@ source "drivers/staging/wlags49_h2/Kconfig"
+diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
+index 2f3aceb..6647c3f 100644
+--- a/drivers/usb/host/pci-quirks.c
++++ b/drivers/usb/host/pci-quirks.c
+@@ -454,6 +454,7 @@ void usb_amd_dev_put(void)
+ }
+ EXPORT_SYMBOL_GPL(usb_amd_dev_put);
+
++#if defined(CONFIG_USB_UHCI_HCD) || defined(CONFIG_USB_UHCI_HCD_MODULE)
+ /*
+ * Make sure the controller is completely inactive, unable to
+ * generate interrupts or do DMA.
+@@ -561,12 +562,16 @@ static void quirk_usb_handoff_uhci(struct pci_dev *pdev)
+ if (base)
+ uhci_check_and_reset_hc(pdev, base);
+ }
++#else
++#define quirk_usb_handoff_uhci(x) do { } while (0)
++#endif /* CONFIG_USB_UHCI_HCD* */
+
+ static int mmio_resource_enabled(struct pci_dev *pdev, int idx)
+ {
+ return pci_resource_start(pdev, idx) && mmio_enabled(pdev);
+ }
+
++#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
+ static void quirk_usb_handoff_ohci(struct pci_dev *pdev)
+ {
+ void __iomem *base;
+@@ -633,7 +638,11 @@ static void quirk_usb_handoff_ohci(struct pci_dev *pdev)
+ /* Now the controller is safely in SUSPEND and nothing can wake it up */
+ iounmap(base);
+ }
++#else
++#define quirk_usb_handoff_ohci(x) do { } while(0)
++#endif /* CONFIG_USB_OHCI_HCD* */
+
++#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE)
+ static const struct dmi_system_id ehci_dmi_nohandoff_table[] = {
+ {
+ /* Pegatron Lucid (ExoPC) */
+@@ -806,6 +815,9 @@ static void quirk_usb_disable_ehci(struct pci_dev *pdev)
+
+ iounmap(base);
+ }
++#else
++#define quirk_usb_disable_ehci(x) do { } while (0)
++#endif /* CONFIG_USB_EHCI_HCD* */
+
+ /*
+ * handshake - spin reading a register until handshake completes
+@@ -945,6 +957,7 @@ void usb_disable_xhci_ports(struct pci_dev *xhci_pdev)
+ }
+ EXPORT_SYMBOL_GPL(usb_disable_xhci_ports);
+
++#if defined(CONFIG_USB_XHCI_HCD) || defined(CONFIG_USB_XHCI_HCD_MODULE)
+ /**
+ * PCI Quirks for xHCI.
+ *
+@@ -1052,6 +1065,9 @@ hc_init:
+
+ iounmap(base);
+ }
++#else
++#define quirk_usb_handoff_xhci(x) do { } while (0)
++#endif /* CONFIG_USB_UHCI_HCD* */
+
+ static void quirk_usb_early_handoff(struct pci_dev *pdev)
+ {
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index 54a8120..2ca4c23 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -79,6 +79,9 @@ static void option_instat_callback(struct urb *urb);
+ #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100
+ #define OPTION_PRODUCT_GTM380_MODEM 0x7201
- source "drivers/staging/wlags49_h25/Kconfig"
++#define HUAWO_VENDOR_ID 0x21F5
++#define HUAWO_PRODUCT_E1621 0x2008
++
+ #define HUAWEI_VENDOR_ID 0x12D1
+ #define HUAWEI_PRODUCT_E173 0x140C
+ #define HUAWEI_PRODUCT_E1750 0x1406
+@@ -626,6 +629,7 @@ static const struct usb_device_id option_ids[] = {
+ { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) },
+ { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42),
+ .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
++ { USB_DEVICE(HUAWO_VENDOR_ID, HUAWO_PRODUCT_E1621) }, /* QUANTA 6500 chips, Unicom extensive use of this card */
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c1f, USB_CLASS_COMM, 0x02, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) },
+diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
+index 8bf495f..f6a15b6 100644
+--- a/drivers/video/Kconfig
++++ b/drivers/video/Kconfig
+@@ -36,6 +36,12 @@ config VGASTATE
+ tristate
+ default n
-+source "drivers/staging/sm7xxfb/Kconfig"
++config VIDEO_OUTPUT_CONTROL
++ tristate "Lowlevel video output switch controls"
++ help
++ This framework adds support for low-level control of the video
++ output switch.
+
- source "drivers/staging/crystalhd/Kconfig"
+ config VIDEOMODE_HELPERS
+ bool
- source "drivers/staging/cxt1e1/Kconfig"
-diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
-index 1e97ad2..65a1ff0 100644
---- a/drivers/staging/Makefile
-+++ b/drivers/staging/Makefile
-@@ -34,6 +34,7 @@ obj-$(CONFIG_DX_SEP) += sep/
- obj-$(CONFIG_IIO) += iio/
- obj-$(CONFIG_WLAGS49_H2) += wlags49_h2/
- obj-$(CONFIG_WLAGS49_H25) += wlags49_h25/
-+obj-$(CONFIG_FB_SM7XX) += sm7xxfb/
- obj-$(CONFIG_CRYSTALHD) += crystalhd/
- obj-$(CONFIG_CXT1E1) += cxt1e1/
- obj-$(CONFIG_FB_XGI) += xgifb/
-diff --git a/drivers/staging/sm7xxfb/Kconfig b/drivers/staging/sm7xxfb/Kconfig
-new file mode 100644
-index 0000000..e2922ae
---- /dev/null
-+++ b/drivers/staging/sm7xxfb/Kconfig
-@@ -0,0 +1,13 @@
-+config FB_SM7XX
-+ tristate "Silicon Motion SM7XX framebuffer support"
+diff --git a/drivers/video/Makefile b/drivers/video/Makefile
+index 9ad3c17..3d869d9 100644
+--- a/drivers/video/Makefile
++++ b/drivers/video/Makefile
+@@ -7,6 +7,8 @@ obj-y += backlight/
+
+ obj-y += fbdev/
+
++#video output switch sysfs driver
++obj-$(CONFIG_VIDEO_OUTPUT_CONTROL) += output.o
+ obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o
+ ifeq ($(CONFIG_OF),y)
+ obj-$(CONFIG_VIDEOMODE_HELPERS) += of_display_timing.o of_videomode.o
+diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
+index e911b9c..2d522e8 100644
+--- a/drivers/video/fbdev/Kconfig
++++ b/drivers/video/fbdev/Kconfig
+@@ -2465,6 +2465,19 @@ config FB_SIMPLE
+ Configuration re: surface address, size, and format must be provided
+ through device tree, or plain old platform data.
+
++config FB_SM712
++ tristate "Silicon Motion SM712 framebuffer support"
+ depends on FB && PCI
+ select FB_CFB_FILLRECT
+ select FB_CFB_COPYAREA
+ select FB_CFB_IMAGEBLIT
+ help
-+ Frame buffer driver for the Silicon Motion SM710, SM712, SM721
-+ and SM722 chips.
++ Frame buffer driver for the Silicon Motion SM712 chip.
+
+ This driver is also available as a module. The module will be
-+ called sm7xxfb. If you want to compile it as a module, say M
++ called sm712fb. If you want to compile it as a module, say M
+ here and read <file:Documentation/kbuild/modules.txt>.
-diff --git a/drivers/staging/sm7xxfb/Makefile b/drivers/staging/sm7xxfb/Makefile
++
+ source "drivers/video/fbdev/omap/Kconfig"
+ source "drivers/video/fbdev/omap2/Kconfig"
+ source "drivers/video/fbdev/exynos/Kconfig"
+diff --git a/drivers/video/fbdev/Makefile b/drivers/video/fbdev/Makefile
+index 1979aff..9b694f9 100644
+--- a/drivers/video/fbdev/Makefile
++++ b/drivers/video/fbdev/Makefile
+@@ -114,6 +114,7 @@ obj-$(CONFIG_FB_COBALT) += cobalt_lcdfb.o
+ obj-$(CONFIG_FB_IBM_GXT4500) += gxt4500.o
+ obj-$(CONFIG_FB_PS3) += ps3fb.o
+ obj-$(CONFIG_FB_SM501) += sm501fb.o
++obj-$(CONFIG_FB_SM712) += sm712fb/
+ obj-$(CONFIG_FB_UDL) += udlfb.o
+ obj-$(CONFIG_FB_SMSCUFX) += smscufx.o
+ obj-$(CONFIG_FB_XILINX) += xilinxfb.o
+diff --git a/drivers/video/fbdev/sm712fb/Makefile b/drivers/video/fbdev/sm712fb/Makefile
new file mode 100644
-index 0000000..48f471c
+index 0000000..9bf3519
--- /dev/null
-+++ b/drivers/staging/sm7xxfb/Makefile
-@@ -0,0 +1 @@
-+obj-$(CONFIG_FB_SM7XX) += sm7xxfb.o
-diff --git a/drivers/staging/sm7xxfb/TODO b/drivers/staging/sm7xxfb/TODO
++++ b/drivers/video/fbdev/sm712fb/Makefile
+@@ -0,0 +1,3 @@
++obj-$(CONFIG_FB_SM712) += sm712fb.o
++
++sm712fb-objs := sm712fb_drv.o sm712fb_accel.o
+diff --git a/drivers/video/fbdev/sm712fb/TODO b/drivers/video/fbdev/sm712fb/TODO
new file mode 100644
-index 0000000..1fcead5
+index 0000000..dcfd4e7
--- /dev/null
-+++ b/drivers/staging/sm7xxfb/TODO
-@@ -0,0 +1,9 @@
++++ b/drivers/video/fbdev/sm712fb/TODO
+@@ -0,0 +1,7 @@
+TODO:
+- Dual head support
-+- 2D acceleration support
-+- use kernel coding style
-+- refine the code and remove unused code
-+- move it to drivers/video/sm7xxfb.c
++- refine the code, convert more registers magic numbers to macros
++- Does it really works on Big Endian machines?
+
+Please send any patches to Greg Kroah-Hartman <greg@kroah.com> and
-+Teddy Wang <teddy.wang@siliconmotion.com.cn>.
-diff --git a/drivers/staging/sm7xxfb/sm7xx.h b/drivers/staging/sm7xxfb/sm7xx.h
++Tom Li <biergaizi@member.fsf.org>.
+diff --git a/drivers/video/fbdev/sm712fb/sm712fb_accel.c b/drivers/video/fbdev/sm712fb/sm712fb_accel.c
new file mode 100644
-index 0000000..8599861
+index 0000000..12fce1f
--- /dev/null
-+++ b/drivers/staging/sm7xxfb/sm7xx.h
-@@ -0,0 +1,779 @@
++++ b/drivers/video/fbdev/sm712fb/sm712fb_accel.c
+@@ -0,0 +1,246 @@
+/*
+ * Silicon Motion SM712 frame buffer device
+ *
+ * Copyright (C) 2006 Silicon Motion Technology Corp.
-+ * Authors: Ge Wang, gewang@siliconmotion.com
-+ * Boyod boyod.yang@siliconmotion.com.cn
++ * Authors: Ge Wang, gewang@siliconmotion.com
++ * Boyod boyod.yang@siliconmotion.com.cn
+ *
+ * Copyright (C) 2009 Lemote, Inc.
-+ * Author: Wu Zhangjin, wuzhangjin@gmail.com
++ * Author: Wu Zhangjin, wuzhangjin@gmail.com
++ *
++ * Copyright (C) 2011 Igalia, S.L.
++ * Author: Javier M. Mellid <jmunhoz@igalia.com>
++ *
++ * Copyright (C) 2014 Tom Li.
++ * Author: Tom Li (Yifeng Li) <biergaizi@member.fsf.org>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * Framebuffer driver for Silicon Motion SM712 chip
++ */
++
++#include <linux/fb.h>
++#include <linux/screen_info.h>
++#include <linux/delay.h>
++
++#include "sm712fb_drv.h"
++#include "sm712fb_accel.h"
++
++static inline u32 bytes_to_dword(const u8 *bytes, int length)
++{
++ u32 dword = 0;
++
++ switch (length) {
++ case 4:
++#ifdef __BIG_ENDIAN
++ dword += bytes[3];
++#else
++ dword += bytes[3] << 24;
++#endif
++ case 3:
++#ifdef __BIG_ENDIAN
++ dword += bytes[2] << 8;
++#else
++ dword += bytes[2] << 16;
++#endif
++ case 2:
++#ifdef __BIG_ENDIAN
++ dword += bytes[1] << 16;
++#else
++ dword += bytes[1] << 8;
++#endif
++ case 1:
++#ifdef __BIG_ENDIAN
++ dword += bytes[0] << 24;
++#else
++ dword += bytes[0];
++#endif
++ }
++ return dword;
++}
++
++int sm712fb_init_accel(struct sm712fb_info *fb)
++{
++ u8 reg;
++
++ /* reset the 2D engine */
++ sm712_write_seq(fb, 0x21, sm712_read_seq(fb, 0x21) & 0xf8);
++ reg = sm712_read_seq(fb, 0x15);
++ sm712_write_seq(fb, 0x15, reg | 0x30);
++ sm712_write_seq(fb, 0x15, reg);
++
++ if (sm712fb_wait(fb) != 0)
++ return -1;
++
++ sm712_write_dpr(fb, DPR_CROP_TOPLEFT_COORDS, DPR_COORDS(0, 0));
++
++ /* same width for DPR_PITCH and DPR_SRC_WINDOW */
++ sm712_write_dpr(fb, DPR_PITCH,
++ DPR_COORDS(fb->fb.var.xres, fb->fb.var.xres));
++ sm712_write_dpr(fb, DPR_SRC_WINDOW,
++ DPR_COORDS(fb->fb.var.xres, fb->fb.var.xres));
++
++ sm712_write_dpr(fb, DPR_BYTE_BIT_MASK, 0xffffffff);
++ sm712_write_dpr(fb, DPR_COLOR_COMPARE_MASK, 0);
++ sm712_write_dpr(fb, DPR_COLOR_COMPARE, 0);
++ sm712_write_dpr(fb, DPR_SRC_BASE, 0);
++ sm712_write_dpr(fb, DPR_DST_BASE, 0);
++ sm712_read_dpr(fb, DPR_DST_BASE);
++
++ return 0;
++}
++
++int sm712fb_wait(struct sm712fb_info *fb)
++{
++ int i;
++ u8 reg;
++
++ for (i = 0; i < 10000; i++) {
++ reg = sm712_read_seq(fb, SCR_DE_STATUS);
++ if ((reg & SCR_DE_STATUS_MASK) == SCR_DE_ENGINE_IDLE)
++ return 0;
++ udelay(1);
++ }
++ return -EBUSY;
++}
++
++void sm712fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
++{
++ u32 width = rect->width, height = rect->height;
++ u32 dx = rect->dx, dy = rect->dy;
++ u32 color;
++
++ struct sm712fb_info *sfb = info->par;
++
++ if (unlikely(info->state != FBINFO_STATE_RUNNING))
++ return;
++ if ((rect->dx >= info->var.xres_virtual) ||
++ (rect->dy >= info->var.yres_virtual))
++ return;
++
++ if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
++ info->fix.visual == FB_VISUAL_DIRECTCOLOR)
++ color = ((u32 *) (info->pseudo_palette))[rect->color];
++ else
++ color = rect->color;
++
++ sm712_write_dpr(sfb, DPR_FG_COLOR, color);
++ sm712_write_dpr(sfb, DPR_DST_COORDS, DPR_COORDS(dx, dy));
++ sm712_write_dpr(sfb, DPR_SPAN_COORDS, DPR_COORDS(width, height));
++ sm712_write_dpr(sfb, DPR_DE_CTRL, DE_CTRL_START | DE_CTRL_ROP_ENABLE |
++ (DE_CTRL_COMMAND_SOLIDFILL << DE_CTRL_COMMAND_SHIFT) |
++ (DE_CTRL_ROP_SRC << DE_CTRL_ROP_SHIFT));
++ sm712_read_dpr(sfb, DPR_DE_CTRL);
++ sm712fb_wait(sfb);
++}
++
++void sm712fb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
++{
++ u32 sx = area->sx, sy = area->sy;
++ u32 dx = area->dx, dy = area->dy;
++ u32 height = area->height, width = area->width;
++ u32 direction;
++
++ struct sm712fb_info *sfb = info->par;
++
++ if (unlikely(info->state != FBINFO_STATE_RUNNING))
++ return;
++ if ((sx >= info->var.xres_virtual) || (sy >= info->var.yres_virtual))
++ return;
++
++ if (sy < dy || (sy == dy && sx <= dx)) {
++ sx += width - 1;
++ dx += width - 1;
++ sy += height - 1;
++ dy += height - 1;
++ direction = DE_CTRL_RTOL;
++ } else
++ direction = 0;
++
++ sm712_write_dpr(sfb, DPR_SRC_COORDS, DPR_COORDS(sx, sy));
++ sm712_write_dpr(sfb, DPR_DST_COORDS, DPR_COORDS(dx, dy));
++ sm712_write_dpr(sfb, DPR_SPAN_COORDS, DPR_COORDS(width, height));
++ sm712_write_dpr(sfb, DPR_DE_CTRL,
++ DE_CTRL_START | DE_CTRL_ROP_ENABLE | direction |
++ (DE_CTRL_COMMAND_BITBLT << DE_CTRL_COMMAND_SHIFT) |
++ (DE_CTRL_ROP_SRC << DE_CTRL_ROP_SHIFT));
++ sm712_read_dpr(sfb, DPR_DE_CTRL);
++ sm712fb_wait(sfb);
++}
++
++void sm712fb_imageblit(struct fb_info *info, const struct fb_image *image)
++{
++ u32 dx = image->dx, dy = image->dy;
++ u32 width = image->width, height = image->height;
++ u32 fg_color, bg_color;
++
++ struct sm712fb_info *sfb = info->par;
++
++ u32 imgidx = 0;
++ u32 line = image->width >> 3;
++
++ int i, j;
++ u32 total_bytes, total_dwords, remain_bytes;
++
++ if (unlikely(info->state != FBINFO_STATE_RUNNING))
++ return;
++ if ((image->dx >= info->var.xres_virtual) ||
++ (image->dy >= info->var.yres_virtual))
++ return;
++
++ if (unlikely(image->depth != 1)) {
++ /* unsupported depth, fallback to draw Tux */
++ cfb_imageblit(info, image);
++ return;
++ }
++
++ if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
++ info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
++ fg_color = ((u32 *) (info->pseudo_palette))[image->fg_color];
++ bg_color = ((u32 *) (info->pseudo_palette))[image->bg_color];
++ } else {
++ fg_color = image->fg_color;
++ bg_color = image->bg_color;
++ }
++
++ /* total bytes we need to write */
++ total_bytes = (width + 7) / 8;
++
++ /* split the bytes into dwords and remainder bytes */
++ total_dwords = (total_bytes & ~3) / 4;
++ remain_bytes = total_bytes & 3;
++
++ sm712_write_dpr(sfb, DPR_SRC_COORDS, 0);
++ sm712_write_dpr(sfb, DPR_DST_COORDS, DPR_COORDS(dx, dy));
++ sm712_write_dpr(sfb, DPR_SPAN_COORDS, DPR_COORDS(width, height));
++ sm712_write_dpr(sfb, DPR_FG_COLOR, fg_color);
++ sm712_write_dpr(sfb, DPR_BG_COLOR, bg_color);
++
++ sm712_write_dpr(sfb, DPR_DE_CTRL, DE_CTRL_START | DE_CTRL_ROP_ENABLE |
++ (DE_CTRL_COMMAND_HOST_WRITE << DE_CTRL_COMMAND_SHIFT) |
++ (DE_CTRL_HOST_MONO << DE_CTRL_HOST_SHIFT) |
++ (DE_CTRL_ROP_SRC << DE_CTRL_ROP_SHIFT));
++
++ for (i = 0; i < height; i++) {
++ /* cast bytes data into dwords and write to the dataport */
++ for (j = 0; j < total_dwords; j++) {
++ sm712_write_dataport(sfb,
++ bytes_to_dword(&image->
++ data[imgidx] +
++ j * 4, 4));
++ }
++
++ if (remain_bytes) {
++ sm712_write_dataport(sfb,
++ bytes_to_dword(&image->
++ data[imgidx] +
++ (total_dwords * 4),
++ remain_bytes));
++ }
++ imgidx += line;
++ }
++ sm712_read_dpr(sfb, DPR_DE_CTRL);
++ sm712fb_wait(sfb);
++}
+diff --git a/drivers/video/fbdev/sm712fb/sm712fb_accel.h b/drivers/video/fbdev/sm712fb/sm712fb_accel.h
+new file mode 100644
+index 0000000..6f79177
+--- /dev/null
++++ b/drivers/video/fbdev/sm712fb/sm712fb_accel.h
+@@ -0,0 +1,33 @@
++/*
++ * Silicon Motion SM712 frame buffer device
++ *
++ * Copyright (C) 2006 Silicon Motion Technology Corp.
++ * Authors: Ge Wang, gewang@siliconmotion.com
++ * Boyod boyod.yang@siliconmotion.com.cn
++ *
++ * Copyright (C) 2009 Lemote, Inc.
++ * Author: Wu Zhangjin, wuzhangjin@gmail.com
++ *
++ * Copyright (C) 2011 Igalia, S.L.
++ * Author: Javier M. Mellid <jmunhoz@igalia.com>
++ *
++ * Copyright (C) 2014 Tom Li.
++ * Author: Tom Li (Yifeng Li) <biergaizi@member.fsf.org>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * Framebuffer driver for Silicon Motion SM712 chip
++ */
++
++#ifndef _SM712FB_ACCEL_H
++#define _SM712FB_ACCEL_H
++
++int sm712fb_init_accel(struct sm712fb_info *fb);
++int sm712fb_wait(struct sm712fb_info *fb);
++void sm712fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
++void sm712fb_copyarea(struct fb_info *info, const struct fb_copyarea *area);
++void sm712fb_imageblit(struct fb_info *info, const struct fb_image *image);
++
++#endif
+diff --git a/drivers/video/fbdev/sm712fb/sm712fb_drv.c b/drivers/video/fbdev/sm712fb/sm712fb_drv.c
+new file mode 100644
+index 0000000..7f7cd4f
+--- /dev/null
++++ b/drivers/video/fbdev/sm712fb/sm712fb_drv.c
+@@ -0,0 +1,1022 @@
++/*
++ * Silicon Motion SM712 frame buffer device
++ *
++ * Copyright (C) 2006 Silicon Motion Technology Corp.
++ * Authors: Ge Wang, gewang@siliconmotion.com
++ * Boyod boyod.yang@siliconmotion.com.cn
++ *
++ * Copyright (C) 2009 Lemote, Inc.
++ * Author: Wu Zhangjin, wuzhangjin@gmail.com
++ *
++ * Copyright (C) 2011 Igalia, S.L.
++ * Author: Javier M. Mellid <jmunhoz@igalia.com>
++ *
++ * Copyright (C) 2014 Tom Li.
++ * Author: Tom Li (Yifeng Li) <biergaizi@member.fsf.org>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * Framebuffer driver for Silicon Motion SM712 chip
++ */
++
++#include <linux/io.h>
++#include <linux/fb.h>
++#include <linux/pci.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/uaccess.h>
++#include <linux/module.h>
++#include <linux/console.h>
++#include <linux/screen_info.h>
++
++#ifdef CONFIG_PM
++#include <linux/pm.h>
++#endif
++
++#include "sm712fb_drv.h"
++#include "sm712fb_accel.h"
++#include "sm712fb_modedb.h"
++
++static struct fb_var_screeninfo sm712fb_var = {
++ .xres = 1024,
++ .yres = 600,
++ .xres_virtual = 1024,
++ .yres_virtual = 600,
++ .bits_per_pixel = 16,
++ .red = {16, 8, 0},
++ .green = {8, 8, 0},
++ .blue = {0, 8, 0},
++ .activate = FB_ACTIVATE_NOW,
++ .height = -1,
++ .width = -1,
++ .vmode = FB_VMODE_NONINTERLACED,
++ .nonstd = 0,
++ .accel_flags = FB_ACCELF_TEXT,
++};
++
++static struct fb_fix_screeninfo sm712fb_fix = {
++ .id = "smXXXfb",
++ .type = FB_TYPE_PACKED_PIXELS,
++ .visual = FB_VISUAL_TRUECOLOR,
++ .line_length = 800 * 3,
++ .accel = FB_ACCEL_SMI_LYNX,
++ .type_aux = 0,
++ .xpanstep = 0,
++ .ypanstep = 0,
++ .ywrapstep = 0,
++};
++
++struct vesa_mode {
++ char index[6];
++ u16 lfb_width;
++ u16 lfb_height;
++ u16 lfb_depth;
++};
++
++static bool accel = 1;
++
++static struct vesa_mode vesa_mode_table[] = {
++ {"0x301", 640, 480, 8},
++ {"0x303", 800, 600, 8},
++ {"0x305", 1024, 768, 8},
++ {"0x307", 1280, 1024, 8},
++
++ {"0x311", 640, 480, 16},
++ {"0x314", 800, 600, 16},
++ {"0x317", 1024, 768, 16},
++ {"0x31A", 1280, 1024, 16},
++
++ {"0x312", 640, 480, 24},
++ {"0x315", 800, 600, 24},
++ {"0x318", 1024, 768, 24},
++ {"0x31B", 1280, 1024, 24},
++};
++
++struct screen_info sm712_scr_info;
++
++static int sm712fb_setup(char *options)
++{
++ char *this_opt;
++
++ if (!options || !*options)
++ return 0;
++
++ while ((this_opt = strsep(&options, ",")) != NULL) {
++ if (!*this_opt)
++ continue;
++
++ if (!strcmp(this_opt, "accel:0"))
++ accel = false;
++ else if (!strcmp(this_opt, "accel:1"))
++ accel = true;
++ }
++ return 0;
++}
++
++/* process command line options, get vga parameter */
++static int __init sm712_vga_setup(char *options)
++{
++ int i;
++
++ if (!options || !*options)
++ return -EINVAL;
++
++ sm712_scr_info.lfb_width = 0;
++ sm712_scr_info.lfb_height = 0;
++ sm712_scr_info.lfb_depth = 0;
++
++ pr_debug("sm712_vga_setup = %s\n", options);
++
++ for (i = 0; i < ARRAY_SIZE(vesa_mode_table); i++) {
++ if (strstr(options, vesa_mode_table[i].index)) {
++ sm712_scr_info.lfb_width = vesa_mode_table[i].lfb_width;
++ sm712_scr_info.lfb_height =
++ vesa_mode_table[i].lfb_height;
++ sm712_scr_info.lfb_depth = vesa_mode_table[i].lfb_depth;
++ return 0;
++ }
++ }
++
++ return -1;
++}
++
++__setup("vga=", sm712_vga_setup);
++
++static void sm712_setpalette(int regno, unsigned red, unsigned green,
++ unsigned blue, struct fb_info *info)
++{
++ struct sm712fb_info *sfb = info->par;
++
++ /* set bit 5:4 = 01 (write LCD RAM only) */
++ sm712_write_seq(sfb, 0x66, (sm712_read_seq(sfb, 0x66) & 0xC3) | 0x10);
++
++ sm712_writeb(sfb->mmio, DAC_REG, regno);
++ sm712_writeb(sfb->mmio, DAC_VAL, red >> 10);
++ sm712_writeb(sfb->mmio, DAC_VAL, green >> 10);
++ sm712_writeb(sfb->mmio, DAC_VAL, blue >> 10);
++}
++
++/* chan_to_field
++ *
++ * convert a colour value into a field position
++ *
++ * from pxafb.c
++ */
++
++static inline unsigned int chan_to_field(unsigned int chan,
++ struct fb_bitfield *bf)
++{
++ chan &= 0xffff;
++ chan >>= 16 - bf->length;
++ return chan << bf->offset;
++}
++
++static int sm712_blank(int blank_mode, struct fb_info *info)
++{
++ struct sm712fb_info *sfb = info->par;
++
++ /* clear DPMS setting */
++ switch (blank_mode) {
++ case FB_BLANK_UNBLANK:
++ /* Screen On: HSync: On, VSync : On */
++ sm712_write_seq(sfb, 0x01,
++ (sm712_read_seq(sfb, 0x01) & (~0x20)));
++ sm712_write_seq(sfb, 0x6a, 0x16);
++ sm712_write_seq(sfb, 0x6b, 0x02);
++ sm712_write_seq(sfb, 0x21, (sm712_read_seq(sfb, 0x21) & 0x77));
++ sm712_write_seq(sfb, 0x22,
++ (sm712_read_seq(sfb, 0x22) & (~0x30)));
++ sm712_write_seq(sfb, 0x23,
++ (sm712_read_seq(sfb, 0x23) & (~0xc0)));
++ sm712_write_seq(sfb, 0x24, (sm712_read_seq(sfb, 0x24) | 0x01));
++ sm712_write_seq(sfb, 0x31, (sm712_read_seq(sfb, 0x31) | 0x03));
++ break;
++ case FB_BLANK_NORMAL:
++ /* Screen Off: HSync: On, VSync : On Soft blank */
++ sm712_write_seq(sfb, 0x01,
++ (sm712_read_seq(sfb, 0x01) & (~0x20)));
++ sm712_write_seq(sfb, 0x6a, 0x16);
++ sm712_write_seq(sfb, 0x6b, 0x02);
++ sm712_write_seq(sfb, 0x22,
++ (sm712_read_seq(sfb, 0x22) & (~0x30)));
++ sm712_write_seq(sfb, 0x23,
++ (sm712_read_seq(sfb, 0x23) & (~0xc0)));
++ sm712_write_seq(sfb, 0x24, (sm712_read_seq(sfb, 0x24) | 0x01));
++ sm712_write_seq(sfb, 0x31,
++ ((sm712_read_seq(sfb, 0x31) & (~0x07)) | 0x00));
++ break;
++ case FB_BLANK_VSYNC_SUSPEND:
++ /* Screen On: HSync: On, VSync : Off */
++ sm712_write_seq(sfb, 0x01, (sm712_read_seq(sfb, 0x01) | 0x20));
++ sm712_write_seq(sfb, 0x20,
++ (sm712_read_seq(sfb, 0x20) & (~0xB0)));
++ sm712_write_seq(sfb, 0x6a, 0x0c);
++ sm712_write_seq(sfb, 0x6b, 0x02);
++ sm712_write_seq(sfb, 0x21, (sm712_read_seq(sfb, 0x21) | 0x88));
++ sm712_write_seq(sfb, 0x22,
++ ((sm712_read_seq(sfb, 0x22) & (~0x30)) | 0x20));
++ sm712_write_seq(sfb, 0x23,
++ ((sm712_read_seq(sfb, 0x23) & (~0xc0)) | 0x20));
++ sm712_write_seq(sfb, 0x24,
++ (sm712_read_seq(sfb, 0x24) & (~0x01)));
++ sm712_write_seq(sfb, 0x31,
++ ((sm712_read_seq(sfb, 0x31) & (~0x07)) | 0x00));
++ sm712_write_seq(sfb, 0x34, (sm712_read_seq(sfb, 0x34) | 0x80));
++ break;
++ case FB_BLANK_HSYNC_SUSPEND:
++ /* Screen On: HSync: Off, VSync : On */
++ sm712_write_seq(sfb, 0x01, (sm712_read_seq(sfb, 0x01) | 0x20));
++ sm712_write_seq(sfb, 0x20,
++ (sm712_read_seq(sfb, 0x20) & (~0xB0)));
++ sm712_write_seq(sfb, 0x6a, 0x0c);
++ sm712_write_seq(sfb, 0x6b, 0x02);
++ sm712_write_seq(sfb, 0x21, (sm712_read_seq(sfb, 0x21) | 0x88));
++ sm712_write_seq(sfb, 0x22,
++ ((sm712_read_seq(sfb, 0x22) & (~0x30)) | 0x10));
++ sm712_write_seq(sfb, 0x23,
++ ((sm712_read_seq(sfb, 0x23) & (~0xc0)) | 0xD8));
++ sm712_write_seq(sfb, 0x24,
++ (sm712_read_seq(sfb, 0x24) & (~0x01)));
++ sm712_write_seq(sfb, 0x31,
++ ((sm712_read_seq(sfb, 0x31) & (~0x07)) | 0x00));
++ sm712_write_seq(sfb, 0x34, (sm712_read_seq(sfb, 0x34) | 0x80));
++ break;
++ case FB_BLANK_POWERDOWN:
++ /* Screen On: HSync: Off, VSync : Off */
++ sm712_write_seq(sfb, 0x01, (sm712_read_seq(sfb, 0x01) | 0x20));
++ sm712_write_seq(sfb, 0x20,
++ (sm712_read_seq(sfb, 0x20) & (~0xB0)));
++ sm712_write_seq(sfb, 0x6a, 0x5a);
++ sm712_write_seq(sfb, 0x6b, 0x20);
++ sm712_write_seq(sfb, 0x21, (sm712_read_seq(sfb, 0x21) | 0x88));
++ sm712_write_seq(sfb, 0x22,
++ ((sm712_read_seq(sfb, 0x22) & (~0x30)) | 0x30));
++ sm712_write_seq(sfb, 0x23,
++ ((sm712_read_seq(sfb, 0x23) & (~0xc0)) | 0xD8));
++ sm712_write_seq(sfb, 0x24,
++ (sm712_read_seq(sfb, 0x24) & (~0x01)));
++ sm712_write_seq(sfb, 0x31,
++ ((sm712_read_seq(sfb, 0x31) & (~0x07)) | 0x00));
++ sm712_write_seq(sfb, 0x34, (sm712_read_seq(sfb, 0x34) | 0x80));
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++static int sm712_setcolreg(unsigned regno, unsigned red, unsigned green,
++ unsigned blue, unsigned trans, struct fb_info *info)
++{
++ struct sm712fb_info *sfb;
++ u32 val;
++
++ sfb = info->par;
++
++ if (regno > 255)
++ return 1;
++
++ switch (sfb->fb.fix.visual) {
++ case FB_VISUAL_DIRECTCOLOR:
++ case FB_VISUAL_TRUECOLOR:
++ /*
++ * 16/32 bit true-colour, use pseudo-palette for 16 base color
++ */
++ if (regno < 16) {
++ if (sfb->fb.var.bits_per_pixel == 16) {
++ u32 *pal = sfb->fb.pseudo_palette;
++
++ val = chan_to_field(red, &sfb->fb.var.red);
++ val |= chan_to_field(green, &sfb->fb.var.green);
++ val |= chan_to_field(blue, &sfb->fb.var.blue);
++#ifdef __BIG_ENDIAN
++ pal[regno] =
++ ((red & 0xf800) >> 8) |
++ ((green & 0xe000) >> 13) |
++ ((green & 0x1c00) << 3) |
++ ((blue & 0xf800) >> 3);
++#else
++ pal[regno] = val;
++#endif
++ } else {
++ u32 *pal = sfb->fb.pseudo_palette;
++
++ val = chan_to_field(red, &sfb->fb.var.red);
++ val |= chan_to_field(green, &sfb->fb.var.green);
++ val |= chan_to_field(blue, &sfb->fb.var.blue);
++#ifdef __BIG_ENDIAN
++ val =
++ (val & 0xff00ff00 >> 8) |
++ (val & 0x00ff00ff << 8);
++#endif
++ pal[regno] = val;
++ }
++ }
++ break;
++
++ case FB_VISUAL_PSEUDOCOLOR:
++ /* color depth 8 bit */
++ sm712_setpalette(regno, red, green, blue, info);
++ break;
++
++ default:
++ return 1; /* unknown type */
++ }
++
++ return 0;
++
++}
++
++#ifdef __BIG_ENDIAN
++static ssize_t sm712fb_read(struct fb_info *info, char __user *buf,
++ size_t count, loff_t *ppos)
++{
++ unsigned long p = *ppos;
++
++ u32 *buffer, *dst;
++ u32 __iomem *src;
++ int c, i, cnt = 0, err = 0;
++ unsigned long total_size;
++
++ if (!info || !info->screen_base)
++ return -ENODEV;
++
++ if (info->state != FBINFO_STATE_RUNNING)
++ return -EPERM;
++
++ total_size = info->screen_size;
++
++ if (total_size == 0)
++ total_size = info->fix.smem_len;
++
++ if (p >= total_size)
++ return 0;
++
++ if (count >= total_size)
++ count = total_size;
++
++ if (count + p > total_size)
++ count = total_size - p;
++
++ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
++ if (!buffer)
++ return -ENOMEM;
++
++ src = (u32 __iomem *) (info->screen_base + p);
++
++ if (info->fbops->fb_sync)
++ info->fbops->fb_sync(info);
++
++ while (count) {
++ c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
++ dst = buffer;
++ for (i = c >> 2; i--;) {
++ *dst = fb_readl(src++);
++ *dst =
++ (*dst & 0xff00ff00 >> 8) | (*dst & 0x00ff00ff << 8);
++ dst++;
++ }
++ if (c & 3) {
++ u8 *dst8 = (u8 *) dst;
++ u8 __iomem *src8 = (u8 __iomem *) src;
++
++ for (i = c & 3; i--;) {
++ if (i & 1) {
++ *dst8++ = fb_readb(++src8);
++ } else {
++ *dst8++ = fb_readb(--src8);
++ src8 += 2;
++ }
++ }
++ src = (u32 __iomem *) src8;
++ }
++
++ if (copy_to_user(buf, buffer, c)) {
++ err = -EFAULT;
++ break;
++ }
++ *ppos += c;
++ buf += c;
++ cnt += c;
++ count -= c;
++ }
++
++ kfree(buffer);
++
++ return (err) ? err : cnt;
++}
++
++static ssize_t
++sm712fb_write(struct fb_info *info, const char __user *buf, size_t count,
++ loff_t *ppos)
++{
++ unsigned long p = *ppos;
++
++ u32 *buffer, *src;
++ u32 __iomem *dst;
++ int c, i, cnt = 0, err = 0;
++ unsigned long total_size;
++
++ if (!info || !info->screen_base)
++ return -ENODEV;
++
++ if (info->state != FBINFO_STATE_RUNNING)
++ return -EPERM;
++
++ total_size = info->screen_size;
++
++ if (total_size == 0)
++ total_size = info->fix.smem_len;
++
++ if (p > total_size)
++ return -EFBIG;
++
++ if (count > total_size) {
++ err = -EFBIG;
++ count = total_size;
++ }
++
++ if (count + p > total_size) {
++ if (!err)
++ err = -ENOSPC;
++
++ count = total_size - p;
++ }
++
++ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
++ if (!buffer)
++ return -ENOMEM;
++
++ dst = (u32 __iomem *) (info->screen_base + p);
++
++ if (info->fbops->fb_sync)
++ info->fbops->fb_sync(info);
++
++ while (count) {
++ c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
++ src = buffer;
++
++ if (copy_from_user(src, buf, c)) {
++ err = -EFAULT;
++ break;
++ }
++
++ for (i = c >> 2; i--;) {
++ fb_writel((*src & 0xff00ff00 >> 8) |
++ (*src & 0x00ff00ff << 8), dst++);
++ src++;
++ }
++ if (c & 3) {
++ u8 *src8 = (u8 *) src;
++ u8 __iomem *dst8 = (u8 __iomem *) dst;
++
++ for (i = c & 3; i--;) {
++ if (i & 1) {
++ fb_writeb(*src8++, ++dst8);
++ } else {
++ fb_writeb(*src8++, --dst8);
++ dst8 += 2;
++ }
++ }
++ dst = (u32 __iomem *) dst8;
++ }
++
++ *ppos += c;
++ buf += c;
++ cnt += c;
++ count -= c;
++ }
++
++ kfree(buffer);
++
++ return (cnt) ? cnt : err;
++}
++#endif /* ! __BIG_ENDIAN */
++
++static void sm712_set_timing(struct sm712fb_info *sfb)
++{
++ int i = 0, j = 0;
++ u32 m_nScreenStride;
++
++ dev_dbg(&sfb->pdev->dev,
++ "sfb->width=%d sfb->height=%d "
++ "sfb->fb.var.bits_per_pixel=%d sfb->hz=%d\n",
++ sfb->width, sfb->height, sfb->fb.var.bits_per_pixel, sfb->hz);
++
++ for (j = 0; j < numVGAModes; j++) {
++ if (VGAMode[j].mmSizeX != sfb->width ||
++ VGAMode[j].mmSizeY != sfb->height ||
++ VGAMode[j].bpp != sfb->fb.var.bits_per_pixel ||
++ VGAMode[j].hz != sfb->hz) {
++ continue;
++ }
++
++ dev_dbg(&sfb->pdev->dev,
++ "VGAMode[j].mmSizeX=%d VGAMode[j].mmSizeY=%d "
++ "VGAMode[j].bpp=%d VGAMode[j].hz=%d\n",
++ VGAMode[j].mmSizeX, VGAMode[j].mmSizeY,
++ VGAMode[j].bpp, VGAMode[j].hz);
++
++ dev_dbg(&sfb->pdev->dev, "VGAMode index=%d\n", j);
++
++ sm712_writeb(sfb->mmio, 0x3c6, 0x0);
++
++ sm712_write_seq(sfb, 0, 0x1);
++
++ sm712_writeb(sfb->mmio, 0x3c2, VGAMode[j].Init_MISC);
++
++ /* init SEQ register SR00 - SR04 */
++ for (i = 0; i < SR00_SR04_SIZE; i++)
++ sm712_write_seq(sfb, i, VGAMode[j].Init_SR00_SR04[i]);
++
++ /* init SEQ register SR10 - SR24 */
++ for (i = 0; i < SR10_SR24_SIZE; i++)
++ sm712_write_seq(sfb, i + 0x10,
++ VGAMode[j].Init_SR10_SR24[i]);
++
++ /* init SEQ register SR30 - SR75 */
++ for (i = 0; i < SR30_SR75_SIZE; i++)
++ if ((i + 0x30) != 0x62 &&
++ (i + 0x30) != 0x6a && (i + 0x30) != 0x6b)
++ sm712_write_seq(sfb, i + 0x30,
++ VGAMode[j].Init_SR30_SR75[i]);
++
++ /* init SEQ register SR80 - SR93 */
++ for (i = 0; i < SR80_SR93_SIZE; i++)
++ sm712_write_seq(sfb, i + 0x80,
++ VGAMode[j].Init_SR80_SR93[i]);
++
++ /* init SEQ register SRA0 - SRAF */
++ for (i = 0; i < SRA0_SRAF_SIZE; i++)
++ sm712_write_seq(sfb, i + 0xa0,
++ VGAMode[j].Init_SRA0_SRAF[i]);
++
++ /* init Graphic register GR00 - GR08 */
++ for (i = 0; i < GR00_GR08_SIZE; i++)
++ sm712_write_grph(sfb, i, VGAMode[j].Init_GR00_GR08[i]);
++
++ /* init Attribute register AR00 - AR14 */
++ for (i = 0; i < AR00_AR14_SIZE; i++)
++ sm712_write_attr(sfb, i, VGAMode[j].Init_AR00_AR14[i]);
++
++ /* init CRTC register CR00 - CR18 */
++ for (i = 0; i < CR00_CR18_SIZE; i++)
++ sm712_write_crtc(sfb, i, VGAMode[j].Init_CR00_CR18[i]);
++
++ /* init CRTC register CR30 - CR4D */
++ for (i = 0; i < CR30_CR4D_SIZE; i++)
++ sm712_write_crtc(sfb, i + 0x30,
++ VGAMode[j].Init_CR30_CR4D[i]);
++
++ /* init CRTC register CR90 - CRA7 */
++ for (i = 0; i < CR90_CRA7_SIZE; i++)
++ sm712_write_crtc(sfb, i + 0x90,
++ VGAMode[j].Init_CR90_CRA7[i]);
++ }
++ sm712_writeb(sfb->mmio, 0x3c2, 0x67);
++
++ /* set VPR registers */
++ sm712_writel(sfb->vpr, 0x0C, 0x0);
++ sm712_writel(sfb->vpr, 0x40, 0x0);
++
++ /* set data width */
++ m_nScreenStride = (sfb->width * sfb->fb.var.bits_per_pixel) / 64;
++ switch (sfb->fb.var.bits_per_pixel) {
++ case 8:
++ sm712_writel(sfb->vpr, 0x0, 0x0);
++ break;
++ case 16:
++ sm712_writel(sfb->vpr, 0x0, 0x00020000);
++ break;
++ case 24:
++ sm712_writel(sfb->vpr, 0x0, 0x00040000);
++ break;
++ case 32:
++ sm712_writel(sfb->vpr, 0x0, 0x00030000);
++ break;
++ }
++ sm712_writel(sfb->vpr, 0x10,
++ (u32) (((m_nScreenStride + 2) << 16) | m_nScreenStride));
++}
++
++static void sm712fb_setmode(struct sm712fb_info *sfb)
++{
++ switch (sfb->fb.var.bits_per_pixel) {
++ case 32:
++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
++ sfb->fb.fix.line_length = sfb->fb.var.xres * 4;
++ sfb->fb.var.red.length = 8;
++ sfb->fb.var.green.length = 8;
++ sfb->fb.var.blue.length = 8;
++ sfb->fb.var.red.offset = 16;
++ sfb->fb.var.green.offset = 8;
++ sfb->fb.var.blue.offset = 0;
++ break;
++ case 24:
++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
++ sfb->fb.fix.line_length = sfb->fb.var.xres * 3;
++ sfb->fb.var.red.length = 8;
++ sfb->fb.var.green.length = 8;
++ sfb->fb.var.blue.length = 8;
++ sfb->fb.var.red.offset = 16;
++ sfb->fb.var.green.offset = 8;
++ sfb->fb.var.blue.offset = 0;
++ break;
++ case 8:
++ sfb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
++ sfb->fb.fix.line_length = sfb->fb.var.xres;
++ sfb->fb.var.red.length = 3;
++ sfb->fb.var.green.length = 3;
++ sfb->fb.var.blue.length = 2;
++ sfb->fb.var.red.offset = 5;
++ sfb->fb.var.green.offset = 2;
++ sfb->fb.var.blue.offset = 0;
++ break;
++ case 16:
++ default:
++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
++ sfb->fb.fix.line_length = sfb->fb.var.xres * 2;
++ sfb->fb.var.red.length = 5;
++ sfb->fb.var.green.length = 6;
++ sfb->fb.var.blue.length = 5;
++ sfb->fb.var.red.offset = 11;
++ sfb->fb.var.green.offset = 5;
++ sfb->fb.var.blue.offset = 0;
++ break;
++ }
++
++ sfb->width = sfb->fb.var.xres;
++ sfb->height = sfb->fb.var.yres;
++ sfb->hz = 60;
++ sm712_set_timing(sfb);
++}
++
++static int sm712_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
++{
++ /* sanity checks */
++ if (var->xres_virtual < var->xres)
++ var->xres_virtual = var->xres;
++
++ if (var->yres_virtual < var->yres)
++ var->yres_virtual = var->yres;
++
++ /* set valid default bpp */
++ if ((var->bits_per_pixel != 8) && (var->bits_per_pixel != 16) &&
++ (var->bits_per_pixel != 24) && (var->bits_per_pixel != 32))
++ var->bits_per_pixel = 16;
++
++ return 0;
++}
++
++static int sm712_set_par(struct fb_info *info)
++{
++ sm712fb_setmode(info->par);
++
++ return 0;
++}
++
++static struct fb_ops sm712fb_ops = {
++ .owner = THIS_MODULE,
++ .fb_check_var = sm712_check_var,
++ .fb_set_par = sm712_set_par,
++ .fb_setcolreg = sm712_setcolreg,
++ .fb_blank = sm712_blank,
++ .fb_fillrect = cfb_fillrect,
++ .fb_imageblit = cfb_imageblit,
++ .fb_copyarea = cfb_copyarea,
++#ifdef __BIG_ENDIAN
++ .fb_read = sm712fb_read,
++ .fb_write = sm712fb_write,
++#endif
++};
++
++/*
++ * alloc struct sm712fb_info and assign default values
++ */
++static struct sm712fb_info *sm712_fb_info_new(struct pci_dev *pdev)
++{
++ struct sm712fb_info *sfb;
++
++ sfb = kzalloc(sizeof(*sfb), GFP_KERNEL);
++
++ if (!sfb)
++ return NULL;
++
++ sfb->pdev = pdev;
++
++ sfb->fb.flags = FBINFO_FLAG_DEFAULT;
++ sfb->fb.fbops = &sm712fb_ops;
++ sfb->fb.fix = sm712fb_fix;
++ sfb->fb.var = sm712fb_var;
++ sfb->fb.pseudo_palette = sfb->colreg;
++ sfb->fb.par = sfb;
++ sfb->accel = accel;
++
++ return sfb;
++}
++
++/*
++ * free struct sm712fb_info
++ */
++static void sm712_fb_info_free(struct sm712fb_info *sfb)
++{
++ kfree(sfb);
++}
++
++/*
++ * Map in the screen memory
++ */
++
++static int sm712_map_smem(struct sm712fb_info *sfb,
++ struct pci_dev *pdev, u_long smem_len)
++{
++
++ sfb->fb.fix.smem_start = pci_resource_start(pdev, 0);
++
++#ifdef __BIG_ENDIAN
++ if (sfb->fb.var.bits_per_pixel == 32)
++ sfb->fb.fix.smem_start += 0x800000;
++#endif
++
++ sfb->fb.fix.smem_len = smem_len;
++
++ sfb->fb.screen_base = sfb->lfb;
++
++ if (!sfb->fb.screen_base) {
++ dev_err(&pdev->dev,
++ "%s: unable to map screen memory\n", sfb->fb.fix.id);
++ return -ENOMEM;
++ }
++
++ return 0;
++}
++
++/*
++ * Unmap in the screen memory
++ *
++ */
++static void sm712_unmap_smem(struct sm712fb_info *sfb)
++{
++ if (sfb && sfb->fb.screen_base) {
++ iounmap(sfb->fb.screen_base);
++ sfb->fb.screen_base = NULL;
++ sfb->lfb = NULL;
++ }
++}
++
++static inline void sm712_init_hw(struct sm712fb_info *sfb)
++{
++ /* enable linear memory mode and packed pixel format */
++ outb_p(0x18, 0x3c4);
++ outb_p(0x11, 0x3c5);
++
++ /* set MCLK = 14.31818 * (0x16 / 0x2) */
++ sm712_write_seq(sfb, 0x6a, 0x16);
++ sm712_write_seq(sfb, 0x6b, 0x02);
++ sm712_write_seq(sfb, 0x62, 0x3e);
++
++ /* enable PCI burst */
++ sm712_write_seq(sfb, 0x17, 0x20);
++
++#ifdef __BIG_ENDIAN
++ /* enable word swap */
++ if (sfb->fb.var.bits_per_pixel == 32)
++ sm712_write_seq(sfb, 0x17, 0x30);
++#endif
++
++ if (!sfb->accel) {
++ dev_info(&sfb->pdev->dev, "2d acceleration was disabled by user.\n");
++ sfb->fb.flags = FBINFO_FLAG_DEFAULT | FBINFO_HWACCEL_NONE;
++ return;
++ }
++
++ if (sm712fb_init_accel(sfb) < 0) {
++ dev_info(&sfb->pdev->dev, "failed to enable 2d accleration.\n");
++ sfb->fb.flags = FBINFO_FLAG_DEFAULT | FBINFO_HWACCEL_NONE;
++ return;
++ } else {
++ sm712fb_ops.fb_fillrect = sm712fb_fillrect;
++ sm712fb_ops.fb_copyarea = sm712fb_copyarea;
++ sm712fb_ops.fb_imageblit = sm712fb_imageblit;
++ sfb->fb.flags |= FBINFO_HWACCEL_COPYAREA |
++ FBINFO_HWACCEL_FILLRECT |
++ FBINFO_HWACCEL_IMAGEBLIT |
++ FBINFO_READS_FAST;
++ dev_info(&sfb->pdev->dev, "sm712fb: enable 2d acceleration.\n");
++ }
++}
++
++static int sm712fb_pci_probe(struct pci_dev *pdev,
++ const struct pci_device_id *ent)
++{
++ struct sm712fb_info *sfb;
++ int err;
++ unsigned long mmio_base;
++
++#ifndef MODULE
++ char *option = NULL;
++
++ if (!fb_get_options("sm712fb", &option))
++ sm712fb_setup(option);
++#endif
++
++ dev_info(&pdev->dev, "Silicon Motion display driver.");
++
++ err = pci_enable_device(pdev); /* enable SMTC chip */
++ if (err)
++ return err;
++
++ sprintf(sm712fb_fix.id, "sm712fb");
++
++ sfb = sm712_fb_info_new(pdev);
++
++ if (!sfb) {
++ err = -ENOMEM;
++ goto free_fail;
++ }
++
++ sfb->chip_id = ent->device;
++
++ pci_set_drvdata(pdev, sfb);
++
++ /* get mode parameter from sm712_scr_info */
++ if (sm712_scr_info.lfb_width != 0) {
++ sfb->fb.var.xres = sm712_scr_info.lfb_width;
++ sfb->fb.var.yres = sm712_scr_info.lfb_height;
++ sfb->fb.var.bits_per_pixel = sm712_scr_info.lfb_depth;
++ } else {
++ /* default resolution 1024x600 16bit mode */
++ sfb->fb.var.xres = SM712_DEFAULT_XRES;
++ sfb->fb.var.yres = SM712_DEFAULT_YRES;
++ sfb->fb.var.bits_per_pixel = SM712_DEFAULT_BPP;
++ }
++
++#ifdef __BIG_ENDIAN
++ if (sfb->fb.var.bits_per_pixel == 24)
++ sfb->fb.var.bits_per_pixel = (sm712_scr_info.lfb_depth = 32);
++#endif
++
++ /* Map address and memory detection */
++ mmio_base = pci_resource_start(pdev, 0);
++ pci_read_config_byte(pdev, PCI_REVISION_ID, &sfb->chip_rev_id);
++
++ if (sfb->chip_id != 0x712) {
++ dev_err(&pdev->dev,
++ "No valid Silicon Motion display chip was detected!");
++
++ goto fb_fail;
++ }
++
++ sfb->fb.fix.mmio_start = mmio_base + SM712_REG_BASE;
++ sfb->fb.fix.mmio_len = SM712_REG_SIZE;
++#ifdef __BIG_ENDIAN
++ sfb->lfb = ioremap(mmio_base, 0x00c00000);
++#else
++ sfb->lfb = ioremap(mmio_base, 0x00800000);
++#endif
++ sfb->mmio = sfb->lfb + SM712_MMIO_BASE;
++ sfb->dpr = sfb->lfb + SM712_DPR_BASE;
++ sfb->vpr = sfb->lfb + SM712_VPR_BASE;
++ sfb->dataport = sfb->lfb + SM712_DATAPORT_BASE;
++#ifdef __BIG_ENDIAN
++ if (sfb->fb.var.bits_per_pixel == 32) {
++ sfb->lfb += 0x800000;
++ dev_info(&pdev->dev, "sfb->lfb=%p", sfb->lfb);
++ }
++#endif
++ if (!sfb->mmio) {
++ dev_err(&pdev->dev,
++ "%s: unable to map memory mapped IO!", sfb->fb.fix.id);
++ err = -ENOMEM;
++ goto fb_fail;
++ }
++
++ sm712_init_hw(sfb);
++
++ /* can support 32 bpp */
++ if (15 == sfb->fb.var.bits_per_pixel)
++ sfb->fb.var.bits_per_pixel = 16;
++
++ sfb->fb.var.xres_virtual = sfb->fb.var.xres;
++ sfb->fb.var.yres_virtual = sfb->fb.var.yres;
++ err = sm712_map_smem(sfb, pdev, SM712_VRAM_SIZE);
++ if (err)
++ goto fail;
++
++ sm712fb_setmode(sfb);
++
++ err = register_framebuffer(&sfb->fb);
++ if (err < 0)
++ goto fail;
++
++ dev_info(&pdev->dev,
++ "Silicon Motion SM%X Rev%X primary display mode %dx%d-%d Init Complete.",
++ sfb->chip_id, sfb->chip_rev_id, sfb->fb.var.xres,
++ sfb->fb.var.yres, sfb->fb.var.bits_per_pixel);
++
++ return 0;
++
++fail:
++ dev_err(&pdev->dev, "Silicon Motion, Inc. primary display init fail.");
++
++ sm712_unmap_smem(sfb);
++fb_fail:
++ sm712_fb_info_free(sfb);
++free_fail:
++ pci_disable_device(pdev);
++
++ return err;
++}
++
++/*
++ * 0x712 (LynxEM+)
++ */
++static const struct pci_device_id sm712fb_pci_table[] = {
++ {PCI_DEVICE(0x126f, 0x712),},
++ {0,}
++};
++
++static void sm712fb_pci_remove(struct pci_dev *pdev)
++{
++ struct sm712fb_info *sfb;
++
++ sfb = pci_get_drvdata(pdev);
++ sm712_unmap_smem(sfb);
++ unregister_framebuffer(&sfb->fb);
++ sm712_fb_info_free(sfb);
++}
++
++#ifdef CONFIG_PM
++static int sm712fb_pci_suspend(struct device *device)
++{
++ struct pci_dev *pdev = to_pci_dev(device);
++ struct sm712fb_info *sfb;
++
++ sfb = pci_get_drvdata(pdev);
++
++ /* set the hw in sleep mode use external clock and self memory refresh
++ * so that we can turn off internal PLLs later on
++ */
++ sm712_write_seq(sfb, 0x20, (sm712_read_seq(sfb, 0x20) | 0xc0));
++ sm712_write_seq(sfb, 0x69, (sm712_read_seq(sfb, 0x69) & 0xf7));
++
++ console_lock();
++ fb_set_suspend(&sfb->fb, 1);
++ console_unlock();
++
++ /* additionally turn off all function blocks including internal PLLs */
++ sm712_write_seq(sfb, 0x21, 0xff);
++
++ return 0;
++}
++
++static int sm712fb_pci_resume(struct device *device)
++{
++ struct pci_dev *pdev = to_pci_dev(device);
++ struct sm712fb_info *sfb;
++
++ sfb = pci_get_drvdata(pdev);
++
++ /* reinit hardware */
++ sm712_init_hw(sfb);
++
++ sm712_write_seq(sfb, 0x34, (sm712_read_seq(sfb, 0x34) | 0xc0));
++ sm712_write_seq(sfb, 0x33, ((sm712_read_seq(sfb, 0x33) | 0x08) & 0xfb));
++
++ sm712fb_setmode(sfb);
++
++ console_lock();
++ fb_set_suspend(&sfb->fb, 0);
++ console_unlock();
++
++ return 0;
++}
++
++static SIMPLE_DEV_PM_OPS(sm712_pm_ops, sm712fb_pci_suspend, sm712fb_pci_resume);
++#define SM712_PM_OPS (&sm712_pm_ops)
++
++#else /* !CONFIG_PM */
++
++#define SM712_PM_OPS NULL
++
++#endif /* !CONFIG_PM */
++
++static struct pci_driver sm712fb_driver = {
++ .name = "sm712fb",
++ .id_table = sm712fb_pci_table,
++ .probe = sm712fb_pci_probe,
++ .remove = sm712fb_pci_remove,
++ .driver.pm = SM712_PM_OPS,
++};
++
++module_pci_driver(sm712fb_driver);
++
++module_param(accel, bool, S_IRUGO);
++MODULE_PARM_DESC(accel, "Enable or disable 2D Acceleration");
++
++MODULE_AUTHOR("Siliconmotion ");
++MODULE_DESCRIPTION("Framebuffer driver for Silicon Motion SM712 Graphic Cards");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/video/fbdev/sm712fb/sm712fb_drv.h b/drivers/video/fbdev/sm712fb/sm712fb_drv.h
+new file mode 100644
+index 0000000..bf81bff
+--- /dev/null
++++ b/drivers/video/fbdev/sm712fb/sm712fb_drv.h
+@@ -0,0 +1,130 @@
++/*
++ * Silicon Motion SM712 frame buffer device
++ *
++ * Copyright (C) 2006 Silicon Motion Technology Corp.
++ * Authors: Ge Wang, gewang@siliconmotion.com
++ * Boyod boyod.yang@siliconmotion.com.cn
++ *
++ * Copyright (C) 2009 Lemote, Inc.
++ * Author: Wu Zhangjin, wuzhangjin@gmail.com
++ *
++ * Copyright (C) 2011 Igalia, S.L.
++ * Author: Javier M. Mellid <jmunhoz@igalia.com>
++ *
++ * Copyright (C) 2014 Tom Li.
++ * Author: Tom Li (Yifeng Li) <biergaizi@member.fsf.org>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
++ * Framebuffer driver for Silicon Motion SM712 chip
+ */
+
-+#define NR_PALETTE 256
++#ifndef _SM712FB_DRV_H
++#define _SM712FB_DRV_H
++
++/*
++* Private structure
++*/
++struct sm712fb_info {
++ struct pci_dev *pdev;
++ struct fb_info fb;
++ u16 chip_id;
++ u8 chip_rev_id;
++
++ void __iomem *lfb; /* linear frame buffer, the base address */
++
++ void __iomem *dpr; /* drawing processor control regs */
++ void __iomem *vpr; /* video processor control regs */
++ void __iomem *cpr; /* capture processor control regs */
++ void __iomem *mmio; /* memory map IO port */
++ void __iomem *dataport; /* 2d drawing engine data port */
++
++ u_int width;
++ u_int height;
++ u_int hz;
++
++ u32 colreg[17];
++
++ bool accel;
++};
++
++/* constants for registers operations */
++
++#include "sm712fb_io.h"
++
++#define FB_ACCEL_SMI_LYNX 88
++
++#define SM712_DEFAULT_XRES 1024
++#define SM712_DEFAULT_YRES 600
++#define SM712_DEFAULT_BPP 16
++
++#define SM712_VRAM_SIZE 0x00400000
++
++#define SM712_REG_BASE 0x00400000
++#define SM712_REG_SIZE 0x00400000
++
++#define SM712_MMIO_BASE 0x00700000
++
++#define SM712_DPR_BASE 0x00408000
++#define SM712_DPR_SIZE (0x6C + 1)
++
++#define DPR_COORDS(x, y) (((x) << 16) | (y))
++
++#define DPR_SRC_COORDS 0x00
++#define DPR_DST_COORDS 0x04
++#define DPR_SPAN_COORDS 0x08
++#define DPR_DE_CTRL 0x0c
++#define DPR_PITCH 0x10
++#define DPR_FG_COLOR 0x14
++#define DPR_BG_COLOR 0x18
++#define DPR_STRETCH 0x1c
++#define DPR_COLOR_COMPARE 0x20
++#define DPR_COLOR_COMPARE_MASK 0x24
++#define DPR_BYTE_BIT_MASK 0x28
++#define DPR_CROP_TOPLEFT_COORDS 0x2c
++#define DPR_CROP_BOTRIGHT_COORDS 0x30
++#define DPR_SRC_WINDOW 0x3c
++#define DPR_SRC_BASE 0x40
++#define DPR_DST_BASE 0x44
++
++#define DE_CTRL_START 0x80000000
++#define DE_CTRL_RTOL 0x08000000
++#define DE_CTRL_COMMAND_MASK 0x001f0000
++#define DE_CTRL_COMMAND_SHIFT 16
++#define DE_CTRL_COMMAND_BITBLT 0x00
++#define DE_CTRL_COMMAND_SOLIDFILL 0x01
++#define DE_CTRL_COMMAND_HOST_WRITE 0x08
++#define DE_CTRL_ROP_ENABLE 0x00008000
++#define DE_CTRL_ROP_MASK 0x000000ff
++#define DE_CTRL_ROP_SHIFT 0
++#define DE_CTRL_ROP_SRC 0x0c
++
++#define DE_CTRL_HOST_SHIFT 22
++#define DE_CTRL_HOST_MONO 1
++
++#define SCR_DE_STATUS 0x16
++#define SCR_DE_STATUS_MASK 0x18
++#define SCR_DE_ENGINE_IDLE 0x10
++
++#define SM712_VPR_BASE 0x0040c000
++#define SM712_VPR_SIZE (0x44 + 1)
++
++#define SM712_DATAPORT_BASE 0x00400000
++
++#define SR00_SR04_SIZE (0x04 - 0x00 + 1)
++#define SR10_SR24_SIZE (0x24 - 0x10 + 1)
++#define SR30_SR75_SIZE (0x75 - 0x30 + 1)
++#define SR80_SR93_SIZE (0x93 - 0x80 + 1)
++#define SRA0_SRAF_SIZE (0xAF - 0xA0 + 1)
++#define GR00_GR08_SIZE (0x08 - 0x00 + 1)
++#define AR00_AR14_SIZE (0x14 - 0x00 + 1)
++#define CR00_CR18_SIZE (0x18 - 0x00 + 1)
++#define CR30_CR4D_SIZE (0x4D - 0x30 + 1)
++#define CR90_CRA7_SIZE (0xA7 - 0x90 + 1)
++
++#define DAC_REG (0x3c8)
++#define DAC_VAL (0x3c9)
+
-+#define FB_ACCEL_SMI_LYNX 88
++#endif
+diff --git a/drivers/video/fbdev/sm712fb/sm712fb_io.h b/drivers/video/fbdev/sm712fb/sm712fb_io.h
+new file mode 100644
+index 0000000..93346a0
+--- /dev/null
++++ b/drivers/video/fbdev/sm712fb/sm712fb_io.h
+@@ -0,0 +1,90 @@
++/*
++ * Silicon Motion SM712 frame buffer device
++ *
++ * Copyright (C) 2006 Silicon Motion Technology Corp.
++ * Authors: Ge Wang, gewang@siliconmotion.com
++ * Boyod boyod.yang@siliconmotion.com.cn
++ *
++ * Copyright (C) 2009 Lemote, Inc.
++ * Author: Wu Zhangjin, wuzhangjin@gmail.com
++ *
++ * Copyright (C) 2011 Igalia, S.L.
++ * Author: Javier M. Mellid <jmunhoz@igalia.com>
++ *
++ * Copyright (C) 2014 Tom Li.
++ * Author: Tom Li (Yifeng Li) <biergaizi@member.fsf.org>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ */
+
-+#define SCREEN_X_RES 1024
-+#define SCREEN_Y_RES 600
-+#define SCREEN_BPP 16
+
-+/*Assume SM712 graphics chip has 4MB VRAM */
-+#define SM712_VIDEOMEMORYSIZE 0x00400000
-+/*Assume SM722 graphics chip has 8MB VRAM */
-+#define SM722_VIDEOMEMORYSIZE 0x00800000
++#define sm712_writeb(base, reg, dat) writeb(dat, base + reg)
++#define sm712_writew(base, reg, dat) writew(dat, base + reg)
++#define sm712_writel(base, reg, dat) writel(dat, base + reg)
+
-+#define dac_reg (0x3c8)
-+#define dac_val (0x3c9)
++#define sm712_readb(base, reg) readb(base + reg)
++#define sm712_readw(base, reg) readw(base + reg)
++#define sm712_readl(base, reg) readl(base + reg)
+
-+extern void __iomem *smtc_RegBaseAddress;
-+#define smtc_mmiowb(dat, reg) writeb(dat, smtc_RegBaseAddress + reg)
-+#define smtc_mmioww(dat, reg) writew(dat, smtc_RegBaseAddress + reg)
-+#define smtc_mmiowl(dat, reg) writel(dat, smtc_RegBaseAddress + reg)
+
-+#define smtc_mmiorb(reg) readb(smtc_RegBaseAddress + reg)
-+#define smtc_mmiorw(reg) readw(smtc_RegBaseAddress + reg)
-+#define smtc_mmiorl(reg) readl(smtc_RegBaseAddress + reg)
++static inline void sm712_write_crtc(struct sm712fb_info *fb, u8 reg, u8 val)
++{
++ sm712_writeb(fb->mmio, 0x3d4, reg);
++ sm712_writeb(fb->mmio, 0x3d5, val);
++}
+
-+#define SIZE_SR00_SR04 (0x04 - 0x00 + 1)
-+#define SIZE_SR10_SR24 (0x24 - 0x10 + 1)
-+#define SIZE_SR30_SR75 (0x75 - 0x30 + 1)
-+#define SIZE_SR80_SR93 (0x93 - 0x80 + 1)
-+#define SIZE_SRA0_SRAF (0xAF - 0xA0 + 1)
-+#define SIZE_GR00_GR08 (0x08 - 0x00 + 1)
-+#define SIZE_AR00_AR14 (0x14 - 0x00 + 1)
-+#define SIZE_CR00_CR18 (0x18 - 0x00 + 1)
-+#define SIZE_CR30_CR4D (0x4D - 0x30 + 1)
-+#define SIZE_CR90_CRA7 (0xA7 - 0x90 + 1)
-+#define SIZE_VPR (0x6C + 1)
-+#define SIZE_DPR (0x44 + 1)
++static inline u8 sm712_read_crtc(struct sm712fb_info *fb, u8 reg)
++{
++ sm712_writeb(fb->mmio, 0x3d4, reg);
++ return sm712_readb(fb->mmio, 0x3d5);
++}
+
-+static inline void smtc_crtcw(int reg, int val)
++static inline void sm712_write_grph(struct sm712fb_info *fb, u8 reg, u8 val)
+{
-+ smtc_mmiowb(reg, 0x3d4);
-+ smtc_mmiowb(val, 0x3d5);
++ sm712_writeb(fb->mmio, 0x3ce, reg);
++ sm712_writeb(fb->mmio, 0x3cf, val);
+}
+
-+static inline unsigned int smtc_crtcr(int reg)
++static inline u8 sm712_read_grph(struct sm712fb_info *fb, u8 reg)
+{
-+ smtc_mmiowb(reg, 0x3d4);
-+ return smtc_mmiorb(0x3d5);
++ sm712_writeb(fb->mmio, 0x3ce, reg);
++ return sm712_readb(fb->mmio, 0x3cf);
+}
+
-+static inline void smtc_grphw(int reg, int val)
++static inline void sm712_write_attr(struct sm712fb_info *fb, u8 reg, u8 val)
+{
-+ smtc_mmiowb(reg, 0x3ce);
-+ smtc_mmiowb(val, 0x3cf);
++ sm712_readb(fb->mmio, 0x3da);
++ sm712_writeb(fb->mmio, 0x3c0, reg);
++ sm712_readb(fb->mmio, 0x3c1);
++ sm712_writeb(fb->mmio, 0x3c0, val);
+}
+
-+static inline unsigned int smtc_grphr(int reg)
++static inline void sm712_write_seq(struct sm712fb_info *fb, u8 reg, u8 val)
+{
-+ smtc_mmiowb(reg, 0x3ce);
-+ return smtc_mmiorb(0x3cf);
++ sm712_writeb(fb->mmio, 0x3c4, reg);
++ sm712_writeb(fb->mmio, 0x3c5, val);
+}
+
-+static inline void smtc_attrw(int reg, int val)
++static inline u8 sm712_read_seq(struct sm712fb_info *fb, u8 reg)
+{
-+ smtc_mmiorb(0x3da);
-+ smtc_mmiowb(reg, 0x3c0);
-+ smtc_mmiorb(0x3c1);
-+ smtc_mmiowb(val, 0x3c0);
++ sm712_writeb(fb->mmio, 0x3c4, reg);
++ return sm712_readb(fb->mmio, 0x3c5);
+}
+
-+static inline void smtc_seqw(int reg, int val)
++static inline u32 sm712_read_dpr(struct sm712fb_info *fb, u8 reg)
+{
-+ smtc_mmiowb(reg, 0x3c4);
-+ smtc_mmiowb(val, 0x3c5);
++ return sm712_readl(fb->dpr, reg);
+}
+
-+static inline unsigned int smtc_seqr(int reg)
++static inline void sm712_write_dpr(struct sm712fb_info *fb, u8 reg, u32 val)
+{
-+ smtc_mmiowb(reg, 0x3c4);
-+ return smtc_mmiorb(0x3c5);
++ sm712_writel(fb->dpr, reg, val);
+}
+
++static inline void sm712_write_dataport(struct sm712fb_info *fb, u32 val)
++{
++ sm712_writel(fb->dataport, 0, val);
++}
+diff --git a/drivers/video/fbdev/sm712fb/sm712fb_modedb.h b/drivers/video/fbdev/sm712fb/sm712fb_modedb.h
+new file mode 100644
+index 0000000..16ee7e3
+--- /dev/null
++++ b/drivers/video/fbdev/sm712fb/sm712fb_modedb.h
+@@ -0,0 +1,682 @@
+/* The next structure holds all information relevant for a specific video mode.
+ */
+
@@ -9473,16 +11112,16 @@ index 0000000..8599861
+ int bpp;
+ int hz;
+ unsigned char Init_MISC;
-+ unsigned char Init_SR00_SR04[SIZE_SR00_SR04];
-+ unsigned char Init_SR10_SR24[SIZE_SR10_SR24];
-+ unsigned char Init_SR30_SR75[SIZE_SR30_SR75];
-+ unsigned char Init_SR80_SR93[SIZE_SR80_SR93];
-+ unsigned char Init_SRA0_SRAF[SIZE_SRA0_SRAF];
-+ unsigned char Init_GR00_GR08[SIZE_GR00_GR08];
-+ unsigned char Init_AR00_AR14[SIZE_AR00_AR14];
-+ unsigned char Init_CR00_CR18[SIZE_CR00_CR18];
-+ unsigned char Init_CR30_CR4D[SIZE_CR30_CR4D];
-+ unsigned char Init_CR90_CRA7[SIZE_CR90_CRA7];
++ unsigned char Init_SR00_SR04[SR00_SR04_SIZE];
++ unsigned char Init_SR10_SR24[SR10_SR24_SIZE];
++ unsigned char Init_SR30_SR75[SR30_SR75_SIZE];
++ unsigned char Init_SR80_SR93[SR80_SR93_SIZE];
++ unsigned char Init_SRA0_SRAF[SRA0_SRAF_SIZE];
++ unsigned char Init_GR00_GR08[GR00_GR08_SIZE];
++ unsigned char Init_AR00_AR14[AR00_AR14_SIZE];
++ unsigned char Init_CR00_CR18[CR00_CR18_SIZE];
++ unsigned char Init_CR30_CR4D[CR30_CR4D_SIZE];
++ unsigned char Init_CR90_CRA7[CR90_CRA7_SIZE];
+};
+
+/**********************************************************************
@@ -10146,1183 +11785,6 @@ index 0000000..8599861
+};
+
+#define numVGAModes ARRAY_SIZE(VGAMode)
-diff --git a/drivers/staging/sm7xxfb/sm7xxfb.c b/drivers/staging/sm7xxfb/sm7xxfb.c
-new file mode 100644
-index 0000000..e40ce80
---- /dev/null
-+++ b/drivers/staging/sm7xxfb/sm7xxfb.c
-@@ -0,0 +1,1029 @@
-+/*
-+ * Silicon Motion SM7XX frame buffer device
-+ *
-+ * Copyright (C) 2006 Silicon Motion Technology Corp.
-+ * Authors: Ge Wang, gewang@siliconmotion.com
-+ * Boyod boyod.yang@siliconmotion.com.cn
-+ *
-+ * Copyright (C) 2009 Lemote, Inc.
-+ * Author: Wu Zhangjin, wuzhangjin@gmail.com
-+ *
-+ * Copyright (C) 2011 Igalia, S.L.
-+ * Author: Javier M. Mellid <jmunhoz@igalia.com>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ * Framebuffer driver for Silicon Motion SM710, SM712, SM721 and SM722 chips
-+ */
-+
-+#include <linux/io.h>
-+#include <linux/fb.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/uaccess.h>
-+#include <linux/module.h>
-+#include <linux/console.h>
-+#include <linux/screen_info.h>
-+
-+#ifdef CONFIG_PM
-+#include <linux/pm.h>
-+#endif
-+
-+#include "sm7xx.h"
-+
-+/*
-+* Private structure
-+*/
-+struct smtcfb_info {
-+ struct pci_dev *pdev;
-+ struct fb_info fb;
-+ u16 chip_id;
-+ u8 chip_rev_id;
-+
-+ void __iomem *lfb; /* linear frame buffer */
-+ void __iomem *dp_regs; /* drawing processor control regs */
-+ void __iomem *vp_regs; /* video processor control regs */
-+ void __iomem *cp_regs; /* capture processor control regs */
-+ void __iomem *mmio; /* memory map IO port */
-+
-+ u_int width;
-+ u_int height;
-+ u_int hz;
-+
-+ u32 colreg[17];
-+};
-+
-+void __iomem *smtc_RegBaseAddress; /* Memory Map IO starting address */
-+
-+static struct fb_var_screeninfo smtcfb_var = {
-+ .xres = 1024,
-+ .yres = 600,
-+ .xres_virtual = 1024,
-+ .yres_virtual = 600,
-+ .bits_per_pixel = 16,
-+ .red = {16, 8, 0},
-+ .green = {8, 8, 0},
-+ .blue = {0, 8, 0},
-+ .activate = FB_ACTIVATE_NOW,
-+ .height = -1,
-+ .width = -1,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+ .nonstd = 0,
-+ .accel_flags = FB_ACCELF_TEXT,
-+};
-+
-+static struct fb_fix_screeninfo smtcfb_fix = {
-+ .id = "smXXXfb",
-+ .type = FB_TYPE_PACKED_PIXELS,
-+ .visual = FB_VISUAL_TRUECOLOR,
-+ .line_length = 800 * 3,
-+ .accel = FB_ACCEL_SMI_LYNX,
-+ .type_aux = 0,
-+ .xpanstep = 0,
-+ .ypanstep = 0,
-+ .ywrapstep = 0,
-+};
-+
-+struct vesa_mode {
-+ char index[6];
-+ u16 lfb_width;
-+ u16 lfb_height;
-+ u16 lfb_depth;
-+};
-+
-+static struct vesa_mode vesa_mode_table[] = {
-+ {"0x301", 640, 480, 8},
-+ {"0x303", 800, 600, 8},
-+ {"0x305", 1024, 768, 8},
-+ {"0x307", 1280, 1024, 8},
-+
-+ {"0x311", 640, 480, 16},
-+ {"0x313", 800, 480, 16},
-+ {"0x314", 800, 600, 16},
-+ {"0x317", 1024, 768, 16},
-+ {"0x31A", 1280, 1024, 16},
-+
-+ {"0x312", 640, 480, 24},
-+ {"0x315", 800, 600, 24},
-+ {"0x318", 1024, 768, 24},
-+ {"0x31B", 1280, 1024, 24},
-+};
-+
-+struct screen_info smtc_scr_info;
-+
-+/* process command line options, get vga parameter */
-+static int __init sm7xx_vga_setup(char *options)
-+{
-+ int i;
-+
-+ if (!options || !*options)
-+ return -EINVAL;
-+
-+ smtc_scr_info.lfb_width = 0;
-+ smtc_scr_info.lfb_height = 0;
-+ smtc_scr_info.lfb_depth = 0;
-+
-+ pr_debug("sm7xx_vga_setup = %s\n", options);
-+
-+ for (i = 0; i < ARRAY_SIZE(vesa_mode_table); i++) {
-+ if (strstr(options, vesa_mode_table[i].index)) {
-+ smtc_scr_info.lfb_width = vesa_mode_table[i].lfb_width;
-+ smtc_scr_info.lfb_height =
-+ vesa_mode_table[i].lfb_height;
-+ smtc_scr_info.lfb_depth = vesa_mode_table[i].lfb_depth;
-+ return 0;
-+ }
-+ }
-+
-+ return -1;
-+}
-+__setup("vga=", sm7xx_vga_setup);
-+
-+static void sm712_setpalette(int regno, unsigned red, unsigned green,
-+ unsigned blue, struct fb_info *info)
-+{
-+ /* set bit 5:4 = 01 (write LCD RAM only) */
-+ smtc_seqw(0x66, (smtc_seqr(0x66) & 0xC3) | 0x10);
-+
-+ smtc_mmiowb(regno, dac_reg);
-+ smtc_mmiowb(red >> 10, dac_val);
-+ smtc_mmiowb(green >> 10, dac_val);
-+ smtc_mmiowb(blue >> 10, dac_val);
-+}
-+
-+/* chan_to_field
-+ *
-+ * convert a colour value into a field position
-+ *
-+ * from pxafb.c
-+ */
-+
-+static inline unsigned int chan_to_field(unsigned int chan,
-+ struct fb_bitfield *bf)
-+{
-+ chan &= 0xffff;
-+ chan >>= 16 - bf->length;
-+ return chan << bf->offset;
-+}
-+
-+static int smtc_blank(int blank_mode, struct fb_info *info)
-+{
-+ /* clear DPMS setting */
-+ switch (blank_mode) {
-+ case FB_BLANK_UNBLANK:
-+ /* Screen On: HSync: On, VSync : On */
-+ smtc_seqw(0x01, (smtc_seqr(0x01) & (~0x20)));
-+ smtc_seqw(0x6a, 0x16);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x21, (smtc_seqr(0x21) & 0x77));
-+ smtc_seqw(0x22, (smtc_seqr(0x22) & (~0x30)));
-+ smtc_seqw(0x23, (smtc_seqr(0x23) & (~0xc0)));
-+ smtc_seqw(0x24, (smtc_seqr(0x24) | 0x01));
-+ smtc_seqw(0x31, (smtc_seqr(0x31) | 0x03));
-+ break;
-+ case FB_BLANK_NORMAL:
-+ /* Screen Off: HSync: On, VSync : On Soft blank */
-+ smtc_seqw(0x01, (smtc_seqr(0x01) & (~0x20)));
-+ smtc_seqw(0x6a, 0x16);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x22, (smtc_seqr(0x22) & (~0x30)));
-+ smtc_seqw(0x23, (smtc_seqr(0x23) & (~0xc0)));
-+ smtc_seqw(0x24, (smtc_seqr(0x24) | 0x01));
-+ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
-+ break;
-+ case FB_BLANK_VSYNC_SUSPEND:
-+ /* Screen On: HSync: On, VSync : Off */
-+ smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20));
-+ smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0)));
-+ smtc_seqw(0x6a, 0x0c);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88));
-+ smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x20));
-+ smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0x20));
-+ smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01)));
-+ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
-+ smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80));
-+ break;
-+ case FB_BLANK_HSYNC_SUSPEND:
-+ /* Screen On: HSync: Off, VSync : On */
-+ smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20));
-+ smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0)));
-+ smtc_seqw(0x6a, 0x0c);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88));
-+ smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x10));
-+ smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0xD8));
-+ smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01)));
-+ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
-+ smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80));
-+ break;
-+ case FB_BLANK_POWERDOWN:
-+ /* Screen On: HSync: Off, VSync : Off */
-+ smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20));
-+ smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0)));
-+ smtc_seqw(0x6a, 0x0c);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88));
-+ smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x30));
-+ smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0xD8));
-+ smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01)));
-+ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
-+ smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80));
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static int smtc_setcolreg(unsigned regno, unsigned red, unsigned green,
-+ unsigned blue, unsigned trans, struct fb_info *info)
-+{
-+ struct smtcfb_info *sfb;
-+ u32 val;
-+
-+ sfb = info->par;
-+
-+ if (regno > 255)
-+ return 1;
-+
-+ switch (sfb->fb.fix.visual) {
-+ case FB_VISUAL_DIRECTCOLOR:
-+ case FB_VISUAL_TRUECOLOR:
-+ /*
-+ * 16/32 bit true-colour, use pseudo-palette for 16 base color
-+ */
-+ if (regno < 16) {
-+ if (sfb->fb.var.bits_per_pixel == 16) {
-+ u32 *pal = sfb->fb.pseudo_palette;
-+ val = chan_to_field(red, &sfb->fb.var.red);
-+ val |= chan_to_field(green, &sfb->fb.var.green);
-+ val |= chan_to_field(blue, &sfb->fb.var.blue);
-+#ifdef __BIG_ENDIAN
-+ pal[regno] =
-+ ((red & 0xf800) >> 8) |
-+ ((green & 0xe000) >> 13) |
-+ ((green & 0x1c00) << 3) |
-+ ((blue & 0xf800) >> 3);
-+#else
-+ pal[regno] = val;
-+#endif
-+ } else {
-+ u32 *pal = sfb->fb.pseudo_palette;
-+ val = chan_to_field(red, &sfb->fb.var.red);
-+ val |= chan_to_field(green, &sfb->fb.var.green);
-+ val |= chan_to_field(blue, &sfb->fb.var.blue);
-+#ifdef __BIG_ENDIAN
-+ val =
-+ (val & 0xff00ff00 >> 8) |
-+ (val & 0x00ff00ff << 8);
-+#endif
-+ pal[regno] = val;
-+ }
-+ }
-+ break;
-+
-+ case FB_VISUAL_PSEUDOCOLOR:
-+ /* color depth 8 bit */
-+ sm712_setpalette(regno, red, green, blue, info);
-+ break;
-+
-+ default:
-+ return 1; /* unknown type */
-+ }
-+
-+ return 0;
-+
-+}
-+
-+#ifdef __BIG_ENDIAN
-+static ssize_t smtcfb_read(struct fb_info *info, char __user *buf, size_t
-+ count, loff_t *ppos)
-+{
-+ unsigned long p = *ppos;
-+
-+ u32 *buffer, *dst;
-+ u32 __iomem *src;
-+ int c, i, cnt = 0, err = 0;
-+ unsigned long total_size;
-+
-+ if (!info || !info->screen_base)
-+ return -ENODEV;
-+
-+ if (info->state != FBINFO_STATE_RUNNING)
-+ return -EPERM;
-+
-+ total_size = info->screen_size;
-+
-+ if (total_size == 0)
-+ total_size = info->fix.smem_len;
-+
-+ if (p >= total_size)
-+ return 0;
-+
-+ if (count >= total_size)
-+ count = total_size;
-+
-+ if (count + p > total_size)
-+ count = total_size - p;
-+
-+ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
-+ if (!buffer)
-+ return -ENOMEM;
-+
-+ src = (u32 __iomem *) (info->screen_base + p);
-+
-+ if (info->fbops->fb_sync)
-+ info->fbops->fb_sync(info);
-+
-+ while (count) {
-+ c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
-+ dst = buffer;
-+ for (i = c >> 2; i--;) {
-+ *dst = fb_readl(src++);
-+ *dst =
-+ (*dst & 0xff00ff00 >> 8) |
-+ (*dst & 0x00ff00ff << 8);
-+ dst++;
-+ }
-+ if (c & 3) {
-+ u8 *dst8 = (u8 *) dst;
-+ u8 __iomem *src8 = (u8 __iomem *) src;
-+
-+ for (i = c & 3; i--;) {
-+ if (i & 1) {
-+ *dst8++ = fb_readb(++src8);
-+ } else {
-+ *dst8++ = fb_readb(--src8);
-+ src8 += 2;
-+ }
-+ }
-+ src = (u32 __iomem *) src8;
-+ }
-+
-+ if (copy_to_user(buf, buffer, c)) {
-+ err = -EFAULT;
-+ break;
-+ }
-+ *ppos += c;
-+ buf += c;
-+ cnt += c;
-+ count -= c;
-+ }
-+
-+ kfree(buffer);
-+
-+ return (err) ? err : cnt;
-+}
-+
-+static ssize_t
-+smtcfb_write(struct fb_info *info, const char __user *buf, size_t count,
-+ loff_t *ppos)
-+{
-+ unsigned long p = *ppos;
-+
-+ u32 *buffer, *src;
-+ u32 __iomem *dst;
-+ int c, i, cnt = 0, err = 0;
-+ unsigned long total_size;
-+
-+ if (!info || !info->screen_base)
-+ return -ENODEV;
-+
-+ if (info->state != FBINFO_STATE_RUNNING)
-+ return -EPERM;
-+
-+ total_size = info->screen_size;
-+
-+ if (total_size == 0)
-+ total_size = info->fix.smem_len;
-+
-+ if (p > total_size)
-+ return -EFBIG;
-+
-+ if (count > total_size) {
-+ err = -EFBIG;
-+ count = total_size;
-+ }
-+
-+ if (count + p > total_size) {
-+ if (!err)
-+ err = -ENOSPC;
-+
-+ count = total_size - p;
-+ }
-+
-+ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
-+ if (!buffer)
-+ return -ENOMEM;
-+
-+ dst = (u32 __iomem *) (info->screen_base + p);
-+
-+ if (info->fbops->fb_sync)
-+ info->fbops->fb_sync(info);
-+
-+ while (count) {
-+ c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
-+ src = buffer;
-+
-+ if (copy_from_user(src, buf, c)) {
-+ err = -EFAULT;
-+ break;
-+ }
-+
-+ for (i = c >> 2; i--;) {
-+ fb_writel((*src & 0xff00ff00 >> 8) |
-+ (*src & 0x00ff00ff << 8), dst++);
-+ src++;
-+ }
-+ if (c & 3) {
-+ u8 *src8 = (u8 *) src;
-+ u8 __iomem *dst8 = (u8 __iomem *) dst;
-+
-+ for (i = c & 3; i--;) {
-+ if (i & 1) {
-+ fb_writeb(*src8++, ++dst8);
-+ } else {
-+ fb_writeb(*src8++, --dst8);
-+ dst8 += 2;
-+ }
-+ }
-+ dst = (u32 __iomem *) dst8;
-+ }
-+
-+ *ppos += c;
-+ buf += c;
-+ cnt += c;
-+ count -= c;
-+ }
-+
-+ kfree(buffer);
-+
-+ return (cnt) ? cnt : err;
-+}
-+#endif /* ! __BIG_ENDIAN */
-+
-+static void sm7xx_set_timing(struct smtcfb_info *sfb)
-+{
-+ int i = 0, j = 0;
-+ u32 m_nScreenStride;
-+
-+ dev_dbg(&sfb->pdev->dev,
-+ "sfb->width=%d sfb->height=%d "
-+ "sfb->fb.var.bits_per_pixel=%d sfb->hz=%d\n",
-+ sfb->width, sfb->height, sfb->fb.var.bits_per_pixel, sfb->hz);
-+
-+ for (j = 0; j < numVGAModes; j++) {
-+ if (VGAMode[j].mmSizeX == sfb->width &&
-+ VGAMode[j].mmSizeY == sfb->height &&
-+ VGAMode[j].bpp == sfb->fb.var.bits_per_pixel &&
-+ VGAMode[j].hz == sfb->hz) {
-+
-+ dev_dbg(&sfb->pdev->dev,
-+ "VGAMode[j].mmSizeX=%d VGAMode[j].mmSizeY=%d "
-+ "VGAMode[j].bpp=%d VGAMode[j].hz=%d\n",
-+ VGAMode[j].mmSizeX, VGAMode[j].mmSizeY,
-+ VGAMode[j].bpp, VGAMode[j].hz);
-+
-+ dev_dbg(&sfb->pdev->dev, "VGAMode index=%d\n", j);
-+
-+ smtc_mmiowb(0x0, 0x3c6);
-+
-+ smtc_seqw(0, 0x1);
-+
-+ smtc_mmiowb(VGAMode[j].Init_MISC, 0x3c2);
-+
-+ /* init SEQ register SR00 - SR04 */
-+ for (i = 0; i < SIZE_SR00_SR04; i++)
-+ smtc_seqw(i, VGAMode[j].Init_SR00_SR04[i]);
-+
-+ /* init SEQ register SR10 - SR24 */
-+ for (i = 0; i < SIZE_SR10_SR24; i++)
-+ smtc_seqw(i + 0x10,
-+ VGAMode[j].Init_SR10_SR24[i]);
-+
-+ /* init SEQ register SR30 - SR75 */
-+ for (i = 0; i < SIZE_SR30_SR75; i++)
-+ if ((i + 0x30) != 0x62 &&
-+ (i + 0x30) != 0x6a &&
-+ (i + 0x30) != 0x6b)
-+ smtc_seqw(i + 0x30,
-+ VGAMode[j].Init_SR30_SR75[i]);
-+
-+ /* init SEQ register SR80 - SR93 */
-+ for (i = 0; i < SIZE_SR80_SR93; i++)
-+ smtc_seqw(i + 0x80,
-+ VGAMode[j].Init_SR80_SR93[i]);
-+
-+ /* init SEQ register SRA0 - SRAF */
-+ for (i = 0; i < SIZE_SRA0_SRAF; i++)
-+ smtc_seqw(i + 0xa0,
-+ VGAMode[j].Init_SRA0_SRAF[i]);
-+
-+ /* init Graphic register GR00 - GR08 */
-+ for (i = 0; i < SIZE_GR00_GR08; i++)
-+ smtc_grphw(i, VGAMode[j].Init_GR00_GR08[i]);
-+
-+ /* init Attribute register AR00 - AR14 */
-+ for (i = 0; i < SIZE_AR00_AR14; i++)
-+ smtc_attrw(i, VGAMode[j].Init_AR00_AR14[i]);
-+
-+ /* init CRTC register CR00 - CR18 */
-+ for (i = 0; i < SIZE_CR00_CR18; i++)
-+ smtc_crtcw(i, VGAMode[j].Init_CR00_CR18[i]);
-+
-+ /* init CRTC register CR30 - CR4D */
-+ for (i = 0; i < SIZE_CR30_CR4D; i++)
-+ smtc_crtcw(i + 0x30,
-+ VGAMode[j].Init_CR30_CR4D[i]);
-+
-+ /* init CRTC register CR90 - CRA7 */
-+ for (i = 0; i < SIZE_CR90_CRA7; i++)
-+ smtc_crtcw(i + 0x90,
-+ VGAMode[j].Init_CR90_CRA7[i]);
-+ }
-+ }
-+ smtc_mmiowb(0x67, 0x3c2);
-+
-+ /* set VPR registers */
-+ writel(0x0, sfb->vp_regs + 0x0C);
-+ writel(0x0, sfb->vp_regs + 0x40);
-+
-+ /* set data width */
-+ m_nScreenStride =
-+ (sfb->width * sfb->fb.var.bits_per_pixel) / 64;
-+ switch (sfb->fb.var.bits_per_pixel) {
-+ case 8:
-+ writel(0x0, sfb->vp_regs + 0x0);
-+ break;
-+ case 16:
-+ writel(0x00020000, sfb->vp_regs + 0x0);
-+ break;
-+ case 24:
-+ writel(0x00040000, sfb->vp_regs + 0x0);
-+ break;
-+ case 32:
-+ writel(0x00030000, sfb->vp_regs + 0x0);
-+ break;
-+ }
-+ writel((u32) (((m_nScreenStride + 2) << 16) | m_nScreenStride),
-+ sfb->vp_regs + 0x10);
-+
-+}
-+
-+static void smtc_set_timing(struct smtcfb_info *sfb)
-+{
-+ switch (sfb->chip_id) {
-+ case 0x710:
-+ case 0x712:
-+ case 0x720:
-+ sm7xx_set_timing(sfb);
-+ break;
-+ }
-+}
-+
-+static void smtcfb_setmode(struct smtcfb_info *sfb)
-+{
-+ switch (sfb->fb.var.bits_per_pixel) {
-+ case 32:
-+ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
-+ sfb->fb.fix.line_length = sfb->fb.var.xres * 4;
-+ sfb->fb.var.red.length = 8;
-+ sfb->fb.var.green.length = 8;
-+ sfb->fb.var.blue.length = 8;
-+ sfb->fb.var.red.offset = 16;
-+ sfb->fb.var.green.offset = 8;
-+ sfb->fb.var.blue.offset = 0;
-+ break;
-+ case 24:
-+ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
-+ sfb->fb.fix.line_length = sfb->fb.var.xres * 3;
-+ sfb->fb.var.red.length = 8;
-+ sfb->fb.var.green.length = 8;
-+ sfb->fb.var.blue.length = 8;
-+ sfb->fb.var.red.offset = 16;
-+ sfb->fb.var.green.offset = 8;
-+ sfb->fb.var.blue.offset = 0;
-+ break;
-+ case 8:
-+ sfb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
-+ sfb->fb.fix.line_length = sfb->fb.var.xres;
-+ sfb->fb.var.red.length = 3;
-+ sfb->fb.var.green.length = 3;
-+ sfb->fb.var.blue.length = 2;
-+ sfb->fb.var.red.offset = 5;
-+ sfb->fb.var.green.offset = 2;
-+ sfb->fb.var.blue.offset = 0;
-+ break;
-+ case 16:
-+ default:
-+ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
-+ sfb->fb.fix.line_length = sfb->fb.var.xres * 2;
-+ sfb->fb.var.red.length = 5;
-+ sfb->fb.var.green.length = 6;
-+ sfb->fb.var.blue.length = 5;
-+ sfb->fb.var.red.offset = 11;
-+ sfb->fb.var.green.offset = 5;
-+ sfb->fb.var.blue.offset = 0;
-+ break;
-+ }
-+
-+ sfb->width = sfb->fb.var.xres;
-+ sfb->height = sfb->fb.var.yres;
-+ sfb->hz = 60;
-+ smtc_set_timing(sfb);
-+}
-+
-+static int smtc_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
-+{
-+ /* sanity checks */
-+ if (var->xres_virtual < var->xres)
-+ var->xres_virtual = var->xres;
-+
-+ if (var->yres_virtual < var->yres)
-+ var->yres_virtual = var->yres;
-+
-+ /* set valid default bpp */
-+ if ((var->bits_per_pixel != 8) && (var->bits_per_pixel != 16) &&
-+ (var->bits_per_pixel != 24) && (var->bits_per_pixel != 32))
-+ var->bits_per_pixel = 16;
-+
-+ return 0;
-+}
-+
-+static int smtc_set_par(struct fb_info *info)
-+{
-+ smtcfb_setmode(info->par);
-+
-+ return 0;
-+}
-+
-+static struct fb_ops smtcfb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_check_var = smtc_check_var,
-+ .fb_set_par = smtc_set_par,
-+ .fb_setcolreg = smtc_setcolreg,
-+ .fb_blank = smtc_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_copyarea = cfb_copyarea,
-+#ifdef __BIG_ENDIAN
-+ .fb_read = smtcfb_read,
-+ .fb_write = smtcfb_write,
-+#endif
-+};
-+
-+/*
-+ * alloc struct smtcfb_info and assign default values
-+ */
-+static struct smtcfb_info *smtc_alloc_fb_info(struct pci_dev *pdev)
-+{
-+ struct smtcfb_info *sfb;
-+
-+ sfb = kzalloc(sizeof(*sfb), GFP_KERNEL);
-+
-+ if (!sfb)
-+ return NULL;
-+
-+ sfb->pdev = pdev;
-+
-+ sfb->fb.flags = FBINFO_FLAG_DEFAULT;
-+ sfb->fb.fbops = &smtcfb_ops;
-+ sfb->fb.fix = smtcfb_fix;
-+ sfb->fb.var = smtcfb_var;
-+ sfb->fb.pseudo_palette = sfb->colreg;
-+ sfb->fb.par = sfb;
-+
-+ return sfb;
-+}
-+
-+/*
-+ * free struct smtcfb_info
-+ */
-+static void smtc_free_fb_info(struct smtcfb_info *sfb)
-+{
-+ kfree(sfb);
-+}
-+
-+/*
-+ * Unmap in the memory mapped IO registers
-+ */
-+
-+static void smtc_unmap_mmio(struct smtcfb_info *sfb)
-+{
-+ if (sfb && smtc_RegBaseAddress)
-+ smtc_RegBaseAddress = NULL;
-+}
-+
-+/*
-+ * Map in the screen memory
-+ */
-+
-+static int smtc_map_smem(struct smtcfb_info *sfb,
-+ struct pci_dev *pdev, u_long smem_len)
-+{
-+
-+ sfb->fb.fix.smem_start = pci_resource_start(pdev, 0);
-+
-+#ifdef __BIG_ENDIAN
-+ if (sfb->fb.var.bits_per_pixel == 32)
-+ sfb->fb.fix.smem_start += 0x800000;
-+#endif
-+
-+ sfb->fb.fix.smem_len = smem_len;
-+
-+ sfb->fb.screen_base = sfb->lfb;
-+
-+ if (!sfb->fb.screen_base) {
-+ dev_err(&pdev->dev,
-+ "%s: unable to map screen memory\n", sfb->fb.fix.id);
-+ return -ENOMEM;
-+ }
-+
-+ return 0;
-+}
-+
-+/*
-+ * Unmap in the screen memory
-+ *
-+ */
-+static void smtc_unmap_smem(struct smtcfb_info *sfb)
-+{
-+ if (sfb && sfb->fb.screen_base) {
-+ iounmap(sfb->fb.screen_base);
-+ sfb->fb.screen_base = NULL;
-+ }
-+}
-+
-+/*
-+ * We need to wake up the device and make sure its in linear memory mode.
-+ */
-+static inline void sm7xx_init_hw(void)
-+{
-+ outb_p(0x18, 0x3c4);
-+ outb_p(0x11, 0x3c5);
-+}
-+
-+static int smtcfb_pci_probe(struct pci_dev *pdev,
-+ const struct pci_device_id *ent)
-+{
-+ struct smtcfb_info *sfb;
-+ u_long smem_size = 0x00800000; /* default 8MB */
-+ int err;
-+ unsigned long mmio_base;
-+
-+ dev_info(&pdev->dev, "Silicon Motion display driver.");
-+
-+ err = pci_enable_device(pdev); /* enable SMTC chip */
-+ if (err)
-+ return err;
-+
-+ sprintf(smtcfb_fix.id, "sm%Xfb", ent->device);
-+
-+ sfb = smtc_alloc_fb_info(pdev);
-+
-+ if (!sfb) {
-+ err = -ENOMEM;
-+ goto failed_free;
-+ }
-+
-+ sfb->chip_id = ent->device;
-+
-+ pci_set_drvdata(pdev, sfb);
-+
-+ sm7xx_init_hw();
-+
-+ /* get mode parameter from smtc_scr_info */
-+ if (smtc_scr_info.lfb_width != 0) {
-+ sfb->fb.var.xres = smtc_scr_info.lfb_width;
-+ sfb->fb.var.yres = smtc_scr_info.lfb_height;
-+ sfb->fb.var.bits_per_pixel = smtc_scr_info.lfb_depth;
-+ } else {
-+ /* default resolution 1024x600 16bit mode */
-+ sfb->fb.var.xres = SCREEN_X_RES;
-+ sfb->fb.var.yres = SCREEN_Y_RES;
-+ sfb->fb.var.bits_per_pixel = SCREEN_BPP;
-+ }
-+
-+#ifdef __BIG_ENDIAN
-+ if (sfb->fb.var.bits_per_pixel == 24)
-+ sfb->fb.var.bits_per_pixel = (smtc_scr_info.lfb_depth = 32);
-+#endif
-+ /* Map address and memory detection */
-+ mmio_base = pci_resource_start(pdev, 0);
-+ pci_read_config_byte(pdev, PCI_REVISION_ID, &sfb->chip_rev_id);
-+
-+ switch (sfb->chip_id) {
-+ case 0x710:
-+ case 0x712:
-+ sfb->fb.fix.mmio_start = mmio_base + 0x00400000;
-+ sfb->fb.fix.mmio_len = 0x00400000;
-+ smem_size = SM712_VIDEOMEMORYSIZE;
-+#ifdef __BIG_ENDIAN
-+ sfb->lfb = ioremap(mmio_base, 0x00c00000);
-+#else
-+ sfb->lfb = ioremap(mmio_base, 0x00800000);
-+#endif
-+ sfb->mmio = (smtc_RegBaseAddress =
-+ sfb->lfb + 0x00700000);
-+ sfb->dp_regs = sfb->lfb + 0x00408000;
-+ sfb->vp_regs = sfb->lfb + 0x0040c000;
-+#ifdef __BIG_ENDIAN
-+ if (sfb->fb.var.bits_per_pixel == 32) {
-+ sfb->lfb += 0x800000;
-+ dev_info(&pdev->dev, "sfb->lfb=%p", sfb->lfb);
-+ }
-+#endif
-+ if (!smtc_RegBaseAddress) {
-+ dev_err(&pdev->dev,
-+ "%s: unable to map memory mapped IO!",
-+ sfb->fb.fix.id);
-+ err = -ENOMEM;
-+ goto failed_fb;
-+ }
-+
-+ /* set MCLK = 14.31818 * (0x16 / 0x2) */
-+ smtc_seqw(0x6a, 0x16);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x62, 0x3e);
-+ /* enable PCI burst */
-+ smtc_seqw(0x17, 0x20);
-+ /* enable word swap */
-+#ifdef __BIG_ENDIAN
-+ if (sfb->fb.var.bits_per_pixel == 32)
-+ smtc_seqw(0x17, 0x30);
-+#endif
-+ break;
-+ case 0x720:
-+ sfb->fb.fix.mmio_start = mmio_base;
-+ sfb->fb.fix.mmio_len = 0x00200000;
-+ smem_size = SM722_VIDEOMEMORYSIZE;
-+ sfb->dp_regs = ioremap(mmio_base, 0x00a00000);
-+ sfb->lfb = sfb->dp_regs + 0x00200000;
-+ sfb->mmio = (smtc_RegBaseAddress =
-+ sfb->dp_regs + 0x000c0000);
-+ sfb->vp_regs = sfb->dp_regs + 0x800;
-+
-+ smtc_seqw(0x62, 0xff);
-+ smtc_seqw(0x6a, 0x0d);
-+ smtc_seqw(0x6b, 0x02);
-+ break;
-+ default:
-+ dev_err(&pdev->dev,
-+ "No valid Silicon Motion display chip was detected!");
-+
-+ goto failed_fb;
-+ }
-+
-+ /* can support 32 bpp */
-+ if (15 == sfb->fb.var.bits_per_pixel)
-+ sfb->fb.var.bits_per_pixel = 16;
-+
-+ sfb->fb.var.xres_virtual = sfb->fb.var.xres;
-+ sfb->fb.var.yres_virtual = sfb->fb.var.yres;
-+ err = smtc_map_smem(sfb, pdev, smem_size);
-+ if (err)
-+ goto failed;
-+
-+ smtcfb_setmode(sfb);
-+
-+ err = register_framebuffer(&sfb->fb);
-+ if (err < 0)
-+ goto failed;
-+
-+ dev_info(&pdev->dev,
-+ "Silicon Motion SM%X Rev%X primary display mode %dx%d-%d Init Complete.",
-+ sfb->chip_id, sfb->chip_rev_id, sfb->fb.var.xres,
-+ sfb->fb.var.yres, sfb->fb.var.bits_per_pixel);
-+
-+ return 0;
-+
-+failed:
-+ dev_err(&pdev->dev, "Silicon Motion, Inc. primary display init fail.");
-+
-+ smtc_unmap_smem(sfb);
-+ smtc_unmap_mmio(sfb);
-+failed_fb:
-+ smtc_free_fb_info(sfb);
-+
-+failed_free:
-+ pci_disable_device(pdev);
-+
-+ return err;
-+}
-+
-+/*
-+ * 0x710 (LynxEM)
-+ * 0x712 (LynxEM+)
-+ * 0x720 (Lynx3DM, Lynx3DM+)
-+ */
-+static const struct pci_device_id smtcfb_pci_table[] = {
-+ { PCI_DEVICE(0x126f, 0x710), },
-+ { PCI_DEVICE(0x126f, 0x712), },
-+ { PCI_DEVICE(0x126f, 0x720), },
-+ {0,}
-+};
-+
-+static void smtcfb_pci_remove(struct pci_dev *pdev)
-+{
-+ struct smtcfb_info *sfb;
-+
-+ sfb = pci_get_drvdata(pdev);
-+ smtc_unmap_smem(sfb);
-+ smtc_unmap_mmio(sfb);
-+ unregister_framebuffer(&sfb->fb);
-+ smtc_free_fb_info(sfb);
-+}
-+
-+#ifdef CONFIG_PM
-+static int smtcfb_pci_suspend(struct device *device)
-+{
-+ struct pci_dev *pdev = to_pci_dev(device);
-+ struct smtcfb_info *sfb;
-+
-+ sfb = pci_get_drvdata(pdev);
-+
-+ /* set the hw in sleep mode use external clock and self memory refresh
-+ * so that we can turn off internal PLLs later on
-+ */
-+ smtc_seqw(0x20, (smtc_seqr(0x20) | 0xc0));
-+ smtc_seqw(0x69, (smtc_seqr(0x69) & 0xf7));
-+
-+ console_lock();
-+ fb_set_suspend(&sfb->fb, 1);
-+ console_unlock();
-+
-+ /* additionally turn off all function blocks including internal PLLs */
-+ smtc_seqw(0x21, 0xff);
-+
-+ return 0;
-+}
-+
-+static int smtcfb_pci_resume(struct device *device)
-+{
-+ struct pci_dev *pdev = to_pci_dev(device);
-+ struct smtcfb_info *sfb;
-+
-+ sfb = pci_get_drvdata(pdev);
-+
-+ /* reinit hardware */
-+ sm7xx_init_hw();
-+ switch (sfb->chip_id) {
-+ case 0x710:
-+ case 0x712:
-+ /* set MCLK = 14.31818 * (0x16 / 0x2) */
-+ smtc_seqw(0x6a, 0x16);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x62, 0x3e);
-+ /* enable PCI burst */
-+ smtc_seqw(0x17, 0x20);
-+#ifdef __BIG_ENDIAN
-+ if (sfb->fb.var.bits_per_pixel == 32)
-+ smtc_seqw(0x17, 0x30);
-+#endif
-+ break;
-+ case 0x720:
-+ smtc_seqw(0x62, 0xff);
-+ smtc_seqw(0x6a, 0x0d);
-+ smtc_seqw(0x6b, 0x02);
-+ break;
-+ }
-+
-+ smtc_seqw(0x34, (smtc_seqr(0x34) | 0xc0));
-+ smtc_seqw(0x33, ((smtc_seqr(0x33) | 0x08) & 0xfb));
-+
-+ smtcfb_setmode(sfb);
-+
-+ console_lock();
-+ fb_set_suspend(&sfb->fb, 0);
-+ console_unlock();
-+
-+ return 0;
-+}
-+
-+static SIMPLE_DEV_PM_OPS(sm7xx_pm_ops, smtcfb_pci_suspend, smtcfb_pci_resume);
-+#define SM7XX_PM_OPS (&sm7xx_pm_ops)
-+
-+#else /* !CONFIG_PM */
-+
-+#define SM7XX_PM_OPS NULL
-+
-+#endif /* !CONFIG_PM */
-+
-+static struct pci_driver smtcfb_driver = {
-+ .name = "smtcfb",
-+ .id_table = smtcfb_pci_table,
-+ .probe = smtcfb_pci_probe,
-+ .remove = smtcfb_pci_remove,
-+ .driver.pm = SM7XX_PM_OPS,
-+};
-+
-+module_pci_driver(smtcfb_driver);
-+
-+MODULE_AUTHOR("Siliconmotion ");
-+MODULE_DESCRIPTION("Framebuffer driver for SMI Graphic Cards");
-+MODULE_LICENSE("GPL");
-diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
-index f98d03f..09cf729 100644
---- a/drivers/usb/host/ohci-hcd.c
-+++ b/drivers/usb/host/ohci-hcd.c
-@@ -864,9 +864,13 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
- }
-
- if (ints & OHCI_INTR_WDH) {
-- spin_lock (&ohci->lock);
-- dl_done_list (ohci);
-- spin_unlock (&ohci->lock);
-+ if (ohci->hcca->done_head == 0) {
-+ ints &= ~OHCI_INTR_WDH;
-+ } else {
-+ spin_lock (&ohci->lock);
-+ dl_done_list (ohci);
-+ spin_unlock (&ohci->lock);
-+ }
- }
-
- if (quirk_zfmicro(ohci) && (ints & OHCI_INTR_SF)) {
-diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
-index 2f3aceb..6647c3f 100644
---- a/drivers/usb/host/pci-quirks.c
-+++ b/drivers/usb/host/pci-quirks.c
-@@ -454,6 +454,7 @@ void usb_amd_dev_put(void)
- }
- EXPORT_SYMBOL_GPL(usb_amd_dev_put);
-
-+#if defined(CONFIG_USB_UHCI_HCD) || defined(CONFIG_USB_UHCI_HCD_MODULE)
- /*
- * Make sure the controller is completely inactive, unable to
- * generate interrupts or do DMA.
-@@ -561,12 +562,16 @@ static void quirk_usb_handoff_uhci(struct pci_dev *pdev)
- if (base)
- uhci_check_and_reset_hc(pdev, base);
- }
-+#else
-+#define quirk_usb_handoff_uhci(x) do { } while (0)
-+#endif /* CONFIG_USB_UHCI_HCD* */
-
- static int mmio_resource_enabled(struct pci_dev *pdev, int idx)
- {
- return pci_resource_start(pdev, idx) && mmio_enabled(pdev);
- }
-
-+#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
- static void quirk_usb_handoff_ohci(struct pci_dev *pdev)
- {
- void __iomem *base;
-@@ -633,7 +638,11 @@ static void quirk_usb_handoff_ohci(struct pci_dev *pdev)
- /* Now the controller is safely in SUSPEND and nothing can wake it up */
- iounmap(base);
- }
-+#else
-+#define quirk_usb_handoff_ohci(x) do { } while(0)
-+#endif /* CONFIG_USB_OHCI_HCD* */
-
-+#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE)
- static const struct dmi_system_id ehci_dmi_nohandoff_table[] = {
- {
- /* Pegatron Lucid (ExoPC) */
-@@ -806,6 +815,9 @@ static void quirk_usb_disable_ehci(struct pci_dev *pdev)
-
- iounmap(base);
- }
-+#else
-+#define quirk_usb_disable_ehci(x) do { } while (0)
-+#endif /* CONFIG_USB_EHCI_HCD* */
-
- /*
- * handshake - spin reading a register until handshake completes
-@@ -945,6 +957,7 @@ void usb_disable_xhci_ports(struct pci_dev *xhci_pdev)
- }
- EXPORT_SYMBOL_GPL(usb_disable_xhci_ports);
-
-+#if defined(CONFIG_USB_XHCI_HCD) || defined(CONFIG_USB_XHCI_HCD_MODULE)
- /**
- * PCI Quirks for xHCI.
- *
-@@ -1052,6 +1065,9 @@ hc_init:
-
- iounmap(base);
- }
-+#else
-+#define quirk_usb_handoff_xhci(x) do { } while (0)
-+#endif /* CONFIG_USB_UHCI_HCD* */
-
- static void quirk_usb_early_handoff(struct pci_dev *pdev)
- {
-diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
-index a968894..0bfa2cb 100644
---- a/drivers/usb/serial/option.c
-+++ b/drivers/usb/serial/option.c
-@@ -79,6 +79,9 @@ static void option_instat_callback(struct urb *urb);
- #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100
- #define OPTION_PRODUCT_GTM380_MODEM 0x7201
-
-+#define HUAWO_VENDOR_ID 0x21F5
-+#define HUAWO_PRODUCT_E1621 0x2008
-+
- #define HUAWEI_VENDOR_ID 0x12D1
- #define HUAWEI_PRODUCT_E173 0x140C
- #define HUAWEI_PRODUCT_E1750 0x1406
-@@ -610,6 +613,7 @@ static const struct usb_device_id option_ids[] = {
- { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) },
- { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42),
- .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
-+ { USB_DEVICE(HUAWO_VENDOR_ID, HUAWO_PRODUCT_E1621) }, /* QUANTA 6500 chips, Unicom extensive use of this card */
- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) },
- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c1f, USB_CLASS_COMM, 0x02, 0xff) },
- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) },
-diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
-index 8bf495f..f6a15b6 100644
---- a/drivers/video/Kconfig
-+++ b/drivers/video/Kconfig
-@@ -36,6 +36,12 @@ config VGASTATE
- tristate
- default n
-
-+config VIDEO_OUTPUT_CONTROL
-+ tristate "Lowlevel video output switch controls"
-+ help
-+ This framework adds support for low-level control of the video
-+ output switch.
-+
- config VIDEOMODE_HELPERS
- bool
-
-diff --git a/drivers/video/Makefile b/drivers/video/Makefile
-index 9ad3c17..3d869d9 100644
---- a/drivers/video/Makefile
-+++ b/drivers/video/Makefile
-@@ -7,6 +7,8 @@ obj-y += backlight/
-
- obj-y += fbdev/
-
-+#video output switch sysfs driver
-+obj-$(CONFIG_VIDEO_OUTPUT_CONTROL) += output.o
- obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o
- ifeq ($(CONFIG_OF),y)
- obj-$(CONFIG_VIDEOMODE_HELPERS) += of_display_timing.o of_videomode.o
diff --git a/drivers/video/output.c b/drivers/video/output.c
new file mode 100644
index 0000000..1446c49
@@ -11548,7 +12010,7 @@ index 0000000..ed5cdeb
+#endif
+#endif
diff --git a/init/calibrate.c b/init/calibrate.c
-index 520702d..e78762a 100644
+index ce635dc..10e775d 100644
--- a/init/calibrate.c
+++ b/init/calibrate.c
@@ -21,6 +21,7 @@ static int __init lpj_setup(char *str)
@@ -11567,7 +12029,7 @@ index 520702d..e78762a 100644
/*
* This is the number of bits of precision for the loops_per_jiffy. Each
-@@ -282,6 +284,7 @@ void calibrate_delay(void)
+@@ -291,6 +293,7 @@ void calibrate_delay(void)
lpj = lpj_fine;
pr_info("Calibrating delay loop (skipped), "
"value calculated using timer frequency.. ");
@@ -11575,7 +12037,7 @@ index 520702d..e78762a 100644
} else if ((lpj = calibrate_delay_is_known())) {
;
} else if ((lpj = calibrate_delay_direct()) != 0) {
-@@ -292,6 +295,7 @@ void calibrate_delay(void)
+@@ -301,6 +304,7 @@ void calibrate_delay(void)
if (!printed)
pr_info("Calibrating delay loop... ");
lpj = calibrate_delay_converge();
diff --git a/libre/linux-libre-grsec/PKGBUILD b/libre/linux-libre-grsec/PKGBUILD
index 211b99983..892f584d3 100644
--- a/libre/linux-libre-grsec/PKGBUILD
+++ b/libre/linux-libre-grsec/PKGBUILD
@@ -11,10 +11,10 @@
# Contributor: Luke Shumaker <lukeshu@sbcglobal.net>
pkgbase=linux-libre-grsec # Build kernel with -grsec localname
-_pkgbasever=3.16-gnu
-_pkgver=3.16.5-gnu
+_pkgbasever=3.17-gnu
+_pkgver=3.17.1-gnu
_grsecver=3.0
-_timestamp=201410132000
+_timestamp=201410192051
_replacesarchkernel=('linux%') # '%' gets replaced with _kernelname
_replacesoldkernels=('kernel26%' 'kernel26-libre%') # '%' gets replaced with _kernelname
@@ -39,24 +39,22 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/li
'linux.preset'
'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm}
'change-default-console-loglevel.patch'
- 'compal-laptop-hwmon-fix.patch'
# loongson-community patch: http://linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/
# Note: Makefile patching was removed due which we are using specific flags from grsecurity patch
- '3.16-7981337ad0-loongson-community.patch')
-sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218'
- '76b5d0a068cc6c5b5dfa34c3ed7e364fd0809801a05c782f8f88fa6925247838'
- '579bfdfba7bcc61d0d2618afc143d11f1303e71034d9fa80a0a02c21b98f0251'
+ '3.17-rc6-5358c5e4e5-loongson-community.patch')
+sha256sums=('3b2e9a862ada390a318f95d5a436d07dd32664434f4f383e27fd5cc0b4f41f0e'
+ '1df6d36bc384d5766083cec9dc95c0d1f20888a95e5c2663bc95028d55d5f246'
+ '15bcd5b1d14e3cd47169816e95c29ebcd8d20dc3fc9fc8e97932d6d29a81c8db'
'SKIP'
- '12e2eb2c9ff307f0b1015925dd690ff82d5e092a41a8fd2284379d328de5e3bb'
- '08cf6f851f77b1af3c859049e439eadc940a4d7326f5c8a35eb86ce8b284df42'
- '6177c83a823986ddf4e49f1a0af06a2913c0f8463a97bd6dc18e3ba4fee43d42'
+ '39fb8e83eefccb819c26f7712d1c823dae5cc7ed9233498f77cd9f3dc1bf02b6'
+ 'a996031aeea4ece477a15c933569eb42420cc58c2df71c9ded2c3a1774ab5f1b'
+ 'd81c554013789045ff96fe9485f8e936c510b562da31f2b210316b7be16c9599'
'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c'
'074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264'
'2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53'
'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015'
'1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99'
- 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588'
- '210661b9e697e011cdfe1507fb250eaf7af3d00f4de115d95a01b0e33b1481ff')
+ '95b933f692c982496d2d7a16e9d44d72beb2f7fa664a3321b2fa71b37029d0fc')
_kernelname=${pkgbase#linux-libre}
_replacesarchkernel=("${_replacesarchkernel[@]/\%/${_kernelname}}")
@@ -92,9 +90,6 @@ prepare() {
# (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227)
patch -p1 -i "${srcdir}/change-default-console-loglevel.patch"
- # #41458 fix hwmon for compal-laptop module
- patch -p1 -i "${srcdir}/compal-laptop-hwmon-fix.patch"
-
# Adding loongson-community patch
if [ "${CARCH}" == "mips64el" ]; then
patch -p1 -i ${srcdir}/3.16-7981337ad0-loongson-community.patch
@@ -294,7 +289,8 @@ _package-headers() {
# add xfs and shmem for aufs building
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/fs/xfs"
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/mm"
- cp fs/xfs/xfs_sb.h "${pkgdir}/usr/lib/modules/${_kernver}/build/fs/xfs/xfs_sb.h"
+ # removed in 3.17-gnu series
+ # cp fs/xfs/xfs_sb.h "${pkgdir}/usr/lib/modules/${_kernver}/build/fs/xfs/xfs_sb.h"
# copy in Kconfig files
for i in $(find . -name "Kconfig*"); do
diff --git a/libre/linux-libre-grsec/compal-laptop-hwmon-fix.patch b/libre/linux-libre-grsec/compal-laptop-hwmon-fix.patch
deleted file mode 100644
index f8723576c..000000000
--- a/libre/linux-libre-grsec/compal-laptop-hwmon-fix.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/drivers/platform/x86/compal-laptop.c b/drivers/platform/x86/compal-laptop.c
-index 7297df2..26bfd7b 100644
---- a/drivers/platform/x86/compal-laptop.c
-+++ b/drivers/platform/x86/compal-laptop.c
-@@ -1028,7 +1028,7 @@ static int compal_probe(struct platform_device *pdev)
- return err;
-
- hwmon_dev = hwmon_device_register_with_groups(&pdev->dev,
-- DRIVER_NAME, data,
-+ "compal", data,
- compal_hwmon_groups);
- if (IS_ERR(hwmon_dev)) {
- err = PTR_ERR(hwmon_dev);
-
diff --git a/libre/linux-libre-grsec/config.i686 b/libre/linux-libre-grsec/config.i686
index 1c41a24ca..2aebc7174 100644
--- a/libre/linux-libre-grsec/config.i686
+++ b/libre/linux-libre-grsec/config.i686
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.16.3-gnu-201409180901-1-grsec Kernel Configuration
+# Linux/x86 3.17.1-gnu-201410192051-1 Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
@@ -88,8 +88,8 @@ CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_ARCH_CLOCKSOURCE_DATA=y
+CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
CONFIG_GENERIC_TIME_VSYSCALL=y
-CONFIG_KTIME_SCALAR=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
@@ -131,9 +131,11 @@ CONFIG_RCU_FAST_NO_HZ=y
# CONFIG_TREE_RCU_TRACE is not set
# CONFIG_RCU_BOOST is not set
# CONFIG_RCU_NOCB_CPU is not set
+CONFIG_BUILD_BIN2C=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=19
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_ARCH_WANTS_PROT_NUMA_PROT_NONE=y
CONFIG_CGROUPS=y
@@ -213,7 +215,7 @@ CONFIG_SLUB_DEBUG=y
# CONFIG_SLAB is not set
CONFIG_SLUB=y
CONFIG_SLUB_CPU_PARTIAL=y
-# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
+CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_PROFILING=y
CONFIG_TRACEPOINTS=y
CONFIG_OPROFILE=m
@@ -469,8 +471,9 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
CONFIG_CLEANCACHE=y
CONFIG_FRONTSWAP=y
# CONFIG_CMA is not set
-CONFIG_ZBUD=y
CONFIG_ZSWAP=y
+CONFIG_ZPOOL=y
+CONFIG_ZBUD=y
CONFIG_ZSMALLOC=y
# CONFIG_PGTABLE_MAPPING is not set
CONFIG_GENERIC_EARLY_IOREMAP=y
@@ -532,6 +535,8 @@ CONFIG_PM_TRACE_RTC=y
CONFIG_PM_CLK=y
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
CONFIG_ACPI=y
+CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y
+CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
CONFIG_ACPI_SLEEP=y
# CONFIG_ACPI_PROCFS_POWER is not set
CONFIG_ACPI_EC_DEBUGFS=m
@@ -557,6 +562,8 @@ CONFIG_ACPI_HED=y
CONFIG_ACPI_CUSTOM_METHOD=m
CONFIG_ACPI_BGRT=y
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
+CONFIG_HAVE_ACPI_APEI=y
+CONFIG_HAVE_ACPI_APEI_NMI=y
CONFIG_ACPI_APEI=y
CONFIG_ACPI_APEI_GHES=y
CONFIG_ACPI_APEI_PCIEAER=y
@@ -623,7 +630,6 @@ CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
# CPU Idle
#
CONFIG_CPU_IDLE=y
-# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set
@@ -741,6 +747,7 @@ CONFIG_BINFMT_MISC=y
CONFIG_COREDUMP=y
CONFIG_HAVE_ATOMIC_IOMAP=y
CONFIG_IOSF_MBI=m
+CONFIG_PMC_ATOM=y
CONFIG_NET=y
#
@@ -779,6 +786,7 @@ CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=m
+CONFIG_NET_UDP_TUNNEL=m
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
@@ -832,6 +840,7 @@ CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
# CONFIG_IPV6_MROUTE is not set
CONFIG_NETWORK_SECMARK=y
+CONFIG_NET_PTP_CLASSIFY=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
@@ -846,6 +855,7 @@ CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NF_CONNTRACK=m
+CONFIG_NF_LOG_COMMON=m
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
@@ -923,6 +933,7 @@ CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_NAT=m
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
@@ -1049,11 +1060,18 @@ CONFIG_IP_VS_PE_SIP=m
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_CONNTRACK_IPV4=m
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+CONFIG_NF_LOG_ARP=m
+CONFIG_NF_LOG_IPV4=m
CONFIG_NF_TABLES_IPV4=m
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
CONFIG_NFT_CHAIN_NAT_IPV4=m
CONFIG_NFT_REJECT_IPV4=m
CONFIG_NF_TABLES_ARP=m
+CONFIG_NF_NAT_IPV4=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
@@ -1062,15 +1080,10 @@ CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_SYNPROXY=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_NF_NAT_IPV4=m
+CONFIG_IP_NF_NAT=m
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_GRE=m
-CONFIG_NF_NAT_PPTP=m
-CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_TARGET_ECN=m
@@ -1089,6 +1102,8 @@ CONFIG_NF_TABLES_IPV6=m
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
CONFIG_NFT_CHAIN_NAT_IPV6=m
CONFIG_NFT_REJECT_IPV6=m
+CONFIG_NF_LOG_IPV6=m
+CONFIG_NF_NAT_IPV6=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
@@ -1105,11 +1120,13 @@ CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
-CONFIG_NF_NAT_IPV6=m
+CONFIG_IP6_NF_NAT=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_NF_TABLES_BRIDGE=m
CONFIG_NFT_BRIDGE_META=m
+CONFIG_NFT_BRIDGE_REJECT=m
+CONFIG_NF_LOG_BRIDGE=m
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -1130,7 +1147,6 @@ 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=m
CONFIG_INET_DCCP_DIAG=m
@@ -1191,9 +1207,9 @@ CONFIG_LLC2=m
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
CONFIG_PHONET=m
+CONFIG_6LOWPAN=m
CONFIG_IEEE802154=m
CONFIG_IEEE802154_6LOWPAN=m
-CONFIG_6LOWPAN_IPHC=m
CONFIG_MAC802154=m
CONFIG_NET_SCHED=y
@@ -1371,7 +1387,7 @@ CONFIG_VLSI_FIR=m
CONFIG_VIA_FIR=m
CONFIG_MCS_FIR=m
CONFIG_BT=m
-CONFIG_BT_6LOWPAN=y
+CONFIG_BT_6LOWPAN=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
@@ -1434,7 +1450,7 @@ 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_DEBUGFS=y
# CONFIG_MAC80211_MESSAGE_TRACING is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_WIMAX=m
@@ -1477,6 +1493,8 @@ CONFIG_NFC_MICROREAD_MEI=m
CONFIG_NFC_MRVL=m
CONFIG_NFC_MRVL_USB=m
CONFIG_NFC_ST21NFCA=m
+CONFIG_NFC_ST21NFCB=m
+CONFIG_NFC_ST21NFCB_I2C=m
#
# Device Drivers
@@ -1494,6 +1512,7 @@ CONFIG_FW_LOADER=y
# CONFIG_FIRMWARE_IN_KERNEL is not set
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
+# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
@@ -1501,9 +1520,11 @@ CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_REGMAP=y
CONFIG_REGMAP_I2C=m
+CONFIG_REGMAP_SPI=m
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_DMA_SHARED_BUFFER=y
+# CONFIG_FENCE_TRACE is not set
#
# Bus devices
@@ -1640,7 +1661,6 @@ CONFIG_OF=y
#
# Device Tree and Open Firmware support
#
-# CONFIG_OF_SELFTEST is not set
CONFIG_OF_PROMTREE=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_ADDRESS_PCI=y
@@ -1774,6 +1794,10 @@ CONFIG_INTEL_MEI_TXE=m
CONFIG_VMWARE_VMCI=m
#
+# Intel MIC Bus Driver
+#
+
+#
# Intel MIC Host Driver
#
@@ -1791,7 +1815,6 @@ CONFIG_SCSI_MOD=m
CONFIG_RAID_ATTRS=m
CONFIG_SCSI=m
CONFIG_SCSI_DMA=y
-CONFIG_SCSI_TGT=m
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y
@@ -1806,7 +1829,6 @@ CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=m
CONFIG_CHR_DEV_SCH=m
CONFIG_SCSI_ENCLOSURE=m
-CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
CONFIG_SCSI_SCAN_ASYNC=y
@@ -1816,14 +1838,12 @@ CONFIG_SCSI_SCAN_ASYNC=y
#
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
-# CONFIG_SCSI_FC_TGT_ATTRS is not set
CONFIG_SCSI_ISCSI_ATTRS=m
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=m
-CONFIG_SCSI_SRP_TGT_ATTRS=y
CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=m
CONFIG_ISCSI_BOOT_SYSFS=m
@@ -1937,7 +1957,6 @@ CONFIG_SCSI_NSP32=m
# CONFIG_SCSI_DEBUG is not set
CONFIG_SCSI_PMCRAID=m
CONFIG_SCSI_PM8001=m
-CONFIG_SCSI_SRP=m
CONFIG_SCSI_BFA_FC=m
CONFIG_SCSI_VIRTIO=m
CONFIG_SCSI_CHELSIO_FCOE=m
@@ -2234,6 +2253,7 @@ CONFIG_PCNET32=m
CONFIG_PCMCIA_NMCLAN=m
CONFIG_NI65=m
CONFIG_AMD_XGBE=m
+CONFIG_NET_XGENE=m
CONFIG_NET_VENDOR_ARC=y
CONFIG_ARC_EMAC=m
CONFIG_NET_VENDOR_ATHEROS=y
@@ -2256,7 +2276,6 @@ CONFIG_BNX2X_SRIOV=y
CONFIG_SYSTEMPORT=m
CONFIG_NET_VENDOR_BROCADE=y
CONFIG_BNA=m
-CONFIG_NET_CALXEDA_XGMAC=m
CONFIG_NET_VENDOR_CHELSIO=y
CONFIG_CHELSIO_T1=m
CONFIG_CHELSIO_T1_1G=y
@@ -2377,7 +2396,6 @@ CONFIG_8139TOO_TUNE_TWISTER=y
CONFIG_8139TOO_8129=y
# CONFIG_8139_OLD_RX_RESET is not set
CONFIG_R8169=m
-CONFIG_SH_ETH=m
CONFIG_NET_VENDOR_RDC=y
CONFIG_R6040=m
CONFIG_NET_VENDOR_SAMSUNG=y
@@ -2479,8 +2497,9 @@ CONFIG_SLHC=m
# CONFIG_SLIP_MODE_SLIP6 is not set
#
-# USB Network Adapters
+# Host-side USB support is needed for USB Network Adapter support
#
+CONFIG_USB_NET_DRIVERS=m
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
@@ -2555,13 +2574,15 @@ CONFIG_ATH9K_BTCOEX_SUPPORT=y
CONFIG_ATH9K=m
CONFIG_ATH9K_PCI=y
CONFIG_ATH9K_AHB=y
-# CONFIG_ATH9K_DEBUGFS is not set
+CONFIG_ATH9K_DEBUGFS=y
+CONFIG_ATH9K_STATION_STATISTICS=y
CONFIG_ATH9K_WOW=y
CONFIG_ATH9K_RFKILL=y
CONFIG_ATH9K_HTC=m
# CONFIG_ATH9K_HTC_DEBUGFS is not set
CONFIG_CARL9170=m
CONFIG_CARL9170_LEDS=y
+# CONFIG_CARL9170_DEBUGFS is not set
CONFIG_CARL9170_WPC=y
# CONFIG_CARL9170_HWRNG is not set
CONFIG_ATH6KL=m
@@ -2592,6 +2613,7 @@ CONFIG_B43_PCMCIA=y
CONFIG_B43_SDIO=y
CONFIG_B43_BCMA_PIO=y
CONFIG_B43_PIO=y
+CONFIG_B43_PHY_G=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_HT=y
@@ -2612,8 +2634,11 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
CONFIG_BRCMUTIL=m
CONFIG_BRCMSMAC=m
CONFIG_BRCMFMAC=m
+CONFIG_BRCMFMAC_PROTO_BCDC=y
+CONFIG_BRCMFMAC_PROTO_MSGBUF=y
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_USB=y
+CONFIG_BRCMFMAC_PCIE=y
# CONFIG_BRCM_TRACING is not set
# CONFIG_BRCMDBG is not set
CONFIG_HOSTAP=m
@@ -2635,6 +2660,7 @@ CONFIG_IWLWIFI_OPMODE_MODULAR=y
# Debugging Options
#
# CONFIG_IWLWIFI_DEBUG is not set
+# CONFIG_IWLWIFI_DEBUGFS is not set
CONFIG_IWLWIFI_DEVICE_TRACING=y
CONFIG_IWLEGACY=m
CONFIG_IWL4965=m
@@ -2644,6 +2670,7 @@ CONFIG_IWL3945=m
# iwl3945 / iwl4965 Debugging Options
#
# CONFIG_IWLEGACY_DEBUG is not set
+# CONFIG_IWLEGACY_DEBUGFS is not set
CONFIG_LIBERTAS=m
CONFIG_LIBERTAS_USB=m
CONFIG_LIBERTAS_CS=m
@@ -2694,6 +2721,7 @@ CONFIG_RT2X00_LIB=m
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_RT2X00_LIB_CRYPTO=y
CONFIG_RT2X00_LIB_LEDS=y
+# CONFIG_RT2X00_LIB_DEBUGFS is not set
# CONFIG_RT2X00_DEBUG is not set
CONFIG_RTL_CARDS=m
CONFIG_RTL8192CE=m
@@ -2746,6 +2774,7 @@ CONFIG_IEEE802154_FAKEHARD=m
CONFIG_IEEE802154_FAKELB=m
CONFIG_IEEE802154_AT86RF230=m
# CONFIG_IEEE802154_MRF24J40 is not set
+# CONFIG_IEEE802154_CC2520 is not set
CONFIG_VMXNET3=m
CONFIG_HYPERV_NET=m
CONFIG_ISDN=y
@@ -2943,6 +2972,7 @@ CONFIG_KEYBOARD_MPR121=m
# CONFIG_KEYBOARD_OMAP4 is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_CROS_EC is not set
+# CONFIG_KEYBOARD_CAP1106 is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=m
CONFIG_MOUSE_PS2_ALPS=y
@@ -3004,7 +3034,7 @@ 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_TABLET_SERIAL_WACOM4=m
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_OF_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ADS7846 is not set
@@ -3261,6 +3291,10 @@ CONFIG_TCG_ATMEL=m
CONFIG_TCG_INFINEON=m
CONFIG_TCG_ST33_I2C=m
CONFIG_TELCLOCK=m
+
+#
+# I2C support
+#
CONFIG_I2C=m
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
@@ -3412,15 +3446,9 @@ CONFIG_PINCTRL=y
#
# Pin controllers
#
-CONFIG_PINMUX=y
-CONFIG_PINCONF=y
-CONFIG_GENERIC_PINCONF=y
# CONFIG_DEBUG_PINCTRL is not set
# CONFIG_PINCTRL_BAYTRAIL is not set
# CONFIG_PINCTRL_BCM281XX is not set
-CONFIG_PINCTRL_MSM=y
-CONFIG_PINCTRL_APQ8064=m
-# CONFIG_PINCTRL_IPQ8064 is not set
# CONFIG_PINCTRL_SINGLE is not set
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
CONFIG_GPIOLIB=y
@@ -3573,6 +3601,7 @@ CONFIG_SENSORS_IBMPEX=m
CONFIG_SENSORS_CORETEMP=m
CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
+CONFIG_SENSORS_POWR1220=m
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LTC2945=m
CONFIG_SENSORS_LTC4151=m
@@ -3623,9 +3652,11 @@ CONFIG_SENSORS_LTC2978=m
CONFIG_SENSORS_MAX16064=m
CONFIG_SENSORS_MAX34440=m
CONFIG_SENSORS_MAX8688=m
+CONFIG_SENSORS_TPS40422=m
CONFIG_SENSORS_UCD9000=m
CONFIG_SENSORS_UCD9200=m
CONFIG_SENSORS_ZL6100=m
+CONFIG_SENSORS_PWM_FAN=m
CONFIG_SENSORS_SHT15=m
CONFIG_SENSORS_SHT21=m
CONFIG_SENSORS_SHTC1=m
@@ -3650,6 +3681,7 @@ CONFIG_SENSORS_INA209=m
CONFIG_SENSORS_INA2XX=m
CONFIG_SENSORS_THMC50=m
CONFIG_SENSORS_TMP102=m
+CONFIG_SENSORS_TMP103=m
CONFIG_SENSORS_TMP401=m
CONFIG_SENSORS_TMP421=m
CONFIG_SENSORS_VIA_CPUTEMP=m
@@ -3854,6 +3886,7 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
+CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_RC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_DEV=m
@@ -3892,10 +3925,10 @@ 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_SHARP_DECODER=m
CONFIG_IR_MCE_KBD_DECODER=m
+CONFIG_IR_XMP_DECODER=m
CONFIG_RC_DEVICES=y
CONFIG_RC_ATI_REMOTE=m
CONFIG_IR_ENE=m
@@ -3997,12 +4030,17 @@ CONFIG_VIDEO_USBVISION=m
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_GO7007=m
+CONFIG_VIDEO_GO7007_USB=m
+CONFIG_VIDEO_GO7007_LOADER=m
+# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=m
CONFIG_VIDEO_AU0828_V4L2=y
+CONFIG_VIDEO_AU0828_RC=y
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_CX231XX_ALSA=m
@@ -4067,6 +4105,12 @@ CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_EM28XX_ALSA=m
CONFIG_VIDEO_EM28XX_DVB=m
CONFIG_VIDEO_EM28XX_RC=m
+
+#
+# Software defined radio USB devices
+#
+CONFIG_USB_MSI2500=m
+CONFIG_USB_AIRSPY=m
CONFIG_MEDIA_PCI_SUPPORT=y
#
@@ -4091,6 +4135,7 @@ CONFIG_VIDEO_ZORAN_AVS6EYES=m
CONFIG_VIDEO_HEXIUM_GEMINI=m
CONFIG_VIDEO_HEXIUM_ORION=m
CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_SOLO6X10=m
#
# Media capture/analog/hybrid TV support
@@ -4298,6 +4343,7 @@ CONFIG_MEDIA_TUNER_TDA18271=m
CONFIG_MEDIA_TUNER_TDA9887=m
CONFIG_MEDIA_TUNER_TEA5761=m
CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MSI001=m
CONFIG_MEDIA_TUNER_MT20XX=m
CONFIG_MEDIA_TUNER_MT2060=m
CONFIG_MEDIA_TUNER_MT2063=m
@@ -4338,6 +4384,7 @@ CONFIG_DVB_M88DS3103=m
#
CONFIG_DVB_DRXK=m
CONFIG_DVB_TDA18271C2DD=m
+CONFIG_DVB_SI2165=m
#
# DVB-S (satellite) frontends
@@ -4393,6 +4440,7 @@ CONFIG_DVB_STV0367=m
CONFIG_DVB_CXD2820R=m
CONFIG_DVB_RTL2830=m
CONFIG_DVB_RTL2832=m
+CONFIG_DVB_RTL2832_SDR=m
CONFIG_DVB_SI2168=m
#
@@ -4891,6 +4939,7 @@ CONFIG_HID_ELO=m
CONFIG_HID_EZKEY=m
CONFIG_HID_HOLTEK=m
CONFIG_HOLTEK_FF=y
+CONFIG_HID_GT683R=m
CONFIG_HID_HUION=m
CONFIG_HID_KEYTOUCH=m
CONFIG_HID_KYE=m
@@ -4901,7 +4950,7 @@ CONFIG_HID_ICADE=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_KENSINGTON=m
CONFIG_HID_LCPOWER=m
-CONFIG_HID_LENOVO_TPKBD=m
+CONFIG_HID_LENOVO=m
CONFIG_HID_LOGITECH=m
CONFIG_HID_LOGITECH_DJ=m
CONFIG_LOGITECH_FF=y
@@ -5054,6 +5103,10 @@ CONFIG_USB_UAS=m
#
CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
+CONFIG_USBIP_CORE=m
+CONFIG_USBIP_VHCI_HCD=m
+CONFIG_USBIP_HOST=m
+# CONFIG_USBIP_DEBUG is not set
CONFIG_USB_MUSB_HDRC=m
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_GADGET is not set
@@ -5155,6 +5208,7 @@ CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=m
CONFIG_USB_EZUSB_FX2=m
CONFIG_USB_HSIC_USB3503=m
+CONFIG_USB_LINK_LAYER_TEST=m
CONFIG_USB_ATM=m
CONFIG_USB_SPEEDTOUCH=m
CONFIG_USB_CXACRU=m
@@ -5389,6 +5443,7 @@ CONFIG_EDAC_I82875P=m
CONFIG_EDAC_I82975X=m
CONFIG_EDAC_I3000=m
CONFIG_EDAC_I3200=m
+CONFIG_EDAC_IE31200=m
CONFIG_EDAC_X38=m
CONFIG_EDAC_I5400=m
CONFIG_EDAC_I7CORE=m
@@ -5430,6 +5485,7 @@ CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF8523=m
CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_M41T80=m
CONFIG_RTC_DRV_M41T80_WDT=y
@@ -5466,6 +5522,8 @@ CONFIG_RTC_DRV_DS1286=m
CONFIG_RTC_DRV_DS1511=m
CONFIG_RTC_DRV_DS1553=m
CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_DS2404=m
+CONFIG_RTC_DRV_EFI=m
CONFIG_RTC_DRV_STK17TA8=m
CONFIG_RTC_DRV_M48T86=m
CONFIG_RTC_DRV_M48T35=m
@@ -5474,7 +5532,6 @@ CONFIG_RTC_DRV_MSM6242=m
CONFIG_RTC_DRV_BQ4802=m
CONFIG_RTC_DRV_RP5C01=m
CONFIG_RTC_DRV_V3020=m
-CONFIG_RTC_DRV_DS2404=m
CONFIG_RTC_DRV_PCF50633=m
#
@@ -5482,7 +5539,6 @@ CONFIG_RTC_DRV_PCF50633=m
#
CONFIG_RTC_DRV_MC13XXX=m
CONFIG_RTC_DRV_SNVS=m
-# CONFIG_RTC_DRV_MOXART is not set
# CONFIG_RTC_DRV_XGENE is not set
#
@@ -5553,11 +5609,6 @@ CONFIG_HYPERV_BALLOON=m
CONFIG_STAGING=y
CONFIG_ET131X=m
CONFIG_SLICOSS=m
-CONFIG_USBIP_CORE=m
-CONFIG_USBIP_VHCI_HCD=m
-CONFIG_USBIP_HOST=m
-# CONFIG_USBIP_DEBUG is not set
-CONFIG_W35UND=m
CONFIG_PRISM2_USB=m
CONFIG_COMEDI=m
# CONFIG_COMEDI_DEBUG is not set
@@ -5709,7 +5760,6 @@ CONFIG_RTL8192E=m
CONFIG_R8712U=m
CONFIG_R8188EU=m
CONFIG_88EU_AP_MODE=y
-CONFIG_88EU_P2P=y
CONFIG_R8192EE=m
CONFIG_R8723AU=m
CONFIG_8723AU_AP_MODE=y
@@ -5717,14 +5767,10 @@ CONFIG_8723AU_BT_COEXIST=y
CONFIG_R8821AE=m
CONFIG_RTS5208=m
# CONFIG_RTS5208_DEBUG is not set
-# CONFIG_TRANZPORT is not set
-CONFIG_IDE_PHISON=m
CONFIG_LINE6_USB=m
# CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set
-CONFIG_USB_SERIAL_QUATECH2=m
CONFIG_VT6655=m
CONFIG_VT6656=m
-CONFIG_DX_SEP=m
#
# IIO staging drivers
@@ -5745,7 +5791,6 @@ CONFIG_DX_SEP=m
#
# Analog to digital converters
#
-# CONFIG_AD7291 is not set
# CONFIG_AD7606 is not set
# CONFIG_AD7780 is not set
# CONFIG_AD7816 is not set
@@ -5796,7 +5841,9 @@ CONFIG_DX_SEP=m
#
# Magnetometer sensors
#
-# CONFIG_SENSORS_HMC5843 is not set
+CONFIG_SENSORS_HMC5843=m
+CONFIG_SENSORS_HMC5843_I2C=m
+CONFIG_SENSORS_HMC5843_SPI=m
#
# Active energy metering IC
@@ -5819,12 +5866,7 @@ CONFIG_DX_SEP=m
#
# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
# CONFIG_IIO_SIMPLE_DUMMY is not set
-CONFIG_WLAGS49_H2=m
-CONFIG_WLAGS49_H25=m
-CONFIG_CRYSTALHD=m
CONFIG_FB_XGI=m
-CONFIG_ACPI_QUICKSTART=m
-CONFIG_USB_ENESTORAGE=m
CONFIG_BCM_WIMAX=m
CONFIG_FT1000=m
CONFIG_FT1000_USB=m
@@ -5858,17 +5900,8 @@ CONFIG_DVB_CXD2099=m
CONFIG_VIDEO_DT3155=m
CONFIG_DT3155_CCIR=y
CONFIG_DT3155_STREAMING=y
-CONFIG_VIDEO_GO7007=m
-CONFIG_VIDEO_GO7007_USB=m
-CONFIG_VIDEO_GO7007_LOADER=m
-# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
-# CONFIG_USB_MSI3101 is not set
-# CONFIG_MEDIA_TUNER_MSI001 is not set
CONFIG_VIDEO_V4L2_INT_DEVICE=m
CONFIG_VIDEO_TCM825X=m
-CONFIG_USB_SN9C102=m
-CONFIG_SOLO6X10=m
-# CONFIG_DVB_RTL2832_SDR is not set
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_BT829=m
CONFIG_LIRC_IGORPLUGUSB=m
@@ -5893,11 +5926,6 @@ CONFIG_WIMAX_GDM72XX_USB=y
# CONFIG_WIMAX_GDM72XX_SDIO is not set
CONFIG_WIMAX_GDM72XX_USB_PM=y
CONFIG_LTE_GDM724X=m
-CONFIG_NET_VENDOR_SILICOM=y
-CONFIG_SBYPASS=m
-CONFIG_BPCTL=m
-CONFIG_CED1401=m
-CONFIG_DGRP=m
CONFIG_FIREWIRE_SERIAL=m
CONFIG_FWTTY_MAX_TOTAL_PORTS=64
CONFIG_FWTTY_MAX_CARD_PORTS=32
@@ -5955,6 +5983,7 @@ CONFIG_MSI_WMI=m
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_ACPI_TOSHIBA=m
CONFIG_TOSHIBA_BT_RFKILL=m
+CONFIG_TOSHIBA_HAPS=m
CONFIG_ACPI_CMPC=m
CONFIG_INTEL_IPS=m
CONFIG_IBM_RTL=m
@@ -5989,6 +6018,10 @@ CONFIG_COMMON_CLK=y
#
# Hardware Spinlock drivers
#
+
+#
+# Clock Source drivers
+#
CONFIG_CLKSRC_I8253=y
CONFIG_CLKEVT_I8253=y
CONFIG_I8253_LOCK=y
@@ -6021,8 +6054,9 @@ CONFIG_EXTCON=m
#
# Extcon Device Drivers
#
-CONFIG_EXTCON_GPIO=m
# CONFIG_EXTCON_ADC_JACK is not set
+CONFIG_EXTCON_GPIO=m
+CONFIG_EXTCON_SM5502=m
CONFIG_MEMORY=y
CONFIG_IIO=m
CONFIG_IIO_BUFFER=y
@@ -6042,11 +6076,13 @@ CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m
CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
# CONFIG_KXSD9 is not set
# CONFIG_MMA8452 is not set
+CONFIG_KXCJK1013=m
#
# Analog to digital converters
#
# CONFIG_AD7266 is not set
+# CONFIG_AD7291 is not set
# CONFIG_AD7298 is not set
# CONFIG_AD7476 is not set
# CONFIG_AD7791 is not set
@@ -6054,6 +6090,7 @@ CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
# CONFIG_AD799X is not set
+# CONFIG_MAX1027 is not set
# CONFIG_MAX1363 is not set
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
@@ -6095,6 +6132,7 @@ CONFIG_IIO_ST_SENSORS_CORE=m
# CONFIG_AD7303 is not set
# CONFIG_MAX517 is not set
# CONFIG_MCP4725 is not set
+# CONFIG_MCP4922 is not set
#
# Frequency Synthesizers DDS/PLL
@@ -6145,10 +6183,12 @@ CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
# CONFIG_CM32181 is not set
# CONFIG_CM36651 is not set
# CONFIG_GP2AP020A00F is not set
+# CONFIG_ISL29125 is not set
CONFIG_HID_SENSOR_ALS=m
# CONFIG_HID_SENSOR_PROX is not set
# CONFIG_SENSORS_LM3533 is not set
# CONFIG_LTR501 is not set
+# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_SENSORS_TSL2563 is not set
# CONFIG_TSL4531 is not set
@@ -6158,6 +6198,7 @@ CONFIG_HID_SENSOR_ALS=m
# Magnetometer sensors
#
# CONFIG_AK8975 is not set
+# CONFIG_AK09911 is not set
# CONFIG_MAG3110 is not set
CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
CONFIG_IIO_ST_MAGN_3AXIS=m
@@ -6183,6 +6224,7 @@ CONFIG_IIO_INTERRUPT_TRIGGER=m
# CONFIG_MPL115 is not set
# CONFIG_MPL3115 is not set
# CONFIG_IIO_ST_PRESS is not set
+# CONFIG_T5403 is not set
#
# Lightning sensors
@@ -6218,10 +6260,11 @@ CONFIG_FMC_CHARDEV=m
#
CONFIG_GENERIC_PHY=y
CONFIG_BCM_KONA_USB2_PHY=m
-CONFIG_PHY_SAMSUNG_USB2=m
CONFIG_POWERCAP=y
CONFIG_INTEL_RAPL=m
# CONFIG_MCB is not set
+CONFIG_RAS=y
+CONFIG_THUNDERBOLT=m
#
# Firmware Drivers
@@ -6242,6 +6285,7 @@ CONFIG_ISCSI_IBFT=m
# EFI (Extensible Firmware Interface) Support
#
# CONFIG_EFI_VARS is not set
+CONFIG_EFI_RUNTIME_WRAPPERS=y
CONFIG_UEFI_CPER=y
#
@@ -6560,7 +6604,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
-CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_BOOT_PRINTK_DELAY is not set
CONFIG_DYNAMIC_DEBUG=y
@@ -6629,7 +6673,6 @@ CONFIG_TIMER_STATS=y
# Lock Debugging (spinlocks, mutexes, etc...)
#
# 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_ATOMIC_SLEEP is not set
@@ -6647,7 +6690,6 @@ CONFIG_DEBUG_LIST=y
#
# RCU Debugging
#
-# CONFIG_PROVE_RCU_DELAY is not set
# CONFIG_SPARSE_RCU_POINTER is not set
# CONFIG_TORTURE_TEST is not set
# CONFIG_RCU_TORTURE_TEST is not set
@@ -6664,7 +6706,6 @@ CONFIG_NOP_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
@@ -6721,10 +6762,13 @@ CONFIG_PERCPU_TEST=m
CONFIG_ASYNC_RAID6_TEST=m
# CONFIG_TEST_STRING_HELPERS is not set
CONFIG_TEST_KSTRTOX=m
+# CONFIG_TEST_RHASHTABLE is not set
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_TEST_MODULE is not set
# CONFIG_TEST_USER_COPY is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIRMWARE is not set
+# CONFIG_TEST_UDELAY is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
@@ -6832,6 +6876,7 @@ CONFIG_PAX_SIZE_OVERFLOW=y
CONFIG_GRKERNSEC_KMEM=y
CONFIG_GRKERNSEC_VM86=y
CONFIG_GRKERNSEC_IO=y
+CONFIG_GRKERNSEC_BPF_HARDEN=y
CONFIG_GRKERNSEC_PERF_HARDEN=y
CONFIG_GRKERNSEC_RAND_THREADSTACK=y
CONFIG_GRKERNSEC_PROC_MEMMAP=y
@@ -7073,6 +7118,7 @@ CONFIG_CRYPTO_LZ4HC=m
# Random Number Generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
+# CONFIG_CRYPTO_DRBG_MENU is not set
CONFIG_CRYPTO_USER_API=m
CONFIG_CRYPTO_USER_API_HASH=m
CONFIG_CRYPTO_USER_API_SKCIPHER=m
@@ -7087,12 +7133,17 @@ CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
CONFIG_CRYPTO_DEV_CCP=y
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
+CONFIG_CRYPTO_DEV_QAT=m
+CONFIG_CRYPTO_DEV_QAT_DH895xCC=m
CONFIG_ASYMMETRIC_KEY_TYPE=m
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
CONFIG_PUBLIC_KEY_ALGO_RSA=m
CONFIG_X509_CERTIFICATE_PARSER=m
+CONFIG_PKCS7_MESSAGE_PARSER=m
+CONFIG_PKCS7_TEST_KEY=m
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
+CONFIG_HAVE_KVM_IRQFD=y
CONFIG_HAVE_KVM_IRQ_ROUTING=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_APIC_ARCHITECTURE=y
@@ -7123,6 +7174,7 @@ CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_IO=y
CONFIG_PERCPU_RWSEM=y
+CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
CONFIG_CRC_CCITT=m
CONFIG_CRC16=m
CONFIG_CRC_T10DIF=m
@@ -7180,6 +7232,8 @@ CONFIG_HAS_DMA=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_CPU_RMAP=y
CONFIG_DQL=y
+CONFIG_GLOB=y
+# CONFIG_GLOB_SELFTEST is not set
CONFIG_NLATTR=y
CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
CONFIG_LRU_CACHE=m
@@ -7203,3 +7257,4 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
CONFIG_FONT_AUTOSELECT=y
+CONFIG_ARCH_HAS_SG_CHAIN=y
diff --git a/libre/linux-libre-grsec/config.mips64el b/libre/linux-libre-grsec/config.mips64el
index e51220ac6..0f654883f 100644
--- a/libre/linux-libre-grsec/config.mips64el
+++ b/libre/linux-libre-grsec/config.mips64el
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/mips 3.16.3-gnu-201409180901-1-grsec Kernel Configuration
+# Linux/mips 3.17.1-gnu-201410192051-1 Kernel Configuration
#
CONFIG_MIPS=y
@@ -52,7 +52,7 @@ CONFIG_MACH_LOONGSON=y
# CONFIG_LEMOTE_FULOONG2E is not set
CONFIG_LEMOTE_MACH2F=y
# CONFIG_DEXXON_GDIUM is not set
-# CONFIG_LEMOTE_MACH3A is not set
+# CONFIG_LOONGSON_MACH3X is not set
CONFIG_CS5536=y
CONFIG_LOONGSON_SUSPEND=y
CONFIG_LOONGSON_UART_BASE=y
@@ -86,7 +86,6 @@ CONFIG_MIPS_L1_CACHE_SHIFT=5
#
# CPU selection
#
-# CONFIG_CPU_LOONGSON2E is not set
CONFIG_CPU_LOONGSON2F=y
# CONFIG_CPU_R4X00 is not set
# CONFIG_CPU_R5000 is not set
@@ -112,7 +111,6 @@ CONFIG_CPU_SUPPORTS_UNCACHED_ACCELERATED=y
CONFIG_64BIT=y
CONFIG_KVM_GUEST=y
CONFIG_KVM_GUEST_TIMER_FREQ=100
-# CONFIG_PAGE_SIZE_4KB is not set
CONFIG_PAGE_SIZE_16KB=y
# CONFIG_PAGE_SIZE_64KB is not set
CONFIG_FORCE_MAX_ZONEORDER=11
@@ -143,14 +141,13 @@ CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
-# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
-# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
CONFIG_NEED_PER_CPU_KM=y
CONFIG_CLEANCACHE=y
CONFIG_FRONTSWAP=y
# CONFIG_CMA is not set
-CONFIG_ZBUD=y
CONFIG_ZSWAP=y
+CONFIG_ZPOOL=y
+CONFIG_ZBUD=y
CONFIG_ZSMALLOC=y
# CONFIG_PGTABLE_MAPPING is not set
# CONFIG_HZ_48 is not set
@@ -252,9 +249,11 @@ CONFIG_RCU_FANOUT_LEAF=16
# CONFIG_TREE_RCU_TRACE is not set
# CONFIG_RCU_BOOST is not set
# CONFIG_RCU_NOCB_CPU is not set
+CONFIG_BUILD_BIN2C=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=19
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_FREEZER=y
@@ -532,7 +531,6 @@ CONFIG_CPU_PM=y
# CPU Idle
#
CONFIG_CPU_IDLE=y
-# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
@@ -578,6 +576,7 @@ CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=m
+CONFIG_NET_UDP_TUNNEL=m
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
@@ -631,6 +630,7 @@ CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
# CONFIG_IPV6_MROUTE is not set
CONFIG_NETWORK_SECMARK=y
+CONFIG_NET_PTP_CLASSIFY=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
@@ -645,6 +645,7 @@ CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NF_CONNTRACK=m
+CONFIG_NF_LOG_COMMON=m
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
@@ -722,6 +723,7 @@ CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_NAT is not set
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
@@ -848,11 +850,18 @@ CONFIG_IP_VS_PE_SIP=m
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_CONNTRACK_IPV4=m
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+# CONFIG_NF_LOG_ARP is not set
+CONFIG_NF_LOG_IPV4=m
CONFIG_NF_TABLES_IPV4=m
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
CONFIG_NFT_CHAIN_NAT_IPV4=m
CONFIG_NFT_REJECT_IPV4=m
CONFIG_NF_TABLES_ARP=m
+CONFIG_NF_NAT_IPV4=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
@@ -861,15 +870,7 @@ CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_SYNPROXY=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_NF_NAT_IPV4=m
-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_GRE=m
-CONFIG_NF_NAT_PPTP=m
-CONFIG_NF_NAT_H323=m
+# CONFIG_IP_NF_NAT is not set
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_TARGET_ECN=m
@@ -888,6 +889,8 @@ CONFIG_NF_TABLES_IPV6=m
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
CONFIG_NFT_CHAIN_NAT_IPV6=m
CONFIG_NFT_REJECT_IPV6=m
+CONFIG_NF_LOG_IPV6=m
+CONFIG_NF_NAT_IPV6=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
@@ -904,11 +907,11 @@ CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
-CONFIG_NF_NAT_IPV6=m
-CONFIG_IP6_NF_TARGET_MASQUERADE=m
-CONFIG_IP6_NF_TARGET_NPT=m
+# CONFIG_IP6_NF_NAT is not set
CONFIG_NF_TABLES_BRIDGE=m
CONFIG_NFT_BRIDGE_META=m
+# CONFIG_NFT_BRIDGE_REJECT is not set
+# CONFIG_NF_LOG_BRIDGE is not set
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -929,7 +932,6 @@ 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=m
CONFIG_INET_DCCP_DIAG=m
@@ -990,9 +992,8 @@ CONFIG_LLC2=m
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
CONFIG_PHONET=m
+# CONFIG_6LOWPAN is not set
CONFIG_IEEE802154=m
-CONFIG_IEEE802154_6LOWPAN=m
-CONFIG_6LOWPAN_IPHC=m
CONFIG_MAC802154=m
CONFIG_NET_SCHED=y
@@ -1075,6 +1076,7 @@ CONFIG_HSR=m
CONFIG_CGROUP_NET_CLASSID=y
CONFIG_NET_RX_BUSY_POLL=y
CONFIG_BQL=y
+# CONFIG_BPF_JIT is not set
#
# Network testing
@@ -1160,7 +1162,6 @@ CONFIG_VLSI_FIR=m
CONFIG_VIA_FIR=m
CONFIG_MCS_FIR=m
CONFIG_BT=m
-CONFIG_BT_6LOWPAN=y
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
@@ -1263,6 +1264,7 @@ CONFIG_NFC_MICROREAD=m
CONFIG_NFC_MRVL=m
CONFIG_NFC_MRVL_USB=m
CONFIG_NFC_ST21NFCA=m
+# CONFIG_NFC_ST21NFCB is not set
CONFIG_HAVE_BPF_JIT=y
#
@@ -1280,16 +1282,18 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_FIRMWARE_IN_KERNEL is not set
CONFIG_EXTRA_FIRMWARE=""
-CONFIG_FW_LOADER_USER_HELPER=y
+# CONFIG_FW_LOADER_USER_HELPER_FALLBACK 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=m
+CONFIG_REGMAP_SPI=m
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_DMA_SHARED_BUFFER=y
+# CONFIG_FENCE_TRACE is not set
#
# Bus devices
@@ -1515,6 +1519,10 @@ CONFIG_SENSORS_LIS3_I2C=m
CONFIG_ALTERA_STAPL=m
#
+# Intel MIC Bus Driver
+#
+
+#
# Intel MIC Host Driver
#
@@ -1522,6 +1530,7 @@ CONFIG_ALTERA_STAPL=m
# Intel MIC Card Driver
#
CONFIG_GENWQE=m
+CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0
CONFIG_ECHO=m
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -1533,7 +1542,6 @@ CONFIG_SCSI_MOD=m
CONFIG_RAID_ATTRS=m
CONFIG_SCSI=m
CONFIG_SCSI_DMA=y
-CONFIG_SCSI_TGT=m
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y
@@ -1548,7 +1556,6 @@ CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=m
CONFIG_CHR_DEV_SCH=m
CONFIG_SCSI_ENCLOSURE=m
-CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
CONFIG_SCSI_SCAN_ASYNC=y
@@ -1558,14 +1565,12 @@ CONFIG_SCSI_SCAN_ASYNC=y
#
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
-# CONFIG_SCSI_FC_TGT_ATTRS is not set
CONFIG_SCSI_ISCSI_ATTRS=m
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=m
-CONFIG_SCSI_SRP_TGT_ATTRS=y
CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=m
CONFIG_ISCSI_BOOT_SYSFS=m
@@ -1655,7 +1660,6 @@ CONFIG_SCSI_DC390T=m
# CONFIG_SCSI_DEBUG is not set
CONFIG_SCSI_PMCRAID=m
CONFIG_SCSI_PM8001=m
-CONFIG_SCSI_SRP=m
CONFIG_SCSI_BFA_FC=m
CONFIG_SCSI_VIRTIO=m
CONFIG_SCSI_CHELSIO_FCOE=m
@@ -1935,6 +1939,7 @@ CONFIG_NET_VENDOR_AMD=y
CONFIG_AMD8111_ETH=m
CONFIG_PCNET32=m
CONFIG_PCMCIA_NMCLAN=m
+# CONFIG_NET_XGENE is not set
CONFIG_NET_VENDOR_ARC=y
CONFIG_NET_VENDOR_ATHEROS=y
CONFIG_ATL2=m
@@ -1954,7 +1959,6 @@ CONFIG_BNX2X=m
CONFIG_BNX2X_SRIOV=y
CONFIG_NET_VENDOR_BROCADE=y
CONFIG_BNA=m
-CONFIG_NET_CALXEDA_XGMAC=m
CONFIG_NET_VENDOR_CHELSIO=y
CONFIG_CHELSIO_T1=m
CONFIG_CHELSIO_T1_1G=y
@@ -2065,7 +2069,6 @@ CONFIG_8139TOO_TUNE_TWISTER=y
CONFIG_8139TOO_8129=y
# CONFIG_8139_OLD_RX_RESET is not set
CONFIG_R8169=m
-CONFIG_SH_ETH=m
CONFIG_NET_VENDOR_RDC=y
CONFIG_R6040=m
CONFIG_NET_VENDOR_SAMSUNG=y
@@ -2164,8 +2167,9 @@ CONFIG_SLHC=m
# CONFIG_SLIP_MODE_SLIP6 is not set
#
-# USB Network Adapters
+# Host-side USB support is needed for USB Network Adapter support
#
+CONFIG_USB_NET_DRIVERS=m
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
@@ -2277,6 +2281,7 @@ CONFIG_B43_PCMCIA=y
CONFIG_B43_SDIO=y
CONFIG_B43_BCMA_PIO=y
CONFIG_B43_PIO=y
+CONFIG_B43_PHY_G=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_HT=y
@@ -2297,8 +2302,10 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
CONFIG_BRCMUTIL=m
CONFIG_BRCMSMAC=m
CONFIG_BRCMFMAC=m
+CONFIG_BRCMFMAC_PROTO_BCDC=y
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_USB=y
+# CONFIG_BRCMFMAC_PCIE is not set
# CONFIG_BRCM_TRACING is not set
# CONFIG_BRCMDBG is not set
CONFIG_HOSTAP=m
@@ -2431,6 +2438,7 @@ CONFIG_IEEE802154_FAKEHARD=m
CONFIG_IEEE802154_FAKELB=m
CONFIG_IEEE802154_AT86RF230=m
# CONFIG_IEEE802154_MRF24J40 is not set
+# CONFIG_IEEE802154_CC2520 is not set
CONFIG_VMXNET3=m
CONFIG_ISDN=y
CONFIG_ISDN_I4L=m
@@ -2666,7 +2674,7 @@ 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_TABLET_SERIAL_WACOM4 is not set
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ADS7846 is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
@@ -2888,6 +2896,10 @@ CONFIG_TCG_TIS_I2C_INFINEON=m
CONFIG_TCG_TIS_I2C_NUVOTON=m
CONFIG_TCG_ATMEL=m
CONFIG_TCG_ST33_I2C=m
+
+#
+# I2C support
+#
CONFIG_I2C=m
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
@@ -2976,6 +2988,7 @@ CONFIG_SPI_OC_TINY=m
CONFIG_SPI_PXA2XX_DMA=y
CONFIG_SPI_PXA2XX=m
CONFIG_SPI_PXA2XX_PCI=m
+# CONFIG_SPI_ROCKCHIP is not set
CONFIG_SPI_SC18IS602=m
CONFIG_SPI_XCOMM=m
CONFIG_SPI_XILINX=m
@@ -3138,6 +3151,7 @@ CONFIG_SENSORS_IBMPEX=m
# CONFIG_SENSORS_IIO_HWMON is not set
CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
+# CONFIG_SENSORS_POWR1220 is not set
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LTC2945=m
CONFIG_SENSORS_LTC4151=m
@@ -3188,6 +3202,7 @@ CONFIG_SENSORS_LTC2978=m
CONFIG_SENSORS_MAX16064=m
CONFIG_SENSORS_MAX34440=m
CONFIG_SENSORS_MAX8688=m
+# CONFIG_SENSORS_TPS40422 is not set
CONFIG_SENSORS_UCD9000=m
CONFIG_SENSORS_UCD9200=m
CONFIG_SENSORS_ZL6100=m
@@ -3215,6 +3230,7 @@ CONFIG_SENSORS_INA209=m
CONFIG_SENSORS_INA2XX=m
CONFIG_SENSORS_THMC50=m
CONFIG_SENSORS_TMP102=m
+# CONFIG_SENSORS_TMP103 is not set
CONFIG_SENSORS_TMP401=m
CONFIG_SENSORS_TMP421=m
CONFIG_SENSORS_VIA686A=m
@@ -3345,7 +3361,6 @@ CONFIG_MFD_TPS65218=m
# CONFIG_MFD_TPS65912_SPI is not set
CONFIG_MFD_WL1273_CORE=m
CONFIG_MFD_LM3533=m
-# CONFIG_MFD_TIMBERDALE is not set
# CONFIG_MFD_TMIO is not set
CONFIG_MFD_VX855=m
CONFIG_MFD_ARIZONA=y
@@ -3365,6 +3380,7 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
+# CONFIG_MEDIA_SDR_SUPPORT is not set
CONFIG_MEDIA_RC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_DEV=m
@@ -3403,10 +3419,10 @@ 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_SHARP_DECODER=m
CONFIG_IR_MCE_KBD_DECODER=m
+CONFIG_IR_XMP_DECODER=m
CONFIG_RC_DEVICES=y
CONFIG_RC_ATI_REMOTE=m
CONFIG_IR_IMON=m
@@ -3503,12 +3519,17 @@ CONFIG_VIDEO_USBVISION=m
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_GO7007=m
+CONFIG_VIDEO_GO7007_USB=m
+CONFIG_VIDEO_GO7007_LOADER=m
+# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=m
CONFIG_VIDEO_AU0828_V4L2=y
+# CONFIG_VIDEO_AU0828_RC is not set
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_CX231XX_ALSA=m
@@ -3596,6 +3617,7 @@ CONFIG_VIDEO_ZORAN_AVS6EYES=m
CONFIG_VIDEO_HEXIUM_GEMINI=m
CONFIG_VIDEO_HEXIUM_ORION=m
CONFIG_VIDEO_MXB=m
+# CONFIG_VIDEO_SOLO6X10 is not set
#
# Media capture/analog/hybrid TV support
@@ -3841,6 +3863,7 @@ CONFIG_DVB_M88DS3103=m
#
CONFIG_DVB_DRXK=m
CONFIG_DVB_TDA18271C2DD=m
+CONFIG_DVB_SI2165=m
#
# DVB-S (satellite) frontends
@@ -4063,6 +4086,7 @@ CONFIG_FB_VIRTUAL=m
# CONFIG_FB_BROADSHEET is not set
# CONFIG_FB_AUO_K190X is not set
# CONFIG_FB_SIMPLE is not set
+# CONFIG_FB_SM712 is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=m
# CONFIG_LCD_L4F00242T03 is not set
@@ -4306,6 +4330,7 @@ CONFIG_HID_ELO=m
CONFIG_HID_EZKEY=m
CONFIG_HID_HOLTEK=m
CONFIG_HOLTEK_FF=y
+# CONFIG_HID_GT683R is not set
CONFIG_HID_HUION=m
CONFIG_HID_KEYTOUCH=m
CONFIG_HID_KYE=m
@@ -4316,7 +4341,7 @@ CONFIG_HID_ICADE=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_KENSINGTON=m
CONFIG_HID_LCPOWER=m
-CONFIG_HID_LENOVO_TPKBD=m
+# CONFIG_HID_LENOVO is not set
CONFIG_HID_LOGITECH=m
CONFIG_HID_LOGITECH_DJ=m
CONFIG_LOGITECH_FF=y
@@ -4468,6 +4493,10 @@ CONFIG_USB_UAS=m
#
CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
+CONFIG_USBIP_CORE=m
+CONFIG_USBIP_VHCI_HCD=m
+CONFIG_USBIP_HOST=m
+# CONFIG_USBIP_DEBUG is not set
CONFIG_USB_MUSB_HDRC=m
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_GADGET is not set
@@ -4567,6 +4596,7 @@ CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=m
CONFIG_USB_EZUSB_FX2=m
CONFIG_USB_HSIC_USB3503=m
+# CONFIG_USB_LINK_LAYER_TEST is not set
CONFIG_USB_ATM=m
CONFIG_USB_SPEEDTOUCH=m
CONFIG_USB_CXACRU=m
@@ -4811,6 +4841,7 @@ CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF8523=m
CONFIG_RTC_DRV_PCF8563=m
+# CONFIG_RTC_DRV_PCF85063 is not set
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_M41T80=m
CONFIG_RTC_DRV_M41T80_WDT=y
@@ -4847,6 +4878,7 @@ CONFIG_RTC_DRV_DS1286=m
CONFIG_RTC_DRV_DS1511=m
CONFIG_RTC_DRV_DS1553=m
CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_DS2404=m
CONFIG_RTC_DRV_STK17TA8=m
CONFIG_RTC_DRV_M48T86=m
CONFIG_RTC_DRV_M48T35=m
@@ -4855,14 +4887,12 @@ CONFIG_RTC_DRV_MSM6242=m
CONFIG_RTC_DRV_BQ4802=m
CONFIG_RTC_DRV_RP5C01=m
CONFIG_RTC_DRV_V3020=m
-CONFIG_RTC_DRV_DS2404=m
CONFIG_RTC_DRV_PCF50633=m
#
# on-CPU RTC drivers
#
CONFIG_RTC_DRV_MC13XXX=m
-# CONFIG_RTC_DRV_MOXART is not set
# CONFIG_RTC_DRV_XGENE is not set
#
@@ -4914,11 +4944,6 @@ CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
#
CONFIG_STAGING=y
CONFIG_ET131X=m
-CONFIG_USBIP_CORE=m
-CONFIG_USBIP_VHCI_HCD=m
-CONFIG_USBIP_HOST=m
-# CONFIG_USBIP_DEBUG is not set
-CONFIG_W35UND=m
CONFIG_PRISM2_USB=m
CONFIG_COMEDI=m
# CONFIG_COMEDI_DEBUG is not set
@@ -5019,7 +5044,6 @@ CONFIG_RTL8192E=m
CONFIG_R8712U=m
CONFIG_R8188EU=m
CONFIG_88EU_AP_MODE=y
-CONFIG_88EU_P2P=y
CONFIG_R8192EE=m
CONFIG_R8723AU=m
CONFIG_8723AU_AP_MODE=y
@@ -5027,14 +5051,10 @@ CONFIG_8723AU_BT_COEXIST=y
CONFIG_R8821AE=m
CONFIG_RTS5208=m
# CONFIG_RTS5208_DEBUG is not set
-# CONFIG_TRANZPORT is not set
-CONFIG_IDE_PHISON=m
CONFIG_LINE6_USB=m
# CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set
-CONFIG_USB_SERIAL_QUATECH2=m
CONFIG_VT6655=m
CONFIG_VT6656=m
-CONFIG_DX_SEP=m
#
# IIO staging drivers
@@ -5055,7 +5075,6 @@ CONFIG_DX_SEP=m
#
# Analog to digital converters
#
-# CONFIG_AD7291 is not set
# CONFIG_AD7606 is not set
# CONFIG_AD7780 is not set
# CONFIG_AD7816 is not set
@@ -5106,7 +5125,8 @@ CONFIG_DX_SEP=m
#
# Magnetometer sensors
#
-# CONFIG_SENSORS_HMC5843 is not set
+# CONFIG_SENSORS_HMC5843_I2C is not set
+# CONFIG_SENSORS_HMC5843_SPI is not set
#
# Active energy metering IC
@@ -5129,12 +5149,7 @@ CONFIG_DX_SEP=m
#
# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
# CONFIG_IIO_SIMPLE_DUMMY is not set
-CONFIG_WLAGS49_H2=m
-CONFIG_WLAGS49_H25=m
-# CONFIG_FB_SM7XX is not set
-CONFIG_CRYSTALHD=m
CONFIG_FB_XGI=m
-CONFIG_USB_ENESTORAGE=m
CONFIG_BCM_WIMAX=m
CONFIG_FT1000=m
CONFIG_FT1000_USB=m
@@ -5164,17 +5179,8 @@ CONFIG_DVB_CXD2099=m
CONFIG_VIDEO_DT3155=m
CONFIG_DT3155_CCIR=y
CONFIG_DT3155_STREAMING=y
-CONFIG_VIDEO_GO7007=m
-CONFIG_VIDEO_GO7007_USB=m
-CONFIG_VIDEO_GO7007_LOADER=m
-# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
-# CONFIG_USB_MSI3101 is not set
-# CONFIG_MEDIA_TUNER_MSI001 is not set
CONFIG_VIDEO_V4L2_INT_DEVICE=m
CONFIG_VIDEO_TCM825X=m
-CONFIG_USB_SN9C102=m
-CONFIG_SOLO6X10=m
-# CONFIG_DVB_RTL2832_SDR is not set
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_BT829=m
CONFIG_LIRC_IGORPLUGUSB=m
@@ -5199,11 +5205,6 @@ CONFIG_WIMAX_GDM72XX_USB=y
# CONFIG_WIMAX_GDM72XX_SDIO is not set
CONFIG_WIMAX_GDM72XX_USB_PM=y
CONFIG_LTE_GDM724X=m
-CONFIG_NET_VENDOR_SILICOM=y
-CONFIG_SBYPASS=m
-CONFIG_BPCTL=m
-CONFIG_CED1401=m
-CONFIG_DGRP=m
CONFIG_FIREWIRE_SERIAL=m
CONFIG_FWTTY_MAX_TOTAL_PORTS=64
CONFIG_FWTTY_MAX_CARD_PORTS=32
@@ -5223,6 +5224,10 @@ CONFIG_LEMOTE_LYNLOONG2F=m
#
# Hardware Spinlock drivers
#
+
+#
+# Clock Source drivers
+#
# CONFIG_SH_TIMER_CMT is not set
# CONFIG_SH_TIMER_MTU2 is not set
# CONFIG_SH_TIMER_TMU is not set
@@ -5245,8 +5250,9 @@ CONFIG_EXTCON=m
#
# Extcon Device Drivers
#
-CONFIG_EXTCON_GPIO=m
# CONFIG_EXTCON_ADC_JACK is not set
+CONFIG_EXTCON_GPIO=m
+# CONFIG_EXTCON_SM5502 is not set
CONFIG_MEMORY=y
CONFIG_IIO=m
CONFIG_IIO_BUFFER=y
@@ -5266,11 +5272,13 @@ CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m
CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
# CONFIG_KXSD9 is not set
# CONFIG_MMA8452 is not set
+# CONFIG_KXCJK1013 is not set
#
# Analog to digital converters
#
# CONFIG_AD7266 is not set
+# CONFIG_AD7291 is not set
# CONFIG_AD7298 is not set
# CONFIG_AD7476 is not set
# CONFIG_AD7791 is not set
@@ -5278,6 +5286,7 @@ CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
# CONFIG_AD799X is not set
+# CONFIG_MAX1027 is not set
# CONFIG_MAX1363 is not set
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
@@ -5318,6 +5327,7 @@ CONFIG_IIO_ST_SENSORS_CORE=m
# CONFIG_AD7303 is not set
# CONFIG_MAX517 is not set
# CONFIG_MCP4725 is not set
+# CONFIG_MCP4922 is not set
#
# Frequency Synthesizers DDS/PLL
@@ -5368,10 +5378,12 @@ CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
# CONFIG_CM32181 is not set
# CONFIG_CM36651 is not set
# CONFIG_GP2AP020A00F is not set
+# CONFIG_ISL29125 is not set
CONFIG_HID_SENSOR_ALS=m
# CONFIG_HID_SENSOR_PROX is not set
# CONFIG_SENSORS_LM3533 is not set
# CONFIG_LTR501 is not set
+# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_SENSORS_TSL2563 is not set
# CONFIG_TSL4531 is not set
@@ -5381,6 +5393,7 @@ CONFIG_HID_SENSOR_ALS=m
# Magnetometer sensors
#
# CONFIG_AK8975 is not set
+# CONFIG_AK09911 is not set
# CONFIG_MAG3110 is not set
CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
CONFIG_IIO_ST_MAGN_3AXIS=m
@@ -5406,6 +5419,7 @@ CONFIG_IIO_INTERRUPT_TRIGGER=m
# CONFIG_MPL115 is not set
# CONFIG_MPL3115 is not set
# CONFIG_IIO_ST_PRESS is not set
+# CONFIG_T5403 is not set
#
# Lightning sensors
@@ -5434,9 +5448,10 @@ CONFIG_FMC_CHARDEV=m
#
CONFIG_GENERIC_PHY=y
CONFIG_BCM_KONA_USB2_PHY=m
-CONFIG_PHY_SAMSUNG_USB2=m
CONFIG_POWERCAP=y
# CONFIG_MCB is not set
+CONFIG_RAS=y
+# CONFIG_THUNDERBOLT is not set
#
# Firmware Drivers
@@ -5757,7 +5772,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
-CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_BOOT_PRINTK_DELAY is not set
CONFIG_DYNAMIC_DEBUG=y
@@ -5817,7 +5832,6 @@ CONFIG_TIMER_STATS=y
# Lock Debugging (spinlocks, mutexes, etc...)
#
# 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_WW_MUTEX_SLOWPATH is not set
@@ -5838,7 +5852,6 @@ CONFIG_DEBUG_LIST=y
#
# RCU Debugging
#
-# CONFIG_PROVE_RCU_DELAY is not set
# CONFIG_SPARSE_RCU_POINTER is not set
# CONFIG_TORTURE_TEST is not set
# CONFIG_RCU_TORTURE_TEST is not set
@@ -5852,7 +5865,6 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60
CONFIG_NOP_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
@@ -5903,10 +5915,13 @@ CONFIG_PERCPU_TEST=m
CONFIG_ASYNC_RAID6_TEST=m
# CONFIG_TEST_STRING_HELPERS is not set
CONFIG_TEST_KSTRTOX=m
+# CONFIG_TEST_RHASHTABLE is not set
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_TEST_MODULE is not set
# CONFIG_TEST_USER_COPY is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIRMWARE is not set
+# CONFIG_TEST_UDELAY is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
@@ -5979,6 +5994,7 @@ CONFIG_PAX_REFCOUNT=y
# Memory Protections
#
CONFIG_GRKERNSEC_KMEM=y
+# CONFIG_GRKERNSEC_BPF_HARDEN is not set
CONFIG_GRKERNSEC_PERF_HARDEN=y
CONFIG_GRKERNSEC_RAND_THREADSTACK=y
CONFIG_GRKERNSEC_PROC_MEMMAP=y
@@ -6208,6 +6224,7 @@ CONFIG_CRYPTO_LZ4HC=m
# Random Number Generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
+# CONFIG_CRYPTO_DRBG_MENU is not set
CONFIG_CRYPTO_USER_API=m
CONFIG_CRYPTO_USER_API_HASH=m
CONFIG_CRYPTO_USER_API_SKCIPHER=m
@@ -6217,6 +6234,7 @@ CONFIG_ASYMMETRIC_KEY_TYPE=m
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
CONFIG_PUBLIC_KEY_ALGO_RSA=m
CONFIG_X509_CERTIFICATE_PARSER=m
+# CONFIG_PKCS7_MESSAGE_PARSER is not set
CONFIG_BINARY_PRINTF=y
#
@@ -6277,12 +6295,15 @@ CONFIG_TEXTSEARCH_KMP=m
CONFIG_TEXTSEARCH_BM=m
CONFIG_TEXTSEARCH_FSM=m
CONFIG_BTREE=y
+CONFIG_INTERVAL_TREE=y
CONFIG_ASSOCIATIVE_ARRAY=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT_MAP=y
CONFIG_HAS_DMA=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_DQL=y
+CONFIG_GLOB=y
+# CONFIG_GLOB_SELFTEST is not set
CONFIG_NLATTR=y
CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
CONFIG_LRU_CACHE=m
@@ -6305,4 +6326,5 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
CONFIG_FONT_AUTOSELECT=y
+# CONFIG_ARCH_HAS_SG_CHAIN is not set
CONFIG_VIRTUALIZATION=y
diff --git a/libre/linux-libre-grsec/config.x86_64 b/libre/linux-libre-grsec/config.x86_64
index 81cd3235a..8d6934ae5 100644
--- a/libre/linux-libre-grsec/config.x86_64
+++ b/libre/linux-libre-grsec/config.x86_64
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.16.3-gnu-201409180901-1-grsec Kernel Configuration
+# Linux/x86 3.17.1-gnu-201410192051-1 Kernel Configuration
#
CONFIG_64BIT=y
CONFIG_X86_64=y
@@ -89,6 +89,7 @@ CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_ARCH_CLOCKSOURCE_DATA=y
+CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
@@ -134,9 +135,11 @@ CONFIG_RCU_FAST_NO_HZ=y
# CONFIG_TREE_RCU_TRACE is not set
# CONFIG_RCU_BOOST is not set
# CONFIG_RCU_NOCB_CPU is not set
+CONFIG_BUILD_BIN2C=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=19
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
CONFIG_ARCH_SUPPORTS_INT128=y
@@ -221,7 +224,7 @@ CONFIG_SLUB_DEBUG=y
# CONFIG_SLAB is not set
CONFIG_SLUB=y
CONFIG_SLUB_CPU_PARTIAL=y
-# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
+CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_PROFILING=y
CONFIG_TRACEPOINTS=y
CONFIG_OPROFILE=m
@@ -476,8 +479,9 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
CONFIG_CLEANCACHE=y
CONFIG_FRONTSWAP=y
# CONFIG_CMA is not set
-CONFIG_ZBUD=y
CONFIG_ZSWAP=y
+CONFIG_ZPOOL=y
+CONFIG_ZBUD=y
CONFIG_ZSMALLOC=y
# CONFIG_PGTABLE_MAPPING is not set
CONFIG_GENERIC_EARLY_IOREMAP=y
@@ -540,6 +544,8 @@ CONFIG_PM_TRACE_RTC=y
CONFIG_PM_CLK=y
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
CONFIG_ACPI=y
+CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y
+CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
CONFIG_ACPI_SLEEP=y
# CONFIG_ACPI_PROCFS_POWER is not set
CONFIG_ACPI_EC_DEBUGFS=m
@@ -567,6 +573,8 @@ CONFIG_ACPI_HED=y
CONFIG_ACPI_CUSTOM_METHOD=m
CONFIG_ACPI_BGRT=y
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
+CONFIG_HAVE_ACPI_APEI=y
+CONFIG_HAVE_ACPI_APEI_NMI=y
CONFIG_ACPI_APEI=y
CONFIG_ACPI_APEI_GHES=y
CONFIG_ACPI_APEI_PCIEAER=y
@@ -614,7 +622,6 @@ CONFIG_X86_SPEEDSTEP_LIB=m
# CPU Idle
#
CONFIG_CPU_IDLE=y
-# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set
@@ -722,6 +729,7 @@ CONFIG_SYSVIPC_COMPAT=y
CONFIG_KEYS_COMPAT=y
CONFIG_X86_DEV_DMA_OPS=y
CONFIG_IOSF_MBI=m
+CONFIG_PMC_ATOM=y
CONFIG_NET=y
CONFIG_COMPAT_NETLINK_MESSAGES=y
@@ -761,6 +769,7 @@ CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=m
+CONFIG_NET_UDP_TUNNEL=m
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
@@ -814,6 +823,7 @@ CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
# CONFIG_IPV6_MROUTE is not set
CONFIG_NETWORK_SECMARK=y
+CONFIG_NET_PTP_CLASSIFY=y
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
@@ -828,6 +838,7 @@ CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NF_CONNTRACK=m
+CONFIG_NF_LOG_COMMON=m
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
@@ -905,6 +916,7 @@ CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_NAT=m
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
@@ -1031,11 +1043,18 @@ CONFIG_IP_VS_PE_SIP=m
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_CONNTRACK_IPV4=m
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+CONFIG_NF_LOG_ARP=m
+CONFIG_NF_LOG_IPV4=m
CONFIG_NF_TABLES_IPV4=m
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
CONFIG_NFT_CHAIN_NAT_IPV4=m
CONFIG_NFT_REJECT_IPV4=m
CONFIG_NF_TABLES_ARP=m
+CONFIG_NF_NAT_IPV4=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
@@ -1044,15 +1063,10 @@ CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_SYNPROXY=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_NF_NAT_IPV4=m
+CONFIG_IP_NF_NAT=m
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_GRE=m
-CONFIG_NF_NAT_PPTP=m
-CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_TARGET_ECN=m
@@ -1071,6 +1085,8 @@ CONFIG_NF_TABLES_IPV6=m
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
CONFIG_NFT_CHAIN_NAT_IPV6=m
CONFIG_NFT_REJECT_IPV6=m
+CONFIG_NF_LOG_IPV6=m
+CONFIG_NF_NAT_IPV6=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
@@ -1087,11 +1103,13 @@ CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
-CONFIG_NF_NAT_IPV6=m
+CONFIG_IP6_NF_NAT=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_NF_TABLES_BRIDGE=m
CONFIG_NFT_BRIDGE_META=m
+CONFIG_NFT_BRIDGE_REJECT=m
+CONFIG_NF_LOG_BRIDGE=m
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -1112,7 +1130,6 @@ 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=m
CONFIG_INET_DCCP_DIAG=m
@@ -1173,9 +1190,9 @@ CONFIG_LLC2=m
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
CONFIG_PHONET=m
+CONFIG_6LOWPAN=m
CONFIG_IEEE802154=m
CONFIG_IEEE802154_6LOWPAN=m
-CONFIG_6LOWPAN_IPHC=m
CONFIG_MAC802154=m
CONFIG_NET_SCHED=y
@@ -1349,7 +1366,7 @@ CONFIG_VLSI_FIR=m
CONFIG_VIA_FIR=m
CONFIG_MCS_FIR=m
CONFIG_BT=m
-CONFIG_BT_6LOWPAN=y
+CONFIG_BT_6LOWPAN=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
@@ -1412,7 +1429,7 @@ 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_DEBUGFS=y
# CONFIG_MAC80211_MESSAGE_TRACING is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_WIMAX=m
@@ -1455,6 +1472,8 @@ CONFIG_NFC_MICROREAD_MEI=m
CONFIG_NFC_MRVL=m
CONFIG_NFC_MRVL_USB=m
CONFIG_NFC_ST21NFCA=m
+CONFIG_NFC_ST21NFCB=m
+CONFIG_NFC_ST21NFCB_I2C=m
CONFIG_HAVE_BPF_JIT=y
#
@@ -1473,6 +1492,7 @@ CONFIG_FW_LOADER=y
# CONFIG_FIRMWARE_IN_KERNEL is not set
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
+# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
@@ -1480,9 +1500,11 @@ CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_REGMAP=y
CONFIG_REGMAP_I2C=m
+CONFIG_REGMAP_SPI=m
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_DMA_SHARED_BUFFER=y
+# CONFIG_FENCE_TRACE is not set
#
# Bus devices
@@ -1680,9 +1702,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIFM_7XX1=m
CONFIG_ICS932S401=m
CONFIG_ENCLOSURE_SERVICES=m
-CONFIG_CS5535_MFGPT=m
-CONFIG_CS5535_MFGPT_DEFAULT_IRQ=7
-CONFIG_CS5535_CLOCK_EVENT_SRC=m
CONFIG_HP_ILO=m
CONFIG_APDS9802ALS=m
CONFIG_ISL29003=m
@@ -1733,6 +1752,11 @@ CONFIG_INTEL_MEI_TXE=m
CONFIG_VMWARE_VMCI=m
#
+# Intel MIC Bus Driver
+#
+CONFIG_INTEL_MIC_BUS=m
+
+#
# Intel MIC Host Driver
#
CONFIG_INTEL_MIC_HOST=m
@@ -1742,6 +1766,7 @@ CONFIG_INTEL_MIC_HOST=m
#
CONFIG_INTEL_MIC_CARD=m
CONFIG_GENWQE=m
+CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0
CONFIG_ECHO=m
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -1753,7 +1778,6 @@ CONFIG_SCSI_MOD=m
CONFIG_RAID_ATTRS=m
CONFIG_SCSI=m
CONFIG_SCSI_DMA=y
-CONFIG_SCSI_TGT=m
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y
@@ -1768,7 +1792,6 @@ CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=m
CONFIG_CHR_DEV_SCH=m
CONFIG_SCSI_ENCLOSURE=m
-CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
CONFIG_SCSI_SCAN_ASYNC=y
@@ -1778,14 +1801,12 @@ CONFIG_SCSI_SCAN_ASYNC=y
#
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
-# CONFIG_SCSI_FC_TGT_ATTRS is not set
CONFIG_SCSI_ISCSI_ATTRS=m
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=m
-CONFIG_SCSI_SRP_TGT_ATTRS=y
CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=m
CONFIG_ISCSI_BOOT_SYSFS=m
@@ -1880,7 +1901,6 @@ CONFIG_SCSI_DC390T=m
# CONFIG_SCSI_DEBUG is not set
CONFIG_SCSI_PMCRAID=m
CONFIG_SCSI_PM8001=m
-CONFIG_SCSI_SRP=m
CONFIG_SCSI_BFA_FC=m
CONFIG_SCSI_VIRTIO=m
CONFIG_SCSI_CHELSIO_FCOE=m
@@ -2164,6 +2184,7 @@ CONFIG_NET_VENDOR_AMD=y
CONFIG_AMD8111_ETH=m
CONFIG_PCNET32=m
CONFIG_PCMCIA_NMCLAN=m
+# CONFIG_NET_XGENE is not set
CONFIG_NET_VENDOR_ARC=y
CONFIG_NET_VENDOR_ATHEROS=y
CONFIG_ATL2=m
@@ -2183,7 +2204,6 @@ CONFIG_BNX2X=m
CONFIG_BNX2X_SRIOV=y
CONFIG_NET_VENDOR_BROCADE=y
CONFIG_BNA=m
-CONFIG_NET_CALXEDA_XGMAC=m
CONFIG_NET_VENDOR_CHELSIO=y
CONFIG_CHELSIO_T1=m
CONFIG_CHELSIO_T1_1G=y
@@ -2297,7 +2317,6 @@ CONFIG_8139TOO_TUNE_TWISTER=y
CONFIG_8139TOO_8129=y
# CONFIG_8139_OLD_RX_RESET is not set
CONFIG_R8169=m
-CONFIG_SH_ETH=m
CONFIG_NET_VENDOR_RDC=y
CONFIG_R6040=m
CONFIG_NET_VENDOR_SAMSUNG=y
@@ -2394,8 +2413,9 @@ CONFIG_SLHC=m
# CONFIG_SLIP_MODE_SLIP6 is not set
#
-# USB Network Adapters
+# Host-side USB support is needed for USB Network Adapter support
#
+CONFIG_USB_NET_DRIVERS=m
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
@@ -2470,13 +2490,15 @@ CONFIG_ATH9K_BTCOEX_SUPPORT=y
CONFIG_ATH9K=m
CONFIG_ATH9K_PCI=y
CONFIG_ATH9K_AHB=y
-# CONFIG_ATH9K_DEBUGFS is not set
+CONFIG_ATH9K_DEBUGFS=y
+CONFIG_ATH9K_STATION_STATISTICS=y
CONFIG_ATH9K_WOW=y
CONFIG_ATH9K_RFKILL=y
CONFIG_ATH9K_HTC=m
# CONFIG_ATH9K_HTC_DEBUGFS is not set
CONFIG_CARL9170=m
CONFIG_CARL9170_LEDS=y
+# CONFIG_CARL9170_DEBUGFS is not set
CONFIG_CARL9170_WPC=y
# CONFIG_CARL9170_HWRNG is not set
CONFIG_ATH6KL=m
@@ -2507,6 +2529,7 @@ CONFIG_B43_PCMCIA=y
CONFIG_B43_SDIO=y
CONFIG_B43_BCMA_PIO=y
CONFIG_B43_PIO=y
+CONFIG_B43_PHY_G=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_HT=y
@@ -2527,8 +2550,11 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
CONFIG_BRCMUTIL=m
CONFIG_BRCMSMAC=m
CONFIG_BRCMFMAC=m
+CONFIG_BRCMFMAC_PROTO_BCDC=y
+CONFIG_BRCMFMAC_PROTO_MSGBUF=y
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_USB=y
+CONFIG_BRCMFMAC_PCIE=y
# CONFIG_BRCM_TRACING is not set
# CONFIG_BRCMDBG is not set
CONFIG_HOSTAP=m
@@ -2550,6 +2576,7 @@ CONFIG_IWLWIFI_OPMODE_MODULAR=y
# Debugging Options
#
# CONFIG_IWLWIFI_DEBUG is not set
+# CONFIG_IWLWIFI_DEBUGFS is not set
CONFIG_IWLWIFI_DEVICE_TRACING=y
CONFIG_IWLEGACY=m
CONFIG_IWL4965=m
@@ -2559,6 +2586,7 @@ CONFIG_IWL3945=m
# iwl3945 / iwl4965 Debugging Options
#
# CONFIG_IWLEGACY_DEBUG is not set
+# CONFIG_IWLEGACY_DEBUGFS is not set
CONFIG_LIBERTAS=m
CONFIG_LIBERTAS_USB=m
CONFIG_LIBERTAS_CS=m
@@ -2609,6 +2637,7 @@ CONFIG_RT2X00_LIB=m
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_RT2X00_LIB_CRYPTO=y
CONFIG_RT2X00_LIB_LEDS=y
+# CONFIG_RT2X00_LIB_DEBUGFS is not set
# CONFIG_RT2X00_DEBUG is not set
CONFIG_RTL_CARDS=m
CONFIG_RTL8192CE=m
@@ -2661,6 +2690,7 @@ CONFIG_IEEE802154_FAKEHARD=m
CONFIG_IEEE802154_FAKELB=m
CONFIG_IEEE802154_AT86RF230=m
# CONFIG_IEEE802154_MRF24J40 is not set
+# CONFIG_IEEE802154_CC2520 is not set
CONFIG_VMXNET3=m
CONFIG_HYPERV_NET=m
CONFIG_ISDN=y
@@ -2897,7 +2927,7 @@ 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_TABLET_SERIAL_WACOM4=m
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ADS7846 is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
@@ -3138,6 +3168,10 @@ CONFIG_TCG_ATMEL=m
CONFIG_TCG_INFINEON=m
CONFIG_TCG_ST33_I2C=m
CONFIG_TELCLOCK=m
+
+#
+# I2C support
+#
CONFIG_I2C=m
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
@@ -3280,14 +3314,13 @@ CONFIG_PINCTRL=y
#
# Pin controllers
#
-# CONFIG_PINMUX is not set
-# CONFIG_PINCONF is not set
# CONFIG_DEBUG_PINCTRL is not set
# CONFIG_PINCTRL_BAYTRAIL is not set
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
CONFIG_GPIOLIB=y
CONFIG_GPIO_DEVRES=y
CONFIG_GPIO_ACPI=y
+CONFIG_GPIOLIB_IRQCHIP=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_GPIO_SYSFS=y
@@ -3317,7 +3350,6 @@ CONFIG_GPIO_LP3943=m
#
# PCI GPIO expanders:
#
-CONFIG_GPIO_CS5535=m
CONFIG_GPIO_AMD8111=m
# CONFIG_GPIO_INTEL_MID is not set
# CONFIG_GPIO_ML_IOH is not set
@@ -3422,6 +3454,7 @@ CONFIG_SENSORS_IBMPEX=m
CONFIG_SENSORS_CORETEMP=m
CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
+CONFIG_SENSORS_POWR1220=m
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LTC2945=m
CONFIG_SENSORS_LTC4151=m
@@ -3472,6 +3505,7 @@ CONFIG_SENSORS_LTC2978=m
CONFIG_SENSORS_MAX16064=m
CONFIG_SENSORS_MAX34440=m
CONFIG_SENSORS_MAX8688=m
+CONFIG_SENSORS_TPS40422=m
CONFIG_SENSORS_UCD9000=m
CONFIG_SENSORS_UCD9200=m
CONFIG_SENSORS_ZL6100=m
@@ -3499,6 +3533,7 @@ CONFIG_SENSORS_INA209=m
CONFIG_SENSORS_INA2XX=m
CONFIG_SENSORS_THMC50=m
CONFIG_SENSORS_TMP102=m
+CONFIG_SENSORS_TMP103=m
CONFIG_SENSORS_TMP401=m
CONFIG_SENSORS_TMP421=m
CONFIG_SENSORS_VIA_CPUTEMP=m
@@ -3554,7 +3589,6 @@ CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_F71808E_WDT=m
CONFIG_SP5100_TCO=m
-CONFIG_GEODE_WDT=m
CONFIG_SBC_FITPC2_WATCHDOG=m
CONFIG_EUROTECH_WDT=m
CONFIG_IB700_WDT=m
@@ -3630,7 +3664,6 @@ CONFIG_BCMA_DRIVER_GPIO=y
# Multifunction device drivers
#
CONFIG_MFD_CORE=y
-CONFIG_MFD_CS5535=m
CONFIG_MFD_BCM590XX=m
CONFIG_MFD_CROS_EC=m
CONFIG_MFD_CROS_EC_I2C=m
@@ -3669,7 +3702,6 @@ CONFIG_MFD_TPS65218=m
# CONFIG_MFD_TPS65912_SPI is not set
CONFIG_MFD_WL1273_CORE=m
CONFIG_MFD_LM3533=m
-# CONFIG_MFD_TIMBERDALE is not set
# CONFIG_MFD_TMIO is not set
CONFIG_MFD_VX855=m
CONFIG_MFD_ARIZONA=y
@@ -3689,6 +3721,7 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
+CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_RC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_DEV=m
@@ -3727,10 +3760,10 @@ 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_SHARP_DECODER=m
CONFIG_IR_MCE_KBD_DECODER=m
+CONFIG_IR_XMP_DECODER=m
CONFIG_RC_DEVICES=y
CONFIG_RC_ATI_REMOTE=m
CONFIG_IR_ENE=m
@@ -3832,12 +3865,17 @@ CONFIG_VIDEO_USBVISION=m
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_GO7007=m
+CONFIG_VIDEO_GO7007_USB=m
+CONFIG_VIDEO_GO7007_LOADER=m
+# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=m
CONFIG_VIDEO_AU0828_V4L2=y
+CONFIG_VIDEO_AU0828_RC=y
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_CX231XX_ALSA=m
@@ -3902,6 +3940,12 @@ CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_EM28XX_ALSA=m
CONFIG_VIDEO_EM28XX_DVB=m
CONFIG_VIDEO_EM28XX_RC=m
+
+#
+# Software defined radio USB devices
+#
+CONFIG_USB_MSI2500=m
+CONFIG_USB_AIRSPY=m
CONFIG_MEDIA_PCI_SUPPORT=y
#
@@ -3926,6 +3970,7 @@ CONFIG_VIDEO_ZORAN_AVS6EYES=m
CONFIG_VIDEO_HEXIUM_GEMINI=m
CONFIG_VIDEO_HEXIUM_ORION=m
CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_SOLO6X10=m
#
# Media capture/analog/hybrid TV support
@@ -4131,6 +4176,7 @@ CONFIG_MEDIA_TUNER_TDA18271=m
CONFIG_MEDIA_TUNER_TDA9887=m
CONFIG_MEDIA_TUNER_TEA5761=m
CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MSI001=m
CONFIG_MEDIA_TUNER_MT20XX=m
CONFIG_MEDIA_TUNER_MT2060=m
CONFIG_MEDIA_TUNER_MT2063=m
@@ -4171,6 +4217,7 @@ CONFIG_DVB_M88DS3103=m
#
CONFIG_DVB_DRXK=m
CONFIG_DVB_TDA18271C2DD=m
+CONFIG_DVB_SI2165=m
#
# DVB-S (satellite) frontends
@@ -4226,6 +4273,7 @@ CONFIG_DVB_STV0367=m
CONFIG_DVB_CXD2820R=m
CONFIG_DVB_RTL2830=m
CONFIG_DVB_RTL2832=m
+CONFIG_DVB_RTL2832_SDR=m
CONFIG_DVB_SI2168=m
#
@@ -4443,7 +4491,6 @@ CONFIG_BACKLIGHT_APPLE=m
# CONFIG_BACKLIGHT_ADP8870 is not set
CONFIG_BACKLIGHT_PCF50633=m
# CONFIG_BACKLIGHT_LM3639 is not set
-# CONFIG_BACKLIGHT_OT200 is not set
# CONFIG_BACKLIGHT_TPS65217 is not set
# CONFIG_BACKLIGHT_GPIO is not set
# CONFIG_BACKLIGHT_LV5207LP is not set
@@ -4668,6 +4715,7 @@ CONFIG_HID_ELO=m
CONFIG_HID_EZKEY=m
CONFIG_HID_HOLTEK=m
CONFIG_HOLTEK_FF=y
+CONFIG_HID_GT683R=m
CONFIG_HID_HUION=m
CONFIG_HID_KEYTOUCH=m
CONFIG_HID_KYE=m
@@ -4678,7 +4726,7 @@ CONFIG_HID_ICADE=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_KENSINGTON=m
CONFIG_HID_LCPOWER=m
-CONFIG_HID_LENOVO_TPKBD=m
+CONFIG_HID_LENOVO=m
CONFIG_HID_LOGITECH=m
CONFIG_HID_LOGITECH_DJ=m
CONFIG_LOGITECH_FF=y
@@ -4831,6 +4879,10 @@ CONFIG_USB_UAS=m
#
CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
+CONFIG_USBIP_CORE=m
+CONFIG_USBIP_VHCI_HCD=m
+CONFIG_USBIP_HOST=m
+# CONFIG_USBIP_DEBUG is not set
CONFIG_USB_MUSB_HDRC=m
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_GADGET is not set
@@ -4930,6 +4982,7 @@ CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=m
CONFIG_USB_EZUSB_FX2=m
CONFIG_USB_HSIC_USB3503=m
+CONFIG_USB_LINK_LAYER_TEST=m
CONFIG_USB_ATM=m
CONFIG_USB_SPEEDTOUCH=m
CONFIG_USB_CXACRU=m
@@ -5163,6 +5216,7 @@ CONFIG_EDAC_E752X=m
CONFIG_EDAC_I82975X=m
CONFIG_EDAC_I3000=m
CONFIG_EDAC_I3200=m
+CONFIG_EDAC_IE31200=m
CONFIG_EDAC_X38=m
CONFIG_EDAC_I5400=m
CONFIG_EDAC_I7CORE=m
@@ -5202,6 +5256,7 @@ CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF8523=m
CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_M41T80=m
CONFIG_RTC_DRV_M41T80_WDT=y
@@ -5238,6 +5293,8 @@ CONFIG_RTC_DRV_DS1286=m
CONFIG_RTC_DRV_DS1511=m
CONFIG_RTC_DRV_DS1553=m
CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_DS2404=m
+CONFIG_RTC_DRV_EFI=m
CONFIG_RTC_DRV_STK17TA8=m
CONFIG_RTC_DRV_M48T86=m
CONFIG_RTC_DRV_M48T35=m
@@ -5246,14 +5303,12 @@ CONFIG_RTC_DRV_MSM6242=m
CONFIG_RTC_DRV_BQ4802=m
CONFIG_RTC_DRV_RP5C01=m
CONFIG_RTC_DRV_V3020=m
-CONFIG_RTC_DRV_DS2404=m
CONFIG_RTC_DRV_PCF50633=m
#
# on-CPU RTC drivers
#
CONFIG_RTC_DRV_MC13XXX=m
-# CONFIG_RTC_DRV_MOXART is not set
# CONFIG_RTC_DRV_XGENE is not set
#
@@ -5266,6 +5321,7 @@ CONFIG_DMADEVICES=y
#
# DMA Devices
#
+CONFIG_INTEL_MIC_X100_DMA=m
CONFIG_INTEL_MID_DMAC=m
CONFIG_INTEL_IOATDMA=m
CONFIG_DW_DMAC_CORE=m
@@ -5320,11 +5376,6 @@ CONFIG_HYPERV_BALLOON=m
CONFIG_STAGING=y
CONFIG_ET131X=m
CONFIG_SLICOSS=m
-CONFIG_USBIP_CORE=m
-CONFIG_USBIP_VHCI_HCD=m
-CONFIG_USBIP_HOST=m
-# CONFIG_USBIP_DEBUG is not set
-CONFIG_W35UND=m
CONFIG_PRISM2_USB=m
CONFIG_COMEDI=m
# CONFIG_COMEDI_DEBUG is not set
@@ -5425,7 +5476,6 @@ CONFIG_RTL8192E=m
CONFIG_R8712U=m
CONFIG_R8188EU=m
CONFIG_88EU_AP_MODE=y
-CONFIG_88EU_P2P=y
CONFIG_R8192EE=m
CONFIG_R8723AU=m
CONFIG_8723AU_AP_MODE=y
@@ -5433,14 +5483,10 @@ CONFIG_8723AU_BT_COEXIST=y
CONFIG_R8821AE=m
CONFIG_RTS5208=m
# CONFIG_RTS5208_DEBUG is not set
-# CONFIG_TRANZPORT is not set
-CONFIG_IDE_PHISON=m
CONFIG_LINE6_USB=m
# CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set
-CONFIG_USB_SERIAL_QUATECH2=m
CONFIG_VT6655=m
CONFIG_VT6656=m
-CONFIG_DX_SEP=m
#
# IIO staging drivers
@@ -5461,7 +5507,6 @@ CONFIG_DX_SEP=m
#
# Analog to digital converters
#
-# CONFIG_AD7291 is not set
# CONFIG_AD7606 is not set
# CONFIG_AD7780 is not set
# CONFIG_AD7816 is not set
@@ -5512,7 +5557,9 @@ CONFIG_DX_SEP=m
#
# Magnetometer sensors
#
-# CONFIG_SENSORS_HMC5843 is not set
+CONFIG_SENSORS_HMC5843=m
+CONFIG_SENSORS_HMC5843_I2C=m
+CONFIG_SENSORS_HMC5843_SPI=m
#
# Active energy metering IC
@@ -5535,12 +5582,7 @@ CONFIG_DX_SEP=m
#
# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
# CONFIG_IIO_SIMPLE_DUMMY is not set
-CONFIG_WLAGS49_H2=m
-CONFIG_WLAGS49_H25=m
-CONFIG_CRYSTALHD=m
CONFIG_FB_XGI=m
-CONFIG_ACPI_QUICKSTART=m
-CONFIG_USB_ENESTORAGE=m
CONFIG_BCM_WIMAX=m
CONFIG_FT1000=m
CONFIG_FT1000_USB=m
@@ -5570,17 +5612,8 @@ CONFIG_DVB_CXD2099=m
CONFIG_VIDEO_DT3155=m
CONFIG_DT3155_CCIR=y
CONFIG_DT3155_STREAMING=y
-CONFIG_VIDEO_GO7007=m
-CONFIG_VIDEO_GO7007_USB=m
-CONFIG_VIDEO_GO7007_LOADER=m
-# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
-# CONFIG_USB_MSI3101 is not set
-# CONFIG_MEDIA_TUNER_MSI001 is not set
CONFIG_VIDEO_V4L2_INT_DEVICE=m
CONFIG_VIDEO_TCM825X=m
-CONFIG_USB_SN9C102=m
-CONFIG_SOLO6X10=m
-# CONFIG_DVB_RTL2832_SDR is not set
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_BT829=m
CONFIG_LIRC_IGORPLUGUSB=m
@@ -5605,11 +5638,6 @@ CONFIG_WIMAX_GDM72XX_USB=y
# CONFIG_WIMAX_GDM72XX_SDIO is not set
CONFIG_WIMAX_GDM72XX_USB_PM=y
CONFIG_LTE_GDM724X=m
-CONFIG_NET_VENDOR_SILICOM=y
-CONFIG_SBYPASS=m
-CONFIG_BPCTL=m
-CONFIG_CED1401=m
-CONFIG_DGRP=m
CONFIG_FIREWIRE_SERIAL=m
CONFIG_FWTTY_MAX_TOTAL_PORTS=64
CONFIG_FWTTY_MAX_CARD_PORTS=32
@@ -5628,6 +5656,7 @@ CONFIG_DGAP=m
CONFIG_GS_FPGABOOT=m
CONFIG_CRYPTO_SKEIN=y
CONFIG_CRYPTO_THREEFISH=y
+# CONFIG_UNISYSSPAR is not set
CONFIG_X86_PLATFORM_DEVICES=y
CONFIG_ACER_WMI=m
CONFIG_ACERHDF=m
@@ -5668,6 +5697,7 @@ CONFIG_MSI_WMI=m
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_ACPI_TOSHIBA=m
CONFIG_TOSHIBA_BT_RFKILL=m
+CONFIG_TOSHIBA_HAPS=m
CONFIG_ACPI_CMPC=m
CONFIG_INTEL_IPS=m
CONFIG_IBM_RTL=m
@@ -5698,6 +5728,10 @@ CONFIG_COMMON_CLK=y
#
# Hardware Spinlock drivers
#
+
+#
+# Clock Source drivers
+#
CONFIG_CLKEVT_I8253=y
CONFIG_I8253_LOCK=y
CONFIG_CLKBLD_I8253=y
@@ -5732,8 +5766,9 @@ CONFIG_EXTCON=m
#
# Extcon Device Drivers
#
-CONFIG_EXTCON_GPIO=m
# CONFIG_EXTCON_ADC_JACK is not set
+CONFIG_EXTCON_GPIO=m
+CONFIG_EXTCON_SM5502=m
CONFIG_MEMORY=y
CONFIG_IIO=m
CONFIG_IIO_BUFFER=y
@@ -5753,11 +5788,13 @@ CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m
CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
# CONFIG_KXSD9 is not set
# CONFIG_MMA8452 is not set
+CONFIG_KXCJK1013=m
#
# Analog to digital converters
#
# CONFIG_AD7266 is not set
+# CONFIG_AD7291 is not set
# CONFIG_AD7298 is not set
# CONFIG_AD7476 is not set
# CONFIG_AD7791 is not set
@@ -5765,6 +5802,7 @@ CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
# CONFIG_AD799X is not set
+# CONFIG_MAX1027 is not set
# CONFIG_MAX1363 is not set
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
@@ -5805,6 +5843,7 @@ CONFIG_IIO_ST_SENSORS_CORE=m
# CONFIG_AD7303 is not set
# CONFIG_MAX517 is not set
# CONFIG_MCP4725 is not set
+# CONFIG_MCP4922 is not set
#
# Frequency Synthesizers DDS/PLL
@@ -5855,10 +5894,12 @@ CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
# CONFIG_CM32181 is not set
# CONFIG_CM36651 is not set
# CONFIG_GP2AP020A00F is not set
+# CONFIG_ISL29125 is not set
CONFIG_HID_SENSOR_ALS=m
# CONFIG_HID_SENSOR_PROX is not set
# CONFIG_SENSORS_LM3533 is not set
# CONFIG_LTR501 is not set
+# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_SENSORS_TSL2563 is not set
# CONFIG_TSL4531 is not set
@@ -5868,6 +5909,7 @@ CONFIG_HID_SENSOR_ALS=m
# Magnetometer sensors
#
# CONFIG_AK8975 is not set
+# CONFIG_AK09911 is not set
# CONFIG_MAG3110 is not set
CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
CONFIG_IIO_ST_MAGN_3AXIS=m
@@ -5893,6 +5935,7 @@ CONFIG_IIO_INTERRUPT_TRIGGER=m
# CONFIG_MPL115 is not set
# CONFIG_MPL3115 is not set
# CONFIG_IIO_ST_PRESS is not set
+# CONFIG_T5403 is not set
#
# Lightning sensors
@@ -5922,10 +5965,11 @@ CONFIG_FMC_CHARDEV=m
#
CONFIG_GENERIC_PHY=y
CONFIG_BCM_KONA_USB2_PHY=m
-CONFIG_PHY_SAMSUNG_USB2=m
CONFIG_POWERCAP=y
CONFIG_INTEL_RAPL=m
# CONFIG_MCB is not set
+CONFIG_RAS=y
+CONFIG_THUNDERBOLT=m
#
# Firmware Drivers
@@ -5946,6 +5990,7 @@ CONFIG_ISCSI_IBFT=m
# EFI (Extensible Firmware Interface) Support
#
# CONFIG_EFI_VARS is not set
+CONFIG_EFI_RUNTIME_WRAPPERS=y
CONFIG_UEFI_CPER=y
#
@@ -6265,7 +6310,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
-CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_BOOT_PRINTK_DELAY is not set
CONFIG_DYNAMIC_DEBUG=y
@@ -6333,7 +6378,6 @@ CONFIG_TIMER_STATS=y
# Lock Debugging (spinlocks, mutexes, etc...)
#
# 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_ATOMIC_SLEEP is not set
@@ -6351,7 +6395,6 @@ CONFIG_DEBUG_LIST=y
#
# RCU Debugging
#
-# CONFIG_PROVE_RCU_DELAY is not set
# CONFIG_SPARSE_RCU_POINTER is not set
# CONFIG_TORTURE_TEST is not set
# CONFIG_RCU_TORTURE_TEST is not set
@@ -6368,7 +6411,6 @@ CONFIG_NOP_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
@@ -6426,10 +6468,13 @@ CONFIG_PERCPU_TEST=m
CONFIG_ASYNC_RAID6_TEST=m
# CONFIG_TEST_STRING_HELPERS is not set
CONFIG_TEST_KSTRTOX=m
+# CONFIG_TEST_RHASHTABLE is not set
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_TEST_MODULE is not set
# CONFIG_TEST_USER_COPY is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIRMWARE is not set
+# CONFIG_TEST_UDELAY is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
@@ -6538,7 +6583,7 @@ CONFIG_PAX_SIZE_OVERFLOW=y
#
CONFIG_GRKERNSEC_KMEM=y
CONFIG_GRKERNSEC_IO=y
-CONFIG_GRKERNSEC_JIT_HARDEN=y
+CONFIG_GRKERNSEC_BPF_HARDEN=y
CONFIG_GRKERNSEC_PERF_HARDEN=y
CONFIG_GRKERNSEC_RAND_THREADSTACK=y
CONFIG_GRKERNSEC_PROC_MEMMAP=y
@@ -6767,6 +6812,7 @@ CONFIG_CRYPTO_CAST5_AVX_X86_64=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CAST6_AVX_X86_64=m
CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_DES3_EDE_X86_64=m
CONFIG_CRYPTO_FCRYPT=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_SALSA20=m
@@ -6796,6 +6842,7 @@ CONFIG_CRYPTO_LZ4HC=m
# Random Number Generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
+# CONFIG_CRYPTO_DRBG_MENU is not set
CONFIG_CRYPTO_USER_API=m
CONFIG_CRYPTO_USER_API_HASH=m
CONFIG_CRYPTO_USER_API_SKCIPHER=m
@@ -6807,12 +6854,17 @@ CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
CONFIG_CRYPTO_DEV_CCP=y
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
+CONFIG_CRYPTO_DEV_QAT=m
+CONFIG_CRYPTO_DEV_QAT_DH895xCC=m
CONFIG_ASYMMETRIC_KEY_TYPE=m
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
CONFIG_PUBLIC_KEY_ALGO_RSA=m
CONFIG_X509_CERTIFICATE_PARSER=m
+CONFIG_PKCS7_MESSAGE_PARSER=m
+CONFIG_PKCS7_TEST_KEY=m
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
+CONFIG_HAVE_KVM_IRQFD=y
CONFIG_HAVE_KVM_IRQ_ROUTING=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_APIC_ARCHITECTURE=y
@@ -6843,6 +6895,7 @@ CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_IO=y
CONFIG_PERCPU_RWSEM=y
CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
+CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
CONFIG_CRC_CCITT=m
CONFIG_CRC16=m
CONFIG_CRC_T10DIF=m
@@ -6900,6 +6953,8 @@ CONFIG_HAS_DMA=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_CPU_RMAP=y
CONFIG_DQL=y
+CONFIG_GLOB=y
+# CONFIG_GLOB_SELFTEST is not set
CONFIG_NLATTR=y
CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
CONFIG_LRU_CACHE=m
@@ -6923,3 +6978,4 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
CONFIG_FONT_AUTOSELECT=y
+CONFIG_ARCH_HAS_SG_CHAIN=y
diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD
index 019301ef3..b9aa72a50 100644
--- a/libre/linux-libre-lts/PKGBUILD
+++ b/libre/linux-libre-lts/PKGBUILD
@@ -9,7 +9,7 @@
pkgbase=linux-libre-lts # Build kernel with -lts localname
_pkgbasever=3.14-gnu
-_pkgver=3.14.21-gnu
+_pkgver=3.14.22-gnu
_replacesarchkernel=('linux%') # '%' gets replaced with _kernelname
_replacesoldkernels=('kernel26%' 'kernel26-libre%') # '%' gets replaced with _kernelname
@@ -39,7 +39,7 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/li
# loongson-community patch: http://linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/
'3.14.14-a410a5e2b7-loongson-community.patch')
sha256sums=('477555c709b9407fe37dbd70d3331ff9dde1f9d874aba2741f138d07ae6f281b'
- '557ab280751bd872ac5388ae05c91d3669b8635e5c768bf688240f53c18c1500'
+ 'add07b661a131e71d01e47039c3f1e03e96f5714367b01f288be2429cc6b9b37'
'3ebd2bb592b1455bb3d956ebaffcec265c2fda85a8106aceec8a0056589d8348'
'c8edde146ccd451243801e5d3b7ab5927fa4b5bcac21debd6d5ce9dc79b32cf9'
'18a94cb727c2cae80b1dbd3cddbb1e5484458d4c01b026b69cea68bc2df162d7'
diff --git a/libre/linux-libre-grsec/3.16-7981337ad0-loongson-community.patch b/libre/linux-libre/3.17-rc6-5358c5e4e5-loongson-community.patch
index 243f9dddb..ee5bbc143 100644
--- a/libre/linux-libre-grsec/3.16-7981337ad0-loongson-community.patch
+++ b/libre/linux-libre/3.17-rc6-5358c5e4e5-loongson-community.patch
@@ -1,8 +1,32 @@
+diff --git a/Makefile b/Makefile
+index a192280..c495766 100644
+--- a/Makefile
++++ b/Makefile
+@@ -303,8 +303,8 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
+
+ HOSTCC = gcc
+ HOSTCXX = g++
+-HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer
+-HOSTCXXFLAGS = -O2
++HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O3 -fomit-frame-pointer
++HOSTCXXFLAGS = -O3
+
+ ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
+ HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \
+@@ -619,7 +619,7 @@ KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,)
+ ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
+ KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,)
+ else
+-KBUILD_CFLAGS += -O2
++KBUILD_CFLAGS += -O3
+ endif
+
+ # Tell gcc to never replace conditional load with a non-conditional one
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
-index 4e238e6..4e71740 100644
+index 574c430..4395d8a 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -285,7 +285,7 @@ config LASAT
+@@ -288,7 +288,7 @@ config LASAT
config MACH_LOONGSON
bool "Loongson family of machines"
@@ -11,7 +35,7 @@ index 4e238e6..4e71740 100644
help
This enables the support of Loongson family of machines.
-@@ -919,6 +919,60 @@ config CSRC_IOASIC
+@@ -923,6 +923,60 @@ config CSRC_IOASIC
config CSRC_R4K
bool
@@ -72,7 +96,7 @@ index 4e238e6..4e71740 100644
config CSRC_GIC
select MIPS_CM
bool
-@@ -1557,6 +1611,15 @@ config CPU_LOONGSON2
+@@ -1561,6 +1615,15 @@ config CPU_LOONGSON2
bool
select CPU_SUPPORTS_32BIT_KERNEL
select CPU_SUPPORTS_64BIT_KERNEL
@@ -88,7 +112,7 @@ index 4e238e6..4e71740 100644
select CPU_SUPPORTS_HIGHMEM
select CPU_SUPPORTS_HUGEPAGES
-@@ -2201,7 +2264,7 @@ config CPU_SUPPORTS_MSA
+@@ -2208,7 +2271,7 @@ config CPU_SUPPORTS_MSA
config ARCH_FLATMEM_ENABLE
def_bool y
@@ -165,10 +189,10 @@ index 61af6b6..8598044 100644
-clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec}
+clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec,unsstrip}
diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c
-index c00c4dd..f4a656d 100644
+index 31903cf..14da73c 100644
--- a/arch/mips/boot/compressed/decompress.c
+++ b/arch/mips/boot/compressed/decompress.c
-@@ -27,8 +27,13 @@ unsigned long free_mem_end_ptr;
+@@ -28,8 +28,13 @@ unsigned long free_mem_end_ptr;
extern unsigned char __image_begin, __image_end;
/* debug interfaces */
@@ -263,7 +287,7 @@ index 021d017..50aafca 100644
+
#endif /*!_CS5536_MFGPT_H */
diff --git a/arch/mips/include/asm/mach-loongson/loongson.h b/arch/mips/include/asm/mach-loongson/loongson.h
-index f3fd1eb..3fdfe84 100644
+index 92bf76c..e05a016 100644
--- a/arch/mips/include/asm/mach-loongson/loongson.h
+++ b/arch/mips/include/asm/mach-loongson/loongson.h
@@ -46,6 +46,12 @@ static inline void prom_init_uart_base(void)
@@ -280,7 +304,7 @@ index f3fd1eb..3fdfe84 100644
extern void bonito_irqdispatch(void);
extern void __init bonito_irq_init(void);
diff --git a/arch/mips/include/asm/mach-loongson/machine.h b/arch/mips/include/asm/mach-loongson/machine.h
-index 1b1f592..2f6eb79 100644
+index 228e3784..a2faa87 100644
--- a/arch/mips/include/asm/mach-loongson/machine.h
+++ b/arch/mips/include/asm/mach-loongson/machine.h
@@ -24,6 +24,12 @@
@@ -293,7 +317,7 @@ index 1b1f592..2f6eb79 100644
+
+#endif
+
- #ifdef CONFIG_LEMOTE_MACH3A
+ #ifdef CONFIG_LOONGSON_MACH3X
#define LOONGSON_MACHTYPE MACH_LEMOTE_A1101
diff --git a/arch/mips/include/asm/mach-loongson1/clock.h b/arch/mips/include/asm/mach-loongson1/clock.h
@@ -386,6 +410,23 @@ index 0000000..6d5db23
+#define LS1X_INTC_INTEDGE(n) LS1X_INTC_REG(n, 0x14)
+
+#endif /* __ASM_MACH_LOONGSON1_REGS_INTC_H */
+diff --git a/arch/mips/include/asm/sparsemem.h b/arch/mips/include/asm/sparsemem.h
+index b1071c1..8b8e551 100644
+--- a/arch/mips/include/asm/sparsemem.h
++++ b/arch/mips/include/asm/sparsemem.h
+@@ -11,7 +11,11 @@
+ #else
+ # define SECTION_SIZE_BITS 28
+ #endif
+-#define MAX_PHYSMEM_BITS 48
++#if !defined(CONFIG_MACH_LOONGSON) || !defined(CONFIG_CPU_LOONGSON2) /* Commit c461731836 broke Loongson2. */
++# define MAX_PHYSMEM_BITS 48
++#else
++# define MAX_PHYSMEM_BITS 35
++#endif
+
+ #endif /* CONFIG_SPARSEMEM */
+ #endif /* _MIPS_SPARSEMEM_H */
diff --git a/arch/mips/include/asm/timex.h b/arch/mips/include/asm/timex.h
index b05bb70..44c9a69 100644
--- a/arch/mips/include/asm/timex.h
@@ -434,7 +475,7 @@ index 4bfdb9d..f57d892 100644
msub_s_op = 0x28, msub_d_op = 0x29,
msub_e_op = 0x2a, nmadd_s_op = 0x30,
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
-index f1343cc..1320561 100644
+index 9e10d11..e480102 100644
--- a/arch/mips/kernel/scall64-o32.S
+++ b/arch/mips/kernel/scall64-o32.S
@@ -26,6 +26,18 @@
@@ -493,7 +534,7 @@ index eeddc58..d7bec00 100644
obj-$(CONFIG_PCI) += iomap-pci.o
diff --git a/arch/mips/loongson/Kconfig b/arch/mips/loongson/Kconfig
-index e6a86cc..df57920 100644
+index 1b91fc6a..aa1fd8e 100644
--- a/arch/mips/loongson/Kconfig
+++ b/arch/mips/loongson/Kconfig
@@ -32,12 +32,12 @@ config LEMOTE_FULOONG2E
@@ -557,10 +598,10 @@ index e6a86cc..df57920 100644
+ help
+ Dexxon gdium netbook based on Loongson 2F and SM502.
+
- config LEMOTE_MACH3A
- bool "Lemote Loongson 3A family machines"
+ config LOONGSON_MACH3X
+ bool "Generic Loongson 3 family machines"
select ARCH_SPARSEMEM_ENABLE
-@@ -134,6 +158,24 @@ config LOONGSON_MC146818
+@@ -135,6 +159,24 @@ config LOONGSON_MC146818
bool
default n
@@ -603,7 +644,7 @@ index 7429994..63214c8 100644
#
diff --git a/arch/mips/loongson/Platform b/arch/mips/loongson/Platform
-index 6205372..32dd006 100644
+index 0ac20eb..cd957dd 100644
--- a/arch/mips/loongson/Platform
+++ b/arch/mips/loongson/Platform
@@ -30,4 +30,5 @@ platform-$(CONFIG_MACH_LOONGSON) += loongson/
@@ -611,7 +652,7 @@ index 6205372..32dd006 100644
load-$(CONFIG_LEMOTE_FULOONG2E) += 0xffffffff80100000
load-$(CONFIG_LEMOTE_MACH2F) += 0xffffffff80200000
+load-$(CONFIG_DEXXON_GDIUM) += 0xffffffff80200000
- load-$(CONFIG_CPU_LOONGSON3) += 0xffffffff80200000
+ load-$(CONFIG_LOONGSON_MACH3X) += 0xffffffff80200000
diff --git a/arch/mips/loongson/common/cmdline.c b/arch/mips/loongson/common/cmdline.c
index 72fed00..96d5919 100644
--- a/arch/mips/loongson/common/cmdline.c
@@ -664,6 +705,18 @@ index 72fed00..96d5919 100644
+ /* copy arcs_cmdline into loongson_cmdline */
+ strncpy(loongson_cmdline, arcs_cmdline, COMMAND_LINE_SIZE);
}
+diff --git a/arch/mips/loongson/common/env.c b/arch/mips/loongson/common/env.c
+index f152285..c7671ef 100644
+--- a/arch/mips/loongson/common/env.c
++++ b/arch/mips/loongson/common/env.c
+@@ -28,6 +28,7 @@ struct efi_memory_map_loongson *loongson_memmap;
+ struct loongson_system_configuration loongson_sysconf;
+
+ u64 loongson_chipcfg[MAX_PACKAGES] = {0xffffffffbfc00180};
++EXPORT_SYMBOL_GPL(loongson_chipcfg);
+ u64 loongson_freqctrl[MAX_PACKAGES];
+
+ unsigned long long smp_group[4];
diff --git a/arch/mips/loongson/gdium/Makefile b/arch/mips/loongson/gdium/Makefile
new file mode 100644
index 0000000..f3f4f51
@@ -1630,6 +1683,30 @@ index 4f9eaa3..f945bd7a 100644
#
# Suspend Support
+diff --git a/arch/mips/loongson/lemote-2f/clock.c b/arch/mips/loongson/lemote-2f/clock.c
+index a217061..462e34d 100644
+--- a/arch/mips/loongson/lemote-2f/clock.c
++++ b/arch/mips/loongson/lemote-2f/clock.c
+@@ -91,6 +91,7 @@ EXPORT_SYMBOL(clk_put);
+
+ int clk_set_rate(struct clk *clk, unsigned long rate)
+ {
++ unsigned int rate_khz = rate / 1000;
+ struct cpufreq_frequency_table *pos;
+ int ret = 0;
+ int regval;
+@@ -107,9 +108,9 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
+ propagate_rate(clk);
+
+ cpufreq_for_each_valid_entry(pos, loongson2_clockmod_table)
+- if (rate == pos->frequency)
++ if (rate_khz == pos->frequency)
+ break;
+- if (rate != pos->frequency)
++ if (rate_khz != pos->frequency)
+ return -ENOTSUPP;
+
+ clk->rate = rate;
diff --git a/arch/mips/loongson/lemote-2f/platform.c b/arch/mips/loongson/lemote-2f/platform.c
new file mode 100644
index 0000000..5316360
@@ -1685,7 +1762,7 @@ index 0000000..5316360
+
+arch_initcall(lemote2f_platform_init);
diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c
-index 736c17a..d6b6cac 100644
+index bf0fc6b..c9f2838 100644
--- a/arch/mips/math-emu/cp1emu.c
+++ b/arch/mips/math-emu/cp1emu.c
@@ -7,6 +7,9 @@
@@ -2074,7 +2151,7 @@ index 736c17a..d6b6cac 100644
return SIGILL;
}
diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile
-index ff8a553..a747755 100644
+index 6523d55..094f034 100644
--- a/arch/mips/pci/Makefile
+++ b/arch/mips/pci/Makefile
@@ -29,6 +29,7 @@ obj-$(CONFIG_LASAT) += pci-lasat.o
@@ -2082,7 +2159,7 @@ index ff8a553..a747755 100644
obj-$(CONFIG_LEMOTE_FULOONG2E) += fixup-fuloong2e.o ops-loongson2.o
obj-$(CONFIG_LEMOTE_MACH2F) += fixup-lemote2f.o ops-loongson2.o
+obj-$(CONFIG_DEXXON_GDIUM) += fixup-gdium.o ops-loongson2.o
- obj-$(CONFIG_LEMOTE_MACH3A) += fixup-loongson3.o ops-loongson3.o
+ obj-$(CONFIG_LOONGSON_MACH3X) += fixup-loongson3.o ops-loongson3.o
obj-$(CONFIG_MIPS_MALTA) += fixup-malta.o pci-malta.o
obj-$(CONFIG_PMC_MSP7120_GW) += fixup-pmcmsp.o ops-pmcmsp.o
diff --git a/arch/mips/pci/fixup-gdium.c b/arch/mips/pci/fixup-gdium.c
@@ -2182,22 +2259,65 @@ index 0000000..b296220
+ gdium_usb_host_fixup);
+#endif
diff --git a/arch/mips/power/hibernate.S b/arch/mips/power/hibernate.S
-index 32a7c82..7e0277a 100644
+index 32a7c82..3a89502 100644
--- a/arch/mips/power/hibernate.S
+++ b/arch/mips/power/hibernate.S
-@@ -43,7 +43,6 @@ LEAF(swsusp_arch_resume)
+@@ -43,7 +43,9 @@ LEAF(swsusp_arch_resume)
bne t1, t3, 1b
PTR_L t0, PBE_NEXT(t0)
bnez t0, 0b
-- jal local_flush_tlb_all /* Avoid TLB mismatch after kernel resume */
++#if !defined(CONFIG_MACH_LOONGSON) || !defined(CONFIG_CPU_LOONGSON2) /* Commit 771004298d broke Loongson2. */
+ jal local_flush_tlb_all /* Avoid TLB mismatch after kernel resume */
++#endif
PTR_LA t0, saved_regs
PTR_L ra, PT_R31(t0)
PTR_L sp, PT_R29(t0)
+diff --git a/drivers/cpufreq/loongson2_cpufreq.c b/drivers/cpufreq/loongson2_cpufreq.c
+index 9fa1772..b17bbe3 100644
+--- a/drivers/cpufreq/loongson2_cpufreq.c
++++ b/drivers/cpufreq/loongson2_cpufreq.c
+@@ -162,20 +162,32 @@ static int __init cpufreq_init(void)
+ /* Register platform stuff */
+ ret = platform_driver_register(&platform_driver);
+ if (ret)
+- return ret;
++ goto err_return;
+
+ pr_info("cpufreq: Loongson-2F CPU frequency driver.\n");
+
+- cpufreq_register_notifier(&loongson2_cpufreq_notifier_block,
+- CPUFREQ_TRANSITION_NOTIFIER);
++ ret = cpufreq_register_notifier(&loongson2_cpufreq_notifier_block,
++ CPUFREQ_TRANSITION_NOTIFIER);
++ if (ret)
++ goto err_platform_driver_unregister;
+
+ ret = cpufreq_register_driver(&loongson2_cpufreq_driver);
++ if (ret)
++ goto err_cpufreq_unregister_notifier;
+
+- if (!ret && !nowait) {
++ if (!nowait) {
+ saved_cpu_wait = cpu_wait;
+ cpu_wait = loongson2_cpu_wait;
+ }
+
++ return 0;
++
++ err_cpufreq_unregister_notifier:
++ cpufreq_unregister_notifier(&loongson2_cpufreq_notifier_block,
++ CPUFREQ_TRANSITION_NOTIFIER);
++ err_platform_driver_unregister:
++ platform_driver_unregister(&platform_driver);
++ err_return:
+ return ret;
+ }
+
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index 5e79c6a..3f08f0d 100644
+index c18d5d7..453e0db 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
-@@ -808,6 +808,13 @@ config HID_ZYDACRON
+@@ -829,6 +829,13 @@ config HID_ZYDACRON
---help---
Support for Zydacron remote control.
@@ -2212,12 +2332,12 @@ index 5e79c6a..3f08f0d 100644
tristate "HID Sensors framework support"
depends on HID && HAS_IOMEM
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
-index a6fa6ba..cf8793ef 100644
+index 4dbac7f..2f79455 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
-@@ -117,6 +117,7 @@ obj-$(CONFIG_HID_ZEROPLUS) += hid-zpff.o
- obj-$(CONFIG_HID_ZYDACRON) += hid-zydacron.o
- obj-$(CONFIG_HID_WACOM) += hid-wacom.o
+@@ -120,6 +120,7 @@ obj-$(CONFIG_HID_ZYDACRON) += hid-zydacron.o
+ wacom-objs := wacom_wac.o wacom_sys.o
+ obj-$(CONFIG_HID_WACOM) += wacom.o
obj-$(CONFIG_HID_WALTOP) += hid-waltop.o
+obj-$(CONFIG_HID_GDIUM) += hid-gdium.o
obj-$(CONFIG_HID_WIIMOTE) += hid-wiimote.o
@@ -2440,10 +2560,10 @@ index 0000000..67cc095
+MODULE_LICENSE("GPL");
+
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
-index 48b66bb..f5b5e46 100644
+index 25cd674..41f58f7 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
-@@ -980,6 +980,9 @@
+@@ -984,6 +984,9 @@
#define USB_VENDOR_ID_ZYTRONIC 0x14c8
#define USB_DEVICE_ID_ZYTRONIC_ZXY100 0x0005
@@ -9260,10 +9380,10 @@ index 0000000..c285a67
+MODULE_DESCRIPTION("YeeLoong laptop driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
-index 0754f5c7..ff7475d 100644
+index a168e96..5e820df5 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
-@@ -680,6 +680,7 @@ comment "Platform RTC drivers"
+@@ -688,6 +688,7 @@ comment "Platform RTC drivers"
config RTC_DRV_CMOS
tristate "PC-style 'CMOS'"
depends on X86 || ARM || M32R || PPC || MIPS || SPARC64
@@ -9271,175 +9391,1742 @@ index 0754f5c7..ff7475d 100644
default y if X86
help
Say "yes" here to get direct support for the real time clock
-diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
-index 4f38fc0..f57367c 100644
---- a/drivers/staging/Kconfig
-+++ b/drivers/staging/Kconfig
-@@ -80,6 +80,8 @@ source "drivers/staging/wlags49_h2/Kconfig"
+diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
+index 2f3aceb..6647c3f 100644
+--- a/drivers/usb/host/pci-quirks.c
++++ b/drivers/usb/host/pci-quirks.c
+@@ -454,6 +454,7 @@ void usb_amd_dev_put(void)
+ }
+ EXPORT_SYMBOL_GPL(usb_amd_dev_put);
+
++#if defined(CONFIG_USB_UHCI_HCD) || defined(CONFIG_USB_UHCI_HCD_MODULE)
+ /*
+ * Make sure the controller is completely inactive, unable to
+ * generate interrupts or do DMA.
+@@ -561,12 +562,16 @@ static void quirk_usb_handoff_uhci(struct pci_dev *pdev)
+ if (base)
+ uhci_check_and_reset_hc(pdev, base);
+ }
++#else
++#define quirk_usb_handoff_uhci(x) do { } while (0)
++#endif /* CONFIG_USB_UHCI_HCD* */
+
+ static int mmio_resource_enabled(struct pci_dev *pdev, int idx)
+ {
+ return pci_resource_start(pdev, idx) && mmio_enabled(pdev);
+ }
+
++#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
+ static void quirk_usb_handoff_ohci(struct pci_dev *pdev)
+ {
+ void __iomem *base;
+@@ -633,7 +638,11 @@ static void quirk_usb_handoff_ohci(struct pci_dev *pdev)
+ /* Now the controller is safely in SUSPEND and nothing can wake it up */
+ iounmap(base);
+ }
++#else
++#define quirk_usb_handoff_ohci(x) do { } while(0)
++#endif /* CONFIG_USB_OHCI_HCD* */
+
++#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE)
+ static const struct dmi_system_id ehci_dmi_nohandoff_table[] = {
+ {
+ /* Pegatron Lucid (ExoPC) */
+@@ -806,6 +815,9 @@ static void quirk_usb_disable_ehci(struct pci_dev *pdev)
+
+ iounmap(base);
+ }
++#else
++#define quirk_usb_disable_ehci(x) do { } while (0)
++#endif /* CONFIG_USB_EHCI_HCD* */
+
+ /*
+ * handshake - spin reading a register until handshake completes
+@@ -945,6 +957,7 @@ void usb_disable_xhci_ports(struct pci_dev *xhci_pdev)
+ }
+ EXPORT_SYMBOL_GPL(usb_disable_xhci_ports);
+
++#if defined(CONFIG_USB_XHCI_HCD) || defined(CONFIG_USB_XHCI_HCD_MODULE)
+ /**
+ * PCI Quirks for xHCI.
+ *
+@@ -1052,6 +1065,9 @@ hc_init:
+
+ iounmap(base);
+ }
++#else
++#define quirk_usb_handoff_xhci(x) do { } while (0)
++#endif /* CONFIG_USB_UHCI_HCD* */
+
+ static void quirk_usb_early_handoff(struct pci_dev *pdev)
+ {
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index 54a8120..2ca4c23 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -79,6 +79,9 @@ static void option_instat_callback(struct urb *urb);
+ #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100
+ #define OPTION_PRODUCT_GTM380_MODEM 0x7201
- source "drivers/staging/wlags49_h25/Kconfig"
++#define HUAWO_VENDOR_ID 0x21F5
++#define HUAWO_PRODUCT_E1621 0x2008
++
+ #define HUAWEI_VENDOR_ID 0x12D1
+ #define HUAWEI_PRODUCT_E173 0x140C
+ #define HUAWEI_PRODUCT_E1750 0x1406
+@@ -626,6 +629,7 @@ static const struct usb_device_id option_ids[] = {
+ { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) },
+ { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42),
+ .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
++ { USB_DEVICE(HUAWO_VENDOR_ID, HUAWO_PRODUCT_E1621) }, /* QUANTA 6500 chips, Unicom extensive use of this card */
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c1f, USB_CLASS_COMM, 0x02, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) },
+diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
+index 8bf495f..f6a15b6 100644
+--- a/drivers/video/Kconfig
++++ b/drivers/video/Kconfig
+@@ -36,6 +36,12 @@ config VGASTATE
+ tristate
+ default n
-+source "drivers/staging/sm7xxfb/Kconfig"
++config VIDEO_OUTPUT_CONTROL
++ tristate "Lowlevel video output switch controls"
++ help
++ This framework adds support for low-level control of the video
++ output switch.
+
- source "drivers/staging/crystalhd/Kconfig"
+ config VIDEOMODE_HELPERS
+ bool
- source "drivers/staging/cxt1e1/Kconfig"
-diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
-index 1e97ad2..65a1ff0 100644
---- a/drivers/staging/Makefile
-+++ b/drivers/staging/Makefile
-@@ -34,6 +34,7 @@ obj-$(CONFIG_DX_SEP) += sep/
- obj-$(CONFIG_IIO) += iio/
- obj-$(CONFIG_WLAGS49_H2) += wlags49_h2/
- obj-$(CONFIG_WLAGS49_H25) += wlags49_h25/
-+obj-$(CONFIG_FB_SM7XX) += sm7xxfb/
- obj-$(CONFIG_CRYSTALHD) += crystalhd/
- obj-$(CONFIG_CXT1E1) += cxt1e1/
- obj-$(CONFIG_FB_XGI) += xgifb/
-diff --git a/drivers/staging/sm7xxfb/Kconfig b/drivers/staging/sm7xxfb/Kconfig
-new file mode 100644
-index 0000000..e2922ae
---- /dev/null
-+++ b/drivers/staging/sm7xxfb/Kconfig
-@@ -0,0 +1,13 @@
-+config FB_SM7XX
-+ tristate "Silicon Motion SM7XX framebuffer support"
+diff --git a/drivers/video/Makefile b/drivers/video/Makefile
+index 9ad3c17..3d869d9 100644
+--- a/drivers/video/Makefile
++++ b/drivers/video/Makefile
+@@ -7,6 +7,8 @@ obj-y += backlight/
+
+ obj-y += fbdev/
+
++#video output switch sysfs driver
++obj-$(CONFIG_VIDEO_OUTPUT_CONTROL) += output.o
+ obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o
+ ifeq ($(CONFIG_OF),y)
+ obj-$(CONFIG_VIDEOMODE_HELPERS) += of_display_timing.o of_videomode.o
+diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
+index e911b9c..2d522e8 100644
+--- a/drivers/video/fbdev/Kconfig
++++ b/drivers/video/fbdev/Kconfig
+@@ -2465,6 +2465,19 @@ config FB_SIMPLE
+ Configuration re: surface address, size, and format must be provided
+ through device tree, or plain old platform data.
+
++config FB_SM712
++ tristate "Silicon Motion SM712 framebuffer support"
+ depends on FB && PCI
+ select FB_CFB_FILLRECT
+ select FB_CFB_COPYAREA
+ select FB_CFB_IMAGEBLIT
+ help
-+ Frame buffer driver for the Silicon Motion SM710, SM712, SM721
-+ and SM722 chips.
++ Frame buffer driver for the Silicon Motion SM712 chip.
+
+ This driver is also available as a module. The module will be
-+ called sm7xxfb. If you want to compile it as a module, say M
++ called sm712fb. If you want to compile it as a module, say M
+ here and read <file:Documentation/kbuild/modules.txt>.
-diff --git a/drivers/staging/sm7xxfb/Makefile b/drivers/staging/sm7xxfb/Makefile
++
+ source "drivers/video/fbdev/omap/Kconfig"
+ source "drivers/video/fbdev/omap2/Kconfig"
+ source "drivers/video/fbdev/exynos/Kconfig"
+diff --git a/drivers/video/fbdev/Makefile b/drivers/video/fbdev/Makefile
+index 1979aff..9b694f9 100644
+--- a/drivers/video/fbdev/Makefile
++++ b/drivers/video/fbdev/Makefile
+@@ -114,6 +114,7 @@ obj-$(CONFIG_FB_COBALT) += cobalt_lcdfb.o
+ obj-$(CONFIG_FB_IBM_GXT4500) += gxt4500.o
+ obj-$(CONFIG_FB_PS3) += ps3fb.o
+ obj-$(CONFIG_FB_SM501) += sm501fb.o
++obj-$(CONFIG_FB_SM712) += sm712fb/
+ obj-$(CONFIG_FB_UDL) += udlfb.o
+ obj-$(CONFIG_FB_SMSCUFX) += smscufx.o
+ obj-$(CONFIG_FB_XILINX) += xilinxfb.o
+diff --git a/drivers/video/fbdev/sm712fb/Makefile b/drivers/video/fbdev/sm712fb/Makefile
new file mode 100644
-index 0000000..48f471c
+index 0000000..9bf3519
--- /dev/null
-+++ b/drivers/staging/sm7xxfb/Makefile
-@@ -0,0 +1 @@
-+obj-$(CONFIG_FB_SM7XX) += sm7xxfb.o
-diff --git a/drivers/staging/sm7xxfb/TODO b/drivers/staging/sm7xxfb/TODO
++++ b/drivers/video/fbdev/sm712fb/Makefile
+@@ -0,0 +1,3 @@
++obj-$(CONFIG_FB_SM712) += sm712fb.o
++
++sm712fb-objs := sm712fb_drv.o sm712fb_accel.o
+diff --git a/drivers/video/fbdev/sm712fb/TODO b/drivers/video/fbdev/sm712fb/TODO
new file mode 100644
-index 0000000..1fcead5
+index 0000000..dcfd4e7
--- /dev/null
-+++ b/drivers/staging/sm7xxfb/TODO
-@@ -0,0 +1,9 @@
++++ b/drivers/video/fbdev/sm712fb/TODO
+@@ -0,0 +1,7 @@
+TODO:
+- Dual head support
-+- 2D acceleration support
-+- use kernel coding style
-+- refine the code and remove unused code
-+- move it to drivers/video/sm7xxfb.c
++- refine the code, convert more registers magic numbers to macros
++- Does it really works on Big Endian machines?
+
+Please send any patches to Greg Kroah-Hartman <greg@kroah.com> and
-+Teddy Wang <teddy.wang@siliconmotion.com.cn>.
-diff --git a/drivers/staging/sm7xxfb/sm7xx.h b/drivers/staging/sm7xxfb/sm7xx.h
++Tom Li <biergaizi@member.fsf.org>.
+diff --git a/drivers/video/fbdev/sm712fb/sm712fb_accel.c b/drivers/video/fbdev/sm712fb/sm712fb_accel.c
new file mode 100644
-index 0000000..8599861
+index 0000000..12fce1f
--- /dev/null
-+++ b/drivers/staging/sm7xxfb/sm7xx.h
-@@ -0,0 +1,779 @@
++++ b/drivers/video/fbdev/sm712fb/sm712fb_accel.c
+@@ -0,0 +1,246 @@
+/*
+ * Silicon Motion SM712 frame buffer device
+ *
+ * Copyright (C) 2006 Silicon Motion Technology Corp.
-+ * Authors: Ge Wang, gewang@siliconmotion.com
-+ * Boyod boyod.yang@siliconmotion.com.cn
++ * Authors: Ge Wang, gewang@siliconmotion.com
++ * Boyod boyod.yang@siliconmotion.com.cn
+ *
+ * Copyright (C) 2009 Lemote, Inc.
-+ * Author: Wu Zhangjin, wuzhangjin@gmail.com
++ * Author: Wu Zhangjin, wuzhangjin@gmail.com
++ *
++ * Copyright (C) 2011 Igalia, S.L.
++ * Author: Javier M. Mellid <jmunhoz@igalia.com>
++ *
++ * Copyright (C) 2014 Tom Li.
++ * Author: Tom Li (Yifeng Li) <biergaizi@member.fsf.org>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * Framebuffer driver for Silicon Motion SM712 chip
++ */
++
++#include <linux/fb.h>
++#include <linux/screen_info.h>
++#include <linux/delay.h>
++
++#include "sm712fb_drv.h"
++#include "sm712fb_accel.h"
++
++static inline u32 bytes_to_dword(const u8 *bytes, int length)
++{
++ u32 dword = 0;
++
++ switch (length) {
++ case 4:
++#ifdef __BIG_ENDIAN
++ dword += bytes[3];
++#else
++ dword += bytes[3] << 24;
++#endif
++ case 3:
++#ifdef __BIG_ENDIAN
++ dword += bytes[2] << 8;
++#else
++ dword += bytes[2] << 16;
++#endif
++ case 2:
++#ifdef __BIG_ENDIAN
++ dword += bytes[1] << 16;
++#else
++ dword += bytes[1] << 8;
++#endif
++ case 1:
++#ifdef __BIG_ENDIAN
++ dword += bytes[0] << 24;
++#else
++ dword += bytes[0];
++#endif
++ }
++ return dword;
++}
++
++int sm712fb_init_accel(struct sm712fb_info *fb)
++{
++ u8 reg;
++
++ /* reset the 2D engine */
++ sm712_write_seq(fb, 0x21, sm712_read_seq(fb, 0x21) & 0xf8);
++ reg = sm712_read_seq(fb, 0x15);
++ sm712_write_seq(fb, 0x15, reg | 0x30);
++ sm712_write_seq(fb, 0x15, reg);
++
++ if (sm712fb_wait(fb) != 0)
++ return -1;
++
++ sm712_write_dpr(fb, DPR_CROP_TOPLEFT_COORDS, DPR_COORDS(0, 0));
++
++ /* same width for DPR_PITCH and DPR_SRC_WINDOW */
++ sm712_write_dpr(fb, DPR_PITCH,
++ DPR_COORDS(fb->fb.var.xres, fb->fb.var.xres));
++ sm712_write_dpr(fb, DPR_SRC_WINDOW,
++ DPR_COORDS(fb->fb.var.xres, fb->fb.var.xres));
++
++ sm712_write_dpr(fb, DPR_BYTE_BIT_MASK, 0xffffffff);
++ sm712_write_dpr(fb, DPR_COLOR_COMPARE_MASK, 0);
++ sm712_write_dpr(fb, DPR_COLOR_COMPARE, 0);
++ sm712_write_dpr(fb, DPR_SRC_BASE, 0);
++ sm712_write_dpr(fb, DPR_DST_BASE, 0);
++ sm712_read_dpr(fb, DPR_DST_BASE);
++
++ return 0;
++}
++
++int sm712fb_wait(struct sm712fb_info *fb)
++{
++ int i;
++ u8 reg;
++
++ for (i = 0; i < 10000; i++) {
++ reg = sm712_read_seq(fb, SCR_DE_STATUS);
++ if ((reg & SCR_DE_STATUS_MASK) == SCR_DE_ENGINE_IDLE)
++ return 0;
++ udelay(1);
++ }
++ return -EBUSY;
++}
++
++void sm712fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
++{
++ u32 width = rect->width, height = rect->height;
++ u32 dx = rect->dx, dy = rect->dy;
++ u32 color;
++
++ struct sm712fb_info *sfb = info->par;
++
++ if (unlikely(info->state != FBINFO_STATE_RUNNING))
++ return;
++ if ((rect->dx >= info->var.xres_virtual) ||
++ (rect->dy >= info->var.yres_virtual))
++ return;
++
++ if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
++ info->fix.visual == FB_VISUAL_DIRECTCOLOR)
++ color = ((u32 *) (info->pseudo_palette))[rect->color];
++ else
++ color = rect->color;
++
++ sm712_write_dpr(sfb, DPR_FG_COLOR, color);
++ sm712_write_dpr(sfb, DPR_DST_COORDS, DPR_COORDS(dx, dy));
++ sm712_write_dpr(sfb, DPR_SPAN_COORDS, DPR_COORDS(width, height));
++ sm712_write_dpr(sfb, DPR_DE_CTRL, DE_CTRL_START | DE_CTRL_ROP_ENABLE |
++ (DE_CTRL_COMMAND_SOLIDFILL << DE_CTRL_COMMAND_SHIFT) |
++ (DE_CTRL_ROP_SRC << DE_CTRL_ROP_SHIFT));
++ sm712_read_dpr(sfb, DPR_DE_CTRL);
++ sm712fb_wait(sfb);
++}
++
++void sm712fb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
++{
++ u32 sx = area->sx, sy = area->sy;
++ u32 dx = area->dx, dy = area->dy;
++ u32 height = area->height, width = area->width;
++ u32 direction;
++
++ struct sm712fb_info *sfb = info->par;
++
++ if (unlikely(info->state != FBINFO_STATE_RUNNING))
++ return;
++ if ((sx >= info->var.xres_virtual) || (sy >= info->var.yres_virtual))
++ return;
++
++ if (sy < dy || (sy == dy && sx <= dx)) {
++ sx += width - 1;
++ dx += width - 1;
++ sy += height - 1;
++ dy += height - 1;
++ direction = DE_CTRL_RTOL;
++ } else
++ direction = 0;
++
++ sm712_write_dpr(sfb, DPR_SRC_COORDS, DPR_COORDS(sx, sy));
++ sm712_write_dpr(sfb, DPR_DST_COORDS, DPR_COORDS(dx, dy));
++ sm712_write_dpr(sfb, DPR_SPAN_COORDS, DPR_COORDS(width, height));
++ sm712_write_dpr(sfb, DPR_DE_CTRL,
++ DE_CTRL_START | DE_CTRL_ROP_ENABLE | direction |
++ (DE_CTRL_COMMAND_BITBLT << DE_CTRL_COMMAND_SHIFT) |
++ (DE_CTRL_ROP_SRC << DE_CTRL_ROP_SHIFT));
++ sm712_read_dpr(sfb, DPR_DE_CTRL);
++ sm712fb_wait(sfb);
++}
++
++void sm712fb_imageblit(struct fb_info *info, const struct fb_image *image)
++{
++ u32 dx = image->dx, dy = image->dy;
++ u32 width = image->width, height = image->height;
++ u32 fg_color, bg_color;
++
++ struct sm712fb_info *sfb = info->par;
++
++ u32 imgidx = 0;
++ u32 line = image->width >> 3;
++
++ int i, j;
++ u32 total_bytes, total_dwords, remain_bytes;
++
++ if (unlikely(info->state != FBINFO_STATE_RUNNING))
++ return;
++ if ((image->dx >= info->var.xres_virtual) ||
++ (image->dy >= info->var.yres_virtual))
++ return;
++
++ if (unlikely(image->depth != 1)) {
++ /* unsupported depth, fallback to draw Tux */
++ cfb_imageblit(info, image);
++ return;
++ }
++
++ if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
++ info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
++ fg_color = ((u32 *) (info->pseudo_palette))[image->fg_color];
++ bg_color = ((u32 *) (info->pseudo_palette))[image->bg_color];
++ } else {
++ fg_color = image->fg_color;
++ bg_color = image->bg_color;
++ }
++
++ /* total bytes we need to write */
++ total_bytes = (width + 7) / 8;
++
++ /* split the bytes into dwords and remainder bytes */
++ total_dwords = (total_bytes & ~3) / 4;
++ remain_bytes = total_bytes & 3;
++
++ sm712_write_dpr(sfb, DPR_SRC_COORDS, 0);
++ sm712_write_dpr(sfb, DPR_DST_COORDS, DPR_COORDS(dx, dy));
++ sm712_write_dpr(sfb, DPR_SPAN_COORDS, DPR_COORDS(width, height));
++ sm712_write_dpr(sfb, DPR_FG_COLOR, fg_color);
++ sm712_write_dpr(sfb, DPR_BG_COLOR, bg_color);
++
++ sm712_write_dpr(sfb, DPR_DE_CTRL, DE_CTRL_START | DE_CTRL_ROP_ENABLE |
++ (DE_CTRL_COMMAND_HOST_WRITE << DE_CTRL_COMMAND_SHIFT) |
++ (DE_CTRL_HOST_MONO << DE_CTRL_HOST_SHIFT) |
++ (DE_CTRL_ROP_SRC << DE_CTRL_ROP_SHIFT));
++
++ for (i = 0; i < height; i++) {
++ /* cast bytes data into dwords and write to the dataport */
++ for (j = 0; j < total_dwords; j++) {
++ sm712_write_dataport(sfb,
++ bytes_to_dword(&image->
++ data[imgidx] +
++ j * 4, 4));
++ }
++
++ if (remain_bytes) {
++ sm712_write_dataport(sfb,
++ bytes_to_dword(&image->
++ data[imgidx] +
++ (total_dwords * 4),
++ remain_bytes));
++ }
++ imgidx += line;
++ }
++ sm712_read_dpr(sfb, DPR_DE_CTRL);
++ sm712fb_wait(sfb);
++}
+diff --git a/drivers/video/fbdev/sm712fb/sm712fb_accel.h b/drivers/video/fbdev/sm712fb/sm712fb_accel.h
+new file mode 100644
+index 0000000..6f79177
+--- /dev/null
++++ b/drivers/video/fbdev/sm712fb/sm712fb_accel.h
+@@ -0,0 +1,33 @@
++/*
++ * Silicon Motion SM712 frame buffer device
++ *
++ * Copyright (C) 2006 Silicon Motion Technology Corp.
++ * Authors: Ge Wang, gewang@siliconmotion.com
++ * Boyod boyod.yang@siliconmotion.com.cn
++ *
++ * Copyright (C) 2009 Lemote, Inc.
++ * Author: Wu Zhangjin, wuzhangjin@gmail.com
++ *
++ * Copyright (C) 2011 Igalia, S.L.
++ * Author: Javier M. Mellid <jmunhoz@igalia.com>
++ *
++ * Copyright (C) 2014 Tom Li.
++ * Author: Tom Li (Yifeng Li) <biergaizi@member.fsf.org>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * Framebuffer driver for Silicon Motion SM712 chip
++ */
++
++#ifndef _SM712FB_ACCEL_H
++#define _SM712FB_ACCEL_H
++
++int sm712fb_init_accel(struct sm712fb_info *fb);
++int sm712fb_wait(struct sm712fb_info *fb);
++void sm712fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
++void sm712fb_copyarea(struct fb_info *info, const struct fb_copyarea *area);
++void sm712fb_imageblit(struct fb_info *info, const struct fb_image *image);
++
++#endif
+diff --git a/drivers/video/fbdev/sm712fb/sm712fb_drv.c b/drivers/video/fbdev/sm712fb/sm712fb_drv.c
+new file mode 100644
+index 0000000..7f7cd4f
+--- /dev/null
++++ b/drivers/video/fbdev/sm712fb/sm712fb_drv.c
+@@ -0,0 +1,1022 @@
++/*
++ * Silicon Motion SM712 frame buffer device
++ *
++ * Copyright (C) 2006 Silicon Motion Technology Corp.
++ * Authors: Ge Wang, gewang@siliconmotion.com
++ * Boyod boyod.yang@siliconmotion.com.cn
++ *
++ * Copyright (C) 2009 Lemote, Inc.
++ * Author: Wu Zhangjin, wuzhangjin@gmail.com
++ *
++ * Copyright (C) 2011 Igalia, S.L.
++ * Author: Javier M. Mellid <jmunhoz@igalia.com>
++ *
++ * Copyright (C) 2014 Tom Li.
++ * Author: Tom Li (Yifeng Li) <biergaizi@member.fsf.org>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * Framebuffer driver for Silicon Motion SM712 chip
++ */
++
++#include <linux/io.h>
++#include <linux/fb.h>
++#include <linux/pci.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/uaccess.h>
++#include <linux/module.h>
++#include <linux/console.h>
++#include <linux/screen_info.h>
++
++#ifdef CONFIG_PM
++#include <linux/pm.h>
++#endif
++
++#include "sm712fb_drv.h"
++#include "sm712fb_accel.h"
++#include "sm712fb_modedb.h"
++
++static struct fb_var_screeninfo sm712fb_var = {
++ .xres = 1024,
++ .yres = 600,
++ .xres_virtual = 1024,
++ .yres_virtual = 600,
++ .bits_per_pixel = 16,
++ .red = {16, 8, 0},
++ .green = {8, 8, 0},
++ .blue = {0, 8, 0},
++ .activate = FB_ACTIVATE_NOW,
++ .height = -1,
++ .width = -1,
++ .vmode = FB_VMODE_NONINTERLACED,
++ .nonstd = 0,
++ .accel_flags = FB_ACCELF_TEXT,
++};
++
++static struct fb_fix_screeninfo sm712fb_fix = {
++ .id = "smXXXfb",
++ .type = FB_TYPE_PACKED_PIXELS,
++ .visual = FB_VISUAL_TRUECOLOR,
++ .line_length = 800 * 3,
++ .accel = FB_ACCEL_SMI_LYNX,
++ .type_aux = 0,
++ .xpanstep = 0,
++ .ypanstep = 0,
++ .ywrapstep = 0,
++};
++
++struct vesa_mode {
++ char index[6];
++ u16 lfb_width;
++ u16 lfb_height;
++ u16 lfb_depth;
++};
++
++static bool accel = 1;
++
++static struct vesa_mode vesa_mode_table[] = {
++ {"0x301", 640, 480, 8},
++ {"0x303", 800, 600, 8},
++ {"0x305", 1024, 768, 8},
++ {"0x307", 1280, 1024, 8},
++
++ {"0x311", 640, 480, 16},
++ {"0x314", 800, 600, 16},
++ {"0x317", 1024, 768, 16},
++ {"0x31A", 1280, 1024, 16},
++
++ {"0x312", 640, 480, 24},
++ {"0x315", 800, 600, 24},
++ {"0x318", 1024, 768, 24},
++ {"0x31B", 1280, 1024, 24},
++};
++
++struct screen_info sm712_scr_info;
++
++static int sm712fb_setup(char *options)
++{
++ char *this_opt;
++
++ if (!options || !*options)
++ return 0;
++
++ while ((this_opt = strsep(&options, ",")) != NULL) {
++ if (!*this_opt)
++ continue;
++
++ if (!strcmp(this_opt, "accel:0"))
++ accel = false;
++ else if (!strcmp(this_opt, "accel:1"))
++ accel = true;
++ }
++ return 0;
++}
++
++/* process command line options, get vga parameter */
++static int __init sm712_vga_setup(char *options)
++{
++ int i;
++
++ if (!options || !*options)
++ return -EINVAL;
++
++ sm712_scr_info.lfb_width = 0;
++ sm712_scr_info.lfb_height = 0;
++ sm712_scr_info.lfb_depth = 0;
++
++ pr_debug("sm712_vga_setup = %s\n", options);
++
++ for (i = 0; i < ARRAY_SIZE(vesa_mode_table); i++) {
++ if (strstr(options, vesa_mode_table[i].index)) {
++ sm712_scr_info.lfb_width = vesa_mode_table[i].lfb_width;
++ sm712_scr_info.lfb_height =
++ vesa_mode_table[i].lfb_height;
++ sm712_scr_info.lfb_depth = vesa_mode_table[i].lfb_depth;
++ return 0;
++ }
++ }
++
++ return -1;
++}
++
++__setup("vga=", sm712_vga_setup);
++
++static void sm712_setpalette(int regno, unsigned red, unsigned green,
++ unsigned blue, struct fb_info *info)
++{
++ struct sm712fb_info *sfb = info->par;
++
++ /* set bit 5:4 = 01 (write LCD RAM only) */
++ sm712_write_seq(sfb, 0x66, (sm712_read_seq(sfb, 0x66) & 0xC3) | 0x10);
++
++ sm712_writeb(sfb->mmio, DAC_REG, regno);
++ sm712_writeb(sfb->mmio, DAC_VAL, red >> 10);
++ sm712_writeb(sfb->mmio, DAC_VAL, green >> 10);
++ sm712_writeb(sfb->mmio, DAC_VAL, blue >> 10);
++}
++
++/* chan_to_field
++ *
++ * convert a colour value into a field position
++ *
++ * from pxafb.c
++ */
++
++static inline unsigned int chan_to_field(unsigned int chan,
++ struct fb_bitfield *bf)
++{
++ chan &= 0xffff;
++ chan >>= 16 - bf->length;
++ return chan << bf->offset;
++}
++
++static int sm712_blank(int blank_mode, struct fb_info *info)
++{
++ struct sm712fb_info *sfb = info->par;
++
++ /* clear DPMS setting */
++ switch (blank_mode) {
++ case FB_BLANK_UNBLANK:
++ /* Screen On: HSync: On, VSync : On */
++ sm712_write_seq(sfb, 0x01,
++ (sm712_read_seq(sfb, 0x01) & (~0x20)));
++ sm712_write_seq(sfb, 0x6a, 0x16);
++ sm712_write_seq(sfb, 0x6b, 0x02);
++ sm712_write_seq(sfb, 0x21, (sm712_read_seq(sfb, 0x21) & 0x77));
++ sm712_write_seq(sfb, 0x22,
++ (sm712_read_seq(sfb, 0x22) & (~0x30)));
++ sm712_write_seq(sfb, 0x23,
++ (sm712_read_seq(sfb, 0x23) & (~0xc0)));
++ sm712_write_seq(sfb, 0x24, (sm712_read_seq(sfb, 0x24) | 0x01));
++ sm712_write_seq(sfb, 0x31, (sm712_read_seq(sfb, 0x31) | 0x03));
++ break;
++ case FB_BLANK_NORMAL:
++ /* Screen Off: HSync: On, VSync : On Soft blank */
++ sm712_write_seq(sfb, 0x01,
++ (sm712_read_seq(sfb, 0x01) & (~0x20)));
++ sm712_write_seq(sfb, 0x6a, 0x16);
++ sm712_write_seq(sfb, 0x6b, 0x02);
++ sm712_write_seq(sfb, 0x22,
++ (sm712_read_seq(sfb, 0x22) & (~0x30)));
++ sm712_write_seq(sfb, 0x23,
++ (sm712_read_seq(sfb, 0x23) & (~0xc0)));
++ sm712_write_seq(sfb, 0x24, (sm712_read_seq(sfb, 0x24) | 0x01));
++ sm712_write_seq(sfb, 0x31,
++ ((sm712_read_seq(sfb, 0x31) & (~0x07)) | 0x00));
++ break;
++ case FB_BLANK_VSYNC_SUSPEND:
++ /* Screen On: HSync: On, VSync : Off */
++ sm712_write_seq(sfb, 0x01, (sm712_read_seq(sfb, 0x01) | 0x20));
++ sm712_write_seq(sfb, 0x20,
++ (sm712_read_seq(sfb, 0x20) & (~0xB0)));
++ sm712_write_seq(sfb, 0x6a, 0x0c);
++ sm712_write_seq(sfb, 0x6b, 0x02);
++ sm712_write_seq(sfb, 0x21, (sm712_read_seq(sfb, 0x21) | 0x88));
++ sm712_write_seq(sfb, 0x22,
++ ((sm712_read_seq(sfb, 0x22) & (~0x30)) | 0x20));
++ sm712_write_seq(sfb, 0x23,
++ ((sm712_read_seq(sfb, 0x23) & (~0xc0)) | 0x20));
++ sm712_write_seq(sfb, 0x24,
++ (sm712_read_seq(sfb, 0x24) & (~0x01)));
++ sm712_write_seq(sfb, 0x31,
++ ((sm712_read_seq(sfb, 0x31) & (~0x07)) | 0x00));
++ sm712_write_seq(sfb, 0x34, (sm712_read_seq(sfb, 0x34) | 0x80));
++ break;
++ case FB_BLANK_HSYNC_SUSPEND:
++ /* Screen On: HSync: Off, VSync : On */
++ sm712_write_seq(sfb, 0x01, (sm712_read_seq(sfb, 0x01) | 0x20));
++ sm712_write_seq(sfb, 0x20,
++ (sm712_read_seq(sfb, 0x20) & (~0xB0)));
++ sm712_write_seq(sfb, 0x6a, 0x0c);
++ sm712_write_seq(sfb, 0x6b, 0x02);
++ sm712_write_seq(sfb, 0x21, (sm712_read_seq(sfb, 0x21) | 0x88));
++ sm712_write_seq(sfb, 0x22,
++ ((sm712_read_seq(sfb, 0x22) & (~0x30)) | 0x10));
++ sm712_write_seq(sfb, 0x23,
++ ((sm712_read_seq(sfb, 0x23) & (~0xc0)) | 0xD8));
++ sm712_write_seq(sfb, 0x24,
++ (sm712_read_seq(sfb, 0x24) & (~0x01)));
++ sm712_write_seq(sfb, 0x31,
++ ((sm712_read_seq(sfb, 0x31) & (~0x07)) | 0x00));
++ sm712_write_seq(sfb, 0x34, (sm712_read_seq(sfb, 0x34) | 0x80));
++ break;
++ case FB_BLANK_POWERDOWN:
++ /* Screen On: HSync: Off, VSync : Off */
++ sm712_write_seq(sfb, 0x01, (sm712_read_seq(sfb, 0x01) | 0x20));
++ sm712_write_seq(sfb, 0x20,
++ (sm712_read_seq(sfb, 0x20) & (~0xB0)));
++ sm712_write_seq(sfb, 0x6a, 0x5a);
++ sm712_write_seq(sfb, 0x6b, 0x20);
++ sm712_write_seq(sfb, 0x21, (sm712_read_seq(sfb, 0x21) | 0x88));
++ sm712_write_seq(sfb, 0x22,
++ ((sm712_read_seq(sfb, 0x22) & (~0x30)) | 0x30));
++ sm712_write_seq(sfb, 0x23,
++ ((sm712_read_seq(sfb, 0x23) & (~0xc0)) | 0xD8));
++ sm712_write_seq(sfb, 0x24,
++ (sm712_read_seq(sfb, 0x24) & (~0x01)));
++ sm712_write_seq(sfb, 0x31,
++ ((sm712_read_seq(sfb, 0x31) & (~0x07)) | 0x00));
++ sm712_write_seq(sfb, 0x34, (sm712_read_seq(sfb, 0x34) | 0x80));
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++static int sm712_setcolreg(unsigned regno, unsigned red, unsigned green,
++ unsigned blue, unsigned trans, struct fb_info *info)
++{
++ struct sm712fb_info *sfb;
++ u32 val;
++
++ sfb = info->par;
++
++ if (regno > 255)
++ return 1;
++
++ switch (sfb->fb.fix.visual) {
++ case FB_VISUAL_DIRECTCOLOR:
++ case FB_VISUAL_TRUECOLOR:
++ /*
++ * 16/32 bit true-colour, use pseudo-palette for 16 base color
++ */
++ if (regno < 16) {
++ if (sfb->fb.var.bits_per_pixel == 16) {
++ u32 *pal = sfb->fb.pseudo_palette;
++
++ val = chan_to_field(red, &sfb->fb.var.red);
++ val |= chan_to_field(green, &sfb->fb.var.green);
++ val |= chan_to_field(blue, &sfb->fb.var.blue);
++#ifdef __BIG_ENDIAN
++ pal[regno] =
++ ((red & 0xf800) >> 8) |
++ ((green & 0xe000) >> 13) |
++ ((green & 0x1c00) << 3) |
++ ((blue & 0xf800) >> 3);
++#else
++ pal[regno] = val;
++#endif
++ } else {
++ u32 *pal = sfb->fb.pseudo_palette;
++
++ val = chan_to_field(red, &sfb->fb.var.red);
++ val |= chan_to_field(green, &sfb->fb.var.green);
++ val |= chan_to_field(blue, &sfb->fb.var.blue);
++#ifdef __BIG_ENDIAN
++ val =
++ (val & 0xff00ff00 >> 8) |
++ (val & 0x00ff00ff << 8);
++#endif
++ pal[regno] = val;
++ }
++ }
++ break;
++
++ case FB_VISUAL_PSEUDOCOLOR:
++ /* color depth 8 bit */
++ sm712_setpalette(regno, red, green, blue, info);
++ break;
++
++ default:
++ return 1; /* unknown type */
++ }
++
++ return 0;
++
++}
++
++#ifdef __BIG_ENDIAN
++static ssize_t sm712fb_read(struct fb_info *info, char __user *buf,
++ size_t count, loff_t *ppos)
++{
++ unsigned long p = *ppos;
++
++ u32 *buffer, *dst;
++ u32 __iomem *src;
++ int c, i, cnt = 0, err = 0;
++ unsigned long total_size;
++
++ if (!info || !info->screen_base)
++ return -ENODEV;
++
++ if (info->state != FBINFO_STATE_RUNNING)
++ return -EPERM;
++
++ total_size = info->screen_size;
++
++ if (total_size == 0)
++ total_size = info->fix.smem_len;
++
++ if (p >= total_size)
++ return 0;
++
++ if (count >= total_size)
++ count = total_size;
++
++ if (count + p > total_size)
++ count = total_size - p;
++
++ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
++ if (!buffer)
++ return -ENOMEM;
++
++ src = (u32 __iomem *) (info->screen_base + p);
++
++ if (info->fbops->fb_sync)
++ info->fbops->fb_sync(info);
++
++ while (count) {
++ c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
++ dst = buffer;
++ for (i = c >> 2; i--;) {
++ *dst = fb_readl(src++);
++ *dst =
++ (*dst & 0xff00ff00 >> 8) | (*dst & 0x00ff00ff << 8);
++ dst++;
++ }
++ if (c & 3) {
++ u8 *dst8 = (u8 *) dst;
++ u8 __iomem *src8 = (u8 __iomem *) src;
++
++ for (i = c & 3; i--;) {
++ if (i & 1) {
++ *dst8++ = fb_readb(++src8);
++ } else {
++ *dst8++ = fb_readb(--src8);
++ src8 += 2;
++ }
++ }
++ src = (u32 __iomem *) src8;
++ }
++
++ if (copy_to_user(buf, buffer, c)) {
++ err = -EFAULT;
++ break;
++ }
++ *ppos += c;
++ buf += c;
++ cnt += c;
++ count -= c;
++ }
++
++ kfree(buffer);
++
++ return (err) ? err : cnt;
++}
++
++static ssize_t
++sm712fb_write(struct fb_info *info, const char __user *buf, size_t count,
++ loff_t *ppos)
++{
++ unsigned long p = *ppos;
++
++ u32 *buffer, *src;
++ u32 __iomem *dst;
++ int c, i, cnt = 0, err = 0;
++ unsigned long total_size;
++
++ if (!info || !info->screen_base)
++ return -ENODEV;
++
++ if (info->state != FBINFO_STATE_RUNNING)
++ return -EPERM;
++
++ total_size = info->screen_size;
++
++ if (total_size == 0)
++ total_size = info->fix.smem_len;
++
++ if (p > total_size)
++ return -EFBIG;
++
++ if (count > total_size) {
++ err = -EFBIG;
++ count = total_size;
++ }
++
++ if (count + p > total_size) {
++ if (!err)
++ err = -ENOSPC;
++
++ count = total_size - p;
++ }
++
++ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
++ if (!buffer)
++ return -ENOMEM;
++
++ dst = (u32 __iomem *) (info->screen_base + p);
++
++ if (info->fbops->fb_sync)
++ info->fbops->fb_sync(info);
++
++ while (count) {
++ c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
++ src = buffer;
++
++ if (copy_from_user(src, buf, c)) {
++ err = -EFAULT;
++ break;
++ }
++
++ for (i = c >> 2; i--;) {
++ fb_writel((*src & 0xff00ff00 >> 8) |
++ (*src & 0x00ff00ff << 8), dst++);
++ src++;
++ }
++ if (c & 3) {
++ u8 *src8 = (u8 *) src;
++ u8 __iomem *dst8 = (u8 __iomem *) dst;
++
++ for (i = c & 3; i--;) {
++ if (i & 1) {
++ fb_writeb(*src8++, ++dst8);
++ } else {
++ fb_writeb(*src8++, --dst8);
++ dst8 += 2;
++ }
++ }
++ dst = (u32 __iomem *) dst8;
++ }
++
++ *ppos += c;
++ buf += c;
++ cnt += c;
++ count -= c;
++ }
++
++ kfree(buffer);
++
++ return (cnt) ? cnt : err;
++}
++#endif /* ! __BIG_ENDIAN */
++
++static void sm712_set_timing(struct sm712fb_info *sfb)
++{
++ int i = 0, j = 0;
++ u32 m_nScreenStride;
++
++ dev_dbg(&sfb->pdev->dev,
++ "sfb->width=%d sfb->height=%d "
++ "sfb->fb.var.bits_per_pixel=%d sfb->hz=%d\n",
++ sfb->width, sfb->height, sfb->fb.var.bits_per_pixel, sfb->hz);
++
++ for (j = 0; j < numVGAModes; j++) {
++ if (VGAMode[j].mmSizeX != sfb->width ||
++ VGAMode[j].mmSizeY != sfb->height ||
++ VGAMode[j].bpp != sfb->fb.var.bits_per_pixel ||
++ VGAMode[j].hz != sfb->hz) {
++ continue;
++ }
++
++ dev_dbg(&sfb->pdev->dev,
++ "VGAMode[j].mmSizeX=%d VGAMode[j].mmSizeY=%d "
++ "VGAMode[j].bpp=%d VGAMode[j].hz=%d\n",
++ VGAMode[j].mmSizeX, VGAMode[j].mmSizeY,
++ VGAMode[j].bpp, VGAMode[j].hz);
++
++ dev_dbg(&sfb->pdev->dev, "VGAMode index=%d\n", j);
++
++ sm712_writeb(sfb->mmio, 0x3c6, 0x0);
++
++ sm712_write_seq(sfb, 0, 0x1);
++
++ sm712_writeb(sfb->mmio, 0x3c2, VGAMode[j].Init_MISC);
++
++ /* init SEQ register SR00 - SR04 */
++ for (i = 0; i < SR00_SR04_SIZE; i++)
++ sm712_write_seq(sfb, i, VGAMode[j].Init_SR00_SR04[i]);
++
++ /* init SEQ register SR10 - SR24 */
++ for (i = 0; i < SR10_SR24_SIZE; i++)
++ sm712_write_seq(sfb, i + 0x10,
++ VGAMode[j].Init_SR10_SR24[i]);
++
++ /* init SEQ register SR30 - SR75 */
++ for (i = 0; i < SR30_SR75_SIZE; i++)
++ if ((i + 0x30) != 0x62 &&
++ (i + 0x30) != 0x6a && (i + 0x30) != 0x6b)
++ sm712_write_seq(sfb, i + 0x30,
++ VGAMode[j].Init_SR30_SR75[i]);
++
++ /* init SEQ register SR80 - SR93 */
++ for (i = 0; i < SR80_SR93_SIZE; i++)
++ sm712_write_seq(sfb, i + 0x80,
++ VGAMode[j].Init_SR80_SR93[i]);
++
++ /* init SEQ register SRA0 - SRAF */
++ for (i = 0; i < SRA0_SRAF_SIZE; i++)
++ sm712_write_seq(sfb, i + 0xa0,
++ VGAMode[j].Init_SRA0_SRAF[i]);
++
++ /* init Graphic register GR00 - GR08 */
++ for (i = 0; i < GR00_GR08_SIZE; i++)
++ sm712_write_grph(sfb, i, VGAMode[j].Init_GR00_GR08[i]);
++
++ /* init Attribute register AR00 - AR14 */
++ for (i = 0; i < AR00_AR14_SIZE; i++)
++ sm712_write_attr(sfb, i, VGAMode[j].Init_AR00_AR14[i]);
++
++ /* init CRTC register CR00 - CR18 */
++ for (i = 0; i < CR00_CR18_SIZE; i++)
++ sm712_write_crtc(sfb, i, VGAMode[j].Init_CR00_CR18[i]);
++
++ /* init CRTC register CR30 - CR4D */
++ for (i = 0; i < CR30_CR4D_SIZE; i++)
++ sm712_write_crtc(sfb, i + 0x30,
++ VGAMode[j].Init_CR30_CR4D[i]);
++
++ /* init CRTC register CR90 - CRA7 */
++ for (i = 0; i < CR90_CRA7_SIZE; i++)
++ sm712_write_crtc(sfb, i + 0x90,
++ VGAMode[j].Init_CR90_CRA7[i]);
++ }
++ sm712_writeb(sfb->mmio, 0x3c2, 0x67);
++
++ /* set VPR registers */
++ sm712_writel(sfb->vpr, 0x0C, 0x0);
++ sm712_writel(sfb->vpr, 0x40, 0x0);
++
++ /* set data width */
++ m_nScreenStride = (sfb->width * sfb->fb.var.bits_per_pixel) / 64;
++ switch (sfb->fb.var.bits_per_pixel) {
++ case 8:
++ sm712_writel(sfb->vpr, 0x0, 0x0);
++ break;
++ case 16:
++ sm712_writel(sfb->vpr, 0x0, 0x00020000);
++ break;
++ case 24:
++ sm712_writel(sfb->vpr, 0x0, 0x00040000);
++ break;
++ case 32:
++ sm712_writel(sfb->vpr, 0x0, 0x00030000);
++ break;
++ }
++ sm712_writel(sfb->vpr, 0x10,
++ (u32) (((m_nScreenStride + 2) << 16) | m_nScreenStride));
++}
++
++static void sm712fb_setmode(struct sm712fb_info *sfb)
++{
++ switch (sfb->fb.var.bits_per_pixel) {
++ case 32:
++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
++ sfb->fb.fix.line_length = sfb->fb.var.xres * 4;
++ sfb->fb.var.red.length = 8;
++ sfb->fb.var.green.length = 8;
++ sfb->fb.var.blue.length = 8;
++ sfb->fb.var.red.offset = 16;
++ sfb->fb.var.green.offset = 8;
++ sfb->fb.var.blue.offset = 0;
++ break;
++ case 24:
++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
++ sfb->fb.fix.line_length = sfb->fb.var.xres * 3;
++ sfb->fb.var.red.length = 8;
++ sfb->fb.var.green.length = 8;
++ sfb->fb.var.blue.length = 8;
++ sfb->fb.var.red.offset = 16;
++ sfb->fb.var.green.offset = 8;
++ sfb->fb.var.blue.offset = 0;
++ break;
++ case 8:
++ sfb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
++ sfb->fb.fix.line_length = sfb->fb.var.xres;
++ sfb->fb.var.red.length = 3;
++ sfb->fb.var.green.length = 3;
++ sfb->fb.var.blue.length = 2;
++ sfb->fb.var.red.offset = 5;
++ sfb->fb.var.green.offset = 2;
++ sfb->fb.var.blue.offset = 0;
++ break;
++ case 16:
++ default:
++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
++ sfb->fb.fix.line_length = sfb->fb.var.xres * 2;
++ sfb->fb.var.red.length = 5;
++ sfb->fb.var.green.length = 6;
++ sfb->fb.var.blue.length = 5;
++ sfb->fb.var.red.offset = 11;
++ sfb->fb.var.green.offset = 5;
++ sfb->fb.var.blue.offset = 0;
++ break;
++ }
++
++ sfb->width = sfb->fb.var.xres;
++ sfb->height = sfb->fb.var.yres;
++ sfb->hz = 60;
++ sm712_set_timing(sfb);
++}
++
++static int sm712_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
++{
++ /* sanity checks */
++ if (var->xres_virtual < var->xres)
++ var->xres_virtual = var->xres;
++
++ if (var->yres_virtual < var->yres)
++ var->yres_virtual = var->yres;
++
++ /* set valid default bpp */
++ if ((var->bits_per_pixel != 8) && (var->bits_per_pixel != 16) &&
++ (var->bits_per_pixel != 24) && (var->bits_per_pixel != 32))
++ var->bits_per_pixel = 16;
++
++ return 0;
++}
++
++static int sm712_set_par(struct fb_info *info)
++{
++ sm712fb_setmode(info->par);
++
++ return 0;
++}
++
++static struct fb_ops sm712fb_ops = {
++ .owner = THIS_MODULE,
++ .fb_check_var = sm712_check_var,
++ .fb_set_par = sm712_set_par,
++ .fb_setcolreg = sm712_setcolreg,
++ .fb_blank = sm712_blank,
++ .fb_fillrect = cfb_fillrect,
++ .fb_imageblit = cfb_imageblit,
++ .fb_copyarea = cfb_copyarea,
++#ifdef __BIG_ENDIAN
++ .fb_read = sm712fb_read,
++ .fb_write = sm712fb_write,
++#endif
++};
++
++/*
++ * alloc struct sm712fb_info and assign default values
++ */
++static struct sm712fb_info *sm712_fb_info_new(struct pci_dev *pdev)
++{
++ struct sm712fb_info *sfb;
++
++ sfb = kzalloc(sizeof(*sfb), GFP_KERNEL);
++
++ if (!sfb)
++ return NULL;
++
++ sfb->pdev = pdev;
++
++ sfb->fb.flags = FBINFO_FLAG_DEFAULT;
++ sfb->fb.fbops = &sm712fb_ops;
++ sfb->fb.fix = sm712fb_fix;
++ sfb->fb.var = sm712fb_var;
++ sfb->fb.pseudo_palette = sfb->colreg;
++ sfb->fb.par = sfb;
++ sfb->accel = accel;
++
++ return sfb;
++}
++
++/*
++ * free struct sm712fb_info
++ */
++static void sm712_fb_info_free(struct sm712fb_info *sfb)
++{
++ kfree(sfb);
++}
++
++/*
++ * Map in the screen memory
++ */
++
++static int sm712_map_smem(struct sm712fb_info *sfb,
++ struct pci_dev *pdev, u_long smem_len)
++{
++
++ sfb->fb.fix.smem_start = pci_resource_start(pdev, 0);
++
++#ifdef __BIG_ENDIAN
++ if (sfb->fb.var.bits_per_pixel == 32)
++ sfb->fb.fix.smem_start += 0x800000;
++#endif
++
++ sfb->fb.fix.smem_len = smem_len;
++
++ sfb->fb.screen_base = sfb->lfb;
++
++ if (!sfb->fb.screen_base) {
++ dev_err(&pdev->dev,
++ "%s: unable to map screen memory\n", sfb->fb.fix.id);
++ return -ENOMEM;
++ }
++
++ return 0;
++}
++
++/*
++ * Unmap in the screen memory
++ *
++ */
++static void sm712_unmap_smem(struct sm712fb_info *sfb)
++{
++ if (sfb && sfb->fb.screen_base) {
++ iounmap(sfb->fb.screen_base);
++ sfb->fb.screen_base = NULL;
++ sfb->lfb = NULL;
++ }
++}
++
++static inline void sm712_init_hw(struct sm712fb_info *sfb)
++{
++ /* enable linear memory mode and packed pixel format */
++ outb_p(0x18, 0x3c4);
++ outb_p(0x11, 0x3c5);
++
++ /* set MCLK = 14.31818 * (0x16 / 0x2) */
++ sm712_write_seq(sfb, 0x6a, 0x16);
++ sm712_write_seq(sfb, 0x6b, 0x02);
++ sm712_write_seq(sfb, 0x62, 0x3e);
++
++ /* enable PCI burst */
++ sm712_write_seq(sfb, 0x17, 0x20);
++
++#ifdef __BIG_ENDIAN
++ /* enable word swap */
++ if (sfb->fb.var.bits_per_pixel == 32)
++ sm712_write_seq(sfb, 0x17, 0x30);
++#endif
++
++ if (!sfb->accel) {
++ dev_info(&sfb->pdev->dev, "2d acceleration was disabled by user.\n");
++ sfb->fb.flags = FBINFO_FLAG_DEFAULT | FBINFO_HWACCEL_NONE;
++ return;
++ }
++
++ if (sm712fb_init_accel(sfb) < 0) {
++ dev_info(&sfb->pdev->dev, "failed to enable 2d accleration.\n");
++ sfb->fb.flags = FBINFO_FLAG_DEFAULT | FBINFO_HWACCEL_NONE;
++ return;
++ } else {
++ sm712fb_ops.fb_fillrect = sm712fb_fillrect;
++ sm712fb_ops.fb_copyarea = sm712fb_copyarea;
++ sm712fb_ops.fb_imageblit = sm712fb_imageblit;
++ sfb->fb.flags |= FBINFO_HWACCEL_COPYAREA |
++ FBINFO_HWACCEL_FILLRECT |
++ FBINFO_HWACCEL_IMAGEBLIT |
++ FBINFO_READS_FAST;
++ dev_info(&sfb->pdev->dev, "sm712fb: enable 2d acceleration.\n");
++ }
++}
++
++static int sm712fb_pci_probe(struct pci_dev *pdev,
++ const struct pci_device_id *ent)
++{
++ struct sm712fb_info *sfb;
++ int err;
++ unsigned long mmio_base;
++
++#ifndef MODULE
++ char *option = NULL;
++
++ if (!fb_get_options("sm712fb", &option))
++ sm712fb_setup(option);
++#endif
++
++ dev_info(&pdev->dev, "Silicon Motion display driver.");
++
++ err = pci_enable_device(pdev); /* enable SMTC chip */
++ if (err)
++ return err;
++
++ sprintf(sm712fb_fix.id, "sm712fb");
++
++ sfb = sm712_fb_info_new(pdev);
++
++ if (!sfb) {
++ err = -ENOMEM;
++ goto free_fail;
++ }
++
++ sfb->chip_id = ent->device;
++
++ pci_set_drvdata(pdev, sfb);
++
++ /* get mode parameter from sm712_scr_info */
++ if (sm712_scr_info.lfb_width != 0) {
++ sfb->fb.var.xres = sm712_scr_info.lfb_width;
++ sfb->fb.var.yres = sm712_scr_info.lfb_height;
++ sfb->fb.var.bits_per_pixel = sm712_scr_info.lfb_depth;
++ } else {
++ /* default resolution 1024x600 16bit mode */
++ sfb->fb.var.xres = SM712_DEFAULT_XRES;
++ sfb->fb.var.yres = SM712_DEFAULT_YRES;
++ sfb->fb.var.bits_per_pixel = SM712_DEFAULT_BPP;
++ }
++
++#ifdef __BIG_ENDIAN
++ if (sfb->fb.var.bits_per_pixel == 24)
++ sfb->fb.var.bits_per_pixel = (sm712_scr_info.lfb_depth = 32);
++#endif
++
++ /* Map address and memory detection */
++ mmio_base = pci_resource_start(pdev, 0);
++ pci_read_config_byte(pdev, PCI_REVISION_ID, &sfb->chip_rev_id);
++
++ if (sfb->chip_id != 0x712) {
++ dev_err(&pdev->dev,
++ "No valid Silicon Motion display chip was detected!");
++
++ goto fb_fail;
++ }
++
++ sfb->fb.fix.mmio_start = mmio_base + SM712_REG_BASE;
++ sfb->fb.fix.mmio_len = SM712_REG_SIZE;
++#ifdef __BIG_ENDIAN
++ sfb->lfb = ioremap(mmio_base, 0x00c00000);
++#else
++ sfb->lfb = ioremap(mmio_base, 0x00800000);
++#endif
++ sfb->mmio = sfb->lfb + SM712_MMIO_BASE;
++ sfb->dpr = sfb->lfb + SM712_DPR_BASE;
++ sfb->vpr = sfb->lfb + SM712_VPR_BASE;
++ sfb->dataport = sfb->lfb + SM712_DATAPORT_BASE;
++#ifdef __BIG_ENDIAN
++ if (sfb->fb.var.bits_per_pixel == 32) {
++ sfb->lfb += 0x800000;
++ dev_info(&pdev->dev, "sfb->lfb=%p", sfb->lfb);
++ }
++#endif
++ if (!sfb->mmio) {
++ dev_err(&pdev->dev,
++ "%s: unable to map memory mapped IO!", sfb->fb.fix.id);
++ err = -ENOMEM;
++ goto fb_fail;
++ }
++
++ sm712_init_hw(sfb);
++
++ /* can support 32 bpp */
++ if (15 == sfb->fb.var.bits_per_pixel)
++ sfb->fb.var.bits_per_pixel = 16;
++
++ sfb->fb.var.xres_virtual = sfb->fb.var.xres;
++ sfb->fb.var.yres_virtual = sfb->fb.var.yres;
++ err = sm712_map_smem(sfb, pdev, SM712_VRAM_SIZE);
++ if (err)
++ goto fail;
++
++ sm712fb_setmode(sfb);
++
++ err = register_framebuffer(&sfb->fb);
++ if (err < 0)
++ goto fail;
++
++ dev_info(&pdev->dev,
++ "Silicon Motion SM%X Rev%X primary display mode %dx%d-%d Init Complete.",
++ sfb->chip_id, sfb->chip_rev_id, sfb->fb.var.xres,
++ sfb->fb.var.yres, sfb->fb.var.bits_per_pixel);
++
++ return 0;
++
++fail:
++ dev_err(&pdev->dev, "Silicon Motion, Inc. primary display init fail.");
++
++ sm712_unmap_smem(sfb);
++fb_fail:
++ sm712_fb_info_free(sfb);
++free_fail:
++ pci_disable_device(pdev);
++
++ return err;
++}
++
++/*
++ * 0x712 (LynxEM+)
++ */
++static const struct pci_device_id sm712fb_pci_table[] = {
++ {PCI_DEVICE(0x126f, 0x712),},
++ {0,}
++};
++
++static void sm712fb_pci_remove(struct pci_dev *pdev)
++{
++ struct sm712fb_info *sfb;
++
++ sfb = pci_get_drvdata(pdev);
++ sm712_unmap_smem(sfb);
++ unregister_framebuffer(&sfb->fb);
++ sm712_fb_info_free(sfb);
++}
++
++#ifdef CONFIG_PM
++static int sm712fb_pci_suspend(struct device *device)
++{
++ struct pci_dev *pdev = to_pci_dev(device);
++ struct sm712fb_info *sfb;
++
++ sfb = pci_get_drvdata(pdev);
++
++ /* set the hw in sleep mode use external clock and self memory refresh
++ * so that we can turn off internal PLLs later on
++ */
++ sm712_write_seq(sfb, 0x20, (sm712_read_seq(sfb, 0x20) | 0xc0));
++ sm712_write_seq(sfb, 0x69, (sm712_read_seq(sfb, 0x69) & 0xf7));
++
++ console_lock();
++ fb_set_suspend(&sfb->fb, 1);
++ console_unlock();
++
++ /* additionally turn off all function blocks including internal PLLs */
++ sm712_write_seq(sfb, 0x21, 0xff);
++
++ return 0;
++}
++
++static int sm712fb_pci_resume(struct device *device)
++{
++ struct pci_dev *pdev = to_pci_dev(device);
++ struct sm712fb_info *sfb;
++
++ sfb = pci_get_drvdata(pdev);
++
++ /* reinit hardware */
++ sm712_init_hw(sfb);
++
++ sm712_write_seq(sfb, 0x34, (sm712_read_seq(sfb, 0x34) | 0xc0));
++ sm712_write_seq(sfb, 0x33, ((sm712_read_seq(sfb, 0x33) | 0x08) & 0xfb));
++
++ sm712fb_setmode(sfb);
++
++ console_lock();
++ fb_set_suspend(&sfb->fb, 0);
++ console_unlock();
++
++ return 0;
++}
++
++static SIMPLE_DEV_PM_OPS(sm712_pm_ops, sm712fb_pci_suspend, sm712fb_pci_resume);
++#define SM712_PM_OPS (&sm712_pm_ops)
++
++#else /* !CONFIG_PM */
++
++#define SM712_PM_OPS NULL
++
++#endif /* !CONFIG_PM */
++
++static struct pci_driver sm712fb_driver = {
++ .name = "sm712fb",
++ .id_table = sm712fb_pci_table,
++ .probe = sm712fb_pci_probe,
++ .remove = sm712fb_pci_remove,
++ .driver.pm = SM712_PM_OPS,
++};
++
++module_pci_driver(sm712fb_driver);
++
++module_param(accel, bool, S_IRUGO);
++MODULE_PARM_DESC(accel, "Enable or disable 2D Acceleration");
++
++MODULE_AUTHOR("Siliconmotion ");
++MODULE_DESCRIPTION("Framebuffer driver for Silicon Motion SM712 Graphic Cards");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/video/fbdev/sm712fb/sm712fb_drv.h b/drivers/video/fbdev/sm712fb/sm712fb_drv.h
+new file mode 100644
+index 0000000..bf81bff
+--- /dev/null
++++ b/drivers/video/fbdev/sm712fb/sm712fb_drv.h
+@@ -0,0 +1,130 @@
++/*
++ * Silicon Motion SM712 frame buffer device
++ *
++ * Copyright (C) 2006 Silicon Motion Technology Corp.
++ * Authors: Ge Wang, gewang@siliconmotion.com
++ * Boyod boyod.yang@siliconmotion.com.cn
++ *
++ * Copyright (C) 2009 Lemote, Inc.
++ * Author: Wu Zhangjin, wuzhangjin@gmail.com
++ *
++ * Copyright (C) 2011 Igalia, S.L.
++ * Author: Javier M. Mellid <jmunhoz@igalia.com>
++ *
++ * Copyright (C) 2014 Tom Li.
++ * Author: Tom Li (Yifeng Li) <biergaizi@member.fsf.org>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
++ * Framebuffer driver for Silicon Motion SM712 chip
+ */
+
-+#define NR_PALETTE 256
++#ifndef _SM712FB_DRV_H
++#define _SM712FB_DRV_H
++
++/*
++* Private structure
++*/
++struct sm712fb_info {
++ struct pci_dev *pdev;
++ struct fb_info fb;
++ u16 chip_id;
++ u8 chip_rev_id;
++
++ void __iomem *lfb; /* linear frame buffer, the base address */
++
++ void __iomem *dpr; /* drawing processor control regs */
++ void __iomem *vpr; /* video processor control regs */
++ void __iomem *cpr; /* capture processor control regs */
++ void __iomem *mmio; /* memory map IO port */
++ void __iomem *dataport; /* 2d drawing engine data port */
++
++ u_int width;
++ u_int height;
++ u_int hz;
++
++ u32 colreg[17];
++
++ bool accel;
++};
++
++/* constants for registers operations */
++
++#include "sm712fb_io.h"
++
++#define FB_ACCEL_SMI_LYNX 88
++
++#define SM712_DEFAULT_XRES 1024
++#define SM712_DEFAULT_YRES 600
++#define SM712_DEFAULT_BPP 16
++
++#define SM712_VRAM_SIZE 0x00400000
++
++#define SM712_REG_BASE 0x00400000
++#define SM712_REG_SIZE 0x00400000
++
++#define SM712_MMIO_BASE 0x00700000
++
++#define SM712_DPR_BASE 0x00408000
++#define SM712_DPR_SIZE (0x6C + 1)
++
++#define DPR_COORDS(x, y) (((x) << 16) | (y))
++
++#define DPR_SRC_COORDS 0x00
++#define DPR_DST_COORDS 0x04
++#define DPR_SPAN_COORDS 0x08
++#define DPR_DE_CTRL 0x0c
++#define DPR_PITCH 0x10
++#define DPR_FG_COLOR 0x14
++#define DPR_BG_COLOR 0x18
++#define DPR_STRETCH 0x1c
++#define DPR_COLOR_COMPARE 0x20
++#define DPR_COLOR_COMPARE_MASK 0x24
++#define DPR_BYTE_BIT_MASK 0x28
++#define DPR_CROP_TOPLEFT_COORDS 0x2c
++#define DPR_CROP_BOTRIGHT_COORDS 0x30
++#define DPR_SRC_WINDOW 0x3c
++#define DPR_SRC_BASE 0x40
++#define DPR_DST_BASE 0x44
++
++#define DE_CTRL_START 0x80000000
++#define DE_CTRL_RTOL 0x08000000
++#define DE_CTRL_COMMAND_MASK 0x001f0000
++#define DE_CTRL_COMMAND_SHIFT 16
++#define DE_CTRL_COMMAND_BITBLT 0x00
++#define DE_CTRL_COMMAND_SOLIDFILL 0x01
++#define DE_CTRL_COMMAND_HOST_WRITE 0x08
++#define DE_CTRL_ROP_ENABLE 0x00008000
++#define DE_CTRL_ROP_MASK 0x000000ff
++#define DE_CTRL_ROP_SHIFT 0
++#define DE_CTRL_ROP_SRC 0x0c
++
++#define DE_CTRL_HOST_SHIFT 22
++#define DE_CTRL_HOST_MONO 1
++
++#define SCR_DE_STATUS 0x16
++#define SCR_DE_STATUS_MASK 0x18
++#define SCR_DE_ENGINE_IDLE 0x10
++
++#define SM712_VPR_BASE 0x0040c000
++#define SM712_VPR_SIZE (0x44 + 1)
++
++#define SM712_DATAPORT_BASE 0x00400000
++
++#define SR00_SR04_SIZE (0x04 - 0x00 + 1)
++#define SR10_SR24_SIZE (0x24 - 0x10 + 1)
++#define SR30_SR75_SIZE (0x75 - 0x30 + 1)
++#define SR80_SR93_SIZE (0x93 - 0x80 + 1)
++#define SRA0_SRAF_SIZE (0xAF - 0xA0 + 1)
++#define GR00_GR08_SIZE (0x08 - 0x00 + 1)
++#define AR00_AR14_SIZE (0x14 - 0x00 + 1)
++#define CR00_CR18_SIZE (0x18 - 0x00 + 1)
++#define CR30_CR4D_SIZE (0x4D - 0x30 + 1)
++#define CR90_CRA7_SIZE (0xA7 - 0x90 + 1)
++
++#define DAC_REG (0x3c8)
++#define DAC_VAL (0x3c9)
+
-+#define FB_ACCEL_SMI_LYNX 88
++#endif
+diff --git a/drivers/video/fbdev/sm712fb/sm712fb_io.h b/drivers/video/fbdev/sm712fb/sm712fb_io.h
+new file mode 100644
+index 0000000..93346a0
+--- /dev/null
++++ b/drivers/video/fbdev/sm712fb/sm712fb_io.h
+@@ -0,0 +1,90 @@
++/*
++ * Silicon Motion SM712 frame buffer device
++ *
++ * Copyright (C) 2006 Silicon Motion Technology Corp.
++ * Authors: Ge Wang, gewang@siliconmotion.com
++ * Boyod boyod.yang@siliconmotion.com.cn
++ *
++ * Copyright (C) 2009 Lemote, Inc.
++ * Author: Wu Zhangjin, wuzhangjin@gmail.com
++ *
++ * Copyright (C) 2011 Igalia, S.L.
++ * Author: Javier M. Mellid <jmunhoz@igalia.com>
++ *
++ * Copyright (C) 2014 Tom Li.
++ * Author: Tom Li (Yifeng Li) <biergaizi@member.fsf.org>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ */
+
-+#define SCREEN_X_RES 1024
-+#define SCREEN_Y_RES 600
-+#define SCREEN_BPP 16
+
-+/*Assume SM712 graphics chip has 4MB VRAM */
-+#define SM712_VIDEOMEMORYSIZE 0x00400000
-+/*Assume SM722 graphics chip has 8MB VRAM */
-+#define SM722_VIDEOMEMORYSIZE 0x00800000
++#define sm712_writeb(base, reg, dat) writeb(dat, base + reg)
++#define sm712_writew(base, reg, dat) writew(dat, base + reg)
++#define sm712_writel(base, reg, dat) writel(dat, base + reg)
+
-+#define dac_reg (0x3c8)
-+#define dac_val (0x3c9)
++#define sm712_readb(base, reg) readb(base + reg)
++#define sm712_readw(base, reg) readw(base + reg)
++#define sm712_readl(base, reg) readl(base + reg)
+
-+extern void __iomem *smtc_RegBaseAddress;
-+#define smtc_mmiowb(dat, reg) writeb(dat, smtc_RegBaseAddress + reg)
-+#define smtc_mmioww(dat, reg) writew(dat, smtc_RegBaseAddress + reg)
-+#define smtc_mmiowl(dat, reg) writel(dat, smtc_RegBaseAddress + reg)
+
-+#define smtc_mmiorb(reg) readb(smtc_RegBaseAddress + reg)
-+#define smtc_mmiorw(reg) readw(smtc_RegBaseAddress + reg)
-+#define smtc_mmiorl(reg) readl(smtc_RegBaseAddress + reg)
++static inline void sm712_write_crtc(struct sm712fb_info *fb, u8 reg, u8 val)
++{
++ sm712_writeb(fb->mmio, 0x3d4, reg);
++ sm712_writeb(fb->mmio, 0x3d5, val);
++}
+
-+#define SIZE_SR00_SR04 (0x04 - 0x00 + 1)
-+#define SIZE_SR10_SR24 (0x24 - 0x10 + 1)
-+#define SIZE_SR30_SR75 (0x75 - 0x30 + 1)
-+#define SIZE_SR80_SR93 (0x93 - 0x80 + 1)
-+#define SIZE_SRA0_SRAF (0xAF - 0xA0 + 1)
-+#define SIZE_GR00_GR08 (0x08 - 0x00 + 1)
-+#define SIZE_AR00_AR14 (0x14 - 0x00 + 1)
-+#define SIZE_CR00_CR18 (0x18 - 0x00 + 1)
-+#define SIZE_CR30_CR4D (0x4D - 0x30 + 1)
-+#define SIZE_CR90_CRA7 (0xA7 - 0x90 + 1)
-+#define SIZE_VPR (0x6C + 1)
-+#define SIZE_DPR (0x44 + 1)
++static inline u8 sm712_read_crtc(struct sm712fb_info *fb, u8 reg)
++{
++ sm712_writeb(fb->mmio, 0x3d4, reg);
++ return sm712_readb(fb->mmio, 0x3d5);
++}
+
-+static inline void smtc_crtcw(int reg, int val)
++static inline void sm712_write_grph(struct sm712fb_info *fb, u8 reg, u8 val)
+{
-+ smtc_mmiowb(reg, 0x3d4);
-+ smtc_mmiowb(val, 0x3d5);
++ sm712_writeb(fb->mmio, 0x3ce, reg);
++ sm712_writeb(fb->mmio, 0x3cf, val);
+}
+
-+static inline unsigned int smtc_crtcr(int reg)
++static inline u8 sm712_read_grph(struct sm712fb_info *fb, u8 reg)
+{
-+ smtc_mmiowb(reg, 0x3d4);
-+ return smtc_mmiorb(0x3d5);
++ sm712_writeb(fb->mmio, 0x3ce, reg);
++ return sm712_readb(fb->mmio, 0x3cf);
+}
+
-+static inline void smtc_grphw(int reg, int val)
++static inline void sm712_write_attr(struct sm712fb_info *fb, u8 reg, u8 val)
+{
-+ smtc_mmiowb(reg, 0x3ce);
-+ smtc_mmiowb(val, 0x3cf);
++ sm712_readb(fb->mmio, 0x3da);
++ sm712_writeb(fb->mmio, 0x3c0, reg);
++ sm712_readb(fb->mmio, 0x3c1);
++ sm712_writeb(fb->mmio, 0x3c0, val);
+}
+
-+static inline unsigned int smtc_grphr(int reg)
++static inline void sm712_write_seq(struct sm712fb_info *fb, u8 reg, u8 val)
+{
-+ smtc_mmiowb(reg, 0x3ce);
-+ return smtc_mmiorb(0x3cf);
++ sm712_writeb(fb->mmio, 0x3c4, reg);
++ sm712_writeb(fb->mmio, 0x3c5, val);
+}
+
-+static inline void smtc_attrw(int reg, int val)
++static inline u8 sm712_read_seq(struct sm712fb_info *fb, u8 reg)
+{
-+ smtc_mmiorb(0x3da);
-+ smtc_mmiowb(reg, 0x3c0);
-+ smtc_mmiorb(0x3c1);
-+ smtc_mmiowb(val, 0x3c0);
++ sm712_writeb(fb->mmio, 0x3c4, reg);
++ return sm712_readb(fb->mmio, 0x3c5);
+}
+
-+static inline void smtc_seqw(int reg, int val)
++static inline u32 sm712_read_dpr(struct sm712fb_info *fb, u8 reg)
+{
-+ smtc_mmiowb(reg, 0x3c4);
-+ smtc_mmiowb(val, 0x3c5);
++ return sm712_readl(fb->dpr, reg);
+}
+
-+static inline unsigned int smtc_seqr(int reg)
++static inline void sm712_write_dpr(struct sm712fb_info *fb, u8 reg, u32 val)
+{
-+ smtc_mmiowb(reg, 0x3c4);
-+ return smtc_mmiorb(0x3c5);
++ sm712_writel(fb->dpr, reg, val);
+}
+
++static inline void sm712_write_dataport(struct sm712fb_info *fb, u32 val)
++{
++ sm712_writel(fb->dataport, 0, val);
++}
+diff --git a/drivers/video/fbdev/sm712fb/sm712fb_modedb.h b/drivers/video/fbdev/sm712fb/sm712fb_modedb.h
+new file mode 100644
+index 0000000..16ee7e3
+--- /dev/null
++++ b/drivers/video/fbdev/sm712fb/sm712fb_modedb.h
+@@ -0,0 +1,682 @@
+/* The next structure holds all information relevant for a specific video mode.
+ */
+
@@ -9449,16 +11136,16 @@ index 0000000..8599861
+ int bpp;
+ int hz;
+ unsigned char Init_MISC;
-+ unsigned char Init_SR00_SR04[SIZE_SR00_SR04];
-+ unsigned char Init_SR10_SR24[SIZE_SR10_SR24];
-+ unsigned char Init_SR30_SR75[SIZE_SR30_SR75];
-+ unsigned char Init_SR80_SR93[SIZE_SR80_SR93];
-+ unsigned char Init_SRA0_SRAF[SIZE_SRA0_SRAF];
-+ unsigned char Init_GR00_GR08[SIZE_GR00_GR08];
-+ unsigned char Init_AR00_AR14[SIZE_AR00_AR14];
-+ unsigned char Init_CR00_CR18[SIZE_CR00_CR18];
-+ unsigned char Init_CR30_CR4D[SIZE_CR30_CR4D];
-+ unsigned char Init_CR90_CRA7[SIZE_CR90_CRA7];
++ unsigned char Init_SR00_SR04[SR00_SR04_SIZE];
++ unsigned char Init_SR10_SR24[SR10_SR24_SIZE];
++ unsigned char Init_SR30_SR75[SR30_SR75_SIZE];
++ unsigned char Init_SR80_SR93[SR80_SR93_SIZE];
++ unsigned char Init_SRA0_SRAF[SRA0_SRAF_SIZE];
++ unsigned char Init_GR00_GR08[GR00_GR08_SIZE];
++ unsigned char Init_AR00_AR14[AR00_AR14_SIZE];
++ unsigned char Init_CR00_CR18[CR00_CR18_SIZE];
++ unsigned char Init_CR30_CR4D[CR30_CR4D_SIZE];
++ unsigned char Init_CR90_CRA7[CR90_CRA7_SIZE];
+};
+
+/**********************************************************************
@@ -10122,1183 +11809,6 @@ index 0000000..8599861
+};
+
+#define numVGAModes ARRAY_SIZE(VGAMode)
-diff --git a/drivers/staging/sm7xxfb/sm7xxfb.c b/drivers/staging/sm7xxfb/sm7xxfb.c
-new file mode 100644
-index 0000000..e40ce80
---- /dev/null
-+++ b/drivers/staging/sm7xxfb/sm7xxfb.c
-@@ -0,0 +1,1029 @@
-+/*
-+ * Silicon Motion SM7XX frame buffer device
-+ *
-+ * Copyright (C) 2006 Silicon Motion Technology Corp.
-+ * Authors: Ge Wang, gewang@siliconmotion.com
-+ * Boyod boyod.yang@siliconmotion.com.cn
-+ *
-+ * Copyright (C) 2009 Lemote, Inc.
-+ * Author: Wu Zhangjin, wuzhangjin@gmail.com
-+ *
-+ * Copyright (C) 2011 Igalia, S.L.
-+ * Author: Javier M. Mellid <jmunhoz@igalia.com>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ * Framebuffer driver for Silicon Motion SM710, SM712, SM721 and SM722 chips
-+ */
-+
-+#include <linux/io.h>
-+#include <linux/fb.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/uaccess.h>
-+#include <linux/module.h>
-+#include <linux/console.h>
-+#include <linux/screen_info.h>
-+
-+#ifdef CONFIG_PM
-+#include <linux/pm.h>
-+#endif
-+
-+#include "sm7xx.h"
-+
-+/*
-+* Private structure
-+*/
-+struct smtcfb_info {
-+ struct pci_dev *pdev;
-+ struct fb_info fb;
-+ u16 chip_id;
-+ u8 chip_rev_id;
-+
-+ void __iomem *lfb; /* linear frame buffer */
-+ void __iomem *dp_regs; /* drawing processor control regs */
-+ void __iomem *vp_regs; /* video processor control regs */
-+ void __iomem *cp_regs; /* capture processor control regs */
-+ void __iomem *mmio; /* memory map IO port */
-+
-+ u_int width;
-+ u_int height;
-+ u_int hz;
-+
-+ u32 colreg[17];
-+};
-+
-+void __iomem *smtc_RegBaseAddress; /* Memory Map IO starting address */
-+
-+static struct fb_var_screeninfo smtcfb_var = {
-+ .xres = 1024,
-+ .yres = 600,
-+ .xres_virtual = 1024,
-+ .yres_virtual = 600,
-+ .bits_per_pixel = 16,
-+ .red = {16, 8, 0},
-+ .green = {8, 8, 0},
-+ .blue = {0, 8, 0},
-+ .activate = FB_ACTIVATE_NOW,
-+ .height = -1,
-+ .width = -1,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+ .nonstd = 0,
-+ .accel_flags = FB_ACCELF_TEXT,
-+};
-+
-+static struct fb_fix_screeninfo smtcfb_fix = {
-+ .id = "smXXXfb",
-+ .type = FB_TYPE_PACKED_PIXELS,
-+ .visual = FB_VISUAL_TRUECOLOR,
-+ .line_length = 800 * 3,
-+ .accel = FB_ACCEL_SMI_LYNX,
-+ .type_aux = 0,
-+ .xpanstep = 0,
-+ .ypanstep = 0,
-+ .ywrapstep = 0,
-+};
-+
-+struct vesa_mode {
-+ char index[6];
-+ u16 lfb_width;
-+ u16 lfb_height;
-+ u16 lfb_depth;
-+};
-+
-+static struct vesa_mode vesa_mode_table[] = {
-+ {"0x301", 640, 480, 8},
-+ {"0x303", 800, 600, 8},
-+ {"0x305", 1024, 768, 8},
-+ {"0x307", 1280, 1024, 8},
-+
-+ {"0x311", 640, 480, 16},
-+ {"0x313", 800, 480, 16},
-+ {"0x314", 800, 600, 16},
-+ {"0x317", 1024, 768, 16},
-+ {"0x31A", 1280, 1024, 16},
-+
-+ {"0x312", 640, 480, 24},
-+ {"0x315", 800, 600, 24},
-+ {"0x318", 1024, 768, 24},
-+ {"0x31B", 1280, 1024, 24},
-+};
-+
-+struct screen_info smtc_scr_info;
-+
-+/* process command line options, get vga parameter */
-+static int __init sm7xx_vga_setup(char *options)
-+{
-+ int i;
-+
-+ if (!options || !*options)
-+ return -EINVAL;
-+
-+ smtc_scr_info.lfb_width = 0;
-+ smtc_scr_info.lfb_height = 0;
-+ smtc_scr_info.lfb_depth = 0;
-+
-+ pr_debug("sm7xx_vga_setup = %s\n", options);
-+
-+ for (i = 0; i < ARRAY_SIZE(vesa_mode_table); i++) {
-+ if (strstr(options, vesa_mode_table[i].index)) {
-+ smtc_scr_info.lfb_width = vesa_mode_table[i].lfb_width;
-+ smtc_scr_info.lfb_height =
-+ vesa_mode_table[i].lfb_height;
-+ smtc_scr_info.lfb_depth = vesa_mode_table[i].lfb_depth;
-+ return 0;
-+ }
-+ }
-+
-+ return -1;
-+}
-+__setup("vga=", sm7xx_vga_setup);
-+
-+static void sm712_setpalette(int regno, unsigned red, unsigned green,
-+ unsigned blue, struct fb_info *info)
-+{
-+ /* set bit 5:4 = 01 (write LCD RAM only) */
-+ smtc_seqw(0x66, (smtc_seqr(0x66) & 0xC3) | 0x10);
-+
-+ smtc_mmiowb(regno, dac_reg);
-+ smtc_mmiowb(red >> 10, dac_val);
-+ smtc_mmiowb(green >> 10, dac_val);
-+ smtc_mmiowb(blue >> 10, dac_val);
-+}
-+
-+/* chan_to_field
-+ *
-+ * convert a colour value into a field position
-+ *
-+ * from pxafb.c
-+ */
-+
-+static inline unsigned int chan_to_field(unsigned int chan,
-+ struct fb_bitfield *bf)
-+{
-+ chan &= 0xffff;
-+ chan >>= 16 - bf->length;
-+ return chan << bf->offset;
-+}
-+
-+static int smtc_blank(int blank_mode, struct fb_info *info)
-+{
-+ /* clear DPMS setting */
-+ switch (blank_mode) {
-+ case FB_BLANK_UNBLANK:
-+ /* Screen On: HSync: On, VSync : On */
-+ smtc_seqw(0x01, (smtc_seqr(0x01) & (~0x20)));
-+ smtc_seqw(0x6a, 0x16);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x21, (smtc_seqr(0x21) & 0x77));
-+ smtc_seqw(0x22, (smtc_seqr(0x22) & (~0x30)));
-+ smtc_seqw(0x23, (smtc_seqr(0x23) & (~0xc0)));
-+ smtc_seqw(0x24, (smtc_seqr(0x24) | 0x01));
-+ smtc_seqw(0x31, (smtc_seqr(0x31) | 0x03));
-+ break;
-+ case FB_BLANK_NORMAL:
-+ /* Screen Off: HSync: On, VSync : On Soft blank */
-+ smtc_seqw(0x01, (smtc_seqr(0x01) & (~0x20)));
-+ smtc_seqw(0x6a, 0x16);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x22, (smtc_seqr(0x22) & (~0x30)));
-+ smtc_seqw(0x23, (smtc_seqr(0x23) & (~0xc0)));
-+ smtc_seqw(0x24, (smtc_seqr(0x24) | 0x01));
-+ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
-+ break;
-+ case FB_BLANK_VSYNC_SUSPEND:
-+ /* Screen On: HSync: On, VSync : Off */
-+ smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20));
-+ smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0)));
-+ smtc_seqw(0x6a, 0x0c);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88));
-+ smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x20));
-+ smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0x20));
-+ smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01)));
-+ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
-+ smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80));
-+ break;
-+ case FB_BLANK_HSYNC_SUSPEND:
-+ /* Screen On: HSync: Off, VSync : On */
-+ smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20));
-+ smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0)));
-+ smtc_seqw(0x6a, 0x0c);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88));
-+ smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x10));
-+ smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0xD8));
-+ smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01)));
-+ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
-+ smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80));
-+ break;
-+ case FB_BLANK_POWERDOWN:
-+ /* Screen On: HSync: Off, VSync : Off */
-+ smtc_seqw(0x01, (smtc_seqr(0x01) | 0x20));
-+ smtc_seqw(0x20, (smtc_seqr(0x20) & (~0xB0)));
-+ smtc_seqw(0x6a, 0x0c);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x21, (smtc_seqr(0x21) | 0x88));
-+ smtc_seqw(0x22, ((smtc_seqr(0x22) & (~0x30)) | 0x30));
-+ smtc_seqw(0x23, ((smtc_seqr(0x23) & (~0xc0)) | 0xD8));
-+ smtc_seqw(0x24, (smtc_seqr(0x24) & (~0x01)));
-+ smtc_seqw(0x31, ((smtc_seqr(0x31) & (~0x07)) | 0x00));
-+ smtc_seqw(0x34, (smtc_seqr(0x34) | 0x80));
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static int smtc_setcolreg(unsigned regno, unsigned red, unsigned green,
-+ unsigned blue, unsigned trans, struct fb_info *info)
-+{
-+ struct smtcfb_info *sfb;
-+ u32 val;
-+
-+ sfb = info->par;
-+
-+ if (regno > 255)
-+ return 1;
-+
-+ switch (sfb->fb.fix.visual) {
-+ case FB_VISUAL_DIRECTCOLOR:
-+ case FB_VISUAL_TRUECOLOR:
-+ /*
-+ * 16/32 bit true-colour, use pseudo-palette for 16 base color
-+ */
-+ if (regno < 16) {
-+ if (sfb->fb.var.bits_per_pixel == 16) {
-+ u32 *pal = sfb->fb.pseudo_palette;
-+ val = chan_to_field(red, &sfb->fb.var.red);
-+ val |= chan_to_field(green, &sfb->fb.var.green);
-+ val |= chan_to_field(blue, &sfb->fb.var.blue);
-+#ifdef __BIG_ENDIAN
-+ pal[regno] =
-+ ((red & 0xf800) >> 8) |
-+ ((green & 0xe000) >> 13) |
-+ ((green & 0x1c00) << 3) |
-+ ((blue & 0xf800) >> 3);
-+#else
-+ pal[regno] = val;
-+#endif
-+ } else {
-+ u32 *pal = sfb->fb.pseudo_palette;
-+ val = chan_to_field(red, &sfb->fb.var.red);
-+ val |= chan_to_field(green, &sfb->fb.var.green);
-+ val |= chan_to_field(blue, &sfb->fb.var.blue);
-+#ifdef __BIG_ENDIAN
-+ val =
-+ (val & 0xff00ff00 >> 8) |
-+ (val & 0x00ff00ff << 8);
-+#endif
-+ pal[regno] = val;
-+ }
-+ }
-+ break;
-+
-+ case FB_VISUAL_PSEUDOCOLOR:
-+ /* color depth 8 bit */
-+ sm712_setpalette(regno, red, green, blue, info);
-+ break;
-+
-+ default:
-+ return 1; /* unknown type */
-+ }
-+
-+ return 0;
-+
-+}
-+
-+#ifdef __BIG_ENDIAN
-+static ssize_t smtcfb_read(struct fb_info *info, char __user *buf, size_t
-+ count, loff_t *ppos)
-+{
-+ unsigned long p = *ppos;
-+
-+ u32 *buffer, *dst;
-+ u32 __iomem *src;
-+ int c, i, cnt = 0, err = 0;
-+ unsigned long total_size;
-+
-+ if (!info || !info->screen_base)
-+ return -ENODEV;
-+
-+ if (info->state != FBINFO_STATE_RUNNING)
-+ return -EPERM;
-+
-+ total_size = info->screen_size;
-+
-+ if (total_size == 0)
-+ total_size = info->fix.smem_len;
-+
-+ if (p >= total_size)
-+ return 0;
-+
-+ if (count >= total_size)
-+ count = total_size;
-+
-+ if (count + p > total_size)
-+ count = total_size - p;
-+
-+ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
-+ if (!buffer)
-+ return -ENOMEM;
-+
-+ src = (u32 __iomem *) (info->screen_base + p);
-+
-+ if (info->fbops->fb_sync)
-+ info->fbops->fb_sync(info);
-+
-+ while (count) {
-+ c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
-+ dst = buffer;
-+ for (i = c >> 2; i--;) {
-+ *dst = fb_readl(src++);
-+ *dst =
-+ (*dst & 0xff00ff00 >> 8) |
-+ (*dst & 0x00ff00ff << 8);
-+ dst++;
-+ }
-+ if (c & 3) {
-+ u8 *dst8 = (u8 *) dst;
-+ u8 __iomem *src8 = (u8 __iomem *) src;
-+
-+ for (i = c & 3; i--;) {
-+ if (i & 1) {
-+ *dst8++ = fb_readb(++src8);
-+ } else {
-+ *dst8++ = fb_readb(--src8);
-+ src8 += 2;
-+ }
-+ }
-+ src = (u32 __iomem *) src8;
-+ }
-+
-+ if (copy_to_user(buf, buffer, c)) {
-+ err = -EFAULT;
-+ break;
-+ }
-+ *ppos += c;
-+ buf += c;
-+ cnt += c;
-+ count -= c;
-+ }
-+
-+ kfree(buffer);
-+
-+ return (err) ? err : cnt;
-+}
-+
-+static ssize_t
-+smtcfb_write(struct fb_info *info, const char __user *buf, size_t count,
-+ loff_t *ppos)
-+{
-+ unsigned long p = *ppos;
-+
-+ u32 *buffer, *src;
-+ u32 __iomem *dst;
-+ int c, i, cnt = 0, err = 0;
-+ unsigned long total_size;
-+
-+ if (!info || !info->screen_base)
-+ return -ENODEV;
-+
-+ if (info->state != FBINFO_STATE_RUNNING)
-+ return -EPERM;
-+
-+ total_size = info->screen_size;
-+
-+ if (total_size == 0)
-+ total_size = info->fix.smem_len;
-+
-+ if (p > total_size)
-+ return -EFBIG;
-+
-+ if (count > total_size) {
-+ err = -EFBIG;
-+ count = total_size;
-+ }
-+
-+ if (count + p > total_size) {
-+ if (!err)
-+ err = -ENOSPC;
-+
-+ count = total_size - p;
-+ }
-+
-+ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
-+ if (!buffer)
-+ return -ENOMEM;
-+
-+ dst = (u32 __iomem *) (info->screen_base + p);
-+
-+ if (info->fbops->fb_sync)
-+ info->fbops->fb_sync(info);
-+
-+ while (count) {
-+ c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
-+ src = buffer;
-+
-+ if (copy_from_user(src, buf, c)) {
-+ err = -EFAULT;
-+ break;
-+ }
-+
-+ for (i = c >> 2; i--;) {
-+ fb_writel((*src & 0xff00ff00 >> 8) |
-+ (*src & 0x00ff00ff << 8), dst++);
-+ src++;
-+ }
-+ if (c & 3) {
-+ u8 *src8 = (u8 *) src;
-+ u8 __iomem *dst8 = (u8 __iomem *) dst;
-+
-+ for (i = c & 3; i--;) {
-+ if (i & 1) {
-+ fb_writeb(*src8++, ++dst8);
-+ } else {
-+ fb_writeb(*src8++, --dst8);
-+ dst8 += 2;
-+ }
-+ }
-+ dst = (u32 __iomem *) dst8;
-+ }
-+
-+ *ppos += c;
-+ buf += c;
-+ cnt += c;
-+ count -= c;
-+ }
-+
-+ kfree(buffer);
-+
-+ return (cnt) ? cnt : err;
-+}
-+#endif /* ! __BIG_ENDIAN */
-+
-+static void sm7xx_set_timing(struct smtcfb_info *sfb)
-+{
-+ int i = 0, j = 0;
-+ u32 m_nScreenStride;
-+
-+ dev_dbg(&sfb->pdev->dev,
-+ "sfb->width=%d sfb->height=%d "
-+ "sfb->fb.var.bits_per_pixel=%d sfb->hz=%d\n",
-+ sfb->width, sfb->height, sfb->fb.var.bits_per_pixel, sfb->hz);
-+
-+ for (j = 0; j < numVGAModes; j++) {
-+ if (VGAMode[j].mmSizeX == sfb->width &&
-+ VGAMode[j].mmSizeY == sfb->height &&
-+ VGAMode[j].bpp == sfb->fb.var.bits_per_pixel &&
-+ VGAMode[j].hz == sfb->hz) {
-+
-+ dev_dbg(&sfb->pdev->dev,
-+ "VGAMode[j].mmSizeX=%d VGAMode[j].mmSizeY=%d "
-+ "VGAMode[j].bpp=%d VGAMode[j].hz=%d\n",
-+ VGAMode[j].mmSizeX, VGAMode[j].mmSizeY,
-+ VGAMode[j].bpp, VGAMode[j].hz);
-+
-+ dev_dbg(&sfb->pdev->dev, "VGAMode index=%d\n", j);
-+
-+ smtc_mmiowb(0x0, 0x3c6);
-+
-+ smtc_seqw(0, 0x1);
-+
-+ smtc_mmiowb(VGAMode[j].Init_MISC, 0x3c2);
-+
-+ /* init SEQ register SR00 - SR04 */
-+ for (i = 0; i < SIZE_SR00_SR04; i++)
-+ smtc_seqw(i, VGAMode[j].Init_SR00_SR04[i]);
-+
-+ /* init SEQ register SR10 - SR24 */
-+ for (i = 0; i < SIZE_SR10_SR24; i++)
-+ smtc_seqw(i + 0x10,
-+ VGAMode[j].Init_SR10_SR24[i]);
-+
-+ /* init SEQ register SR30 - SR75 */
-+ for (i = 0; i < SIZE_SR30_SR75; i++)
-+ if ((i + 0x30) != 0x62 &&
-+ (i + 0x30) != 0x6a &&
-+ (i + 0x30) != 0x6b)
-+ smtc_seqw(i + 0x30,
-+ VGAMode[j].Init_SR30_SR75[i]);
-+
-+ /* init SEQ register SR80 - SR93 */
-+ for (i = 0; i < SIZE_SR80_SR93; i++)
-+ smtc_seqw(i + 0x80,
-+ VGAMode[j].Init_SR80_SR93[i]);
-+
-+ /* init SEQ register SRA0 - SRAF */
-+ for (i = 0; i < SIZE_SRA0_SRAF; i++)
-+ smtc_seqw(i + 0xa0,
-+ VGAMode[j].Init_SRA0_SRAF[i]);
-+
-+ /* init Graphic register GR00 - GR08 */
-+ for (i = 0; i < SIZE_GR00_GR08; i++)
-+ smtc_grphw(i, VGAMode[j].Init_GR00_GR08[i]);
-+
-+ /* init Attribute register AR00 - AR14 */
-+ for (i = 0; i < SIZE_AR00_AR14; i++)
-+ smtc_attrw(i, VGAMode[j].Init_AR00_AR14[i]);
-+
-+ /* init CRTC register CR00 - CR18 */
-+ for (i = 0; i < SIZE_CR00_CR18; i++)
-+ smtc_crtcw(i, VGAMode[j].Init_CR00_CR18[i]);
-+
-+ /* init CRTC register CR30 - CR4D */
-+ for (i = 0; i < SIZE_CR30_CR4D; i++)
-+ smtc_crtcw(i + 0x30,
-+ VGAMode[j].Init_CR30_CR4D[i]);
-+
-+ /* init CRTC register CR90 - CRA7 */
-+ for (i = 0; i < SIZE_CR90_CRA7; i++)
-+ smtc_crtcw(i + 0x90,
-+ VGAMode[j].Init_CR90_CRA7[i]);
-+ }
-+ }
-+ smtc_mmiowb(0x67, 0x3c2);
-+
-+ /* set VPR registers */
-+ writel(0x0, sfb->vp_regs + 0x0C);
-+ writel(0x0, sfb->vp_regs + 0x40);
-+
-+ /* set data width */
-+ m_nScreenStride =
-+ (sfb->width * sfb->fb.var.bits_per_pixel) / 64;
-+ switch (sfb->fb.var.bits_per_pixel) {
-+ case 8:
-+ writel(0x0, sfb->vp_regs + 0x0);
-+ break;
-+ case 16:
-+ writel(0x00020000, sfb->vp_regs + 0x0);
-+ break;
-+ case 24:
-+ writel(0x00040000, sfb->vp_regs + 0x0);
-+ break;
-+ case 32:
-+ writel(0x00030000, sfb->vp_regs + 0x0);
-+ break;
-+ }
-+ writel((u32) (((m_nScreenStride + 2) << 16) | m_nScreenStride),
-+ sfb->vp_regs + 0x10);
-+
-+}
-+
-+static void smtc_set_timing(struct smtcfb_info *sfb)
-+{
-+ switch (sfb->chip_id) {
-+ case 0x710:
-+ case 0x712:
-+ case 0x720:
-+ sm7xx_set_timing(sfb);
-+ break;
-+ }
-+}
-+
-+static void smtcfb_setmode(struct smtcfb_info *sfb)
-+{
-+ switch (sfb->fb.var.bits_per_pixel) {
-+ case 32:
-+ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
-+ sfb->fb.fix.line_length = sfb->fb.var.xres * 4;
-+ sfb->fb.var.red.length = 8;
-+ sfb->fb.var.green.length = 8;
-+ sfb->fb.var.blue.length = 8;
-+ sfb->fb.var.red.offset = 16;
-+ sfb->fb.var.green.offset = 8;
-+ sfb->fb.var.blue.offset = 0;
-+ break;
-+ case 24:
-+ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
-+ sfb->fb.fix.line_length = sfb->fb.var.xres * 3;
-+ sfb->fb.var.red.length = 8;
-+ sfb->fb.var.green.length = 8;
-+ sfb->fb.var.blue.length = 8;
-+ sfb->fb.var.red.offset = 16;
-+ sfb->fb.var.green.offset = 8;
-+ sfb->fb.var.blue.offset = 0;
-+ break;
-+ case 8:
-+ sfb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
-+ sfb->fb.fix.line_length = sfb->fb.var.xres;
-+ sfb->fb.var.red.length = 3;
-+ sfb->fb.var.green.length = 3;
-+ sfb->fb.var.blue.length = 2;
-+ sfb->fb.var.red.offset = 5;
-+ sfb->fb.var.green.offset = 2;
-+ sfb->fb.var.blue.offset = 0;
-+ break;
-+ case 16:
-+ default:
-+ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
-+ sfb->fb.fix.line_length = sfb->fb.var.xres * 2;
-+ sfb->fb.var.red.length = 5;
-+ sfb->fb.var.green.length = 6;
-+ sfb->fb.var.blue.length = 5;
-+ sfb->fb.var.red.offset = 11;
-+ sfb->fb.var.green.offset = 5;
-+ sfb->fb.var.blue.offset = 0;
-+ break;
-+ }
-+
-+ sfb->width = sfb->fb.var.xres;
-+ sfb->height = sfb->fb.var.yres;
-+ sfb->hz = 60;
-+ smtc_set_timing(sfb);
-+}
-+
-+static int smtc_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
-+{
-+ /* sanity checks */
-+ if (var->xres_virtual < var->xres)
-+ var->xres_virtual = var->xres;
-+
-+ if (var->yres_virtual < var->yres)
-+ var->yres_virtual = var->yres;
-+
-+ /* set valid default bpp */
-+ if ((var->bits_per_pixel != 8) && (var->bits_per_pixel != 16) &&
-+ (var->bits_per_pixel != 24) && (var->bits_per_pixel != 32))
-+ var->bits_per_pixel = 16;
-+
-+ return 0;
-+}
-+
-+static int smtc_set_par(struct fb_info *info)
-+{
-+ smtcfb_setmode(info->par);
-+
-+ return 0;
-+}
-+
-+static struct fb_ops smtcfb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_check_var = smtc_check_var,
-+ .fb_set_par = smtc_set_par,
-+ .fb_setcolreg = smtc_setcolreg,
-+ .fb_blank = smtc_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_copyarea = cfb_copyarea,
-+#ifdef __BIG_ENDIAN
-+ .fb_read = smtcfb_read,
-+ .fb_write = smtcfb_write,
-+#endif
-+};
-+
-+/*
-+ * alloc struct smtcfb_info and assign default values
-+ */
-+static struct smtcfb_info *smtc_alloc_fb_info(struct pci_dev *pdev)
-+{
-+ struct smtcfb_info *sfb;
-+
-+ sfb = kzalloc(sizeof(*sfb), GFP_KERNEL);
-+
-+ if (!sfb)
-+ return NULL;
-+
-+ sfb->pdev = pdev;
-+
-+ sfb->fb.flags = FBINFO_FLAG_DEFAULT;
-+ sfb->fb.fbops = &smtcfb_ops;
-+ sfb->fb.fix = smtcfb_fix;
-+ sfb->fb.var = smtcfb_var;
-+ sfb->fb.pseudo_palette = sfb->colreg;
-+ sfb->fb.par = sfb;
-+
-+ return sfb;
-+}
-+
-+/*
-+ * free struct smtcfb_info
-+ */
-+static void smtc_free_fb_info(struct smtcfb_info *sfb)
-+{
-+ kfree(sfb);
-+}
-+
-+/*
-+ * Unmap in the memory mapped IO registers
-+ */
-+
-+static void smtc_unmap_mmio(struct smtcfb_info *sfb)
-+{
-+ if (sfb && smtc_RegBaseAddress)
-+ smtc_RegBaseAddress = NULL;
-+}
-+
-+/*
-+ * Map in the screen memory
-+ */
-+
-+static int smtc_map_smem(struct smtcfb_info *sfb,
-+ struct pci_dev *pdev, u_long smem_len)
-+{
-+
-+ sfb->fb.fix.smem_start = pci_resource_start(pdev, 0);
-+
-+#ifdef __BIG_ENDIAN
-+ if (sfb->fb.var.bits_per_pixel == 32)
-+ sfb->fb.fix.smem_start += 0x800000;
-+#endif
-+
-+ sfb->fb.fix.smem_len = smem_len;
-+
-+ sfb->fb.screen_base = sfb->lfb;
-+
-+ if (!sfb->fb.screen_base) {
-+ dev_err(&pdev->dev,
-+ "%s: unable to map screen memory\n", sfb->fb.fix.id);
-+ return -ENOMEM;
-+ }
-+
-+ return 0;
-+}
-+
-+/*
-+ * Unmap in the screen memory
-+ *
-+ */
-+static void smtc_unmap_smem(struct smtcfb_info *sfb)
-+{
-+ if (sfb && sfb->fb.screen_base) {
-+ iounmap(sfb->fb.screen_base);
-+ sfb->fb.screen_base = NULL;
-+ }
-+}
-+
-+/*
-+ * We need to wake up the device and make sure its in linear memory mode.
-+ */
-+static inline void sm7xx_init_hw(void)
-+{
-+ outb_p(0x18, 0x3c4);
-+ outb_p(0x11, 0x3c5);
-+}
-+
-+static int smtcfb_pci_probe(struct pci_dev *pdev,
-+ const struct pci_device_id *ent)
-+{
-+ struct smtcfb_info *sfb;
-+ u_long smem_size = 0x00800000; /* default 8MB */
-+ int err;
-+ unsigned long mmio_base;
-+
-+ dev_info(&pdev->dev, "Silicon Motion display driver.");
-+
-+ err = pci_enable_device(pdev); /* enable SMTC chip */
-+ if (err)
-+ return err;
-+
-+ sprintf(smtcfb_fix.id, "sm%Xfb", ent->device);
-+
-+ sfb = smtc_alloc_fb_info(pdev);
-+
-+ if (!sfb) {
-+ err = -ENOMEM;
-+ goto failed_free;
-+ }
-+
-+ sfb->chip_id = ent->device;
-+
-+ pci_set_drvdata(pdev, sfb);
-+
-+ sm7xx_init_hw();
-+
-+ /* get mode parameter from smtc_scr_info */
-+ if (smtc_scr_info.lfb_width != 0) {
-+ sfb->fb.var.xres = smtc_scr_info.lfb_width;
-+ sfb->fb.var.yres = smtc_scr_info.lfb_height;
-+ sfb->fb.var.bits_per_pixel = smtc_scr_info.lfb_depth;
-+ } else {
-+ /* default resolution 1024x600 16bit mode */
-+ sfb->fb.var.xres = SCREEN_X_RES;
-+ sfb->fb.var.yres = SCREEN_Y_RES;
-+ sfb->fb.var.bits_per_pixel = SCREEN_BPP;
-+ }
-+
-+#ifdef __BIG_ENDIAN
-+ if (sfb->fb.var.bits_per_pixel == 24)
-+ sfb->fb.var.bits_per_pixel = (smtc_scr_info.lfb_depth = 32);
-+#endif
-+ /* Map address and memory detection */
-+ mmio_base = pci_resource_start(pdev, 0);
-+ pci_read_config_byte(pdev, PCI_REVISION_ID, &sfb->chip_rev_id);
-+
-+ switch (sfb->chip_id) {
-+ case 0x710:
-+ case 0x712:
-+ sfb->fb.fix.mmio_start = mmio_base + 0x00400000;
-+ sfb->fb.fix.mmio_len = 0x00400000;
-+ smem_size = SM712_VIDEOMEMORYSIZE;
-+#ifdef __BIG_ENDIAN
-+ sfb->lfb = ioremap(mmio_base, 0x00c00000);
-+#else
-+ sfb->lfb = ioremap(mmio_base, 0x00800000);
-+#endif
-+ sfb->mmio = (smtc_RegBaseAddress =
-+ sfb->lfb + 0x00700000);
-+ sfb->dp_regs = sfb->lfb + 0x00408000;
-+ sfb->vp_regs = sfb->lfb + 0x0040c000;
-+#ifdef __BIG_ENDIAN
-+ if (sfb->fb.var.bits_per_pixel == 32) {
-+ sfb->lfb += 0x800000;
-+ dev_info(&pdev->dev, "sfb->lfb=%p", sfb->lfb);
-+ }
-+#endif
-+ if (!smtc_RegBaseAddress) {
-+ dev_err(&pdev->dev,
-+ "%s: unable to map memory mapped IO!",
-+ sfb->fb.fix.id);
-+ err = -ENOMEM;
-+ goto failed_fb;
-+ }
-+
-+ /* set MCLK = 14.31818 * (0x16 / 0x2) */
-+ smtc_seqw(0x6a, 0x16);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x62, 0x3e);
-+ /* enable PCI burst */
-+ smtc_seqw(0x17, 0x20);
-+ /* enable word swap */
-+#ifdef __BIG_ENDIAN
-+ if (sfb->fb.var.bits_per_pixel == 32)
-+ smtc_seqw(0x17, 0x30);
-+#endif
-+ break;
-+ case 0x720:
-+ sfb->fb.fix.mmio_start = mmio_base;
-+ sfb->fb.fix.mmio_len = 0x00200000;
-+ smem_size = SM722_VIDEOMEMORYSIZE;
-+ sfb->dp_regs = ioremap(mmio_base, 0x00a00000);
-+ sfb->lfb = sfb->dp_regs + 0x00200000;
-+ sfb->mmio = (smtc_RegBaseAddress =
-+ sfb->dp_regs + 0x000c0000);
-+ sfb->vp_regs = sfb->dp_regs + 0x800;
-+
-+ smtc_seqw(0x62, 0xff);
-+ smtc_seqw(0x6a, 0x0d);
-+ smtc_seqw(0x6b, 0x02);
-+ break;
-+ default:
-+ dev_err(&pdev->dev,
-+ "No valid Silicon Motion display chip was detected!");
-+
-+ goto failed_fb;
-+ }
-+
-+ /* can support 32 bpp */
-+ if (15 == sfb->fb.var.bits_per_pixel)
-+ sfb->fb.var.bits_per_pixel = 16;
-+
-+ sfb->fb.var.xres_virtual = sfb->fb.var.xres;
-+ sfb->fb.var.yres_virtual = sfb->fb.var.yres;
-+ err = smtc_map_smem(sfb, pdev, smem_size);
-+ if (err)
-+ goto failed;
-+
-+ smtcfb_setmode(sfb);
-+
-+ err = register_framebuffer(&sfb->fb);
-+ if (err < 0)
-+ goto failed;
-+
-+ dev_info(&pdev->dev,
-+ "Silicon Motion SM%X Rev%X primary display mode %dx%d-%d Init Complete.",
-+ sfb->chip_id, sfb->chip_rev_id, sfb->fb.var.xres,
-+ sfb->fb.var.yres, sfb->fb.var.bits_per_pixel);
-+
-+ return 0;
-+
-+failed:
-+ dev_err(&pdev->dev, "Silicon Motion, Inc. primary display init fail.");
-+
-+ smtc_unmap_smem(sfb);
-+ smtc_unmap_mmio(sfb);
-+failed_fb:
-+ smtc_free_fb_info(sfb);
-+
-+failed_free:
-+ pci_disable_device(pdev);
-+
-+ return err;
-+}
-+
-+/*
-+ * 0x710 (LynxEM)
-+ * 0x712 (LynxEM+)
-+ * 0x720 (Lynx3DM, Lynx3DM+)
-+ */
-+static const struct pci_device_id smtcfb_pci_table[] = {
-+ { PCI_DEVICE(0x126f, 0x710), },
-+ { PCI_DEVICE(0x126f, 0x712), },
-+ { PCI_DEVICE(0x126f, 0x720), },
-+ {0,}
-+};
-+
-+static void smtcfb_pci_remove(struct pci_dev *pdev)
-+{
-+ struct smtcfb_info *sfb;
-+
-+ sfb = pci_get_drvdata(pdev);
-+ smtc_unmap_smem(sfb);
-+ smtc_unmap_mmio(sfb);
-+ unregister_framebuffer(&sfb->fb);
-+ smtc_free_fb_info(sfb);
-+}
-+
-+#ifdef CONFIG_PM
-+static int smtcfb_pci_suspend(struct device *device)
-+{
-+ struct pci_dev *pdev = to_pci_dev(device);
-+ struct smtcfb_info *sfb;
-+
-+ sfb = pci_get_drvdata(pdev);
-+
-+ /* set the hw in sleep mode use external clock and self memory refresh
-+ * so that we can turn off internal PLLs later on
-+ */
-+ smtc_seqw(0x20, (smtc_seqr(0x20) | 0xc0));
-+ smtc_seqw(0x69, (smtc_seqr(0x69) & 0xf7));
-+
-+ console_lock();
-+ fb_set_suspend(&sfb->fb, 1);
-+ console_unlock();
-+
-+ /* additionally turn off all function blocks including internal PLLs */
-+ smtc_seqw(0x21, 0xff);
-+
-+ return 0;
-+}
-+
-+static int smtcfb_pci_resume(struct device *device)
-+{
-+ struct pci_dev *pdev = to_pci_dev(device);
-+ struct smtcfb_info *sfb;
-+
-+ sfb = pci_get_drvdata(pdev);
-+
-+ /* reinit hardware */
-+ sm7xx_init_hw();
-+ switch (sfb->chip_id) {
-+ case 0x710:
-+ case 0x712:
-+ /* set MCLK = 14.31818 * (0x16 / 0x2) */
-+ smtc_seqw(0x6a, 0x16);
-+ smtc_seqw(0x6b, 0x02);
-+ smtc_seqw(0x62, 0x3e);
-+ /* enable PCI burst */
-+ smtc_seqw(0x17, 0x20);
-+#ifdef __BIG_ENDIAN
-+ if (sfb->fb.var.bits_per_pixel == 32)
-+ smtc_seqw(0x17, 0x30);
-+#endif
-+ break;
-+ case 0x720:
-+ smtc_seqw(0x62, 0xff);
-+ smtc_seqw(0x6a, 0x0d);
-+ smtc_seqw(0x6b, 0x02);
-+ break;
-+ }
-+
-+ smtc_seqw(0x34, (smtc_seqr(0x34) | 0xc0));
-+ smtc_seqw(0x33, ((smtc_seqr(0x33) | 0x08) & 0xfb));
-+
-+ smtcfb_setmode(sfb);
-+
-+ console_lock();
-+ fb_set_suspend(&sfb->fb, 0);
-+ console_unlock();
-+
-+ return 0;
-+}
-+
-+static SIMPLE_DEV_PM_OPS(sm7xx_pm_ops, smtcfb_pci_suspend, smtcfb_pci_resume);
-+#define SM7XX_PM_OPS (&sm7xx_pm_ops)
-+
-+#else /* !CONFIG_PM */
-+
-+#define SM7XX_PM_OPS NULL
-+
-+#endif /* !CONFIG_PM */
-+
-+static struct pci_driver smtcfb_driver = {
-+ .name = "smtcfb",
-+ .id_table = smtcfb_pci_table,
-+ .probe = smtcfb_pci_probe,
-+ .remove = smtcfb_pci_remove,
-+ .driver.pm = SM7XX_PM_OPS,
-+};
-+
-+module_pci_driver(smtcfb_driver);
-+
-+MODULE_AUTHOR("Siliconmotion ");
-+MODULE_DESCRIPTION("Framebuffer driver for SMI Graphic Cards");
-+MODULE_LICENSE("GPL");
-diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
-index f98d03f..09cf729 100644
---- a/drivers/usb/host/ohci-hcd.c
-+++ b/drivers/usb/host/ohci-hcd.c
-@@ -864,9 +864,13 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
- }
-
- if (ints & OHCI_INTR_WDH) {
-- spin_lock (&ohci->lock);
-- dl_done_list (ohci);
-- spin_unlock (&ohci->lock);
-+ if (ohci->hcca->done_head == 0) {
-+ ints &= ~OHCI_INTR_WDH;
-+ } else {
-+ spin_lock (&ohci->lock);
-+ dl_done_list (ohci);
-+ spin_unlock (&ohci->lock);
-+ }
- }
-
- if (quirk_zfmicro(ohci) && (ints & OHCI_INTR_SF)) {
-diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
-index 2f3aceb..6647c3f 100644
---- a/drivers/usb/host/pci-quirks.c
-+++ b/drivers/usb/host/pci-quirks.c
-@@ -454,6 +454,7 @@ void usb_amd_dev_put(void)
- }
- EXPORT_SYMBOL_GPL(usb_amd_dev_put);
-
-+#if defined(CONFIG_USB_UHCI_HCD) || defined(CONFIG_USB_UHCI_HCD_MODULE)
- /*
- * Make sure the controller is completely inactive, unable to
- * generate interrupts or do DMA.
-@@ -561,12 +562,16 @@ static void quirk_usb_handoff_uhci(struct pci_dev *pdev)
- if (base)
- uhci_check_and_reset_hc(pdev, base);
- }
-+#else
-+#define quirk_usb_handoff_uhci(x) do { } while (0)
-+#endif /* CONFIG_USB_UHCI_HCD* */
-
- static int mmio_resource_enabled(struct pci_dev *pdev, int idx)
- {
- return pci_resource_start(pdev, idx) && mmio_enabled(pdev);
- }
-
-+#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
- static void quirk_usb_handoff_ohci(struct pci_dev *pdev)
- {
- void __iomem *base;
-@@ -633,7 +638,11 @@ static void quirk_usb_handoff_ohci(struct pci_dev *pdev)
- /* Now the controller is safely in SUSPEND and nothing can wake it up */
- iounmap(base);
- }
-+#else
-+#define quirk_usb_handoff_ohci(x) do { } while(0)
-+#endif /* CONFIG_USB_OHCI_HCD* */
-
-+#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE)
- static const struct dmi_system_id ehci_dmi_nohandoff_table[] = {
- {
- /* Pegatron Lucid (ExoPC) */
-@@ -806,6 +815,9 @@ static void quirk_usb_disable_ehci(struct pci_dev *pdev)
-
- iounmap(base);
- }
-+#else
-+#define quirk_usb_disable_ehci(x) do { } while (0)
-+#endif /* CONFIG_USB_EHCI_HCD* */
-
- /*
- * handshake - spin reading a register until handshake completes
-@@ -945,6 +957,7 @@ void usb_disable_xhci_ports(struct pci_dev *xhci_pdev)
- }
- EXPORT_SYMBOL_GPL(usb_disable_xhci_ports);
-
-+#if defined(CONFIG_USB_XHCI_HCD) || defined(CONFIG_USB_XHCI_HCD_MODULE)
- /**
- * PCI Quirks for xHCI.
- *
-@@ -1052,6 +1065,9 @@ hc_init:
-
- iounmap(base);
- }
-+#else
-+#define quirk_usb_handoff_xhci(x) do { } while (0)
-+#endif /* CONFIG_USB_UHCI_HCD* */
-
- static void quirk_usb_early_handoff(struct pci_dev *pdev)
- {
-diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
-index a968894..0bfa2cb 100644
---- a/drivers/usb/serial/option.c
-+++ b/drivers/usb/serial/option.c
-@@ -79,6 +79,9 @@ static void option_instat_callback(struct urb *urb);
- #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100
- #define OPTION_PRODUCT_GTM380_MODEM 0x7201
-
-+#define HUAWO_VENDOR_ID 0x21F5
-+#define HUAWO_PRODUCT_E1621 0x2008
-+
- #define HUAWEI_VENDOR_ID 0x12D1
- #define HUAWEI_PRODUCT_E173 0x140C
- #define HUAWEI_PRODUCT_E1750 0x1406
-@@ -610,6 +613,7 @@ static const struct usb_device_id option_ids[] = {
- { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) },
- { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42),
- .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
-+ { USB_DEVICE(HUAWO_VENDOR_ID, HUAWO_PRODUCT_E1621) }, /* QUANTA 6500 chips, Unicom extensive use of this card */
- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) },
- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c1f, USB_CLASS_COMM, 0x02, 0xff) },
- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) },
-diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
-index 8bf495f..f6a15b6 100644
---- a/drivers/video/Kconfig
-+++ b/drivers/video/Kconfig
-@@ -36,6 +36,12 @@ config VGASTATE
- tristate
- default n
-
-+config VIDEO_OUTPUT_CONTROL
-+ tristate "Lowlevel video output switch controls"
-+ help
-+ This framework adds support for low-level control of the video
-+ output switch.
-+
- config VIDEOMODE_HELPERS
- bool
-
-diff --git a/drivers/video/Makefile b/drivers/video/Makefile
-index 9ad3c17..3d869d9 100644
---- a/drivers/video/Makefile
-+++ b/drivers/video/Makefile
-@@ -7,6 +7,8 @@ obj-y += backlight/
-
- obj-y += fbdev/
-
-+#video output switch sysfs driver
-+obj-$(CONFIG_VIDEO_OUTPUT_CONTROL) += output.o
- obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o
- ifeq ($(CONFIG_OF),y)
- obj-$(CONFIG_VIDEOMODE_HELPERS) += of_display_timing.o of_videomode.o
diff --git a/drivers/video/output.c b/drivers/video/output.c
new file mode 100644
index 0000000..1446c49
@@ -11524,7 +12034,7 @@ index 0000000..ed5cdeb
+#endif
+#endif
diff --git a/init/calibrate.c b/init/calibrate.c
-index 520702d..e78762a 100644
+index ce635dc..10e775d 100644
--- a/init/calibrate.c
+++ b/init/calibrate.c
@@ -21,6 +21,7 @@ static int __init lpj_setup(char *str)
@@ -11543,7 +12053,7 @@ index 520702d..e78762a 100644
/*
* This is the number of bits of precision for the loops_per_jiffy. Each
-@@ -282,6 +284,7 @@ void calibrate_delay(void)
+@@ -291,6 +293,7 @@ void calibrate_delay(void)
lpj = lpj_fine;
pr_info("Calibrating delay loop (skipped), "
"value calculated using timer frequency.. ");
@@ -11551,7 +12061,7 @@ index 520702d..e78762a 100644
} else if ((lpj = calibrate_delay_is_known())) {
;
} else if ((lpj = calibrate_delay_direct()) != 0) {
-@@ -292,6 +295,7 @@ void calibrate_delay(void)
+@@ -301,6 +304,7 @@ void calibrate_delay(void)
if (!printed)
pr_info("Calibrating delay loop... ");
lpj = calibrate_delay_converge();
diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD
index 07a49b242..40cdd69d3 100644
--- a/libre/linux-libre/PKGBUILD
+++ b/libre/linux-libre/PKGBUILD
@@ -8,8 +8,8 @@
# Contributor: Luke Shumaker <lukeshu@sbcglobal.net>
pkgbase=linux-libre # Build stock "" kernel
-_pkgbasever=3.16-gnu
-_pkgver=3.16.4-gnu
+_pkgbasever=3.17-gnu
+_pkgver=3.17.1-gnu
_replacesarchkernel=('linux%') # '%' gets replaced with _kernelname
_replacesoldkernels=('kernel26%' 'kernel26-libre%') # '%' gets replaced with _kernelname
@@ -32,21 +32,19 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_pkgbasever}/li
'linux.preset'
'logo_linux_'{clut224.ppm,vga16.ppm,mono.pbm}
'change-default-console-loglevel.patch'
- 'compal-laptop-hwmon-fix.patch'
# loongson-community patch: http://linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/debuginfo/
- '3.16-7981337ad0-loongson-community.patch')
-sha256sums=('9c2a524c901febe0f0138f702bfdeb52d6f79f22c1fdbabaa37580bc70f16218'
- '04424ffce8e1584cf684da2907760c7db52d93c4bb057f9ff9ced327e9e9faa3'
- '4c637ad28bbe6489062629bf00f30f6feea1af272ff7fdcb4171ec37d8cf6f35'
- 'cf59016d9110d214d3889d03cfe54b97f5f1890a940dc5548272b1485e06d795'
- '422be6aca94945293b7b9f1466360b0eadae688237aebb4a829d7093d9b3d9a3'
+ '3.17-rc6-5358c5e4e5-loongson-community.patch')
+sha256sums=('3b2e9a862ada390a318f95d5a436d07dd32664434f4f383e27fd5cc0b4f41f0e'
+ '1df6d36bc384d5766083cec9dc95c0d1f20888a95e5c2663bc95028d55d5f246'
+ '13e28b630302c19be2b767984c5434382e9c8ed356adfbce4a3d9204a7c390cc'
+ '366cf156274e94ae5b6c78107a12e89c396c3c0875593ae90d9f29504d25cb0d'
+ '078d37de38250d23df6e008b380bba625fdb21365bfa7ba805b9105b101543b4'
'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c'
'074b67818582874146c389c029bc43648d145891a27e47aa2c5c42d3571f0264'
'2e87a8ec1cc0c91938cac24992d8a3d4362b3e9d939767e4c9d2ec8e6d969d53'
'f67f60a30bcf2e9a2ba88ad97cace308da7a7f94919bb95c3dc030f5885a8015'
'1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99'
- 'f36f61a0a72bcb0a9c04264343503bfbf927c9ea0db819e66734a3933b060588'
- 'fc78b69f6c0709f5170bfd609e8dc6c96291ea920ddbd4b5166448477b1f6619')
+ 'be4d355129b1027d73ef52f745beeffe1157879412794f605ab41fe66db7cc6c')
_kernelname=${pkgbase#linux-libre}
_replacesarchkernel=("${_replacesarchkernel[@]/\%/${_kernelname}}")
@@ -78,9 +76,6 @@ prepare() {
# (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227)
patch -p1 -i "${srcdir}/change-default-console-loglevel.patch"
- # #41458 fix hwmon for compal-laptop module
- patch -p1 -i "${srcdir}/compal-laptop-hwmon-fix.patch"
-
# Adding loongson-community patch
if [ "${CARCH}" == "mips64el" ]; then
patch -p1 -i ${srcdir}/3.16-7981337ad0-loongson-community.patch
@@ -269,7 +264,8 @@ _package-headers() {
# add xfs and shmem for aufs building
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/fs/xfs"
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/mm"
- cp fs/xfs/xfs_sb.h "${pkgdir}/usr/lib/modules/${_kernver}/build/fs/xfs/xfs_sb.h"
+ # removed in 3.17-gnu series
+ # cp fs/xfs/xfs_sb.h "${pkgdir}/usr/lib/modules/${_kernver}/build/fs/xfs/xfs_sb.h"
# copy in Kconfig files
for i in $(find . -name "Kconfig*"); do
diff --git a/libre/linux-libre/compal-laptop-hwmon-fix.patch b/libre/linux-libre/compal-laptop-hwmon-fix.patch
deleted file mode 100644
index f8723576c..000000000
--- a/libre/linux-libre/compal-laptop-hwmon-fix.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/drivers/platform/x86/compal-laptop.c b/drivers/platform/x86/compal-laptop.c
-index 7297df2..26bfd7b 100644
---- a/drivers/platform/x86/compal-laptop.c
-+++ b/drivers/platform/x86/compal-laptop.c
-@@ -1028,7 +1028,7 @@ static int compal_probe(struct platform_device *pdev)
- return err;
-
- hwmon_dev = hwmon_device_register_with_groups(&pdev->dev,
-- DRIVER_NAME, data,
-+ "compal", data,
- compal_hwmon_groups);
- if (IS_ERR(hwmon_dev)) {
- err = PTR_ERR(hwmon_dev);
-
diff --git a/libre/linux-libre/config.i686 b/libre/linux-libre/config.i686
index 3f8a681b4..cf7b00f7d 100644
--- a/libre/linux-libre/config.i686
+++ b/libre/linux-libre/config.i686
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.16.3-gnu-1 Kernel Configuration
+# Linux/x86 3.17.0-gnu-1 Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
@@ -88,8 +88,8 @@ CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_ARCH_CLOCKSOURCE_DATA=y
+CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
CONFIG_GENERIC_TIME_VSYSCALL=y
-CONFIG_KTIME_SCALAR=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
@@ -131,9 +131,11 @@ CONFIG_RCU_FAST_NO_HZ=y
# CONFIG_TREE_RCU_TRACE is not set
# CONFIG_RCU_BOOST is not set
# CONFIG_RCU_NOCB_CPU is not set
+CONFIG_BUILD_BIN2C=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=19
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_ARCH_WANTS_PROT_NUMA_PROT_NONE=y
CONFIG_CGROUPS=y
@@ -214,7 +216,7 @@ CONFIG_SLUB_DEBUG=y
# CONFIG_SLAB is not set
CONFIG_SLUB=y
CONFIG_SLUB_CPU_PARTIAL=y
-# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
+CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_PROFILING=y
CONFIG_TRACEPOINTS=y
CONFIG_OPROFILE=m
@@ -474,8 +476,9 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
CONFIG_CLEANCACHE=y
CONFIG_FRONTSWAP=y
# CONFIG_CMA is not set
-CONFIG_ZBUD=y
CONFIG_ZSWAP=y
+CONFIG_ZPOOL=y
+CONFIG_ZBUD=y
CONFIG_ZSMALLOC=y
# CONFIG_PGTABLE_MAPPING is not set
CONFIG_GENERIC_EARLY_IOREMAP=y
@@ -542,6 +545,8 @@ CONFIG_PM_TRACE_RTC=y
CONFIG_PM_CLK=y
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
CONFIG_ACPI=y
+CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y
+CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
CONFIG_ACPI_SLEEP=y
# CONFIG_ACPI_PROCFS_POWER is not set
CONFIG_ACPI_EC_DEBUGFS=m
@@ -567,6 +572,8 @@ CONFIG_ACPI_HED=y
CONFIG_ACPI_CUSTOM_METHOD=m
CONFIG_ACPI_BGRT=y
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
+CONFIG_HAVE_ACPI_APEI=y
+CONFIG_HAVE_ACPI_APEI_NMI=y
CONFIG_ACPI_APEI=y
CONFIG_ACPI_APEI_GHES=y
CONFIG_ACPI_APEI_PCIEAER=y
@@ -633,7 +640,6 @@ CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
# CPU Idle
#
CONFIG_CPU_IDLE=y
-# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set
@@ -752,6 +758,7 @@ CONFIG_BINFMT_MISC=y
CONFIG_COREDUMP=y
CONFIG_HAVE_ATOMIC_IOMAP=y
CONFIG_IOSF_MBI=m
+CONFIG_PMC_ATOM=y
CONFIG_NET=y
#
@@ -790,6 +797,7 @@ CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=m
+CONFIG_NET_UDP_TUNNEL=m
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
@@ -859,6 +867,7 @@ CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NF_CONNTRACK=m
+CONFIG_NF_LOG_COMMON=m
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
@@ -936,6 +945,7 @@ CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_NAT=m
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
@@ -1061,11 +1071,18 @@ CONFIG_IP_VS_PE_SIP=m
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_CONNTRACK_IPV4=m
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+CONFIG_NF_LOG_ARP=m
+CONFIG_NF_LOG_IPV4=m
CONFIG_NF_TABLES_IPV4=m
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
CONFIG_NFT_CHAIN_NAT_IPV4=m
CONFIG_NFT_REJECT_IPV4=m
CONFIG_NF_TABLES_ARP=m
+CONFIG_NF_NAT_IPV4=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
@@ -1074,15 +1091,10 @@ CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_SYNPROXY=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_NF_NAT_IPV4=m
+CONFIG_IP_NF_NAT=m
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_GRE=m
-CONFIG_NF_NAT_PPTP=m
-CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_TARGET_ECN=m
@@ -1102,6 +1114,8 @@ CONFIG_NF_TABLES_IPV6=m
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
CONFIG_NFT_CHAIN_NAT_IPV6=m
CONFIG_NFT_REJECT_IPV6=m
+CONFIG_NF_LOG_IPV6=m
+CONFIG_NF_NAT_IPV6=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
@@ -1119,11 +1133,13 @@ CONFIG_IP6_NF_TARGET_SYNPROXY=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
-CONFIG_NF_NAT_IPV6=m
+CONFIG_IP6_NF_NAT=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_NF_TABLES_BRIDGE=m
CONFIG_NFT_BRIDGE_META=m
+CONFIG_NFT_BRIDGE_REJECT=m
+CONFIG_NF_LOG_BRIDGE=m
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -1144,7 +1160,6 @@ 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=m
CONFIG_INET_DCCP_DIAG=m
@@ -1205,9 +1220,9 @@ CONFIG_LLC2=m
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
CONFIG_PHONET=m
+CONFIG_6LOWPAN=m
CONFIG_IEEE802154=m
CONFIG_IEEE802154_6LOWPAN=m
-CONFIG_6LOWPAN_IPHC=m
CONFIG_MAC802154=m
CONFIG_NET_SCHED=y
@@ -1385,7 +1400,7 @@ CONFIG_VLSI_FIR=m
CONFIG_VIA_FIR=m
CONFIG_MCS_FIR=m
CONFIG_BT=m
-CONFIG_BT_6LOWPAN=y
+CONFIG_BT_6LOWPAN=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
@@ -1448,7 +1463,7 @@ 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_DEBUGFS=y
# CONFIG_MAC80211_MESSAGE_TRACING is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_WIMAX=m
@@ -1491,6 +1506,8 @@ CONFIG_NFC_MICROREAD_MEI=m
CONFIG_NFC_MRVL=m
CONFIG_NFC_MRVL_USB=m
CONFIG_NFC_ST21NFCA=m
+CONFIG_NFC_ST21NFCB=m
+CONFIG_NFC_ST21NFCB_I2C=m
#
# Device Drivers
@@ -1508,6 +1525,7 @@ CONFIG_FW_LOADER=y
# CONFIG_FIRMWARE_IN_KERNEL is not set
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
+# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
@@ -1515,9 +1533,11 @@ CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_REGMAP=y
CONFIG_REGMAP_I2C=m
+CONFIG_REGMAP_SPI=m
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_DMA_SHARED_BUFFER=y
+# CONFIG_FENCE_TRACE is not set
#
# Bus devices
@@ -1654,7 +1674,6 @@ CONFIG_OF=y
#
# Device Tree and Open Firmware support
#
-# CONFIG_OF_SELFTEST is not set
CONFIG_OF_PROMTREE=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_ADDRESS_PCI=y
@@ -1788,6 +1807,10 @@ CONFIG_INTEL_MEI_TXE=m
CONFIG_VMWARE_VMCI=m
#
+# Intel MIC Bus Driver
+#
+
+#
# Intel MIC Host Driver
#
@@ -1805,7 +1828,6 @@ CONFIG_SCSI_MOD=m
CONFIG_RAID_ATTRS=m
CONFIG_SCSI=m
CONFIG_SCSI_DMA=y
-CONFIG_SCSI_TGT=m
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y
@@ -1820,7 +1842,6 @@ CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=m
CONFIG_CHR_DEV_SCH=m
CONFIG_SCSI_ENCLOSURE=m
-CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
CONFIG_SCSI_SCAN_ASYNC=y
@@ -1830,14 +1851,12 @@ CONFIG_SCSI_SCAN_ASYNC=y
#
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
-# CONFIG_SCSI_FC_TGT_ATTRS is not set
CONFIG_SCSI_ISCSI_ATTRS=m
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=m
-CONFIG_SCSI_SRP_TGT_ATTRS=y
CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=m
CONFIG_ISCSI_BOOT_SYSFS=m
@@ -1951,7 +1970,6 @@ CONFIG_SCSI_NSP32=m
# CONFIG_SCSI_DEBUG is not set
CONFIG_SCSI_PMCRAID=m
CONFIG_SCSI_PM8001=m
-CONFIG_SCSI_SRP=m
CONFIG_SCSI_BFA_FC=m
CONFIG_SCSI_VIRTIO=m
CONFIG_SCSI_CHELSIO_FCOE=m
@@ -2248,6 +2266,7 @@ CONFIG_PCNET32=m
CONFIG_PCMCIA_NMCLAN=m
CONFIG_NI65=m
CONFIG_AMD_XGBE=m
+CONFIG_NET_XGENE=m
CONFIG_NET_VENDOR_ARC=y
CONFIG_ARC_EMAC=m
CONFIG_NET_VENDOR_ATHEROS=y
@@ -2270,7 +2289,6 @@ CONFIG_BNX2X_SRIOV=y
CONFIG_SYSTEMPORT=m
CONFIG_NET_VENDOR_BROCADE=y
CONFIG_BNA=m
-CONFIG_NET_CALXEDA_XGMAC=m
CONFIG_NET_VENDOR_CHELSIO=y
CONFIG_CHELSIO_T1=m
CONFIG_CHELSIO_T1_1G=y
@@ -2391,7 +2409,6 @@ CONFIG_8139TOO_TUNE_TWISTER=y
CONFIG_8139TOO_8129=y
# CONFIG_8139_OLD_RX_RESET is not set
CONFIG_R8169=m
-CONFIG_SH_ETH=m
CONFIG_NET_VENDOR_RDC=y
CONFIG_R6040=m
CONFIG_NET_VENDOR_SAMSUNG=y
@@ -2493,8 +2510,9 @@ CONFIG_SLHC=m
# CONFIG_SLIP_MODE_SLIP6 is not set
#
-# USB Network Adapters
+# Host-side USB support is needed for USB Network Adapter support
#
+CONFIG_USB_NET_DRIVERS=m
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
@@ -2569,13 +2587,15 @@ CONFIG_ATH9K_BTCOEX_SUPPORT=y
CONFIG_ATH9K=m
CONFIG_ATH9K_PCI=y
CONFIG_ATH9K_AHB=y
-# CONFIG_ATH9K_DEBUGFS is not set
+CONFIG_ATH9K_DEBUGFS=y
+CONFIG_ATH9K_STATION_STATISTICS=y
CONFIG_ATH9K_WOW=y
CONFIG_ATH9K_RFKILL=y
CONFIG_ATH9K_HTC=m
# CONFIG_ATH9K_HTC_DEBUGFS is not set
CONFIG_CARL9170=m
CONFIG_CARL9170_LEDS=y
+# CONFIG_CARL9170_DEBUGFS is not set
CONFIG_CARL9170_WPC=y
# CONFIG_CARL9170_HWRNG is not set
CONFIG_ATH6KL=m
@@ -2606,6 +2626,7 @@ CONFIG_B43_PCMCIA=y
CONFIG_B43_SDIO=y
CONFIG_B43_BCMA_PIO=y
CONFIG_B43_PIO=y
+CONFIG_B43_PHY_G=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_HT=y
@@ -2626,8 +2647,11 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
CONFIG_BRCMUTIL=m
CONFIG_BRCMSMAC=m
CONFIG_BRCMFMAC=m
+CONFIG_BRCMFMAC_PROTO_BCDC=y
+CONFIG_BRCMFMAC_PROTO_MSGBUF=y
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_USB=y
+CONFIG_BRCMFMAC_PCIE=y
# CONFIG_BRCM_TRACING is not set
# CONFIG_BRCMDBG is not set
CONFIG_HOSTAP=m
@@ -2649,6 +2673,7 @@ CONFIG_IWLWIFI_OPMODE_MODULAR=y
# Debugging Options
#
# CONFIG_IWLWIFI_DEBUG is not set
+# CONFIG_IWLWIFI_DEBUGFS is not set
CONFIG_IWLWIFI_DEVICE_TRACING=y
CONFIG_IWLEGACY=m
CONFIG_IWL4965=m
@@ -2658,6 +2683,7 @@ CONFIG_IWL3945=m
# iwl3945 / iwl4965 Debugging Options
#
# CONFIG_IWLEGACY_DEBUG is not set
+# CONFIG_IWLEGACY_DEBUGFS is not set
CONFIG_LIBERTAS=m
CONFIG_LIBERTAS_USB=m
CONFIG_LIBERTAS_CS=m
@@ -2708,6 +2734,7 @@ CONFIG_RT2X00_LIB=m
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_RT2X00_LIB_CRYPTO=y
CONFIG_RT2X00_LIB_LEDS=y
+# CONFIG_RT2X00_LIB_DEBUGFS is not set
# CONFIG_RT2X00_DEBUG is not set
CONFIG_RTL_CARDS=m
CONFIG_RTL8192CE=m
@@ -2760,6 +2787,7 @@ CONFIG_IEEE802154_FAKEHARD=m
CONFIG_IEEE802154_FAKELB=m
CONFIG_IEEE802154_AT86RF230=m
# CONFIG_IEEE802154_MRF24J40 is not set
+# CONFIG_IEEE802154_CC2520 is not set
CONFIG_VMXNET3=m
CONFIG_HYPERV_NET=m
CONFIG_ISDN=y
@@ -2957,6 +2985,7 @@ CONFIG_KEYBOARD_MPR121=m
# CONFIG_KEYBOARD_OMAP4 is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_CROS_EC is not set
+# CONFIG_KEYBOARD_CAP1106 is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=m
CONFIG_MOUSE_PS2_ALPS=y
@@ -3018,7 +3047,7 @@ 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_TABLET_SERIAL_WACOM4=m
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_OF_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ADS7846 is not set
@@ -3277,6 +3306,10 @@ CONFIG_TCG_INFINEON=m
CONFIG_TCG_ST33_I2C=m
CONFIG_TELCLOCK=m
CONFIG_DEVPORT=y
+
+#
+# I2C support
+#
CONFIG_I2C=m
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
@@ -3428,15 +3461,9 @@ CONFIG_PINCTRL=y
#
# Pin controllers
#
-CONFIG_PINMUX=y
-CONFIG_PINCONF=y
-CONFIG_GENERIC_PINCONF=y
# CONFIG_DEBUG_PINCTRL is not set
# CONFIG_PINCTRL_BAYTRAIL is not set
# CONFIG_PINCTRL_BCM281XX is not set
-CONFIG_PINCTRL_MSM=y
-CONFIG_PINCTRL_APQ8064=m
-# CONFIG_PINCTRL_IPQ8064 is not set
# CONFIG_PINCTRL_SINGLE is not set
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
CONFIG_GPIOLIB=y
@@ -3589,6 +3616,7 @@ CONFIG_SENSORS_IBMPEX=m
CONFIG_SENSORS_CORETEMP=m
CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
+CONFIG_SENSORS_POWR1220=m
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LTC2945=m
CONFIG_SENSORS_LTC4151=m
@@ -3639,9 +3667,11 @@ CONFIG_SENSORS_LTC2978=m
CONFIG_SENSORS_MAX16064=m
CONFIG_SENSORS_MAX34440=m
CONFIG_SENSORS_MAX8688=m
+CONFIG_SENSORS_TPS40422=m
CONFIG_SENSORS_UCD9000=m
CONFIG_SENSORS_UCD9200=m
CONFIG_SENSORS_ZL6100=m
+CONFIG_SENSORS_PWM_FAN=m
CONFIG_SENSORS_SHT15=m
CONFIG_SENSORS_SHT21=m
CONFIG_SENSORS_SHTC1=m
@@ -3666,6 +3696,7 @@ CONFIG_SENSORS_INA209=m
CONFIG_SENSORS_INA2XX=m
CONFIG_SENSORS_THMC50=m
CONFIG_SENSORS_TMP102=m
+CONFIG_SENSORS_TMP103=m
CONFIG_SENSORS_TMP401=m
CONFIG_SENSORS_TMP421=m
CONFIG_SENSORS_VIA_CPUTEMP=m
@@ -3870,6 +3901,7 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
+CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_RC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_DEV=m
@@ -3908,10 +3940,10 @@ 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_SHARP_DECODER=m
CONFIG_IR_MCE_KBD_DECODER=m
+CONFIG_IR_XMP_DECODER=m
CONFIG_RC_DEVICES=y
CONFIG_RC_ATI_REMOTE=m
CONFIG_IR_ENE=m
@@ -4013,12 +4045,17 @@ CONFIG_VIDEO_USBVISION=m
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_GO7007=m
+CONFIG_VIDEO_GO7007_USB=m
+CONFIG_VIDEO_GO7007_LOADER=m
+# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=m
CONFIG_VIDEO_AU0828_V4L2=y
+CONFIG_VIDEO_AU0828_RC=y
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_CX231XX_ALSA=m
@@ -4083,6 +4120,12 @@ CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_EM28XX_ALSA=m
CONFIG_VIDEO_EM28XX_DVB=m
CONFIG_VIDEO_EM28XX_RC=m
+
+#
+# Software defined radio USB devices
+#
+CONFIG_USB_MSI2500=m
+CONFIG_USB_AIRSPY=m
CONFIG_MEDIA_PCI_SUPPORT=y
#
@@ -4107,6 +4150,7 @@ CONFIG_VIDEO_ZORAN_AVS6EYES=m
CONFIG_VIDEO_HEXIUM_GEMINI=m
CONFIG_VIDEO_HEXIUM_ORION=m
CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_SOLO6X10=m
#
# Media capture/analog/hybrid TV support
@@ -4314,6 +4358,7 @@ CONFIG_MEDIA_TUNER_TDA18271=m
CONFIG_MEDIA_TUNER_TDA9887=m
CONFIG_MEDIA_TUNER_TEA5761=m
CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MSI001=m
CONFIG_MEDIA_TUNER_MT20XX=m
CONFIG_MEDIA_TUNER_MT2060=m
CONFIG_MEDIA_TUNER_MT2063=m
@@ -4354,6 +4399,7 @@ CONFIG_DVB_M88DS3103=m
#
CONFIG_DVB_DRXK=m
CONFIG_DVB_TDA18271C2DD=m
+CONFIG_DVB_SI2165=m
#
# DVB-S (satellite) frontends
@@ -4409,6 +4455,7 @@ CONFIG_DVB_STV0367=m
CONFIG_DVB_CXD2820R=m
CONFIG_DVB_RTL2830=m
CONFIG_DVB_RTL2832=m
+CONFIG_DVB_RTL2832_SDR=m
CONFIG_DVB_SI2168=m
#
@@ -4907,6 +4954,7 @@ CONFIG_HID_ELO=m
CONFIG_HID_EZKEY=m
CONFIG_HID_HOLTEK=m
CONFIG_HOLTEK_FF=y
+CONFIG_HID_GT683R=m
CONFIG_HID_HUION=m
CONFIG_HID_KEYTOUCH=m
CONFIG_HID_KYE=m
@@ -4917,7 +4965,7 @@ CONFIG_HID_ICADE=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_KENSINGTON=m
CONFIG_HID_LCPOWER=m
-CONFIG_HID_LENOVO_TPKBD=m
+CONFIG_HID_LENOVO=m
CONFIG_HID_LOGITECH=m
CONFIG_HID_LOGITECH_DJ=m
CONFIG_LOGITECH_FF=y
@@ -5070,6 +5118,10 @@ CONFIG_USB_UAS=m
#
CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
+CONFIG_USBIP_CORE=m
+CONFIG_USBIP_VHCI_HCD=m
+CONFIG_USBIP_HOST=m
+# CONFIG_USBIP_DEBUG is not set
CONFIG_USB_MUSB_HDRC=m
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_GADGET is not set
@@ -5171,6 +5223,7 @@ CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=m
CONFIG_USB_EZUSB_FX2=m
CONFIG_USB_HSIC_USB3503=m
+CONFIG_USB_LINK_LAYER_TEST=m
CONFIG_USB_ATM=m
CONFIG_USB_SPEEDTOUCH=m
CONFIG_USB_CXACRU=m
@@ -5405,6 +5458,7 @@ CONFIG_EDAC_I82875P=m
CONFIG_EDAC_I82975X=m
CONFIG_EDAC_I3000=m
CONFIG_EDAC_I3200=m
+CONFIG_EDAC_IE31200=m
CONFIG_EDAC_X38=m
CONFIG_EDAC_I5400=m
CONFIG_EDAC_I7CORE=m
@@ -5446,6 +5500,7 @@ CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF8523=m
CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_M41T80=m
CONFIG_RTC_DRV_M41T80_WDT=y
@@ -5482,6 +5537,8 @@ CONFIG_RTC_DRV_DS1286=m
CONFIG_RTC_DRV_DS1511=m
CONFIG_RTC_DRV_DS1553=m
CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_DS2404=m
+CONFIG_RTC_DRV_EFI=m
CONFIG_RTC_DRV_STK17TA8=m
CONFIG_RTC_DRV_M48T86=m
CONFIG_RTC_DRV_M48T35=m
@@ -5490,7 +5547,6 @@ CONFIG_RTC_DRV_MSM6242=m
CONFIG_RTC_DRV_BQ4802=m
CONFIG_RTC_DRV_RP5C01=m
CONFIG_RTC_DRV_V3020=m
-CONFIG_RTC_DRV_DS2404=m
CONFIG_RTC_DRV_PCF50633=m
#
@@ -5498,7 +5554,6 @@ CONFIG_RTC_DRV_PCF50633=m
#
CONFIG_RTC_DRV_MC13XXX=m
CONFIG_RTC_DRV_SNVS=m
-# CONFIG_RTC_DRV_MOXART is not set
# CONFIG_RTC_DRV_XGENE is not set
#
@@ -5569,11 +5624,6 @@ CONFIG_HYPERV_BALLOON=m
CONFIG_STAGING=y
CONFIG_ET131X=m
CONFIG_SLICOSS=m
-CONFIG_USBIP_CORE=m
-CONFIG_USBIP_VHCI_HCD=m
-CONFIG_USBIP_HOST=m
-# CONFIG_USBIP_DEBUG is not set
-CONFIG_W35UND=m
CONFIG_PRISM2_USB=m
CONFIG_COMEDI=m
# CONFIG_COMEDI_DEBUG is not set
@@ -5725,7 +5775,6 @@ CONFIG_RTL8192E=m
CONFIG_R8712U=m
CONFIG_R8188EU=m
CONFIG_88EU_AP_MODE=y
-CONFIG_88EU_P2P=y
CONFIG_R8192EE=m
CONFIG_R8723AU=m
CONFIG_8723AU_AP_MODE=y
@@ -5733,14 +5782,10 @@ CONFIG_8723AU_BT_COEXIST=y
CONFIG_R8821AE=m
CONFIG_RTS5208=m
# CONFIG_RTS5208_DEBUG is not set
-# CONFIG_TRANZPORT is not set
-CONFIG_IDE_PHISON=m
CONFIG_LINE6_USB=m
# CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set
-CONFIG_USB_SERIAL_QUATECH2=m
CONFIG_VT6655=m
CONFIG_VT6656=m
-CONFIG_DX_SEP=m
#
# IIO staging drivers
@@ -5761,7 +5806,6 @@ CONFIG_DX_SEP=m
#
# Analog to digital converters
#
-# CONFIG_AD7291 is not set
# CONFIG_AD7606 is not set
# CONFIG_AD7780 is not set
# CONFIG_AD7816 is not set
@@ -5812,7 +5856,9 @@ CONFIG_DX_SEP=m
#
# Magnetometer sensors
#
-# CONFIG_SENSORS_HMC5843 is not set
+CONFIG_SENSORS_HMC5843=m
+CONFIG_SENSORS_HMC5843_I2C=m
+CONFIG_SENSORS_HMC5843_SPI=m
#
# Active energy metering IC
@@ -5835,12 +5881,7 @@ CONFIG_DX_SEP=m
#
# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
# CONFIG_IIO_SIMPLE_DUMMY is not set
-CONFIG_WLAGS49_H2=m
-CONFIG_WLAGS49_H25=m
-CONFIG_CRYSTALHD=m
CONFIG_FB_XGI=m
-CONFIG_ACPI_QUICKSTART=m
-CONFIG_USB_ENESTORAGE=m
CONFIG_BCM_WIMAX=m
CONFIG_FT1000=m
CONFIG_FT1000_USB=m
@@ -5874,17 +5915,8 @@ CONFIG_DVB_CXD2099=m
CONFIG_VIDEO_DT3155=m
CONFIG_DT3155_CCIR=y
CONFIG_DT3155_STREAMING=y
-CONFIG_VIDEO_GO7007=m
-CONFIG_VIDEO_GO7007_USB=m
-CONFIG_VIDEO_GO7007_LOADER=m
-# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
-# CONFIG_USB_MSI3101 is not set
-# CONFIG_MEDIA_TUNER_MSI001 is not set
CONFIG_VIDEO_V4L2_INT_DEVICE=m
CONFIG_VIDEO_TCM825X=m
-CONFIG_USB_SN9C102=m
-CONFIG_SOLO6X10=m
-# CONFIG_DVB_RTL2832_SDR is not set
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_BT829=m
CONFIG_LIRC_IGORPLUGUSB=m
@@ -5909,11 +5941,6 @@ CONFIG_WIMAX_GDM72XX_USB=y
# CONFIG_WIMAX_GDM72XX_SDIO is not set
CONFIG_WIMAX_GDM72XX_USB_PM=y
CONFIG_LTE_GDM724X=m
-CONFIG_NET_VENDOR_SILICOM=y
-CONFIG_SBYPASS=m
-CONFIG_BPCTL=m
-CONFIG_CED1401=m
-CONFIG_DGRP=m
CONFIG_FIREWIRE_SERIAL=m
CONFIG_FWTTY_MAX_TOTAL_PORTS=64
CONFIG_FWTTY_MAX_CARD_PORTS=32
@@ -5971,6 +5998,7 @@ CONFIG_MSI_WMI=m
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_ACPI_TOSHIBA=m
CONFIG_TOSHIBA_BT_RFKILL=m
+CONFIG_TOSHIBA_HAPS=m
CONFIG_ACPI_CMPC=m
CONFIG_INTEL_IPS=m
CONFIG_IBM_RTL=m
@@ -6005,6 +6033,10 @@ CONFIG_COMMON_CLK=y
#
# Hardware Spinlock drivers
#
+
+#
+# Clock Source drivers
+#
CONFIG_CLKSRC_I8253=y
CONFIG_CLKEVT_I8253=y
CONFIG_I8253_LOCK=y
@@ -6037,8 +6069,9 @@ CONFIG_EXTCON=m
#
# Extcon Device Drivers
#
-CONFIG_EXTCON_GPIO=m
# CONFIG_EXTCON_ADC_JACK is not set
+CONFIG_EXTCON_GPIO=m
+CONFIG_EXTCON_SM5502=m
CONFIG_MEMORY=y
CONFIG_IIO=m
CONFIG_IIO_BUFFER=y
@@ -6058,11 +6091,13 @@ CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m
CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
# CONFIG_KXSD9 is not set
# CONFIG_MMA8452 is not set
+CONFIG_KXCJK1013=m
#
# Analog to digital converters
#
# CONFIG_AD7266 is not set
+# CONFIG_AD7291 is not set
# CONFIG_AD7298 is not set
# CONFIG_AD7476 is not set
# CONFIG_AD7791 is not set
@@ -6070,6 +6105,7 @@ CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
# CONFIG_AD799X is not set
+# CONFIG_MAX1027 is not set
# CONFIG_MAX1363 is not set
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
@@ -6111,6 +6147,7 @@ CONFIG_IIO_ST_SENSORS_CORE=m
# CONFIG_AD7303 is not set
# CONFIG_MAX517 is not set
# CONFIG_MCP4725 is not set
+# CONFIG_MCP4922 is not set
#
# Frequency Synthesizers DDS/PLL
@@ -6161,10 +6198,12 @@ CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
# CONFIG_CM32181 is not set
# CONFIG_CM36651 is not set
# CONFIG_GP2AP020A00F is not set
+# CONFIG_ISL29125 is not set
CONFIG_HID_SENSOR_ALS=m
# CONFIG_HID_SENSOR_PROX is not set
# CONFIG_SENSORS_LM3533 is not set
# CONFIG_LTR501 is not set
+# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_SENSORS_TSL2563 is not set
# CONFIG_TSL4531 is not set
@@ -6174,6 +6213,7 @@ CONFIG_HID_SENSOR_ALS=m
# Magnetometer sensors
#
# CONFIG_AK8975 is not set
+# CONFIG_AK09911 is not set
# CONFIG_MAG3110 is not set
CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
CONFIG_IIO_ST_MAGN_3AXIS=m
@@ -6199,6 +6239,7 @@ CONFIG_IIO_INTERRUPT_TRIGGER=m
# CONFIG_MPL115 is not set
# CONFIG_MPL3115 is not set
# CONFIG_IIO_ST_PRESS is not set
+# CONFIG_T5403 is not set
#
# Lightning sensors
@@ -6234,10 +6275,11 @@ CONFIG_FMC_CHARDEV=m
#
CONFIG_GENERIC_PHY=y
CONFIG_BCM_KONA_USB2_PHY=m
-CONFIG_PHY_SAMSUNG_USB2=m
CONFIG_POWERCAP=y
CONFIG_INTEL_RAPL=m
# CONFIG_MCB is not set
+CONFIG_RAS=y
+CONFIG_THUNDERBOLT=m
#
# Firmware Drivers
@@ -6259,6 +6301,7 @@ CONFIG_ISCSI_IBFT=m
#
# CONFIG_EFI_VARS is not set
CONFIG_EFI_RUNTIME_MAP=y
+CONFIG_EFI_RUNTIME_WRAPPERS=y
CONFIG_UEFI_CPER=y
#
@@ -6579,7 +6622,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
-CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_BOOT_PRINTK_DELAY is not set
CONFIG_DYNAMIC_DEBUG=y
@@ -6648,7 +6691,6 @@ CONFIG_TIMER_STATS=y
# Lock Debugging (spinlocks, mutexes, etc...)
#
# 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_WW_MUTEX_SLOWPATH is not set
@@ -6670,7 +6712,6 @@ CONFIG_DEBUG_BUGVERBOSE=y
#
# RCU Debugging
#
-# CONFIG_PROVE_RCU_DELAY is not set
# CONFIG_SPARSE_RCU_POINTER is not set
# CONFIG_TORTURE_TEST is not set
# CONFIG_RCU_TORTURE_TEST is not set
@@ -6689,7 +6730,6 @@ CONFIG_NOP_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
@@ -6746,11 +6786,14 @@ CONFIG_PERCPU_TEST=m
CONFIG_ASYNC_RAID6_TEST=m
# CONFIG_TEST_STRING_HELPERS is not set
CONFIG_TEST_KSTRTOX=m
+# CONFIG_TEST_RHASHTABLE is not set
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_TEST_MODULE is not set
# CONFIG_TEST_USER_COPY is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIRMWARE is not set
+# CONFIG_TEST_UDELAY is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
@@ -6934,6 +6977,7 @@ CONFIG_CRYPTO_LZ4HC=m
# Random Number Generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
+# CONFIG_CRYPTO_DRBG_MENU is not set
CONFIG_CRYPTO_USER_API=m
CONFIG_CRYPTO_USER_API_HASH=m
CONFIG_CRYPTO_USER_API_SKCIPHER=m
@@ -6948,12 +6992,17 @@ CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
CONFIG_CRYPTO_DEV_CCP=y
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
+CONFIG_CRYPTO_DEV_QAT=m
+CONFIG_CRYPTO_DEV_QAT_DH895xCC=m
CONFIG_ASYMMETRIC_KEY_TYPE=m
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
CONFIG_PUBLIC_KEY_ALGO_RSA=m
CONFIG_X509_CERTIFICATE_PARSER=m
+CONFIG_PKCS7_MESSAGE_PARSER=m
+CONFIG_PKCS7_TEST_KEY=m
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
+CONFIG_HAVE_KVM_IRQFD=y
CONFIG_HAVE_KVM_IRQ_ROUTING=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_APIC_ARCHITECTURE=y
@@ -6984,6 +7033,7 @@ CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_IO=y
CONFIG_PERCPU_RWSEM=y
+CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
CONFIG_CRC_CCITT=m
CONFIG_CRC16=m
CONFIG_CRC_T10DIF=m
@@ -7041,6 +7091,8 @@ CONFIG_HAS_DMA=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_CPU_RMAP=y
CONFIG_DQL=y
+CONFIG_GLOB=y
+# CONFIG_GLOB_SELFTEST is not set
CONFIG_NLATTR=y
CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
CONFIG_LRU_CACHE=m
@@ -7064,3 +7116,4 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
CONFIG_FONT_AUTOSELECT=y
+CONFIG_ARCH_HAS_SG_CHAIN=y
diff --git a/libre/linux-libre/config.mips64el b/libre/linux-libre/config.mips64el
index f9c3ff636..199998ba8 100644
--- a/libre/linux-libre/config.mips64el
+++ b/libre/linux-libre/config.mips64el
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/mips 3.16.3-gnu-1 Kernel Configuration
+# Linux/mips 3.17.1-gnu-1 Kernel Configuration
#
CONFIG_MIPS=y
@@ -52,7 +52,7 @@ CONFIG_MACH_LOONGSON=y
# CONFIG_LEMOTE_FULOONG2E is not set
CONFIG_LEMOTE_MACH2F=y
# CONFIG_DEXXON_GDIUM is not set
-# CONFIG_LEMOTE_MACH3A is not set
+# CONFIG_LOONGSON_MACH3X is not set
CONFIG_CS5536=y
CONFIG_LOONGSON_SUSPEND=y
CONFIG_LOONGSON_UART_BASE=y
@@ -86,7 +86,6 @@ CONFIG_MIPS_L1_CACHE_SHIFT=5
#
# CPU selection
#
-# CONFIG_CPU_LOONGSON2E is not set
CONFIG_CPU_LOONGSON2F=y
# CONFIG_CPU_R4X00 is not set
# CONFIG_CPU_R5000 is not set
@@ -112,7 +111,6 @@ CONFIG_CPU_SUPPORTS_UNCACHED_ACCELERATED=y
CONFIG_64BIT=y
CONFIG_KVM_GUEST=y
CONFIG_KVM_GUEST_TIMER_FREQ=100
-# CONFIG_PAGE_SIZE_4KB is not set
CONFIG_PAGE_SIZE_16KB=y
# CONFIG_PAGE_SIZE_64KB is not set
CONFIG_FORCE_MAX_ZONEORDER=11
@@ -144,14 +142,13 @@ CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
-# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set
-# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
CONFIG_NEED_PER_CPU_KM=y
CONFIG_CLEANCACHE=y
CONFIG_FRONTSWAP=y
# CONFIG_CMA is not set
-CONFIG_ZBUD=y
CONFIG_ZSWAP=y
+CONFIG_ZPOOL=y
+CONFIG_ZBUD=y
CONFIG_ZSMALLOC=y
# CONFIG_PGTABLE_MAPPING is not set
# CONFIG_HZ_48 is not set
@@ -254,9 +251,11 @@ CONFIG_RCU_FANOUT_LEAF=16
# CONFIG_TREE_RCU_TRACE is not set
# CONFIG_RCU_BOOST is not set
# CONFIG_RCU_NOCB_CPU is not set
+CONFIG_BUILD_BIN2C=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=19
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_FREEZER=y
@@ -537,7 +536,6 @@ CONFIG_CPU_PM=y
# CPU Idle
#
CONFIG_CPU_IDLE=y
-# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
@@ -583,6 +581,7 @@ CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=m
+CONFIG_NET_UDP_TUNNEL=m
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
@@ -652,6 +651,7 @@ CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NF_CONNTRACK=m
+CONFIG_NF_LOG_COMMON=m
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
@@ -729,6 +729,7 @@ CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_NAT is not set
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
@@ -854,11 +855,18 @@ CONFIG_IP_VS_PE_SIP=m
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_CONNTRACK_IPV4=m
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+# CONFIG_NF_LOG_ARP is not set
+CONFIG_NF_LOG_IPV4=m
CONFIG_NF_TABLES_IPV4=m
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
CONFIG_NFT_CHAIN_NAT_IPV4=m
CONFIG_NFT_REJECT_IPV4=m
CONFIG_NF_TABLES_ARP=m
+CONFIG_NF_NAT_IPV4=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
@@ -867,15 +875,7 @@ CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_SYNPROXY=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_NF_NAT_IPV4=m
-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_GRE=m
-CONFIG_NF_NAT_PPTP=m
-CONFIG_NF_NAT_H323=m
+# CONFIG_IP_NF_NAT is not set
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_TARGET_ECN=m
@@ -895,6 +895,8 @@ CONFIG_NF_TABLES_IPV6=m
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
CONFIG_NFT_CHAIN_NAT_IPV6=m
CONFIG_NFT_REJECT_IPV6=m
+CONFIG_NF_LOG_IPV6=m
+CONFIG_NF_NAT_IPV6=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
@@ -912,11 +914,11 @@ CONFIG_IP6_NF_TARGET_SYNPROXY=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
-CONFIG_NF_NAT_IPV6=m
-CONFIG_IP6_NF_TARGET_MASQUERADE=m
-CONFIG_IP6_NF_TARGET_NPT=m
+# CONFIG_IP6_NF_NAT is not set
CONFIG_NF_TABLES_BRIDGE=m
CONFIG_NFT_BRIDGE_META=m
+# CONFIG_NFT_BRIDGE_REJECT is not set
+# CONFIG_NF_LOG_BRIDGE is not set
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -937,7 +939,6 @@ 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=m
CONFIG_INET_DCCP_DIAG=m
@@ -998,9 +999,8 @@ CONFIG_LLC2=m
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
CONFIG_PHONET=m
+# CONFIG_6LOWPAN is not set
CONFIG_IEEE802154=m
-CONFIG_IEEE802154_6LOWPAN=m
-CONFIG_6LOWPAN_IPHC=m
CONFIG_MAC802154=m
CONFIG_NET_SCHED=y
@@ -1169,7 +1169,6 @@ CONFIG_VLSI_FIR=m
CONFIG_VIA_FIR=m
CONFIG_MCS_FIR=m
CONFIG_BT=m
-CONFIG_BT_6LOWPAN=y
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
@@ -1272,6 +1271,7 @@ CONFIG_NFC_MICROREAD=m
CONFIG_NFC_MRVL=m
CONFIG_NFC_MRVL_USB=m
CONFIG_NFC_ST21NFCA=m
+# CONFIG_NFC_ST21NFCB is not set
CONFIG_HAVE_BPF_JIT=y
#
@@ -1289,16 +1289,18 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_FIRMWARE_IN_KERNEL is not set
CONFIG_EXTRA_FIRMWARE=""
-CONFIG_FW_LOADER_USER_HELPER=y
+# CONFIG_FW_LOADER_USER_HELPER_FALLBACK 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=m
+CONFIG_REGMAP_SPI=m
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_DMA_SHARED_BUFFER=y
+# CONFIG_FENCE_TRACE is not set
#
# Bus devices
@@ -1524,6 +1526,10 @@ CONFIG_SENSORS_LIS3_I2C=m
CONFIG_ALTERA_STAPL=m
#
+# Intel MIC Bus Driver
+#
+
+#
# Intel MIC Host Driver
#
@@ -1531,6 +1537,7 @@ CONFIG_ALTERA_STAPL=m
# Intel MIC Card Driver
#
CONFIG_GENWQE=m
+CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0
CONFIG_ECHO=m
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -1542,7 +1549,6 @@ CONFIG_SCSI_MOD=m
CONFIG_RAID_ATTRS=m
CONFIG_SCSI=m
CONFIG_SCSI_DMA=y
-CONFIG_SCSI_TGT=m
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y
@@ -1557,7 +1563,6 @@ CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=m
CONFIG_CHR_DEV_SCH=m
CONFIG_SCSI_ENCLOSURE=m
-CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
CONFIG_SCSI_SCAN_ASYNC=y
@@ -1567,14 +1572,12 @@ CONFIG_SCSI_SCAN_ASYNC=y
#
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
-# CONFIG_SCSI_FC_TGT_ATTRS is not set
CONFIG_SCSI_ISCSI_ATTRS=m
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=m
-CONFIG_SCSI_SRP_TGT_ATTRS=y
CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=m
CONFIG_ISCSI_BOOT_SYSFS=m
@@ -1664,7 +1667,6 @@ CONFIG_SCSI_DC390T=m
# CONFIG_SCSI_DEBUG is not set
CONFIG_SCSI_PMCRAID=m
CONFIG_SCSI_PM8001=m
-CONFIG_SCSI_SRP=m
CONFIG_SCSI_BFA_FC=m
CONFIG_SCSI_VIRTIO=m
CONFIG_SCSI_CHELSIO_FCOE=m
@@ -1944,6 +1946,7 @@ CONFIG_NET_VENDOR_AMD=y
CONFIG_AMD8111_ETH=m
CONFIG_PCNET32=m
CONFIG_PCMCIA_NMCLAN=m
+# CONFIG_NET_XGENE is not set
CONFIG_NET_VENDOR_ARC=y
CONFIG_NET_VENDOR_ATHEROS=y
CONFIG_ATL2=m
@@ -1963,7 +1966,6 @@ CONFIG_BNX2X=m
CONFIG_BNX2X_SRIOV=y
CONFIG_NET_VENDOR_BROCADE=y
CONFIG_BNA=m
-CONFIG_NET_CALXEDA_XGMAC=m
CONFIG_NET_VENDOR_CHELSIO=y
CONFIG_CHELSIO_T1=m
CONFIG_CHELSIO_T1_1G=y
@@ -2074,7 +2076,6 @@ CONFIG_8139TOO_TUNE_TWISTER=y
CONFIG_8139TOO_8129=y
# CONFIG_8139_OLD_RX_RESET is not set
CONFIG_R8169=m
-CONFIG_SH_ETH=m
CONFIG_NET_VENDOR_RDC=y
CONFIG_R6040=m
CONFIG_NET_VENDOR_SAMSUNG=y
@@ -2173,8 +2174,9 @@ CONFIG_SLHC=m
# CONFIG_SLIP_MODE_SLIP6 is not set
#
-# USB Network Adapters
+# Host-side USB support is needed for USB Network Adapter support
#
+CONFIG_USB_NET_DRIVERS=m
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
@@ -2286,6 +2288,7 @@ CONFIG_B43_PCMCIA=y
CONFIG_B43_SDIO=y
CONFIG_B43_BCMA_PIO=y
CONFIG_B43_PIO=y
+CONFIG_B43_PHY_G=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_HT=y
@@ -2306,8 +2309,10 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
CONFIG_BRCMUTIL=m
CONFIG_BRCMSMAC=m
CONFIG_BRCMFMAC=m
+CONFIG_BRCMFMAC_PROTO_BCDC=y
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_USB=y
+# CONFIG_BRCMFMAC_PCIE is not set
# CONFIG_BRCM_TRACING is not set
# CONFIG_BRCMDBG is not set
CONFIG_HOSTAP=m
@@ -2440,6 +2445,7 @@ CONFIG_IEEE802154_FAKEHARD=m
CONFIG_IEEE802154_FAKELB=m
CONFIG_IEEE802154_AT86RF230=m
# CONFIG_IEEE802154_MRF24J40 is not set
+# CONFIG_IEEE802154_CC2520 is not set
CONFIG_VMXNET3=m
CONFIG_ISDN=y
CONFIG_ISDN_I4L=m
@@ -2675,7 +2681,7 @@ 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_TABLET_SERIAL_WACOM4 is not set
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ADS7846 is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
@@ -2899,6 +2905,10 @@ CONFIG_TCG_TIS_I2C_NUVOTON=m
CONFIG_TCG_ATMEL=m
CONFIG_TCG_ST33_I2C=m
CONFIG_DEVPORT=y
+
+#
+# I2C support
+#
CONFIG_I2C=m
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
@@ -2987,6 +2997,7 @@ CONFIG_SPI_OC_TINY=m
CONFIG_SPI_PXA2XX_DMA=y
CONFIG_SPI_PXA2XX=m
CONFIG_SPI_PXA2XX_PCI=m
+# CONFIG_SPI_ROCKCHIP is not set
CONFIG_SPI_SC18IS602=m
CONFIG_SPI_XCOMM=m
CONFIG_SPI_XILINX=m
@@ -3149,6 +3160,7 @@ CONFIG_SENSORS_IBMPEX=m
# CONFIG_SENSORS_IIO_HWMON is not set
CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
+# CONFIG_SENSORS_POWR1220 is not set
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LTC2945=m
CONFIG_SENSORS_LTC4151=m
@@ -3199,6 +3211,7 @@ CONFIG_SENSORS_LTC2978=m
CONFIG_SENSORS_MAX16064=m
CONFIG_SENSORS_MAX34440=m
CONFIG_SENSORS_MAX8688=m
+# CONFIG_SENSORS_TPS40422 is not set
CONFIG_SENSORS_UCD9000=m
CONFIG_SENSORS_UCD9200=m
CONFIG_SENSORS_ZL6100=m
@@ -3226,6 +3239,7 @@ CONFIG_SENSORS_INA209=m
CONFIG_SENSORS_INA2XX=m
CONFIG_SENSORS_THMC50=m
CONFIG_SENSORS_TMP102=m
+# CONFIG_SENSORS_TMP103 is not set
CONFIG_SENSORS_TMP401=m
CONFIG_SENSORS_TMP421=m
CONFIG_SENSORS_VIA686A=m
@@ -3356,7 +3370,6 @@ CONFIG_MFD_TPS65218=m
# CONFIG_MFD_TPS65912_SPI is not set
CONFIG_MFD_WL1273_CORE=m
CONFIG_MFD_LM3533=m
-# CONFIG_MFD_TIMBERDALE is not set
# CONFIG_MFD_TMIO is not set
CONFIG_MFD_VX855=m
CONFIG_MFD_ARIZONA=y
@@ -3376,6 +3389,7 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
+# CONFIG_MEDIA_SDR_SUPPORT is not set
CONFIG_MEDIA_RC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_DEV=m
@@ -3414,10 +3428,10 @@ 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_SHARP_DECODER=m
CONFIG_IR_MCE_KBD_DECODER=m
+CONFIG_IR_XMP_DECODER=m
CONFIG_RC_DEVICES=y
CONFIG_RC_ATI_REMOTE=m
CONFIG_IR_IMON=m
@@ -3514,12 +3528,17 @@ CONFIG_VIDEO_USBVISION=m
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_GO7007=m
+CONFIG_VIDEO_GO7007_USB=m
+CONFIG_VIDEO_GO7007_LOADER=m
+# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=m
CONFIG_VIDEO_AU0828_V4L2=y
+# CONFIG_VIDEO_AU0828_RC is not set
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_CX231XX_ALSA=m
@@ -3607,6 +3626,7 @@ CONFIG_VIDEO_ZORAN_AVS6EYES=m
CONFIG_VIDEO_HEXIUM_GEMINI=m
CONFIG_VIDEO_HEXIUM_ORION=m
CONFIG_VIDEO_MXB=m
+# CONFIG_VIDEO_SOLO6X10 is not set
#
# Media capture/analog/hybrid TV support
@@ -3852,6 +3872,7 @@ CONFIG_DVB_M88DS3103=m
#
CONFIG_DVB_DRXK=m
CONFIG_DVB_TDA18271C2DD=m
+CONFIG_DVB_SI2165=m
#
# DVB-S (satellite) frontends
@@ -4074,6 +4095,7 @@ CONFIG_FB_VIRTUAL=m
# CONFIG_FB_BROADSHEET is not set
# CONFIG_FB_AUO_K190X is not set
# CONFIG_FB_SIMPLE is not set
+# CONFIG_FB_SM712 is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=m
# CONFIG_LCD_L4F00242T03 is not set
@@ -4317,6 +4339,7 @@ CONFIG_HID_ELO=m
CONFIG_HID_EZKEY=m
CONFIG_HID_HOLTEK=m
CONFIG_HOLTEK_FF=y
+# CONFIG_HID_GT683R is not set
CONFIG_HID_HUION=m
CONFIG_HID_KEYTOUCH=m
CONFIG_HID_KYE=m
@@ -4327,7 +4350,7 @@ CONFIG_HID_ICADE=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_KENSINGTON=m
CONFIG_HID_LCPOWER=m
-CONFIG_HID_LENOVO_TPKBD=m
+# CONFIG_HID_LENOVO is not set
CONFIG_HID_LOGITECH=m
CONFIG_HID_LOGITECH_DJ=m
CONFIG_LOGITECH_FF=y
@@ -4479,6 +4502,10 @@ CONFIG_USB_UAS=m
#
CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
+CONFIG_USBIP_CORE=m
+CONFIG_USBIP_VHCI_HCD=m
+CONFIG_USBIP_HOST=m
+# CONFIG_USBIP_DEBUG is not set
CONFIG_USB_MUSB_HDRC=m
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_GADGET is not set
@@ -4578,6 +4605,7 @@ CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=m
CONFIG_USB_EZUSB_FX2=m
CONFIG_USB_HSIC_USB3503=m
+# CONFIG_USB_LINK_LAYER_TEST is not set
CONFIG_USB_ATM=m
CONFIG_USB_SPEEDTOUCH=m
CONFIG_USB_CXACRU=m
@@ -4822,6 +4850,7 @@ CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF8523=m
CONFIG_RTC_DRV_PCF8563=m
+# CONFIG_RTC_DRV_PCF85063 is not set
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_M41T80=m
CONFIG_RTC_DRV_M41T80_WDT=y
@@ -4858,6 +4887,7 @@ CONFIG_RTC_DRV_DS1286=m
CONFIG_RTC_DRV_DS1511=m
CONFIG_RTC_DRV_DS1553=m
CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_DS2404=m
CONFIG_RTC_DRV_STK17TA8=m
CONFIG_RTC_DRV_M48T86=m
CONFIG_RTC_DRV_M48T35=m
@@ -4866,14 +4896,12 @@ CONFIG_RTC_DRV_MSM6242=m
CONFIG_RTC_DRV_BQ4802=m
CONFIG_RTC_DRV_RP5C01=m
CONFIG_RTC_DRV_V3020=m
-CONFIG_RTC_DRV_DS2404=m
CONFIG_RTC_DRV_PCF50633=m
#
# on-CPU RTC drivers
#
CONFIG_RTC_DRV_MC13XXX=m
-# CONFIG_RTC_DRV_MOXART is not set
# CONFIG_RTC_DRV_XGENE is not set
#
@@ -4925,11 +4953,6 @@ CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
#
CONFIG_STAGING=y
CONFIG_ET131X=m
-CONFIG_USBIP_CORE=m
-CONFIG_USBIP_VHCI_HCD=m
-CONFIG_USBIP_HOST=m
-# CONFIG_USBIP_DEBUG is not set
-CONFIG_W35UND=m
CONFIG_PRISM2_USB=m
CONFIG_COMEDI=m
# CONFIG_COMEDI_DEBUG is not set
@@ -5030,7 +5053,6 @@ CONFIG_RTL8192E=m
CONFIG_R8712U=m
CONFIG_R8188EU=m
CONFIG_88EU_AP_MODE=y
-CONFIG_88EU_P2P=y
CONFIG_R8192EE=m
CONFIG_R8723AU=m
CONFIG_8723AU_AP_MODE=y
@@ -5038,14 +5060,10 @@ CONFIG_8723AU_BT_COEXIST=y
CONFIG_R8821AE=m
CONFIG_RTS5208=m
# CONFIG_RTS5208_DEBUG is not set
-# CONFIG_TRANZPORT is not set
-CONFIG_IDE_PHISON=m
CONFIG_LINE6_USB=m
# CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set
-CONFIG_USB_SERIAL_QUATECH2=m
CONFIG_VT6655=m
CONFIG_VT6656=m
-CONFIG_DX_SEP=m
#
# IIO staging drivers
@@ -5066,7 +5084,6 @@ CONFIG_DX_SEP=m
#
# Analog to digital converters
#
-# CONFIG_AD7291 is not set
# CONFIG_AD7606 is not set
# CONFIG_AD7780 is not set
# CONFIG_AD7816 is not set
@@ -5117,7 +5134,8 @@ CONFIG_DX_SEP=m
#
# Magnetometer sensors
#
-# CONFIG_SENSORS_HMC5843 is not set
+# CONFIG_SENSORS_HMC5843_I2C is not set
+# CONFIG_SENSORS_HMC5843_SPI is not set
#
# Active energy metering IC
@@ -5140,12 +5158,7 @@ CONFIG_DX_SEP=m
#
# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
# CONFIG_IIO_SIMPLE_DUMMY is not set
-CONFIG_WLAGS49_H2=m
-CONFIG_WLAGS49_H25=m
-# CONFIG_FB_SM7XX is not set
-CONFIG_CRYSTALHD=m
CONFIG_FB_XGI=m
-CONFIG_USB_ENESTORAGE=m
CONFIG_BCM_WIMAX=m
CONFIG_FT1000=m
CONFIG_FT1000_USB=m
@@ -5175,17 +5188,8 @@ CONFIG_DVB_CXD2099=m
CONFIG_VIDEO_DT3155=m
CONFIG_DT3155_CCIR=y
CONFIG_DT3155_STREAMING=y
-CONFIG_VIDEO_GO7007=m
-CONFIG_VIDEO_GO7007_USB=m
-CONFIG_VIDEO_GO7007_LOADER=m
-# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
-# CONFIG_USB_MSI3101 is not set
-# CONFIG_MEDIA_TUNER_MSI001 is not set
CONFIG_VIDEO_V4L2_INT_DEVICE=m
CONFIG_VIDEO_TCM825X=m
-CONFIG_USB_SN9C102=m
-CONFIG_SOLO6X10=m
-# CONFIG_DVB_RTL2832_SDR is not set
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_BT829=m
CONFIG_LIRC_IGORPLUGUSB=m
@@ -5210,11 +5214,6 @@ CONFIG_WIMAX_GDM72XX_USB=y
# CONFIG_WIMAX_GDM72XX_SDIO is not set
CONFIG_WIMAX_GDM72XX_USB_PM=y
CONFIG_LTE_GDM724X=m
-CONFIG_NET_VENDOR_SILICOM=y
-CONFIG_SBYPASS=m
-CONFIG_BPCTL=m
-CONFIG_CED1401=m
-CONFIG_DGRP=m
CONFIG_FIREWIRE_SERIAL=m
CONFIG_FWTTY_MAX_TOTAL_PORTS=64
CONFIG_FWTTY_MAX_CARD_PORTS=32
@@ -5234,6 +5233,10 @@ CONFIG_LEMOTE_LYNLOONG2F=m
#
# Hardware Spinlock drivers
#
+
+#
+# Clock Source drivers
+#
# CONFIG_SH_TIMER_CMT is not set
# CONFIG_SH_TIMER_MTU2 is not set
# CONFIG_SH_TIMER_TMU is not set
@@ -5256,8 +5259,9 @@ CONFIG_EXTCON=m
#
# Extcon Device Drivers
#
-CONFIG_EXTCON_GPIO=m
# CONFIG_EXTCON_ADC_JACK is not set
+CONFIG_EXTCON_GPIO=m
+# CONFIG_EXTCON_SM5502 is not set
CONFIG_MEMORY=y
CONFIG_IIO=m
CONFIG_IIO_BUFFER=y
@@ -5277,11 +5281,13 @@ CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m
CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
# CONFIG_KXSD9 is not set
# CONFIG_MMA8452 is not set
+# CONFIG_KXCJK1013 is not set
#
# Analog to digital converters
#
# CONFIG_AD7266 is not set
+# CONFIG_AD7291 is not set
# CONFIG_AD7298 is not set
# CONFIG_AD7476 is not set
# CONFIG_AD7791 is not set
@@ -5289,6 +5295,7 @@ CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
# CONFIG_AD799X is not set
+# CONFIG_MAX1027 is not set
# CONFIG_MAX1363 is not set
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
@@ -5329,6 +5336,7 @@ CONFIG_IIO_ST_SENSORS_CORE=m
# CONFIG_AD7303 is not set
# CONFIG_MAX517 is not set
# CONFIG_MCP4725 is not set
+# CONFIG_MCP4922 is not set
#
# Frequency Synthesizers DDS/PLL
@@ -5379,10 +5387,12 @@ CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
# CONFIG_CM32181 is not set
# CONFIG_CM36651 is not set
# CONFIG_GP2AP020A00F is not set
+# CONFIG_ISL29125 is not set
CONFIG_HID_SENSOR_ALS=m
# CONFIG_HID_SENSOR_PROX is not set
# CONFIG_SENSORS_LM3533 is not set
# CONFIG_LTR501 is not set
+# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_SENSORS_TSL2563 is not set
# CONFIG_TSL4531 is not set
@@ -5392,6 +5402,7 @@ CONFIG_HID_SENSOR_ALS=m
# Magnetometer sensors
#
# CONFIG_AK8975 is not set
+# CONFIG_AK09911 is not set
# CONFIG_MAG3110 is not set
CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
CONFIG_IIO_ST_MAGN_3AXIS=m
@@ -5417,6 +5428,7 @@ CONFIG_IIO_INTERRUPT_TRIGGER=m
# CONFIG_MPL115 is not set
# CONFIG_MPL3115 is not set
# CONFIG_IIO_ST_PRESS is not set
+# CONFIG_T5403 is not set
#
# Lightning sensors
@@ -5445,9 +5457,10 @@ CONFIG_FMC_CHARDEV=m
#
CONFIG_GENERIC_PHY=y
CONFIG_BCM_KONA_USB2_PHY=m
-CONFIG_PHY_SAMSUNG_USB2=m
CONFIG_POWERCAP=y
# CONFIG_MCB is not set
+CONFIG_RAS=y
+# CONFIG_THUNDERBOLT is not set
#
# Firmware Drivers
@@ -5770,7 +5783,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
-CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_BOOT_PRINTK_DELAY is not set
CONFIG_DYNAMIC_DEBUG=y
@@ -5829,7 +5842,6 @@ CONFIG_TIMER_STATS=y
# Lock Debugging (spinlocks, mutexes, etc...)
#
# 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_WW_MUTEX_SLOWPATH is not set
@@ -5850,7 +5862,6 @@ CONFIG_STACKTRACE=y
#
# RCU Debugging
#
-# CONFIG_PROVE_RCU_DELAY is not set
# CONFIG_SPARSE_RCU_POINTER is not set
# CONFIG_TORTURE_TEST is not set
# CONFIG_RCU_TORTURE_TEST is not set
@@ -5864,7 +5875,6 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60
CONFIG_NOP_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
@@ -5915,10 +5925,13 @@ CONFIG_PERCPU_TEST=m
CONFIG_ASYNC_RAID6_TEST=m
# CONFIG_TEST_STRING_HELPERS is not set
CONFIG_TEST_KSTRTOX=m
+# CONFIG_TEST_RHASHTABLE is not set
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_TEST_MODULE is not set
# CONFIG_TEST_USER_COPY is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIRMWARE is not set
+# CONFIG_TEST_UDELAY is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
@@ -6067,6 +6080,7 @@ CONFIG_CRYPTO_LZ4HC=m
# Random Number Generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
+# CONFIG_CRYPTO_DRBG_MENU is not set
CONFIG_CRYPTO_USER_API=m
CONFIG_CRYPTO_USER_API_HASH=m
CONFIG_CRYPTO_USER_API_SKCIPHER=m
@@ -6076,6 +6090,7 @@ CONFIG_ASYMMETRIC_KEY_TYPE=m
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
CONFIG_PUBLIC_KEY_ALGO_RSA=m
CONFIG_X509_CERTIFICATE_PARSER=m
+# CONFIG_PKCS7_MESSAGE_PARSER is not set
CONFIG_BINARY_PRINTF=y
#
@@ -6136,12 +6151,15 @@ CONFIG_TEXTSEARCH_KMP=m
CONFIG_TEXTSEARCH_BM=m
CONFIG_TEXTSEARCH_FSM=m
CONFIG_BTREE=y
+CONFIG_INTERVAL_TREE=y
CONFIG_ASSOCIATIVE_ARRAY=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT_MAP=y
CONFIG_HAS_DMA=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_DQL=y
+CONFIG_GLOB=y
+# CONFIG_GLOB_SELFTEST is not set
CONFIG_NLATTR=y
CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
CONFIG_LRU_CACHE=m
@@ -6164,4 +6182,5 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
CONFIG_FONT_AUTOSELECT=y
+# CONFIG_ARCH_HAS_SG_CHAIN is not set
CONFIG_VIRTUALIZATION=y
diff --git a/libre/linux-libre/config.x86_64 b/libre/linux-libre/config.x86_64
index 9cf407e4a..a5c97902d 100644
--- a/libre/linux-libre/config.x86_64
+++ b/libre/linux-libre/config.x86_64
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.16.3-gnu-1 Kernel Configuration
+# Linux/x86 3.17.0-gnu-2 Kernel Configuration
#
CONFIG_64BIT=y
CONFIG_X86_64=y
@@ -89,6 +89,7 @@ CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_ARCH_CLOCKSOURCE_DATA=y
+CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
@@ -134,9 +135,11 @@ CONFIG_RCU_FAST_NO_HZ=y
# CONFIG_TREE_RCU_TRACE is not set
# CONFIG_RCU_BOOST is not set
# CONFIG_RCU_NOCB_CPU is not set
+CONFIG_BUILD_BIN2C=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=19
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
CONFIG_ARCH_SUPPORTS_INT128=y
@@ -222,7 +225,7 @@ CONFIG_SLUB_DEBUG=y
# CONFIG_SLAB is not set
CONFIG_SLUB=y
CONFIG_SLUB_CPU_PARTIAL=y
-# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
+CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_PROFILING=y
CONFIG_TRACEPOINTS=y
CONFIG_OPROFILE=m
@@ -484,8 +487,9 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
CONFIG_CLEANCACHE=y
CONFIG_FRONTSWAP=y
# CONFIG_CMA is not set
-CONFIG_ZBUD=y
CONFIG_ZSWAP=y
+CONFIG_ZPOOL=y
+CONFIG_ZBUD=y
CONFIG_ZSMALLOC=y
# CONFIG_PGTABLE_MAPPING is not set
CONFIG_GENERIC_EARLY_IOREMAP=y
@@ -553,6 +557,8 @@ CONFIG_PM_TRACE_RTC=y
CONFIG_PM_CLK=y
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
CONFIG_ACPI=y
+CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y
+CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
CONFIG_ACPI_SLEEP=y
# CONFIG_ACPI_PROCFS_POWER is not set
CONFIG_ACPI_EC_DEBUGFS=m
@@ -580,6 +586,8 @@ CONFIG_ACPI_HED=y
CONFIG_ACPI_CUSTOM_METHOD=m
CONFIG_ACPI_BGRT=y
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
+CONFIG_HAVE_ACPI_APEI=y
+CONFIG_HAVE_ACPI_APEI_NMI=y
CONFIG_ACPI_APEI=y
CONFIG_ACPI_APEI_GHES=y
CONFIG_ACPI_APEI_PCIEAER=y
@@ -627,7 +635,6 @@ CONFIG_X86_SPEEDSTEP_LIB=m
# CPU Idle
#
CONFIG_CPU_IDLE=y
-# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set
@@ -737,6 +744,7 @@ CONFIG_SYSVIPC_COMPAT=y
CONFIG_KEYS_COMPAT=y
CONFIG_X86_DEV_DMA_OPS=y
CONFIG_IOSF_MBI=m
+CONFIG_PMC_ATOM=y
CONFIG_NET=y
CONFIG_COMPAT_NETLINK_MESSAGES=y
@@ -776,6 +784,7 @@ CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=m
+CONFIG_NET_UDP_TUNNEL=m
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
@@ -845,6 +854,7 @@ CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NF_CONNTRACK=m
+CONFIG_NF_LOG_COMMON=m
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_ZONES=y
@@ -922,6 +932,7 @@ CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_NAT=m
CONFIG_NETFILTER_XT_TARGET_NETMAP=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
@@ -1047,11 +1058,18 @@ CONFIG_IP_VS_PE_SIP=m
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_CONNTRACK_IPV4=m
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+CONFIG_NF_LOG_ARP=m
+CONFIG_NF_LOG_IPV4=m
CONFIG_NF_TABLES_IPV4=m
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
CONFIG_NFT_CHAIN_NAT_IPV4=m
CONFIG_NFT_REJECT_IPV4=m
CONFIG_NF_TABLES_ARP=m
+CONFIG_NF_NAT_IPV4=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
@@ -1060,15 +1078,10 @@ CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_SYNPROXY=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_NF_NAT_IPV4=m
+CONFIG_IP_NF_NAT=m
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_GRE=m
-CONFIG_NF_NAT_PPTP=m
-CONFIG_NF_NAT_H323=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_TARGET_ECN=m
@@ -1088,6 +1101,8 @@ CONFIG_NF_TABLES_IPV6=m
CONFIG_NFT_CHAIN_ROUTE_IPV6=m
CONFIG_NFT_CHAIN_NAT_IPV6=m
CONFIG_NFT_REJECT_IPV6=m
+CONFIG_NF_LOG_IPV6=m
+CONFIG_NF_NAT_IPV6=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
@@ -1105,11 +1120,13 @@ CONFIG_IP6_NF_TARGET_SYNPROXY=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
-CONFIG_NF_NAT_IPV6=m
+CONFIG_IP6_NF_NAT=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_NF_TABLES_BRIDGE=m
CONFIG_NFT_BRIDGE_META=m
+CONFIG_NFT_BRIDGE_REJECT=m
+CONFIG_NF_LOG_BRIDGE=m
CONFIG_BRIDGE_NF_EBTABLES=m
CONFIG_BRIDGE_EBT_BROUTE=m
CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -1130,7 +1147,6 @@ 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=m
CONFIG_INET_DCCP_DIAG=m
@@ -1191,9 +1207,9 @@ CONFIG_LLC2=m
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
CONFIG_PHONET=m
+CONFIG_6LOWPAN=m
CONFIG_IEEE802154=m
CONFIG_IEEE802154_6LOWPAN=m
-CONFIG_6LOWPAN_IPHC=m
CONFIG_MAC802154=m
CONFIG_NET_SCHED=y
@@ -1367,7 +1383,7 @@ CONFIG_VLSI_FIR=m
CONFIG_VIA_FIR=m
CONFIG_MCS_FIR=m
CONFIG_BT=m
-CONFIG_BT_6LOWPAN=y
+CONFIG_BT_6LOWPAN=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
@@ -1430,7 +1446,7 @@ 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_DEBUGFS=y
# CONFIG_MAC80211_MESSAGE_TRACING is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_WIMAX=m
@@ -1473,6 +1489,8 @@ CONFIG_NFC_MICROREAD_MEI=m
CONFIG_NFC_MRVL=m
CONFIG_NFC_MRVL_USB=m
CONFIG_NFC_ST21NFCA=m
+CONFIG_NFC_ST21NFCB=m
+CONFIG_NFC_ST21NFCB_I2C=m
CONFIG_HAVE_BPF_JIT=y
#
@@ -1491,6 +1509,7 @@ CONFIG_FW_LOADER=y
# CONFIG_FIRMWARE_IN_KERNEL is not set
CONFIG_EXTRA_FIRMWARE=""
CONFIG_FW_LOADER_USER_HELPER=y
+# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
CONFIG_SYS_HYPERVISOR=y
@@ -1498,9 +1517,11 @@ CONFIG_SYS_HYPERVISOR=y
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_REGMAP=y
CONFIG_REGMAP_I2C=m
+CONFIG_REGMAP_SPI=m
CONFIG_REGMAP_MMIO=y
CONFIG_REGMAP_IRQ=y
CONFIG_DMA_SHARED_BUFFER=y
+# CONFIG_FENCE_TRACE is not set
#
# Bus devices
@@ -1700,9 +1721,6 @@ CONFIG_TIFM_CORE=m
CONFIG_TIFM_7XX1=m
CONFIG_ICS932S401=m
CONFIG_ENCLOSURE_SERVICES=m
-CONFIG_CS5535_MFGPT=m
-CONFIG_CS5535_MFGPT_DEFAULT_IRQ=7
-CONFIG_CS5535_CLOCK_EVENT_SRC=m
CONFIG_HP_ILO=m
CONFIG_APDS9802ALS=m
CONFIG_ISL29003=m
@@ -1753,6 +1771,11 @@ CONFIG_INTEL_MEI_TXE=m
CONFIG_VMWARE_VMCI=m
#
+# Intel MIC Bus Driver
+#
+CONFIG_INTEL_MIC_BUS=m
+
+#
# Intel MIC Host Driver
#
CONFIG_INTEL_MIC_HOST=m
@@ -1762,6 +1785,7 @@ CONFIG_INTEL_MIC_HOST=m
#
CONFIG_INTEL_MIC_CARD=m
CONFIG_GENWQE=m
+CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0
CONFIG_ECHO=m
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -1773,7 +1797,6 @@ CONFIG_SCSI_MOD=m
CONFIG_RAID_ATTRS=m
CONFIG_SCSI=m
CONFIG_SCSI_DMA=y
-CONFIG_SCSI_TGT=m
CONFIG_SCSI_NETLINK=y
CONFIG_SCSI_PROC_FS=y
@@ -1788,7 +1811,6 @@ CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=m
CONFIG_CHR_DEV_SCH=m
CONFIG_SCSI_ENCLOSURE=m
-CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
CONFIG_SCSI_SCAN_ASYNC=y
@@ -1798,14 +1820,12 @@ CONFIG_SCSI_SCAN_ASYNC=y
#
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
-# CONFIG_SCSI_FC_TGT_ATTRS is not set
CONFIG_SCSI_ISCSI_ATTRS=m
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=m
-CONFIG_SCSI_SRP_TGT_ATTRS=y
CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=m
CONFIG_ISCSI_BOOT_SYSFS=m
@@ -1900,7 +1920,6 @@ CONFIG_SCSI_DC390T=m
# CONFIG_SCSI_DEBUG is not set
CONFIG_SCSI_PMCRAID=m
CONFIG_SCSI_PM8001=m
-CONFIG_SCSI_SRP=m
CONFIG_SCSI_BFA_FC=m
CONFIG_SCSI_VIRTIO=m
CONFIG_SCSI_CHELSIO_FCOE=m
@@ -2184,6 +2203,7 @@ CONFIG_NET_VENDOR_AMD=y
CONFIG_AMD8111_ETH=m
CONFIG_PCNET32=m
CONFIG_PCMCIA_NMCLAN=m
+# CONFIG_NET_XGENE is not set
CONFIG_NET_VENDOR_ARC=y
CONFIG_NET_VENDOR_ATHEROS=y
CONFIG_ATL2=m
@@ -2203,7 +2223,6 @@ CONFIG_BNX2X=m
CONFIG_BNX2X_SRIOV=y
CONFIG_NET_VENDOR_BROCADE=y
CONFIG_BNA=m
-CONFIG_NET_CALXEDA_XGMAC=m
CONFIG_NET_VENDOR_CHELSIO=y
CONFIG_CHELSIO_T1=m
CONFIG_CHELSIO_T1_1G=y
@@ -2317,7 +2336,6 @@ CONFIG_8139TOO_TUNE_TWISTER=y
CONFIG_8139TOO_8129=y
# CONFIG_8139_OLD_RX_RESET is not set
CONFIG_R8169=m
-CONFIG_SH_ETH=m
CONFIG_NET_VENDOR_RDC=y
CONFIG_R6040=m
CONFIG_NET_VENDOR_SAMSUNG=y
@@ -2414,8 +2432,9 @@ CONFIG_SLHC=m
# CONFIG_SLIP_MODE_SLIP6 is not set
#
-# USB Network Adapters
+# Host-side USB support is needed for USB Network Adapter support
#
+CONFIG_USB_NET_DRIVERS=m
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
@@ -2490,13 +2509,15 @@ CONFIG_ATH9K_BTCOEX_SUPPORT=y
CONFIG_ATH9K=m
CONFIG_ATH9K_PCI=y
CONFIG_ATH9K_AHB=y
-# CONFIG_ATH9K_DEBUGFS is not set
+CONFIG_ATH9K_DEBUGFS=y
+CONFIG_ATH9K_STATION_STATISTICS=y
CONFIG_ATH9K_WOW=y
CONFIG_ATH9K_RFKILL=y
CONFIG_ATH9K_HTC=m
# CONFIG_ATH9K_HTC_DEBUGFS is not set
CONFIG_CARL9170=m
CONFIG_CARL9170_LEDS=y
+# CONFIG_CARL9170_DEBUGFS is not set
CONFIG_CARL9170_WPC=y
# CONFIG_CARL9170_HWRNG is not set
CONFIG_ATH6KL=m
@@ -2527,6 +2548,7 @@ CONFIG_B43_PCMCIA=y
CONFIG_B43_SDIO=y
CONFIG_B43_BCMA_PIO=y
CONFIG_B43_PIO=y
+CONFIG_B43_PHY_G=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_HT=y
@@ -2547,8 +2569,11 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
CONFIG_BRCMUTIL=m
CONFIG_BRCMSMAC=m
CONFIG_BRCMFMAC=m
+CONFIG_BRCMFMAC_PROTO_BCDC=y
+CONFIG_BRCMFMAC_PROTO_MSGBUF=y
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_USB=y
+CONFIG_BRCMFMAC_PCIE=y
# CONFIG_BRCM_TRACING is not set
# CONFIG_BRCMDBG is not set
CONFIG_HOSTAP=m
@@ -2570,6 +2595,7 @@ CONFIG_IWLWIFI_OPMODE_MODULAR=y
# Debugging Options
#
# CONFIG_IWLWIFI_DEBUG is not set
+# CONFIG_IWLWIFI_DEBUGFS is not set
CONFIG_IWLWIFI_DEVICE_TRACING=y
CONFIG_IWLEGACY=m
CONFIG_IWL4965=m
@@ -2579,6 +2605,7 @@ CONFIG_IWL3945=m
# iwl3945 / iwl4965 Debugging Options
#
# CONFIG_IWLEGACY_DEBUG is not set
+# CONFIG_IWLEGACY_DEBUGFS is not set
CONFIG_LIBERTAS=m
CONFIG_LIBERTAS_USB=m
CONFIG_LIBERTAS_CS=m
@@ -2629,6 +2656,7 @@ CONFIG_RT2X00_LIB=m
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_RT2X00_LIB_CRYPTO=y
CONFIG_RT2X00_LIB_LEDS=y
+# CONFIG_RT2X00_LIB_DEBUGFS is not set
# CONFIG_RT2X00_DEBUG is not set
CONFIG_RTL_CARDS=m
CONFIG_RTL8192CE=m
@@ -2681,6 +2709,7 @@ CONFIG_IEEE802154_FAKEHARD=m
CONFIG_IEEE802154_FAKELB=m
CONFIG_IEEE802154_AT86RF230=m
# CONFIG_IEEE802154_MRF24J40 is not set
+# CONFIG_IEEE802154_CC2520 is not set
CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_NETDEV_BACKEND=m
CONFIG_VMXNET3=m
@@ -2919,7 +2948,7 @@ 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_TABLET_SERIAL_WACOM4=m
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ADS7846 is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
@@ -3167,6 +3196,10 @@ CONFIG_TCG_ST33_I2C=m
CONFIG_TCG_XEN=m
CONFIG_TELCLOCK=m
CONFIG_DEVPORT=y
+
+#
+# I2C support
+#
CONFIG_I2C=m
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
@@ -3309,14 +3342,13 @@ CONFIG_PINCTRL=y
#
# Pin controllers
#
-# CONFIG_PINMUX is not set
-# CONFIG_PINCONF is not set
# CONFIG_DEBUG_PINCTRL is not set
# CONFIG_PINCTRL_BAYTRAIL is not set
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
CONFIG_GPIOLIB=y
CONFIG_GPIO_DEVRES=y
CONFIG_GPIO_ACPI=y
+CONFIG_GPIOLIB_IRQCHIP=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_GPIO_SYSFS=y
@@ -3346,7 +3378,6 @@ CONFIG_GPIO_LP3943=m
#
# PCI GPIO expanders:
#
-CONFIG_GPIO_CS5535=m
CONFIG_GPIO_AMD8111=m
# CONFIG_GPIO_INTEL_MID is not set
# CONFIG_GPIO_ML_IOH is not set
@@ -3451,6 +3482,7 @@ CONFIG_SENSORS_IBMPEX=m
CONFIG_SENSORS_CORETEMP=m
CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
+CONFIG_SENSORS_POWR1220=m
CONFIG_SENSORS_LINEAGE=m
CONFIG_SENSORS_LTC2945=m
CONFIG_SENSORS_LTC4151=m
@@ -3501,6 +3533,7 @@ CONFIG_SENSORS_LTC2978=m
CONFIG_SENSORS_MAX16064=m
CONFIG_SENSORS_MAX34440=m
CONFIG_SENSORS_MAX8688=m
+CONFIG_SENSORS_TPS40422=m
CONFIG_SENSORS_UCD9000=m
CONFIG_SENSORS_UCD9200=m
CONFIG_SENSORS_ZL6100=m
@@ -3528,6 +3561,7 @@ CONFIG_SENSORS_INA209=m
CONFIG_SENSORS_INA2XX=m
CONFIG_SENSORS_THMC50=m
CONFIG_SENSORS_TMP102=m
+CONFIG_SENSORS_TMP103=m
CONFIG_SENSORS_TMP401=m
CONFIG_SENSORS_TMP421=m
CONFIG_SENSORS_VIA_CPUTEMP=m
@@ -3583,7 +3617,6 @@ CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_F71808E_WDT=m
CONFIG_SP5100_TCO=m
-CONFIG_GEODE_WDT=m
CONFIG_SBC_FITPC2_WATCHDOG=m
CONFIG_EUROTECH_WDT=m
CONFIG_IB700_WDT=m
@@ -3660,7 +3693,6 @@ CONFIG_BCMA_DRIVER_GPIO=y
# Multifunction device drivers
#
CONFIG_MFD_CORE=y
-CONFIG_MFD_CS5535=m
CONFIG_MFD_BCM590XX=m
CONFIG_MFD_CROS_EC=m
CONFIG_MFD_CROS_EC_I2C=m
@@ -3699,7 +3731,6 @@ CONFIG_MFD_TPS65218=m
# CONFIG_MFD_TPS65912_SPI is not set
CONFIG_MFD_WL1273_CORE=m
CONFIG_MFD_LM3533=m
-# CONFIG_MFD_TIMBERDALE is not set
# CONFIG_MFD_TMIO is not set
CONFIG_MFD_VX855=m
CONFIG_MFD_ARIZONA=y
@@ -3719,6 +3750,7 @@ CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
+CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_RC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_DEV=m
@@ -3757,10 +3789,10 @@ 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_SHARP_DECODER=m
CONFIG_IR_MCE_KBD_DECODER=m
+CONFIG_IR_XMP_DECODER=m
CONFIG_RC_DEVICES=y
CONFIG_RC_ATI_REMOTE=m
CONFIG_IR_ENE=m
@@ -3862,12 +3894,17 @@ CONFIG_VIDEO_USBVISION=m
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_GO7007=m
+CONFIG_VIDEO_GO7007_USB=m
+CONFIG_VIDEO_GO7007_LOADER=m
+# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
#
# Analog/digital TV USB devices
#
CONFIG_VIDEO_AU0828=m
CONFIG_VIDEO_AU0828_V4L2=y
+CONFIG_VIDEO_AU0828_RC=y
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_CX231XX_ALSA=m
@@ -3932,6 +3969,12 @@ CONFIG_VIDEO_EM28XX_V4L2=m
CONFIG_VIDEO_EM28XX_ALSA=m
CONFIG_VIDEO_EM28XX_DVB=m
CONFIG_VIDEO_EM28XX_RC=m
+
+#
+# Software defined radio USB devices
+#
+CONFIG_USB_MSI2500=m
+CONFIG_USB_AIRSPY=m
CONFIG_MEDIA_PCI_SUPPORT=y
#
@@ -3956,6 +3999,7 @@ CONFIG_VIDEO_ZORAN_AVS6EYES=m
CONFIG_VIDEO_HEXIUM_GEMINI=m
CONFIG_VIDEO_HEXIUM_ORION=m
CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_SOLO6X10=m
#
# Media capture/analog/hybrid TV support
@@ -4161,6 +4205,7 @@ CONFIG_MEDIA_TUNER_TDA18271=m
CONFIG_MEDIA_TUNER_TDA9887=m
CONFIG_MEDIA_TUNER_TEA5761=m
CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MSI001=m
CONFIG_MEDIA_TUNER_MT20XX=m
CONFIG_MEDIA_TUNER_MT2060=m
CONFIG_MEDIA_TUNER_MT2063=m
@@ -4201,6 +4246,7 @@ CONFIG_DVB_M88DS3103=m
#
CONFIG_DVB_DRXK=m
CONFIG_DVB_TDA18271C2DD=m
+CONFIG_DVB_SI2165=m
#
# DVB-S (satellite) frontends
@@ -4256,6 +4302,7 @@ CONFIG_DVB_STV0367=m
CONFIG_DVB_CXD2820R=m
CONFIG_DVB_RTL2830=m
CONFIG_DVB_RTL2832=m
+CONFIG_DVB_RTL2832_SDR=m
CONFIG_DVB_SI2168=m
#
@@ -4474,7 +4521,6 @@ CONFIG_BACKLIGHT_APPLE=m
# CONFIG_BACKLIGHT_ADP8870 is not set
CONFIG_BACKLIGHT_PCF50633=m
# CONFIG_BACKLIGHT_LM3639 is not set
-# CONFIG_BACKLIGHT_OT200 is not set
# CONFIG_BACKLIGHT_TPS65217 is not set
# CONFIG_BACKLIGHT_GPIO is not set
# CONFIG_BACKLIGHT_LV5207LP is not set
@@ -4699,6 +4745,7 @@ CONFIG_HID_ELO=m
CONFIG_HID_EZKEY=m
CONFIG_HID_HOLTEK=m
CONFIG_HOLTEK_FF=y
+CONFIG_HID_GT683R=m
CONFIG_HID_HUION=m
CONFIG_HID_KEYTOUCH=m
CONFIG_HID_KYE=m
@@ -4709,7 +4756,7 @@ CONFIG_HID_ICADE=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_KENSINGTON=m
CONFIG_HID_LCPOWER=m
-CONFIG_HID_LENOVO_TPKBD=m
+CONFIG_HID_LENOVO=m
CONFIG_HID_LOGITECH=m
CONFIG_HID_LOGITECH_DJ=m
CONFIG_LOGITECH_FF=y
@@ -4862,6 +4909,10 @@ CONFIG_USB_UAS=m
#
CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
+CONFIG_USBIP_CORE=m
+CONFIG_USBIP_VHCI_HCD=m
+CONFIG_USBIP_HOST=m
+# CONFIG_USBIP_DEBUG is not set
CONFIG_USB_MUSB_HDRC=m
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_GADGET is not set
@@ -4961,6 +5012,7 @@ CONFIG_USB_ISIGHTFW=m
CONFIG_USB_YUREX=m
CONFIG_USB_EZUSB_FX2=m
CONFIG_USB_HSIC_USB3503=m
+CONFIG_USB_LINK_LAYER_TEST=m
CONFIG_USB_ATM=m
CONFIG_USB_SPEEDTOUCH=m
CONFIG_USB_CXACRU=m
@@ -5194,6 +5246,7 @@ CONFIG_EDAC_E752X=m
CONFIG_EDAC_I82975X=m
CONFIG_EDAC_I3000=m
CONFIG_EDAC_I3200=m
+CONFIG_EDAC_IE31200=m
CONFIG_EDAC_X38=m
CONFIG_EDAC_I5400=m
CONFIG_EDAC_I7CORE=m
@@ -5233,6 +5286,7 @@ CONFIG_RTC_DRV_X1205=m
CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF8523=m
CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_M41T80=m
CONFIG_RTC_DRV_M41T80_WDT=y
@@ -5269,6 +5323,8 @@ CONFIG_RTC_DRV_DS1286=m
CONFIG_RTC_DRV_DS1511=m
CONFIG_RTC_DRV_DS1553=m
CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_DS2404=m
+CONFIG_RTC_DRV_EFI=m
CONFIG_RTC_DRV_STK17TA8=m
CONFIG_RTC_DRV_M48T86=m
CONFIG_RTC_DRV_M48T35=m
@@ -5277,14 +5333,12 @@ CONFIG_RTC_DRV_MSM6242=m
CONFIG_RTC_DRV_BQ4802=m
CONFIG_RTC_DRV_RP5C01=m
CONFIG_RTC_DRV_V3020=m
-CONFIG_RTC_DRV_DS2404=m
CONFIG_RTC_DRV_PCF50633=m
#
# on-CPU RTC drivers
#
CONFIG_RTC_DRV_MC13XXX=m
-# CONFIG_RTC_DRV_MOXART is not set
# CONFIG_RTC_DRV_XGENE is not set
#
@@ -5297,6 +5351,7 @@ CONFIG_DMADEVICES=y
#
# DMA Devices
#
+CONFIG_INTEL_MIC_X100_DMA=m
CONFIG_INTEL_MID_DMAC=m
CONFIG_INTEL_IOATDMA=m
CONFIG_DW_DMAC_CORE=m
@@ -5371,14 +5426,10 @@ CONFIG_XEN_PRIVCMD=m
CONFIG_XEN_ACPI_PROCESSOR=m
# CONFIG_XEN_MCE_LOG is not set
CONFIG_XEN_HAVE_PVMMU=y
+CONFIG_XEN_EFI=y
CONFIG_STAGING=y
CONFIG_ET131X=m
CONFIG_SLICOSS=m
-CONFIG_USBIP_CORE=m
-CONFIG_USBIP_VHCI_HCD=m
-CONFIG_USBIP_HOST=m
-# CONFIG_USBIP_DEBUG is not set
-CONFIG_W35UND=m
CONFIG_PRISM2_USB=m
CONFIG_COMEDI=m
# CONFIG_COMEDI_DEBUG is not set
@@ -5479,7 +5530,6 @@ CONFIG_RTL8192E=m
CONFIG_R8712U=m
CONFIG_R8188EU=m
CONFIG_88EU_AP_MODE=y
-CONFIG_88EU_P2P=y
CONFIG_R8192EE=m
CONFIG_R8723AU=m
CONFIG_8723AU_AP_MODE=y
@@ -5487,14 +5537,10 @@ CONFIG_8723AU_BT_COEXIST=y
CONFIG_R8821AE=m
CONFIG_RTS5208=m
# CONFIG_RTS5208_DEBUG is not set
-# CONFIG_TRANZPORT is not set
-CONFIG_IDE_PHISON=m
CONFIG_LINE6_USB=m
# CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set
-CONFIG_USB_SERIAL_QUATECH2=m
CONFIG_VT6655=m
CONFIG_VT6656=m
-CONFIG_DX_SEP=m
#
# IIO staging drivers
@@ -5515,7 +5561,6 @@ CONFIG_DX_SEP=m
#
# Analog to digital converters
#
-# CONFIG_AD7291 is not set
# CONFIG_AD7606 is not set
# CONFIG_AD7780 is not set
# CONFIG_AD7816 is not set
@@ -5566,7 +5611,9 @@ CONFIG_DX_SEP=m
#
# Magnetometer sensors
#
-# CONFIG_SENSORS_HMC5843 is not set
+CONFIG_SENSORS_HMC5843=m
+CONFIG_SENSORS_HMC5843_I2C=m
+CONFIG_SENSORS_HMC5843_SPI=m
#
# Active energy metering IC
@@ -5589,12 +5636,7 @@ CONFIG_DX_SEP=m
#
# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
# CONFIG_IIO_SIMPLE_DUMMY is not set
-CONFIG_WLAGS49_H2=m
-CONFIG_WLAGS49_H25=m
-CONFIG_CRYSTALHD=m
CONFIG_FB_XGI=m
-CONFIG_ACPI_QUICKSTART=m
-CONFIG_USB_ENESTORAGE=m
CONFIG_BCM_WIMAX=m
CONFIG_FT1000=m
CONFIG_FT1000_USB=m
@@ -5624,17 +5666,8 @@ CONFIG_DVB_CXD2099=m
CONFIG_VIDEO_DT3155=m
CONFIG_DT3155_CCIR=y
CONFIG_DT3155_STREAMING=y
-CONFIG_VIDEO_GO7007=m
-CONFIG_VIDEO_GO7007_USB=m
-CONFIG_VIDEO_GO7007_LOADER=m
-# CONFIG_VIDEO_GO7007_USB_S2250_BOARD is not set
-# CONFIG_USB_MSI3101 is not set
-# CONFIG_MEDIA_TUNER_MSI001 is not set
CONFIG_VIDEO_V4L2_INT_DEVICE=m
CONFIG_VIDEO_TCM825X=m
-CONFIG_USB_SN9C102=m
-CONFIG_SOLO6X10=m
-# CONFIG_DVB_RTL2832_SDR is not set
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_BT829=m
CONFIG_LIRC_IGORPLUGUSB=m
@@ -5659,11 +5692,6 @@ CONFIG_WIMAX_GDM72XX_USB=y
# CONFIG_WIMAX_GDM72XX_SDIO is not set
CONFIG_WIMAX_GDM72XX_USB_PM=y
CONFIG_LTE_GDM724X=m
-CONFIG_NET_VENDOR_SILICOM=y
-CONFIG_SBYPASS=m
-CONFIG_BPCTL=m
-CONFIG_CED1401=m
-CONFIG_DGRP=m
CONFIG_FIREWIRE_SERIAL=m
CONFIG_FWTTY_MAX_TOTAL_PORTS=64
CONFIG_FWTTY_MAX_CARD_PORTS=32
@@ -5682,6 +5710,7 @@ CONFIG_DGAP=m
CONFIG_GS_FPGABOOT=m
CONFIG_CRYPTO_SKEIN=y
CONFIG_CRYPTO_THREEFISH=y
+# CONFIG_UNISYSSPAR is not set
CONFIG_X86_PLATFORM_DEVICES=y
CONFIG_ACER_WMI=m
CONFIG_ACERHDF=m
@@ -5722,6 +5751,7 @@ CONFIG_MSI_WMI=m
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_ACPI_TOSHIBA=m
CONFIG_TOSHIBA_BT_RFKILL=m
+CONFIG_TOSHIBA_HAPS=m
CONFIG_ACPI_CMPC=m
CONFIG_INTEL_IPS=m
CONFIG_IBM_RTL=m
@@ -5752,6 +5782,10 @@ CONFIG_COMMON_CLK=y
#
# Hardware Spinlock drivers
#
+
+#
+# Clock Source drivers
+#
CONFIG_CLKEVT_I8253=y
CONFIG_I8253_LOCK=y
CONFIG_CLKBLD_I8253=y
@@ -5786,8 +5820,9 @@ CONFIG_EXTCON=m
#
# Extcon Device Drivers
#
-CONFIG_EXTCON_GPIO=m
# CONFIG_EXTCON_ADC_JACK is not set
+CONFIG_EXTCON_GPIO=m
+CONFIG_EXTCON_SM5502=m
CONFIG_MEMORY=y
CONFIG_IIO=m
CONFIG_IIO_BUFFER=y
@@ -5807,11 +5842,13 @@ CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m
CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
# CONFIG_KXSD9 is not set
# CONFIG_MMA8452 is not set
+CONFIG_KXCJK1013=m
#
# Analog to digital converters
#
# CONFIG_AD7266 is not set
+# CONFIG_AD7291 is not set
# CONFIG_AD7298 is not set
# CONFIG_AD7476 is not set
# CONFIG_AD7791 is not set
@@ -5819,6 +5856,7 @@ CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
# CONFIG_AD7887 is not set
# CONFIG_AD7923 is not set
# CONFIG_AD799X is not set
+# CONFIG_MAX1027 is not set
# CONFIG_MAX1363 is not set
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
@@ -5859,6 +5897,7 @@ CONFIG_IIO_ST_SENSORS_CORE=m
# CONFIG_AD7303 is not set
# CONFIG_MAX517 is not set
# CONFIG_MCP4725 is not set
+# CONFIG_MCP4922 is not set
#
# Frequency Synthesizers DDS/PLL
@@ -5909,10 +5948,12 @@ CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
# CONFIG_CM32181 is not set
# CONFIG_CM36651 is not set
# CONFIG_GP2AP020A00F is not set
+# CONFIG_ISL29125 is not set
CONFIG_HID_SENSOR_ALS=m
# CONFIG_HID_SENSOR_PROX is not set
# CONFIG_SENSORS_LM3533 is not set
# CONFIG_LTR501 is not set
+# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_SENSORS_TSL2563 is not set
# CONFIG_TSL4531 is not set
@@ -5922,6 +5963,7 @@ CONFIG_HID_SENSOR_ALS=m
# Magnetometer sensors
#
# CONFIG_AK8975 is not set
+# CONFIG_AK09911 is not set
# CONFIG_MAG3110 is not set
CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
CONFIG_IIO_ST_MAGN_3AXIS=m
@@ -5947,6 +5989,7 @@ CONFIG_IIO_INTERRUPT_TRIGGER=m
# CONFIG_MPL115 is not set
# CONFIG_MPL3115 is not set
# CONFIG_IIO_ST_PRESS is not set
+# CONFIG_T5403 is not set
#
# Lightning sensors
@@ -5976,10 +6019,11 @@ CONFIG_FMC_CHARDEV=m
#
CONFIG_GENERIC_PHY=y
CONFIG_BCM_KONA_USB2_PHY=m
-CONFIG_PHY_SAMSUNG_USB2=m
CONFIG_POWERCAP=y
CONFIG_INTEL_RAPL=m
# CONFIG_MCB is not set
+CONFIG_RAS=y
+CONFIG_THUNDERBOLT=m
#
# Firmware Drivers
@@ -6001,6 +6045,7 @@ CONFIG_ISCSI_IBFT=m
#
# CONFIG_EFI_VARS is not set
CONFIG_EFI_RUNTIME_MAP=y
+CONFIG_EFI_RUNTIME_WRAPPERS=y
CONFIG_UEFI_CPER=y
#
@@ -6322,7 +6367,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
-CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_BOOT_PRINTK_DELAY is not set
CONFIG_DYNAMIC_DEBUG=y
@@ -6390,7 +6435,6 @@ CONFIG_TIMER_STATS=y
# Lock Debugging (spinlocks, mutexes, etc...)
#
# 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_WW_MUTEX_SLOWPATH is not set
@@ -6412,7 +6456,6 @@ CONFIG_DEBUG_BUGVERBOSE=y
#
# RCU Debugging
#
-# CONFIG_PROVE_RCU_DELAY is not set
# CONFIG_SPARSE_RCU_POINTER is not set
# CONFIG_TORTURE_TEST is not set
# CONFIG_RCU_TORTURE_TEST is not set
@@ -6431,7 +6474,6 @@ CONFIG_NOP_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
@@ -6489,11 +6531,14 @@ CONFIG_PERCPU_TEST=m
CONFIG_ASYNC_RAID6_TEST=m
# CONFIG_TEST_STRING_HELPERS is not set
CONFIG_TEST_KSTRTOX=m
+# CONFIG_TEST_RHASHTABLE is not set
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_TEST_MODULE is not set
# CONFIG_TEST_USER_COPY is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIRMWARE is not set
+# CONFIG_TEST_UDELAY is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
@@ -6664,6 +6709,7 @@ CONFIG_CRYPTO_CAST5_AVX_X86_64=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_CAST6_AVX_X86_64=m
CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_DES3_EDE_X86_64=m
CONFIG_CRYPTO_FCRYPT=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_SALSA20=m
@@ -6693,6 +6739,7 @@ CONFIG_CRYPTO_LZ4HC=m
# Random Number Generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
+# CONFIG_CRYPTO_DRBG_MENU is not set
CONFIG_CRYPTO_USER_API=m
CONFIG_CRYPTO_USER_API_HASH=m
CONFIG_CRYPTO_USER_API_SKCIPHER=m
@@ -6704,12 +6751,17 @@ CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
CONFIG_CRYPTO_DEV_CCP=y
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
+CONFIG_CRYPTO_DEV_QAT=m
+CONFIG_CRYPTO_DEV_QAT_DH895xCC=m
CONFIG_ASYMMETRIC_KEY_TYPE=m
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
CONFIG_PUBLIC_KEY_ALGO_RSA=m
CONFIG_X509_CERTIFICATE_PARSER=m
+CONFIG_PKCS7_MESSAGE_PARSER=m
+CONFIG_PKCS7_TEST_KEY=m
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
+CONFIG_HAVE_KVM_IRQFD=y
CONFIG_HAVE_KVM_IRQ_ROUTING=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_APIC_ARCHITECTURE=y
@@ -6740,6 +6792,7 @@ CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_IO=y
CONFIG_PERCPU_RWSEM=y
CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
+CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
CONFIG_CRC_CCITT=m
CONFIG_CRC16=m
CONFIG_CRC_T10DIF=m
@@ -6797,6 +6850,8 @@ CONFIG_HAS_DMA=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_CPU_RMAP=y
CONFIG_DQL=y
+CONFIG_GLOB=y
+# CONFIG_GLOB_SELFTEST is not set
CONFIG_NLATTR=y
CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
CONFIG_LRU_CACHE=m
@@ -6820,3 +6875,4 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
CONFIG_FONT_AUTOSELECT=y
+CONFIG_ARCH_HAS_SG_CHAIN=y
diff --git a/libre/lirc/PKGBUILD b/libre/lirc/PKGBUILD
index 960668875..4a0f5f8f6 100644
--- a/libre/lirc/PKGBUILD
+++ b/libre/lirc/PKGBUILD
@@ -7,8 +7,8 @@
_kernelname=
if [[ ${_kernelname} == "" ]]; then
- _basekernel=3.16
- _archrel=5
+ _basekernel=3.17
+ _archrel=7
_parabolarel=1
elif [[ ${_kernelname} == -lts ]]; then
_basekernel=3.14
diff --git a/libre/tp_smapi/PKGBUILD b/libre/tp_smapi/PKGBUILD
index 9e8ce28db..c37648bdf 100644
--- a/libre/tp_smapi/PKGBUILD
+++ b/libre/tp_smapi/PKGBUILD
@@ -13,12 +13,12 @@
_kernelname=
if [[ ${_kernelname} == "" ]]; then
- _basekernel=3.16
- _archrel=54
+ _basekernel=3.17
+ _archrel=55
_parabolarel=1
elif [[ ${_kernelname} == -lts ]]; then
_basekernel=3.14
- _archrel=33
+ _archrel=34
_parabolarel=1
elif [[ ${_kernelname} == -grsec ]]; then
_basekernel=3.16
diff --git a/libre/vhba-module/PKGBUILD b/libre/vhba-module/PKGBUILD
index 4cffe3682..58a02d531 100644
--- a/libre/vhba-module/PKGBUILD
+++ b/libre/vhba-module/PKGBUILD
@@ -8,8 +8,8 @@
_kernelname=
if [[ ${_kernelname} == "" ]]; then
- _basekernel=3.16
- _archrel=8
+ _basekernel=3.17
+ _archrel=9
_parabolarel=1
elif [[ ${_kernelname} == -lts ]]; then
_basekernel=3.14